Repository: DEVSENSE/Phalanger Branch: master Commit: d6d9b30c0678 Files: 2625 Total size: 23.4 MB Directory structure: gitextract_cflsze1v/ ├── .gitignore ├── Deployment/ │ ├── Bin/ │ │ └── gacall.cmd │ ├── Dynamic/ │ │ └── verify.bat │ ├── License.rtf │ ├── License.txt │ ├── Machine.config │ ├── Samples/ │ │ ├── ClassLibraryExt/ │ │ │ ├── AssemblyInfo.cs │ │ │ ├── Class.cs │ │ │ ├── ClassLibraryExt.csproj │ │ │ ├── ClassLibraryExt.sln │ │ │ ├── Globals.cs │ │ │ └── Key.snk │ │ ├── ConsoleApplication/ │ │ │ ├── ConsoleApplication.sln │ │ │ ├── MultiScriptAssembly/ │ │ │ │ ├── build.cmd │ │ │ │ ├── ext/ │ │ │ │ │ ├── defs.php │ │ │ │ │ ├── fncs.php │ │ │ │ │ └── types.php │ │ │ │ └── main.php │ │ │ ├── Phalanger greeting/ │ │ │ │ ├── Phalanger greeting.phpproj │ │ │ │ ├── Program.php │ │ │ │ └── build.cmd │ │ │ ├── disks/ │ │ │ │ ├── Program.php │ │ │ │ ├── build.cmd │ │ │ │ └── disks.phpproj │ │ │ ├── netmodules/ │ │ │ │ ├── Program.php │ │ │ │ ├── a.php │ │ │ │ ├── b.php │ │ │ │ ├── build.cmd │ │ │ │ └── netmodules.phpproj │ │ │ └── quadratic/ │ │ │ ├── Program.php │ │ │ ├── build.cmd │ │ │ └── quadratic.phpproj │ │ ├── Extensions/ │ │ │ ├── Exif/ │ │ │ │ ├── App.config │ │ │ │ ├── AssemblyInfo.cs │ │ │ │ ├── Class.cs │ │ │ │ └── Exif.csproj │ │ │ ├── Extensions.sln │ │ │ ├── Ming/ │ │ │ │ ├── App.config │ │ │ │ ├── AssemblyInfo.cs │ │ │ │ ├── Class.cs │ │ │ │ └── Ming.csproj │ │ │ └── Zlib/ │ │ │ ├── App.config │ │ │ ├── AssemblyInfo.cs │ │ │ ├── Class.cs │ │ │ └── Zlib.csproj │ │ ├── LinqAndGenerics/ │ │ │ ├── App.config │ │ │ ├── Demo.php │ │ │ ├── Generics.php │ │ │ ├── Interop.php │ │ │ ├── Linq.php │ │ │ ├── LinqAndGenerics.phpproj │ │ │ ├── LinqAndGenerics.sln │ │ │ └── build.cmd │ │ └── WinForms/ │ │ ├── App.config │ │ ├── Form1.php │ │ ├── Form1.resx │ │ ├── Form1.user.php │ │ ├── Mandelbrot.php │ │ ├── Program.php │ │ ├── TrickyButton.php │ │ ├── WinForms.phpproj │ │ ├── WinForms.sln │ │ └── build.cmd │ ├── Web.config │ ├── WebSamples/ │ │ ├── ASP.NET/ │ │ │ └── FormsAuth/ │ │ │ ├── Default.aspx │ │ │ ├── Default.aspx.php │ │ │ ├── Login.aspx │ │ │ ├── Login.aspx.php │ │ │ └── Web.config │ │ ├── Extensions/ │ │ │ ├── Index.html │ │ │ ├── Web.config │ │ │ ├── clock.php │ │ │ ├── getpdf.php │ │ │ ├── graphics.php │ │ │ └── image.php │ │ ├── MultiScriptAssembly/ │ │ │ ├── Web.config │ │ │ ├── build_ext.cmd │ │ │ ├── ext/ │ │ │ │ ├── defs.php │ │ │ │ ├── fncs.php │ │ │ │ └── types.php │ │ │ └── index.php │ │ ├── SimpleScripts/ │ │ │ ├── Config.php │ │ │ ├── Forms.php │ │ │ ├── Index.html │ │ │ └── Session.php │ │ └── Tests/ │ │ ├── Arrays/ │ │ │ ├── array_map.php │ │ │ ├── array_multisort.php │ │ │ ├── array_reduce1.php │ │ │ ├── array_reduce2.php │ │ │ └── usort.php │ │ ├── Functions/ │ │ │ ├── global.php │ │ │ ├── indirect.php │ │ │ └── references.php │ │ ├── MSDN.css │ │ ├── Objects/ │ │ │ ├── object_creation.php │ │ │ ├── static_fields.php │ │ │ └── static_methods.php │ │ ├── index.php │ │ ├── test_includer.php │ │ └── web.config │ └── setpath.bat ├── Documentation/ │ ├── HowTo/ │ │ ├── Phalanger manual installation.txt │ │ ├── debug PHP website.txt │ │ ├── force x86 execution.txt │ │ └── website in IIS7.txt │ ├── Logo/ │ │ ├── AspNetPoweredLogo.psd │ │ ├── AspNetPoweredLogoLight.psd │ │ ├── Credits.txt │ │ ├── PhalangerCompactLogo.psd │ │ ├── PhalangerLogo-fb.psd │ │ ├── PhalangerLogo.psd │ │ ├── PhalangerLogoWeb.psd │ │ ├── PhalangerPoweredLogo.psd │ │ ├── PhalangerPoweredLogoPink.psd │ │ ├── PhalangerPoweredLogoYellow.psd │ │ ├── PhalangerRed.psd │ │ └── PhalangerRedLay.psd │ └── User/ │ └── User.docx ├── LICENSE.txt ├── README.md ├── Samples/ │ ├── PersonalWebSite/ │ │ ├── Admin/ │ │ │ ├── Albums.aspx │ │ │ ├── Albums.aspx.php │ │ │ ├── Details.aspx │ │ │ ├── Details.aspx.php │ │ │ ├── Photos.aspx │ │ │ └── Photos.aspx.php │ │ ├── Albums.aspx │ │ ├── Albums.aspx.php │ │ ├── App_Code/ │ │ │ ├── Album.php │ │ │ ├── Photo.php │ │ │ ├── PhotoManager.php │ │ │ └── PhotoSize.php │ │ ├── App_Data/ │ │ │ ├── personal-add.sql │ │ │ └── personal-remove.sql │ │ ├── App_Themes/ │ │ │ ├── Black/ │ │ │ │ ├── Default.css │ │ │ │ ├── Default.skin │ │ │ │ └── frame.css │ │ │ └── White/ │ │ │ ├── Default.css │ │ │ ├── Default.skin │ │ │ └── Frame.css │ │ ├── Default.aspx │ │ ├── Default.aspx.php │ │ ├── Default.master │ │ ├── Default.master.php │ │ ├── Details.aspx │ │ ├── Details.aspx.php │ │ ├── Download.aspx │ │ ├── Download.aspx.php │ │ ├── Global.asax │ │ ├── Handler.ashx │ │ ├── Links.aspx │ │ ├── Links.aspx.php │ │ ├── MyTemplate.vstemplate │ │ ├── Photos.aspx │ │ ├── Photos.aspx.php │ │ ├── ProjectName.webproj │ │ ├── Register.aspx │ │ ├── Register.aspx.php │ │ ├── Resume.aspx │ │ ├── Resume.aspx.php │ │ ├── Upload/ │ │ │ └── _dummy │ │ ├── Web.config │ │ ├── Web.sitemap │ │ └── Welcome.html │ ├── PersonalWebSite.sln │ ├── PersonalWebSite.vssscc │ └── RegEditPHP/ │ ├── RegEditPHP/ │ │ ├── CLRException.php │ │ ├── InputBox.cs.resx │ │ ├── InputBox.hr.resx │ │ ├── InputBox.php │ │ ├── InputBox.resx │ │ ├── InputBox.user.php │ │ ├── LanguageSelector.cs.resx │ │ ├── LanguageSelector.hr.resx │ │ ├── LanguageSelector.php │ │ ├── LanguageSelector.resx │ │ ├── LanguageSelector.user.php │ │ ├── NumericEditor.cs.resx │ │ ├── NumericEditor.hr.resx │ │ ├── NumericEditor.php │ │ ├── NumericEditor.resx │ │ ├── NumericEditor.user.php │ │ ├── Program.php │ │ ├── RegEditPHP.exe.manifest │ │ ├── RegEditPHP.phpproj │ │ ├── ResourceAccessor.php │ │ ├── Resources/ │ │ │ └── readme.txt │ │ ├── Resources.cs.resx │ │ ├── Resources.hr.resx │ │ ├── Resources.resx │ │ ├── SettingsProvider.php │ │ ├── Sorter.php │ │ ├── ValueEditor.cs.resx │ │ ├── ValueEditor.hr.resx │ │ ├── ValueEditor.php │ │ ├── ValueEditor.resx │ │ ├── ValueEditor.user.php │ │ ├── dlgAbout.cs.resx │ │ ├── dlgAbout.hr.resx │ │ ├── dlgAbout.php │ │ ├── dlgAbout.resx │ │ ├── dlgAbout.user.php │ │ ├── frmMain.cs.resx │ │ ├── frmMain.hr.resx │ │ ├── frmMain.php │ │ ├── frmMain.resx │ │ ├── frmMain.user.php │ │ ├── readme.cs.rtf │ │ ├── readme.hr.rtf │ │ └── readme.rtf │ ├── RegEditPHP.sln │ └── RegEditPHP.vssscc ├── Solutions/ │ ├── Phalanger.cmd │ ├── Phalanger.sln │ ├── Phalanger.sln.DotSettings │ ├── Phalanger.sln.cmd │ └── Phalanger.vssscc ├── Source/ │ ├── Build/ │ │ ├── AssemblyInfoCommon.cs │ │ ├── Common.Build.settings │ │ └── Common.Build.targets │ ├── ClassLibrary/ │ │ ├── Arrays.cs │ │ ├── AssemblyInfo.cs │ │ ├── AssemblyResources.cs │ │ ├── BitConverter.cs │ │ ├── CLR.cs │ │ ├── CRC32.cs │ │ ├── CharMap.cs │ │ ├── CharType.cs │ │ ├── ClassLibrary.csproj │ │ ├── ClassLibrary.nuspec │ │ ├── ClassLibrary.snk │ │ ├── Configuration.CLR.cs │ │ ├── Configuration.cs │ │ ├── Constants.cs │ │ ├── Data.CLR/ │ │ │ ├── Connection.cs │ │ │ ├── ConnectionManager.cs │ │ │ ├── Result.cs │ │ │ └── Statement.cs │ │ ├── DateTime.CLR/ │ │ │ ├── DateTime.cs │ │ │ ├── DateTimeParsing.cs │ │ │ └── TimeZones.cs │ │ ├── DebugTests.CLR.cs │ │ ├── Doc/ │ │ │ ├── Arrays.xml │ │ │ ├── RootPage.html │ │ │ ├── Streams.xml │ │ │ ├── Strings.xml │ │ │ └── Variables.xml │ │ ├── Errors.cs │ │ ├── FileSystem.CLR.cs │ │ ├── FileSystem.Directory.cs │ │ ├── FileSystem.Glob.cs │ │ ├── FileSystem.Path.cs │ │ ├── FileSystem.cs │ │ ├── Filter.cs │ │ ├── Functions.cs │ │ ├── Generated/ │ │ │ ├── StrToTimeScanner.cs │ │ │ ├── jsonLexer.cs │ │ │ └── jsonParser.cs │ │ ├── Generators/ │ │ │ ├── Generate.cmd │ │ │ ├── StrToTime.lex │ │ │ ├── json.lex │ │ │ └── json.y │ │ ├── Hash.cs │ │ ├── Highlighting.cs │ │ ├── LibraryDescriptor.cs │ │ ├── Locale.cs │ │ ├── Mailer.CLR.cs │ │ ├── Math.cs │ │ ├── MersenneTwister.cs │ │ ├── Misc.cs │ │ ├── Miscellaneous.cs │ │ ├── Network.CLR.cs │ │ ├── Objects.cs │ │ ├── Output.CLR.cs │ │ ├── PhpFormatter.CLR.cs │ │ ├── PhpHttpUtility.cs │ │ ├── PhpIni.CLR.cs │ │ ├── PhpIniOptions.CLR.cs │ │ ├── PhpIniParser.CLR.cs │ │ ├── PhpJson.cs │ │ ├── PhpTokenizer.cs │ │ ├── Process.CLR.cs │ │ ├── RegExpPerl.cs │ │ ├── RegExpPosix.cs │ │ ├── Resources/ │ │ │ └── WindowsTZ.xml │ │ ├── SPL/ │ │ │ ├── Autoload.cs │ │ │ ├── FileSystem.cs │ │ │ ├── Iterators.cs │ │ │ └── Objects.cs │ │ ├── Serializers.CLR.cs │ │ ├── Session.CLR.cs │ │ ├── Shell.CLR.cs │ │ ├── Streams.Sockets.CLR.cs │ │ ├── Streams.cs │ │ ├── Strings.Designer.cs │ │ ├── Strings.cs │ │ ├── Strings.resx │ │ ├── UUEncoding.cs │ │ ├── UrlRewriter.CLR.cs │ │ ├── UrlRewriter.TagsParser.cs │ │ ├── Utils.CoreCLR.cs │ │ ├── Variables.cs │ │ ├── Web.CLR.cs │ │ ├── Web.cs │ │ ├── web.config.install.xdt │ │ └── web.config.uninstall.xdt │ ├── ClassLibrary.Tests/ │ │ ├── ArraysTests.cs │ │ ├── ClassLibrary.Tests.csproj │ │ ├── ClassLibrary.Tests.snk │ │ ├── PhpDateTimeTests.cs │ │ ├── Properties/ │ │ │ └── AssemblyInfo.cs │ │ ├── RegExpPerlTests.cs │ │ ├── TimeZonesTests.cs │ │ └── UUEncodingTests.cs │ ├── Core/ │ │ ├── ApplicationContext.CLR.cs │ │ ├── ApplicationContext.cs │ │ ├── AssemblyInfo.cs │ │ ├── Attributes.cs │ │ ├── Binders/ │ │ │ ├── Binder.cs │ │ │ ├── BinderHelper.cs │ │ │ ├── InteropBinder.cs │ │ │ ├── PhpBinder.cs │ │ │ ├── PhpDynamicMetaObjects.cs │ │ │ ├── PhpGetMemberBinder.cs │ │ │ ├── PhpInvokeBinderKey.cs │ │ │ ├── PhpInvokeMemberBinder.cs │ │ │ ├── PhpOverloadResolver.cs │ │ │ ├── PhpRoutineExtensions.cs │ │ │ └── ReturnArgumentHelpers.cs │ │ ├── Comparisons.cs │ │ ├── Compiler/ │ │ │ ├── AST/ │ │ │ │ ├── ArrayEx.cs │ │ │ │ ├── AssignEx.cs │ │ │ │ ├── AstNodeExtension.cs │ │ │ │ ├── BinaryEx.cs │ │ │ │ ├── BuiltInFunctions.cs │ │ │ │ ├── CallSignature.cs │ │ │ │ ├── ConcatEx.cs │ │ │ │ ├── ConstantUse.cs │ │ │ │ ├── CustomAttributes.cs │ │ │ │ ├── DirectVariableUse.cs │ │ │ │ ├── Doc/ │ │ │ │ │ └── Nodes.xml │ │ │ │ ├── EchoStmt.cs │ │ │ │ ├── Expression.cs │ │ │ │ ├── FieldUse.cs │ │ │ │ ├── FunctionCall.cs │ │ │ │ ├── FunctionDecl.cs │ │ │ │ ├── GlobalCode.cs │ │ │ │ ├── IfStmt.cs │ │ │ │ ├── IncDecEx.cs │ │ │ │ ├── IndirectVariableUse.cs │ │ │ │ ├── ItemUse.cs │ │ │ │ ├── JumpStmt.cs │ │ │ │ ├── LambdaFunctionExpr.cs │ │ │ │ ├── ListEx.cs │ │ │ │ ├── Literal.cs │ │ │ │ ├── LoopStmt.cs │ │ │ │ ├── NewAndInstanceof.cs │ │ │ │ ├── NodeCompiler.cs │ │ │ │ ├── NodeCompilers.cs │ │ │ │ ├── PHPDocBlock.cs │ │ │ │ ├── ShellEx.cs │ │ │ │ ├── Statement.cs │ │ │ │ ├── SwitchStmt.cs │ │ │ │ ├── TernaryEx.cs │ │ │ │ ├── TryStmt.cs │ │ │ │ ├── TypeDecl.cs │ │ │ │ ├── TypeRef.cs │ │ │ │ ├── UnaryEx.cs │ │ │ │ ├── VariableUse.cs │ │ │ │ └── YieldEx.cs │ │ │ ├── Analyzer.cs │ │ │ ├── AppCompiler.CLR.cs │ │ │ ├── AstVisitor.cs │ │ │ ├── CodeGenerator/ │ │ │ │ ├── CallSitesBuilder.cs │ │ │ │ ├── Chains.cs │ │ │ │ ├── CodeGenerator.cs │ │ │ │ ├── Places.cs │ │ │ │ └── Stacks.cs │ │ │ ├── Managers.CLR.cs │ │ │ ├── Managers.cs │ │ │ ├── PhpTypeCode.cs │ │ │ ├── Statistics.cs │ │ │ ├── VariablesTable.cs │ │ │ └── WebServerManagers.CLR.cs │ │ ├── Configuration.CLR.cs │ │ ├── Configuration.CoreCLR.cs │ │ ├── Configuration.cs │ │ ├── Conversions.cs │ │ ├── ConversionsToClr.cs │ │ ├── Core.csproj │ │ ├── Core.nuspec │ │ ├── Core.snk │ │ ├── Doc/ │ │ │ ├── Common.xml │ │ │ ├── Conversions.xml │ │ │ ├── Externals.xml │ │ │ ├── Filters.xml │ │ │ ├── Operators.Overview.xml │ │ │ ├── Operators.xml │ │ │ ├── RootPage.html │ │ │ ├── Streams.xml │ │ │ └── Wrappers.xml │ │ ├── DynamicCode.cs │ │ ├── Emit/ │ │ │ ├── AssemblyBuilders.CLR.cs │ │ │ ├── AssemblyBuilders.cd │ │ │ ├── AssemblyBuilders.cs │ │ │ ├── ClrOverloadBuilder.cs │ │ │ ├── ClrStubBuilder.cs │ │ │ ├── DelegateBuilder.cs │ │ │ ├── DocFileBuilder.CLR.cs │ │ │ ├── FunctionBuilder.cs │ │ │ ├── ILEmitter.cs │ │ │ ├── LibraryBuilder.cs │ │ │ ├── Linq.txt │ │ │ ├── ModuleBuilders.CLR.cs │ │ │ ├── ModuleBuilders.cs │ │ │ ├── OverloadsBuilder.cs │ │ │ ├── PhpObjectBuilder.cs │ │ │ ├── PhpStackBuilder.cs │ │ │ ├── Places.cs │ │ │ ├── ReflectionCache.cs │ │ │ ├── ReflectionCacheGenerator.cs │ │ │ └── ScriptAssembly.cs │ │ ├── Errors.cs │ │ ├── Execution.cs │ │ ├── Functions.cs │ │ ├── GlobalVariables.CLR.cs │ │ ├── GlobalVariables.CoreCLR.cs │ │ ├── Hashtables.cs │ │ ├── HttpHeaders.CLR.cs │ │ ├── Info.cs │ │ ├── Library.CLR.cs │ │ ├── Library.CoreCLR.cs │ │ ├── Library.cs │ │ ├── LibraryVerifier.cs │ │ ├── Localizations/ │ │ │ ├── Strings.Designer.cs │ │ │ └── Strings.cs-CZ.resx │ │ ├── Logger.CLR.cs │ │ ├── Namespaces.cs │ │ ├── Operators.cs │ │ ├── OrderedDictionary.cs │ │ ├── Output.cs │ │ ├── PhpArray.cs │ │ ├── PhpBytes.cs │ │ ├── PhpCallback.cs │ │ ├── PhpObject.cs │ │ ├── PhpReference.cs │ │ ├── PhpResource.cs │ │ ├── PhpResourceManager.cs │ │ ├── PhpRuntimeChain.cs │ │ ├── PhpStack.cs │ │ ├── PhpStream.CLR.cs │ │ ├── PhpStream.CoreCLR.cs │ │ ├── PhpStream.cs │ │ ├── PhpString.cs │ │ ├── Reflection/ │ │ │ ├── Assemblies.CLR.cs │ │ │ ├── Assemblies.cs │ │ │ ├── CompilationUnits.CLR.cs │ │ │ ├── CompilationUnits.cs │ │ │ ├── Constants.cs │ │ │ ├── DAssembly.cd │ │ │ ├── DMember.cd │ │ │ ├── DMemberDesc.cd │ │ │ ├── Declarations.cs │ │ │ ├── Inclusions.CLR.cs │ │ │ ├── Inclusions.CoreCLR.cs │ │ │ ├── Inclusions.cs │ │ │ ├── Members.cs │ │ │ ├── MetaObject.cs │ │ │ ├── MethodDescs.cs │ │ │ ├── Methods.cs │ │ │ ├── Modules.CLR.cs │ │ │ ├── Modules.cs │ │ │ ├── Objects.cs │ │ │ ├── PhpLibraryModule.cs │ │ │ ├── Properties.cs │ │ │ ├── SourceUnit.CoreCLR.cs │ │ │ ├── SourceUnit.cs │ │ │ ├── TypeDescs.cs │ │ │ └── Types.cs │ │ ├── RequestContext.CLR.cs │ │ ├── RequestContext.CoreCLR.cs │ │ ├── RequestContext.cs │ │ ├── RequestHandler.CLR.cs │ │ ├── SPL/ │ │ │ ├── ArrayAccess.cs │ │ │ ├── Closure.cs │ │ │ ├── Countable.cs │ │ │ ├── Exception.cs │ │ │ ├── Iterators.cs │ │ │ ├── Misc.cs │ │ │ ├── Reflection.cs │ │ │ ├── ReflectionClass.cs │ │ │ ├── ReflectionFunction.cs │ │ │ ├── Serializable.cs │ │ │ └── SplObjectStorage.cs │ │ ├── Script.cs │ │ ├── ScriptContext.CLR.cs │ │ ├── ScriptContext.CoreCLR.cs │ │ ├── ScriptContext.cs │ │ ├── Serialization.CLR.cs │ │ ├── Serialization.cs │ │ ├── SessionHandler.CLR.cs │ │ ├── SimpleCompiler.cs │ │ ├── StackTrace.cs │ │ ├── Statistics.CLR.cs │ │ ├── StreamFilters.cs │ │ ├── StreamWrappers.CLR.cs │ │ ├── StreamWrappers.CoreCLR.cs │ │ ├── StreamWrappers.cs │ │ ├── Utilities/ │ │ │ └── GlobalScope.cs │ │ ├── Utils.CLR.cs │ │ ├── Utils.cs │ │ ├── Variables.cs │ │ ├── web.config.install.xdt │ │ └── web.config.uninstall.xdt │ ├── Core.CodeDom/ │ │ ├── CodeDomUnits.cs │ │ ├── CodeProvider.CLR.cs │ │ ├── Core.CodeDom.csproj │ │ ├── Core.CodeDom.nuspec │ │ ├── Helper.cs │ │ ├── Keywords.CLR.cs │ │ ├── PhpCodeDomParser.cs │ │ ├── PhpCompiler.CLR.cs │ │ ├── PhpGenerator.CLR.cs │ │ ├── Properties/ │ │ │ └── AssemblyInfo.cs │ │ ├── TypeConverters.CLR.cs │ │ ├── web.config.install.xdt │ │ └── web.config.uninstall.xdt │ ├── Core.DuckTyping/ │ │ ├── Core.DuckTyping.csproj │ │ ├── Core.DuckTyping.nuspec │ │ ├── Enumerables.cs │ │ ├── Generator.CLR.cs │ │ ├── Multitypes.cs │ │ ├── Properties/ │ │ │ └── AssemblyInfo.cs │ │ ├── Runtime.cs │ │ └── ScriptContext.Extension.cs │ ├── Core.Parsers/ │ │ ├── AST/ │ │ │ ├── ArrayEx.cs │ │ │ ├── AssignEx.cs │ │ │ ├── BinaryEx.cs │ │ │ ├── BuiltInFunctions.CoreCLR.cs │ │ │ ├── BuiltInFunctions.cs │ │ │ ├── CallSignature.cs │ │ │ ├── ConcatEx.cs │ │ │ ├── ConstantUse.cs │ │ │ ├── CustomAttributes.cs │ │ │ ├── DirectVariableUse.cs │ │ │ ├── EchoStmt.cs │ │ │ ├── Expression.cs │ │ │ ├── FieldUse.cs │ │ │ ├── FunctionCall.cs │ │ │ ├── FunctionDecl.cs │ │ │ ├── GlobalCode.cs │ │ │ ├── IfStmt.cs │ │ │ ├── IncDecEx.cs │ │ │ ├── IndirectVariableUse.cs │ │ │ ├── ItemUse.cs │ │ │ ├── JumpStmt.cs │ │ │ ├── LambdaFunctionExpr.cs │ │ │ ├── LangElement.cs │ │ │ ├── ListEx.cs │ │ │ ├── Literal.cs │ │ │ ├── LoopStmt.cs │ │ │ ├── NewAndInstanceof.cs │ │ │ ├── ShellEx.cs │ │ │ ├── Statement.cs │ │ │ ├── SwitchStmt.cs │ │ │ ├── TernaryEx.cs │ │ │ ├── TryStmt.cs │ │ │ ├── TypeDecl.cs │ │ │ ├── TypeRef.cs │ │ │ ├── UnaryEx.cs │ │ │ ├── VariableUse.cs │ │ │ └── YieldEx.cs │ │ ├── AssemblyResources.cs │ │ ├── Core.Parsers.csproj │ │ ├── Core.Parsers.nuspec │ │ ├── Errors.cs │ │ ├── Generated/ │ │ │ ├── Lexer.cs │ │ │ └── Parser.cs │ │ ├── Generators/ │ │ │ ├── Generate.cmd │ │ │ ├── Lexer.lex │ │ │ └── Parser.y │ │ ├── InclusionTypes.cs │ │ ├── LanguageFeatures.cs │ │ ├── Members.cs │ │ ├── Names.cs │ │ ├── PHPDocBlock.cs │ │ ├── Parsers/ │ │ │ ├── Convert.cs │ │ │ ├── DocCommentList.cs │ │ │ ├── GPPG.cs │ │ │ ├── Lexer.cs │ │ │ ├── Parser.cs │ │ │ ├── Scanner.cs │ │ │ ├── Tokenizer.cs │ │ │ └── Tokens.cs │ │ ├── PhpSourceFile.cs │ │ ├── Properties/ │ │ │ └── AssemblyInfo.cs │ │ ├── PropertyCollection.cs │ │ ├── SourceUnit.cs │ │ ├── Strings.Designer.cs │ │ ├── Strings.resx │ │ ├── Text/ │ │ │ ├── ILineBreaks.cs │ │ │ ├── Span.cs │ │ │ ├── TextPoint.cs │ │ │ ├── TextSpan.cs │ │ │ └── TextUtils.cs │ │ ├── TreeVisitor.cs │ │ └── Utils.cs │ ├── Core.Parsers.Tests/ │ │ ├── Core.Parsers.Tests.csproj │ │ ├── Core.Parsers.Tests.snk │ │ ├── LineBreaksTests.cs │ │ ├── PHPDocBlockTests.cs │ │ ├── Properties/ │ │ │ └── AssemblyInfo.cs │ │ ├── PropertyCollectionTests.cs │ │ ├── RelativePathTests.cs │ │ ├── StringUtilsTests.cs │ │ └── TokenizerTests.cs │ ├── Core.Tests/ │ │ ├── ConvertTests.cs │ │ ├── Core.Tests.csproj │ │ ├── Core.Tests.snk │ │ ├── NodeCompilersTests.cs │ │ ├── OperatorsTests.cs │ │ ├── PhpTypeCodeTests.cs │ │ ├── PrimitiveTypeTests.cs │ │ ├── Properties/ │ │ │ └── AssemblyInfo.cs │ │ └── TypeDescsTests.cs │ ├── Extensions/ │ │ ├── Curl/ │ │ │ ├── CURLcode.cs │ │ │ ├── Configuration.cs │ │ │ ├── Cookies.cs │ │ │ ├── Curl.cs │ │ │ ├── CurlForm.cs │ │ │ ├── CurlHandler.cs │ │ │ ├── CurlHttp.cs │ │ │ ├── CurlHttpPost.cs │ │ │ ├── CurlInfo.cs │ │ │ ├── CurlOption.Utils.cs │ │ │ ├── CurlOption.cs │ │ │ ├── CurlProto.cs │ │ │ ├── Enums.cs │ │ │ ├── Extension.Curl.csproj │ │ │ ├── Extension.Curl.nuspec │ │ │ ├── HttpBitsDownloader.cs │ │ │ ├── HttpBitsUploader.cs │ │ │ ├── HttpFormDataUploader.cs │ │ │ ├── HttpUploadBitsState.cs │ │ │ ├── HttpUtils.cs │ │ │ ├── LibraryDescriptor.cs │ │ │ ├── PhpCurlMultiResource.cs │ │ │ ├── PhpCurlResource.cs │ │ │ ├── Port.cs │ │ │ ├── Properties/ │ │ │ │ └── AssemblyInfo.cs │ │ │ ├── ScatterGatherBuffers.cs │ │ │ ├── Streams.cs │ │ │ ├── UserDefined.cs │ │ │ ├── Utils.cs │ │ │ ├── web.config.install.xdt │ │ │ └── web.config.uninstall.xdt │ │ ├── Extensions.snk │ │ ├── Gd2/ │ │ │ ├── Configuration.cs │ │ │ ├── Extension.Gd2.csproj │ │ │ ├── Extension.Gd2.nuspec │ │ │ ├── LibraryDescriptor.cs │ │ │ ├── PhpExif.cs │ │ │ ├── PhpGd.cs │ │ │ ├── PhpGdImageResource.cs │ │ │ ├── PhpImage.cs │ │ │ ├── Properties/ │ │ │ │ ├── AssemblyInfo.cs │ │ │ │ ├── Resources.Designer.cs │ │ │ │ └── Resources.resx │ │ │ ├── Utils.cs │ │ │ ├── web.config.install.xdt │ │ │ └── web.config.uninstall.xdt │ │ ├── GetText/ │ │ │ ├── Configuration.cs │ │ │ ├── Extension.GetText.csproj │ │ │ ├── Extension.GetText.nuspec │ │ │ ├── GetTextSharp/ │ │ │ │ ├── DatabaseResourceManager.cs │ │ │ │ ├── DatabaseResourceReader.cs │ │ │ │ ├── DatabaseResourceSet.cs │ │ │ │ ├── DictionaryGettextParserRequestor.cs │ │ │ │ ├── FileBasedResourceManager.cs │ │ │ │ ├── GettextResourceManager.cs │ │ │ │ ├── GettextResourceReader.cs │ │ │ │ ├── GettextResourceSet.cs │ │ │ │ ├── IGettextResourceRequestor.cs │ │ │ │ └── PoParser.cs │ │ │ ├── LibraryDescriptor.cs │ │ │ ├── PhpGetText.cs │ │ │ ├── Properties/ │ │ │ │ └── AssemblyInfo.cs │ │ │ ├── web.config.install.xdt │ │ │ └── web.config.uninstall.xdt │ │ ├── MSSql/ │ │ │ ├── AssemblyInfo.cs │ │ │ ├── Configuration.cs │ │ │ ├── Extension.MsSql.csproj │ │ │ ├── Extension.MsSql.nuspec │ │ │ ├── LibraryDescriptor.cs │ │ │ ├── MsSql.cs │ │ │ ├── PhpSqlDbConnection.cs │ │ │ ├── PhpSqlDbProcedure.cs │ │ │ ├── PhpSqlDbResult.cs │ │ │ ├── web.config.install.xdt │ │ │ └── web.config.uninstall.xdt │ │ ├── PDO/ │ │ │ ├── AssemblyInfo.cs │ │ │ ├── Extension.PDO.csproj │ │ │ ├── Extension.PDO.nuspec │ │ │ ├── PDO.Const.cs │ │ │ ├── PDO.cs │ │ │ ├── PDOAttributeType.cs │ │ │ ├── PDOCaseConversion.cs │ │ │ ├── PDOConfiguration.cs │ │ │ ├── PDOConnection.cs │ │ │ ├── PDOCursorType.cs │ │ │ ├── PDODriver.cs │ │ │ ├── PDOErrorMode.cs │ │ │ ├── PDOException.cs │ │ │ ├── PDOFetchType.cs │ │ │ ├── PDOGlobalConfig.cs │ │ │ ├── PDOLibraryDescriptor.cs │ │ │ ├── PDOLocalConfig.cs │ │ │ ├── PDONullHandling.cs │ │ │ ├── PDOParamType.cs │ │ │ ├── PDOStatement.PHP.cs │ │ │ ├── PDOStatement.cs │ │ │ ├── PDOStatics.cs │ │ │ ├── SQLSTATES.cs │ │ │ ├── web.config.install.xdt │ │ │ └── web.config.uninstall.xdt │ │ ├── PDOSQLServer/ │ │ │ ├── AssemblyInfo.cs │ │ │ ├── Extension.PDOSQLServer.csproj │ │ │ ├── Extension.PDOSQLServer.nuspec │ │ │ ├── PDOSQLServerConfiguration.cs │ │ │ ├── PDOSQLServerGlobalConfig.cs │ │ │ ├── PDOSQLServerLibraryDescriptor.cs │ │ │ ├── PDOSQLServerLocalConfig.cs │ │ │ ├── SQLServerPDODriver.cs │ │ │ ├── web.config.install.xdt │ │ │ └── web.config.uninstall.xdt │ │ ├── PDOSQLite/ │ │ │ ├── AssemblyInfo.cs │ │ │ ├── Extension.PDOSQLite.csproj │ │ │ ├── Extension.PDOSQLite.nuspec │ │ │ ├── PDOSQLiteConfiguration.cs │ │ │ ├── PDOSQLiteGlobalConfig.cs │ │ │ ├── PDOSQLiteLibraryDescriptor.cs │ │ │ ├── PDOSQLiteLocalConfig.cs │ │ │ ├── SQLitePDODriver.cs │ │ │ ├── SQLitePDOStatement.cs │ │ │ ├── packages.config │ │ │ ├── web.config.install.xdt │ │ │ └── web.config.uninstall.xdt │ │ ├── SQLite/ │ │ │ ├── AssemblyInfo.cs │ │ │ ├── Extension.SQLite.csproj │ │ │ ├── Extension.SQLite.nuspec │ │ │ ├── PhpSQLiteDbConnection.cs │ │ │ ├── PhpSQLiteDbResult.cs │ │ │ ├── SQLite.QueryResultKeys.cs │ │ │ ├── SQLite.Status.cs │ │ │ ├── SQLite.cs │ │ │ ├── SQLiteConfiguration.cs │ │ │ ├── SQLiteConnectionManager.cs │ │ │ ├── SQLiteDatabase.cs │ │ │ ├── SQLiteGlobalConfig.cs │ │ │ ├── SQLiteLibraryDescriptor.cs │ │ │ ├── SQLiteLocalConfig.cs │ │ │ ├── SQLiteResult.cs │ │ │ ├── packages.config │ │ │ ├── web.config.install.xdt │ │ │ └── web.config.uninstall.xdt │ │ ├── Soap/ │ │ │ ├── CodeConstants.cs │ │ │ ├── CompiledAssemblyCache.cs │ │ │ ├── Configuration.cs │ │ │ ├── CustomExceptions.cs │ │ │ ├── DynamicWebServiceProxy.cs │ │ │ ├── Enums.cs │ │ │ ├── Extension.Soap.csproj │ │ │ ├── Extension.Soap.nuspec │ │ │ ├── LibraryDescriptor.cs │ │ │ ├── MessageStorageException.cs │ │ │ ├── ParameterBinder.cs │ │ │ ├── PipelineConfiguration.cs │ │ │ ├── Properties/ │ │ │ │ └── AssemblyInfo.cs │ │ │ ├── ResultBinder.cs │ │ │ ├── ServiceCache.cs │ │ │ ├── SoapClient.cs │ │ │ ├── SoapFault.cs │ │ │ ├── SoapHttpClientProtocolExtended.cs │ │ │ ├── SoapMessageAccessClientExtension.cs │ │ │ ├── Strings.Designer.cs │ │ │ ├── Strings.resx │ │ │ ├── WsdlHelper.cs │ │ │ ├── web.config.install.xdt │ │ │ └── web.config.uninstall.xdt │ │ ├── Xml/ │ │ │ ├── AssemblyInfo.cs │ │ │ ├── Configuration.cs │ │ │ ├── Extension.Xml.csproj │ │ │ ├── Extension.Xml.nuspec │ │ │ ├── LibraryDescriptor.cs │ │ │ ├── PhpXmlParser.cs │ │ │ ├── Strings.Designer.cs │ │ │ ├── Strings.resx │ │ │ ├── XmlParserResource.cs │ │ │ ├── web.config.install.xdt │ │ │ └── web.config.uninstall.xdt │ │ ├── XmlDom/ │ │ │ ├── AssemblyInfo.cs │ │ │ ├── DomAttribute.cs │ │ │ ├── DomCharacterData.cs │ │ │ ├── DomCollections.cs │ │ │ ├── DomDocument.cs │ │ │ ├── DomElement.cs │ │ │ ├── DomEntity.cs │ │ │ ├── DomException.cs │ │ │ ├── DomImplementation.cs │ │ │ ├── DomMiscClasses.cs │ │ │ ├── DomMiscNodes.cs │ │ │ ├── DomNode.cs │ │ │ ├── DomXPath.cs │ │ │ ├── Extension.XmlDom.csproj │ │ │ ├── Extension.XmlDom.nuspec │ │ │ ├── LibXml.cs │ │ │ ├── LibraryDescriptor.cs │ │ │ ├── Resources.Designer.cs │ │ │ ├── Resources.resx │ │ │ ├── SimpleXml.cs │ │ │ ├── XmlDom.cs │ │ │ ├── XmlReader.cs │ │ │ ├── XsltProcessor.cs │ │ │ ├── packages.config │ │ │ ├── web.config.install.xdt │ │ │ └── web.config.uninstall.xdt │ │ ├── Zip/ │ │ │ ├── Extension.Zip.csproj │ │ │ ├── Extension.Zip.nuspec │ │ │ ├── FileHandleDataSource.cs │ │ │ ├── Properties/ │ │ │ │ └── AssemblyInfo.cs │ │ │ ├── StringDataSource.cs │ │ │ ├── ZipArchive.Const.cs │ │ │ ├── ZipArchive.cs │ │ │ ├── ZipConfiguration.cs │ │ │ ├── ZipGlobalConfig.cs │ │ │ ├── ZipLibraryDescriptor.cs │ │ │ ├── ZipLocalConfig.cs │ │ │ ├── ZipStatic.cs │ │ │ ├── ZipStreamWrapper.cs │ │ │ ├── packages.config │ │ │ ├── web.config.install.xdt │ │ │ └── web.config.uninstall.xdt │ │ ├── Zlib/ │ │ │ ├── AssemblyInfo.cs │ │ │ ├── BinaryChunkQueue.cs │ │ │ ├── Configuration.cs │ │ │ ├── Extension.Zlib.csproj │ │ │ ├── Extension.Zlib.nuspec │ │ │ ├── LibraryDescriptor.cs │ │ │ ├── PhpZlib.cs │ │ │ ├── ZlibFilter.cs │ │ │ ├── ZlibFilterFactory.cs │ │ │ ├── ZlibStreamWrapper.cs │ │ │ ├── packages.config │ │ │ ├── web.config.install.xdt │ │ │ └── web.config.uninstall.xdt │ │ ├── iconv/ │ │ │ ├── AssemblyInfo.cs │ │ │ ├── Configuration.cs │ │ │ ├── Extension.iconv.csproj │ │ │ ├── Extension.iconv.nuspec │ │ │ ├── IgnoreEncoderFallback.cs │ │ │ ├── LibraryDescriptor.cs │ │ │ ├── PhpNetIconv.cs │ │ │ ├── Resources/ │ │ │ │ └── translit.def │ │ │ ├── StopEncoderFallback.cs │ │ │ ├── Strings.Designer.cs │ │ │ ├── Strings.resx │ │ │ ├── TranslitEncoderFallback.cs │ │ │ ├── web.config.install.xdt │ │ │ └── web.config.uninstall.xdt │ │ └── mbstring/ │ │ ├── AssemblyInfo.cs │ │ ├── Configuration.cs │ │ ├── Extension.mbstring.csproj │ │ ├── Extension.mbstring.nuspec │ │ ├── LibraryDescriptor.cs │ │ ├── MbString.cs │ │ ├── web.config.install.xdt │ │ └── web.config.uninstall.xdt │ ├── Libraries/ │ │ └── SPL/ │ │ ├── AppendIterator.php │ │ ├── ArrayIterator.php │ │ ├── ArrayObject.php │ │ ├── BadFunctionCallException.php │ │ ├── BadMethodCallException.php │ │ ├── CachingIterator.php │ │ ├── Countable.php │ │ ├── DirectoryIterator.php │ │ ├── DomainException.php │ │ ├── EmptyIterator.php │ │ ├── FilterIterator.php │ │ ├── InfiniteIterator.php │ │ ├── InvalidArgumentException.php │ │ ├── IteratorIterator.php │ │ ├── LengthException.php │ │ ├── LimitIterator.php │ │ ├── LogicException.php │ │ ├── NorewindIterator.php │ │ ├── OutOfBoundsException.php │ │ ├── OutOfRangeException.php │ │ ├── OuterIterator.php │ │ ├── OverflowException.php │ │ ├── ParentIterator.php │ │ ├── RangeException.php │ │ ├── RecursiveArrayIterator.php │ │ ├── RecursiveCachingIterator.php │ │ ├── RecursiveDirectoryIterator.php │ │ ├── RecursiveFilterIterator.php │ │ ├── RecursiveIterator.php │ │ ├── RecursiveIteratorIterator.php │ │ ├── RuntimeException.php │ │ ├── SPL.php │ │ ├── SPL.phpproj │ │ ├── SPL.sln │ │ ├── SPL.vssscc │ │ ├── SeekableIterator.php │ │ ├── SimpleXMLIterator.php │ │ ├── SplFileInfo.php │ │ ├── SplFileObject.php │ │ ├── SplObjectStorage.php │ │ ├── SplObserver.php │ │ ├── SplSubject.php │ │ ├── SplTempFileObject.php │ │ ├── UnderFlowException.php │ │ ├── UnexpectedValueException.php │ │ ├── build-release.cmd │ │ └── build.cmd │ ├── MkDynamic/ │ │ ├── AssemblyInfo.cs │ │ ├── Main.cs │ │ ├── MkDynamic.csproj │ │ └── app.config │ ├── Phalanger.CompilerTask/ │ │ ├── AssemblyInfo.cs │ │ ├── CompilerErrorSink.cs │ │ ├── Phalanger.CompilerTask.csproj │ │ ├── Phalanger.CompilerTask.nuspec │ │ ├── Phalanger.targets │ │ ├── PhalangerCompilerTask.cs │ │ └── Properties/ │ │ ├── Resources.Designer.cs │ │ └── Resources.resx │ ├── PhpNetCompiler/ │ │ ├── AssemblyInfo.cs │ │ ├── Main.cs │ │ ├── app.config │ │ ├── phpc.csproj │ │ └── phpc.nuspec │ └── Readme.txt ├── Testing/ │ ├── Benchmarks/ │ │ ├── Micro/ │ │ │ ├── App.config │ │ │ ├── go.bat │ │ │ ├── go_php.bat │ │ │ ├── test.php │ │ │ └── test_env.php │ │ ├── Shootout/ │ │ │ ├── App.config │ │ │ ├── binary-trees.php │ │ │ ├── fannkuch.php │ │ │ ├── fasta.php │ │ │ ├── go.bat │ │ │ ├── go_php.bat │ │ │ ├── k-nucleotide.php │ │ │ ├── mandelbrot.php │ │ │ ├── nbody.php │ │ │ ├── pidigits.php │ │ │ ├── regex-dna.php │ │ │ ├── reverse-complement.php │ │ │ ├── spectral-norm.php │ │ │ ├── test.php │ │ │ └── test_env.php │ │ ├── regex/ │ │ │ ├── dotnet/ │ │ │ │ ├── Properties/ │ │ │ │ │ └── AssemblyInfo.cs │ │ │ │ ├── RETest.cs │ │ │ │ ├── RegExTest.csproj │ │ │ │ └── RegExTest.sln │ │ │ ├── java/ │ │ │ │ ├── automaton.jar │ │ │ │ ├── compile.bat │ │ │ │ ├── gnu-regexp-1.1.4.jar │ │ │ │ ├── icu4j-4_8_1_1.jar │ │ │ │ ├── jakarta-oro-2.0.8.jar │ │ │ │ ├── jakarta-regexp-1.5.jar │ │ │ │ ├── jint.jar │ │ │ │ ├── jregex1.2_01-src.jar │ │ │ │ ├── jregex1.2_01.jar │ │ │ │ ├── jrexx-1.1.1.jar │ │ │ │ ├── monq-1.1.1.jar │ │ │ │ ├── patbinfree153.jar │ │ │ │ ├── quercus-4.0.18-src.jar │ │ │ │ ├── regtest.java │ │ │ │ └── res.html │ │ │ └── php/ │ │ │ └── index.php │ │ ├── roadsend/ │ │ │ ├── App.config │ │ │ ├── go.bat │ │ │ ├── go_php.bat │ │ │ ├── readme.txt │ │ │ ├── test.php │ │ │ └── test_env.php │ │ └── timing.php │ ├── CodeDOM/ │ │ └── CodeDOMTest/ │ │ ├── CodeDOMTest (Orcas).vbproj │ │ ├── CodeDOMTest.vbproj │ │ ├── Module1.vb │ │ ├── My Project/ │ │ │ ├── Application.Designer.vb │ │ │ ├── Application.myapp │ │ │ ├── AssemblyInfo.vb │ │ │ ├── Resources.Designer.vb │ │ │ ├── Resources.resx │ │ │ ├── Settings.Designer.vb │ │ │ └── Settings.settings │ │ ├── Resources/ │ │ │ └── Help.txt │ │ └── Test.php │ ├── PHPT/ │ │ └── web/ │ │ ├── README..TXT │ │ ├── copy tests.bat │ │ ├── index.php │ │ ├── tests.js │ │ └── web.config │ └── Tests/ │ ├── @PHP/ │ │ ├── classes/ │ │ │ ├── Phalanger.inc │ │ │ ├── __call_001.php │ │ │ ├── __call_002.php.error │ │ │ ├── __set__get_001.php │ │ │ ├── __set__get_002.php.error │ │ │ ├── __set__get_003.php.error │ │ │ ├── __set__get_004.php │ │ │ ├── __set__get_005.php │ │ │ ├── __set_data_corrupt.php │ │ │ ├── abstract.php.error │ │ │ ├── abstract_class.php.error │ │ │ ├── abstract_derived.php.error │ │ │ ├── abstract_final.php.error │ │ │ ├── abstract_inherit.php.error │ │ │ ├── abstract_not_declared.php.error │ │ │ ├── abstract_redeclare.php.error │ │ │ ├── abstract_static.php.error │ │ │ ├── array_access_001.php │ │ │ ├── array_access_002.php │ │ │ ├── array_access_003.php │ │ │ ├── array_access_004.php │ │ │ ├── array_access_005.php │ │ │ ├── array_access_006.php │ │ │ ├── array_access_007.php │ │ │ ├── array_access_008.php │ │ │ ├── array_access_009.php │ │ │ ├── array_access_010.php │ │ │ ├── array_access_011.php │ │ │ ├── array_access_012.php.notest │ │ │ ├── array_access_013.php │ │ │ ├── assign_op_property_001.php │ │ │ ├── autoload_001.php │ │ │ ├── autoload_002.php │ │ │ ├── autoload_003.php │ │ │ ├── autoload_004.php.kb │ │ │ ├── autoload_005.php │ │ │ ├── autoload_006.php │ │ │ ├── autoload_derived.p5c │ │ │ ├── autoload_implements.p5c │ │ │ ├── autoload_interface.p5c │ │ │ ├── autoload_root.p5c │ │ │ ├── bug23951.php │ │ │ ├── bug24399.php │ │ │ ├── bug24445.php │ │ │ ├── bug26737.php │ │ │ ├── bug27468.php │ │ │ ├── bug27504.php │ │ │ ├── bug29446.php.error │ │ │ ├── class_abstract.php.error │ │ │ ├── class_example.php │ │ │ ├── class_final.php.error │ │ │ ├── class_stdclass.php │ │ │ ├── clone_001.php │ │ │ ├── clone_002.php │ │ │ ├── clone_003.php │ │ │ ├── clone_004.php │ │ │ ├── clone_005.php.error │ │ │ ├── clone_006.php │ │ │ ├── constants_scope_001.php │ │ │ ├── ctor_dtor.php │ │ │ ├── ctor_dtor_inheritance.php │ │ │ ├── ctor_failure.php.kb │ │ │ ├── ctor_name_clash.php │ │ │ ├── dereferencing_001.php │ │ │ ├── destructor_and_echo.php │ │ │ ├── destructor_and_exceptions.php.notest │ │ │ ├── destructor_and_globals.php.notest │ │ │ ├── destructor_and_references.php │ │ │ ├── destructor_inheritance.php │ │ │ ├── destructor_visibility_001.php.notest │ │ │ ├── destructor_visibility_002.php.notest │ │ │ ├── destructor_visibility_003.php │ │ │ ├── factory_001.php │ │ │ ├── factory_and_singleton_001.php │ │ │ ├── factory_and_singleton_002.php │ │ │ ├── factory_and_singleton_003.php.error │ │ │ ├── factory_and_singleton_004.php.error │ │ │ ├── factory_and_singleton_005.php.error │ │ │ ├── factory_and_singleton_006.php.error │ │ │ ├── factory_and_singleton_007.php.error │ │ │ ├── factory_and_singleton_008.php.error │ │ │ ├── factory_and_singleton_009.php.error │ │ │ ├── factory_and_singleton_010.php.error │ │ │ ├── final.php │ │ │ ├── final_abstract.php.error │ │ │ ├── final_ctor1.php.error │ │ │ ├── final_ctor2.php.error │ │ │ ├── final_redeclare.php.error │ │ │ ├── incdec_property_001.php │ │ │ ├── incdec_property_002.php │ │ │ ├── incdec_property_003.php │ │ │ ├── incdec_property_004.php │ │ │ ├── inheritance.php │ │ │ ├── inheritance_002.php │ │ │ ├── interface_and_extends.php.error │ │ │ ├── interface_class.php.error │ │ │ ├── interface_construct.php │ │ │ ├── interface_doubled.php │ │ │ ├── interface_implemented.php │ │ │ ├── interface_instantiate.php.error │ │ │ ├── interface_member.php.error │ │ │ ├── interface_method.php.error │ │ │ ├── interface_method_final.php.error │ │ │ ├── interface_method_private.php.error │ │ │ ├── interface_must_be_implemented.php.error │ │ │ ├── interface_optional_arg.php.kb │ │ │ ├── interface_optional_arg.removed.phpt.kb │ │ │ ├── interfaces_001.php │ │ │ ├── interfaces_002.php.error │ │ │ ├── interfaces_003.php.error │ │ │ ├── iterators_001.php │ │ │ ├── iterators_002.php │ │ │ ├── iterators_003.php │ │ │ ├── iterators_004.php │ │ │ ├── iterators_005.php.error │ │ │ ├── iterators_006.php │ │ │ ├── iterators_007.php │ │ │ ├── object_reference_001.php │ │ │ ├── private_001.php │ │ │ ├── private_002.php │ │ │ ├── private_003.php │ │ │ ├── private_003b.php │ │ │ ├── private_004.php │ │ │ ├── private_004b.php │ │ │ ├── private_005.php │ │ │ ├── private_005b.php │ │ │ ├── private_006.php │ │ │ ├── private_006b.php │ │ │ ├── private_007.php │ │ │ ├── private_007b.php │ │ │ ├── private_members.php │ │ │ ├── private_redeclare.php │ │ │ ├── protected_001.php │ │ │ ├── protected_001b.php │ │ │ ├── protected_002.php │ │ │ ├── serialize_001.php │ │ │ ├── singleton_001.php │ │ │ ├── static_mix_1.php.error │ │ │ ├── static_mix_2.php.error │ │ │ ├── static_properties_001.php │ │ │ ├── static_this.php.kb │ │ │ ├── tostring.php.notest │ │ │ ├── type_hinting_001.php │ │ │ ├── type_hinting_002.php.error │ │ │ ├── type_hinting_003.php │ │ │ ├── visibility_000a.php.error │ │ │ ├── visibility_000b.php.error │ │ │ ├── visibility_000c.php │ │ │ ├── visibility_001a.php.error │ │ │ ├── visibility_001b.php.error │ │ │ ├── visibility_001c.php │ │ │ ├── visibility_002a.php.error │ │ │ ├── visibility_002b.php.error │ │ │ ├── visibility_002c.php │ │ │ ├── visibility_003a.php │ │ │ ├── visibility_003b.php.error │ │ │ ├── visibility_003c.php │ │ │ ├── visibility_004a.php │ │ │ ├── visibility_004b.php │ │ │ ├── visibility_004c.php │ │ │ └── visibility_005.php │ │ ├── date/ │ │ │ ├── 002.php.kb │ │ │ ├── Phalanger.inc │ │ │ ├── bug13142.php.kb │ │ │ ├── bug14561.php.kb │ │ │ ├── bug17988.php │ │ │ ├── bug20382-1.php.kb │ │ │ ├── bug20382-2.php.kb │ │ │ ├── bug21399.php.kb │ │ │ ├── bug21966.php.kb │ │ │ ├── bug26090.php.kb │ │ │ ├── bug26198.php.kb │ │ │ ├── bug26317.php │ │ │ ├── bug26320.php │ │ │ ├── bug26694.php.kb │ │ │ ├── bug27719.php.kb │ │ │ ├── bug27780.php.kb │ │ │ ├── bug28024.php.kb │ │ │ ├── bug28088.php │ │ │ ├── bug28599.php │ │ │ ├── bug29150.php │ │ │ ├── bug29585.php │ │ │ ├── bug29595.php │ │ │ ├── bug30096.php.kb │ │ │ ├── bug30532.php.kb │ │ │ ├── bug32086.php.kb │ │ │ ├── bug32270.php.kb │ │ │ ├── bug32555.php.kb │ │ │ ├── bug32588.php.kb │ │ │ ├── bug33056.php │ │ │ ├── bug33414-1.php.kb │ │ │ ├── bug33414-2.php.kb │ │ │ ├── bug33415-1.php.kb │ │ │ ├── bug33415-2.php.kb │ │ │ ├── bug33452.php │ │ │ ├── bug33532.php.kb │ │ │ ├── bug33536.php.kb │ │ │ ├── bug33562.php │ │ │ ├── bug33563.php │ │ │ ├── bug33578.php │ │ │ ├── bug33869.php │ │ │ ├── bug33957.php.kb │ │ │ ├── bug34087.php.kb │ │ │ ├── bug34304.php.kb │ │ │ ├── bug34676.php │ │ │ ├── bug34771.php │ │ │ ├── bug35143.php │ │ │ ├── bug35218.php.kb │ │ │ ├── bug35414.php │ │ │ ├── bug35422.php │ │ │ ├── bug35425.php │ │ │ ├── bug35456.php │ │ │ ├── bug35499.php.kb │ │ │ ├── bug35624.php │ │ │ ├── bug35630.php │ │ │ ├── bug35699.php │ │ │ ├── bug35705.php │ │ │ ├── bug35885.php │ │ │ ├── bug35887.php │ │ │ ├── date.php │ │ │ ├── date_create-1.php │ │ │ ├── date_create-2.php │ │ │ ├── date_default_timezone_get-1.php.notest │ │ │ ├── date_default_timezone_get-2.php.notest │ │ │ ├── date_default_timezone_get-3.php │ │ │ ├── date_default_timezone_set-1.php.kb │ │ │ ├── date_modify-1.php │ │ │ ├── date_modify-2.php │ │ │ ├── date_modify-3.phpt │ │ │ ├── default-timezone-1.php │ │ │ ├── default-timezone-2.php │ │ │ ├── format-negative-timestamp.php │ │ │ ├── mktime-1.php.kb │ │ │ ├── mktime-2.php.kb │ │ │ ├── mktime-3.php.kb │ │ │ ├── strtotime.php │ │ │ └── timezone-configuration.php │ │ ├── doc_examples/ │ │ │ ├── Phalanger.inc │ │ │ ├── a.inc │ │ │ ├── function_foo.inc │ │ │ ├── noreturn.inc │ │ │ ├── return.inc │ │ │ ├── test001.php │ │ │ ├── test002.php │ │ │ ├── test003.php │ │ │ ├── test004.php │ │ │ ├── test005.php │ │ │ ├── test006.php │ │ │ ├── test007.php │ │ │ ├── test008.php │ │ │ ├── test009.php │ │ │ ├── test010.php │ │ │ ├── test011.php │ │ │ ├── test012.php.notest │ │ │ ├── test013.php │ │ │ ├── test014.php │ │ │ ├── test015.php │ │ │ ├── test016.php │ │ │ ├── test017.php │ │ │ ├── test018.php │ │ │ ├── test019.php │ │ │ ├── test020.php │ │ │ ├── test021.php │ │ │ ├── test022.php │ │ │ ├── test023.php │ │ │ ├── test024.php │ │ │ ├── test025.php │ │ │ ├── test026.php │ │ │ ├── test027.php │ │ │ ├── test028.php │ │ │ ├── test029.php │ │ │ ├── test030.php │ │ │ ├── test031.php │ │ │ ├── test032.php │ │ │ ├── test033.php │ │ │ ├── test034.php │ │ │ ├── test035.php │ │ │ ├── test036.php │ │ │ ├── test037.php │ │ │ ├── test038.php │ │ │ ├── test039.php │ │ │ ├── test040.php │ │ │ ├── test041.php │ │ │ ├── test042.php │ │ │ ├── test043.php │ │ │ ├── test044.php │ │ │ ├── test045.php │ │ │ ├── test046.php │ │ │ ├── test047.php │ │ │ ├── test048.php │ │ │ ├── test049.php │ │ │ ├── test050.php │ │ │ ├── test051.php │ │ │ ├── test052.php │ │ │ ├── test053.php │ │ │ ├── test054.php │ │ │ ├── test055.php │ │ │ ├── test056.php │ │ │ ├── test057.php │ │ │ ├── test058.php │ │ │ ├── test059.php │ │ │ ├── test060.php │ │ │ ├── test061.php │ │ │ ├── test062.php │ │ │ ├── test063.php │ │ │ ├── test064.php │ │ │ ├── test065.php │ │ │ ├── test066.php │ │ │ ├── test067.php │ │ │ ├── test068.php │ │ │ ├── test069.php │ │ │ ├── test070.php │ │ │ ├── test071.php │ │ │ ├── test072.php │ │ │ ├── test073.php │ │ │ ├── test074.php │ │ │ ├── test075.php │ │ │ ├── test076.php │ │ │ ├── test077.php │ │ │ ├── test078.php │ │ │ ├── test079.php │ │ │ ├── test080.php │ │ │ ├── test081.php │ │ │ ├── test082.php │ │ │ ├── test083.php │ │ │ ├── test084.php │ │ │ ├── test085.php │ │ │ ├── test086.php │ │ │ ├── test087.php │ │ │ ├── test088.php │ │ │ ├── test089.php │ │ │ ├── test090.php │ │ │ ├── test091.php │ │ │ ├── test092.php │ │ │ ├── test093.php │ │ │ ├── test094.php │ │ │ ├── test095.php │ │ │ ├── test096.php │ │ │ ├── test097.php │ │ │ ├── test098.php │ │ │ ├── test099.php │ │ │ ├── test100.php │ │ │ ├── test102.php │ │ │ ├── test103.php │ │ │ ├── test104.php │ │ │ ├── test105.php │ │ │ ├── test107.php │ │ │ ├── test108.php │ │ │ ├── test109.php │ │ │ ├── test110.php │ │ │ ├── test111.php │ │ │ ├── test112.php │ │ │ ├── test113.php │ │ │ ├── test114.php │ │ │ ├── test115.php │ │ │ ├── test116.php │ │ │ ├── test117.php │ │ │ ├── test118.php │ │ │ ├── test119.php │ │ │ ├── test120.php │ │ │ ├── test121.php │ │ │ ├── test122.php │ │ │ ├── test123.php │ │ │ ├── test124.php │ │ │ ├── test125.php │ │ │ ├── test126.php │ │ │ ├── test127.php │ │ │ ├── test128.php │ │ │ ├── test129.php │ │ │ ├── test130.php │ │ │ ├── test131.php │ │ │ ├── test132.php │ │ │ ├── test133.php │ │ │ ├── test134.php │ │ │ ├── test136.php │ │ │ ├── test137.php │ │ │ ├── test138.php │ │ │ ├── test139.php │ │ │ ├── test148.php │ │ │ ├── test149.php │ │ │ ├── test150.php │ │ │ ├── test151.php │ │ │ ├── test152.php │ │ │ ├── test153.php │ │ │ ├── test154.php │ │ │ ├── test155.php │ │ │ ├── test156.php │ │ │ ├── test158.php │ │ │ └── xyz.inc │ │ ├── lang/ │ │ │ ├── 001.php │ │ │ ├── 002.php │ │ │ ├── 003.php │ │ │ ├── 004.php │ │ │ ├── 005.php │ │ │ ├── 006.php │ │ │ ├── 007.php │ │ │ ├── 008.php │ │ │ ├── 009.php │ │ │ ├── 010.php │ │ │ ├── 011.php │ │ │ ├── 012.php │ │ │ ├── 013.php │ │ │ ├── 014.php │ │ │ ├── 015.inc │ │ │ ├── 015.php │ │ │ ├── 016.inc │ │ │ ├── 016.php │ │ │ ├── 017.php │ │ │ ├── 018.php │ │ │ ├── 019.php │ │ │ ├── 020.php │ │ │ ├── 021.php │ │ │ ├── 022.php │ │ │ ├── 023-1.inc │ │ │ ├── 023-2.inc │ │ │ ├── 023.php │ │ │ ├── 024.php │ │ │ ├── 025.php │ │ │ ├── 026.php │ │ │ ├── 027.php │ │ │ ├── 028.php │ │ │ ├── 030.php │ │ │ ├── 031.php.notest │ │ │ ├── 032.php │ │ │ ├── 036.php │ │ │ ├── 037.php │ │ │ ├── 038.php │ │ │ ├── 039.php │ │ │ ├── 040.php │ │ │ ├── Phalanger.inc │ │ │ ├── bison1.php │ │ │ ├── bug17115.php │ │ │ ├── bug18872.php │ │ │ ├── bug19566.php.notest │ │ │ ├── bug19943.php │ │ │ ├── bug20175.php │ │ │ ├── bug21094.php │ │ │ ├── bug21600.php │ │ │ ├── bug21669.php │ │ │ ├── bug21820.php.notest │ │ │ ├── bug21849.php │ │ │ ├── bug21961.php │ │ │ ├── bug22231.php │ │ │ ├── bug22367.php │ │ │ ├── bug22510.php │ │ │ ├── bug22592.php │ │ │ ├── bug22690.php │ │ │ ├── bug23279.php │ │ │ ├── bug23384.php │ │ │ ├── bug23489.php │ │ │ ├── bug23524.php │ │ │ ├── bug23584.php.notest │ │ │ ├── bug23624.php.kb │ │ │ ├── bug23922.php │ │ │ ├── bug24054.php │ │ │ ├── bug24396.php │ │ │ ├── bug24403.php │ │ │ ├── bug24436.php │ │ │ ├── bug24499.php │ │ │ ├── bug24573.php.notest │ │ │ ├── bug24640.php │ │ │ ├── bug24652.php │ │ │ ├── bug24658.php │ │ │ ├── bug24783.php │ │ │ ├── bug24908.php.notest │ │ │ ├── bug24926.php │ │ │ ├── bug24951.php.kb │ │ │ ├── bug25145.php.notest │ │ │ ├── bug25547.php │ │ │ ├── bug25652.php │ │ │ ├── bug25922.php │ │ │ ├── bug26182.php │ │ │ ├── bug26696.php │ │ │ ├── bug26866.php │ │ │ ├── bug26869.php │ │ │ ├── bug27354.php │ │ │ ├── bug27439.php │ │ │ ├── bug27443.php.notest │ │ │ ├── bug27535.php │ │ │ ├── bug28213.php │ │ │ ├── bug28800.php │ │ │ ├── bug29566.php │ │ │ ├── bug29893.php │ │ │ ├── bug29944.php │ │ │ ├── bug30578.php.kb │ │ │ ├── bug30638.php │ │ │ ├── bug30726.php │ │ │ ├── bug30862.php │ │ │ ├── bug32828.php.kb │ │ │ ├── bug32924.php │ │ │ ├── bug35176.php.notest │ │ │ ├── bug35382.php │ │ │ ├── bug7515.php │ │ │ ├── each_binary_safety.php │ │ │ ├── error_2_exception_001.php │ │ │ ├── foreach_with_object_001.php │ │ │ ├── foreach_with_references_001.php │ │ │ ├── inc.inc │ │ │ └── type_hints_001.php │ │ ├── new/ │ │ │ ├── Phalanger.inc │ │ │ └── phpt2php.cmd │ │ ├── standard/ │ │ │ ├── Phalanger.inc │ │ │ ├── array/ │ │ │ │ ├── 001.php │ │ │ │ ├── 002.php.notest │ │ │ │ ├── 003.php │ │ │ │ ├── 004.php │ │ │ │ ├── 005.php │ │ │ │ ├── 006.php.kb │ │ │ │ ├── 007.php.kb │ │ │ │ ├── 008.php │ │ │ │ ├── Phalanger.inc │ │ │ │ ├── array_change_key_case.php │ │ │ │ ├── array_chunk.php │ │ │ │ ├── array_count_values.php │ │ │ │ ├── array_diff_1.php │ │ │ │ ├── array_diff_key.php │ │ │ │ ├── array_intersect_1.php.kb │ │ │ │ ├── array_intersect_key.php │ │ │ │ ├── array_sum.php │ │ │ │ ├── array_walk_recursive.php │ │ │ │ ├── bug12776.php │ │ │ │ ├── bug14580.php │ │ │ │ ├── bug20381.php │ │ │ │ ├── bug20865.php │ │ │ │ ├── bug21182.php │ │ │ │ ├── bug21918.php │ │ │ │ ├── bug21998.php │ │ │ │ ├── bug22088.php │ │ │ │ ├── bug22463.php │ │ │ │ ├── bug23581.php │ │ │ │ ├── bug23788.php │ │ │ │ ├── bug24198.php │ │ │ │ ├── bug24220.php │ │ │ │ ├── bug24766.php │ │ │ │ ├── bug24897.php │ │ │ │ ├── bug24980.php │ │ │ │ ├── bug25359.php │ │ │ │ ├── bug25708.php │ │ │ │ ├── bug25758.php │ │ │ │ ├── bug26458.php │ │ │ │ ├── bug28739.php.kb │ │ │ │ ├── bug28974.php │ │ │ │ ├── bug29253.php.kb │ │ │ │ ├── bug29493.php │ │ │ │ ├── bug30266.php │ │ │ │ ├── bug30833.php │ │ │ │ ├── bug31158.php │ │ │ │ ├── bug31213.php │ │ │ │ ├── bug32021.php │ │ │ │ ├── bug33382.php │ │ │ │ ├── bug33940.php.kb │ │ │ │ ├── bug33989.php │ │ │ │ ├── bug34227.php │ │ │ │ ├── bug34982.php │ │ │ │ ├── bug35014.php │ │ │ │ ├── bug35022.php │ │ │ │ ├── bug35821.php │ │ │ │ ├── count_recursive.php │ │ │ │ ├── data.inc │ │ │ │ ├── locale_sort.php │ │ │ │ └── range.php │ │ │ ├── assert/ │ │ │ │ ├── Phalanger.inc │ │ │ │ └── assert.php │ │ │ ├── general_functions/ │ │ │ │ ├── 001.php │ │ │ │ ├── 002.php │ │ │ │ ├── 003.php │ │ │ │ ├── 004.data │ │ │ │ ├── 004.php │ │ │ │ ├── 005.php │ │ │ │ ├── 006.php │ │ │ │ ├── 007.php │ │ │ │ ├── 008.php.notest │ │ │ │ ├── 009.php │ │ │ │ ├── Phalanger.inc │ │ │ │ ├── bug25038.php │ │ │ │ ├── bug27678.php │ │ │ │ ├── bug29038.php │ │ │ │ ├── bug31190.php │ │ │ │ ├── bug32647.php │ │ │ │ ├── bug35229.php │ │ │ │ ├── getopt.php.kb │ │ │ │ ├── highlight_heredoc.php.notest │ │ │ │ ├── is_resource.php │ │ │ │ ├── proc_open.php.notest │ │ │ │ └── sunfuncts.php.kb │ │ │ ├── math/ │ │ │ │ ├── Phalanger.inc │ │ │ │ ├── abs.php │ │ │ │ ├── bug21523.php.notest │ │ │ │ ├── bug24142.php │ │ │ │ ├── bug25665.php.notest │ │ │ │ ├── bug25694.php │ │ │ │ ├── bug27646.php │ │ │ │ ├── bug28228.php.notest │ │ │ │ ├── bug30069.php │ │ │ │ ├── bug30695.php │ │ │ │ ├── floorceil.php │ │ │ │ ├── hexdec.php │ │ │ │ ├── log.php │ │ │ │ ├── pow.php │ │ │ │ ├── quicktester.inc │ │ │ │ └── round.php │ │ │ ├── network/ │ │ │ │ ├── Phalanger.inc │ │ │ │ ├── bug20134.php.kb │ │ │ │ ├── tcp4loop.php.kb │ │ │ │ ├── tcp6loop.php.kb │ │ │ │ ├── udgloop.php.notest │ │ │ │ ├── udp4loop.php.kb │ │ │ │ ├── udp6loop.php.kb │ │ │ │ └── unixloop.php.notest │ │ │ ├── reg/ │ │ │ │ ├── 001.php │ │ │ │ ├── 002.php │ │ │ │ ├── 003.php │ │ │ │ ├── 004.php │ │ │ │ ├── 005.php │ │ │ │ ├── 006.php │ │ │ │ ├── 007.php │ │ │ │ ├── 008.php │ │ │ │ ├── 009.php │ │ │ │ ├── 010.php │ │ │ │ ├── 011.php │ │ │ │ ├── 012.php │ │ │ │ ├── 013.php │ │ │ │ ├── 014.php │ │ │ │ ├── 015.php │ │ │ │ ├── 016.php │ │ │ │ └── Phalanger.inc │ │ │ ├── serialize/ │ │ │ │ ├── 001.php │ │ │ │ ├── 002.php │ │ │ │ ├── 003.php │ │ │ │ ├── 004.php │ │ │ │ ├── 005.php │ │ │ │ ├── 006.php │ │ │ │ ├── Autoload.inc │ │ │ │ ├── Phalanger.inc │ │ │ │ ├── bug14293.php │ │ │ │ ├── bug21957.php │ │ │ │ ├── bug23298.php │ │ │ │ ├── bug24063.php │ │ │ │ ├── bug25378.php │ │ │ │ ├── bug26762.php │ │ │ │ ├── bug27469.php │ │ │ │ ├── bug28325.php │ │ │ │ ├── bug30234.php │ │ │ │ ├── bug31402.php │ │ │ │ └── bug31442.php │ │ │ ├── strings/ │ │ │ │ ├── 004.php.notest │ │ │ │ ├── Phalanger.inc │ │ │ │ ├── add-and-stripcslashes.php │ │ │ │ ├── add-and-stripslashes.php │ │ │ │ ├── basename.php │ │ │ │ ├── bin2hex.php │ │ │ │ ├── bug20108.php │ │ │ │ ├── bug20169.php │ │ │ │ ├── bug20261.php │ │ │ │ ├── bug20927.php │ │ │ │ ├── bug20934.php.notest │ │ │ │ ├── bug21338.php │ │ │ │ ├── bug21453.php │ │ │ │ ├── bug21730.php │ │ │ │ ├── bug21744.php │ │ │ │ ├── bug22008.php │ │ │ │ ├── bug22187.php │ │ │ │ ├── bug22207.php.kb │ │ │ │ ├── bug22224.php │ │ │ │ ├── bug22227.php │ │ │ │ ├── bug22904.php │ │ │ │ ├── bug23650.php │ │ │ │ ├── bug23894.php │ │ │ │ ├── bug24098.php │ │ │ │ ├── bug24208.php │ │ │ │ ├── bug24281.php │ │ │ │ ├── bug24312.php.notest │ │ │ │ ├── bug25671.php │ │ │ │ ├── bug25707.php │ │ │ │ ├── bug26817.php.kb │ │ │ │ ├── bug26819.php.kb │ │ │ │ ├── bug26878.php │ │ │ │ ├── bug26973.php │ │ │ │ ├── bug27276.php │ │ │ │ ├── bug27278.php │ │ │ │ ├── bug27295.php │ │ │ │ ├── bug27457.php │ │ │ │ ├── bug27675.php │ │ │ │ ├── bug28386.php │ │ │ │ ├── bug33076.php │ │ │ │ ├── chr_ord.php │ │ │ │ ├── chunk_split.php │ │ │ │ ├── count_chars.php │ │ │ │ ├── crc32.php │ │ │ │ ├── crypt.php.kb │ │ │ │ ├── explode.php │ │ │ │ ├── htmlentities.php.notest │ │ │ │ ├── htmlentities01.php.notest │ │ │ │ ├── htmlentities02.php.notest │ │ │ │ ├── htmlentities03.php.notest │ │ │ │ ├── htmlentities04.php.notest │ │ │ │ ├── htmlentities05.php.notest │ │ │ │ ├── htmlentities06.php.notest │ │ │ │ ├── htmlentities07.php.notest │ │ │ │ ├── htmlentities08.php.notest │ │ │ │ ├── htmlentities09.php.notest │ │ │ │ ├── htmlentities10.php.notest │ │ │ │ ├── htmlentities11.php.notest │ │ │ │ ├── htmlentities12.php.notest │ │ │ │ ├── htmlentities13.php.notest │ │ │ │ ├── htmlentities14.php.notest │ │ │ │ ├── htmlentities15.php.notest │ │ │ │ ├── htmlentities16.php.notest │ │ │ │ ├── htmlentities17.php.notest │ │ │ │ ├── http_build_query.php.kb │ │ │ │ ├── implode.php │ │ │ │ ├── md5.php │ │ │ │ ├── md5raw.php │ │ │ │ ├── nl2br.php │ │ │ │ ├── quicktester.inc │ │ │ │ ├── sha1.php │ │ │ │ ├── sha1raw.php │ │ │ │ ├── sprintf_f.php │ │ │ │ ├── str_repeat.php │ │ │ │ ├── str_shuffle.php │ │ │ │ ├── str_word_count.php │ │ │ │ ├── strcspn.php │ │ │ │ ├── strings001.php │ │ │ │ ├── strip_tags.php.kb │ │ │ │ ├── strpos.php │ │ │ │ ├── strrev.php │ │ │ │ ├── strripos.php │ │ │ │ ├── strrpos.php │ │ │ │ ├── strspn.php │ │ │ │ ├── strstr.php │ │ │ │ ├── strtoupper.php │ │ │ │ ├── strtr.php │ │ │ │ ├── strval.php │ │ │ │ ├── substr_count.php │ │ │ │ ├── substr_replace.php │ │ │ │ ├── trim.php.kb │ │ │ │ ├── url_t.php.kb │ │ │ │ └── wordwrap.php │ │ │ └── time/ │ │ │ ├── 001.php │ │ │ ├── Phalanger.inc │ │ │ └── idate.php │ │ └── strings/ │ │ ├── 001.php │ │ ├── 002.php │ │ ├── 004.php.notest │ │ ├── Phalanger.inc │ │ ├── bug22592.php │ │ └── bug26703.php.notest │ ├── Arrays/ │ │ ├── Phalanger.inc │ │ ├── array1.php │ │ ├── array_diff_intersect.php │ │ ├── array_diff_intersect2.php │ │ ├── array_diff_intersect3.php │ │ ├── array_filter false entries #22016.php │ │ ├── array_instantiated.php │ │ ├── array_map.php │ │ ├── array_merge_recursive.php │ │ ├── array_op.php │ │ ├── array_reduce1.php │ │ ├── array_reduce2.php │ │ ├── array_slice.php │ │ ├── array_splice.php │ │ ├── array_sumprod.php │ │ ├── array_unique.php │ │ ├── array_unset_add.php │ │ ├── array_unshift.php │ │ ├── array_walk.php │ │ ├── array_walk_recursive.php │ │ ├── convert_array_key.php │ │ ├── foreach_aliased.php │ │ ├── lazy_copy/ │ │ │ ├── 001.php │ │ │ ├── 002.php │ │ │ ├── 003.php │ │ │ ├── 004.php │ │ │ ├── 005.php │ │ │ └── 006.php │ │ ├── multisort.php │ │ ├── multisort_empty.php │ │ ├── nonarray access #22019.php │ │ ├── optimizations.php │ │ ├── recursion.php │ │ ├── sort.php │ │ └── usort.php │ ├── Bugs/ │ │ ├── class_incompletepart.php │ │ ├── division-by-zero.php │ │ ├── function-in-unknown-class.php │ │ ├── if_if.php │ │ ├── is_a_null_value.php │ │ ├── obj_instantiated.php │ │ ├── preg-named-groups.php │ │ ├── preg-replace-advanced.php │ │ ├── preg-replace-range.php │ │ ├── preg-replace.php │ │ ├── preg-this-dynamic.php │ │ ├── preg-this-dynamic2.php │ │ ├── preg-this.php │ │ ├── preg-ungreedy-bugs.php │ │ ├── preg-unkn.php │ │ └── trigger_error line number #2787.php │ ├── CLR/ │ │ ├── BaseTypes.php │ │ ├── ClrEvent.php │ │ ├── ConditionalDecls.php │ │ ├── ConditionalDecls2.php │ │ ├── Inheritance1.php │ │ ├── Inheritance2.php │ │ ├── Inheritance3.php │ │ ├── Inheritance4.php │ │ ├── Inheritance5.php │ │ ├── Inheritance6.php │ │ ├── Inheritance7.php │ │ ├── Inheritance8.php │ │ ├── Inheritance9.php │ │ ├── Lambdas.php │ │ ├── NameResolving.php │ │ ├── foreach.php │ │ ├── handle_enum.php │ │ ├── indexers1.php │ │ └── serialize clr.php │ ├── Compiler/ │ │ ├── Inclusions/ │ │ │ ├── 6B.inc │ │ │ ├── 6C.inc │ │ │ ├── Cycles/ │ │ │ │ ├── a03.inc │ │ │ │ ├── b01.inc │ │ │ │ ├── b02.inc │ │ │ │ ├── b03.inc │ │ │ │ ├── b04.inc │ │ │ │ ├── b05.inc │ │ │ │ ├── b06.inc │ │ │ │ ├── c01.inc │ │ │ │ ├── c02.inc │ │ │ │ ├── c03.inc │ │ │ │ ├── c04.inc │ │ │ │ ├── c05.inc │ │ │ │ ├── c06.inc │ │ │ │ ├── d06.inc │ │ │ │ ├── e06.inc │ │ │ │ ├── t01.php │ │ │ │ ├── t02.php │ │ │ │ ├── t03.php │ │ │ │ ├── t04.php │ │ │ │ ├── t05.php │ │ │ │ ├── t06.php.notest │ │ │ │ ├── t07.php.notest │ │ │ │ └── t08.php │ │ │ ├── Phalanger.inc │ │ │ ├── b.inc │ │ │ ├── f.inc │ │ │ ├── function.inc │ │ │ ├── include2.php │ │ │ ├── include3.php │ │ │ ├── include6.php │ │ │ ├── include_test.php │ │ │ ├── include_test_a.inc │ │ │ ├── include_test_b.inc │ │ │ ├── script.php │ │ │ └── script2.inc │ │ ├── Namespaces/ │ │ │ ├── const1.php │ │ │ ├── constants1.php │ │ │ ├── extends1.php │ │ │ ├── extends2.php │ │ │ ├── function1.php │ │ │ ├── function2.php │ │ │ ├── namespace1.php │ │ │ ├── simple_syntax1.php │ │ │ ├── use1.php │ │ │ ├── use2.php │ │ │ ├── use3.php │ │ │ └── use4.php │ │ ├── Phalanger.inc │ │ ├── PseudoConst/ │ │ │ ├── _class_.php │ │ │ ├── _function_.php │ │ │ ├── parent.php │ │ │ ├── parent2.php │ │ │ ├── self.php │ │ │ ├── t01.php │ │ │ ├── t02.php │ │ │ ├── t03.php │ │ │ ├── t04.php │ │ │ ├── t05.php │ │ │ ├── t06.php │ │ │ ├── t07.php │ │ │ ├── t08.php │ │ │ ├── t09.php │ │ │ ├── t10.php │ │ │ └── t11.php │ │ ├── References/ │ │ │ ├── array_argument.php │ │ │ ├── array_local.php │ │ │ ├── array_ret_argument.php │ │ │ ├── array_ret_argument2.php │ │ │ ├── deepcopy.php │ │ │ ├── explicitclear.php │ │ │ ├── field_argument.php │ │ │ ├── field_local.php │ │ │ ├── ref_arrayitem.php │ │ │ └── ref_reasign.php │ │ ├── Unreachable/ │ │ │ ├── t10.php.notest │ │ │ ├── t11.php.notest │ │ │ ├── t12.php.notest │ │ │ └── t13.php │ │ ├── Unset/ │ │ │ ├── __unset.php │ │ │ ├── calluserfunc.php │ │ │ ├── issetref2.php │ │ │ ├── unsetglobal.php │ │ │ ├── unsetglobal2.php │ │ │ ├── unsetindirect.php │ │ │ ├── unsetproblem.php │ │ │ ├── unsetref.php │ │ │ ├── unsetref2.php │ │ │ └── unsetref3.php │ │ ├── __call.php │ │ ├── abstracts.php │ │ ├── aliased assign add.php │ │ ├── assign_in_call.php │ │ ├── assignments.php │ │ ├── auto_globals_001.php │ │ ├── auto_globals_002.php │ │ ├── auto_globals_003.php │ │ ├── break_in_global_code.php │ │ ├── chain_ending_by_string_index.php │ │ ├── chaining_test.php │ │ ├── class_consts.php │ │ ├── closures_001.php │ │ ├── continue_in_global_code.php │ │ ├── deep_copy.php │ │ ├── deep_copy_refbox.php │ │ ├── expr_init.php │ │ ├── for_loop.php │ │ ├── foreach1.php │ │ ├── foreach_arrays.php │ │ ├── func_get_args.php │ │ ├── function_002.php │ │ ├── function_003.php │ │ ├── function_004.php │ │ ├── function_call.php │ │ ├── if_statement.php │ │ ├── indirect_001.php │ │ ├── indirect_002.php │ │ ├── indirect_003.php │ │ ├── indirect_004.php │ │ ├── indirect_005.php │ │ ├── indirect_007.php │ │ ├── indirect_global.php │ │ ├── inheritance.php │ │ ├── inheritance2.php │ │ ├── isset_unset_001.php │ │ ├── list #26681.php │ │ ├── new_array_item_assignadd.php │ │ ├── null_hints.php │ │ ├── public_abstract_member.php │ │ ├── pure_create_function.php │ │ ├── pure_function_exists.php │ │ ├── pure_math_str.php │ │ ├── reference_semantics.php.kb │ │ ├── self.php │ │ ├── static_call.php │ │ ├── switch.php │ │ ├── ternary_ex.php │ │ ├── ternary_short.php │ │ ├── this call.php │ │ └── typehint_check.php │ ├── DLR/ │ │ ├── __call.php │ │ ├── classContext.php │ │ ├── classContext1.php │ │ ├── classContext2.php │ │ ├── classcontext_include.inc │ │ ├── hashtable.php │ │ ├── restrictions generics.php │ │ ├── restrictions.php │ │ └── targets.php │ ├── DateTime/ │ │ ├── Phalanger.inc │ │ ├── strftime.php │ │ ├── strtotime1.php │ │ ├── strtotime2.php │ │ ├── strtotime3.php │ │ ├── strtotime4.php │ │ ├── strtotime5.php │ │ ├── sunrise,sunset.php.kb │ │ ├── time.php │ │ ├── timezones.php.kb │ │ └── timezones1.php │ ├── FileSystem/ │ │ ├── Phalanger.inc │ │ ├── basename.php │ │ ├── basename2.php │ │ ├── chdir.php │ │ ├── csv.php │ │ ├── csv.test1.csv │ │ ├── csv.test2.csv │ │ ├── date.php │ │ ├── date2.php │ │ ├── date3.php │ │ ├── date_unix.php │ │ ├── dirname.php │ │ ├── dirname2.php │ │ ├── disk_free_space.php │ │ ├── disk_total_space.php │ │ ├── fgets.php │ │ ├── file.php │ │ ├── file_exists.php │ │ ├── file_get_contents.php │ │ ├── filesize.php │ │ ├── fpassthru.php │ │ ├── fread.php │ │ ├── fread1.php │ │ ├── fread2.php │ │ ├── fs.inc │ │ ├── fseek.php │ │ ├── fsockopen.php │ │ ├── ftell.php │ │ ├── glob_up_dirs.php │ │ ├── is_dir.php │ │ ├── is_executable.php │ │ ├── noline.txt │ │ ├── oneline.txt │ │ ├── pathinfo.php │ │ ├── popen.php │ │ ├── readdir.php │ │ ├── readfile.php │ │ ├── readline.php │ │ ├── realpath.php │ │ ├── rwseek.php │ │ ├── scandir.php │ │ ├── stat.php │ │ ├── stream_context_set_option.php │ │ ├── stream_copy_to_stream.php │ │ ├── stream_copy_to_stream2.php │ │ ├── summer.txt │ │ ├── tar/ │ │ │ ├── Phalanger.inc │ │ │ ├── phalang.inc │ │ │ ├── tar.class.inc │ │ │ └── tar_test.php │ │ ├── test.txt │ │ ├── testinc.php │ │ ├── touch.php │ │ ├── touch.txt │ │ ├── twoline.txt │ │ ├── winter.txt │ │ └── zip/ │ │ └── zip.php │ ├── Math/ │ │ ├── Phalanger.inc │ │ ├── abs.php │ │ ├── atan2.php │ │ ├── base_convert.php │ │ ├── bindec.php │ │ ├── ceil.php │ │ ├── cos.php │ │ ├── decbin.php │ │ ├── dechex.php │ │ ├── decoct.php │ │ ├── deg2rad.php │ │ ├── exp.php │ │ ├── floor.php │ │ ├── fmod.php │ │ ├── hexdec.php │ │ ├── max.php │ │ ├── min.php │ │ ├── modulo_warn.php │ │ ├── octdec.php │ │ ├── pow.php │ │ ├── rad2deg.php │ │ ├── round.php │ │ ├── sin.php │ │ ├── sqrt.php │ │ ├── tan.php │ │ └── uniqid.php │ ├── Misc/ │ │ ├── Phalanger.inc │ │ ├── calendar_extension.php │ │ ├── dir_read.php │ │ ├── fgetcsv #27492.php │ │ ├── hash functions #26667.php │ │ ├── ini_parse.php │ │ ├── json #27838.php │ │ ├── lexer.php │ │ ├── locale.php │ │ ├── output2.php │ │ ├── sample.ini │ │ ├── stack_trace.inc │ │ ├── stack_trace.php │ │ ├── str_getcsv #26691.php │ │ ├── test1.csv │ │ ├── test2.csv │ │ ├── test3.csv │ │ ├── test4.csv │ │ ├── tokens.php │ │ └── user_error_handlers.php │ ├── Objects/ │ │ ├── Phalanger.inc │ │ ├── __invoke.php │ │ ├── __tostringbug.php │ │ ├── accessing property line number #26052.php │ │ ├── conditional1.php │ │ ├── conditional2.php │ │ ├── conditional_base_class.php │ │ ├── constant_test.php │ │ ├── convobjtoany.php │ │ ├── convobjtostr.php │ │ ├── evaled_parent.php │ │ ├── field_inheritance1.php │ │ ├── field_inheritance2.php │ │ ├── field_inheritance3.php │ │ ├── getter_setter_bug28444.php │ │ ├── instanceof.php │ │ ├── new_via_unknown_ctor.php │ │ ├── object_creation_test.php │ │ ├── object_dump.php.skip │ │ ├── objop.php │ │ ├── objopstr.php │ │ ├── overrides #1285.php │ │ ├── static_field_inheritance1.php │ │ ├── static_field_inheritance2.php │ │ ├── static_field_inheritance3.php │ │ ├── static_field_test.php │ │ ├── static_inheritence.php │ │ ├── static_method_test.php │ │ ├── static_object_vars.php │ │ ├── sys_class_const.php │ │ ├── this.php.error │ │ └── this2.php │ ├── PHP.NET/ │ │ ├── App.config │ │ ├── AppLib.config │ │ ├── CSharpLibrary.csproj │ │ ├── Class1.cs │ │ ├── CustomAttributes.php │ │ ├── Evals1/ │ │ │ ├── Test1.php │ │ │ └── run.cmd │ │ ├── Exceptions/ │ │ │ ├── App.config │ │ │ ├── dynamic-stub-generator.php │ │ │ ├── exceptions.php │ │ │ └── phalanger-exec.bat │ │ ├── Generics, New, InstanceOf.php │ │ ├── Gotos.php │ │ ├── Lib.php │ │ ├── Lib.phpproj │ │ ├── MultiScriptAssembly/ │ │ │ ├── App.config │ │ │ ├── Program.cs │ │ │ ├── Properties/ │ │ │ │ └── AssemblyInfo.cs │ │ │ ├── UseMultiScriptAssembly.csproj │ │ │ ├── UseMultiScriptAssembly.sln │ │ │ └── msa/ │ │ │ ├── Autoloader.php │ │ │ ├── Klass.php │ │ │ ├── build.cmd │ │ │ └── main.php │ │ ├── NullableConversions/ │ │ │ ├── App.config │ │ │ ├── CSharpNullableLib/ │ │ │ │ ├── CSharpNullableLib.csproj │ │ │ │ └── Class1.cs │ │ │ ├── NullableConversions.phpproj │ │ │ ├── NullableConversions.sln │ │ │ └── Program.php │ │ ├── Sample.phpproj │ │ ├── Sample.sln │ │ ├── Sample.vs2012.sln │ │ ├── Test.il │ │ ├── Test1.php │ │ ├── Test2.php │ │ ├── Test3.php │ │ ├── __skip │ │ ├── build-lib.cmd │ │ ├── build.cmd │ │ └── test-il.cmd │ ├── Phalanger.inc │ ├── RegEx/ │ │ ├── Perl/ │ │ │ ├── 001.phpt │ │ │ ├── cache.php │ │ │ ├── grep1.php │ │ │ ├── grep2.php │ │ │ ├── match1.php │ │ │ ├── match10.php │ │ │ ├── match11.php.kb │ │ │ ├── match2.php │ │ │ ├── match3.php │ │ │ ├── match4.php │ │ │ ├── match5.php │ │ │ ├── match6.php │ │ │ ├── match7.php │ │ │ ├── match8.php │ │ │ ├── match9.php │ │ │ ├── match_all1.php │ │ │ ├── match_all2.php │ │ │ ├── match_all3.php │ │ │ ├── match_all4.php │ │ │ ├── match_dollar.php │ │ │ ├── match_groups.php │ │ │ ├── overflow.php │ │ │ ├── pcre/ │ │ │ │ ├── 001.phpt │ │ │ │ ├── 002.phpt │ │ │ │ ├── 003.phpt │ │ │ │ ├── 004.phpt │ │ │ │ ├── 005.phpt │ │ │ │ ├── 006.phpt │ │ │ │ ├── 007.phpt │ │ │ │ ├── backtrack_limit.phpt │ │ │ │ ├── bug20528.phpt │ │ │ │ ├── bug21732.phpt │ │ │ │ ├── bug21758.phpt │ │ │ │ ├── bug26927.phpt │ │ │ │ ├── bug27011.phpt │ │ │ │ ├── bug27103.phpt │ │ │ │ ├── bug34790.phpt │ │ │ │ ├── bug37800.phpt │ │ │ │ ├── bug37911.phpt │ │ │ │ ├── bug38600.phpt │ │ │ │ ├── bug40195.phpt │ │ │ │ ├── bug40909.phpt │ │ │ │ ├── bug41050.phpt │ │ │ │ ├── bug41148.phpt │ │ │ │ ├── bug41638.phpt │ │ │ │ ├── bug42298.phpt │ │ │ │ ├── bug42737.phpt │ │ │ │ ├── bug42945.phpt │ │ │ │ ├── bug44191.phpt │ │ │ │ ├── bug44214.phpt │ │ │ │ ├── bug44214_2.phpt │ │ │ │ ├── bug44925.phpt │ │ │ │ ├── bug47229.phpt │ │ │ │ ├── bug47662.phpt │ │ │ │ ├── bug52732.phpt │ │ │ │ ├── bug52971.phpt │ │ │ │ ├── bug63055.phpt │ │ │ │ ├── cache_limit.phpt │ │ │ │ ├── delimiters.phpt │ │ │ │ ├── dollar_endonly.phpt │ │ │ │ ├── grep.phpt │ │ │ │ ├── grep2.phpt │ │ │ │ ├── invalid_utf8.phpt │ │ │ │ ├── invalid_utf8_offset.phpt │ │ │ │ ├── locales.phpt │ │ │ │ ├── match_flags.phpt │ │ │ │ ├── match_flags2.phpt │ │ │ │ ├── match_flags3.phpt │ │ │ │ ├── multiline.phpt │ │ │ │ ├── null_bytes.phpt │ │ │ │ ├── pcre.constants.phpt │ │ │ │ ├── pcre_anchored.phpt │ │ │ │ ├── pcre_count.phpt │ │ │ │ ├── pcre_extended.phpt │ │ │ │ ├── pcre_extra.phpt │ │ │ │ ├── preg_filter.phpt │ │ │ │ ├── preg_grep_basic.phpt │ │ │ │ ├── preg_grep_error.phpt │ │ │ │ ├── preg_grep_error1.phpt │ │ │ │ ├── preg_grep_error2.phpt │ │ │ │ ├── preg_last_error_error.phpt │ │ │ │ ├── preg_match_all_basic.phpt │ │ │ │ ├── preg_match_all_edit_basic.phpt │ │ │ │ ├── preg_match_all_error.phpt │ │ │ │ ├── preg_match_all_error1.phpt │ │ │ │ ├── preg_match_all_error2.phpt │ │ │ │ ├── preg_match_all_error3.phpt │ │ │ │ ├── preg_match_basic.phpt │ │ │ │ ├── preg_match_basic_002.phpt │ │ │ │ ├── preg_match_basic_edit.phpt │ │ │ │ ├── preg_match_error.phpt │ │ │ │ ├── preg_match_error1.phpt │ │ │ │ ├── preg_match_error2.phpt │ │ │ │ ├── preg_match_variation1.phpt │ │ │ │ ├── preg_quote_basic.phpt │ │ │ │ ├── preg_quote_error.phpt │ │ │ │ ├── preg_quote_error1.phpt │ │ │ │ ├── preg_replace.phpt │ │ │ │ ├── preg_replace2.phpt │ │ │ │ ├── preg_replace_basic.phpt │ │ │ │ ├── preg_replace_callback.phpt │ │ │ │ ├── preg_replace_callback2.phpt │ │ │ │ ├── preg_replace_callback3.phpt │ │ │ │ ├── preg_replace_callback_basic.phpt │ │ │ │ ├── preg_replace_callback_error.phpt │ │ │ │ ├── preg_replace_callback_error1.phpt │ │ │ │ ├── preg_replace_edit_basic.phpt │ │ │ │ ├── preg_replace_error.phpt │ │ │ │ ├── preg_replace_error1.phpt │ │ │ │ ├── preg_replace_error2.phpt │ │ │ │ ├── preg_replace_variation1.phpt │ │ │ │ ├── preg_split_basic.phpt │ │ │ │ ├── preg_split_error.phpt │ │ │ │ ├── preg_split_error1.phpt │ │ │ │ ├── preg_split_error2.phpt │ │ │ │ ├── recursion_limit.phpt │ │ │ │ ├── skip.ini │ │ │ │ ├── skip_001.inc │ │ │ │ ├── skip_002.inc │ │ │ │ ├── skip_003.inc │ │ │ │ ├── split.phpt │ │ │ │ ├── split2.phpt │ │ │ │ ├── study.phpt │ │ │ │ └── ungreedy.phpt │ │ │ ├── quote1.php │ │ │ ├── quote2.php │ │ │ ├── quote3.php │ │ │ ├── replace1.php │ │ │ ├── replace2.php │ │ │ ├── replace3.php │ │ │ ├── replace4.php │ │ │ ├── replace5.php │ │ │ ├── replace6.php │ │ │ ├── replace7.php │ │ │ ├── replace8.php │ │ │ ├── replace9.php │ │ │ ├── replace_callback1.php │ │ │ ├── replace_callback2.php │ │ │ ├── split1.php │ │ │ ├── split2.php │ │ │ ├── split3.php │ │ │ ├── split4.php │ │ │ ├── split5.php │ │ │ ├── split6.php │ │ │ ├── ungreedy.php │ │ │ ├── unsuccessful-preg_match_all.php │ │ │ └── withoutdelimiters.php │ │ ├── Phalanger.inc │ │ ├── backreferences.php │ │ ├── dolar_escape.php │ │ ├── double_parentheses_group.php │ │ ├── ereg.php │ │ ├── escaped_unicode.php │ │ ├── groupbug.php │ │ ├── namedbackref.php │ │ ├── namedbackref2.php │ │ ├── namedgroups.php │ │ ├── namedgroups1.php │ │ ├── namedgroups2.php │ │ ├── nomatchall.php │ │ ├── preg_match_unmatched_groups.php │ │ ├── preg_replace_eval.php │ │ ├── regexp-sql.php │ │ └── regexp_smiles.php │ ├── SPL/ │ │ ├── AppendIterator1.php │ │ ├── AppendIterator2.php │ │ ├── ArrayAccess_offsetExists.php │ │ ├── ArrayIterator1.php │ │ ├── ArrayIterator2.php │ │ ├── ArrayIterator3.php │ │ ├── Autoload_ctor.php │ │ ├── Autoload_extends.inc │ │ ├── Autoload_extends.php │ │ ├── FilterIterator.php │ │ ├── RecursiveIteratorIterator1.php │ │ ├── RecursiveIteratorIterator2.php │ │ ├── RecursiveIteratorIterator3.php │ │ ├── SplFixedArray1.php │ │ ├── SplFixedArray2.php │ │ ├── SplObjectStorage1.php │ │ ├── SplObjectStorage2.php │ │ ├── SplObjectStorage3.php │ │ ├── SplObjectStorage4.php │ │ ├── exceptions.php │ │ └── object_hash.php.skip │ ├── Strings/ │ │ ├── Phalanger.inc │ │ ├── addcslashes.php │ │ ├── addslashes.php │ │ ├── chunk_split.php │ │ ├── compare_binary.php │ │ ├── concat.php │ │ ├── count_chars.php │ │ ├── crc32.php │ │ ├── crypt.php │ │ ├── crypt2.php │ │ ├── echo.php │ │ ├── explode.php │ │ ├── get_html_translation_table.php │ │ ├── mb_strlen.php │ │ ├── nl2br.php │ │ ├── pack.php │ │ ├── pos.php │ │ ├── runtime-quotes.php │ │ ├── runtime-quotes.txt │ │ ├── runtime-quotes2.txt │ │ ├── sprintf.php │ │ ├── sprintf2.php │ │ ├── str_ireplace.php │ │ ├── str_replace.php │ │ ├── str_word_count.php │ │ ├── stripslashes.php │ │ ├── strtr.php │ │ ├── substr_operations.php │ │ └── wordwrap.php │ ├── TestLogs/ │ │ ├── TestLog (1419).htm │ │ ├── TestLog (1594).htm │ │ ├── TestLog (1628).htm │ │ ├── TestLog (1683).htm │ │ ├── TestLog (1797) (DLR GetProperty).htm │ │ ├── TestLog (1810).htm │ │ ├── TestLog (1833).htm │ │ ├── TestLog (1870).htm │ │ ├── TestLog (1891).htm │ │ ├── TestLog (1902).htm │ │ ├── TestLog (1949).htm │ │ ├── TestLog (2034).htm │ │ ├── TestLog (2035).htm │ │ ├── TestLog (2038).htm │ │ ├── TestLog (2100).htm │ │ ├── TestLog (2215).htm │ │ ├── TestLog (2220).htm │ │ ├── TestLog (2277).htm │ │ ├── TestLog (79002).htm │ │ ├── TestLog 2010-02-27.htm │ │ ├── TestLog 2010-05-01.htm │ │ ├── TestLog 2010-05-08.htm │ │ ├── TestLog 2010-06-12.htm │ │ ├── TestLog 2010-06-13.htm │ │ ├── TestLog 2010-06-25.htm │ │ ├── TestLog 2010-07-10.htm │ │ ├── TestLog 2010-07-11.htm │ │ ├── TestLog 2010-08-12.htm │ │ ├── TestLog 2010-10-01.htm │ │ └── TestLog 2011-04-05.htm │ ├── Variables/ │ │ ├── Phalanger.inc │ │ ├── advanced_serialize.php │ │ ├── arguments.php │ │ ├── assign_copy.php │ │ ├── bitwise.php │ │ ├── class_constants.php │ │ ├── comparisons.php │ │ ├── constant.php │ │ ├── constants_defined.php │ │ ├── extract refs.php │ │ ├── extract.php │ │ ├── func_get_args.php │ │ ├── is_number.php │ │ ├── serialize.php │ │ ├── serialize_double.php │ │ ├── unserialize_objects.php │ │ └── var_dumping.php │ ├── Xml/ │ │ ├── 005.php │ │ ├── 006.php │ │ ├── 007.php │ │ ├── 008.php │ │ ├── 009.php │ │ ├── 011.php │ │ ├── 013.php │ │ ├── 017.php │ │ ├── 018.php │ │ ├── 019.php │ │ ├── 020.php │ │ ├── 021.php │ │ ├── 025.php │ │ ├── 026.php │ │ ├── 027.php │ │ ├── 028.php │ │ ├── 029.php │ │ ├── 030.php │ │ ├── 032.php │ │ ├── 033.php │ │ ├── Phalanger.inc │ │ ├── area_list.xsl │ │ ├── area_name.xml │ │ ├── book.xml │ │ ├── bug26384.php │ │ ├── bug28721.php │ │ ├── bug28817.php │ │ ├── bug32615.php │ │ ├── bug33853.php │ │ ├── bug34276.php │ │ ├── bug35342.php │ │ ├── bug36756.php │ │ ├── bug37277.php │ │ ├── documentxpath.xsl │ │ ├── dom002.php │ │ ├── dom003.php │ │ ├── dom006.php │ │ ├── dom007.php │ │ ├── dom_set_attr_node.php │ │ ├── exslt.xml │ │ ├── exslt.xsl │ │ ├── html_save.php │ │ ├── html_xpath.php │ │ ├── prepare.inc │ │ ├── xmlReader/ │ │ │ ├── 001.phpt │ │ │ ├── 002.phpt │ │ │ ├── 003.phpt │ │ │ ├── 004.phpt │ │ │ ├── 005.phpt │ │ │ ├── 006.phpt │ │ │ ├── 007.phpt │ │ │ ├── 008.phpt │ │ │ ├── 009.phpt │ │ │ ├── 010.phpt │ │ │ ├── 011.phpt │ │ │ ├── 012.dtd │ │ │ ├── 012.phpt │ │ │ ├── 012.xml │ │ │ ├── 013.phpt │ │ │ ├── 013.xsd │ │ │ ├── Phalanger.inc │ │ │ ├── bug36743.phpt │ │ │ ├── bug42139.phpt │ │ │ ├── dtdexample.dtd │ │ │ ├── expand.phpt │ │ │ ├── inherit.phpt │ │ │ ├── init.phpt │ │ │ ├── next.phpt │ │ │ ├── read_name.phpt │ │ │ ├── relaxNG.rng │ │ │ ├── relaxNG2.rng │ │ │ └── relaxNG3.rng │ │ ├── xmlhandler.php │ │ ├── xslt.xml │ │ ├── xslt.xsl │ │ ├── xslt001.php │ │ ├── xslt002.php │ │ ├── xslt003.php │ │ ├── xslt004.php │ │ ├── xslt005.php │ │ ├── xslt006.php │ │ ├── xslt007.php │ │ ├── xslt010.php │ │ ├── xslt011.php │ │ ├── xslt011.xml │ │ ├── xslt011.xsl │ │ ├── xslt012.php │ │ └── xslt012.xsl │ ├── ext/ │ │ ├── filter/ │ │ │ ├── filter_var.php │ │ │ └── run_v2.cmd │ │ └── web/ │ │ ├── parse_url #27377.php │ │ ├── parse_url.php │ │ └── parse_url_at_bug.php │ ├── run_v2.cmd │ └── run_v2_mono.cmd ├── Tools/ │ ├── ChainGen/ │ │ ├── AssemblyInfo.cs │ │ ├── ChainGen.csproj │ │ ├── MainClass.cs │ │ ├── TestChains-dbg.cmd │ │ └── TestChains.cmd │ ├── ClassDynamizer/ │ │ ├── ClassDynamizer.csproj │ │ ├── Convertor.cs │ │ ├── Dynamizer.cs │ │ ├── Main.cs │ │ ├── Properties/ │ │ │ └── AssemblyInfo.cs │ │ └── Utility.cs │ ├── CsLex/ │ │ ├── Accept.cs │ │ ├── CodeBlock.cs │ │ ├── CsLex.csproj │ │ ├── Error.cs │ │ ├── Errors.cs │ │ ├── Lex/ │ │ │ ├── Alloc.cs │ │ │ ├── Anchor.cs │ │ │ ├── BitSet.cs │ │ │ ├── Bunch.cs │ │ │ ├── CharSet.cs │ │ │ ├── DTrans.cs │ │ │ ├── Dfa.cs │ │ │ ├── Emit.cs │ │ │ ├── Gen.cs │ │ │ ├── Input.cs │ │ │ ├── Lex.cs │ │ │ ├── MakeNfa.cs │ │ │ ├── Minimize.cs │ │ │ ├── Nfa.cs │ │ │ ├── Nfa2Dfa.cs │ │ │ ├── NfaPair.cs │ │ │ ├── SimplifyNfa.cs │ │ │ ├── Spec.cs │ │ │ ├── Tokens.cs │ │ │ └── Utility.cs │ │ └── app.config │ ├── PEVerify.exe.config │ ├── PHP/ │ │ └── php.ini │ ├── PhpNetTester/ │ │ ├── AssemblyInfo.cs │ │ ├── Exceptions.cs │ │ ├── Main.cs │ │ ├── PhpNetTester.csproj │ │ ├── Test.cs │ │ ├── TestsCollection.cs │ │ ├── Utils.cs │ │ └── app.config │ ├── Readme.txt │ ├── ReflectionCacheGen/ │ │ ├── AssemblyInfo.cs │ │ ├── Main.cs │ │ └── ReflectionCacheGen.csproj │ ├── Tools.sln │ ├── UpdateFileVersionFromChangeset.cmd │ ├── UpdateFileVersionFromChangeset.sh │ ├── VersionReplacer/ │ │ ├── Program.cs │ │ ├── Properties/ │ │ │ └── AssemblyInfo.cs │ │ └── VersionReplacer.csproj │ ├── al.exe.config │ ├── dependency walker/ │ │ └── depends.chm │ ├── gacutil.exe.config │ └── gppg/ │ ├── app.config │ ├── gpcc/ │ │ ├── CodeGenerator.cs │ │ ├── GPCG.cs │ │ ├── Grammar.cs │ │ ├── GrammarToken.cs │ │ ├── LALRGenerator.cs │ │ ├── LR0Generator.cs │ │ ├── NonTerminal.cs │ │ ├── Parser.cs │ │ ├── ParserAction.cs │ │ ├── PrecType.cs │ │ ├── Precedence.cs │ │ ├── Production.cs │ │ ├── ProductionItem.cs │ │ ├── Reduce.cs │ │ ├── Scanner.cs │ │ ├── SemanticAction.cs │ │ ├── Set.cs │ │ ├── Shift.cs │ │ ├── State.cs │ │ ├── Symbol.cs │ │ ├── Terminal.cs │ │ └── Transition.cs │ └── gppg.csproj └── docs/ ├── CNAME ├── _config.yml ├── blog/ │ ├── announcing-wpdotnet.md │ ├── dynamic-keyword-and-php-objects.md │ ├── improved-wordpress-performance-with-phalanger.md │ ├── index.md │ ├── installation-free-phalanger-web.md │ ├── net-interoperability-overview-of-phalanger.md │ ├── passing-net-delegates-into-php.md │ ├── phalanger-3-march-2013.md │ ├── phalanger-3.md │ ├── phalanger-benchmarks.md │ ├── phalanger-riding-mono.md │ ├── phalanger-takes-advantage-of-dlr.md │ ├── phalanger-wordpress.md │ ├── phalanger4.md │ ├── php-as-a-scripting-language-for-csharp.md │ ├── php-global-asax-and-output-caching.md │ ├── using-csharp-from-appcode-in-php-scripts.md │ ├── wordpress-on-dotnet40.md │ ├── wordpress-on-net-with-sql-server-is-possimpible-using-phalanger-3.md │ └── writing-compiled-php-extensions-in-php.md ├── index.md └── phalanger-benchmarks.md ================================================ FILE CONTENTS ================================================ ================================================ FILE: .gitignore ================================================ ## Ignore Visual Studio temporary files, build results, and ## files generated by popular Visual Studio add-ons. # Visual Studio User-specific files *.suo *.user *.sln.docstates *.vspscc # Visual Studio 2015 User-specific files .vs # nuget-specifics packages *.nupkg Tools/nuget.exe # Build results *_i.c *_p.c *.ilk *.meta *.obj *.pch *.pdb *.pgc *.pgd *.rsp *.sbr *.tlb *.tli *.tlh *.tmp *.vspscc .builds **/*.dotCover *.dynamic.cs [Dd]ebug*/ obj/ [Rr]elease*/ # Visual C++ cache files ipch/ *.aps *.ncb *.opensdf *.sdf # Visual Studio profiler *.psess *.vsp # ReSharper is a .NET coding add-in _ReSharper* # Installshield output folder [Ee]xpress # Backup & report files from converting an old project file to a newer # Visual Studio version. Backup files are not needed, because we have git ;-) _UpgradeReport_Files/ Backup*/ UpgradeLog*.XML ~temp.log ############ ## Windows ############ # Windows image file caches Thumbs.db # Folder config file Desktop.ini # Output binaries Deployment/Bin/extutil.exe Deployment/Bin/MkDynamic.exe Deployment/Bin/phpc.exe Deployment/Bin/phpconfig.exe Deployment/Bin/PhpNetClassLibrary.dll Deployment/Bin/PhpNetCore.dll Deployment/Bin/PhpNetCore.Utils.dll Deployment/Bin/PhpNetCore.xml Deployment/Bin/PhpNetMsSql.dll Deployment/Bin/PhpNetMsSql.xml Deployment/Bin/PhpNetPDO.dll Deployment/Bin/PhpNetPDOSQLite.dll Deployment/Bin/PhpNetPDOSQLServer.dll Deployment/Bin/PhpNetSQLite.dll Deployment/Bin/PhpNetXmlDom.dll Deployment/Bin/PhpNetXmlDom.xml Deployment/Bin/PhpNetZip.dll Deployment/Bin/System.Data.SQLite.dll Deployment/Release* Deployment/Debug* ================================================ FILE: Deployment/Bin/gacall.cmd ================================================ cd %~dp0 PATH = %PATH%;"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\NETFX 4.0 Tools" gacutil -f -i PhpNetCore.dll gacutil -f -i PhpNetClassLibrary.dll gacutil -f -i php4ts.dll gacutil -f -i php5ts.dll gacutil -f -i PhpNetXmlDom.dll gacutil -f -i PhpNetCurl.dll gacutil -f -i PhpNetGd2.dll gacutil -f -i PhpNetMbString.dll gacutil -f -i PhpNetIconv.dll gacutil -f -i PhpNetSoap.dll gacutil -f -i PhpNetMsSql.dll gacutil -f -i PhpNetPDO.dll gacutil -f -i PhpNetPDOSQLite.dll gacutil -f -i PhpNetPDOSQLServer.dll gacutil -f -i PhpNetSQLite.dll gacutil -f -i PhpNetXml.dll gacutil -f -i PhpNetZlib.dll gacutil -f -i PhpNetZip.dll gacutil -f -i MySql.Data.dll gacutil -f -i PhpNetMySql.dll gacutil -f -i PhpNetPDOMySql.dll ================================================ FILE: Deployment/Dynamic/verify.bat ================================================ for %%i in (*.dll) do @"../../Tools/peverify" %%i pause ================================================ FILE: Deployment/License.rtf ================================================ {\rtf1\adeflang1025\ansi\ansicpg1252\uc1\adeff0\deff0\stshfdbch31505\stshfloch31506\stshfhich31506\stshfbi0\deflang1033\deflangfe1033\themelang1033\themelangfe0\themelangcs0{\fonttbl{\f0\fbidi \froman\fcharset238\fprq2{\*\panose 02020603050405020304}Times New Roman;} {\f2\fbidi \fmodern\fcharset238\fprq1{\*\panose 02070309020205020404}Courier New;}{\f3\fbidi \froman\fcharset2\fprq2{\*\panose 05050102010706020507}Symbol;}{\f10\fbidi \fnil\fcharset2\fprq2{\*\panose 05000000000000000000}Wingdings;} {\f34\fbidi \froman\fcharset238\fprq2{\*\panose 02040503050406030204}Cambria Math;}{\f36\fbidi \froman\fcharset238\fprq2{\*\panose 02040503050406030204}Cambria;}{\f37\fbidi \fswiss\fcharset238\fprq2{\*\panose 020f0502020204030204}Calibri;} {\flomajor\f31500\fbidi \froman\fcharset238\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fdbmajor\f31501\fbidi \froman\fcharset238\fprq2{\*\panose 02020603050405020304}Times New Roman;} {\fhimajor\f31502\fbidi \froman\fcharset238\fprq2{\*\panose 02040503050406030204}Cambria;}{\fbimajor\f31503\fbidi \froman\fcharset238\fprq2{\*\panose 02020603050405020304}Times New Roman;} {\flominor\f31504\fbidi \froman\fcharset238\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fdbminor\f31505\fbidi \froman\fcharset238\fprq2{\*\panose 02020603050405020304}Times New Roman;} {\fhiminor\f31506\fbidi \fswiss\fcharset238\fprq2{\*\panose 020f0502020204030204}Calibri;}{\fbiminor\f31507\fbidi \froman\fcharset238\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f41\fbidi \froman\fcharset0\fprq2 Times New Roman;} {\f40\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\f42\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\f43\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\f44\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);} {\f45\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\f46\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\f47\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\f61\fbidi \fmodern\fcharset0\fprq1 Courier New;} {\f60\fbidi \fmodern\fcharset204\fprq1 Courier New Cyr;}{\f62\fbidi \fmodern\fcharset161\fprq1 Courier New Greek;}{\f63\fbidi \fmodern\fcharset162\fprq1 Courier New Tur;}{\f64\fbidi \fmodern\fcharset177\fprq1 Courier New (Hebrew);} {\f65\fbidi \fmodern\fcharset178\fprq1 Courier New (Arabic);}{\f66\fbidi \fmodern\fcharset186\fprq1 Courier New Baltic;}{\f67\fbidi \fmodern\fcharset163\fprq1 Courier New (Vietnamese);}{\f381\fbidi \froman\fcharset0\fprq2 Cambria Math;} {\f380\fbidi \froman\fcharset204\fprq2 Cambria Math Cyr;}{\f382\fbidi \froman\fcharset161\fprq2 Cambria Math Greek;}{\f383\fbidi \froman\fcharset162\fprq2 Cambria Math Tur;}{\f386\fbidi \froman\fcharset186\fprq2 Cambria Math Baltic;} {\f387\fbidi \froman\fcharset163\fprq2 Cambria Math (Vietnamese);}{\f401\fbidi \froman\fcharset0\fprq2 Cambria;}{\f400\fbidi \froman\fcharset204\fprq2 Cambria Cyr;}{\f402\fbidi \froman\fcharset161\fprq2 Cambria Greek;} {\f403\fbidi \froman\fcharset162\fprq2 Cambria Tur;}{\f406\fbidi \froman\fcharset186\fprq2 Cambria Baltic;}{\f407\fbidi \froman\fcharset163\fprq2 Cambria (Vietnamese);}{\f411\fbidi \fswiss\fcharset0\fprq2 Calibri;} {\f410\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;}{\f412\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;}{\f413\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;}{\f416\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;} {\f417\fbidi \fswiss\fcharset163\fprq2 Calibri (Vietnamese);}{\flomajor\f31510\fbidi \froman\fcharset0\fprq2 Times New Roman;}{\flomajor\f31509\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;} {\flomajor\f31511\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\flomajor\f31512\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\flomajor\f31513\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);} {\flomajor\f31514\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\flomajor\f31515\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\flomajor\f31516\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);} {\fdbmajor\f31520\fbidi \froman\fcharset0\fprq2 Times New Roman;}{\fdbmajor\f31519\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fdbmajor\f31521\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;} {\fdbmajor\f31522\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fdbmajor\f31523\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fdbmajor\f31524\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);} {\fdbmajor\f31525\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fdbmajor\f31526\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fhimajor\f31530\fbidi \froman\fcharset0\fprq2 Cambria;} {\fhimajor\f31529\fbidi \froman\fcharset204\fprq2 Cambria Cyr;}{\fhimajor\f31531\fbidi \froman\fcharset161\fprq2 Cambria Greek;}{\fhimajor\f31532\fbidi \froman\fcharset162\fprq2 Cambria Tur;} {\fhimajor\f31535\fbidi \froman\fcharset186\fprq2 Cambria Baltic;}{\fhimajor\f31536\fbidi \froman\fcharset163\fprq2 Cambria (Vietnamese);}{\fbimajor\f31540\fbidi \froman\fcharset0\fprq2 Times New Roman;} {\fbimajor\f31539\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fbimajor\f31541\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fbimajor\f31542\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;} {\fbimajor\f31543\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fbimajor\f31544\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fbimajor\f31545\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;} {\fbimajor\f31546\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\flominor\f31550\fbidi \froman\fcharset0\fprq2 Times New Roman;}{\flominor\f31549\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;} {\flominor\f31551\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\flominor\f31552\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\flominor\f31553\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);} {\flominor\f31554\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\flominor\f31555\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\flominor\f31556\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);} {\fdbminor\f31560\fbidi \froman\fcharset0\fprq2 Times New Roman;}{\fdbminor\f31559\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fdbminor\f31561\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;} {\fdbminor\f31562\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fdbminor\f31563\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fdbminor\f31564\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);} {\fdbminor\f31565\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fdbminor\f31566\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fhiminor\f31570\fbidi \fswiss\fcharset0\fprq2 Calibri;} {\fhiminor\f31569\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;}{\fhiminor\f31571\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;}{\fhiminor\f31572\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;} {\fhiminor\f31575\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;}{\fhiminor\f31576\fbidi \fswiss\fcharset163\fprq2 Calibri (Vietnamese);}{\fbiminor\f31580\fbidi \froman\fcharset0\fprq2 Times New Roman;} {\fbiminor\f31579\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fbiminor\f31581\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fbiminor\f31582\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;} {\fbiminor\f31583\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fbiminor\f31584\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fbiminor\f31585\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;} {\fbiminor\f31586\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0; \red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;\red204\green204\blue204;}{\*\defchp \fs22\loch\af31506\hich\af31506\dbch\af31505 }{\*\defpap \ql \li0\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 }\noqfpromote {\stylesheet{\ql \li0\ri0\sa200\sl276\slmult1 \widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0 \fs22\lang1033\langfe1033\loch\f31506\hich\af31506\dbch\af31505\cgrid\langnp1033\langfenp1033 \snext0 \sqformat \spriority0 Normal;}{ \s1\ql \li0\ri0\sb240\sa60\sl276\slmult1\keepn\widctlpar\wrapdefault\aspalpha\aspnum\faauto\outlinelevel0\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\af0\afs32\alang1025 \ltrch\fcs0 \b\fs32\lang1033\langfe1033\kerning32\loch\f31502\hich\af31502\dbch\af31501\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext0 \slink15 \sqformat \spriority9 \styrsid8403656 heading 1;}{ \s3\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\outlinelevel2\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\af0\afs27\alang1025 \ltrch\fcs0 \b\fs27\lang1033\langfe1033\loch\f0\hich\af0\dbch\af31505\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext3 \slink16 \sqformat \spriority9 \styrsid11359213 heading 3;}{ \s4\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\outlinelevel3\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\af0\afs24\alang1025 \ltrch\fcs0 \b\fs24\lang1033\langfe1033\loch\f0\hich\af0\dbch\af31505\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext4 \slink17 \sqformat \spriority9 \styrsid11359213 heading 4;}{\*\cs10 \additive \ssemihidden \sunhideused \spriority1 Default Paragraph Font;}{\* \ts11\tsrowd\trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\trcbpat1\trcfpat1\tblind0\tblindtype3\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv \ql \li0\ri0\sa200\sl276\slmult1 \widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0 \fs22\lang1033\langfe1033\loch\f31506\hich\af31506\dbch\af31505\cgrid\langnp1033\langfenp1033 \snext11 \ssemihidden \sunhideused Normal Table;}{\*\cs15 \additive \rtlch\fcs1 \ab\af0\afs32 \ltrch\fcs0 \b\fs32\kerning32\loch\f31502\hich\af31502\dbch\af31501 \sbasedon10 \slink1 \slocked \spriority9 \styrsid8403656 Nadpis 1 Char;}{\*\cs16 \additive \rtlch\fcs1 \ab\af0\afs27 \ltrch\fcs0 \b\f0\fs27 \sbasedon10 \slink3 \slocked \spriority9 \styrsid11359213 Nadpis 3 Char;}{\*\cs17 \additive \rtlch\fcs1 \ab\af0\afs24 \ltrch\fcs0 \b\f0\fs24 \sbasedon10 \slink4 \slocked \spriority9 \styrsid11359213 Nadpis 4 Char;}{\*\cs18 \additive \spriority0 \styrsid16405121 apple-style-span;}{\s19\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe1033\loch\f0\hich\af0\dbch\af31505\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext19 \ssemihidden \sunhideused \styrsid11359213 Normal (Web);}{\*\cs20 \additive \rtlch\fcs1 \af0 \ltrch\fcs0 \ul\cf2 \sbasedon10 \sunhideused \styrsid11359213 Hyperlink;}{\*\cs21 \additive \spriority0 \styrsid11359213 apple-converted-space;}{\s22\ql \li0\ri0\widctlpar \tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af2\afs20\alang1025 \ltrch\fcs0 \fs20\lang1033\langfe1033\loch\f2\hich\af2\dbch\af31505\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext22 \slink23 \ssemihidden \sunhideused \styrsid11359213 HTML Preformatted;}{\*\cs23 \additive \rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20 \sbasedon10 \slink22 \slocked \ssemihidden \styrsid11359213 Form\'e1tovan\'fd v HTML Char;}}{\*\listtable{\list\listtemplateid-2083204086{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext \'01\u-3929 ?;}{\levelnumbers;}\f10\fs20\fbias0 \fi-360\li720\jclisttab\tx720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;} \f10\fs20\fbias0 \fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}\f10\fs20\fbias0 \fi-360\li2160 \jclisttab\tx2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}\f10\fs20\fbias0 \fi-360\li2880\jclisttab\tx2880\lin2880 } {\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}\f10\fs20\fbias0 \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23 \leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}\f10\fs20\fbias0 \fi-360\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0 \levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}\f10\fs20\fbias0 \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative \levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}\f10\fs20\fbias0 \fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext \'01\u-3929 ?;}{\levelnumbers;}\f10\fs20\fbias0 \fi-360\li6480\jclisttab\tx6480\lin6480 }{\listname ;}\listid645281266}{\list\listtemplateid-2136698556{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0 \levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}\f10\fs20\fbias0 \fi-360\li720\jclisttab\tx720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext \'01\u-3929 ?;}{\levelnumbers;}\f10\fs20\fbias0 \fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;} \f10\fs20\fbias0 \fi-360\li2160\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}\f10\fs20\fbias0 \fi-360\li2880 \jclisttab\tx2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}\f10\fs20\fbias0 \fi-360\li3600\jclisttab\tx3600\lin3600 } {\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}\f10\fs20\fbias0 \fi-360\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23 \leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}\f10\fs20\fbias0 \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0 \levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}\f10\fs20\fbias0 \fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative \levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}\f10\fs20\fbias0 \fi-360\li6480\jclisttab\tx6480\lin6480 }{\listname ;}\listid1951233059}{\list\listtemplateid-725055788{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0 \levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}\f10\fs20\fbias0 \fi-360\li720\jclisttab\tx720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0 {\leveltext\'01\u-3929 ?;}{\levelnumbers;}\f10\fs20\fbias0 \fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext \'01\u-3929 ?;}{\levelnumbers;}\f10\fs20\fbias0 \fi-360\li2160\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;} \f10\fs20\fbias0 \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}\f10\fs20\fbias0 \fi-360\li3600 \jclisttab\tx3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}\f10\fs20\fbias0 \fi-360\li4320\jclisttab\tx4320\lin4320 } {\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}\f10\fs20\fbias0 \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23 \leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}\f10\fs20\fbias0 \fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0 \levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}\f10\fs20\fbias0 \fi-360\li6480\jclisttab\tx6480\lin6480 }{\listname ;}\listid1984693594}}{\*\listoverridetable{\listoverride\listid1984693594 \listoverridecount1{\lfolevel\listoverrideformat{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat0\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fs20\fbias0 \fi-360\li720\jclisttab\tx720\lin720 }}\ls1} {\listoverride\listid1951233059\listoverridecount1{\lfolevel\listoverrideformat{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat0\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fs20\fbias0 \fi-360\li720 \jclisttab\tx720\lin720 }}\ls2}{\listoverride\listid645281266\listoverridecount1{\lfolevel\listoverrideformat{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat0\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers ;}\f3\fs20\fbias0 \fi-360\li720\jclisttab\tx720\lin720 }}\ls3}}{\*\pgptbl {\pgp\ipgp0\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp1\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp15\itap1\li240\ri240\sb240\sa240}{\pgp\ipgp12\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp9\itap1\li0\ri0\sb0\sa0} {\pgp\ipgp5\itap1\li240\ri240\sb240\sa240}{\pgp\ipgp10\itap1\li168\ri0\sb312\sa100}{\pgp\ipgp11\itap1\li72\ri72\sb72\sa24\brdrt\brdrs\brdrw30\brsp120\brdrcf17 \brdrl\brdrs\brdrw30\brsp120\brdrcf17 \brdrb\brdrs\brdrw30\brsp120\brdrcf17 \brdrr \brdrs\brdrw30\brsp120\brdrcf17 }{\pgp\ipgp0\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp9\itap1\li0\ri0\sb0\sa0}{\pgp\ipgp7\itap1\li0\ri0\sb100\sa100\brdrt\brdrs\brdrw30\brdrcf17 \brdrl\brdrs\brdrw30\brdrcf17 \brdrb\brdrs\brdrw30\brsp40\brdrcf17 \brdrr \brdrs\brdrw30\brdrcf17 }{\pgp\ipgp9\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp0\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp2\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp1\itap1\li0\ri0\sb0\sa0}}{\*\rsidtbl \rsid930336\rsid5387550\rsid7346712\rsid7423185\rsid7945933\rsid8403656 \rsid11359213\rsid16405121\rsid16602525}{\mmathPr\mmathFont34\mbrkBin0\mbrkBinSub0\msmallFrac0\mdispDef1\mlMargin0\mrMargin0\mdefJc1\mwrapIndent1440\mintLim0\mnaryLim1}{\info{\operator Jakub}{\creatim\yr2011\mo9\dy5\hr18\min14} {\revtim\yr2011\mo12\dy2\hr12\min54}{\version9}{\edmins2}{\nofpages5}{\nofwords1366}{\nofchars7787}{\nofcharsws9135}{\vern49273}}{\*\xmlnstbl {\xmlns1 http://schemas.microsoft.com/office/word/2003/wordml}} \paperw12240\paperh15840\margl1417\margr1417\margt1417\margb1417\gutter0\ltrsect \widowctrl\ftnbj\aenddoc\trackmoves0\trackformatting1\donotembedsysfont0\relyonvml0\donotembedlingdata1\grfdocevents0\validatexml0\showplaceholdtext0\ignoremixedcontent0\saveinvalidxml0\showxmlerrors0\horzdoc\dghspace120\dgvspace120\dghorigin1701 \dgvorigin1984\dghshow0\dgvshow3\jcompress\viewkind1\viewscale120\rsidroot16405121 \fet0{\*\wgrffmtfilter 2450}\ilfomacatclnup0\ltrpar \sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl2 \pnucltr\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang {\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl6 \pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}\pard\plain \ltrpar\s1\ql \li0\ri0\sb240\sa60\sl276\slmult1\keepn\widctlpar\wrapdefault\aspalpha\aspnum\faauto\outlinelevel0\adjustright\rin0\lin0\itap0\pararsid8403656 \rtlch\fcs1 \ab\af0\afs32\alang1025 \ltrch\fcs0 \b\fs32\lang1033\langfe1033\kerning32\loch\af31502\hich\af31502\dbch\af31501\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid8403656 \hich\af31502\dbch\af31501\loch\f31502 License: Apache License 2.0 (Apache) \par }\pard\plain \ltrpar\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid8403656 \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0 \fs22\lang1033\langfe1033\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid8403656 \hich\af31506\dbch\af31505\loch\f31506 Version 2.0, January 2004\line }{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid8403656\charrsid7945933 \hich\af31506\dbch\af31505\loch\f31506 http://www.apache.org/licenses/}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid8403656 \par \par \hich\af31506\dbch\af31505\loch\f31506 TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION \par \par \hich\af31506\dbch\af31505\loch\f31506 1. Definitions. \par \par \hich\af31506\dbch\af31505\loch\f31506 "License" shall mean the terms and cond\hich\af31506\dbch\af31505\loch\f31506 itions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. \par \par \hich\af31506\dbch\af31505\loch\f31506 "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. \par \par \hich\af31506\dbch\af31505\loch\f31506 "Legal Entity" shall mean the union of\hich\af31506\dbch\af31505\loch\f31506 the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such e \hich\af31506\dbch\af31505\loch\f31506 n\hich\af31506\dbch\af31505\loch\f31506 tity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. \par \par \hich\af31506\dbch\af31505\loch\f31506 "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by \hich\af31506\dbch\af31505\loch\f31506 this License. \par \par \hich\af31506\dbch\af31505\loch\f31506 "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. \par \par \hich\af31506\dbch\af31505\loch\f31506 "Object" form shall mean any form resulting from mechanical transformati\hich\af31506\dbch\af31505\loch\f31506 on or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. \par \par \hich\af31506\dbch\af31505\loch\f31506 "Work" shall mean the work of authorship, whether in Source or Object form, made available under the Lice\hich\af31506\dbch\af31505\loch\f31506 nse, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). \par \par \hich\af31506\dbch\af31505\loch\f31506 "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and f\hich\af31506\dbch\af31505\loch\f31506 or which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely lin \hich\af31506\dbch\af31505\loch\f31506 k\hich\af31506\dbch\af31505\loch\f31506 (or bind by name) to the interfaces of, the Work and Derivative Works thereof. \par \par \hich\af31506\dbch\af31505\loch\f31506 "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that \hich\af31506\dbch\af31505\loch\f31506 is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electroni \hich\af31506\dbch\af31505\loch\f31506 c\hich\af31506\dbch\af31505\loch\f31506 , verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licen \hich\af31506\dbch\af31505\loch\f31506 s\hich\af31506\dbch\af31505\loch\f31506 or for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." \par \par \hich\af31506\dbch\af31505\loch\f31506 "Contributor" shall mean Licensor and any individual or Le\hich\af31506\dbch\af31505\loch\f31506 gal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. \par \par \hich\af31506\dbch\af31505\loch\f31506 2. Grant of Copyright License. \par \par \hich\af31506\dbch\af31505\loch\f31506 Subject to the terms and conditions of this License, each Contri\hich\af31506\dbch\af31505\loch\f31506 butor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative \hich\af31506\dbch\af31505\loch\f31506 \hich\af31506\dbch\af31505\loch\f31506 Works in Source or Object form. \par \par \hich\af31506\dbch\af31505\loch\f31506 3. Grant of Patent License. \par \par \hich\af31506\dbch\af31505\loch\f31506 Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this s \hich\af31506\dbch\af31505\loch\f31506 ection) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alo \hich\af31506\dbch\af31505\loch\f31506 n\hich\af31506\dbch\af31505\loch\f31506 e or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution i \hich\af31506\dbch\af31505\loch\f31506 n\hich\af31506\dbch\af31505\loch\f31506 corporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. \par \par \hich\af31506\dbch\af31505\loch\f31506 4. Redistribution. \par \par \hich\af31506\dbch\af31505\loch\f31506 You may reproduce and \hich\af31506\dbch\af31505\loch\f31506 distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: \par \par \hich\af31506\dbch\af31505\loch\f31506 1. You must give any other recipients of the Work or Derivative Works a \hich\af31506\dbch\af31505\loch\f31506 copy of this License; and \par \par \hich\af31506\dbch\af31505\loch\f31506 2. You must cause any modified files to carry prominent notices stating that You changed the files; and \par \par \hich\af31506\dbch\af31505\loch\f31506 3. You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and at\hich\af31506\dbch\af31505\loch\f31506 tribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and \par \par \hich\af31506\dbch\af31505\loch\f31506 4. If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribut\hich\af31506\dbch\af31505\loch\f31506 e must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as \hich\af31506\dbch\af31505\loch\f31506 \hich\af31506\dbch\af31505\loch\f31506 part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTIC \hich\af31506\dbch\af31505\loch\f31506 E\hich\af31506\dbch\af31505\loch\f31506 file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attr \hich\af31506\dbch\af31505\loch\f31506 i\hich\af31506\dbch\af31505\loch\f31506 bution notices cannot be construed as modifying the License. \par \par \hich\af31506\dbch\af31505\loch\f31506 You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, \hich\af31506\dbch\af31505\loch\f31506 or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. \par \par \hich\af31506\dbch\af31505\loch\f31506 5. Submission of Contributions. \par \par \hich\af31506\dbch\af31505\loch\f31506 Unless You explicitly state otherwise, any Contribut\hich\af31506\dbch\af31505\loch\f31506 ion intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms \hich\af31506\dbch\af31505\loch\f31506 \hich\af31506\dbch\af31505\loch\f31506 of any separate license agreement you may have executed with Licensor regarding such Contributions. \par \par \hich\af31506\dbch\af31505\loch\f31506 6. Trademarks. \par \par \hich\af31506\dbch\af31505\loch\f31506 This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as requi\hich\af31506\dbch\af31505\loch\f31506 red for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. \par \par \hich\af31506\dbch\af31505\loch\f31506 7. Disclaimer of Warranty. \par \par \hich\af31506\dbch\af31505\loch\f31506 Unless required by applicable law\hich\af31506\dbch\af31505\loch\f31506 or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or condition \hich\af31506\dbch\af31505\loch\f31506 s\hich\af31506\dbch\af31505\loch\f31506 of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under t \hich\af31506\dbch\af31505\loch\f31506 h\hich\af31506\dbch\af31505\loch\f31506 is License. \par \par \hich\af31506\dbch\af31505\loch\f31506 8. Limitation of Liability. \par \par \hich\af31506\dbch\af31505\loch\f31506 In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shal \hich\af31506\dbch\af31505\loch\f31506 l any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to \hich\af31506\dbch\af31505\loch\f31506 \hich\af31506\dbch\af31505\loch\f31506 damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. \par \par \hich\af31506\dbch\af31505\loch\f31506 9. Accepting Warranty or Additional Liability. \par \par \hich\af31506\dbch\af31505\loch\f31506 While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obl \hich\af31506\dbch\af31505\loch\f31506 igations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against ,\hich\af31506\dbch\af31505\loch\f31506 such Contributor by reason of your accepting any such warranty or additional liability.}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid7423185\charrsid8403656 \par }{\*\themedata 504b030414000600080000002100e9de0fbfff0000001c020000130000005b436f6e74656e745f54797065735d2e786d6cac91cb4ec3301045f748fc83e52d4a 9cb2400825e982c78ec7a27cc0c8992416c9d8b2a755fbf74cd25442a820166c2cd933f79e3be372bd1f07b5c3989ca74aaff2422b24eb1b475da5df374fd9ad 5689811a183c61a50f98f4babebc2837878049899a52a57be670674cb23d8e90721f90a4d2fa3802cb35762680fd800ecd7551dc18eb899138e3c943d7e503b6 b01d583deee5f99824e290b4ba3f364eac4a430883b3c092d4eca8f946c916422ecab927f52ea42b89a1cd59c254f919b0e85e6535d135a8de20f20b8c12c3b0 0c895fcf6720192de6bf3b9e89ecdbd6596cbcdd8eb28e7c365ecc4ec1ff1460f53fe813d3cc7f5b7f020000ffff0300504b030414000600080000002100a5d6 a7e7c0000000360100000b0000005f72656c732f2e72656c73848fcf6ac3300c87ef85bd83d17d51d2c31825762fa590432fa37d00e1287f68221bdb1bebdb4f c7060abb0884a4eff7a93dfeae8bf9e194e720169aaa06c3e2433fcb68e1763dbf7f82c985a4a725085b787086a37bdbb55fbc50d1a33ccd311ba548b6309512 0f88d94fbc52ae4264d1c910d24a45db3462247fa791715fd71f989e19e0364cd3f51652d73760ae8fa8c9ffb3c330cc9e4fc17faf2ce545046e37944c69e462 a1a82fe353bd90a865aad41ed0b5b8f9d6fd010000ffff0300504b0304140006000800000021006b799616830000008a0000001c0000007468656d652f746865 6d652f7468656d654d616e616765722e786d6c0ccc4d0ac3201040e17da17790d93763bb284562b2cbaebbf600439c1a41c7a0d29fdbd7e5e38337cedf14d59b 4b0d592c9c070d8a65cd2e88b7f07c2ca71ba8da481cc52c6ce1c715e6e97818c9b48d13df49c873517d23d59085adb5dd20d6b52bd521ef2cdd5eb9246a3d8b 4757e8d3f729e245eb2b260a0238fd010000ffff0300504b030414000600080000002100dd01bcf7be060000b91b0000160000007468656d652f7468656d652f 7468656d65312e786d6cec594f6f1c3514bf23f11dacb997ec26bb6936eaa6ca6e761b48d346d96d518fde19ef8c1bcf78647b93ee0db547242444412051094e 0821a0522b7129a78a4f12288222f52bf06ccfcc8eb393366923a8a07b4866ec9fdffff7fcecb970f156ccd03e1192f2a4edd5dfa97988243e0f6812b6bd6bc3 feb9150f49859300339e90b63725d2bbb8f6f65b17f0aa8a484c10ac4fe42a6e7b9152e9eac282f46118cb77784a12981b73116305af225c08043e00ba315b58 acd59617624c130f253806b2db5cd17d24a7523dfe369ea0abe331f589b79673e931609528a9077c26069a07c9966ee1c427ecf1d7bf7c61f0c15e5da3805497 09b48f59db03a6013f18925bca430c4b05136daf667edec2da8505bc9a2d62ea98b5a5757df3cbd6650b82bd45c35384a38269bddf689ddf28e81b0053f3b85e afd7edd50b7a06807d1fb4b5b2946936fa2bf54e4eb304b28ff3b4bbb566ade1e24bf497e6646e753a9d662b93c5123520fbd898c3afd4961beb8b0ede802cbe 39876f74d6bbdd65076f4016bf3c87ef9f6f2d375cbc01458c267b7368edd07e3fa35e40c69c6d56c25700be52cbe03314444311619ac59827ea79f116e39b5c f401a4c10c2b9a20354dc918fb10d65d1c8f04c59a095e25b83463877c3937a4f921e90b9aaab6f75e8a214566f49e3dfafed9a307e8f0f6c3c3db3f1ddeb973 78fb474bc859b58993b0bceae9371fff75ef03f4e783af9edefdb41a2fcbf8df7ef8f0d79f3fa906420acdc479f2d9fddf1fde7ff2f9477f7c77b702be2ef0a8 0c1fd2984874851ca05d1e8362c62aaee464244eb76218615a5eb19e8412275873a9a0df539183be32c52cf38e234787b816bc2ea08454012f4d6e3a020f2231 51b482f356143bc06dce59878b4a2b6c695e25330f274958cd5c4ccab85d8cf7ab787771e2f8b73749a17ee661e928de8d8823e60ec389c2214988427a8eef11 52a1dd0d4a1dbb6e535f70c9c70adda0a88369a5498674e444d36cd1268dc12fd32a9dc1df8e6db6afa30e67555a6f907d170959815985f043c21c335ec21385 e32a92431cb3b2c12f6315550939980abf8ceb49059e0e09e3a8171029abd65c15a06fc9e95b18aa56a5dbb7d934769142d1bd2a9a9731e765e406dfeb46384e abb0039a4465ecbb720f4214a31daeaae0dbdccd10fd0e7ec0c9b1eebe4e89e3ee1757836b3474449a05889e99880a5f5e22dc89dfc1948d3131a5060abb53ab 639a3caf70330a95db7238bbc20da5f2c997f72ae47e5d4bf63aec5e5539b379a4501f873b5a9ebb5c04f4f5afce1b7892ec104888f92dea4d717e539cbdff7c 713e2e9fcfbe24cfaa301468dd8bd866dbb4def1733bef31656ca0a68c5c96a6f996b0ff047d18d46bcd319414a7b13482479dcdc0c4c185029b354870f53e55 d120c22934ee754f130965463a9428e5120e8d66b892b6c643f3afec91b3a90f23b67a48acb679608797f4707ee628c818a94273b8cd192d69022765b6743e23 0ababd0cb3ba16eac4dcea463453181d6e85cadac4e6800e262f5483c1c29ad0d8206887c0cacb7011a059c38107331268bb5b1fe56e315e384b17c9080724f3 91d67bde4775e3a43c56e614d17ad860d007c81758adc4ada5c9be02b79338a9ccae710cbbdc7bafe2a53c82675e026a47d39125e5e464093a687bade662d343 3e4edbde18cecaf018a7e075a97b49cc42b881f295b061ffc26436593ef3662b57cc4d823a5c8158bbcf29ecd4815448b581656443c34c6521c012cdc9cabfd8 04b39e950215d5e864522cad4030fc6b52801d5dd792f198f8aaececd288b69d7dcd4a299f282206517080466c227631b85f872ae8135009571ea622e817b8a3 d3d636536e71ce92ae7c336670761cb334c259b9d5299a67b2859b8254c860de4ae2816e95b21be54eaf8a49f93352a51cc6ff3355f47e0237104b81f6800ff7 c502239d296d8f0b1571a8426944fdbe80e6c1d40e8816b8e78569082ab8b536ff05d9d7ff6dce591a26ade120a97669880485fd484582901d284b26fa5e40ac 9eed5d9624cb0899882a892b532bf688ec1336d4357059efed1e8a20d44d35c9ca80c11d8d3ff73dcba051a89b9c72be3995acd87b6d0efcd39d8f4d6650caad c3a6a1c9ed5f8858b407b35dd5ae37cbf3bdb7ac889e98b5598d3c2b8059692b686569ff92229c72abb5156b4ee3c5662e1c78715e63182c1aa214ee9190fe03 fb1f153eb35f3ef4863ae4bb505b117cc4d0c4206c20aacfd9c603e902690747d038d9411b4c9a94356dd63a69abe59bf51977ba05df23c6d6929dc4dfa73476 d19cb9ec9c5c3c4b636716766c6dc78e353578f6688ac2d0383fcc18c7986f67e5af5a7c74131cbd01df0d264c49134cf0bd4a60e8a107260f20f92d47b374ed 6f000000ffff0300504b0304140006000800000021000dd1909fb60000001b010000270000007468656d652f7468656d652f5f72656c732f7468656d654d616e 616765722e786d6c2e72656c73848f4d0ac2301484f78277086f6fd3ba109126dd88d0add40384e4350d363f2451eced0dae2c082e8761be9969bb979dc91363 32de3168aa1a083ae995719ac16db8ec8e4052164e89d93b64b060828e6f37ed1567914b284d262452282e3198720e274a939cd08a54f980ae38a38f56e422a3 a641c8bbd048f7757da0f19b017cc524bd62107bd5001996509affb3fd381a89672f1f165dfe514173d9850528a2c6cce0239baa4c04ca5bbabac4df000000ff ff0300504b01022d0014000600080000002100e9de0fbfff0000001c0200001300000000000000000000000000000000005b436f6e74656e745f54797065735d 2e786d6c504b01022d0014000600080000002100a5d6a7e7c0000000360100000b00000000000000000000000000300100005f72656c732f2e72656c73504b01 022d00140006000800000021006b799616830000008a0000001c00000000000000000000000000190200007468656d652f7468656d652f7468656d654d616e61 6765722e786d6c504b01022d0014000600080000002100dd01bcf7be060000b91b00001600000000000000000000000000d60200007468656d652f7468656d65 2f7468656d65312e786d6c504b01022d00140006000800000021000dd1909fb60000001b0100002700000000000000000000000000c80900007468656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73504b050600000000050005005d010000c30a00000000} {\*\colorschememapping 3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d22796573223f3e0d0a3c613a636c724d 617020786d6c6e733a613d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f64726177696e676d6c2f323030362f6d6169 6e22206267313d226c743122207478313d22646b3122206267323d226c743222207478323d22646b322220616363656e74313d22616363656e74312220616363 656e74323d22616363656e74322220616363656e74333d22616363656e74332220616363656e74343d22616363656e74342220616363656e74353d22616363656e74352220616363656e74363d22616363656e74362220686c696e6b3d22686c696e6b2220666f6c486c696e6b3d22666f6c486c696e6b222f3e} {\*\latentstyles\lsdstimax267\lsdlockeddef0\lsdsemihiddendef1\lsdunhideuseddef1\lsdqformatdef0\lsdprioritydef99{\lsdlockedexcept \lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority0 \lsdlocked0 Normal; \lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 1;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 2;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 3;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 4; \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 5;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 6;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 7;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 8;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 9; \lsdpriority39 \lsdlocked0 toc 1;\lsdpriority39 \lsdlocked0 toc 2;\lsdpriority39 \lsdlocked0 toc 3;\lsdpriority39 \lsdlocked0 toc 4;\lsdpriority39 \lsdlocked0 toc 5;\lsdpriority39 \lsdlocked0 toc 6;\lsdpriority39 \lsdlocked0 toc 7; \lsdpriority39 \lsdlocked0 toc 8;\lsdpriority39 \lsdlocked0 toc 9;\lsdqformat1 \lsdpriority35 \lsdlocked0 caption;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority10 \lsdlocked0 Title;\lsdpriority1 \lsdlocked0 Default Paragraph Font; \lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority11 \lsdlocked0 Subtitle;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority22 \lsdlocked0 Strong;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority20 \lsdlocked0 Emphasis; \lsdsemihidden0 \lsdunhideused0 \lsdpriority59 \lsdlocked0 Table Grid;\lsdunhideused0 \lsdlocked0 Placeholder Text;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority1 \lsdlocked0 No Spacing; \lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid; \lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1; \lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2; \lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading; \lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 1; \lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 1; \lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 1;\lsdunhideused0 \lsdlocked0 Revision; \lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority34 \lsdlocked0 List Paragraph;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority29 \lsdlocked0 Quote;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority30 \lsdlocked0 Intense Quote; \lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 1; \lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 1; \lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 2; \lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 2; \lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 2; \lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 2; \lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 2; \lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 3; \lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 3; \lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 3; \lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 3; \lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 3; \lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 4; \lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 4; \lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 4; \lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 4; \lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 5; \lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 5; \lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 5; \lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 5; \lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 5; \lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 6; \lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 6; \lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 6; \lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 6; \lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 6; \lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority19 \lsdlocked0 Subtle Emphasis;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority21 \lsdlocked0 Intense Emphasis; \lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority31 \lsdlocked0 Subtle Reference;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority32 \lsdlocked0 Intense Reference; \lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority33 \lsdlocked0 Book Title;\lsdpriority37 \lsdlocked0 Bibliography;\lsdqformat1 \lsdpriority39 \lsdlocked0 TOC Heading;}}{\*\datastore 010500000200000018000000 4d73786d6c322e534158584d4c5265616465722e362e3000000000000000000000060000 d0cf11e0a1b11ae1000000000000000000000000000000003e000300feff090006000000000000000000000001000000010000000000000000100000feffffff00000000feffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffdfffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffff52006f006f007400200045006e00740072007900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000500ffffffffffffffffffffffff0c6ad98892f1d411a65f0040963251e5000000000000000000000000b06a 9820e9b0cc01feffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000105000000000000}} ================================================ FILE: Deployment/License.txt ================================================ SOURCE CODE LICENSE License: Apache License 2.0 (Apache) Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: 1. You must give any other recipients of the Work or Derivative Works a copy of this License; and 2. You must cause any modified files to carry prominent notices stating that You changed the files; and 3. You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and 4. If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. ================================================ FILE: Deployment/Machine.config ================================================
================================================ FILE: Deployment/Samples/ClassLibraryExt/AssemblyInfo.cs ================================================ using System.Reflection; using System.Runtime.CompilerServices; // // General Information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information // associated with an assembly. // [assembly: AssemblyTitle("Sample Extension")] [assembly: AssemblyDescription("The Phalanger Class Library Sample Extension")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("")] [assembly: AssemblyCopyright("")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] // // Version information for an assembly consists of the following four values: // // Major Version // Minor Version // Build Number // Revision // // You can specify all the values or you can default the Revision and Build Numbers // by using the '*' as shown below: [assembly: AssemblyVersion("1.0.0.0")] // // The attribute telling the Phalanger this is PHP extension written in managed code. // [assembly: PHP.Core.PhpLibrary( null, "ClassLibraryExt",/*human readable name of this extension*/ new string[]{/*names of legacy extensions implemented by this assembly*/})] // // In order to sign your assembly you must specify a key to use. Refer to the // Microsoft .NET Framework documentation for more information on assembly signing. // // Use the attributes below to control which key is used for signing. // // Notes: // (*) If no key is specified, the assembly is not signed. // (*) KeyName refers to a key that has been installed in the Crypto Service // Provider (CSP) on your machine. KeyFile refers to a file which contains // a key. // (*) If the KeyFile and the KeyName values are both specified, the // following processing occurs: // (1) If the KeyName can be found in the CSP, that key is used. // (2) If the KeyName does not exist and the KeyFile does exist, the key // in the KeyFile is installed into the CSP and used. // (*) In order to create a KeyFile, you can use the sn.exe (Strong Name) utility. // When specifying the KeyFile, the location of the KeyFile should be // relative to the project output directory which is // %Project Directory%\obj\. For example, if your KeyFile is // located in the project directory, you would specify the AssemblyKeyFile // attribute as [assembly: AssemblyKeyFile("..\\..\\mykey.snk")] // (*) Delay Signing is an advanced option - see the Microsoft .NET Framework // documentation for more information on this. // ///*moved to project properties*/[assembly: AssemblyDelaySign(false)] ///*moved to project properties*/[assembly: AssemblyKeyFile("../../Key.snk")] ///*moved to project properties*/[assembly: AssemblyKeyName("")] ================================================ FILE: Deployment/Samples/ClassLibraryExt/Class.cs ================================================ using System; using System.Runtime.Serialization; using PHP.Core; using PHP.Core.Reflection; // // PHP.Library is the root namespace for PHalanger Extension functions, constants and classes. // namespace PHP.Library { /// /// Define global PHP type "MyPhpClass". /// /// Currently, dynamic (argless) stubs must be created manually. /// Argless stubs have a signature of "object ????(object instance, PhpStack stack)" and /// they must be registered manually within __PopulateTypeDesc method. /// [Serializable] [ImplementsType] public partial class MyPhpClass : PhpObject { #region class & PHP class constants /// Class constant "MyPhpClass::e" public static readonly object e = 2.71; #endregion #region properties /// Public instance field. public PhpReference x; /// Public static field. /// The field should be marked as [ThreadStatic] to get initialized every time the web request starts. [PhpHasInitValue, ThreadStatic, System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] public static PhpReference y; #endregion #region class method /// Public instance method. [ImplementsMethod] public object Foo(string value) { // echo the value: ScriptContext.CurrentContext.Echo(value); return null; } #endregion #region Constructor public MyPhpClass() : base(ScriptContext.CurrentContext, true) { __construct(); } [PhpVisible, PhpFinal, ImplementsMethod] public void __construct() { // class instance initialization } #endregion } } ================================================ FILE: Deployment/Samples/ClassLibraryExt/ClassLibraryExt.csproj ================================================  Local 9.0.30729 2.0 {C0890912-84B0-48BE-B187-1DF97EE7C2B8} Debug AnyCPU ClassLibraryExt Key.snk JScript Grid IE50 false Library ClassLibraryExt OnBuildSuccess 3.5 true bin\Debug\ false 285212672 false DEBUG;TRACE true 4096 false false false false false 4 full prompt bin\Release\ false 285212672 false TRACE false 4096 false true false false false 4 none prompt PhpNetCore ..\..\..\Source\Core\Bin\Debug\PhpNetCore.dll System Code Code ================================================ FILE: Deployment/Samples/ClassLibraryExt/ClassLibraryExt.sln ================================================ Microsoft Visual Studio Solution File, Format Version 10.00 # Visual Studio 2008 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ClassLibraryExt", "ClassLibraryExt.csproj", "{C0890912-84B0-48BE-B187-1DF97EE7C2B8}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {C0890912-84B0-48BE-B187-1DF97EE7C2B8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C0890912-84B0-48BE-B187-1DF97EE7C2B8}.Debug|Any CPU.Build.0 = Debug|Any CPU {C0890912-84B0-48BE-B187-1DF97EE7C2B8}.Release|Any CPU.ActiveCfg = Release|Any CPU {C0890912-84B0-48BE-B187-1DF97EE7C2B8}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal ================================================ FILE: Deployment/Samples/ClassLibraryExt/Globals.cs ================================================ using System; using System.Runtime.Serialization; using PHP.Core; using PHP.Core.Reflection; // // PHP.Library is the root namespace for PHalanger Extension functions, constants and classes. // namespace PHP.Library { // The class without [ImplementsType] attribute is just a wrapper // holding PHP global functions and constants. public sealed class MyClass { /// /// Define global constant "MY_NEW_CONSTANT". /// [ImplementsConstant("MY_NEW_CONSTANT")] public const string MyConstant = "Hello World!"; /// /// Define global function "foo". /// /// [ImplementsFunction("foo")] public static PhpArray Foo(int number) { return PhpArray.New(1, 2, 3, number); } } } ================================================ FILE: Deployment/Samples/ConsoleApplication/ConsoleApplication.sln ================================================ Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 Project("{F0CD5B9D-43B4-49B3-95FA-7F4F8FAFA5C0}") = "disks", "disks\disks.phpproj", "{862F0609-B853-4314-A783-26F1579F3035}" EndProject Project("{F0CD5B9D-43B4-49B3-95FA-7F4F8FAFA5C0}") = "netmodules", "netmodules\netmodules.phpproj", "{CFDCE4DB-7273-4D4E-879C-4B4ED2EAB558}" EndProject Project("{F0CD5B9D-43B4-49B3-95FA-7F4F8FAFA5C0}") = "quadratic", "quadratic\quadratic.phpproj", "{1CFC1AAE-CAD2-4A96-972B-1CB272DE518D}" EndProject Project("{F0CD5B9D-43B4-49B3-95FA-7F4F8FAFA5C0}") = "Phalanger greeting", "Phalanger greeting\Phalanger greeting.phpproj", "{451F18CD-836D-4B10-825E-F06A002F3E7B}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {862F0609-B853-4314-A783-26F1579F3035}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {862F0609-B853-4314-A783-26F1579F3035}.Debug|Any CPU.Build.0 = Debug|Any CPU {862F0609-B853-4314-A783-26F1579F3035}.Release|Any CPU.ActiveCfg = Release|Any CPU {862F0609-B853-4314-A783-26F1579F3035}.Release|Any CPU.Build.0 = Release|Any CPU {CFDCE4DB-7273-4D4E-879C-4B4ED2EAB558}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {CFDCE4DB-7273-4D4E-879C-4B4ED2EAB558}.Debug|Any CPU.Build.0 = Debug|Any CPU {CFDCE4DB-7273-4D4E-879C-4B4ED2EAB558}.Release|Any CPU.ActiveCfg = Release|Any CPU {CFDCE4DB-7273-4D4E-879C-4B4ED2EAB558}.Release|Any CPU.Build.0 = Release|Any CPU {1CFC1AAE-CAD2-4A96-972B-1CB272DE518D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1CFC1AAE-CAD2-4A96-972B-1CB272DE518D}.Debug|Any CPU.Build.0 = Debug|Any CPU {1CFC1AAE-CAD2-4A96-972B-1CB272DE518D}.Release|Any CPU.ActiveCfg = Release|Any CPU {1CFC1AAE-CAD2-4A96-972B-1CB272DE518D}.Release|Any CPU.Build.0 = Release|Any CPU {451F18CD-836D-4B10-825E-F06A002F3E7B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {451F18CD-836D-4B10-825E-F06A002F3E7B}.Debug|Any CPU.Build.0 = Debug|Any CPU {451F18CD-836D-4B10-825E-F06A002F3E7B}.Release|Any CPU.ActiveCfg = Release|Any CPU {451F18CD-836D-4B10-825E-F06A002F3E7B}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal ================================================ FILE: Deployment/Samples/ConsoleApplication/MultiScriptAssembly/build.cmd ================================================ phpc /target:dll /static+ /root:. /recurse:ext/ /out:bin/ext.dll phpc /target:exe /static+ main.php /r:bin/ext.dll /out:bin/main.exe pause ================================================ FILE: Deployment/Samples/ConsoleApplication/MultiScriptAssembly/ext/defs.php ================================================ ================================================ FILE: Deployment/Samples/ConsoleApplication/MultiScriptAssembly/ext/fncs.php ================================================ ================================================ FILE: Deployment/Samples/ConsoleApplication/MultiScriptAssembly/ext/types.php ================================================ a = $a; $this->b = $b; } function __toString() { return "X(){ a = $this->a, b = $this->b };"; } } ?> ================================================ FILE: Deployment/Samples/ConsoleApplication/MultiScriptAssembly/main.php ================================================ ================================================ FILE: Deployment/Samples/ConsoleApplication/Phalanger greeting/Phalanger greeting.phpproj ================================================  Debug Phalanger_greeting 2.0 {451f18cd-836d-4b10-825e-f06a002f3e7b} Standard Exe Phalanger_greeting Program.php Phalanger greeting true bin\Debug\ false bin\Release\ mscorlib mscorlib.dll System System.dll PhpNetClassLibrary PhpNetClassLibrary.dll ================================================ FILE: Deployment/Samples/ConsoleApplication/Phalanger greeting/Program.php ================================================ ================================================ FILE: Deployment/Samples/ConsoleApplication/Phalanger greeting/build.cmd ================================================ phpc /target:exe Program.php ================================================ FILE: Deployment/Samples/ConsoleApplication/disks/Program.php ================================================ ================================================ FILE: Deployment/Samples/ConsoleApplication/disks/build.cmd ================================================ phpc /target:exe Program.php ================================================ FILE: Deployment/Samples/ConsoleApplication/disks/disks.phpproj ================================================  Debug disks 2.0 {862f0609-b853-4314-a783-26f1579f3035} Standard Exe disks Program.php disks true bin\Debug\ false bin\Release\ mscorlib mscorlib.dll System System.dll PhpNetClassLibrary PhpNetClassLibrary.dll ================================================ FILE: Deployment/Samples/ConsoleApplication/netmodules/Program.php ================================================ write(); $a->foo("hello"); $a->write(); $b = new B("BBB"); $b->write(); $b->foo("bye"); $b->write(); fgets(STDIN); ?> ================================================ FILE: Deployment/Samples/ConsoleApplication/netmodules/a.php ================================================ ================================================ FILE: Deployment/Samples/ConsoleApplication/netmodules/b.php ================================================ x = $a; echo "Hello! I'm a class A and I am constructed just now.\n"; } function foo($x) { $this->x = $x; echo "Class A: I have just stored $x passed as parameter to my protected field \$x.\n"; } function write() { echo "Protected \$x field: {$this->x}\n"; } } class B extends A { function foo($x) { $this->x = "bar"; echo "Class B: My overridden method foo has been called. I have stored what I like to \$x private field.\n"; } } ?> ================================================ FILE: Deployment/Samples/ConsoleApplication/netmodules/build.cmd ================================================ phpc /target:exe Program.php a.php b.php ================================================ FILE: Deployment/Samples/ConsoleApplication/netmodules/netmodules.phpproj ================================================  Debug netmodules 2.0 {cfdce4db-7273-4d4e-879c-4b4ed2eab558} Standard Exe netmodules Program.php netmodules true bin\Debug\ false bin\Release\ mscorlib mscorlib.dll System System.dll PhpNetClassLibrary PhpNetClassLibrary.dll Code Code ================================================ FILE: Deployment/Samples/ConsoleApplication/quadratic/Program.php ================================================ b= c=\n"; echo "\n"; echo "Consider a*x^2 + b*x + c = 0 equalisation.\n"; echo " absolute term by x^2\n"; echo " absolute term by x\n"; echo " absolute term of the equation\n"; echo "\n"; sleep(2); exit; } function process_parameters(&$a, &$b, &$c) { global $argc, $argv; $a = null; $b = null; $c = null; if ($argc != 4) // first is executable file usage(); for ($i = 1; $i < $argc; $i++) { if (strpos($argv[$i], "a=") === 0) $la = substr($argv[$i], 2); else if (strpos($argv[$i], "b=") === 0) $lb = substr($argv[$i], 2); else if (strpos($argv[$i], "c=") === 0) $lc = substr($argv[$i], 2); } if (!isset($la) || !isset($lb) || !isset($lc)) usage(); $a = $la; $b = $lb; $c = $lc; } echo "Quadratic calculator sample\n"; $a = null; $b = null; $c = null; process_parameters($a, $b, $c); if ($a == 0) // linear equation { if ($b == 0) { if ($c == 0) echo "Any x is suitable.\n"; else echo "No x is solution.\n"; } else { echo "x = ".(-$c/$b)."\n"; } } else // quadratic { $D = $b*$b - 4*$a*$c; if ($D < 0) echo "No x is solution.\n"; else if ($D == 0) echo "x = ".(-$b/(2*$a))."\n"; else { $x1 = (-$b + sqrt($D))/(2*$a); $x2 = (-$b - sqrt($D))/(2*$a); echo "x1 = $x1\n"; echo "x2 = $x2\n"; } } fgets(STDIN); ?> ================================================ FILE: Deployment/Samples/ConsoleApplication/quadratic/build.cmd ================================================ phpc /target:exe Program.php ================================================ FILE: Deployment/Samples/ConsoleApplication/quadratic/quadratic.phpproj ================================================  Debug quadratic 2.0 {1cfc1aae-cad2-4a96-972b-1cb272de518d} Standard Exe quadratic Program.php quadratic true bin\Debug\ false bin\Release\ mscorlib mscorlib.dll System System.dll PhpNetClassLibrary PhpNetClassLibrary.dll ================================================ FILE: Deployment/Samples/Extensions/Exif/App.config ================================================ ================================================ FILE: Deployment/Samples/Extensions/Exif/AssemblyInfo.cs ================================================ using System.Reflection; using System.Runtime.CompilerServices; // // General Information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information // associated with an assembly. // [assembly: AssemblyTitle("")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("")] [assembly: AssemblyCopyright("")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] // // Version information for an assembly consists of the following four values: // // Major Version // Minor Version // Build Number // Revision // // You can specify all the values or you can default the Revision and Build Numbers // by using the '*' as shown below: [assembly: AssemblyVersion("1.0.*")] // // In order to sign your assembly you must specify a key to use. Refer to the // Microsoft .NET Framework documentation for more information on assembly signing. // // Use the attributes below to control which key is used for signing. // // Notes: // (*) If no key is specified, the assembly is not signed. // (*) KeyName refers to a key that has been installed in the Crypto Service // Provider (CSP) on your machine. KeyFile refers to a file which contains // a key. // (*) If the KeyFile and the KeyName values are both specified, the // following processing occurs: // (1) If the KeyName can be found in the CSP, that key is used. // (2) If the KeyName does not exist and the KeyFile does exist, the key // in the KeyFile is installed into the CSP and used. // (*) In order to create a KeyFile, you can use the sn.exe (Strong Name) utility. // When specifying the KeyFile, the location of the KeyFile should be // relative to the project output directory which is // %Project Directory%\obj\. For example, if your KeyFile is // located in the project directory, you would specify the AssemblyKeyFile // attribute as [assembly: AssemblyKeyFile("..\\..\\mykey.snk")] // (*) Delay Signing is an advanced option - see the Microsoft .NET Framework // documentation for more information on this. // [assembly: AssemblyDelaySign(false)] [assembly: AssemblyKeyFile("")] [assembly: AssemblyKeyName("")] ================================================ FILE: Deployment/Samples/Extensions/Exif/Class.cs ================================================ using System; using System.Collections.Generic; using PHP.Core; using PHP.Library; namespace ExtensionSamples { /// /// Uses the php_exif extension to extract EXIF headers from an image file. /// class ExifSample { /// /// The main entry point for the application. /// [STAThread] static void Main(string[] args) { Console.WriteLine("Enter path to a JPEG or TIFF file:"); PhpArray exif = Exif.read_exif_data(new PhpBytes(Console.ReadLine())); if (exif != null) { foreach (KeyValuePair section in exif) { PhpArray array = section.Value as PhpArray; if (array != null) { foreach (KeyValuePair entry in array) { Console.WriteLine("{0}.{1}: {2}", section.Key.Object, entry.Key.Object, entry.Value); } } else Console.WriteLine("{0}: {1}", section.Key.Object, section.Value); } } else Console.WriteLine("Error reading EXIF headers from the file."); Console.ReadLine(); } } } ================================================ FILE: Deployment/Samples/Extensions/Exif/Exif.csproj ================================================  Local 8.0.50727 2.0 {C466FDE8-0F6C-4AF4-9C27-91BB14930968} Debug AnyCPU App.ico Exif JScript Grid IE50 false Exe Exif OnBuildSuccess 2.0 bin\Debug\ false 285212672 false DEBUG;TRACE true 4096 false false false false false 4 full prompt bin\Release\ false 285212672 false TRACE false 4096 false true false false false 4 none prompt PhpNetCore ..\..\..\..\Source\Core\Bin\Release\PhpNetCore.dll php_exif.mng ..\..\..\Wrappers\php_exif.mng.dll System System.Data System.XML Code Code ================================================ FILE: Deployment/Samples/Extensions/Extensions.sln ================================================ Microsoft Visual Studio Solution File, Format Version 10.00 # Visual Studio 2008 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ming", "Ming\Ming.csproj", "{93AE8286-59AA-4B47-B33C-7BA783E032D1}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Zlib", "Zlib\Zlib.csproj", "{F12A4670-4A54-4348-A6A8-BC00CD221789}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Exif", "Exif\Exif.csproj", "{C466FDE8-0F6C-4AF4-9C27-91BB14930968}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {93AE8286-59AA-4B47-B33C-7BA783E032D1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {93AE8286-59AA-4B47-B33C-7BA783E032D1}.Debug|Any CPU.Build.0 = Debug|Any CPU {93AE8286-59AA-4B47-B33C-7BA783E032D1}.Release|Any CPU.ActiveCfg = Release|Any CPU {93AE8286-59AA-4B47-B33C-7BA783E032D1}.Release|Any CPU.Build.0 = Release|Any CPU {F12A4670-4A54-4348-A6A8-BC00CD221789}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F12A4670-4A54-4348-A6A8-BC00CD221789}.Debug|Any CPU.Build.0 = Debug|Any CPU {F12A4670-4A54-4348-A6A8-BC00CD221789}.Release|Any CPU.ActiveCfg = Release|Any CPU {F12A4670-4A54-4348-A6A8-BC00CD221789}.Release|Any CPU.Build.0 = Release|Any CPU {C466FDE8-0F6C-4AF4-9C27-91BB14930968}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C466FDE8-0F6C-4AF4-9C27-91BB14930968}.Debug|Any CPU.Build.0 = Debug|Any CPU {C466FDE8-0F6C-4AF4-9C27-91BB14930968}.Release|Any CPU.ActiveCfg = Release|Any CPU {C466FDE8-0F6C-4AF4-9C27-91BB14930968}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal ================================================ FILE: Deployment/Samples/Extensions/Ming/App.config ================================================ ================================================ FILE: Deployment/Samples/Extensions/Ming/AssemblyInfo.cs ================================================ using System.Reflection; using System.Runtime.CompilerServices; // // General Information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information // associated with an assembly. // [assembly: AssemblyTitle("")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("")] [assembly: AssemblyCopyright("")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] // // Version information for an assembly consists of the following four values: // // Major Version // Minor Version // Build Number // Revision // // You can specify all the values or you can default the Revision and Build Numbers // by using the '*' as shown below: [assembly: AssemblyVersion("1.0.*")] // // In order to sign your assembly you must specify a key to use. Refer to the // Microsoft .NET Framework documentation for more information on assembly signing. // // Use the attributes below to control which key is used for signing. // // Notes: // (*) If no key is specified, the assembly is not signed. // (*) KeyName refers to a key that has been installed in the Crypto Service // Provider (CSP) on your machine. KeyFile refers to a file which contains // a key. // (*) If the KeyFile and the KeyName values are both specified, the // following processing occurs: // (1) If the KeyName can be found in the CSP, that key is used. // (2) If the KeyName does not exist and the KeyFile does exist, the key // in the KeyFile is installed into the CSP and used. // (*) In order to create a KeyFile, you can use the sn.exe (Strong Name) utility. // When specifying the KeyFile, the location of the KeyFile should be // relative to the project output directory which is // %Project Directory%\obj\. For example, if your KeyFile is // located in the project directory, you would specify the AssemblyKeyFile // attribute as [assembly: AssemblyKeyFile("..\\..\\mykey.snk")] // (*) Delay Signing is an advanced option - see the Microsoft .NET Framework // documentation for more information on this. // [assembly: AssemblyDelaySign(false)] [assembly: AssemblyKeyFile("")] [assembly: AssemblyKeyName("")] ================================================ FILE: Deployment/Samples/Extensions/Ming/Class.cs ================================================ using System; using PHP.Core; using PHP.Library; namespace ExtensionSamples { /// /// Uses the php_ming extension to create a Flash movie with rotating red square. /// The movie is saved as "ming_test.swf" in current directory. /// class MingSample { /// /// The main entry point for the application. /// [STAThread] static void Main(string[] args) { SWFShape s = new SWFShape(); PhpObject obj = s.addFill(0xff, 0, 0); s.setRightFill(obj); s.movePenTo(-50,-50); s.drawLineTo(50,-50); s.drawLineTo(50,50); s.drawLineTo(-50,50); s.drawLineTo(-50,-50); SWFSprite p = new SWFSprite(); SWFDisplayItem i = p.add(s) as SWFDisplayItem; for(int j = 0; j < 17; j++) { p.nextFrame(); i.rotate(5); } p.nextFrame(); SWFMovie m = new SWFMovie(); i = m.add(p) as SWFDisplayItem; i.moveTo(160,120); i.setName(new PhpBytes("item")); m.setBackground(0xff, 0xff, 0xff); m.setDimension(320,240); m.save(new PhpBytes("ming_test.swf")); } } } ================================================ FILE: Deployment/Samples/Extensions/Ming/Ming.csproj ================================================  Local 8.0.50727 2.0 {93AE8286-59AA-4B47-B33C-7BA783E032D1} Debug AnyCPU App.ico Ming JScript Grid IE50 false Exe Ming OnBuildSuccess 2.0 bin\Debug\ false 285212672 false DEBUG;TRACE true 4096 false false false false false 4 full prompt bin\Release\ false 285212672 false TRACE false 4096 false true false false false 4 none prompt PhpNetCore ..\..\..\..\Source\Core\Bin\Release\PhpNetCore.dll php_ming.mng ..\..\..\Wrappers\php_ming.mng.dll System System.Data System.XML Code Code ================================================ FILE: Deployment/Samples/Extensions/Zlib/App.config ================================================ ================================================ FILE: Deployment/Samples/Extensions/Zlib/AssemblyInfo.cs ================================================ using System.Reflection; using System.Runtime.CompilerServices; // // General Information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information // associated with an assembly. // [assembly: AssemblyTitle("")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("")] [assembly: AssemblyCopyright("")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] // // Version information for an assembly consists of the following four values: // // Major Version // Minor Version // Build Number // Revision // // You can specify all the values or you can default the Revision and Build Numbers // by using the '*' as shown below: [assembly: AssemblyVersion("1.0.*")] // // In order to sign your assembly you must specify a key to use. Refer to the // Microsoft .NET Framework documentation for more information on assembly signing. // // Use the attributes below to control which key is used for signing. // // Notes: // (*) If no key is specified, the assembly is not signed. // (*) KeyName refers to a key that has been installed in the Crypto Service // Provider (CSP) on your machine. KeyFile refers to a file which contains // a key. // (*) If the KeyFile and the KeyName values are both specified, the // following processing occurs: // (1) If the KeyName can be found in the CSP, that key is used. // (2) If the KeyName does not exist and the KeyFile does exist, the key // in the KeyFile is installed into the CSP and used. // (*) In order to create a KeyFile, you can use the sn.exe (Strong Name) utility. // When specifying the KeyFile, the location of the KeyFile should be // relative to the project output directory which is // %Project Directory%\obj\. For example, if your KeyFile is // located in the project directory, you would specify the AssemblyKeyFile // attribute as [assembly: AssemblyKeyFile("..\\..\\mykey.snk")] // (*) Delay Signing is an advanced option - see the Microsoft .NET Framework // documentation for more information on this. // [assembly: AssemblyDelaySign(false)] [assembly: AssemblyKeyFile("")] [assembly: AssemblyKeyName("")] ================================================ FILE: Deployment/Samples/Extensions/Zlib/Class.cs ================================================ using System; using PHP.Core; using PHP.Library; namespace ExtensionSamples { /// /// Uses the php_zlib extension to create a .gz file in current directory and /// compress a string. /// class ZlibSample { /// /// The main entry point for the application. /// [STAThread] static void Main(string[] args) { string filename = "zlibtest.gz"; string s = "Only a test, test, test, test, test, test, test, test!\n"; // open file for writing with maximum compression PhpResource zp = Zlib.gzopen(new PhpBytes(filename), new PhpBytes("w9")); // write string to file Zlib.gzwrite(zp, new PhpBytes(s)); // close file Zlib.gzclose(zp); // open file for reading zp = Zlib.gzopen(new PhpBytes(filename), new PhpBytes("r")); // output contents of the file and close it Console.WriteLine(Zlib.gzread(zp, 128)); Zlib.gzclose(zp); Console.ReadLine(); } } } ================================================ FILE: Deployment/Samples/Extensions/Zlib/Zlib.csproj ================================================  Local 8.0.50727 2.0 {F12A4670-4A54-4348-A6A8-BC00CD221789} Debug AnyCPU App.ico Zlib JScript Grid IE50 false Exe Zlib OnBuildSuccess 2.0 bin\Debug\ false 285212672 false DEBUG;TRACE true 4096 false false false false false 4 full prompt bin\Release\ false 285212672 false TRACE false 4096 false true false false false 4 none prompt PhpNetClassLibrary ..\..\..\..\Source\ClassLibrary\Bin\Release\PhpNetClassLibrary.dll PhpNetCore ..\..\..\..\Source\Core\Bin\Release\PhpNetCore.dll php_zlib.mng ..\..\..\Wrappers\php_zlib.mng.dll System System.Data System.XML Code Code ================================================ FILE: Deployment/Samples/LinqAndGenerics/App.config ================================================
================================================ FILE: Deployment/Samples/LinqAndGenerics/Demo.php ================================================ ================================================ FILE: Deployment/Samples/LinqAndGenerics/Generics.php ================================================ { private static function Action($element) { echo "element: $element\n"; } static function Display(i'G\List'<:T:> $list) { // creating an instance of a generic delegate $action = new S\Action<:T:>(array("self", "Action")); $list->ForEach($action); } } // Generic class with two generic parameters: class C1<:T, U:> { } // Generic class with one generic parameter: class C2<:T:> extends C1<:T, bool:> { } // Non-generic class: class C3 extends C1<:string, double:> { } // Generic class implementing BCL generic interface. The generic parameter has a default // value, which means that in PHP the generic parameter can be ommitted. class MyGenericComparer<:T = array:> implements IComparer<:T:> { function Compare($x, $y) { if ($x < $y) return -1; if ($x > $y) return 1; return 0; } } class Generics { // The following generic method has a default generic parameter. If it is called without // generic argument, string will be used. // // Two export overloads are generated (C# syntax): // object GenericMethod(string arg1); // object GenericMethod(T arg1); [\Export] static function GenericMethod<:T = string:>(T $arg1) { $dict = new G\Dictionary<:string, T:>; $dict->Add("test", $arg1); return $dict; } static function Run() { echo "Creating an instance of a generic type instantiation:\n"; // list is a keyword so we need to escape it using i'' $x = new i'G\List'<:int:>; echo $x->GetType()->FullName . "\n"; $x->Add(2); $x->Add(3); $x->Add(5); $x->Add(7); $x->Add(11); echo "\nEnumerating via generic delegate:\n"; Displayer<:int:>::Display($x); echo "\nEnumerating via foreach:\n"; foreach ($x as $element) { echo "element: $element\n"; } echo "\nCalling BCL generic method:\n"; // no need to explicitly create the delegate, just pass the target designation $all_primes = i'S\Array'::TrueForAll<:int:>($x->ToArray(), array("self", "IsPrime")); echo ($all_primes ? "All elements are primes" : "Nope"); echo "\n"; echo "\nCalling generic method with default generic argument:\n"; $y = self::GenericMethod("hello"); echo $y->GetType()->FullName . "\n"; echo "\nCalling generic method with generic argument supplied at run-time:\n"; $args = array( array("@int", -10), array("@bool", true), array("@string", "xyz"), array("System\EventArgs", S\EventArgs::$Empty) ); foreach ($args as $arg) { // we are dynamic! $dict = self::GenericMethod<:$arg[0]:>($arg[1]); foreach ($dict as $element) { echo S\Convert::ToString($element) . "\n"; } } echo "\n\n"; } // Called by Array::TrueForAll private static function IsPrime($n) { echo "checking element: $n\n"; if ($n < 2) return false; for ($i = 2; ($i * $i) < $n; $i++) { if (($n % $i) == 0) return false; } return true; } } } ?> ================================================ FILE: Deployment/Samples/LinqAndGenerics/Interop.php ================================================ GetHashCode(); } } class Interop { // The following method is "exported" which means that overloads callable from other .NET languages // will be generated. The signatures are also determined by PHP type hints if they are present. // // Two overloads will be generated in this case (C# syntax): // object f(object a, ref object b, int c, ref string d, out double e); // object f(object a, ref object b, int c, ref string d, out double e, ICollection f); [\Export] function f($a, &$b, int $c, string &$d, [\Out]double &$e, \System\Collections\ICollection $f = NULL) { echo "f invoked with arguments:"; echo "$a, $b, $c, $d, $e, $f"; // change the arguments passed by ref $b = 123; $d = "abc"; $e = 3.14; return "OK"; } // The following field is also exported. It will be exposed as a property of the respective name. // The generated accessors will do all the necessary conversions from CLR to PHP and vice versa. [\Export] public $x; static function Run() { echo "Calling a BCL method with out parameter:\n"; $x = 0; echo "before: x = $x\n"; S\Int32::TryParse("1", $x); echo "after: x = $x\n"; echo "\n"; echo "Calling a BCL method with 'params' variable number of arguments:\n"; echo i'S\String'::Format("{0} {1} {2} {3} {4} {5} {6}\n\n", 1, 1.1, false, "test", S\DateTime::$Now, S\Environment::$TickCount, S\AppDomain::$CurrentDomain->FriendlyName); echo "Calling an exported field accessor:\n"; // let's find and invoke the exported field accessor via Reflection $property = S\Reflection\Assembly::GetEntryAssembly()->GetType("Phalanger.Interop")->GetProperty("x"); $a = new Interop(); $a->x = 123; echo "before: a.x = $a->x\n"; $property->SetValue($a, 987, array()); echo "after: a.x = $a->x\n"; echo "\n\n"; } } } ?> ================================================ FILE: Deployment/Samples/LinqAndGenerics/Linq.php ================================================ ProductID = $productID; $this->Name = $name; $this->Category = $category; $this->UnitPrice = $unitPrice; $this->UnitsInStock = $unitsInStock; } public $ProductID; public $Name; public $Category; public $UnitPrice; public $UnitsInStock; } class Order { public function Order($orderID, $productID, $quantity, $customerName) { $this->OrderID = $orderID; $this->ProductID = $productID; $this->Quantity = $quantity; $this->CustomerName = $customerName; } public $OrderID; public $ProductID; public $Quantity; public $CustomerName; } class Linq { private static function Display($label, $data) { echo "$label\n"; $first = true; foreach ($data as $item) { if ($first) $first = false; else echo ", "; \print_r( $item ); } echo "\n\n"; } static function Run() { $random = new S\Random; for ($i = 0; $i < 20; $i++) { $numbers[] = $random->Next(100); } // simple LINQ queries on an integer array self::Display("All numbers:", from $numbers as $n select $n ); self::Display("Numbers >50:", from $numbers as $n where $n > 50 select $n ); $products = self::GetProductList(); $orders = self::GetOrderList(); self::Display("Sold out products:", from $products as $p where $p->UnitsInStock == 0 select $p->Name ); self::Display("In-stock products that cost more than 3.00:", from $products as $p where $p->UnitsInStock > 0 && $p->UnitPrice > 3.00 select $p->Name ); self::Display("Products with pending orders:", from $products as $p, $orders as $o where $p->ProductID == $o->ProductID select "$p->Name ordered by $o->CustomerName" ); self::Display("Ordered products that do not have sufficient in-stock count:", from $products as $p, $orders as $o where $p->ProductID == $o->ProductID && $p->UnitsInStock < $o->Quantity select "$o->Quantity of $p->Name ordered by $o->CustomerName" ); echo "\n"; } private static function GetProductList() { $list = new i'G\List'<:Product:>; $list->Add(new Product(1, "Chai", "Beverages", 18.0, 39)); $list->Add(new Product(2, "Chang", "Beverages", 19.0, 17)); $list->Add(new Product(3, "Aniseed Syrup", "Condiments", 10.0, 13)); $list->Add(new Product(4, "Chef Anton's Cajun Seasoning", "Condiments", 22.0, 53)); $list->Add(new Product(5, "Chef Anton's Gumbo Mix", "Condiments", 21.35, 0)); $list->Add(new Product(6, "Grandma's Boysenberry Spread", "Condiments", 25.0, 120)); $list->Add(new Product(7, "Uncle Bob's Organic Dried Pears", "Produce", 30.0, 15)); $list->Add(new Product(8, "Northwoods Cranberry Sauce", "Condiments", 40.0, 6)); $list->Add(new Product(9, "Mishi Kobe Niku", "Meat/Poultry", 97.0, 29)); $list->Add(new Product(10, "Ikura", "Seafood", 31.0, 31)); $list->Add(new Product(11, "Queso Cabrales", "Dairy Products", 21.0, 22)); $list->Add(new Product(12, "Queso Manchego La Pastora", "Dairy Products", 38.0, 86)); $list->Add(new Product(13, "Konbu", "Seafood", 6.0, 24)); $list->Add(new Product(14, "Tofu", "Produce", 23.25, 35)); $list->Add(new Product(15, "Genen Shouyu", "Condiments", 15.5, 39)); $list->Add(new Product(16, "Pavlova", "Confections", 17.45, 29)); $list->Add(new Product(17, "Alice Mutton", "Meat/Poultry", 39.0, 0)); $list->Add(new Product(18, "Carnarvon Tigers", "Seafood", 62.5, 42)); $list->Add(new Product(19, "Teatime Chocolate Biscuits", "Confections", 9.2, 25)); $list->Add(new Product(20, "Sir Rodney's Marmalade", "Confections", 81.0, 40)); $list->Add(new Product(21, "Sir Rodney's Scones", "Confections", 10.0, 3)); $list->Add(new Product(22, "Gustaf's Knckebrd", "Grains/Cereals", 21.0, 104)); $list->Add(new Product(23, "Tunnbrd", "Grains/Cereals", 9.0, 61)); $list->Add(new Product(24, "Guaran Fantstica", "Beverages", 4.5, 20)); $list->Add(new Product(25, "NuNuCa Nu-Nougat-Creme", "Confections", 14.0, 76)); $list->Add(new Product(26, "Gumbr Gummibrchen", "Confections", 31.23, 15)); $list->Add(new Product(27, "Schoggi Schokolade", "Confections", 43.9, 49)); $list->Add(new Product(28, "Rssle Sauerkraut", "Produce", 45.6, 26)); $list->Add(new Product(29, "Thringer Rostbratwurst", "Meat/Poultry", 123.79, 0)); $list->Add(new Product(30, "Nord-Ost Matjeshering", "Seafood", 25.89, 10)); $list->Add(new Product(31, "Gorgonzola Telino", "Dairy Products", 12.5, 0)); $list->Add(new Product(32, "Mascarpone Fabioli", "Dairy Products", 32.0, 9)); $list->Add(new Product(33, "Geitost", "Dairy Products", 2.5, 112)); $list->Add(new Product(34, "Sasquatch Ale", "Beverages", 14.0, 111)); $list->Add(new Product(35, "Steeleye Stout", "Beverages", 18.0, 20)); $list->Add(new Product(36, "Inlagd Sill", "Seafood", 19.0, 112)); $list->Add(new Product(37, "Gravad lax", "Seafood", 26.0, 11)); $list->Add(new Product(38, "Cte de Blaye", "Beverages", 263.5, 17)); $list->Add(new Product(39, "Chartreuse verte", "Beverages", 18.0, 69)); $list->Add(new Product(40, "Boston Crab Meat", "Seafood", 18.4, 123)); $list->Add(new Product(41, "Jack's New England Clam Chowder", "Seafood", 9.65, 85)); $list->Add(new Product(42, "Singaporean Hokkien Fried Mee", "Grains/Cereals", 14.0, 26)); $list->Add(new Product(43, "Ipoh Coffee", "Beverages", 46.0, 17)); $list->Add(new Product(44, "Gula Malacca", "Condiments", 19.45, 27)); $list->Add(new Product(45, "Rogede sild", "Seafood", 9.5, 5)); $list->Add(new Product(46, "Spegesild", "Seafood", 12.0, 95)); $list->Add(new Product(47, "Zaanse koeken", "Confections", 9.5, 36)); $list->Add(new Product(48, "Chocolade", "Confections", 12.75, 15)); $list->Add(new Product(49, "Maxilaku", "Confections", 20.0, 10)); $list->Add(new Product(50, "Valkoinen suklaa", "Confections", 16.25, 65)); $list->Add(new Product(51, "Manjimup Dried Apples", "Produce", 53.0, 20)); $list->Add(new Product(52, "Filo Mix", "Grains/Cereals", 7.0, 38)); $list->Add(new Product(53, "Perth Pasties", "Meat/Poultry", 32.8, 0)); $list->Add(new Product(54, "Tourtiere", "Meat/Poultry", 7.45, 21)); $list->Add(new Product(55, "Pt chinois", "Meat/Poultry", 24.0, 115)); $list->Add(new Product(56, "Gnocchi di nonna Alice", "Grains/Cereals", 38.0, 21)); $list->Add(new Product(57, "Ravioli Angelo", "Grains/Cereals", 19.5, 36)); $list->Add(new Product(58, "Escargots de Bourgogne", "Seafood", 13.25, 62)); $list->Add(new Product(59, "Raclette Courdavault", "Dairy Products", 55.0, 79)); $list->Add(new Product(60, "Camembert Pierrot", "Dairy Products", 34.0, 19)); $list->Add(new Product(61, "Sirop d'rable", "Condiments", 28.5, 113)); $list->Add(new Product(62, "Tarte au sucre", "Confections", 49.3, 17)); $list->Add(new Product(63, "Vegie-spread", "Condiments", 43.9, 24)); $list->Add(new Product(64, "Wimmers gute Semmelkndel", "Grains/Cereals", 33.25, 22)); $list->Add(new Product(65, "Louisiana Fiery Hot Pepper Sauce", "Condiments", 21.05, 76)); $list->Add(new Product(66, "Louisiana Hot Spiced Okra", "Condiments", 17.0, 4)); $list->Add(new Product(67, "Laughing Lumberjack Lager", "Beverages", 14.0, 52)); $list->Add(new Product(68, "Scottish Longbreads", "Confections", 12.5, 6)); $list->Add(new Product(69, "Gudbrandsdalsost", "Dairy Products", 36.0, 26)); $list->Add(new Product(70, "Outback Lager", "Beverages", 15.0, 15)); $list->Add(new Product(71, "Flotemysost", "Dairy Products", 21.5, 26)); $list->Add(new Product(72, "Mozzarella di Giovanni", "Dairy Products", 34.8, 14)); $list->Add(new Product(73, "Rd Kaviar", "Seafood", 15.0, 101)); $list->Add(new Product(74, "Longlife Tofu", "Produce", 10.0, 4)); $list->Add(new Product(75, "Rhnbru Klosterbier", "Beverages", 7.75, 125)); $list->Add(new Product(76, "Lakkalikri", "Beverages", 18.0, 57)); $list->Add(new Product(77, "Original Frankfurter grne Soe", "Condiments", 13.0, 32)); return $list; } private static function GetOrderList() { $list = new i'G\List'<:Order:>; $list->Add(new Order(1, 30, 3, "Jan Benda")); $list->Add(new Order(2, 12, 4, "Martin Maly")); $list->Add(new Order(3, 11, 99, "Tomas Matousek")); $list->Add(new Order(4, 64, 1, "Pavel Novak")); $list->Add(new Order(5, 45, 2, "Vaclav Novak")); $list->Add(new Order(6, 73, 102, "Ladislav Prosek")); return $list; } } } ?> ================================================ FILE: Deployment/Samples/LinqAndGenerics/LinqAndGenerics.phpproj ================================================  Debug LinqAndGenerics 2.0 {dcacb7ea-dafc-47a3-ba17-869831fc66e5} Pure Exe LinqAndGenerics LinqAndGenerics v2 true bin\Debug\ false bin\Release\ mscorlib mscorlib.dll System System.dll PhpNetClassLibrary PhpNetClassLibrary.dll Code Code Code Content ================================================ FILE: Deployment/Samples/LinqAndGenerics/LinqAndGenerics.sln ================================================  Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 Project("{F0CD5B9D-43B4-49B3-95FA-7F4F8FAFA5C0}") = "LinqAndGenerics", "LinqAndGenerics.phpproj", "{DCACB7EA-DAFC-47A3-BA17-869831FC66E5}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {DCACB7EA-DAFC-47A3-BA17-869831FC66E5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {DCACB7EA-DAFC-47A3-BA17-869831FC66E5}.Debug|Any CPU.Build.0 = Debug|Any CPU {DCACB7EA-DAFC-47A3-BA17-869831FC66E5}.Release|Any CPU.ActiveCfg = Release|Any CPU {DCACB7EA-DAFC-47A3-BA17-869831FC66E5}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal ================================================ FILE: Deployment/Samples/LinqAndGenerics/build.cmd ================================================ phpc /target:exe /pure Demo.php Interop.php Generics.php Linq.php ================================================ FILE: Deployment/Samples/WinForms/App.config ================================================ ================================================ FILE: Deployment/Samples/WinForms/Form1.php ================================================ InitializeComponent(); } public function InitializeComponent() { $this->components = new \System\ComponentModel\Container(); $this->timer = new \System\Windows\Forms\Timer($this->components); $this->Button = new \System\Windows\Forms\Button(); $this->ToolTip = new \System\Windows\Forms\ToolTip($this->components); $this->SuspendLayout(); // // timer // $this->timer->Interval = 10; $this->timer->Tick->Add(new \System\EventHandler(array($this, "timer_Tick"))); // // Button // $this->Button->Location = new \System\Drawing\Point(99, 194); $this->Button->Name = "Button"; $this->Button->Size = new \System\Drawing\Size(75, 23); $this->Button->TabIndex = 0; $this->Button->Text = "Phalanger!"; $this->Button->UseVisualStyleBackColor = true; $this->Button->Click->Add(new \System\EventHandler(array($this, "Button_Click"))); // // ToolTip // $this->ToolTip->AutoPopDelay = 5000; $this->ToolTip->InitialDelay = 200; $this->ToolTip->IsBalloon = true; $this->ToolTip->ReshowDelay = 100; $this->ToolTip->ToolTipIcon = \System\Windows\Forms\ToolTipIcon::Info; $this->ToolTip->ToolTipTitle = "Click the image to zoom in and out"; // // Form1 // $this->AutoScaleDimensions = new \System\Drawing\SizeF(6, 13); $this->AutoScaleMode = \System\Windows\Forms\AutoScaleMode::Font; $this->ClientSize = new \System\Drawing\Size(292, 266); $this->Controls->Add($this->Button); $this->Name = "Form1"; $this->Text = "Form1"; $this->ToolTip->SetToolTip($this, "Left button zooms in, right button zooms out."); $this->Load->Add(new \System\EventHandler(array($this, "Form1_Load"))); $this->Click->Add(new \System\EventHandler(array($this, "Form1_Click"))); $this->Move->Add(new \System\EventHandler(array($this, "Form1_Move"))); $this->Resize->Add(new \System\EventHandler(array($this, "Form1_Resize"))); $this->ResumeLayout(false); } private function Button_Click(\System\Object $sender, \System\EventArgs $e) { } private function button1_Click(\System\Object $sender, \System\EventArgs $e) { } } } ?> ================================================ FILE: Deployment/Samples/WinForms/Form1.resx ================================================ text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 17, 17 97, 17 ================================================ FILE: Deployment/Samples/WinForms/Form1.user.php ================================================ ClientSize->Width; $height = $this->ClientSize->Height; $bitmap = new Bitmap($width, $height, PixelFormat::Format24bppRgb); $old_bitmap = $this->BackgroundImage; $this->BackgroundImage = $bitmap; if ($old_bitmap instanceof IDisposable) $old_bitmap->Dispose(); $this->timer->Enabled = true; $this->row = 0; $this->resolution = 8; } private function Form1_Load(System\Object $sender, System\EventArgs $e) { $this->mandelbrot = new MandelbrotSet($this->ClientSize->Width, $this->ClientSize->Height); $this->Resize(); } private function Resize() { // update the button's center location $this->button->CenterLocation = new Point( ($this->ClientSize->Width - $this->button->Size->Width) / 2, ($this->ClientSize->Height - $this->button->Size->Height) / 2); // recreate background image and initiate computation of a new Mandelbrot set $this->CreateBitmap(); $this->mandelbrot->SetSize($this->ClientSize->Width, $this->ClientSize->Height); } private function Form1_Resize(System\Object $sender, System\EventArgs $e) { if ($this->WindowState != FormWindowState::Minimized) { $this->Resize(); } } private function Form1_Move(System\Object $sender, System\EventArgs $e) { static $last_x, $last_y; $dx = $last_x - $this->Location->X; $dy = $last_y - $this->Location->Y; // update the button's position to give a "inertia" feel $this->button->Location = new Point( $this->button->Location->X + $dx, $this->button->Location->Y + $dy); $last_x = $this->Location->X; $last_y = $this->Location->Y; } private function Form1_Click(System\Object $sender, System\EventArgs $e) { // set a new center point of the Mandelbrot set and zoom in/out $this->mandelbrot->SetCenter($e->X, $e->Y); if ($e->Button == MouseButtons::Left) $this->mandelbrot->ZoomIn(); else $this->mandelbrot->ZoomOut(); $this->CreateBitmap(); } private function timer_Tick(System\Object $sender, System\EventArgs $e) { $bitmap = $this->BackgroundImage; $ticks = Environment::$TickCount + 2; do { $y = $this->row; $res = $this->resolution; if ($y >= $bitmap->Height) { if ($this->resolution == 1) { // this Mandelbrot set is fully rendered if (isset($this->timer)) { $this->timer->Enabled = 0; unset($this->timer); } } else { // improve the resolution $this->resolution = ($res >>= 1); $this->row = $y = 0; } break; } $y1 = $y + $res - 1; if ($y1 >= $bitmap->Height) $y1 = $bitmap->Height - 1; // draw a single line for ($x = 0; $x < $bitmap->Width; $x++) { if (($x % $res) == 0) $color = $this->mandelbrot->GetColor($x, $y); for ($ry = $y; $ry <= $y1; $ry++) { $bitmap->SetPixel($x, $ry, $color); } } $this->row += $res; } while (Environment::$TickCount < $ticks); $this->Refresh(); } } } ?> ================================================ FILE: Deployment/Samples/WinForms/Mandelbrot.php ================================================ width = $width; $this->height = $height; // initialize color table with random values $random = new Random; for ($i = 0; $i < self::PRECISION; $i++) { $this->colorTable[$i][0] = $random->Next(256); $this->colorTable[$i][1] = $random->Next(256); $this->colorTable[$i][2] = $random->Next(256); } } public function SetSize($width, $height) { $this->width = $width; $this->height = $height; } public function SetCenter($x, $y) { $this->cx = $this->cx + ($x - $this->width / 2) * $this->zoom; $this->cy = $this->cy + ($y - $this->height / 2) * $this->zoom; } public function ZoomIn() { $this->zoom /= 1.5; } public function ZoomOut() { $this->zoom *= 1.5; } // Returns the color that should be drawn at the specified pixel coordinates public function GetColor($x, $y) { $mx = $this->cx + ($x - $this->width / 2) * $this->zoom; $my = $this->cy + ($y - $this->height / 2) * $this->zoom; $zx = 0; $zy = 0; for ($i = 0; $i < self::PRECISION; $i++) { $zx2 = $zx * $zx; $zy2 = $zy * $zy; $zy = 2 * $zx * $zy + $my; $zx = $zx2 - $zy2 + $mx; // how many iteretations did it take to reach the treshold? if ($zx2 + $zy2 > self::TRESHOLD) { return Color::FromArgb( $this->colorTable[$i][0], $this->colorTable[$i][1], $this->colorTable[$i][2]); } } return Color::$Blue; } } } ?> ================================================ FILE: Deployment/Samples/WinForms/Program.php ================================================ ================================================ FILE: Deployment/Samples/WinForms/TrickyButton.php ================================================ Tick->Add(new System\EventHandler(array($this, "Timer_OnTick"))); $timer->Interval = 50; $timer->Enabled = true; } protected function OnClick($eventArgs) { MessageBox::Show( $this, "Hello from Phalanger 2.0 !", $this->Parent->Text, MessageBoxButtons::OK, MessageBoxIcon::Information); } protected function OnMouseMove($e) { static $last_pos; // do not evade if this method was not called as a result of cursor movement $cursor = Cursor::$Position; if (isset($last_pos) && $last_pos->X == $cursor->X && $last_pos->Y == $cursor->Y) { return; } else { $last_pos = $cursor; } $width = $this->Size->Width; $height = $this->Size->Height; $dx = ($e->X > ($width / 2) ? $e->X - $width - 2 : $e->X + 2); $dy = ($e->Y > ($height / 2) ? $e->Y - $height - 2 : $e->Y + 2); if (($dy < 0 && $dx < $dy) || ($dy >= 0 && $dx > $dy)) { $dx = ($width / 2) - $e->X; } else $dy = ($height / 2) - $e->Y; $this->EvasiveLocation = new Point( $this->Location->X + $dx, $this->Location->Y + $dy); $this->counter = 0; } public function Timer_OnTick() { $this->counter++; if ($this->counter < self::IDLE_TICK_COUNT && isset($this->EvasiveLocation)) { // the cursor seems to be still hunting us $this->MoveTo($this->EvasiveLocation); } else { // the cursor probably gave it up if (isset($this->CenterLocation)) { // check whether the center location is safe for us $cursor = Cursor::$Position; $cursor = $this->Parent->PointToClient($cursor); if (!$this->IsLocationSafe($this->CenterLocation, $cursor)) return; $this->MoveTo($this->CenterLocation); } } } // Smoothly moves to the given location private function MoveTo($location) { $dx = $location->X - $this->Location->X; $dy = $location->Y - $this->Location->Y; if ($dx < -1 || $dx > 1) $dx /= 3; if ($dy < -1 || $dy > 1) $dy /= 3; $location = new Point( $this->Location->X + $dx, $this->Location->Y + $dy); $this->Location = $location; } private function IsLocationSafe($offset, $point) { return ($point->X < $offset->X || $point->X > $offset->X + $this->Size->Width || $point->Y < $offset->Y || $point->Y > $offset->Y + $this->Size->Height); } } } ?> ================================================ FILE: Deployment/Samples/WinForms/WinForms.phpproj ================================================  Debug WinForms 2.0 {84458198-3670-40e8-ad15-c862ad4bf88c} Pure WinExe WinForms WinForms true bin\Debug\ false bin\Release\ False False False False False False False False Code Form Code Form1.php Content ================================================ FILE: Deployment/Samples/WinForms/WinForms.sln ================================================  Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 Project("{F0CD5B9D-43B4-49B3-95FA-7F4F8FAFA5C0}") = "WinForms", "WinForms.phpproj", "{84458198-3670-40E8-AD15-C862AD4BF88C}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {84458198-3670-40E8-AD15-C862AD4BF88C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {84458198-3670-40E8-AD15-C862AD4BF88C}.Debug|Any CPU.Build.0 = Debug|Any CPU {84458198-3670-40E8-AD15-C862AD4BF88C}.Release|Any CPU.ActiveCfg = Release|Any CPU {84458198-3670-40E8-AD15-C862AD4BF88C}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal ================================================ FILE: Deployment/Samples/WinForms/build.cmd ================================================ phpc /pure /target:winexe Program.php Form1.php Form1.user.php TrickyButton.php Mandelbrot.php ================================================ FILE: Deployment/Web.config ================================================ ================================================ FILE: Deployment/WebSamples/ASP.NET/FormsAuth/Default.aspx ================================================ <%@ Page Language="PHP" AutoEventWireup="false" CodeFile="Default.aspx.php" Inherits="_Default" Title="Secret page" %> Secret page
You are currently logged in as <%= \System\Web\HttpContext::$Current->User->Identity->Name %>.
This page is protected by Forms Authentication.
================================================ FILE: Deployment/WebSamples/ASP.NET/FormsAuth/Default.aspx.php ================================================ ================================================ FILE: Deployment/WebSamples/ASP.NET/FormsAuth/Login.aspx ================================================ <%@ Page Language="PHP" AutoEventWireup="false" CodeFile="Login.aspx.php" Inherits="Login" Title="Login page" %> Login page
Please enter your login name and password:
Login:
Password:
================================================ FILE: Deployment/WebSamples/ASP.NET/FormsAuth/Login.aspx.php ================================================ TextBoxLogin->Text; $passw = $this->TextBoxPassword->Text; if (FormsAuthentication::Authenticate($login, $passw)) { FormsAuthentication::RedirectFromLoginPage($login, false); } else { $this->CustomLoginValidator->IsValid = false; } } } ?> ================================================ FILE: Deployment/WebSamples/ASP.NET/FormsAuth/Web.config ================================================ ================================================ FILE: Deployment/WebSamples/Extensions/Index.html ================================================ Phalanger Extension Samples

Samples that use PHP native extensions

This virtual directory contains several sample scripts that use the power of PHP extensions. Phalanger comes with a few dozens of useful PHP extensions along with their managed wrappers that make it possible to use them from managed environment (Phalanger, C#, VB.NET, ...)

  • clock.php - generates a PDF file on the web server and allows to view it (uses php_pdf.dll)
  • graphics.php - modifies an image loaded from the file and shows it (uses php_gd2.dll)
================================================ FILE: Deployment/WebSamples/Extensions/Web.config ================================================ ================================================ FILE: Deployment/WebSamples/Extensions/clock.php ================================================ Phalanger Samples - PDF Clock

Phalanger Samples - PDF Clock

Generating PDF file, please wait a moment ...
"; flush(); error_reporting(E_ALL); $time = time(); $ltime = getdate($time); $stime = Date("H:i:s", $time); $texttime = ($ltime['hours']+0) . " hour" . ($ltime['hours'] ? "s":""); if ($ltime['minutes']) $texttime .= " and " . ($ltime['minutes']+0) . " minute" . ($ltime['minutes'] ? "s":""); else $texttime = "exactly $texttime"; // A4 page: 595 x 842 points $radius = 177; $margin = 120; $ring = 40; $header = 20; $footer = 228; $file = tempnam("", "tests") . '.pdf'; $width = 2 * ($radius + $margin); $height = 2 * ($radius + $margin) + $header + $footer; $pdf = pdf_new(); if (!pdf_open_file($pdf, $file)) { echo "error"; exit; }; pdf_set_parameter($pdf, "warning", "true"); pdf_set_info($pdf, "Creator", "Phalanger"); pdf_set_info($pdf, "Author", "Uwe Steinmann"); pdf_set_info($pdf, "Title", "Analog Clock"); pdf_begin_page($pdf, $width, $height); function center($s, $y, $size, $fontname = "Times-Roman", $outline = 0) { global $pdf, $font, $width; pdf_set_value($pdf, "textrendering", $outline); $font = pdf_findfont($pdf, $fontname, "iso8859-2"); pdf_setfont($pdf, $font, $size); $w = pdf_stringwidth($pdf, $s); pdf_show_xy($pdf, $s, ($width - $w) / 2, $y); } /* outlined */ center("It is $texttime.", $height - 60, 42, "Times-Roman", 1); center("It is time for", 200, 100, "Times-Roman", 1); /* filled */ center("Phalanger!", 70, 110, "Times-Bold", 0); pdf_translate($pdf, $radius + $margin, $radius + $margin + $footer); pdf_save($pdf); pdf_setrgbcolor($pdf, 0.0, 0.0, 1.0); /* minute strokes */ pdf_setlinewidth($pdf, 2.0); for ($alpha = 0; $alpha < 360; $alpha += 6) { pdf_rotate($pdf, 6.0); pdf_moveto($pdf, $radius, 0.0); pdf_lineto($pdf, $radius-$ring/3, 0.0); pdf_stroke($pdf); } pdf_restore($pdf); pdf_save($pdf); /* 5 minute strokes */ pdf_setlinewidth($pdf, 3.0); for ($alpha = 0; $alpha < 360; $alpha += 30) { pdf_rotate($pdf, 30.0); pdf_moveto($pdf, $radius, 0.0); pdf_lineto($pdf, $radius-$ring, 0.0); pdf_stroke($pdf); } /* draw hour hand */ pdf_save($pdf); pdf_rotate($pdf,-(($ltime['minutes']/60.0)+$ltime['hours']-3.0)*30.0); pdf_moveto($pdf, -$radius/10, -$radius/20); pdf_lineto($pdf, $radius/2, 0.0); pdf_lineto($pdf, -$radius/10, $radius/20); pdf_closepath($pdf); pdf_fill($pdf); pdf_restore($pdf); /* draw minute hand */ pdf_save($pdf); pdf_rotate($pdf,-(($ltime['seconds']/60.0)+$ltime['minutes']-15.0)*6.0); pdf_moveto($pdf, -$radius/10, -$radius/20); pdf_lineto($pdf, $radius * 0.8, 0.0); pdf_lineto($pdf, -$radius/10, $radius/20); pdf_closepath($pdf); pdf_fill($pdf); pdf_restore($pdf); /* draw second hand */ pdf_setrgbcolor($pdf, 1.0, 0.0, 0.0); pdf_setlinewidth($pdf, 2); pdf_save($pdf); pdf_rotate($pdf, -(($ltime['seconds'] - 15.0) * 6.0)); pdf_moveto($pdf, -$radius/5, 0.0); pdf_lineto($pdf, $radius, 0.0); pdf_stroke($pdf); pdf_restore($pdf); /* draw little circle at center */ pdf_circle($pdf, 0, 0, $radius/30); pdf_fill($pdf); pdf_restore($pdf); /* DONE */ pdf_end_page($pdf); pdf_close($pdf); pdf_delete($pdf); // hides "Generating ..." message: echo ""; ?>

Error occured: file does not exist!

It is exactly . A PDF file containing an image of clocks with the current time has been generated.

================================================ FILE: Deployment/WebSamples/Extensions/getpdf.php ================================================ ================================================ FILE: Deployment/WebSamples/Extensions/graphics.php ================================================ Phalanger Samples - GD Extension

Phalanger Samples - GD Extension

The sample shows how to load a .png image and to draw to it.

<? echo $title; ?>

A title:
================================================ FILE: Deployment/WebSamples/Extensions/image.php ================================================ ================================================ FILE: Deployment/WebSamples/MultiScriptAssembly/Web.config ================================================ ================================================ FILE: Deployment/WebSamples/MultiScriptAssembly/build_ext.cmd ================================================ ..\..\bin\phpc /target:dll /static+ /root:. /recurse:ext/ /out:bin/ext.dll pause ================================================ FILE: Deployment/WebSamples/MultiScriptAssembly/ext/defs.php ================================================ ================================================ FILE: Deployment/WebSamples/MultiScriptAssembly/ext/fncs.php ================================================ ================================================ FILE: Deployment/WebSamples/MultiScriptAssembly/ext/types.php ================================================ a = $a; $this->b = $b; } function __toString() { return "X(){ a = $this->a, b = $this->b };"; } } ?> ================================================ FILE: Deployment/WebSamples/MultiScriptAssembly/index.php ================================================ ================================================ FILE: Deployment/WebSamples/SimpleScripts/Config.php ================================================ Phalanger Samples - Configuration

Phalanger Samples - Configuration

This sample shows the current Phalanger configuration and content of the prototypic Web.config configuration file located in the current directory (). There are all supported configuration options stated in this file along with default values and their respective PHP names if applicable. If you are configuring your own application, you don't need to define all options but only those that differ from the defaults.

Prototypic Web.config File


================================================ FILE: Deployment/WebSamples/SimpleScripts/Forms.php ================================================ Phalanger Samples - Request Variables, Uploaded Files

Phalanger Samples - Request Variables, Uploaded Files

This sample shows how request variables are passed to PHP scripts and how files can be uploaded.

Current values of request variables and uploaded files information

$_GET auto-global array content:

$_POST auto-global array content:

$_FILES auto-global array content:

Forms sending data

A form that sends post data back to this script. Variable called "post_var" will appear in $_POST array.

"/>
A form that sends get data back to this script. An array "get_var" containing two values will appear in $_GET array.
"/> "/>

A form uploading files

Information about uploaded file will appear in the $_FILES array.

Choose a file to sent (note, its size should be less than a limit set in ASP.NET configuration option maxRequestLength in section system.web/httpRuntime):


================================================ FILE: Deployment/WebSamples/SimpleScripts/Index.html ================================================ Phalanger Simple Scripts Samples

Simple Scripts Samples

This virtual directory contains several simple scripts demonstrating some of the many Phalanger features. You can start with the samples to see what Phalanger can do. The following samples are available:

  • Forms.php - HTML forms, working with get and post variables, uploading files
  • Session.php - working with session variables
  • Config.php - configuration
================================================ FILE: Deployment/WebSamples/SimpleScripts/Session.php ================================================ Phalanger Samples - Session Variables

Phalanger Samples - Session Variables via ASP.NET

This sample shows how session variables are handled. Phalanger uses ASP.NET session management and doesn't support some specific PHP features. However, common functions working with session variables are implemented. Note that session management is configured in ASP.NET configuration, section system.web/sessionState.

Current values loaded from session store

$_SESSION auto-global array content:

Storing an instance of a class to the session

A class A having an instance field $value is declared in this script and it is added to the session. You can reload this page by submitting of the following form. The object will then appear into the $_SESSION array dumped above. Its field will contain an array of declared classes.
value = get_declared_classes(); // add to session: $_SESSION["instance_of_A"] = $a; ?> ================================================ FILE: Deployment/WebSamples/Tests/Arrays/array_map.php ================================================ [expect] array ( [0] => array ( [0] => 1 [1] => A [2] => 0 ) [1] => array ( [0] => 2 [1] => B [2] => 0 ) [2] => array ( [0] => 3 [1] => C [2] => ) ) array ( [0] => 1 A 0 [1] => 2 B 0 [2] => 3 C ) array ( [0] => 1 [1] => 2 [2] => 3 ) array ( [0] => A [1] => B [2] => C ) array ( [0] => x [1] => x ) [file] ================================================ FILE: Deployment/WebSamples/Tests/Arrays/array_multisort.php ================================================ [expect] bool(true) array ( [0] => array ( [0] => 2 [1] => 8 [2] => 2 [3] => 2 [4] => 8 [5] => 8 ) [1] => array ( [0] => 7 [1] => 2 [2] => 7 [3] => 4 [4] => 8 [5] => 1 ) [2] => array ( [0] => 1 [1] => 4 [2] => 8 [3] => 0 [4] => 6 [5] => 2 ) [3] => array ( [0] => 8 [1] => 4 [2] => 1 [3] => 0 [4] => 7 [5] => 1 ) [4] => array ( [0] => 20 [1] => 2 [2] => 12 [3] => 11 [4] => 10 [5] => 1 ) ) array ( [0] => array ( [0] => 10 [1] => 100 [2] => 100 [3] => a ) [1] => array ( [0] => 1 [1] => 3 [2] => 2 [3] => 1 ) ) array ( [0] => 10 [1] => a [2] => 100 [3] => 100 ) array ( [0] => 1 [1] => 1 [2] => 2 [3] => 3 ) [file] ================================================ FILE: Deployment/WebSamples/Tests/Arrays/array_reduce1.php ================================================ [expect] array ( [a] => 1 [b] => 2 [c] => 3 [d] => 4 [e] => 5 ) array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 ) array [empty] [file] ================================================ FILE: Deployment/WebSamples/Tests/Arrays/array_reduce2.php ================================================ [expect] array { [0] => integer(1) [1] => integer(2) [2] => integer(3) [3] => integer(4) [4] => integer(5) } integer(15) integer(1200) integer(1) [file] ================================================ FILE: Deployment/WebSamples/Tests/Arrays/usort.php ================================================ [expect] 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 array ( [0] => 10 [1] => 9 [2] => 8 [3] => 7 [4] => 6 [5] => 5 [6] => 4 [7] => 3 [8] => 2 [9] => 1 ) [file] ================================================ FILE: Deployment/WebSamples/Tests/Functions/global.php ================================================ [expect]Set in global code [file] ================================================ FILE: Deployment/WebSamples/Tests/Functions/indirect.php ================================================ [expect]This is f [file] ================================================ FILE: Deployment/WebSamples/Tests/Functions/references.php ================================================ [expect exact] string(19) "Set in f() function" object(A)(1) { ["a"] => object(B)(0) { } } NULL string(20) "Set in B->f() method" [file] f() method"; } } $o = new A(); $o->a = new B(); $r =& $o->a->f($a); var_dump($o, $r, $a); ?> ================================================ FILE: Deployment/WebSamples/Tests/MSDN.css ================================================ body /* This body tag requires the use of one of the sets of banner and/or text div ids */ { margin: 0px 0px 0px 0px; padding: 0px 0px 0px 0px; background: #ffffff; color: #000000; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 70%; width: 100%; /*overflow: expression('hidden');*/ } div#scrollyes /* Allows topic to scroll with correct margins. Cannot be used with running head banner */ { /* Must immediately follow . */ padding: 2px 15px 2px 22px; width: 100%; } div#nsbanner /* Creates Nonscrolling banner region */ { position: relative; left: 0px; padding: 0px 0px 0px 0px; border-bottom: 1px solid #999999; /*width: expression(document.body.clientWidth);*/ background-color: #99ccff; } div#nstext /* Creates the scrolling text area for Nonscrolling region topic */ { top: 0px; padding: 5px 20px 0px 22px; /*overflow: expression('auto'); width: expression(document.body.clientWidth); height: expression(document.body.clientHeight - nsbanner.offsetHeight);*/ } div#scrbanner /* Creates the running head bar in a full-scroll topic */ { /* Allows topic to scroll. */ margin: 0px 0px 0px 0px; padding: 0px 0px 0px 0px; border-bottom: 1px solid #999999; } div#scrtext /* Creates the text area in a full-scroll topic */ { /* Allows topic to scroll. */ padding: 0px 10px 0px 22px; } div#bannerrow1 /* provides full-width color to top row in running head (requires script) */ { } div#titlerow /* provides non-scroll topic title area (requires script) */ { padding: 0px 10px 0px 22px; } h1, h2, h3, h4 { font-family: Verdana, Arial, Helvetica, sans-serif; margin-bottom: .4em; margin-top: 1em; font-weight: bold; } h1 { font-size: 120%; margin-top: 0em; } div#scrollyes h1 /* Changes font size for full-scrolling topic */ { font-size: 150%; } h2 { font-size: 130%; } h3 { font-size: 115%; } h4 { font-size: 100%; } .dtH1, .dtH2, .dtH3, .dtH4 { margin-left: -18px; } div#titlerow h1 { margin-bottom: .2em } table.bannerparthead, table.bannertitle /* General values for the Running Head tables */ { position: relative; left: 0px; top: 0px; padding: 0px 0px 0px 0px; margin: 0px 0px 0px 0px; width: 100%; height: 21px; border-collapse: collapse; border-style: solid; border-width: 0px; background-color: #99ccff; font-size: 100%; } table.bannerparthead td /* General Values for cells in the top row of running head */ { margin: 0px 0px 0px 0px; padding: 2px 0px 0px 4px; vertical-align: middle; border-width: 0px; border-style: solid; border-color: #999999; background: transparent; font-style: italic; font-weight: normal; } table.bannerparthead td.product /* Values for top right cell in running head */ { /* Allows for a second text block in the running head */ text-align: right; padding: 2px 5px 0px 5px; } table.bannertitle td /* General Values for cells in the bottom row of running head */ { margin: 0px 0px 0px 0px; padding: 0px 0px 0px 3px; vertical-align: middle; border-width: 0px 0px 1px 0px; border-style: solid; border-color: #999999; background: transparent; font-weight: bold; } td.button1 /* Values for button cells */ { width: 14px; cursor: hand; } p { margin: .5em 0em .5em 0em; } blockquote.dtBlock { margin: .5em 1.5em .5em 1.5em; } div#dtHoverText { color: #000066; } .normal { margin: .5em 0em .5em 0em; } .fineprint { font-size: 90%; /* 90% of 70% */ } .indent { margin: .5em 1.5em .5em 1.5em; } .topicstatus /* Topic Status Boilerplate class */ { display: block; color: red; } p.label { margin-top: 1em; } p.labelproc { margin-top: 1em; color: #000066; } div.tablediv { width: 100%; /* Forces tables to have correct right margins and top spacing */ margin-top: -.4em; } ol div.tablediv, ul div.tablediv, ol div.HxLinkTable, ul div.HxLinkTable { margin-top: 0em; /* Forces tables to have correct right margins and top spacing */ } table.dtTABLE { width: 100%; /* Forces tables to have correct right margin */ margin-top: .6em; margin-bottom: .3em; border-width: 1px 1px 0px 0px; border-style: solid; border-color: #999999; background-color: #999999; font-size: 100%; /* Text in Table is same size as text outside table */ } table.dtTABLE th, table.dtTABLE td { border-style: solid; /* Creates the cell border and color */ border-width: 0px 0px 1px 1px; border-style: solid; border-color: #999999; padding: 4px 6px; text-align: left; } table.dtTABLE th { background: #cccccc; /* Creates the shaded table header row */ vertical-align: bottom; } table.dtTABLE td { background: #ffffff; vertical-align: top; } MSHelp\:ktable { disambiguator: span; separator:  | prefix: | postfix:   filterString: ; } div.HxLinkTable { width: auto; /* Forces tables to have correct right margins and top spacing */ margin-top: -.4em; visibility: visible; } ol div.HxLinkTable, ul div.HxLinkTable { margin-top: 0em; /* Forces tables to have correct right margins and top spacing */ } table.HxLinkTable /* Keep in sync with general table settings below */ { width: auto; margin-top: 1.5em; margin-bottom: .3em; margin-left: -1em; border-width: 1px 1px 0px 0px; border-style: solid; border-color: #999999; background-color: #999999; font-size: 100%; /* Text in Table is same size as text outside table */ behavior:url(hxlinktable.htc); /* Attach the behavior to link elements. */ } table.HxLinkTable th, table.HxLinkTable td /* Keep in sync with general table settings below */ { border-style: solid; /* Creates the cell border and color */ border-width: 0px 0px 1px 1px; border-style: solid; border-color: #999999; padding: 4px 6px; text-align: left; } table.HxLinkTable th /* Keep in sync with general table settings below */ { background: #cccccc; /* Creates the shaded table header row */ vertical-align: bottom; } table.HxLinkTable td /* Keep in sync with general table settings below */ { background: #ffffff; vertical-align: top; } pre.code { background-color: #eeeeee; padding: 4px 6px 4px 6px; } pre, div.syntax { margin-top: .5em; margin-bottom: .5em; } pre, code, .code, div.syntax { font: 100% Monospace, Courier New, Courier; /* This is 100% of 70% */ color: #000066; } pre b, code b { letter-spacing: .1em; /* opens kerning on bold in Syntax/Code */ } pre.syntax, div.syntax { background: #cccccc; padding: 4px 8px; cursor: text; margin-top: 1em; margin-bottom: 1em; color: #000000; border-width: 1px; border-style: solid; border-color: #999999; /* ------------------------------------- */ /* BEGIN changes to dtue.css conventions */ font-weight: bolder; letter-spacing: .1em; } .syntax span.lang { margin: 0; font-weight: normal; } .syntax span.meta { margin: 0; font-weight: normal; font-style: italic; } .syntax a { margin: 0; font-weight: normal; } /* END changes to dtue.css conventions */ /* ----------------------------------- */ .syntax div { padding-left: 24px; text-indent: -24px; } .syntax .attribute { font-weight: normal; } div.footer { font-style: italic; } div.footer hr { color: #999999; height: 1px; } ol, ul { margin: .5em 0em 0em 4em; } li { margin-bottom: .5em; } ul p, ol p, dl p { margin-left: 0em; } ul p.label, ol p.label { margin-top: .5em; } dl { margin-top: 0em; padding-left: 1px; /* Prevents italic-letter descenders from being cut off */ } dd { margin-bottom: 0em; margin-left: 1.5em; } dt { margin-top: .5em; } a:link { color: #0000ff; } a:visited { color: #0000ff; } a:hover { color: #3366ff; } img { border: none; } /* Not in dtue.css. Used by NDoc's "ShowMissing..." options. */ .missing { color: Red; font-weight: bold; } ================================================ FILE: Deployment/WebSamples/Tests/Objects/object_creation.php ================================================ [expect] 2141 [file] ================================================ FILE: Deployment/WebSamples/Tests/Objects/static_fields.php ================================================ [expect exact] 1312 [file] ================================================ FILE: Deployment/WebSamples/Tests/Objects/static_methods.php ================================================ [expect exact] 1A2BA2BAC [file] ================================================ FILE: Deployment/WebSamples/Tests/index.php ================================================ Phalanger Tests Home
Phalanger Testing

Phalanger Tests Home

Welcome to the Phalanger testing homepage.

Available Test Sets

Please set the tests directory:

Available Test Sets

"; echo "

    "; $dirs = array(); $root_length = strlen($path_to_tests); if (($path_to_tests{$root_length-1} != '/') && ($path_to_tests{$root_length-1} != '\\')) $root_length++; readtree($path_to_tests, $dirs); foreach ($dirs as $dir) { if (!is_dir($dir)) continue; if (($dir == '.') || ($dir == '..')) continue; $Dir = substr($dir, $root_length); $Dir{0} = strtoupper($Dir{0}); echo "
  • $Dir
  • \n"; } echo "

"; } else { echo "Sorry, the path '$path_to_tests' is invalid."; } ?>


================================================ FILE: Deployment/WebSamples/Tests/test_includer.php ================================================ Tests Homepage"; if ($_file) { $_name = explode('.', basename($_file)); $_function = $_name[0]; $_title .= " ($_function)"; $_file = $_path .'/'. $_file; } function _index_href($f, $s, $r, $x) { global $_path; $script = $_SERVER['SCRIPT_NAME']; return "$script?testdir=$_path&file=$f&source=$s&result=$r&xmp=$x"; } ?> Test: <?=$_title?>
Phalanger Testing

Use these links to toggle the display of script source () , result () and result source ().

Select another test group at the .

";var_dump($_GET);echo ""; function _index_showfile($filename, $text, $source, $res, $xmp, $output) { if ($source || $res || $xmp) echo "

Script \"" . basename($filename) . "\"

\n"; // echo "

Script \"" . basename($filename) . "\"

\n"; echo $text; if ($source) { echo "

Script source

\n"; echo "

\n";
//    highlight_file($filename); // UNSUPPORTED
    echo htmlspecialchars(file_get_contents($filename));
    echo "  

\n"; } if ($res) { echo "

Result

\n"; echo $output; echo "

\n"; } if ($xmp) { echo "

Result source

\n"; echo "

\n";
    echo strtr($output, array(
      '<' => '<',
      '>' => '>',
      "\r\n" => "\\r\\n\r\n",
      "\n" => "\\n\n",
      "\r" => "\\r\r"
    ));
    echo "  

\n"; } } if ($_file) { $man = "$_function"; $home = "$_dirname Functions"; $text = ""; if ($_name[1] == 'php') $text = "

The function $man is a part of $home.

\n"; else if ($_name[1] == 'phpt') $text = "

The file $_file is an original test script of $home.

\n"; $output = ""; if ($_res || $_xmp) { // include the file at global level (not in a function) ob_start(); var_dump($_file); include($_file); $output = ob_get_contents(); ob_end_clean(); /**/ } // one file with source and xmp _index_showfile($_file, $text, $_source, $_res, $_xmp, $output); echo "

See also

\n"; echo "

$home, $_index

\n"; } else { // list all files in the directory $_dh = opendir($_path); $_first = 1; $_letter = ''; $_display = $_source || $_res || $_xmp; while (($_scriptfile = readdir($_dh)) !== false) { if ($_scriptfile{0} == '.') continue; if ($_scriptfile == 'index.php') continue; if (false === strstr($_scriptfile, '.php')) continue; // Show the index letter if (!$_display) { if ($_letter != strtoupper($_scriptfile{0})) { $_letter = strtoupper($_scriptfile{0}); echo "

$_letter

\n"; } } else { if (!$_first) echo " \n\n
\n\n"; $_first = 0; } $_scriptpath = $_path . '/' . $_scriptfile; $output = ""; if ($_res || $_xmp) { // include the file at global level (not in a function) ob_start(); include $_scriptpath; $output = ob_get_contents(); ob_end_clean(); } $text = "

Open the $_scriptfile tester.

\n"; _index_showfile($_scriptpath, $text, $_source, $_res, $_xmp, $output); } closedir($_dh); // echo "

Done

\n"; echo "

See also

\n"; echo "

$_index

\n"; } ?>
================================================ FILE: Deployment/WebSamples/Tests/web.config ================================================ ================================================ FILE: Deployment/setpath.bat ================================================ @echo Setting environment for using Phalanger tools. @echo. @SET PATH=%PATH%;%* @%comspec% ================================================ FILE: Documentation/HowTo/Phalanger manual installation.txt ================================================ .NET configuration: (actually done by installer) 0. Phalanger DLLs must be present in GAC copy PhpNetCore.dll, PhpNetClassLibrary.dll, PhpNetCoreIL.dll, PhpNetXmlDom.dll and required extensions and wrappers into %WinDir%\assemblies\ 1. open directory %WinDir%\Microsoft.NET\Framework\v4.0.30319\CONFIG\ (open %WinDir%\Microsoft.NET\Framework64\v4.0.30319\CONFIG\ for 64bit configurations too) 2. edit web.config: (if you are using old IIS6) within add following line 3. edit machine.config: within add (merge) following ( replace {phalanger path} with your path ) " ================================================ FILE: Documentation/HowTo/debug PHP website.txt ================================================ to debug PHP website using VisualStudio option 1 - using Phalanger VS2008 integration 1. just create PHP WebSite, hit F5 option 2 - Using any VisualStudio without our integration (best for debugging Phalanger internals) 1. open your solution 2. right click, add, Existing Web Site 3. select e.g. Local IIS, and your website (in case of IIS7, 7.5, see "website in IIS7.txt") 4. run the website, when asked - allow to modify web.config to enable debugging ================================================ FILE: Documentation/HowTo/force x86 execution.txt ================================================ /target:exe, /target:winform You can force WoW64 mode for scripts compiled by phalanger (or any other AnyCPU assemblies) by using corflags.exe tool. The tool is a part of .NET Framework SDK. sample usage: "C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\corflags.exe" /32BIT+ test.exe /target:web Configure your IIS AppPool to Enable 32-bit support (IIS Manager -> Application Pools -> select the pool running your website -> Advanced Settings). ================================================ FILE: Documentation/HowTo/website in IIS7.txt ================================================ to run PHP website using Phalanger on IIS (6, 7, 7.5) IIS configuration: 0. IIS, ASP.NET must be installed (Windows Features) :: (Integrated Pipeline) (IIS 7) 1. open IIS console 2. add new application (or map an application to an existing directory) 3. Manage the app, Advanced Settings - Set Default AppPool (or your own, Integrated mode) 4. (if you need native extensions) within the Application Pools (top of the left tree), ensure your pool runs in 32bit a. right click on the pool, Advanced Settings b. Enable 32-Bit Applications = true 5. in your web.config, add following into section 6. go to your application, open Default Document, add "index.php", "default.php" :: (Classic .NET AppPool) (IIS 6) 1. open IIS console 2. add new application (or map an application to an existing directory) 3. Manage the app, Advanced Settings - Set Classic .NET AppPool (or your own pool, must not be Integrated mode) 4. (if you need native extensions) within the Application Pools (top of the left tree), ensure your pool (Classic .NET AppPool) runs in 32bit a. right click on the pool, Advanced Settings b. Enable 32-Bit Applications = true 5. go to your application, open Handler Mappings a. Add Script b. Request Path = *.php c. Executable = C:\Windows\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll d. Name = (anything) 6. go to your application, open Default Document, add "index.php", "default.php" ================================================ FILE: Documentation/Logo/Credits.txt ================================================ Phalanger logo was created by Jan Benda in 2004. ================================================ FILE: LICENSE.txt ================================================ Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: 1. You must give any other recipients of the Work or Derivative Works a copy of this License; and 2. You must cause any modified files to carry prominent notices stating that You changed the files; and 3. You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and 4. If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. ================================================ FILE: README.md ================================================ ## Phalanger - the PHP language compiler for .NET Framework Introducing full-featured PHP 5.4 runtime & compiler for .NET/Mono frameworks. Phalanger is an open-source implementation of PHP, compatible with the vast array of existing PHP code. In addition Phalanger gives PHP-application developers lot of new possibilities; it improves the performance, allows to use modern environments and takes advantage of seamless .NET integration. ## Status Phalanger is a predecessor of Peachpie compiler (https://github.com/peachpiecompiler/peachpie) - PHP 7.1 compiler for .NET and .NET Core frameworks. ## Visual Studio Integration Phalanger is integrated into Visual Studio so it gives code colorization, debugging and IntelliSense capabilities. - Syntax highlighting - Compilation & Debugging - Installs Phalanger binaries Download on https://visualstudiogallery.msdn.microsoft.com/419916fb-ec89-4f18-ba97-75cf66037797 ================================================ FILE: Samples/PersonalWebSite/Admin/Albums.aspx ================================================ <%@ Page Language="PHP" MasterPageFile="~/Default.master" Title="Your Name Here | Admin" CodeFile="Albums.aspx.php" Inherits="Admin_Albums_aspx" %>

Your Albums

The following are the albums currently on your site. Click Edit to modify the pictures in each album. Click Delete to permanently remove the album and all of its pictures

You currently have no albums.
&Size=S" class="photo_198" style="border:4px solid white" alt="Sample Photo from Album Number <%# $this->Eval("AlbumID") %>" />
<%# $this->Server->HtmlEncode($this->Eval("Caption")) %>
<%# $this->Eval("Count") %> Photo(s)
================================================ FILE: Samples/PersonalWebSite/Admin/Albums.aspx.php ================================================ ================================================ FILE: Samples/PersonalWebSite/Admin/Details.aspx ================================================ <%@ Page Language="PHP" MasterPageFile="~/Default.master" Title="Your Name Here | Admin" CodeFile="Details.aspx.php" Inherits="Admin_Details_aspx" %>

<%# $this->Server->HtmlEncode($this->Eval("Caption")) %>

&Size=L" class="photo_198" style="border:4px solid white" alt='Photo Number <%# $this->Eval("PhotoID") %>' />

 

================================================ FILE: Samples/PersonalWebSite/Admin/Details.aspx.php ================================================ Load->Add(new EventHandler(array($this, "Page_Load"))); } function Page_Load($sender, $e) { $this->MaintainScrollPositionOnPostBack = true; if ($this->IsPostBack) return; $page = Convert::ToInt32($this->Request->QueryString->get_Item("Page")); if ($page >= 0) $this->FormView1->PageIndex = $page; } } ?> ================================================ FILE: Samples/PersonalWebSite/Admin/Photos.aspx ================================================ <%@ Page Language="PHP" MasterPageFile="~/Default.master" Title="Your Name Here | Admin" CodeFile="Photos.aspx.php" Inherits="Admin_Photos_aspx" %>

Add Photos

To add single photos over HTTP, select a file and caption, then click Add.

Photo

Caption


Photos in This Album

The following are the photos currently in this album.

You currently have no photos.
Thumbnail of Photo Number <%# $this->Eval("PhotoID") %>
================================================ FILE: Samples/PersonalWebSite/Admin/Photos.aspx.php ================================================ Values->get_Item("BytesOriginal")->Length == 0) $e->Cancel = true; } protected function Button1_Click($sender, $e) { $d = new System:::IO:::DirectoryInfo($this->Server->MapPath("~/Upload")); $files = $d->GetFiles("*.jpg"); for ($i = 0; $i < $files->Length; $i++) { $f = $files->GetValue($i); $len = Convert::ToInt32($f->OpenRead()->Length); $buffer = System:::Array::CreateInstance(Type::GetType("System.Byte"), $len); $f->OpenRead()->Read($buffer, 0, $len); PhotoManager::AddPhoto(Convert::ToInt32($this->Request->QueryString->get_Item("AlbumID")), $f->Name, $buffer); } $this->GridView1->DataBind(); } } ?> ================================================ FILE: Samples/PersonalWebSite/Albums.aspx ================================================ <%@ Page Language="PHP" MasterPageFile="~/Default.master" Title="Your Name Here | Albums" CodeFile="Albums.aspx.php" Inherits="Albums_aspx" %>

Welcome to My Photo Galleries

Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exercitation consequat. esse molestie consequat, vel willum.


&Size=M" class="photo_198" style="border:4px solid white" alt='Sample Photo from Album Number <%# $this->Eval("AlbumID") %>' />

"><%# $this->Server->HtmlEncode($this->Eval("Caption")) %>

<%# $this->Eval("Count") %> Photo(s)
================================================ FILE: Samples/PersonalWebSite/Albums.aspx.php ================================================ ================================================ FILE: Samples/PersonalWebSite/App_Code/Album.php ================================================ AlbumID = $id; $this->Count = $count; $this->Caption = $caption; $this->IsPublic = $ispublic; } } ?> ================================================ FILE: Samples/PersonalWebSite/App_Code/Photo.php ================================================ PhotoID = $id; $this->AlbumID = $albumid; $this->Caption = $caption; } } ?> ================================================ FILE: Samples/PersonalWebSite/App_Code/PhotoManager.php ================================================ get_Item("Personal")->ConnectionString); { $command = new SqlCommand("GetPhoto", $connection); { $command->CommandType = CommandType::StoredProcedure; $command->Parameters->Add("@PhotoID", SqlDbType::i'Int')->Value = $photoid; $command->Parameters->Add("@Size", SqlDbType::i'Int')->Value = $size; $filter = !(HttpContext::$Current->User->IsInRole("Friends") || HttpContext::$Current->User->IsInRole("Administrators")); $command->Parameters->Add("@IsPublic", SqlDbType::Bit)->Value = $filter; $connection->Open(); $result = $command->ExecuteScalar(); } $command->Dispose(); } $connection->Dispose(); if ($result == NULL) return NULL; try { return new MemoryStream($result); } catch(System:::Exception $e) { return NULL; } } public static function GetPhotoPlaceholder($size) { $path = HttpContext::$Current->Server->MapPath("~/Images/"); switch ($size) { case PhotoSize::Small: $path .= "placeholder-100.jpg"; break; case PhotoSize::Medium: $path .= "placeholder-200.jpg"; break; case PhotoSize::Large: $path .= "placeholder-600.jpg"; break; default: $path .= "placeholder-600.jpg"; break; } return new FileStream($path, FileMode::Open, FileAccess::Read, FileShare::Read); } public static function GetFirstPhoto($albumid, $size) { $connection = new SqlConnection(ConfigurationManager::$ConnectionStrings->get_Item("Personal")->ConnectionString); { $command = new SqlCommand("GetFirstPhoto", $connection); { $command->CommandType = CommandType::StoredProcedure; $command->Parameters->Add("@AlbumID", SqlDbType::i'Int')->Value = $albumid; $command->Parameters->Add("@Size", SqlDbType::i'Int')->Value = $size; $filter = !(HttpContext::$Current->User->IsInRole("Friends") || HttpContext::$Current->User->IsInRole("Administrators")); $command->Parameters->Add("@IsPublic", SqlDbType::Bit)->Value = $filter; $connection->Open(); $result = $command->ExecuteScalar(); } $command->Dispose(); } $connection->Dispose(); if ($result == NULL) return NULL; try { return new MemoryStream($result); } catch(System:::Exception $e) { return NULL; } } public static function GetPhotos($AlbumID = NULL) { if ($AlbumID == NULL) $AlbumID = self::GetRandomAlbumID(); $connection = new SqlConnection(ConfigurationManager::$ConnectionStrings->get_Item("Personal")->ConnectionString); { $command = new SqlCommand("GetPhotos", $connection); { $command->CommandType = CommandType::StoredProcedure; $command->Parameters->Add("@AlbumID", SqlDbType::i'Int')->Value = $AlbumID; $filter = !(HttpContext::$Current->User->IsInRole("Friends") || HttpContext::$Current->User->IsInRole("Administrators")); $command->Parameters->Add("@IsPublic", SqlDbType::Bit)->Value = $filter; $connection->Open(); $list = new i'List'<:Photo:>; $reader = $command->ExecuteReader(); { while ($reader->Read()) { $temp = new Photo( $reader->get_Item("PhotoID"), $reader->get_Item("AlbumID"), $reader->get_Item("Caption")); $list->Add($temp); } } $reader->Dispose(); } $command->Dispose(); } $connection->Dispose(); return $list; } public static function AddPhoto($AlbumID, $Caption, $BytesOriginal) { $connection = new SqlConnection(ConfigurationManager::$ConnectionStrings->get_Item("Personal")->ConnectionString); { $command = new SqlCommand("AddPhoto", $connection); { $command->CommandType = CommandType::StoredProcedure; $command->Parameters->Add("@AlbumID", SqlDbType::i'Int')->Value = $AlbumID; $command->Parameters->Add("@Caption", SqlDbType::NVarChar)->Value = $Caption; $command->Parameters->Add("@BytesOriginal", SqlDbType::Image)->Value = $BytesOriginal; $command->Parameters->Add("@BytesFull", SqlDbType::Image)->Value = self::ResizeImageFile($BytesOriginal, 600); $command->Parameters->Add("@BytesPoster", SqlDbType::Image)->Value = self::ResizeImageFile($BytesOriginal, 198); $command->Parameters->Add("@BytesThumb", SqlDbType::Image)->Value = self::ResizeImageFile($BytesOriginal, 100); $connection->Open(); $command->ExecuteNonQuery(); } $command->Dispose(); } $connection->Dispose(); } public static function RemovePhoto($PhotoID) { $connection = new SqlConnection(ConfigurationManager::$ConnectionStrings->get_Item("Personal")->ConnectionString); { $command = new SqlCommand("RemovePhoto", $connection); { $command->CommandType = CommandType::StoredProcedure; $command->Parameters->Add("@PhotoID", SqlDbType::i'Int')->Value = $PhotoID; $connection->Open(); $command->ExecuteNonQuery(); } $command->Dispose(); } $connection->Dispose(); } public static function EditPhoto($Caption, $PhotoID) { $connection = new SqlConnection(ConfigurationManager::$ConnectionStrings->get_Item("Personal")->ConnectionString); { $command = new SqlCommand("EditPhoto", $connection); { $command->CommandType = CommandType::StoredProcedure; $command->Parameters->Add("@Caption", SqlDbType::NVarChar)->Value = $Caption; $command->Parameters->Add("@PhotoID", SqlDbType::i'Int')->Value = $PhotoID; $connection->Open(); $command->ExecuteNonQuery(); } $command->Dispose(); } $connection->Dispose(); } // Album-Related Methods public static function GetAlbums() { $connection = new SqlConnection(ConfigurationManager::$ConnectionStrings->get_Item("Personal")->ConnectionString); { $command = new SqlCommand("GetAlbums", $connection); { $command->CommandType = CommandType::StoredProcedure; $filter = !(HttpContext::$Current->User->IsInRole("Friends") || HttpContext::$Current->User->IsInRole("Administrators")); $command->Parameters->Add("@IsPublic", SqlDbType::Bit)->Value = $filter; $connection->Open(); $list = new i'List'<:Album:>; $reader = $command->ExecuteReader(); { while ($reader->Read()) { $temp = new Album( $reader->get_Item("AlbumID"), $reader->get_Item("NumberOfPhotos"), $reader->get_Item("Caption"), $reader->get_Item("IsPublic")); $list->Add($temp); } } $reader->Dispose(); } $command->Dispose(); } $connection->Dispose(); return $list; } public static function AddAlbum($Caption, $IsPublic) { $connection = new SqlConnection(ConfigurationManager::$ConnectionStrings->get_Item("Personal")->ConnectionString); { $command = new SqlCommand("AddAlbum", $connection); { $command->CommandType = CommandType::StoredProcedure; $command->Parameters->Add("@Caption", SqlDbType::NVarChar)->Value = $Caption; $command->Parameters->Add("@IsPublic", SqlDbType::Bit)->Value = $IsPublic; $connection->Open(); $command->ExecuteNonQuery(); } $command->Dispose(); } $connection->Dispose(); } public static function RemoveAlbum($AlbumID) { $connection = new SqlConnection(ConfigurationManager::$ConnectionStrings->get_Item("Personal")->ConnectionString); { $command = new SqlCommand("RemoveAlbum", $connection); { $command->CommandType = CommandType::StoredProcedure; $command->Parameters->Add("@AlbumID", SqlDbType::i'Int')->Value = $AlbumID; $connection->Open(); $command->ExecuteNonQuery(); } $command->Dispose(); } $connection->Dispose(); } public static function EditAlbum($Caption, $IsPublic, $AlbumID) { $connection = new SqlConnection(ConfigurationManager::$ConnectionStrings->get_Item("Personal")->ConnectionString); { $command = new SqlCommand("EditAlbum", $connection); { $command->CommandType = CommandType::StoredProcedure; $command->Parameters->Add("@Caption", SqlDbType::NVarChar)->Value = $Caption; $command->Parameters->Add("@IsPublic", SqlDbType::Bit)->Value = $IsPublic; $command->Parameters->Add("@AlbumID", SqlDbType::i'Int')->Value = $AlbumID; $connection->Open(); $command->ExecuteNonQuery(); } $command->Dispose(); } $connection->Dispose(); } public static function GetRandomAlbumID() { $connection = new SqlConnection(ConfigurationManager::$ConnectionStrings->get_Item("Personal")->ConnectionString); { $command = new SqlCommand("GetNonEmptyAlbums", $connection); { $command->CommandType = CommandType::StoredProcedure; $connection->Open(); $list = new i'List'<:Album:>; $reader = $command->ExecuteReader(); { while ($reader->Read()) { $temp = new Album(Convert::ToInt32($reader->get_Item("AlbumID")), 0, "", false); $list->Add($temp); } } $reader->Dispose(); } $command->Dispose(); } $connection->Dispose(); try { $r = new Random; return $list->get_Item($r->Next($list->Count))->AlbumID; } catch(System:::Exception $e) { return -1; } } // Helper Functions private static function ResizeImageFile($imageFile, $targetSize) { $oldImage = Image::FromStream(new MemoryStream($imageFile)); { $newSize = self::CalculateDimensions($oldImage->Size, $targetSize); $newImage = new Bitmap($newSize->Width, $newSize->Height, PixelFormat::Format24bppRgb); { $canvas = Graphics::FromImage($newImage); { $canvas->SmoothingMode = SmoothingMode::AntiAlias; $canvas->InterpolationMode = InterpolationMode::HighQualityBicubic; $canvas->PixelOffsetMode = PixelOffsetMode::HighQuality; $canvas->DrawImage($oldImage, 0, 0, $newSize->Width, $newSize->Height); $m = new MemoryStream(); $newImage->Save($m, ImageFormat::$Jpeg); } $canvas->Dispose(); } $newImage->Dispose(); } $oldImage->Dispose(); return $m->GetBuffer(); } private static function CalculateDimensions($oldSize, $targetSize) { $newSize = new Size(0, 0); if ($oldSize->Height > $oldSize->Width) { $newSize->Width = (int)($oldSize->Width * ($targetSize / $oldSize->Height)); $newSize->Height = $targetSize; } else { $newSize->Width = $targetSize; $newSize->Height = (int)($oldSize->Height * ($targetSize / $oldSize->Width)); } return $newSize; } public static function ListUploadDirectory() { $d = new DirectoryInfo(System:::Web:::HttpContext::$Current->Server->MapPath("~/Upload")); return $d->GetFileSystemInfos("*.jpg"); } } ?> ================================================ FILE: Samples/PersonalWebSite/App_Code/PhotoSize.php ================================================ ================================================ FILE: Samples/PersonalWebSite/App_Data/personal-add.sql ================================================ CREATE TABLE [Albums] ( [AlbumID] [int] IDENTITY (1, 1) NOT NULL , [Caption] [nvarchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL , [IsPublic] [bit] NOT NULL ) ON [PRIMARY] GO CREATE TABLE [Photos] ( [PhotoID] [int] IDENTITY (1, 1) NOT NULL , [AlbumID] [int] NOT NULL , [Caption] [nvarchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL , [BytesOriginal] [image] NOT NULL , [BytesFull] [image] NOT NULL , [BytesPoster] [image] NOT NULL , [BytesThumb] [image] NOT NULL ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] GO ALTER TABLE [Albums] ADD CONSTRAINT [PK_Albums] PRIMARY KEY CLUSTERED ([AlbumID])ON [PRIMARY] GO ALTER TABLE [Photos] ADD CONSTRAINT [PK_Photos] PRIMARY KEY CLUSTERED ([PhotoID]) ON [PRIMARY] GO ALTER TABLE [Photos] ADD CONSTRAINT [FK_Photos_Albums] FOREIGN KEY ([AlbumID]) REFERENCES [Albums] ([AlbumID]) ON DELETE CASCADE ON UPDATE CASCADE GO SET QUOTED_IDENTIFIER ON GO SET ANSI_NULLS ON GO CREATE PROCEDURE AddAlbum @Caption nvarchar(50), @IsPublic bit AS INSERT INTO [Albums] ([Caption],[IsPublic]) VALUES (@Caption, @IsPublic) RETURN GO CREATE PROCEDURE AddPhoto @AlbumID int, @Caption nvarchar(50), @BytesOriginal image, @BytesFull image, @BytesPoster image, @BytesThumb image AS INSERT INTO [Photos] ( [AlbumID], [BytesOriginal], [Caption], [BytesFull], [BytesPoster], [BytesThumb] ) VALUES ( @AlbumID, @BytesOriginal, @Caption, @BytesFull, @BytesPoster, @BytesThumb ) RETURN GO CREATE PROCEDURE EditAlbum @Caption nvarchar(50), @IsPublic bit, @AlbumID int AS UPDATE [Albums] SET [Caption] = @Caption, [IsPublic] = @IsPublic WHERE [AlbumID] = @AlbumID RETURN GO CREATE PROCEDURE EditPhoto @Caption nvarchar(50), @PhotoID int AS UPDATE [Photos] SET [Caption] = @Caption WHERE [PhotoID] = @PhotoID RETURN GO CREATE PROCEDURE GetAlbums @IsPublic bit AS SELECT [Albums].[AlbumID], [Albums].[Caption], [Albums].[IsPublic], Count([Photos].[PhotoID]) AS NumberOfPhotos FROM [Albums] LEFT JOIN [Photos] ON [Albums].[AlbumID] = [Photos].[AlbumID] WHERE ([Albums].[IsPublic] = @IsPublic OR [Albums].[IsPublic] = 1) GROUP BY [Albums].[AlbumID], [Albums].[Caption], [Albums].[IsPublic] RETURN GO CREATE PROCEDURE GetFirstPhoto @AlbumID int, @Size int, @IsPublic bit AS IF @Size = 1 SELECT TOP 1 [BytesThumb] FROM [Photos] LEFT JOIN [Albums] ON [Albums].[AlbumID] = [Photos].[AlbumID] WHERE [Albums].[AlbumID] = @AlbumID AND ([Albums].[IsPublic] = @IsPublic OR [Albums].[IsPublic] = 1) ELSE IF @Size = 2 SELECT TOP 1 [BytesPoster] FROM [Photos] LEFT JOIN [Albums] ON [Albums].[AlbumID] = [Photos].[AlbumID] WHERE [Albums].[AlbumID] = @AlbumID AND ([Albums].[IsPublic] = @IsPublic OR [Albums].[IsPublic] = 1) ELSE IF @Size = 3 SELECT TOP 1 [BytesFull] FROM [Photos] LEFT JOIN [Albums] ON [Albums].[AlbumID] = [Photos].[AlbumID] WHERE [Albums].[AlbumID] = @AlbumID AND ([Albums].[IsPublic] = @IsPublic OR [Albums].[IsPublic] = 1) ELSE IF @Size = 4 SELECT TOP 1 [BytesOriginal] FROM [Photos] LEFT JOIN [Albums] ON [Albums].[AlbumID] = [Photos].[AlbumID] WHERE [Albums].[AlbumID] = @AlbumID AND ([Albums].[IsPublic] = @IsPublic OR [Albums].[IsPublic] = 1) ELSE SELECT TOP 1 [BytesPoster] FROM [Photos] LEFT JOIN [Albums] ON [Albums].[AlbumID] = [Photos].[AlbumID] WHERE [Albums].[AlbumID] = @AlbumID AND ([Albums].[IsPublic] = @IsPublic OR [Albums].[IsPublic] = 1) RETURN GO CREATE PROCEDURE GetNonEmptyAlbums AS SELECT [Albums].[AlbumID] FROM [Albums] LEFT JOIN [Photos] ON [Albums].[AlbumID] = [Photos].[AlbumID] WHERE [Albums].[IsPublic] = 1 GROUP BY [Albums].[AlbumID], [Albums].[Caption], [Albums].[IsPublic] HAVING Count([Photos].[PhotoID]) > 0 RETURN GO CREATE PROCEDURE GetPhoto @PhotoID int, @Size int, @IsPublic bit AS IF @Size = 1 SELECT TOP 1 [BytesThumb] FROM [Photos] LEFT JOIN [Albums] ON [Albums].[AlbumID] = [Photos].[AlbumID] WHERE [PhotoID] = @PhotoID AND ([Albums].[IsPublic] = @IsPublic OR [Albums].[IsPublic] = 1) ELSE IF @Size = 2 SELECT TOP 1 [BytesPoster] FROM [Photos] LEFT JOIN [Albums] ON [Albums].[AlbumID] = [Photos].[AlbumID] WHERE [PhotoID] = @PhotoID AND ([Albums].[IsPublic] = @IsPublic OR [Albums].[IsPublic] = 1) ELSE IF @Size = 3 SELECT TOP 1 [BytesFull] FROM [Photos] LEFT JOIN [Albums] ON [Albums].[AlbumID] = [Photos].[AlbumID] WHERE [PhotoID] = @PhotoID AND ([Albums].[IsPublic] = @IsPublic OR [Albums].[IsPublic] = 1) ELSE IF @Size = 4 SELECT TOP 1 [BytesOriginal] FROM [Photos] LEFT JOIN [Albums] ON [Albums].[AlbumID] = [Photos].[AlbumID] WHERE [PhotoID] = @PhotoID AND ([Albums].[IsPublic] = @IsPublic OR [Albums].[IsPublic] = 1) ELSE SELECT TOP 1 [BytesPoster] FROM [Photos] LEFT JOIN [Albums] ON [Albums].[AlbumID] = [Photos].[AlbumID] WHERE [PhotoID] = @PhotoID AND ([Albums].[IsPublic] = @IsPublic OR [Albums].[IsPublic] = 1) RETURN GO CREATE PROCEDURE GetPhotos @AlbumID int, @IsPublic bit AS SELECT * FROM [Photos] LEFT JOIN [Albums] ON [Albums].[AlbumID] = [Photos].[AlbumID] WHERE [Photos].[AlbumID] = @AlbumID AND ([Albums].[IsPublic] = @IsPublic OR [Albums].[IsPublic] = 1) RETURN GO CREATE PROCEDURE RemoveAlbum @AlbumID int AS DELETE FROM [Albums] WHERE [AlbumID] = @AlbumID RETURN GO CREATE PROCEDURE RemovePhoto @PhotoID int AS DELETE FROM [Photos] WHERE [PhotoID] = @PhotoID RETURN GO SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS ON GO ================================================ FILE: Samples/PersonalWebSite/App_Data/personal-remove.sql ================================================ if exists (select * from dbo.sysobjects where id = object_id(N'[FK_Photos_Albums]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1) ALTER TABLE [Photos] DROP CONSTRAINT FK_Photos_Albums GO if exists (select * from dbo.sysobjects where id = object_id(N'[AddAlbum]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) drop procedure [AddAlbum] GO if exists (select * from dbo.sysobjects where id = object_id(N'[AddPhoto]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) drop procedure [AddPhoto] GO if exists (select * from dbo.sysobjects where id = object_id(N'[EditAlbum]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) drop procedure [EditAlbum] GO if exists (select * from dbo.sysobjects where id = object_id(N'[EditPhoto]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) drop procedure [EditPhoto] GO if exists (select * from dbo.sysobjects where id = object_id(N'[GetAlbums]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) drop procedure [GetAlbums] GO if exists (select * from dbo.sysobjects where id = object_id(N'[GetFirstPhoto]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) drop procedure [GetFirstPhoto] GO if exists (select * from dbo.sysobjects where id = object_id(N'[GetNonEmptyAlbums]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) drop procedure [GetNonEmptyAlbums] GO if exists (select * from dbo.sysobjects where id = object_id(N'[GetPhoto]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) drop procedure [GetPhoto] GO if exists (select * from dbo.sysobjects where id = object_id(N'[GetPhotos]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) drop procedure [GetPhotos] GO if exists (select * from dbo.sysobjects where id = object_id(N'[RemoveAlbum]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) drop procedure [RemoveAlbum] GO if exists (select * from dbo.sysobjects where id = object_id(N'[RemovePhoto]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) drop procedure [RemovePhoto] GO if exists (select * from dbo.sysobjects where id = object_id(N'[Albums]') and OBJECTPROPERTY(id, N'IsUserTable') = 1) drop table [Albums] GO if exists (select * from dbo.sysobjects where id = object_id(N'[Photos]') and OBJECTPROPERTY(id, N'IsUserTable') = 1) drop table [Photos] GO ================================================ FILE: Samples/PersonalWebSite/App_Themes/Black/Default.css ================================================ /* 0 BASIC TAGS */ table { font-size: 1em; } h1, h2, h3, h4 { margin: 0; font-family: Tahoma, Arial, Helvetica, sans-serif; } p { line-height: 1.4em; } hr { border: 0; border-top: 1px solid #505050; height: 1px; } a { text-decoration: none; color: #DBB94F; } a:visited { color: #C19B28; } a:hover { text-decoration: underline; color: #E6CD84; } a:active { color: #C19B28; } body { background-color: #656565; background-image: url(Images/background.gif); background-repeat: repeat; margin: 0; padding: 0; text-align: center; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 0.7em; color: #FFFFFF; } img { border-width: 0; } /* 1 HEADER */ .header { background-image: url(Images/header.gif); background-repeat: no-repeat; position: relative; width: 789px; height: 76px; margin: 0 auto 5px auto; } h1 { position: absolute; left: 37px; top: 12px; text-transform: uppercase; font-size: 18px; } h2 { position: absolute; left: 37px; top: 45px; font-size: 11px; } .menua { position: absolute; right: 37px; top: 13px; text-transform: uppercase; font-size: 10px; } .nav { position: absolute; right: 37px; top: 51px; text-transform: uppercase; font-size: 10px; } .menua a:visited, .nav a:visited { color: #DBB94F; } /* 1.1 SHIM */ .shim { display: none; } /* 2 PAGE */ .page { background-repeat: repeat-y; margin-left: auto; margin-right: auto; text-align: left; } h3 { margin-top: 1.0em; margin-bottom: 1.12em; font-size: 1.5em; font-weight: bold; } h4 { margin-top: 1.0em; margin-bottom: 1.12em; font-size: 1.3em; font-weight: bold; } /* 2.1 ALL PAGES */ #home, #resume, #links, #albums, #photos, #details, #register, #admin-albums, #admin-photos, #admin-details { position: relative; width: 686px; padding: 0px 37px; padding-top: 1px; /* Weird Mozilla Bug */ padding-bottom: 40px; /* Weird Mozilla Bug */ } #sidebar { float: left; width: 214px; height: 100%; } #content { margin-left: 256px; } #whatsnew { float: left; width: 200px; height: 100%; } #coollinks { margin-left: 220px; } #resume h4, #links h4 { margin-top: 0; border-top: 1px solid #505050; padding-top: 1.0em; position: absolute; left: 37px; width: 214px; } #resume #photo { position: absolute; left: 37px; top: 20px; width: 214px; } #resume .first { margin-top: 0; border-top: 1px solid #505050; padding-top: 1.5em; } dl { margin-top: 0; margin-bottom: 0; border-top: 1px solid #505050; padding-top: 1.5em; padding-bottom: 1.5em; position: relative; } dt { position: absolute; left: 0; } dd { margin-left: 150px; height: 2.0em; } .emptydata td { padding: 50px; color: #aeaeae; } .view { margin-left: auto; margin-right: auto; width: 686px; text-align: center; } .view .photo-frame { margin-left: auto; margin-right: auto; } .item { padding: 20px 50px; color: #B2B2B2; } .item h4 { margin-bottom: 0.4em; } .nullpanel { padding: 150px; width: auto; text-align: center; } .buttonbar, .buttonbar-top { width: 686px; height: 36px; background-image: url(Images/photonav.gif); background-repeat: no-repeat; margin-bottom: 5px; text-align: center; } /* 3 FOOTER */ .footerbg { width: auto; height: 50px; text-align: center; } .footer { background-image: url(images/footer.gif); background-repeat: no-repeat; margin-left: auto; margin-right: auto; padding-bottom: 20px; width: 770px; height: 50px; text-align: center; font-size: 10px; color: #ffffff; } .menub { margin: 8px auto 2px auto; text-transform: uppercase; font-size: 10px; } .menub a:visited { color: #DBB94F; } /* Inline styles are used because image controls hard code a border property */ .photo_198 { border: 4px solid #FFFFFF; } ================================================ FILE: Samples/PersonalWebSite/App_Themes/Black/Default.skin ================================================ ================================================ FILE: Samples/PersonalWebSite/App_Themes/Black/frame.css ================================================ /* Photo Border for All Pages Except the Albums Page */ .photo-frame .topx-- { background-image: url(Images/frame-topx--.gif); background-repeat: no-repeat; width: auto; height: 4px; vertical-align: top; } .photo-frame .top-x- { background-image: url(Images/frame-top-x-.gif); background-repeat: repeat-x; width: auto; height: 4px; } .photo-frame .top--x { background-image: url(Images/frame-top--x.gif); background-repeat: no-repeat; width: auto; height: 4px; vertical-align: top; } .photo-frame .midx-- { background-image: url(Images/frame-midx--.gif); background-repeat: repeat-y; width: 4px; height: 100%; } .photo-frame .mid--x { background-image: url(Images/frame-mid--x.gif); background-repeat: repeat-y; width: 4px; height: 100%; } .photo-frame .botx-- { background-image: url(Images/frame-botx--.gif); background-repeat: no-repeat; width: 4px; height: 4px; vertical-align: top; } .photo-frame .bot-x- { background-image: url(Images/frame-bot-x-.gif); background-repeat: repeat-x; width: auto; height: 4px; } .photo-frame .bot--x { background-image: url(Images/frame-bot--x.gif); background-repeat: no-repeat; width: 4px; height: 4px; vertical-align: bottom; } /* Photo Border for the Album Page */ .album-frame .topx----, .album-frame .top----x, .album-frame .botx----, .album-frame .bot----x { height: 14px; width: 14px; } .album-frame .top-x--- { background-image: url(images/album-tstretch.gif); background-repeat: repeat-x; text-align: left; height: 14px; width: auto; } .album-frame .top--x-- { background-image: url(images/album-tstretch.gif); background-repeat: repeat-x; height: 14px; width: auto; } .album-frame .top---x- { background-image: url(images/album-tstretch.gif); background-repeat: repeat-x; text-align: right; height: 14px; width: auto; } .album-frame .mtpx---- { background-image: url(images/album-lstretch.gif); background-repeat: repeat-y; vertical-align: top; height: auto; width: 14px; } .album-frame .mtp----x { background-image: url(images/album-rstretch.gif); background-repeat: repeat-y; vertical-align: top; height: auto; width: 14px; } .album-frame .midx---- { background-image: url(images/album-lstretch.gif); background-repeat: repeat-y; height: auto; width: 14px; } .album-frame .mid----x { background-image: url(images/album-rstretch.gif); background-repeat: repeat-y; height: auto; width: 14px; } .album-frame .mbtx---- { background-image: url(images/album-lstretch.gif); background-repeat: repeat-y; vertical-align: bottom; height: auto; width: 14px; } .album-frame .mbt----x { background-image: url(images/album-rstretch.gif); background-repeat: repeat-y; vertical-align: bottom; height: auto; width: 14px; } .album-frame .bot-x--- { background-image: url(images/album-bstretch.gif); background-repeat: repeat-x; text-align: right; height: 14px; width: auto; } .album-frame .bot--x-- { background-image: url(images/album-bstretch.gif); background-repeat: repeat-x; height: 14px; width: auto; } .album-frame .bot---x- { background-image: url(images/album-bstretch.gif); background-repeat: repeat-x; text-align: left; height: 14px; width: auto; } /* Form Items */ .textfield { border: 1px solid #000000; vertical-align: middle; padding: 3px; margin: 2px 0 5px 0; } /* Login View */ .login .label { display:block; } .login .textbox { border: 1px solid #000000; width: 140px; vertical-align: middle; padding: 3px; margin: 2px 0 5px 0; } .login .button { display:block; margin-top:8px; margin-bottom:8px; } /* LIST */ ul { list-style-type: none; list-style-image: url(images/bullet-2.gif); list-style-position: outside; line-height: 2.1em; vertical-align: middle; margin-left: 1.25em; } .list_link{ list-style-image: url(images/bullet-1.gif); } ================================================ FILE: Samples/PersonalWebSite/App_Themes/White/Default.css ================================================ /* 0 BASIC TAGS */ table { font-size: 1em; } h1, h2, h3, h4 { margin: 0; font-family: tahoma, arial, helvetica, sans-serif; } p { line-height: 1.4em; } hr { border: 0; border-top: 1px solid #bababa; height: 1px; } a { text-decoration: none; color: #d32525; } a:visited { color: #980000; } a:hover { text-decoration: underline; color: #e05252; } a:active { color: #980000; } body { background-color: #ffffff; background-image: url(images/background.gif); background-repeat: repeat-x; margin: 0; padding: 0; text-align: center; font-family: verdana, arial, helvetica, sans-serif; font-size: 0.7em; color: #666666; } img { border-width: 0; } /* 1 HEADER */ .header { background-image: url(Images/header.gif); background-repeat: no-repeat; position: relative; width: 760px; height: 81px; margin-left: auto; margin-right: auto; } h1 { position: absolute; left: 37px; top: 12px; text-transform: uppercase; font-size: 18px; } h2 { position: absolute; left: 37px; top: 60px; font-size: 11px; } .menua { position: absolute; right: 37px; top: 17px; text-transform: uppercase; font-size: 10px; } .nav { position: absolute; right: 37px; top: 60px; text-transform: uppercase; font-size: 10px; } .menua a:visited, .nav a:visited { color: #d32525; } /* 1.1 SHIM */ .shim { background-repeat: no-repeat; margin-left: auto; margin-right: auto; width: 760px; height: 8px; font-size: 0; } .column { background-image: url(images/content-shim.gif); } .gradient { background-image: url(images/content-shim-photo.gif); } .solid { background-image: url(images/content-shim-none.gif); } /* 2 PAGE */ .page { background-repeat: repeat-y; margin-left: auto; margin-right: auto; text-align: left; } h3 { margin-top: 1.0em; margin-bottom: 1.12em; font-size: 1.5em; font-weight: bold; } h4 { margin-top: 1.0em; margin-bottom: 1.12em; font-size: 1.3em; font-weight: bold; } /* 2.1 HOME, RESUME, LINKS, REGISTER, ADMIN/ALBUMS, ADMIN/PHOTOS PAGES */ #home, #resume, #links, #register, #admin-albums, #admin-photos { background-image: url(images/body-repeat.gif); position: relative; width: 686px; padding: 0px 37px; padding-top: 1px; /* Weird Mozilla Bug */ padding-bottom: 40px; /* Weird Mozilla Bug */ } #sidebar { float: left; width: 214px; height: 100%; } #content { margin-left: 256px; } #whatsnew { float: left; width: 200px; height: 100%; } #coollinks { margin-left: 220px; } #resume h4, #links h4 { margin-top: 0; border-top: 1px solid #bababa; padding-top: 1.0em; position: absolute; left: 37px; width: 214px; } #resume #photo { position: absolute; left: 37px; top: 20px; width: 214px; } #resume .first { margin-top: 0; border-top: 1px solid #bababa; padding-top: 1.5em; } dl { margin-top: 0; margin-bottom: 0; border-top: 1px solid #bababa; padding-top: 1.5em; padding-bottom: 1.5em; position: relative; } dt { position: absolute; left: 0; } dd { margin-left: 150px; height: 2.0em; } .emptydata td { padding: 50px; color: #aeaeae; } /* 2.2 ALBUMS PAGE */ #albums { background-image: url(images/body-repeat-photo.gif); padding: 0px 37px; padding-bottom: 40px; width: 686px; } .view { margin-left: auto; margin-right: auto; width: 686px; text-align: center; } .view .photo-frame { margin-left: auto; margin-right: auto; } .item { padding: 20px 50px; color: #B2B2B2; } .item h4 { margin-bottom: 0.4em; } .nullpanel { padding: 150px; width: auto; text-align: center; } /* 2.3 PHOTOS, DETAILS, ADMIN/DETAILS PAGE */ #photos, #details, #admin-details { background-image: url(images/body-repeat-photo.gif); padding: 0; width: 760px; } .buttonbar { background-image: url(images/photonav-bg.gif); background-repeat: repeat-x; margin-left: auto; margin-right: auto; padding-top: 4px; width: 744px; height: 33px; text-align: center; } .buttonbar-top { background-image: url(images/photonav-top-bg.gif); } #photos .view, #admin-details .view { margin-top: 20px; margin-bottom: 20px; } /* 3 FOOTER */ .footerbg { background-image: url(images/footer-side.gif); background-repeat: repeat-x; width: auto; height: 75px; text-align: center; } .footer { background-image: url(images/footer.gif); background-repeat: no-repeat; margin-left: auto; margin-right: auto; width: 760px; height: 75px; text-align: center; font-size: 10px; } .menub { margin: 12px auto 5px auto; text-transform: uppercase; font-size: 10px; } .menub a:visited { color: #d32525; } /* Inline styles are used because image controls hard code a border property */ .photo_198 { border: 4px solid #FFFFFF; } ================================================ FILE: Samples/PersonalWebSite/App_Themes/White/Default.skin ================================================ ================================================ FILE: Samples/PersonalWebSite/App_Themes/White/Frame.css ================================================ /* Photo Border for All Pages Except the Albums Page */ .photo-frame .topx-- { background-image: url(Images/frame-topx--.gif); background-repeat: no-repeat; width: auto; height: 4px; vertical-align: top; } .photo-frame .top-x- { background-image: url(Images/frame-top-x-.gif); background-repeat: repeat-x; width: auto; height: 4px; } .photo-frame .top--x { background-image: url(Images/frame-top--x.gif); background-repeat: no-repeat; width: auto; height: 4px; vertical-align: top; } .photo-frame .midx-- { background-image: url(Images/frame-midx--.gif); background-repeat: repeat-y; width: 4px; height: auto; } .photo-frame .mid--x { background-image: url(Images/frame-mid--x.gif); background-repeat: repeat-y; width: 4px; height: auto; } .photo-frame .botx-- { background-image: url(Images/frame-botx--.gif); background-repeat: no-repeat; width: 4px; height: 4px; vertical-align: top; } .photo-frame .bot-x- { background-image: url(Images/frame-bot-x-.gif); background-repeat: repeat-x; width: auto; height: 4px; } .photo-frame .bot--x { background-image: url(Images/frame-bot--x.gif); background-repeat: no-repeat; width: 4px; height: 4px; vertical-align: bottom; } /* Photo Border for the Album Page */ .album-frame .topx----, .album-frame .top----x, .album-frame .botx----, .album-frame .bot----x { height: 14px; width: 14px; } .album-frame .top-x--- { background-image: url(images/album-tstretch.gif); background-repeat: repeat-x; text-align: left; height: 14px; width: auto; } .album-frame .top--x-- { background-image: url(images/album-tstretch.gif); background-repeat: repeat-x; height: 14px; width: auto; } .album-frame .top---x- { background-image: url(images/album-tstretch.gif); background-repeat: repeat-x; text-align: right; height: 14px; width: auto; } .album-frame .mtpx---- { background-image: url(images/album-lstretch.gif); background-repeat: repeat-y; vertical-align: top; height: auto; width: 14px; } .album-frame .mtp----x { background-image: url(images/album-rstretch.gif); background-repeat: repeat-y; vertical-align: top; height: auto; width: 14px; } .album-frame .midx---- { background-image: url(images/album-lstretch.gif); background-repeat: repeat-y; height: auto; width: 14px; } .album-frame .mid----x { background-image: url(images/album-rstretch.gif); background-repeat: repeat-y; height: auto; width: 14px; } .album-frame .mbtx---- { background-image: url(images/album-lstretch.gif); background-repeat: repeat-y; vertical-align: bottom; height: auto; width: 14px; } .album-frame .mbt----x { background-image: url(images/album-rstretch.gif); background-repeat: repeat-y; vertical-align: bottom; height: auto; width: 14px; } .album-frame .bot-x--- { background-image: url(images/album-bstretch.gif); background-repeat: repeat-x; text-align: right; height: 14px; width: auto; } .album-frame .bot--x-- { background-image: url(images/album-bstretch.gif); background-repeat: repeat-x; height: 14px; width: auto; } .album-frame .bot---x- { background-image: url(images/album-bstretch.gif); background-repeat: repeat-x; text-align: left; height: 14px; width: auto; } /* Form Items */ .textfield { border: 1px solid #929292; vertical-align: middle; padding: 3px; margin: 2px 0 5px 0; } /* Login View */ .login .label { display:block; } .login .textbox { border: 1px solid #929292; width: 140px; vertical-align: middle; padding: 3px; margin: 2px 0 5px 0; } .login .button { display:block; margin-top:8px; margin-bottom:8px; } /* LIST */ ul { list-style-type: none; list-style-image: url(images/bullet-2.gif); list-style-position: outside; line-height: 2.1em; vertical-align: middle; margin-left: 1.25em; } .link { list-style-image: url(images/bullet-1.gif); } ================================================ FILE: Samples/PersonalWebSite/Default.aspx ================================================ <%@ Page Language="PHP" MasterPageFile="~/Default.master" Title="Your Name Here | Home" CodeFile="Default.aspx.php" Inherits="Default_aspx" %>

Welcome to My Site

This is my personal site. In it you will find lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam.


What's New

Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod.

Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod.


What's Up Lately

Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exercitation consequat. Duis autem veleum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel willum.

Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exercitation consequat. Duis autem veleum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel willum.

Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exercitation consequat. Duis autem veleum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel willum.

Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exercitation consequat. Duis autem veleum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel willum.

Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exercitation consequat. Duis autem veleum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel willum.

================================================ FILE: Samples/PersonalWebSite/Default.aspx.php ================================================ FormView1->PageIndex = $r->Next($this->FormView1->PageCount); } } ?> ================================================ FILE: Samples/PersonalWebSite/Default.master ================================================ <%@ Master Language="PHP" CodeFile="Default.master.php" Inherits="Default_master" %>

Your Name Here

My Personal Site

================================================ FILE: Samples/PersonalWebSite/Default.master.php ================================================ ================================================ FILE: Samples/PersonalWebSite/Details.aspx ================================================ <%@ Page Language="PHP" MasterPageFile="~/Default.master" Title="Your Name Here | Picture Details" CodeFile="Details.aspx.php" Inherits="Details_aspx" %>
    

<%# $this->Server->HtmlEncode($this->Eval("Caption")) %>

&Size=L" class="photo_198" style="border:4px solid white" alt='Photo Number <%# $this->Eval("PhotoID") %>' />

    
================================================ FILE: Samples/PersonalWebSite/Details.aspx.php ================================================ Load->Add(new EventHandler(array($this, "Page_Load"))); } function Page_Load($sender, $e) { $this->MaintainScrollPositionOnPostBack = true; if ($this->IsPostBack) return; $page = Convert::ToInt32($this->Request->QueryString->get_Item("Page")); if ($page >= 0) $this->FormView1->PageIndex = $page; } } ?> ================================================ FILE: Samples/PersonalWebSite/Download.aspx ================================================ <%@ Page Language="PHP" MasterPageFile="" Title="Your Name Here | Download" CodeFile="Download.aspx.php" Inherits="Download_aspx" %> Untitled Page

Right-click and select "Save Picture As.." to download the picture.

" alt='Photo Number <%# $this->Eval("PhotoID") %>' />
================================================ FILE: Samples/PersonalWebSite/Download.aspx.php ================================================ Load->Add(new EventHandler(array($this, "Page_Load"))); } function Page_Load($sender, $e) { $this->MaintainScrollPositionOnPostBack = true; if ($this->IsPostBack) return; $page = Convert::ToInt32($this->Request->QueryString->get_Item("Page")); if ($page >= 0) $this->FormView1->PageIndex = $page; } } ?> ================================================ FILE: Samples/PersonalWebSite/Global.asax ================================================ <%@ Application Language="PHP" %> ================================================ FILE: Samples/PersonalWebSite/Handler.ashx ================================================ <%@ WebHandler Language="PHP" Class="Handler" %>Response->ContentType = "image/jpeg"; $context->Response->Cache->SetCacheability(HttpCacheability::i'Public'); $context->Response->BufferOutput = false; $query = $context->Request->QueryString; $photo_id = $context->Request->QueryString->get_Item("PhotoID"); $album_id = $context->Request->QueryString->get_Item("AlbumID"); $qs_size = $context->Request->QueryString->get_Item("Size"); // Setup the Size Parameter switch ($qs_size) { case "S": $size = PhotoSize::Small; break; case "M": $size = PhotoSize::Medium; break; case "L": $size = PhotoSize::Large; break; default: $size = PhotoSize::Original; break; } // Setup the PhotoID Parameter $id = -1; if (isset($photo_id)) { $id = Convert::ToInt32($photo_id); $stream = PhotoManager::GetPhoto($id, $size); } else { $id = Convert::ToInt32($album_id); $stream = PhotoManager::GetFirstPhoto($id, $size); } // Get the photo from the database, if nothing is returned, get the default "placeholder" photo if ($stream == NULL) $stream = PhotoManager::GetPhotoPlaceholder($size); // Write image stream to the response stream $buffersize = 1024 * 16; $buffer = System:::Array::CreateInstance(Type::GetType("System.Byte"), $buffersize); $count = $stream->Read($buffer, 0, $buffersize); while ($count > 0) { $context->Response->OutputStream->Write($buffer, 0, $count); $count = $stream->Read($buffer, 0, $buffersize); } } } ?> ================================================ FILE: Samples/PersonalWebSite/Links.aspx ================================================ <%@ Page Language="PHP" MasterPageFile="~/Default.master" Title="Your Name Here | Links" CodeFile="Links.aspx.php" Inherits="Links_aspx" %>
================================================ FILE: Samples/PersonalWebSite/Links.aspx.php ================================================ ================================================ FILE: Samples/PersonalWebSite/MyTemplate.vstemplate ================================================ Personal Web Site Starter Kit Starter kit for creating a personal Web site Web Phalanger 1000 true Personal Web Site Starter Kit true Enabled true __TemplateIcon.ico Albums.aspx Albums.aspx.php Details.aspx Details.aspx.php Photos.aspx Photos.aspx.php Albums.aspx Albums.aspx.php Album.php Photo.php PhotoManager.php PhotoSize.php personal-add.sql personal-remove.sql Personal.mdf Default.css Default.skin frame.css album-bstretch.gif album-l1.gif album-l2.gif album-l3.gif album-l4.gif album-lstretch.gif album-mbl.gif album-mbr.gif album-mtl.gif album-mtr.gif album-r1.gif album-r2.gif album-r3.gif album-r4.gif album-rstretch.gif album-tstretch.gif background.gif bullet-1.gif bullet-2.gif button-add.gif button-cancel.gif button-create.gif button-delete.gif button-download.gif button-dwn_res.gif button-edit.gif button-first.jpg button-gallery.jpg button-import.gif button-insert.gif button-last.jpg button-login.gif button-next.jpg button-play.jpg button-prev.jpg button-rename.gif button-save.gif button-tog24.jpg button-tog8.jpg footer.gif frame-bot--x.gif frame-bot-x-.gif frame-botx--.gif frame-mid--x.gif frame-midx--.gif frame-top--x.gif frame-top-x-.gif frame-topx--.gif header.gif photonav.gif spacer.gif Default.css Default.skin Frame.css album-bstretch.gif album-l1.gif album-l2.gif album-l3.gif album-l4.gif album-lstretch.gif album-mbl.gif album-mbr.gif album-mtl.gif album-mtr.gif album-r1.gif album-r2.gif album-r3.gif album-r4.gif album-rstretch.gif album-tstretch.gif background.gif body-repeat-photo.gif body-repeat.gif bullet-1.gif bullet-2.gif button-add.gif button-cancel.gif button-create.gif button-delete.gif button-download.gif button-dwn_res.gif button-edit.gif button-first.gif button-gallery.gif button-import.gif button-insert.gif button-last.gif button-login.gif button-next.gif button-play.gif button-prev.gif button-rename.gif button-save.gif button-tog24.gif button-tog8.gif content-shim-none.gif content-shim-photo.gif content-shim-stretch.gif content-shim.gif footer-side.gif footer.gif frame-bot--x.gif frame-bot-x-.gif frame-botx--.gif frame-mid--x.gif frame-midx--.gif frame-top--x.gif frame-top-x-.gif frame-topx--.gif header.gif photonav-bg.gif photonav-top-bg.gif spacer.gif Default.aspx Default.aspx.php Default.master Default.master.php Details.aspx Details.aspx.php Download.aspx Download.aspx.php Global.asax Handler.ashx placeholder-100.jpg placeholder-200.jpg placeholder-600.jpg resume-photo.jpg Links.aspx Links.aspx.php Photos.aspx Photos.aspx.php Register.aspx Register.aspx.php Resume.aspx Resume.aspx.php _dummy Web.config Web.sitemap Welcome.html ================================================ FILE: Samples/PersonalWebSite/Photos.aspx ================================================ <%@ Page Language="PHP" MasterPageFile="~/Default.master" Title="Your Name Here | Photos" CodeFile="Photos.aspx.php" Inherits="Photos_aspx" %>
&Size=S" class="photo_198" style="border:4px solid white" alt='Thumbnail of Photo Number <%# $this->Eval("PhotoID") %>' />

<%# $this->Server->HtmlEncode($this->Eval("Caption")) %>

There are currently no pictures in this album.
================================================ FILE: Samples/PersonalWebSite/Photos.aspx.php ================================================ Item->ItemType == ListItemType::Footer) { if ($this->DataList1->Items->Count == 0) $this->Panel1->Visible = true; } } } ?> ================================================ FILE: Samples/PersonalWebSite/Register.aspx ================================================ <%@ Page Language="PHP" MasterPageFile="~/Default.master" Title="Your Name Here | Register" CodeFile="Register.aspx.php" Inherits="Register_aspx" %>

Request an Account

Accounts will be activated pending the approval of the Administrator.

================================================ FILE: Samples/PersonalWebSite/Register.aspx.php ================================================ ================================================ FILE: Samples/PersonalWebSite/Resume.aspx ================================================ <%@ Page Language="PHP" MasterPageFile="~/Default.master" Title="Your Name Here | Resume" CodeFile="Resume.aspx.php" Inherits="Resume_aspx" %>
Resume Photo

Your Name Here

resume 1/23/04

555-555-1212 fax
555-555-1212 voice
someone@example.com
www.example.com
City, State  Country

Objective

Lorem ipsum dolor sit amet, consectetuer adipiscing elit.

Experience

1999 - 2004  Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
Sed diam nonummy nibh euismod

  • Ttincidunt ut laoreet dolore magna aliquam erat volutpat.
  • Ut wisi enim ad minim veniam, quis nostrud exercitation consequat.
  • Duis autem veleum iriure dolor in hendrerit in vel willum.

1995 - 1999   Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
Sed diam nonummy nibh euismod

  • Ttincidunt ut laoreet dolore magna aliquam erat volutpat.
  • Ut wisi enim ad minim veniam, quis nostrud exercitation consequat.
  • Duis autem veleum iriure dolor in hendrerit in vel willum.

1993 - 1995   Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
Sed diam nonummy nibh euismod

  • Ttincidunt ut laoreet dolore magna aliquam erat volutpat.
  • Ut wisi enim ad minim veniam, quis nostrud exercitation consequat.
  • Duis autem veleum iriure dolor in hendrerit in vel willum.

1987 - 1993   Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
Sed diam nonummy nibh euismod

  • Ttincidunt ut laoreet dolore magna aliquam erat volutpat.
  • Ut wisi enim ad minim veniam, quis nostrud exercitation consequat.
  • Duis autem veleum iriure dolor in hendrerit in vel willum.

Education

1984 - 1987   Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
Sed diam nonummy nibh euismod

  • Ttincidunt ut laoreet dolore magna aliquam erat volutpat.
  • Ut wisi enim ad minim veniam, quis nostrud exercitation consequat.

Lorem ipsum dolor sit amet, consectetuer adipiscing elit.

================================================ FILE: Samples/PersonalWebSite/Resume.aspx.php ================================================ ================================================ FILE: Samples/PersonalWebSite/Upload/_dummy ================================================ ================================================ FILE: Samples/PersonalWebSite/Web.config ================================================ ================================================ FILE: Samples/PersonalWebSite/Web.sitemap ================================================ ================================================ FILE: Samples/PersonalWebSite/Welcome.html ================================================  Welcome

Personal Web Site Starter Kit

Introduction

Congratulations! You have created your own Personal Web Site, which includes a home page, resume, and photo album. You can press CTRL+F5 to run your site right now.

You can use the site as-is with some small customizations, such as adding your own content. In addition, you can add pages to the site. The following sections explain how to use the Personal Web Site.

  • Creating an Administrative User
  • Managing the Personal Web Site
  • Working with Photo Albums
  • Publishing Your Web Site
  • Further Resources

Creating an Administrative User

The first step you must take is to create an administrative user. The administrative user has permission to upload photos and create albums.

To create an administrative user

  1. Run the site at least once before proceeding. This ensures the initialization of the Membership and Roles databases.
  2. In the Website menu, click ASP.NET Configuration.
  3. Click the Security tab.
  4. Click Create user.
  5. In the Create User box, type a user name, password, and e-mail address for the administrator user. You must also provide a security question and answer that is used to help you recover your password, if necessary.
  6. In the Roles box, select both the Administrators and Friends check boxes to make the user into an administrator and a member of the Friends role.
  7. Click Create User.
  8. Close the Web Site Administration Tool window.

Managing the Personal Web Site

The following sections provide basic information about how to administer the site.

Designating Guest Users as Friends

Visitors to your site can register themselves on your site. You can make registered users into Friends, which gives them permission to view private photo albums.

To give users permission to view private photo albums

  1. In the Website menu, click ASP.NET Configuration.
  2. Click the Security tab.
  3. Under Users, click Manage users.
  4. In the user list, click Edit roles for the guest. (If you do not see the user's name, use the search box.)
  5. Under Roles, select Friends.
  6. Close the Web Administration Tool window.

Working with Photo Albums

The photo album feature allows you to:

  • Create albums that act as collections of photos.
  • Upload photos individually into an album.
  • Bulk upload a collection of photos into an album. This feature is useful for creating an album from a collection of photos, such as your vacation pictures.

To create an album and add photos

  1. Login to the site as an administrator.
  2. In the menu, click Manage.
  3. Under Add New Album, type a name.
  4. If you want everyone to be able to see your photos, select Make this album public. If you leave this check box unselected, only users who are registered as friends can view the album.
  5. Click Add to create the album. 
  6. Under Your Albums, click the blank photo for the new album.
  7. Under Add Photos, type or select the photo file name, type a caption, and click Insert.
  8. Repeat Step 4 for each photo you want to add to the album.

To bulk upload photos into an album

  1. Copy your photos to the Upload folder in the Web site.
  2. In the menu, click Manage.
  3. In the album list, click the photo of the album to use. (Create a new album first, if necessary.)
  4. Click Import. All the photos in the Upload folder are added to the album.

Publishing your Site

When you are ready to share your Web site with others, you can copy it to your Web server. You need to know the File Transfer Protocol (FTP) address of your server, and if required, the user name and password you use.

  1. In the Website menu, click Copy Web Site. The Copy Web Site tool displays the files from your Web site under Source Web Site.
  2. In the Connect to box, click Connect to ....
  3. In the Open Web Site dialog box, click the FTP Sites tab.
  4. Type the FTP address of your server, and if required, the user name and password that your hosting site has provided. The FTP URL usually has a format like this:
    ftp://ftp.servername/foldername
  5. Click Open. The files on the Web server are displayed under Remote Web Site.
    Note: If you have trouble connecting to the server, contact the server administrator.
  6. In the Move Files list, click All source files to remote Web site.
  7. Click the Copy Web Site button. The files from your Personal Web Site are copied to the server.

Further Resources

The information in this page is only an overview of the Personal Web site. For more information, see the topic Personal Web Site Starter Kit in the documentation.

================================================ FILE: Samples/PersonalWebSite.sln ================================================  Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 Project("{E24C65DC-7377-472B-9ABA-BC803B73C61A}") = "PersonalWebSite", "PersonalWebSite", "{97E6C0D3-CE09-4300-8725-35BF117EB152}" ProjectSection(WebsiteProperties) = preProject SccProjectName = "SAK" SccAuxPath = "SAK" SccLocalPath = "SAK" SccProvider = "SAK" TargetFrameworkMoniker = ".NETFramework,Version%3Dv2.0" Debug.AspNetCompiler.VirtualPath = "/PersonalWebSite" Debug.AspNetCompiler.PhysicalPath = "PersonalWebSite\" Debug.AspNetCompiler.TargetPath = "PrecompiledWeb\PersonalWebSite\" Debug.AspNetCompiler.Updateable = "true" Debug.AspNetCompiler.ForceOverwrite = "true" Debug.AspNetCompiler.FixedNames = "false" Debug.AspNetCompiler.Debug = "True" Release.AspNetCompiler.VirtualPath = "/PersonalWebSite" Release.AspNetCompiler.PhysicalPath = "PersonalWebSite\" Release.AspNetCompiler.TargetPath = "PrecompiledWeb\PersonalWebSite\" Release.AspNetCompiler.Updateable = "true" Release.AspNetCompiler.ForceOverwrite = "true" Release.AspNetCompiler.FixedNames = "false" Release.AspNetCompiler.Debug = "False" VWDPort = "12199" EndProjectSection EndProject Global GlobalSection(TeamFoundationVersionControl) = preSolution SccNumberOfProjects = 2 SccEnterpriseProvider = {4CA58AB2-18FA-4F8D-95D4-32DDF27D184C} SccTeamFoundationServer = https://tfs.codeplex.com/tfs/tfs01 SccLocalPath0 = . SccWebProject1 = true SccProjectUniqueName1 = PersonalWebSite SccProjectName1 = PersonalWebSite SccLocalPath1 = PersonalWebSite SccProjectEnlistmentChoice1 = 2 EndGlobalSection GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|.NET = Debug|.NET EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {97E6C0D3-CE09-4300-8725-35BF117EB152}.Debug|.NET.ActiveCfg = Debug|.NET {97E6C0D3-CE09-4300-8725-35BF117EB152}.Debug|.NET.Build.0 = Debug|.NET EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal ================================================ FILE: Samples/PersonalWebSite.vssscc ================================================ "" { "FILE_VERSION" = "9237" "ENLISTMENT_CHOICE" = "NEVER" "PROJECT_FILE_RELATIVE_PATH" = "" "NUMBER_OF_EXCLUDED_FILES" = "0" "ORIGINAL_PROJECT_FILE_PATH" = "" "NUMBER_OF_NESTED_PROJECTS" = "0" "SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROJECT" } ================================================ FILE: Samples/RegEditPHP/RegEditPHP/CLRException.php ================================================ Wraps any as Phalanger ///Purpose of having such class is actual inability of Phalanger to throw Clr exceptions (though they can be caught) final class CLRException extends Exception{ /// being encapsulated private $ex; ///Creates new instance of the class ///The to wrap function __construct(System:::Exception $ex){ parent::__construct(); $this->ex = $ex; $this->message = $ex->Message; } ///Gets exception wrapped by this instance ///Exception wrapped by this instance public function GetException(){ return $this->ex; } ///PHP magic method to get dynamic property ///Defined propertiesException () public function __get(string $name){ //Note this implementation is not very correct because there is no __set (and even __isset and __unset) method. //So, you are allowed set/unset $Exception byt it does not get set/unset. //isset return false (unless you've set $Exception) but __get returns non-null. if($name=="Exception") return $this->ex; return null; } } } ?> ================================================ FILE: Samples/RegEditPHP/RegEditPHP/InputBox.cs.resx ================================================ text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 63, 13 Zadejte text &Storno Zadávač ================================================ FILE: Samples/RegEditPHP/RegEditPHP/InputBox.hr.resx ================================================ text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 69, 13 Unosite tekst &U redu &Odustani UnosOkvir ================================================ FILE: Samples/RegEditPHP/RegEditPHP/InputBox.php ================================================ InitializeComponent(); $this->Init(); } private function InitializeComponent() { $resources = new System:::ComponentModel:::ComponentResourceManager(CLRTypeOf InputBox ); $this->tlpMain = new System:::Windows:::Forms:::TableLayoutPanel(); $this->lblPrompt = new System:::Windows:::Forms:::Label(); $this->txtText = new System:::Windows:::Forms:::TextBox(); $this->cmdOK = new System:::Windows:::Forms:::Button(); $this->cmdCancel = new System:::Windows:::Forms:::Button(); $this->tlpMain->SuspendLayout(); $this->SuspendLayout(); // // tlpMain // $this->tlpMain->AccessibleDescription = NULL; $this->tlpMain->AccessibleName = NULL; $resources->ApplyResources($this->tlpMain, "tlpMain"); $this->tlpMain->BackgroundImage = NULL; $this->tlpMain->Controls->Add($this->lblPrompt, 0, 0); $this->tlpMain->Controls->Add($this->txtText, 0, 1); $this->tlpMain->Controls->Add($this->cmdOK, 0, 2); $this->tlpMain->Controls->Add($this->cmdCancel, 1, 2); $this->tlpMain->Font = NULL; $this->tlpMain->Name = "tlpMain"; // // lblPrompt // $this->lblPrompt->AccessibleDescription = NULL; $this->lblPrompt->AccessibleName = NULL; $resources->ApplyResources($this->lblPrompt, "lblPrompt"); $this->tlpMain->SetColumnSpan($this->lblPrompt, 2); $this->lblPrompt->Font = NULL; $this->lblPrompt->Name = "lblPrompt"; // // txtText // $this->txtText->AccessibleDescription = NULL; $this->txtText->AccessibleName = NULL; $resources->ApplyResources($this->txtText, "txtText"); $this->txtText->BackgroundImage = NULL; $this->tlpMain->SetColumnSpan($this->txtText, 2); $this->txtText->Font = NULL; $this->txtText->Name = "txtText"; // // cmdOK // $this->cmdOK->AccessibleDescription = NULL; $this->cmdOK->AccessibleName = NULL; $resources->ApplyResources($this->cmdOK, "cmdOK"); $this->cmdOK->BackgroundImage = NULL; $this->cmdOK->Font = NULL; $this->cmdOK->Name = "cmdOK"; $this->cmdOK->UseVisualStyleBackColor = true; $this->cmdOK->Click->Add(new System:::EventHandler(array($this, "cmdOK_Click"))); // // cmdCancel // $this->cmdCancel->AccessibleDescription = NULL; $this->cmdCancel->AccessibleName = NULL; $resources->ApplyResources($this->cmdCancel, "cmdCancel"); $this->cmdCancel->BackgroundImage = NULL; $this->cmdCancel->DialogResult = System:::Windows:::Forms:::DialogResult::Cancel; $this->cmdCancel->Font = NULL; $this->cmdCancel->Name = "cmdCancel"; $this->cmdCancel->UseVisualStyleBackColor = true; $this->cmdCancel->Click->Add(new System:::EventHandler(array($this, "cmdCancel_Click"))); // // InputBox // $this->AcceptButton = $this->cmdOK; $this->AccessibleDescription = NULL; $this->AccessibleName = NULL; $resources->ApplyResources($this, "\$this"); $this->AutoScaleMode = System:::Windows:::Forms:::AutoScaleMode::Font; $this->BackgroundImage = NULL; $this->CancelButton = $this->cmdCancel; $this->Controls->Add($this->tlpMain); $this->Font = NULL; $this->FormBorderStyle = System:::Windows:::Forms:::FormBorderStyle::FixedDialog; $this->Icon = NULL; $this->MaximizeBox = false; $this->MinimizeBox = false; $this->Name = "InputBox"; $this->ShowIcon = false; $this->ShowInTaskbar = false; $this->tlpMain->ResumeLayout(false); $this->tlpMain->PerformLayout(); $this->ResumeLayout(false); } } } ?> ================================================ FILE: Samples/RegEditPHP/RegEditPHP/InputBox.resx ================================================ text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 0 &Cancel 0 Fill tlpMain 75, 23 1 0, 0 Enter text InputBox 65, 89 411, 122 System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 405, 20 <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="lblPrompt" Row="0" RowSpan="1" Column="0" ColumnSpan="2" /><Control Name="txtText" Row="1" RowSpan="1" Column="0" ColumnSpan="2" /><Control Name="cmdOK" Row="2" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="cmdCancel" Row="2" RowSpan="1" Column="1" ColumnSpan="1" /></Controls><Columns Styles="Percent,50,Percent,50" /><Rows Styles="Percent,33,33333,Percent,33,33333,Percent,33,33333" /></TableLayoutSettings> txtText 1 System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 0 tlpMain 52, 13 3, 50 lblPrompt None Left tlpMain tlpMain 411, 122 tlpMain cmdCancel 0 3, 13 2 Left, Right 75, 23 $this System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 270, 89 &OK System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 3 2 3 3 6, 13 True None InputBox cmdOK System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 2 True ================================================ FILE: Samples/RegEditPHP/RegEditPHP/InputBox.user.php ================================================ This is simple string input box partial class InputBox extends System:::Windows:::Forms:::Form{ //Called by __construct (I've written the call there) private function Init(){ $this->DialogResult=DialogResult::Cancel; } //OK private function cmdOK_Click(System:::Object $sender, System:::EventArgs $e) { $this->DialogResult = DialogResult::OK; } //Cancel private function cmdCancel_Click(System:::Object $sender, System:::EventArgs $e) { $this->DialogResult = DialogResult::Cancel; } public static function GetInput(string $Promtp, string $Title, string $DefaultValue=""){ $form=new InputBox();//Create instance //Initialize it $form->Text = $Title; $form->lblPrompt->Text=$Promtp; $form->txtText->Text=$DefaultValue; $form->txtText->SelectAll(); $form->ShowDialog();//Show it //Depending on result if($form->DialogResult == DialogResult::OK) return $form->Value;//Return value else return null;//Or null } //PHP magic method for properties follows: public function __get(string $name){ switch($name): case "Prompt": return $this->lblPrompt->Text; case "Value": return $this->txtText->Text; default: return $vars[$name]; endswitch; } public function __set(string $name,$value){ switch($name): case "Prompt": return $this->lblPrompt->Text=$value; case "Value": return $this->txtText->Text=$value; default: return $vars[$name]=$value; endswitch; } public function __isset(string $name){ switch($name): case "Prompt": case "Value": return true; default: isset($vars[$name]); endswitch; } public function __unset(string $name){ switch($name): case "Prompt": case "Value": throw new CLRException(new System:::InvalidOperationException(Program::$Resources->e_Unset($name))); default: unset($vars[$name]); endswitch; } private $vars; } } ?> ================================================ FILE: Samples/RegEditPHP/RegEditPHP/LanguageSelector.cs.resx ================================================ text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 192, 3 48, 23 &Storno 17, 7 34, 13 Jazyk 57, 3 229, 21 iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAADuFJREFUaEPtWXlY VFeeLXcRN9pdI4gLMWISx7XTMaRFJ+ooGQ2tYmMyY/IxrRGVuCZoFjVxzzJREVA2BUoUEAoEigKkoChB dlxwwchaZRVVQDVbsejp8x6YTuabHjtKO/1H6vvO9x5UvXvP79z7O/d375NIfv38qsCvCnS5Al6nfWwi Ii8GxMTEFPj4+Ppu3bptJjvpQ3Tr8s66ukF/P//eodLQQ3Fx8UhKSkZk5MVHO3d+/D37GUv07ur+urw9 H59TbufOnWtVKlUMQI20NBX8/QNaXF3XbGdnQ4nuXd5pVzXo5eX1gp+fX4tKpUZcXAxSUg5CqUyBQpEM X99TTTY2495gXwO6qr8ub8fX1zeO8/5hcko2oqO24UGlBFEXt0ClKsKZM2fN7u4bQ9jpeKJnl3f+rA1S /dlU33z1ai58fIJQWvIaAAkaaqYjJCSYI6GCn59/68yZM53Zl9U/XUKfPn36rlKpRFR0MuTxW4DWXmg3 S/CISIxzQ1b2XdCZ2vfvP3Cd5KcQfZ9VtC573sfHZ3NISEhLbm4RAgK8UFs9lQFI0NbUA+1NEpjrhiMy /ASuZl/n94Fty5cv/4Sdj/ynSOhTp071p/p/zs3Ng0yWgqtX1gDtHeRbG3ujtd4C7Q0SpMQvR0FhKZKT Lz86duy4nuRnEJZdpuLTNsTE9Y2IiDTnF9xCSPC3MJtGi6q3NliQfD+0mvqLaK4eDVnUcRQWlSAwMKjl /fc/OMk+rYkeT9v3Mz938uTJSYJt3rx5CzExChTk/DvJ90F7I1VvtCT6d2IAHtZb4nKsA27fLkVWVjZO nTrdNHbs2PkkMeiZiTxtAxRfnZSU9DA/nwl64VOgeQjqdP2gK+9PDPgJBqK+eiBa9SMQF/0p7tzVQCo9 1+Lp6Sln35OIXk/L4amfo/rOAQEBzffulSP8QghqNHPRVGuB775xwqpVroQLVq5cJeK999bB38cRjZXD YCpzgCw6Ateu3xJW6NY5c+a4kMSQ52qrTNweTNyqwsIipKsKkZm+jepbosEwCB4ebvD03EPsxscf78KO HZ7YsnUPDn65BNV3xsJcYQ35xW0oq6hBQkJi+4EDB2+QvP1ztVVOnU/Dw8NbNBojV9wA1Oun4VH9QDRU /wbbtr5H0ruJHdi+fTu2bNmCTZt24eC+BdAX28BcOQnG4mlIkAVBozUgKOhM+7Jlyz0ZwKjnYqvHjh0b QvUbtdoHyMm5gaKc90l+MNpqR6Kxeih2bnel4lSdxD08PLBx40a4/dcWHPnKEcbb49FYao/6O9ZIuvCf MBhbQPt9dOKEl8HCwmL2c7FVqh+mUCiajcZmJMT6oNkwCa3GEWgz2qBRPwyeO1fC3X2rSHzdunVwc3OD i+ufcPQrB5huT0RDyRQGYAd9nj2SZH6ob2xDaKi05cMPN5xhADbEP65OOnHixHTaZmt9g5nq56M4dyXa a0bArB+HlurxaKLL7PpkOT74gKqT+Nq1a7FmzRo4LVuDI3t+S+ITGcQU1BVPRm3RaMQHLYDJZEZlpVao k5pfeOGFtxjA4Kd2lic9yKlzKy8v/9Fd2uBV9fdoNYyHWWeDZu1EtOjsGMBIfO65GK6ubiJxFxcXODuv wPy3nHHos5lo4AjU3ZyMmqKJqC2cAK16JOLP7YW5FYiNvdS2a9fuVHKwI7p+4+Pt7b02ODjY3NLyCCnJ MairXIAW/ViSt0OzZjLMmilo0I3EF7v+Fc4r3sU777wDJycnLFmyBPMcnXD0i2kw3bBFTeFEGPPHw5hn g5rcYUgPsccPd2+jztQo1klvvOHwHgMQNj5dt/0U6h2irqysHDdulqIgaycXJSqvoepVL6GpYgqaiUbt SOz1fBOLF6/AwoULRSxatAiO851wbP801BWRdME4GHOtYcweDWPWSOiU/RATtAFNZnDfkNF+9OjXP5D8 y4TFk2bE3/09E9dbJpO11Ne3Ii72LOorfkfFJ6CpkqTLiTJ70V0aqxjAx7/F3DcWw8HBAfPmzRODeGvh 2/A99DJMBaOp+hgYskbBcGUEqjOGEQNQEm2FRFkIGpsfChuftmXLlu0mudFdYqvCNlGwTYOhBlevFuD6 1ffRqp1A4i+ROKfNfdriPXu6iz0TdAL2bp+GWbMdMXfuXDg6OmLR4sVYstQZ/kemwJQ/AsbMkahWk7hq CPTpg6BXDoA2kTu34wtRW2dmsXftkZfXya6zVaqfkJqq5KJVC7nsIJqrXiF5OzRQ9Yb7L6O+ZCpMd0ju 1kuov2WLzzwmYOiICbC2tsbkyZMxY8YsvD7XEb5f2kCf1Bu61P7QpvaDNtkCWgWR2Ae6xF4oDZdAFrIP tfVtQp3UShsWtp/jnslWqb4D6x2qb8KlWBmqS5w51yei/n6Hl9fesIGxYBSqmYzV2VbQqSyx23042KkI KysrTLJ7EXNec4DvF8OhjeuGKnl3VCXwKtzHEjIimoiSIOnkv6C4+AfcLflBsNUWOzu7pZ22+ssTWqh3 WPKWZmfnPMzMuoa0xM9JmnP42jAY8gZDn00lM6lkBkHi2nRWoSoL7N86TCTft29fcRSEEVjqtAxn9w8V A9DEdxKPEYhLfiRfdVGCeyESRHpvRpXOxPI8ts3Tc1ca23rxqWyVtvlRaGhoc3m5FpEXAqEtmApDTnfo syygI3HdFQaQQaiINEto6CZ6BvD9riEMoBsGDhwIKshccMBq1zU4d8AK2ksCeZKWCcQJqi4Qr4joRnRH ZQT3z0eHIydLzVEoFWy1nbm0lgEM+0W2KtQ7HIGG69dvQJGSCVWcK2ryepC8ZQdxdQdxTZqADvIapQWT si8C9g1iAN0xYOBgvPjiZLqRI2uhdQyAoyQE8Jg8iVdGEiL5bigP74GK8z1QGixB2LeuuFeqR2Ki4uHX X39zn+Rf+UW2ysQNoW2ab968B2nwYWizx6A6kwnYqbrmMXklyTMhNakW0KT0wQNlXyR69SH54bC2nYDZ c17nYuaMd99djYuHukMrzHlBeYE81X6svEC8PIw414vojpun++NCkBfulJQJ2882ruoHGcAY4snbT6He oW2S/B1ER8ci69Kb9O1e4nT5kfhj1UXiRHJvaOgwWkVPlDMhi6VE6GN0F+/LSLgyktPkMflwQfXuKBfI n+uBMimdSNobpaF9UHpWAulXr3PRvIv0dDVOnvQ2MadeYwBPPtXj1LlG24RcoUJ8+GYq35Go4nRRCviJ 6kkkT+IaRS9oEnugKr4HdAlUWt4TBcE9EfOtJYqCu0HPxNVS+Y4pQ+VpmeVhJC+q3pPkBZB8CMkH90FZ cG/cOSVBiNdOXCsuFarVdnd3dykDsP0/bZXnO0sDAwP/XFB4E0GBPrifNpmJSXIieYF4J3l6uCapD6oU vWmLvWiLPWmLDIAuUy2X4PiOfnjZfjxeeXUm3l7qiJB9Q6HpnPMV5zvJU/UO8lQ+5K/khQBKgy1QxlG4 dHQaUi+rkJGRSVv1e2yr//upHpXvTejV6iu4GCVHnHQNDBl96DCPlec1hQEkEwqOiIIBJDKAeAYQ3xGA hsrLv++JwYMHo/+AobC3n4rfOy7C6tUuSPMaQOWFKcNpFibMdSotteCUIUL6EZY/Q3loP5T4SRB8dC1y Cu4gPCKyfc+evdkcgcmE8K7h5x+qv0cqlTZmXMmHn/cX0GSMhz5jEHRp9O+0IdAqhzAAWmHSYGIQAxjI acMyIIGOFE+HiedU44p62GMoXagfxowZA27Ywe0i3v0PN0gP2KEqsienkBDIQAYyiIEMZiBWfxMVYZaQ Hx6DhCgp1Fl5wiFAm4PDm25kPvxntirUO1S/SX0liwexoVCGz0MNq0W92pZBEOm20KWPgz7NhtUjkWrN cmAsdMljoEsaA71ilAhdEivL70bBasgw2NpOxIIFC0h+LTZu9kDU0YnQx46mjVqjMtqGyTyOsEXF/0DH /zsRZYOqCCsE75sPlTqXpiJ7yGq1lORf/Zmt0jZl0dHR5qSUKwjy3oTa/FdZr8+CMWc2DNlEFpE5ixXk zA5kzCCmwyhANQ2G9A7UpPO5tFfxyZ/sMX36LBZxy7DBfSOO7FqEIulLMCTPZN0zCzr5bCb634ZOLvyG 4G8NSTOQ5j0FsWHeSM/IFvcMfFly+Edb9TrpZcsEac7IyIK/nw9y5MvReOvfUHfjbdRdE+DEOt4JpsJO FPCav5SlMcFrfd4SmATkdqCB97WZi5HgNx9eX85HxLF5KJZxRDOWokb9NoPuhGoZDJ0w8iqi87saXmvU TqjthClzEUIPL0YyX5TEx8uFlyUNzLOOlyV+p/0SuOIhXq5EfMQe1N905q5pFeHCzQev+S4cDd7nreJG hH/n/BQrOdUErBBhzFrBEeJ95krU8b5a9Q6nnzNHayXvV/FegIsInYC0zmv6av5PgAv3By78/WoY1Oy3 E7WZLqxenRDlvxcpSjXOng1u27Rp80UGMF7ClS6GOyHxNVBaagLO+x+A9MSnCGMiCzjvswfhp/bh4ul9 iPL7CtEBByALPIhLZ44gPvhrJIR+g8Rz30Jx/jselRxDyoXjxAlcjjgBZaQXUgnh/jKP14Xvkvkbxfn/ Fp+R81mhjRi2JQs8xLYPkuR+9vWl2OcF9n1e4OH1OaRen0GZFM/T7VTI5Yk8ttmqZgC/k/DwKYwjUJmc nILkFCVSUjOQmnZFhDI9U5x3ggNk8+w/n+vDNa7Qt+7cR8n9Sp6uaVGlNUJvqENNXSNMDS3cVbWJm/TW Rzxl5zsaAW28b2kDt43tMDW2oNbUxGdM0OiMKK/Usa0K3L5bykXrLvsoFvvKzM5n4uaIHB7zSU1NQ2pq KsLCzjfy6FLBAN6S8Chj6oYN7kl8f1VJ6Inqn4Ibi+qNGzdVb9q0Sc9h02/e7KH38PhI/9FHW0RQCRF8 F6zftk3Adj1F6cQOXneI/xO+5+90fEbH50WwLR3bfMC2H7CfB+z3Abk84BmRiPXrP9SuX79eu25dBzr+ /lC7evUfC4cPH36AAcwVFgNhURAOlN4klhMriJX/AAjt/j34A3/3JAg854k50LkgCEH8hhDOJ4Wq73lD 2MD/Egg8hRPtrju5EJT4//j8BRF/EKYjOWqaAAAAAElFTkSuQmCC 3, 43 57, 40 201, 26 Varování: Po potvrzení změny jazyka se aplikace restartuje. Výběr jazyka ================================================ FILE: Samples/RegEditPHP/RegEditPHP/LanguageSelector.hr.resx ================================================ text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 47, 3 49, 23 &U redu 187, 3 59, 23 &Odustani 20, 7 31, 13 Jezik 57, 3 229, 21 iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAADuFJREFUaEPtWXlY VFeeLXcRN9pdI4gLMWISx7XTMaRFJ+ooGQ2tYmMyY/IxrRGVuCZoFjVxzzJREVA2BUoUEAoEigKkoChB dlxwwchaZRVVQDVbsejp8x6YTuabHjtKO/1H6vvO9x5UvXvP79z7O/d375NIfv38qsCvCnS5Al6nfWwi Ii8GxMTEFPj4+Ppu3bptJjvpQ3Tr8s66ukF/P//eodLQQ3Fx8UhKSkZk5MVHO3d+/D37GUv07ur+urw9 H59TbufOnWtVKlUMQI20NBX8/QNaXF3XbGdnQ4nuXd5pVzXo5eX1gp+fX4tKpUZcXAxSUg5CqUyBQpEM X99TTTY2495gXwO6qr8ub8fX1zeO8/5hcko2oqO24UGlBFEXt0ClKsKZM2fN7u4bQ9jpeKJnl3f+rA1S /dlU33z1ai58fIJQWvIaAAkaaqYjJCSYI6GCn59/68yZM53Zl9U/XUKfPn36rlKpRFR0MuTxW4DWXmg3 S/CISIxzQ1b2XdCZ2vfvP3Cd5KcQfZ9VtC573sfHZ3NISEhLbm4RAgK8UFs9lQFI0NbUA+1NEpjrhiMy /ASuZl/n94Fty5cv/4Sdj/ynSOhTp071p/p/zs3Ng0yWgqtX1gDtHeRbG3ujtd4C7Q0SpMQvR0FhKZKT Lz86duy4nuRnEJZdpuLTNsTE9Y2IiDTnF9xCSPC3MJtGi6q3NliQfD+0mvqLaK4eDVnUcRQWlSAwMKjl /fc/OMk+rYkeT9v3Mz938uTJSYJt3rx5CzExChTk/DvJ90F7I1VvtCT6d2IAHtZb4nKsA27fLkVWVjZO nTrdNHbs2PkkMeiZiTxtAxRfnZSU9DA/nwl64VOgeQjqdP2gK+9PDPgJBqK+eiBa9SMQF/0p7tzVQCo9 1+Lp6Sln35OIXk/L4amfo/rOAQEBzffulSP8QghqNHPRVGuB775xwqpVroQLVq5cJeK999bB38cRjZXD YCpzgCw6Ateu3xJW6NY5c+a4kMSQ52qrTNweTNyqwsIipKsKkZm+jepbosEwCB4ebvD03EPsxscf78KO HZ7YsnUPDn65BNV3xsJcYQ35xW0oq6hBQkJi+4EDB2+QvP1ztVVOnU/Dw8NbNBojV9wA1Oun4VH9QDRU /wbbtr5H0ruJHdi+fTu2bNmCTZt24eC+BdAX28BcOQnG4mlIkAVBozUgKOhM+7Jlyz0ZwKjnYqvHjh0b QvUbtdoHyMm5gaKc90l+MNpqR6Kxeih2bnel4lSdxD08PLBx40a4/dcWHPnKEcbb49FYao/6O9ZIuvCf MBhbQPt9dOKEl8HCwmL2c7FVqh+mUCiajcZmJMT6oNkwCa3GEWgz2qBRPwyeO1fC3X2rSHzdunVwc3OD i+ufcPQrB5huT0RDyRQGYAd9nj2SZH6ob2xDaKi05cMPN5xhADbEP65OOnHixHTaZmt9g5nq56M4dyXa a0bArB+HlurxaKLL7PpkOT74gKqT+Nq1a7FmzRo4LVuDI3t+S+ITGcQU1BVPRm3RaMQHLYDJZEZlpVao k5pfeOGFtxjA4Kd2lic9yKlzKy8v/9Fd2uBV9fdoNYyHWWeDZu1EtOjsGMBIfO65GK6ubiJxFxcXODuv wPy3nHHos5lo4AjU3ZyMmqKJqC2cAK16JOLP7YW5FYiNvdS2a9fuVHKwI7p+4+Pt7b02ODjY3NLyCCnJ MairXIAW/ViSt0OzZjLMmilo0I3EF7v+Fc4r3sU777wDJycnLFmyBPMcnXD0i2kw3bBFTeFEGPPHw5hn g5rcYUgPsccPd2+jztQo1klvvOHwHgMQNj5dt/0U6h2irqysHDdulqIgaycXJSqvoepVL6GpYgqaiUbt SOz1fBOLF6/AwoULRSxatAiO851wbP801BWRdME4GHOtYcweDWPWSOiU/RATtAFNZnDfkNF+9OjXP5D8 y4TFk2bE3/09E9dbJpO11Ne3Ii72LOorfkfFJ6CpkqTLiTJ70V0aqxjAx7/F3DcWw8HBAfPmzRODeGvh 2/A99DJMBaOp+hgYskbBcGUEqjOGEQNQEm2FRFkIGpsfChuftmXLlu0mudFdYqvCNlGwTYOhBlevFuD6 1ffRqp1A4i+ROKfNfdriPXu6iz0TdAL2bp+GWbMdMXfuXDg6OmLR4sVYstQZ/kemwJQ/AsbMkahWk7hq CPTpg6BXDoA2kTu34wtRW2dmsXftkZfXya6zVaqfkJqq5KJVC7nsIJqrXiF5OzRQ9Yb7L6O+ZCpMd0ju 1kuov2WLzzwmYOiICbC2tsbkyZMxY8YsvD7XEb5f2kCf1Bu61P7QpvaDNtkCWgWR2Ae6xF4oDZdAFrIP tfVtQp3UShsWtp/jnslWqb4D6x2qb8KlWBmqS5w51yei/n6Hl9fesIGxYBSqmYzV2VbQqSyx23042KkI KysrTLJ7EXNec4DvF8OhjeuGKnl3VCXwKtzHEjIimoiSIOnkv6C4+AfcLflBsNUWOzu7pZ22+ssTWqh3 WPKWZmfnPMzMuoa0xM9JmnP42jAY8gZDn00lM6lkBkHi2nRWoSoL7N86TCTft29fcRSEEVjqtAxn9w8V A9DEdxKPEYhLfiRfdVGCeyESRHpvRpXOxPI8ts3Tc1ca23rxqWyVtvlRaGhoc3m5FpEXAqEtmApDTnfo syygI3HdFQaQQaiINEto6CZ6BvD9riEMoBsGDhwIKshccMBq1zU4d8AK2ksCeZKWCcQJqi4Qr4joRnRH ZQT3z0eHIydLzVEoFWy1nbm0lgEM+0W2KtQ7HIGG69dvQJGSCVWcK2ryepC8ZQdxdQdxTZqADvIapQWT si8C9g1iAN0xYOBgvPjiZLqRI2uhdQyAoyQE8Jg8iVdGEiL5bigP74GK8z1QGixB2LeuuFeqR2Ki4uHX X39zn+Rf+UW2ysQNoW2ab968B2nwYWizx6A6kwnYqbrmMXklyTMhNakW0KT0wQNlXyR69SH54bC2nYDZ c17nYuaMd99djYuHukMrzHlBeYE81X6svEC8PIw414vojpun++NCkBfulJQJ2882ruoHGcAY4snbT6He oW2S/B1ER8ci69Kb9O1e4nT5kfhj1UXiRHJvaOgwWkVPlDMhi6VE6GN0F+/LSLgyktPkMflwQfXuKBfI n+uBMimdSNobpaF9UHpWAulXr3PRvIv0dDVOnvQ2MadeYwBPPtXj1LlG24RcoUJ8+GYq35Go4nRRCviJ 6kkkT+IaRS9oEnugKr4HdAlUWt4TBcE9EfOtJYqCu0HPxNVS+Y4pQ+VpmeVhJC+q3pPkBZB8CMkH90FZ cG/cOSVBiNdOXCsuFarVdnd3dykDsP0/bZXnO0sDAwP/XFB4E0GBPrifNpmJSXIieYF4J3l6uCapD6oU vWmLvWiLPWmLDIAuUy2X4PiOfnjZfjxeeXUm3l7qiJB9Q6HpnPMV5zvJU/UO8lQ+5K/khQBKgy1QxlG4 dHQaUi+rkJGRSVv1e2yr//upHpXvTejV6iu4GCVHnHQNDBl96DCPlec1hQEkEwqOiIIBJDKAeAYQ3xGA hsrLv++JwYMHo/+AobC3n4rfOy7C6tUuSPMaQOWFKcNpFibMdSotteCUIUL6EZY/Q3loP5T4SRB8dC1y Cu4gPCKyfc+evdkcgcmE8K7h5x+qv0cqlTZmXMmHn/cX0GSMhz5jEHRp9O+0IdAqhzAAWmHSYGIQAxjI acMyIIGOFE+HiedU44p62GMoXagfxowZA27Ywe0i3v0PN0gP2KEqsienkBDIQAYyiIEMZiBWfxMVYZaQ Hx6DhCgp1Fl5wiFAm4PDm25kPvxntirUO1S/SX0liwexoVCGz0MNq0W92pZBEOm20KWPgz7NhtUjkWrN cmAsdMljoEsaA71ilAhdEivL70bBasgw2NpOxIIFC0h+LTZu9kDU0YnQx46mjVqjMtqGyTyOsEXF/0DH /zsRZYOqCCsE75sPlTqXpiJ7yGq1lORf/Zmt0jZl0dHR5qSUKwjy3oTa/FdZr8+CMWc2DNlEFpE5ixXk zA5kzCCmwyhANQ2G9A7UpPO5tFfxyZ/sMX36LBZxy7DBfSOO7FqEIulLMCTPZN0zCzr5bCb634ZOLvyG 4G8NSTOQ5j0FsWHeSM/IFvcMfFly+Edb9TrpZcsEac7IyIK/nw9y5MvReOvfUHfjbdRdE+DEOt4JpsJO FPCav5SlMcFrfd4SmATkdqCB97WZi5HgNx9eX85HxLF5KJZxRDOWokb9NoPuhGoZDJ0w8iqi87saXmvU TqjthClzEUIPL0YyX5TEx8uFlyUNzLOOlyV+p/0SuOIhXq5EfMQe1N905q5pFeHCzQev+S4cDd7nreJG hH/n/BQrOdUErBBhzFrBEeJ95krU8b5a9Q6nnzNHayXvV/FegIsInYC0zmv6av5PgAv3By78/WoY1Oy3 E7WZLqxenRDlvxcpSjXOng1u27Rp80UGMF7ClS6GOyHxNVBaagLO+x+A9MSnCGMiCzjvswfhp/bh4ul9 iPL7CtEBByALPIhLZ44gPvhrJIR+g8Rz30Jx/jselRxDyoXjxAlcjjgBZaQXUgnh/jKP14Xvkvkbxfn/ Fp+R81mhjRi2JQs8xLYPkuR+9vWl2OcF9n1e4OH1OaRen0GZFM/T7VTI5Yk8ttmqZgC/k/DwKYwjUJmc nILkFCVSUjOQmnZFhDI9U5x3ggNk8+w/n+vDNa7Qt+7cR8n9Sp6uaVGlNUJvqENNXSNMDS3cVbWJm/TW Rzxl5zsaAW28b2kDt43tMDW2oNbUxGdM0OiMKK/Usa0K3L5bykXrLvsoFvvKzM5n4uaIHB7zSU1NQ2pq KsLCzjfy6FLBAN6S8Chj6oYN7kl8f1VJ6Inqn4Ibi+qNGzdVb9q0Sc9h02/e7KH38PhI/9FHW0RQCRF8 F6zftk3Adj1F6cQOXneI/xO+5+90fEbH50WwLR3bfMC2H7CfB+z3Abk84BmRiPXrP9SuX79eu25dBzr+ /lC7evUfC4cPH36AAcwVFgNhURAOlN4klhMriJX/AAjt/j34A3/3JAg854k50LkgCEH8hhDOJ4Wq73lD 2MD/Egg8hRPtrju5EJT4//j8BRF/EKYjOWqaAAAAAElFTkSuQmCC 3, 43 57, 40 210, 26 Upozorenje: Ukoliko promijena jezika je potvrđena, aplikacije je ponovo pokrenuta. Odabir jezika ================================================ FILE: Samples/RegEditPHP/RegEditPHP/LanguageSelector.php ================================================ InitializeComponent(); $this->Init(); } private function InitializeComponent() { $resources = new System:::ComponentModel:::ComponentResourceManager(CLRTypeOf LanguageSelector ); $this->tlpMain = new System:::Windows:::Forms:::TableLayoutPanel(); $this->tlpButtons = new System:::Windows:::Forms:::TableLayoutPanel(); $this->cmdOK = new System:::Windows:::Forms:::Button(); $this->cmdCancel = new System:::Windows:::Forms:::Button(); $this->lblLanguage = new System:::Windows:::Forms:::Label(); $this->cmbLanguage = new System:::Windows:::Forms:::ComboBox(); $this->picWarning = new System:::Windows:::Forms:::PictureBox(); $this->lblWarning = new System:::Windows:::Forms:::Label(); $this->lblCulture = new System:::Windows:::Forms:::Label(); $this->tlpMain->SuspendLayout(); $this->tlpButtons->SuspendLayout(); $this->picWarning->BeginInit(); $this->SuspendLayout(); // // tlpMain // $this->tlpMain->AccessibleDescription = NULL; $this->tlpMain->AccessibleName = NULL; $resources->ApplyResources($this->tlpMain, "tlpMain"); $this->tlpMain->BackgroundImage = NULL; $this->tlpMain->Controls->Add($this->tlpButtons, 0, 3); $this->tlpMain->Controls->Add($this->lblLanguage, 0, 0); $this->tlpMain->Controls->Add($this->cmbLanguage, 1, 0); $this->tlpMain->Controls->Add($this->picWarning, 0, 2); $this->tlpMain->Controls->Add($this->lblWarning, 1, 2); $this->tlpMain->Controls->Add($this->lblCulture, 0, 1); $this->tlpMain->Font = NULL; $this->tlpMain->Name = "tlpMain"; // // tlpButtons // $this->tlpButtons->AccessibleDescription = NULL; $this->tlpButtons->AccessibleName = NULL; $resources->ApplyResources($this->tlpButtons, "tlpButtons"); $this->tlpButtons->BackgroundImage = NULL; $this->tlpMain->SetColumnSpan($this->tlpButtons, 2); $this->tlpButtons->Controls->Add($this->cmdOK, 0, 0); $this->tlpButtons->Controls->Add($this->cmdCancel, 1, 0); $this->tlpButtons->Font = NULL; $this->tlpButtons->Name = "tlpButtons"; // // cmdOK // $this->cmdOK->AccessibleDescription = NULL; $this->cmdOK->AccessibleName = NULL; $resources->ApplyResources($this->cmdOK, "cmdOK"); $this->cmdOK->BackgroundImage = NULL; $this->cmdOK->Font = NULL; $this->cmdOK->Name = "cmdOK"; $this->cmdOK->UseVisualStyleBackColor = true; $this->cmdOK->Click->Add(new System:::EventHandler(array($this, "cmdOK_Click"))); // // cmdCancel // $this->cmdCancel->AccessibleDescription = NULL; $this->cmdCancel->AccessibleName = NULL; $resources->ApplyResources($this->cmdCancel, "cmdCancel"); $this->cmdCancel->BackgroundImage = NULL; $this->cmdCancel->DialogResult = System:::Windows:::Forms:::DialogResult::Cancel; $this->cmdCancel->Font = NULL; $this->cmdCancel->Name = "cmdCancel"; $this->cmdCancel->UseVisualStyleBackColor = true; $this->cmdCancel->Click->Add(new System:::EventHandler(array($this, "cmdCancel_Click"))); // // lblLanguage // $this->lblLanguage->AccessibleDescription = NULL; $this->lblLanguage->AccessibleName = NULL; $resources->ApplyResources($this->lblLanguage, "lblLanguage"); $this->lblLanguage->Font = NULL; $this->lblLanguage->Name = "lblLanguage"; // // cmbLanguage // $this->cmbLanguage->AccessibleDescription = NULL; $this->cmbLanguage->AccessibleName = NULL; $resources->ApplyResources($this->cmbLanguage, "cmbLanguage"); $this->cmbLanguage->BackgroundImage = NULL; $this->cmbLanguage->DropDownStyle = System:::Windows:::Forms:::ComboBoxStyle::DropDownList; $this->cmbLanguage->Font = NULL; $this->cmbLanguage->FormattingEnabled = true; $this->cmbLanguage->Name = "cmbLanguage"; $this->cmbLanguage->SelectedIndexChanged->Add(new System:::EventHandler(array($this, "cmbLanguage_SelectedIndexChanged"))); // // picWarning // $this->picWarning->AccessibleDescription = NULL; $this->picWarning->AccessibleName = NULL; $resources->ApplyResources($this->picWarning, "picWarning"); $this->picWarning->BackgroundImage = NULL; $this->picWarning->Font = NULL; $this->picWarning->ImageLocation = NULL; $this->picWarning->Name = "picWarning"; $this->picWarning->TabStop = false; // // lblWarning // $this->lblWarning->AccessibleDescription = NULL; $this->lblWarning->AccessibleName = NULL; $resources->ApplyResources($this->lblWarning, "lblWarning"); $this->lblWarning->Font = NULL; $this->lblWarning->Name = "lblWarning"; // // lblCulture // $this->lblCulture->AccessibleDescription = NULL; $this->lblCulture->AccessibleName = NULL; $resources->ApplyResources($this->lblCulture, "lblCulture"); $this->tlpMain->SetColumnSpan($this->lblCulture, 2); $this->lblCulture->Font = NULL; $this->lblCulture->Name = "lblCulture"; // // LanguageSelector // $this->AcceptButton = $this->cmdOK; $this->AccessibleDescription = NULL; $this->AccessibleName = NULL; $resources->ApplyResources($this, "\$this"); $this->AutoScaleMode = System:::Windows:::Forms:::AutoScaleMode::Font; $this->BackgroundImage = NULL; $this->CancelButton = $this->cmdCancel; $this->Controls->Add($this->tlpMain); $this->Font = NULL; $this->FormBorderStyle = System:::Windows:::Forms:::FormBorderStyle::FixedDialog; $this->Icon = NULL; $this->MaximizeBox = false; $this->MinimizeBox = false; $this->Name = "LanguageSelector"; $this->ShowIcon = false; $this->ShowInTaskbar = false; $this->tlpMain->ResumeLayout(false); $this->tlpMain->PerformLayout(); $this->tlpButtons->ResumeLayout(false); $this->tlpButtons->PerformLayout(); $this->picWarning->EndInit(); $this->ResumeLayout(false); } } } ?> ================================================ FILE: Samples/RegEditPHP/RegEditPHP/LanguageSelector.resx ================================================ text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 lblLanguage 2 System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 True System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 191, 3 289, 185 4 System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 None System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 GrowAndShrink 4 Fill 0, 156 tlpMain None 1 50, 23 144, 27 289, 185 System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 48, 48 3 0 2 0, 13 1 AutoSize Select language 0, 0, 0, 0 tlpButtons 193, 26 cmdOK 32, 23 cmdCancel Top, Right tlpMain 64, 3 True System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 5 True tlpMain 1 10, 43 <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="tlpButtons" Row="3" RowSpan="1" Column="0" ColumnSpan="2" /><Control Name="lblLanguage" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="cmbLanguage" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="picWarning" Row="2" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="lblWarning" Row="2" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="lblCulture" Row="1" RowSpan="1" Column="0" ColumnSpan="2" /></Controls><Columns Styles="AutoSize,0,Percent,100" /><Rows Styles="AutoSize,0,AutoSize,0,Percent,100,AutoSize,0" /></TableLayoutSettings> 1 &Cancel 0 tlpMain System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tlpButtons $this lblCulture LanguageSelector tlpMain 4 2 289, 29 2 Fill 0, 0 True 0 0 56, 3 0 4 &OK <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="cmdOK" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="cmdCancel" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /></Controls><Columns Styles="Percent,50,Percent,50" /><Rows Styles="AutoSize,0" /></TableLayoutSettings> Warning: When change of language is confirmed application is restarted. iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAADuFJREFUaEPtWXlY VFeeLXcRN9pdI4gLMWISx7XTMaRFJ+ooGQ2tYmMyY/IxrRGVuCZoFjVxzzJREVA2BUoUEAoEigKkoChB dlxwwchaZRVVQDVbsejp8x6YTuabHjtKO/1H6vvO9x5UvXvP79z7O/d375NIfv38qsCvCnS5Al6nfWwi Ii8GxMTEFPj4+Ppu3bptJjvpQ3Tr8s66ukF/P//eodLQQ3Fx8UhKSkZk5MVHO3d+/D37GUv07ur+urw9 H59TbufOnWtVKlUMQI20NBX8/QNaXF3XbGdnQ4nuXd5pVzXo5eX1gp+fX4tKpUZcXAxSUg5CqUyBQpEM X99TTTY2495gXwO6qr8ub8fX1zeO8/5hcko2oqO24UGlBFEXt0ClKsKZM2fN7u4bQ9jpeKJnl3f+rA1S /dlU33z1ai58fIJQWvIaAAkaaqYjJCSYI6GCn59/68yZM53Zl9U/XUKfPn36rlKpRFR0MuTxW4DWXmg3 S/CISIxzQ1b2XdCZ2vfvP3Cd5KcQfZ9VtC573sfHZ3NISEhLbm4RAgK8UFs9lQFI0NbUA+1NEpjrhiMy /ASuZl/n94Fty5cv/4Sdj/ynSOhTp071p/p/zs3Ng0yWgqtX1gDtHeRbG3ujtd4C7Q0SpMQvR0FhKZKT Lz86duy4nuRnEJZdpuLTNsTE9Y2IiDTnF9xCSPC3MJtGi6q3NliQfD+0mvqLaK4eDVnUcRQWlSAwMKjl /fc/OMk+rYkeT9v3Mz938uTJSYJt3rx5CzExChTk/DvJ90F7I1VvtCT6d2IAHtZb4nKsA27fLkVWVjZO nTrdNHbs2PkkMeiZiTxtAxRfnZSU9DA/nwl64VOgeQjqdP2gK+9PDPgJBqK+eiBa9SMQF/0p7tzVQCo9 1+Lp6Sln35OIXk/L4amfo/rOAQEBzffulSP8QghqNHPRVGuB775xwqpVroQLVq5cJeK999bB38cRjZXD YCpzgCw6Ateu3xJW6NY5c+a4kMSQ52qrTNweTNyqwsIipKsKkZm+jepbosEwCB4ebvD03EPsxscf78KO HZ7YsnUPDn65BNV3xsJcYQ35xW0oq6hBQkJi+4EDB2+QvP1ztVVOnU/Dw8NbNBojV9wA1Oun4VH9QDRU /wbbtr5H0ruJHdi+fTu2bNmCTZt24eC+BdAX28BcOQnG4mlIkAVBozUgKOhM+7Jlyz0ZwKjnYqvHjh0b QvUbtdoHyMm5gaKc90l+MNpqR6Kxeih2bnel4lSdxD08PLBx40a4/dcWHPnKEcbb49FYao/6O9ZIuvCf MBhbQPt9dOKEl8HCwmL2c7FVqh+mUCiajcZmJMT6oNkwCa3GEWgz2qBRPwyeO1fC3X2rSHzdunVwc3OD i+ufcPQrB5huT0RDyRQGYAd9nj2SZH6ob2xDaKi05cMPN5xhADbEP65OOnHixHTaZmt9g5nq56M4dyXa a0bArB+HlurxaKLL7PpkOT74gKqT+Nq1a7FmzRo4LVuDI3t+S+ITGcQU1BVPRm3RaMQHLYDJZEZlpVao k5pfeOGFtxjA4Kd2lic9yKlzKy8v/9Fd2uBV9fdoNYyHWWeDZu1EtOjsGMBIfO65GK6ubiJxFxcXODuv wPy3nHHos5lo4AjU3ZyMmqKJqC2cAK16JOLP7YW5FYiNvdS2a9fuVHKwI7p+4+Pt7b02ODjY3NLyCCnJ MairXIAW/ViSt0OzZjLMmilo0I3EF7v+Fc4r3sU777wDJycnLFmyBPMcnXD0i2kw3bBFTeFEGPPHw5hn g5rcYUgPsccPd2+jztQo1klvvOHwHgMQNj5dt/0U6h2irqysHDdulqIgaycXJSqvoepVL6GpYgqaiUbt SOz1fBOLF6/AwoULRSxatAiO851wbP801BWRdME4GHOtYcweDWPWSOiU/RATtAFNZnDfkNF+9OjXP5D8 y4TFk2bE3/09E9dbJpO11Ne3Ii72LOorfkfFJ6CpkqTLiTJ70V0aqxjAx7/F3DcWw8HBAfPmzRODeGvh 2/A99DJMBaOp+hgYskbBcGUEqjOGEQNQEm2FRFkIGpsfChuftmXLlu0mudFdYqvCNlGwTYOhBlevFuD6 1ffRqp1A4i+ROKfNfdriPXu6iz0TdAL2bp+GWbMdMXfuXDg6OmLR4sVYstQZ/kemwJQ/AsbMkahWk7hq CPTpg6BXDoA2kTu34wtRW2dmsXftkZfXya6zVaqfkJqq5KJVC7nsIJqrXiF5OzRQ9Yb7L6O+ZCpMd0ju 1kuov2WLzzwmYOiICbC2tsbkyZMxY8YsvD7XEb5f2kCf1Bu61P7QpvaDNtkCWgWR2Ae6xF4oDZdAFrIP tfVtQp3UShsWtp/jnslWqb4D6x2qb8KlWBmqS5w51yei/n6Hl9fesIGxYBSqmYzV2VbQqSyx23042KkI KysrTLJ7EXNec4DvF8OhjeuGKnl3VCXwKtzHEjIimoiSIOnkv6C4+AfcLflBsNUWOzu7pZ22+ssTWqh3 WPKWZmfnPMzMuoa0xM9JmnP42jAY8gZDn00lM6lkBkHi2nRWoSoL7N86TCTft29fcRSEEVjqtAxn9w8V A9DEdxKPEYhLfiRfdVGCeyESRHpvRpXOxPI8ts3Tc1ca23rxqWyVtvlRaGhoc3m5FpEXAqEtmApDTnfo syygI3HdFQaQQaiINEto6CZ6BvD9riEMoBsGDhwIKshccMBq1zU4d8AK2ksCeZKWCcQJqi4Qr4joRnRH ZQT3z0eHIydLzVEoFWy1nbm0lgEM+0W2KtQ7HIGG69dvQJGSCVWcK2ryepC8ZQdxdQdxTZqADvIapQWT si8C9g1iAN0xYOBgvPjiZLqRI2uhdQyAoyQE8Jg8iVdGEiL5bigP74GK8z1QGixB2LeuuFeqR2Ki4uHX X39zn+Rf+UW2ysQNoW2ab968B2nwYWizx6A6kwnYqbrmMXklyTMhNakW0KT0wQNlXyR69SH54bC2nYDZ c17nYuaMd99djYuHukMrzHlBeYE81X6svEC8PIw414vojpun++NCkBfulJQJ2882ruoHGcAY4snbT6He oW2S/B1ER8ci69Kb9O1e4nT5kfhj1UXiRHJvaOgwWkVPlDMhi6VE6GN0F+/LSLgyktPkMflwQfXuKBfI n+uBMimdSNobpaF9UHpWAulXr3PRvIv0dDVOnvQ2MadeYwBPPtXj1LlG24RcoUJ8+GYq35Go4nRRCviJ 6kkkT+IaRS9oEnugKr4HdAlUWt4TBcE9EfOtJYqCu0HPxNVS+Y4pQ+VpmeVhJC+q3pPkBZB8CMkH90FZ cG/cOSVBiNdOXCsuFarVdnd3dykDsP0/bZXnO0sDAwP/XFB4E0GBPrifNpmJSXIieYF4J3l6uCapD6oU vWmLvWiLPWmLDIAuUy2X4PiOfnjZfjxeeXUm3l7qiJB9Q6HpnPMV5zvJU/UO8lQ+5K/khQBKgy1QxlG4 dHQaUi+rkJGRSVv1e2yr//upHpXvTejV6iu4GCVHnHQNDBl96DCPlec1hQEkEwqOiIIBJDKAeAYQ3xGA hsrLv++JwYMHo/+AobC3n4rfOy7C6tUuSPMaQOWFKcNpFibMdSotteCUIUL6EZY/Q3loP5T4SRB8dC1y Cu4gPCKyfc+evdkcgcmE8K7h5x+qv0cqlTZmXMmHn/cX0GSMhz5jEHRp9O+0IdAqhzAAWmHSYGIQAxjI acMyIIGOFE+HiedU44p62GMoXagfxowZA27Ywe0i3v0PN0gP2KEqsienkBDIQAYyiIEMZiBWfxMVYZaQ Hx6DhCgp1Fl5wiFAm4PDm25kPvxntirUO1S/SX0liwexoVCGz0MNq0W92pZBEOm20KWPgz7NhtUjkWrN cmAsdMljoEsaA71ilAhdEivL70bBasgw2NpOxIIFC0h+LTZu9kDU0YnQx46mjVqjMtqGyTyOsEXF/0DH /zsRZYOqCCsE75sPlTqXpiJ7yGq1lORf/Zmt0jZl0dHR5qSUKwjy3oTa/FdZr8+CMWc2DNlEFpE5ixXk zA5kzCCmwyhANQ2G9A7UpPO5tFfxyZ/sMX36LBZxy7DBfSOO7FqEIulLMCTPZN0zCzr5bCb634ZOLvyG 4G8NSTOQ5j0FsWHeSM/IFvcMfFly+Edb9TrpZcsEac7IyIK/nw9y5MvReOvfUHfjbdRdE+DEOt4JpsJO FPCav5SlMcFrfd4SmATkdqCB97WZi5HgNx9eX85HxLF5KJZxRDOWokb9NoPuhGoZDJ0w8iqi87saXmvU TqjthClzEUIPL0YyX5TEx8uFlyUNzLOOlyV+p/0SuOIhXq5EfMQe1N905q5pFeHCzQev+S4cDd7nreJG hH/n/BQrOdUErBBhzFrBEeJ95krU8b5a9Q6nnzNHayXvV/FegIsInYC0zmv6av5PgAv3By78/WoY1Oy3 E7WZLqxenRDlvxcpSjXOng1u27Rp80UGMF7ClS6GOyHxNVBaagLO+x+A9MSnCGMiCzjvswfhp/bh4ul9 iPL7CtEBByALPIhLZ44gPvhrJIR+g8Rz30Jx/jselRxDyoXjxAlcjjgBZaQXUgnh/jKP14Xvkvkbxfn/ Fp+R81mhjRi2JQs8xLYPkuR+9vWl2OcF9n1e4OH1OaRen0GZFM/T7VTI5Yk8ttmqZgC/k/DwKYwjUJmc nILkFCVSUjOQmnZFhDI9U5x3ggNk8+w/n+vDNa7Qt+7cR8n9Sp6uaVGlNUJvqENNXSNMDS3cVbWJm/TW Rzxl5zsaAW28b2kDt43tMDW2oNbUxGdM0OiMKK/Usa0K3L5bykXrLvsoFvvKzM5n4uaIHB7zSU1NQ2pq KsLCzjfy6FLBAN6S8Chj6oYN7kl8f1VJ6Inqn4Ibi+qNGzdVb9q0Sc9h02/e7KH38PhI/9FHW0RQCRF8 F6zftk3Adj1F6cQOXneI/xO+5+90fEbH50WwLR3bfMC2H7CfB+z3Abk84BmRiPXrP9SuX79eu25dBzr+ /lC7evUfC4cPH36AAcwVFgNhURAOlN4klhMriJX/AAjt/j34A3/3JAg854k50LkgCEH8hhDOJ4Wq73lD 2MD/Egg8hRPtrju5EJT4//j8BRF/EKYjOWqaAAAAAElFTkSuQmCC MiddleCenter tlpButtons GrowAndShrink System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tlpMain 5 Left, Right Right None True 6, 13 3, 7 Language 3 1 222, 21 55, 13 picWarning System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 64, 40 cmbLanguage GrowAndShrink System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 lblWarning True tlpMain True ================================================ FILE: Samples/RegEditPHP/RegEditPHP/LanguageSelector.user.php ================================================ Allows user to select application languiage partial class LanguageSelector extends System:::Windows:::Forms:::Form{ //Called by __construct private function Init(){ //To do not have to react on Closing event and detect if it is via X button or command button $this->DialogResult = DialogResult::Cancel; //We must show available languages // Languages are stored in the culture-named subdireactories of directory where assembly resides $MyType = CLRTypeOf LanguageSelector; $MyAsm = $MyType->Assembly;//Get the assembly $AsmPath = $MyAsm->Location; //get assembly directory $AsmDir = System:::IO:::Path::GetDirectoryName($AsmPath); //Then there is defaut laguage chosen by .NET itself depending on available languages and system locale $this->cmbLanguage->Items->Add(Program::$Resources->DefaultLanguage); //And there is language stored in current assebly instead of in satellite one // it is indicated by AssemblyCultureAttribute $this->cmbLanguage->Items->Add(new System:::Globalization:::CultureInfo($MyAsm->GetCustomAttributes(CLRTypeOf System:::Reflection:::AssemblyCultureAttribute,false)->GetValue(0)->Culture)); $this->cmbLanguage->SelectedIndex=0; $this->cmbLanguage->DisplayMember="NativeName";//Combobox will show NativeName of items to user try{//Languages in subdirs foreach(System:::IO:::Directory::GetDirectories($AsmDir) as $SubDir): try{ //Check if it is correct culture name $ci=new System:::Globalization:::CultureInfo(System:::IO:::Path::GetFileName($SubDir)); $sta=$MyAsm->GetSatelliteAssembly($ci); $this->cmbLanguage->Items->Add($ci); //And if it really is satellite assembly if(System:::Globalization:::CultureInfo::$CurrentUICulture->Equals($ci)) $this->cmbLanguage->SelectedIndex = $this->cmbLanguage->Items->Count - 1; }catch(System:::Exception $ex){} endforeach; }catch(System:::Exception $ex){} } //OK private function cmdOK_Click(System:::Object $sender, System:::EventArgs $e) { $this->DialogResult =DialogResult::OK; //Save in setting Program::$Settings->Culture = ($this->cmbLanguage->SelectedItem instanceof System:::Globalization:::CultureInfo) ? $this->cmbLanguage->SelectedItem->Name : ""; $this->Close(); } //Cancel private function cmdCancel_Click(System:::Object $sender, System:::EventArgs $e) { $this->DialogResult =DialogResult::Cancel; $this->Close(); } //Change of selected language private function cmbLanguage_SelectedIndexChanged(System:::Object $sender, System:::EventArgs $e) { $item = $sender->SelectedItem; //Show some info if($item instanceof System:::Globalization:::CultureInfo): $this->lblCulture->Text = "$item->Name: $item->EnglishName, $item->NativeName, $item->DisplayName"; else: $this->lblCluture->Text = ""; endif; } } } ?> ================================================ FILE: Samples/RegEditPHP/RegEditPHP/NumericEditor.cs.resx ================================================ text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 143, 20 3, 29 68, 17 &Desítkově 77, 29 69, 17 &Šestnáctkově 149, 50 149, 50 ================================================ FILE: Samples/RegEditPHP/RegEditPHP/NumericEditor.hr.resx ================================================ text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 83, 29 56, 17 &Heksa ================================================ FILE: Samples/RegEditPHP/RegEditPHP/NumericEditor.php ================================================ InitializeComponent(); $this->Init(); } public function InitializeComponent() { $resources = new System:::ComponentModel:::ComponentResourceManager(CLRTypeOf NumericEditor ); $this->tlpMain = new System:::Windows:::Forms:::TableLayoutPanel(); $this->nudValue = new System:::Windows:::Forms:::NumericUpDown(); $this->optDec = new System:::Windows:::Forms:::RadioButton(); $this->optHex = new System:::Windows:::Forms:::RadioButton(); $this->tlpMain->SuspendLayout(); $this->nudValue->BeginInit(); $this->SuspendLayout(); // // tlpMain // $this->tlpMain->AccessibleDescription = NULL; $this->tlpMain->AccessibleName = NULL; $resources->ApplyResources($this->tlpMain, "tlpMain"); $this->tlpMain->BackgroundImage = NULL; $this->tlpMain->Controls->Add($this->nudValue, 0, 0); $this->tlpMain->Controls->Add($this->optDec, 0, 1); $this->tlpMain->Controls->Add($this->optHex, 1, 1); $this->tlpMain->Font = NULL; $this->tlpMain->Name = "tlpMain"; // // nudValue // $this->nudValue->AccessibleDescription = NULL; $this->nudValue->AccessibleName = NULL; $resources->ApplyResources($this->nudValue, "nudValue"); $this->tlpMain->SetColumnSpan($this->nudValue, 2); $this->nudValue->Font = NULL; $this->nudValue->Name = "nudValue"; // // optDec // $this->optDec->AccessibleDescription = NULL; $this->optDec->AccessibleName = NULL; $resources->ApplyResources($this->optDec, "optDec"); $this->optDec->BackgroundImage = NULL; $this->optDec->Checked = true; $this->optDec->Font = NULL; $this->optDec->Name = "optDec"; $this->optDec->TabStop = true; $this->optDec->UseVisualStyleBackColor = true; $this->optDec->CheckedChanged->Add(new System:::EventHandler(array($this, "opt_CheckedChanged"))); // // optHex // $this->optHex->AccessibleDescription = NULL; $this->optHex->AccessibleName = NULL; $resources->ApplyResources($this->optHex, "optHex"); $this->optHex->BackgroundImage = NULL; $this->optHex->Font = NULL; $this->optHex->Name = "optHex"; $this->optHex->UseVisualStyleBackColor = true; $this->optHex->CheckedChanged->Add(new System:::EventHandler(array($this, "opt_CheckedChanged"))); // // NumericEditor // $this->AccessibleDescription = NULL; $this->AccessibleName = NULL; $resources->ApplyResources($this, "\$this"); $this->BackgroundImage = NULL; $this->Controls->Add($this->tlpMain); $this->Font = NULL; $this->MaximumSize = new System:::Drawing:::Size(0, 50); $this->MinimumSize = new System:::Drawing:::Size(149, 50); $this->Name = "NumericEditor"; $this->tlpMain->ResumeLayout(false); $this->tlpMain->PerformLayout(); $this->nudValue->EndInit(); $this->ResumeLayout(false); } } } ?> ================================================ FILE: Samples/RegEditPHP/RegEditPHP/NumericEditor.resx ================================================ text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 optDec NumericEditor System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 0 2 True Fill 0, 0, 0, 0 1 143, 20 0, 0 0 tlpMain 3, 3 86, 29 149, 50 System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 0 Left, Right System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 50, 17 2 Top System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 &Hexa 0 nudValue 2 Top 5, 29 149, 50 <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="nudValue" Row="0" RowSpan="1" Column="0" ColumnSpan="2" /><Control Name="optDec" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="optHex" Row="1" RowSpan="1" Column="1" ColumnSpan="1" /></Controls><Columns Styles="Percent,50,Percent,50" /><Rows Styles="AutoSize,0,Percent,100" /></TableLayoutSettings> $this tlpMain tlpMain 2 True &Decimal 1 63, 17 optHex System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tlpMain True ================================================ FILE: Samples/RegEditPHP/RegEditPHP/NumericEditor.user.php ================================================ Custom control for number editing partial class NumericEditor extends System:::Windows:::Forms:::UserControl{ //CHnage dex/hex view private function opt_CheckedChanged(System:::Object $sender, System:::EventArgs $e) { $this->nudValue->Hexadecimal = $this->optHex->Checked; } //Called by __construct private function Init(){ $this->__set("Type",32); } //Magic method for properties public function __set(string $name,$value){ switch($name): case "Value": return $this->nudValue->Value = $value; case "Type": switch($value): case 32: $this->nudValue->Maximum=System:::UInt32::MaxValue; break; case 64: //PHPBUG: //The problem is that Phalanger cannot handle UInt64 (and decimal) values $this->nudValue->Maximum= 18446744073709551615.0;//this will be rounded to double break; default: throw new CLRException(new System:::ArgumentNullException(Program::$Resources->e_3264($name))); endswitch; return $value; default: return $this->$values[$name]=$value; endswitch; } private $values; public function __get(string $name){ switch($name): case "Value": /*$ToInt="ToInt".$this->__get("Type"); return System:::Decimal::$ToInt($this->nudValue->Value);*/ return $this->nudValue->Value; case "Type": return $this->nudValue->Maximum == System:::Int32::MaxValue ? 32 : 64; default: return $this->values[$name]; endswitch; } public function __isset(string $name){ switch($name): case "Value": case "Type": return true; default: return isset($this->values[$name]); endswitch; } public function __unset(string $name){ switch($name): case "Value": case "Type": throw new CLRException(new System:::InvalidOperationException(Program::$Resources->e_Unset($name))); default: unset($this->values[$name]); endswitch; } } } ?> ================================================ FILE: Samples/RegEditPHP/RegEditPHP/Program.php ================================================ Main class of program class Program{ ///Settings static $Settings; ///Version info public static $Version; ///Localized resources public static $Resources; ///Runs program static function Main(){ $Type=CLRTypeOf Program; //get version self::$Version=new Version($Type->Assembly->GetCustomAttributes(CLRTypeOf AssemblyVersionAttribute,false)->GetValue(0)->Version->ToString()); //Init resources self::$Resources = new ResourceAccessor("RegEditPHP.Resources"); //Init settings self::$Settings = new SettingsProvider(); self::$Settings->Load();//Load settings from file //Set language if(self::$Settings->Culture) System:::Threading:::Thread::$CurrentThread->CurrentUICulture = new System:::Globalization:::CultureInfo(self::$Settings->Culture); Application::EnableVisualStyles();//To be nice Application::Run(new frmMain());//Show and wait to close } } } ?> ================================================ FILE: Samples/RegEditPHP/RegEditPHP/RegEditPHP.exe.manifest ================================================  ================================================ FILE: Samples/RegEditPHP/RegEditPHP/RegEditPHP.phpproj ================================================  Debug RegEditPHP 2.0 {d5a73f0b-7dea-4f46-879c-14913395db11} Pure WinExe RegEditPHP RegEditPHP Resources\Regedit.ico v4 SAK SAK SAK SAK true bin\Debug\ false bin\Release\ False False False False System.Drawing False False False Code Code Form Code Form Code Form Code UserControl Form Code Code Code Code Form dlgAbout.php dlgAbout.php dlgAbout.php frmMain.php frmMain.php frmMain.php InputBox.php InputBox.php InputBox.php LanguageSelector.php LanguageSelector.php LanguageSelector.php NumericEditor.php NumericEditor.php NumericEditor.php ResXFileCodeGenerator ResXFileCodeGenerator ValueEditor.php ValueEditor.php ValueEditor.php Content Content Content Content Content Content Content Content Content Content Content Content Content Content Content Content Content Content Content Content Content Content Content Content mt.exe -nologo -manifest "$(ProjectDir)$(TargetName).exe.manifest" -outputresource:"$(TargetDir)$(TargetName).exe;#1" ================================================ FILE: Samples/RegEditPHP/RegEditPHP/ResourceAccessor.php ================================================ Gives easy access to localized resources class ResourceAccessor{ //Resource manager private $manager; //Culture (not used, null) when null; CurrentUICulture is used by manager public $Culture; ///CTor ///Name of resx file under which it is embdeded public function __construct(string $ResourceName){ $MyType = CLRTypeOf ResourceAccessor; $this->manager = new System:::Resources:::ResourceManager($ResourceName,$MyType->Assembly); } //gets resource public function __get(string $name){ $rs = $this->manager->GetObject($name,$this->Culture); return $rs; } public function __set(string $name, $value){ throw new CLRException(new InvalidOperationException(Program::$Resources->e_SetResourceValue)); } public function __call(string $name, array $arguments ){ return System:::String::Format($this->$name,$arguments); } } } ?> ================================================ FILE: Samples/RegEditPHP/RegEditPHP/Resources/readme.txt ================================================ This directory contains resources (images) referenced by resx files. ================================================ FILE: Samples/RegEditPHP/RegEditPHP/Resources.cs.resx ================================================  text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Zvolte číselnou hodnotu bez znaménka. Můžete použít dekadický nebo šestnáctkový vstup. Zadejte řetězcové hodnoty. Na každý řádek jednu. Hiodnota musí být ListViewItem Počet číslic reprezentujících poly bytů musí být sudý. Chcete zachovat oba klíče? Zadejte název nového klíče. Opravdu chcete smazat hodnotu {0}? Chyba při vytváření podklíče {0}\{1}: Chyba při zjišťování podklíčů {0}: Zadejte řetězec. Obnovit HKEY_CLASSES_ROOT Chyba při mazání duplikovaného klíče. Oba klíče zůstaávají. Smazat hodnoty Chyba Chyba při otvírání klíče {0}\{1}: Hodnota vlastnosti {0} může být jen 32 nebo 64. Aplikaci se nepodařilo restartovat: Nemohu interpretovat neznámý typ Neznámý kořen registru Nemohu přejmenovat {0} na {1} protože {1} již existuje. Vytvořit klíč Opravdu chcete smazat vybrané hodnoty? Opravdu chcete rozbalit klíč HKEY_CLASSES_ROOT?. Tato operace může nějakou chvíli trvat. Namohu nastavit hodnotu zdroje. Opravdu chcete obnovit klíč HKEY_CLASSES_ROOT? Může to chvíli trvat. <???> Hodnota vlastnosti {0} nemůže být nastavena. Odstranit klíč (Pokud vyberete Ne, zůstane původní klíč zachován.) Zadejte binární hodnotu jako hexačíslice. Počet číslic musí být sudý. Mezery jsou ignorovány. Rozbalit HKEY_CLASSES_ROOT Opravdu chcete odstranit klíč {0}? Hodnota neznámého typu nemůže být editována. Nemohu odnastavit vlastnost {0}. Hodnoty {0} se nepodařilo smazat: Klíč {0} již existuje. Chyba při zjišťování hodnot v klíči {0}: Klíč byl zduplikován, ale při mazaání původního klíče došlo k chybě. Hodnota zvaná {0} již existuje. Chyba při kopírování hodnoty "{0}" z klíče {1} do {2}: Název "{0}" je neplatný. Název nesmí obsahovat \. iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEwAA CxMBAJqcGAAAATBJREFUOE9j/P//PwNFAGQAOgYaCDIVKAw2HM7GqhabIEwMZgheNVQzIDo6Otff33+X t7f3THd3dwGY82EWWFhYlAPxfyguh7sSxPD19e338fF57OHhccrV1fW/tbX1I2QDgJrSQBqRDAMZ5AJW AyKANtbDJIGGvLW0tIQHIEgcqPgMFgM64AaAGEFBQX1AfNXLy+sbTDEsEBMSEmBOh9NZWVkQS4CahEJD Q/+HhITcA7IF7O3tb5mbm6O74C7U72BnI2OQ/ysCAgL+u7m5LXZ2duYHav5mZmaGbgAsAFcBDRIEYqXV q1dD1ACdLGBjY/MfpAmIb5uYmLwzNjZGMQAaDh1Aje9AGGQhSizY2dkJAwPOFMN50NRIVkKCJWFCqREj H6AEELkuoFpmwud3mBwAxyxA1dGzKyUAAAAASUVORK5CYII= (výchozí) Klíč {0} neexistuje. Zadejte celou cestu ke klíči Jít na klíč Jít na &stejný klíč pod {0} Z klíče {1} se nepodařilo přrčíst hodnotu {0}: Exportovat klíč Export úspěšný Neznámý typ souboru registru readme.cs.rtf;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 ================================================ FILE: Samples/RegEditPHP/RegEditPHP/Resources.hr.resx ================================================  text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Želite li ista izbridati kluč {0}? Izbrisati ključ Želite li ista proširiti ključ HKEY_CLASSES_ROOT? Ova operacija može trajati dugo. Proširiti HKEY_CLASSES_ROOT Ne poznat korijen registara <???> Ne mogu protumačiti nepoznat oblik Unosite binarnu vrihjednost kao heksadecimalna znamenka. Broj znamenka mora biti paran. Razmake su zanemarene. Napraviti ključ Želite li za ista izbrisati vrijednost {0}? Želite li ista izbrisati odabrane vrijednosti? Izbrisati vrijednosti Greška Vrijednost svojstva {0} može biti samo 32 ili 64. Broj znamenka za reprezentiranje polje bytova mora biti paran. Greška kopiranja vrijednosti "{0}" iz ključa {1} za {2}: Greška napravljanja podključa {0}\{1}: Greška izbrisanja dupliciranog ključa. Oba ključevi postaju. Ključ bio je dupliciran, ali dogodila se greška dlja izbrisanja izvornog ključa Neuspjeh izbrisanja vriejdnosti {0}: Vrijednost nepoznatog oblika ne može biti promjenjena. Greška postičanja lista podključeva {0}: Greška púostičanja lista vrijednosti u ključu {0}: Naziv "{0}" nije valjan. Naziv ne može sadržati \. Ključ još postoja{0}. Vriejdnost mora biti ListViewItem Greška otvaranja podključa {0}\{1}: Ne mogu peimenovati {0} za {1} jer {1} još postoja. Vrijednost svojstva {0} ne može biti unosena. Ne mogu unositi vrijednost resursa Ne mogu od-unositi svojstvo {0}. Vrijednost sa imenom {0} još postoja. Želite li ostaviti oba ključeva? (U koliko izaberite Ne, izvoran ključ ostane.) Unosite nizne vrijednosti. Svaku za jed redak. Unosize naziv novog ključa Odaberize brojčanu vrijednost bez predznaka. Možete uporabiti decimalan ili heksadecimalan unos. Želite li ista ponoviti ključ HKEY_CLASSES_ROOT? To može trajati dugo. Ponovoti HKEY_CLASSES_ROOT Unosite niz Greška ponovopokrenutja aplikacije: (zadani) Ključ {0} ne postoje. Unosite cijelu cestu ključa Idi za ključ &Idi za isti ključ ispod {0} Izvozi ključ Izvoz uspjel Neuspjeh postičanja vrijednosti {0} zljuča {1}: Nepoznatoblik datoteke registra readme.hr.rtf;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;windows-1250 ================================================ FILE: Samples/RegEditPHP/RegEditPHP/Resources.resx ================================================  text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Resources\binary.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a Resources\delete.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a Do you really want to delete key {0}? Delete key Resources\edit.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a Dou you really want to expand key HKEY_CLASSES_ROOT?. This operation may take same time. Expand HKEY_CLASSES_ROOT Unknown registry root Resources\folder_close.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a Resources\new.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a Resources\numeric.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a Resources\refresh.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a Resources\rename.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a Resources\string.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a <???> Cannot interpret unknown type Enter binary value as hexadecimal numerals. Number of numerals must be even. Spaces are ignored. Create key Dou you really want to delete value {0}? Do you really want to delete selected values? Delete values Error Value of property {0} can be only 32 or 64. The number of numbers to represent byte array must be even. Error while copying value "{0}" from key {1} to {2}: Error while creating subkey {0}\{1}: Error while deleting doplicated key. Both keys remain. The key was duplicated, but an error occured while deleting original key Failed to delete value {0}: Value of unknown type cannot be edited. Error while getting list of subkeys of {0}: Error while getting list of values in key{0}: Name "{0}" is invalid. Name cannot contain \. The key {0} already exists. Value must be ListViewItem Error while openning subkey {0}\{1}: Cannot rename {0} to {1} because {1} already exists. Value of the {0} property cannot be set. Cannot set value of resource Cannot unset property {0}. Value named {0} already exists. Do you wish to keep both key? (If you select No, original key will remain.) Enter string values. Each at one line. Enter name of new key Chose unsigned numeric value. You can use decimal or hexadecimal input. Do you really wan to referesh key HKEY_CLASSES_ROOT? I may take some time. Refresh HKEY_CLASSES_ROOT Enter string. Resources\warning.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a Failed to restart application: (default) The key {0} does not exist. Enter full path of key Jump to key Jump to &same key under {0} Export key Export successful Failed to get value {0} from key {1}: Unknown registry file type readme.rtf;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 ================================================ FILE: Samples/RegEditPHP/RegEditPHP/SettingsProvider.php ================================================ Privides access to settings in XML class SettingsProvider{ //This class is aesy to extend //By now it is not possible to use .NEt settings fronm Phalanger //XML documant stroing settings private $doc; //Load from file public function Load(){ $path = self::GetPath(); if(System:::IO:::File::Exists($path))://Load $doc = new XmlDocument(); $doc->Load($path); else://Create $doc = new XmlDocument(); $doc->LoadXml(<< xmlstring ); endif; $this->doc=$doc; } public function Save(){//Save to file if(!System:::IO:::Directory::Exists(self::GetFolder())) System:::IO:::Directory::CreateDirectory(self::GetFolder()); $docn="doc"; $xdoc7=$this->$docn; $xdoc7->Save(self::GetPath()); } //get fath of XML file private static function GetPath(){ return System:::IO:::Path::Combine( self::GetFolder(),"settings.xml"); } //Get folder of assembly private static function GetFolder(){ return System:::IO:::Path::Combine( System:::Environment::GetFolderPath(System:::Environment:::SpecialFolder::ApplicationData), "RegEditPHP"); } //Get node for setting private function getNode(string $name){ $xdoc=$this->doc; return $xdoc->SelectSingleNode("//settings/setting[@id='$name']"); } //Set node value private function setNode(string $name,string $innerText,bool $raw=false){ $node=$this->getNode($name); if(is_null($node)): $xdoc=$this->doc; $node=$xdoc->CreateElement("setting"); $node->SetAttribute("id",$name); $xdoc->DocumentElement->AppendChild($node); endif; if($raw) $node->InnerText=$innerXml; else $node->InnerText=$innerText; } //Get setting value public function __get(string $name){ $el=$this->getNode($name); if(is_null($el)) return null; switch($name): case "MainSize": $parts = explode(",",$el->InnerText->Trim()); return new Size((int)$parts[0],(int)$parts[1]); case "ColumnWidths": foreach(explode(",",$el->InnerText->Trim()) as $w) $ret[]=(int)$w; return $ret; case "SplitterDistance": case "MainState": return (int)$el->InnerText->Trim(); case "Culture": default: return $el->InnerText->Trim(); endswitch; } //Set setting value public function __set(string $name, $value){ $raw=false; switch($name): case "MainSize": $text="$value->Width,$value->Height"; break; case "ColumnWidths": $text=System:::String::Join(",",$value); break; case "SplitterDistance": case "MainState": case "Culture": default: $text=(string)$value; endswitch; $this->setNode($name,$text,$raw); } public function __isset(string $name){ if (is_null($this->getNode($name))) return false; return true; } public function __unset($name){ if($node=$this->getNode($name)) $node->Parent->RemoveChild($node); } } } ?> ================================================ FILE: Samples/RegEditPHP/RegEditPHP/Sorter.php ================================================ ListView = $ListView; $this->Column=$column; $this->Comparer=System:::StringComparer::Create(System:::Globalization:::CultureInfo::$CurrentCulture,true); $this->ListView->ListViewItemSorter=$this; $this->ListView->Sort(); } public function Compare($a,$b){ if(! $a instanceof ListViewItem) throw new CLRException(new ArgumentException(Program::$Resources->e_ListViewItem,"a")); if(! $b instanceof ListViewItem) throw new CLRException(new ArgumentException(Program::$Resources->e_ListViewItem,"b")); if($this->Column==0): $va=$a->Text; $vb=$b->Text; else: $va=self::Iterate($a->SubItems->GetEnumerator(),$this->Column)->Text; $vb=self::Iterate($b->SubItems->GetEnumerator(),$this->Column)->Text; endif; switch($this->Order): case SortOrder::Ascending: $mul=1; break; case SortOrder::Descending: $mul=-1; break; default: $mul=0; endswitch; return $mul * (int)$this->Comparer->Compare($va,$vb); } public static function Iterate(System:::Collections:::IEnumerator $e, int $n){ $n++; for($i=0;$i<$n;$i++): if(!$e->MoveNext()) throw new CLRException(new ArgumentOutOfRangeException("n")); endfor; return $e->Current; } } } ?> ================================================ FILE: Samples/RegEditPHP/RegEditPHP/ValueEditor.cs.resx ================================================ text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 13, 6 38, 13 Název 57, 3 286, 20 26, 26 25, 13 Typ 57, 26 3, 39 48, 13 Hodnota 54, 39 292, 98 235, 3 48, 23 &Storno 57, 137 Upravit hodnotu ================================================ FILE: Samples/RegEditPHP/RegEditPHP/ValueEditor.hr.resx ================================================ text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 22, 6 34, 13 Naziv 62, 3 281, 20 25, 26 Oblik 62, 26 3, 39 53, 13 Vrijednost 59, 39 287, 98 62, 3 49, 23 &U redu 230, 3 59, 23 &Odustani 62, 137 Uređivanje vrijednosti ================================================ FILE: Samples/RegEditPHP/RegEditPHP/ValueEditor.php ================================================ InitializeComponent(); $this->Init(); } private function InitializeComponent() { $resources = new System:::ComponentModel:::ComponentResourceManager(CLRTypeOf ValueEditor ); $this->tlpMain = new System:::Windows:::Forms:::TableLayoutPanel(); $this->lblName = new System:::Windows:::Forms:::Label(); $this->txtName = new System:::Windows:::Forms:::TextBox(); $this->lblTypeI = new System:::Windows:::Forms:::Label(); $this->lblType = new System:::Windows:::Forms:::Label(); $this->lblValue = new System:::Windows:::Forms:::Label(); $this->panValue = new System:::Windows:::Forms:::Panel(); $this->tlpButtons = new System:::Windows:::Forms:::TableLayoutPanel(); $this->cmdOK = new System:::Windows:::Forms:::Button(); $this->cmdCancel = new System:::Windows:::Forms:::Button(); $this->lblHelp = new System:::Windows:::Forms:::Label(); $this->tlpMain->SuspendLayout(); $this->tlpButtons->SuspendLayout(); $this->SuspendLayout(); // // tlpMain // $this->tlpMain->AccessibleDescription = NULL; $this->tlpMain->AccessibleName = NULL; $resources->ApplyResources($this->tlpMain, "tlpMain"); $this->tlpMain->BackgroundImage = NULL; $this->tlpMain->Controls->Add($this->lblName, 0, 0); $this->tlpMain->Controls->Add($this->txtName, 1, 0); $this->tlpMain->Controls->Add($this->lblTypeI, 0, 1); $this->tlpMain->Controls->Add($this->lblType, 1, 1); $this->tlpMain->Controls->Add($this->lblValue, 0, 2); $this->tlpMain->Controls->Add($this->panValue, 1, 2); $this->tlpMain->Controls->Add($this->tlpButtons, 0, 4); $this->tlpMain->Controls->Add($this->lblHelp, 1, 3); $this->tlpMain->Font = NULL; $this->tlpMain->Name = "tlpMain"; // // lblName // $this->lblName->AccessibleDescription = NULL; $this->lblName->AccessibleName = NULL; $resources->ApplyResources($this->lblName, "lblName"); $this->lblName->Font = NULL; $this->lblName->Name = "lblName"; // // txtName // $this->txtName->AccessibleDescription = NULL; $this->txtName->AccessibleName = NULL; $resources->ApplyResources($this->txtName, "txtName"); $this->txtName->BackgroundImage = NULL; $this->txtName->Font = NULL; $this->txtName->Name = "txtName"; $this->txtName->ReadOnly = true; // // lblTypeI // $this->lblTypeI->AccessibleDescription = NULL; $this->lblTypeI->AccessibleName = NULL; $resources->ApplyResources($this->lblTypeI, "lblTypeI"); $this->lblTypeI->Font = NULL; $this->lblTypeI->Name = "lblTypeI"; // // lblType // $this->lblType->AccessibleDescription = NULL; $this->lblType->AccessibleName = NULL; $resources->ApplyResources($this->lblType, "lblType"); $this->lblType->Font = NULL; $this->lblType->Name = "lblType"; // // lblValue // $this->lblValue->AccessibleDescription = NULL; $this->lblValue->AccessibleName = NULL; $resources->ApplyResources($this->lblValue, "lblValue"); $this->lblValue->Font = NULL; $this->lblValue->Name = "lblValue"; // // panValue // $this->panValue->AccessibleDescription = NULL; $this->panValue->AccessibleName = NULL; $resources->ApplyResources($this->panValue, "panValue"); $this->panValue->BackgroundImage = NULL; $this->panValue->Font = NULL; $this->panValue->Name = "panValue"; // // tlpButtons // $this->tlpButtons->AccessibleDescription = NULL; $this->tlpButtons->AccessibleName = NULL; $resources->ApplyResources($this->tlpButtons, "tlpButtons"); $this->tlpButtons->BackgroundImage = NULL; $this->tlpMain->SetColumnSpan($this->tlpButtons, 2); $this->tlpButtons->Controls->Add($this->cmdOK, 0, 0); $this->tlpButtons->Controls->Add($this->cmdCancel, 1, 0); $this->tlpButtons->Font = NULL; $this->tlpButtons->Name = "tlpButtons"; // // cmdOK // $this->cmdOK->AccessibleDescription = NULL; $this->cmdOK->AccessibleName = NULL; $resources->ApplyResources($this->cmdOK, "cmdOK"); $this->cmdOK->BackgroundImage = NULL; $this->cmdOK->Font = NULL; $this->cmdOK->Name = "cmdOK"; $this->cmdOK->UseVisualStyleBackColor = true; $this->cmdOK->Click->Add(new System:::EventHandler(array($this, "cmdOK_Click"))); // // cmdCancel // $this->cmdCancel->AccessibleDescription = NULL; $this->cmdCancel->AccessibleName = NULL; $resources->ApplyResources($this->cmdCancel, "cmdCancel"); $this->cmdCancel->BackgroundImage = NULL; $this->cmdCancel->DialogResult = System:::Windows:::Forms:::DialogResult::Cancel; $this->cmdCancel->Font = NULL; $this->cmdCancel->Name = "cmdCancel"; $this->cmdCancel->UseVisualStyleBackColor = true; $this->cmdCancel->Click->Add(new System:::EventHandler(array($this, "cmdCancel_Click"))); // // lblHelp // $this->lblHelp->AccessibleDescription = NULL; $this->lblHelp->AccessibleName = NULL; $resources->ApplyResources($this->lblHelp, "lblHelp"); $this->lblHelp->Font = NULL; $this->lblHelp->Name = "lblHelp"; // // ValueEditor // $this->AcceptButton = $this->cmdOK; $this->AccessibleDescription = NULL; $this->AccessibleName = NULL; $resources->ApplyResources($this, "\$this"); $this->AutoScaleMode = System:::Windows:::Forms:::AutoScaleMode::Font; $this->BackgroundImage = NULL; $this->CancelButton = $this->cmdCancel; $this->Controls->Add($this->tlpMain); $this->Font = NULL; $this->FormBorderStyle = System:::Windows:::Forms:::FormBorderStyle::FixedDialog; $this->Icon = NULL; $this->MaximizeBox = false; $this->MinimizeBox = false; $this->Name = "ValueEditor"; $this->ShowIcon = false; $this->ShowInTaskbar = false; $this->tlpMain->ResumeLayout(false); $this->tlpMain->PerformLayout(); $this->tlpButtons->ResumeLayout(false); $this->tlpButtons->PerformLayout(); $this->ResumeLayout(false); } } } ?> ================================================ FILE: Samples/RegEditPHP/RegEditPHP/ValueEditor.resx ================================================ text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 2 System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tlpMain 2 Help 234, 3 346, 179 3 Fill System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 GrowAndShrink 346, 29 Fill tlpMain None 44, 26 50, 23 True 346, 179 4 System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 lblValue panValue Right tlpMain Top, Right System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 1 None 3 True Edit value 0, 0, 0, 0 tlpButtons cmdOK True 32, 23 6, 13 44, 137 tlpMain True System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 1 0 1 2 System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 1 lblHelp System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 5 System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 4, 39 <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="lblName" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="txtName" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="lblTypeI" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="lblType" Row="1" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="lblValue" Row="2" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="panValue" Row="2" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="tlpButtons" Row="4" RowSpan="1" Column="0" ColumnSpan="2" /><Control Name="lblHelp" Row="3" RowSpan="1" Column="1" ColumnSpan="1" /></Controls><Columns Styles="AutoSize,0,Percent,100" /><Rows Styles="AutoSize,0,AutoSize,0,Percent,100,AutoSize,0,AutoSize,0" /></TableLayoutSettings> 6 &Cancel 0 cmdCancel 44, 3 35, 13 34, 13 tlpButtons $this tlpMain ValueEditor 5 True True 5 0 36, 13 29, 13 True Fill lblName 3, 6 Left, Right 31, 13 7 lblType 299, 20 0 6 70, 3 System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 0 &OK Left <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="cmdOK" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="cmdCancel" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /></Controls><Columns Styles="Percent,50,Percent,50" /><Rows Styles="Percent,50,Percent,50" /></TableLayoutSettings> Value True System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tlpMain tlpMain 41, 39 tlpMain lblTypeI System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tlpButtons Left GrowAndShrink 4 7, 26 REG_ tlpMain 0, 150 Type Right 2 305, 98 0, 0 1 7 System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 0, 0, 0, 0 0 GrowAndShrink Name txtName True ================================================ FILE: Samples/RegEditPHP/RegEditPHP/ValueEditor.user.php ================================================ Generic value edeitor partial class ValueEditor extends System:::Windows:::Forms:::Form{ //Actual editor control private $editor; //Type of value being edited private $type; //Caled by __construct private function Init(){$this->DialogResult=DialogResult::Cancel;} //Initializes editro public function SetValue($value, int $type ){ $this->type=$type; switch($type)://Byt type case RegistryValueKind::Binary://Use text box $this->editor=new TextBox(); $this->editor->Multiline=true; $this->editor->WordWrap=true; $this->editor->ScrollBars=ScrollBars::Both; $sb = new System:::Text:::StringBuilder(count($value)*2); foreach($value as $b): if($sb->Length > 0) $sb->Append(" "); $sb->Append($b->ToString("X2")); endforeach; $this->editor->Text = $sb->ToString(); $this->lblType->Text=REG_BINARY; $this->lblHelp->Text=Program::$Resources->Binary_d; break; case RegistryValueKind::DWord://Use special control $this->lblType->Text=REG_DWORD; case RegistryValueKind::QWord: $this->editor=new NumericEditor(); $this->editor->Type= $type==RegistryValueKind::DWord ? 32 : 64; if(!is_null($value)) $this->editor->Value = $value; if($this->lblType<>REG_) $this->lblType->Text=REG_QWORD; $this->editor->Value = $value; $this->lblHelp->Text=Program::$Resources->Number_d; break; case RegistryValueKind::ExpandString://Textbox (single line) $this->lblType->Text=REG_EXPAND_SZ; case RegistryValueKind::i'String': $this->editor=new TextBox(); $this->editor->Text = $value; if($this->lblType<>REG_) $this->lblType->Text=REG_SZ; $this->lblHelp->Text=Program::$Resources->String_d; break; case RegistryValueKind::MultiString://Textbox (multi line) $this->editor=new TextBox(); $this->editor->Multiline=true; $this->editor->WordWrap=false; $this->editor->ScrollBars=ScrollBars::Both; $this->editor->AcceptsReturn=true; if(!is_null($value)) $this->editor->Text=System:::String::Join("\r\n",$value); $this->lblType->Text=REG_MULTI_SZ; $this->lblHelp->Text=Program::$Resources->Multistring_d; break; default: throw new CLRException(new System:::ComponentModel:::InvalidEnumArgumentException("type",(int)$type,CLRTypeOf RegistryValueKind)); endswitch; $this->editor->Dock=DockStyle::Fill; $this->panValue->Controls->Add($this->editor); } //Magic properties: public function __set(string $name,$value){ switch($name): case "Value": case "Type": throw new CLRException(new System:::InvalidOperationException(Program::$Resources->e_Set($name))); case "NameReadOnly": return $this->txtName->ReadOnly = $value; case "ValueName":return $this->txtName->Text=$value; default: return $this->$values[$name]=$value; endswitch; } private $values; public function __get(string $name){ switch($name): case "Value": switch($this->type): case RegistryValueKind::Binary: $value = $this->editor->Text->Replace("\r","")->Replace("\n","")->Replace("\t","")->Replace(" ",""); if(strlen($value) % 2 <> 0) throw new CLRException(new System:::InvalidOperationException(Program::$Resources->e_BinaryNotEven)); $ret = new System:::IO:::MemoryStream(); for($i=0;$iWriteByte( System:::Byte::Parse($bytestring,System:::Globalization:::NumberStyles::HexNumber)); endfor; $ret2=System:::Array::CreateInstance(CLRTypeOf System:::Byte,$ret->Length); System:::Array::ConstrainedCopy($ret->GetBuffer(),0,$ret2,0,$ret->Length); return $ret2; case RegistryValueKind::DWord: case RegistryValueKind::QWord: return $this->editor->Value; case RegistryValueKind::ExpandString: case RegistryValueKind::i'String': return $this->editor->Text; case RegistryValueKind::MultiString: return $this->editor->Text->Split(array("\r\n"),System:::StringSplitOptions::None); endswitch; case "Type": return $this->type; case "NameReadOnly": return $this->txtName->ReadOnly; case "ValueName": return $this->txtName->Text; default: return $this->values[$name]; endswitch; } public function __isset(string $name){ switch($name): case "Value": case "NameReadOnly": case "ValueName": case "Type": return true; default: return isset($this->values[$name]); endswitch; } public function __unset(string $name){ switch($name): case "Value": case "NameReadOnly": case "ValueName": case "Type": throw new CLRException(new System:::InvalidOperationException(Program::$Resources->e_Unset($name))); default: unset($this->values[$name]); endswitch; } private function cmdCancel_Click(System:::Object $sender, System:::EventArgs $e) { $this->DialogResult=DialogResult::Cancel; $this->Close(); } private function cmdOK_Click(System:::Object $sender, System:::EventArgs $e) { unset($errmsg); try{ $value = $this->Value; }catch(System:::Exception $ex){ $errmsg=$ex->Message; }catch(Exception $ex){ $errmsg=(string)$ex; } if(isset($errmsg)): frmMain::OnError($errmsg); else: $this->DialogResult=DialogResult::OK; $this->Close(); endif; } } } ?> ================================================ FILE: Samples/RegEditPHP/RegEditPHP/dlgAbout.cs.resx ================================================ text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAc1JREFUWEe1V4uS gzAItF9e++W5AwMSwiOY1qljX8qygV3yamc7vnF8jk97H+9X+VkAYPc8z7PB8R+84bPgJc8gxveCIwSE gSeAQUDw+VcAOHMnOAPooOD/eI8AtMUAPOxA+m/KKXN9ZWbgHloqeLuz/hcDI+UeAMkGgCYQWwCo4KKg GRN7AArZSyC8ZLtLIKtdB5BdYDFE3bHNgEuxaMNHAKhloqvFgKkDQhe0PpgMYHsJWUF5IbUbvr8Fx6N8 UkWlkBMA6m1slejsKpd1QEkJVzPnPl7ogswXmAEzc8xyPJgVKLIuRBkLw7orb0AAXuZ4o157WhYB4Ika kgJj8CxLCUIzQJ/LILohMQBZ9X6QqxuoBjINyIwJhyGX/m4YZif02phAO53h6gUBoDGCx4kgy8vV7sHD 6nNL9022QgZ6kSEDFFKwsqKCgwV3aZ6U8Nft5xUnm1FJfBQDnht6zjgtTVgDhhdw9YtRbFWE3HngEQNy 4jWcLgMl/cHXAYsBCKy+rwiQLMpBCVPnoyHS8YUVEN5GpcRApBdaDyYDcjYorhKawaLCFLN+aWdEZjTJ 6sJEJH1h2F9UtmalLnAKc9rcVDanWctkv+/srODeP248qvLRqKhVAAAAAElFTkSuQmCC Produkt 28, 51 38, 13 Název 32, 64 34, 13 Verze 33, 77 33, 13 Popis 34, 90 32, 13 Firma iVBORw0KGgoAAAANSUhEUgAAAQQAAABcCAYAAACIosskAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEwAA CxMBAJqcGAAAxq9JREFUeF7s/QWwJVd25422B+J9L2I8Hns89njsZrvdZGhzc4taUotZKhWzipmZmblu MXPdYrjMzFzMTGKpYb3ff+3Me0+VJHe3v3n+4r2YiliVec/Jk7Bzr/9evH7HzD6X+K+y9ux9H6zfl/W5 xEPeffvW5+xX9/+m+fe/87nP/c5/+n/dd77f7A9+yL/f+dx/gML+f/gd7YV9/fvEFfnqVxa+13fa/R3t sG0+1m9cxyT++lfR3/qcfa4TjokpXE/X/o//SV//x8/9Z475D//xP37uc//JuEO2utDv/IfowPgav9mT /p+j/p8dgf/rP/9f/043EM85bX/JvPkF0/DnYc4l/Auz53eYob/DEf+ZI//f/1vv749/l0mc8O9nD/3j fX9/48t/0sJkzkwwTSJV1JyxRBo4db31nyxa59R58FzrPGR2oMGBuvh2TtgfvtC6jFjUTF21P3KRdR2x GGr5PD5GnwVaat2g7iOXWY+Ry63nyBVOPUautB6jtIVGJTXTW+y/NXqVU3eoG9Q1oi6jk+x+WsnfK/l+ hXXlXF1HLbOuXCdsl7OFOH/XUTqmhbqNS7JeE1dZb56/7xSef/p6Gzh9ow2cAc2MaNYmG/h/6P9nxmDk vF02cv6/B+3kOjug7TZ6/mYbPW8DtBZalUCr2RetsZHz1tnweZtsMPf3v5NmrUq2RKo7fdkS6UH+/yQg ICF8AhCmrLcBMISoy1CYfgjMP2yOdR0KAQLxtgugIObvMipQNwEAW4FBl1FLou8AhpFLIG0hPu8+CiAY vRTmBgzGLLPeY1daH6gfDNl//CrrP2E1tMb6T1prAyau9W3/SdxTAvWftMH6Td5gffmsL/t92PZ22mC9 J7CdsBZaZz3Z9hi/GgJoROMgrvXWWMDmQRq3ynpOXG29Jq+1PtM596wNTPzNNnDOFhs0Z2ug2eyL9Fm8 zzGDRbOjLYAxCBrs2/D5wNkASUzR9zrmE8QxgxKPTfjNvwZEOs//AapPjsG/DxgIcAIYjJq/FYoBYc0D gCBwCIAwCrAIgLDz/3lA+BU6wC+ACvvVL62i+rSVVp+x0srTVlJ50gYhIQyGGYaIpm203iMXWK+xi6z3 6AXWZ9Ri6zVmsfUZv4jtQj5bCJMttd7jVlgvmLn3hBV8t8L6TlwBs660/lOTbMDUVZxvrQ2esdaGzFxv w2ZvtBFM8tHzttjYBVtt3OLtNnnxbpu8bI9NFS3fa9NW7rNpSQds5qqDNmvNIZu7+pDNWXPEFmw4avM3 HrP5m1Jt4WZoiyjNtwv4e/7mNJsn4vu5G1JtzoYUm7n+mM1ce9hmcJ7pqw/YVFHSfpu4Yr9NgMYvg5bu a6YJS/bZJP6etGyfTVkR0cr9NmXVfpvMPU3m95NW77dJqzhm9T6bCCJPTIJWJtsE0Yq9n6CJPNMEnk00 PoHGsT926W4bk0Cjl+y20Ut22ejFMe1kf4eNctrpNHIRtJAJKFqww0Ys2O40nAkZaFugBaKtNoxJ6jTv fhrK36IhcwMNnrvl02kOoBbTXO0ngGEMivdtI3AECIcIJKFBDxJAKbDU5wLd5m30+b8Gni3Ap98mgIDA VCDr5wz79wHCgl0w6+7fXGLg+E8CSuLvtc87iWi0pIN52yABgqQDMX+QEEaxH2gttB4JYSOAwJj/lhLC kHm7/9Xf/NYSQlndVXOqv2rl0PSVYsJdMONum7Zit+06kmk7j2bZLmjH0UwrAiRKUCuKak9ZSZX2T1px 9SkrqjpthfydVX7CMspPWXb5GcuuPGWZfJdedcbSKs5YJiCT4XTSMssjKjvJsSJ+U3HKcipOsz1jWZXn LLPinGU4nQlUqXOI+K7mgmXVXrDs2ovQJaec+ssRXbHc+iuWz9+iAvYLeLaChmsRXbeCputWdPKGFZ64 YUUxNbHfyGeN16ywIT6e3zdAjSLO05RIHNP021Ehx38W/bbn+j/H/3Zjr/HKrzvfTL9u/PL9XV+2PN59 LnMgh3mUXXuZOX3e0isvWBpz/HjJSTta1GSHCxrtQH69HcirtQO5bJ0a7WB+nR0qFNXb8eIGO17WBC+c dH5IhS/Sq89aRs05S4eyOK/mdlYVpPldx/Xqr0HXufZ17uFGoMbrltcAMVfz/G+2n0G7U8otkeZsOMLC 2EIPqhCfawYEQKEUmr5sr01esrOZ9gAEySk5ti+iqhPn0UEuWb10kVOXrfYMdPKi74tKGcSSk5es5NQl Kz5x2UpO8DdUGm1L+F7HlDLQohJtOU7fl50EmE5et4pTLVR64roVw7zFTdecimI6cRVG5rOT17je9Yhu sE0gGL0komLOU6JzPUg6d/wZA10MFUEChYJGJpAT4CLivsMkuQJTf5KKmHD3k+43fJYIAp+YiDxLgegB cHkQOH7dBP63f8+zMq6fpN+e4f7t9/C//1oavwfvJ7/+NweEf/1Z7p8TYY4wVwCNPMDDicUor4G/fTG5 ypa544sK98Xfvq+t/63fawG75KRjP4vJf5vP/82AUAoaiaYhGQgQpizdZZOh3ceybV9ajh1Iy7ODUFXT eWsEDOrPXLWG01d9W3/qijXxWQNUceYKDA1j813F2WtWBnOXwrRlp2F4p2tWHlHlqWtWybGVHFt55rpV nbkGwNyy2rPQuVtWA1VDVXwWUzX71XzvpO8vcNxF0W2rvnjHqe7iXejeA9u7Vst3NaLzHBfTuTtWdfY2 93rLKk4HKjt508qhMsBFABU/g56jlHsu1TMlUAn7ogc/198BoMK2tHk/BrAHtwK3T6EIzEocFAM4NgNj Igg5SAqAkHCiY7QtBDh/HX06IPxmQOHAxXUfZMBPk4Q+nck+C4x+c5D6tGvrWrovPVvz90gIBREo/N8D L93b/YDzaQAUJMoHgSmSMiNAEJAUAByBEoEkkgK0+iO9fgIIHvgs/z4p4aYfL0DYm9oiJfxaCaG09ooV 11y2wuqLVlB50aYABtPRe2cu34POvtcOpOZaek6pZeSVWnZRhTXC5Gcv3bRTV27Y2SvX7cwltpe0vW5n L96w+it3rOnidWs8d9MaLty0epi1nr/rYdxG9psu3mQLXWLf6badgE5Bpy/fhe7ZmStv2+mr79jZa2/b uetvs32HLXQDuhnowq137JLo7rt25e770Hu+vXrvA7sCaRv2P+TzD+zynQ/t0p0P7NLtD+zirff5fQud Z//8zfc4P3Q9bM/quqKrb9uZq9wTdAo6DZ2M6ATbFnrbTnLfMZ1iX6S/4+1Jnu0Ez3jiSkx32G+hJj5v pkvsP0CN/N1MgF6D022rZ+zqHQhvW+2lAHrVFyDATlTldBMCWLU9K9K+QPVmANbo80q+ayY+K08kviuH ys5ApwOVOgF2ToBiIn0CJDnmVAKdYV8U/baM35Y9ALgx2IYtgAgVAZpFALZUvhIYvhgpMJYABYB+HN9J giyFSgTu/L5Y52i8ZIX1F2C8i1bMwlR6gvuXFKlz8rsSji/w8wtEg1Sp3/p3AHuxwN3PHxaBFglVv+Ve OKfAv1DnEEjqfKJYAnPgRLpEIi50KSGSFACDfAGCpAxU2zyRVAOYupnRBQBNN5FSY3Bg37+Pt+wngEQB 6sQewGBPaoXtiVSHXwsIA/AguOFwSnCn7TycbXuOZdruI1m2E/vBpUuX7catO3brzl27c+OuffDBh/b+ zz+2Dz/4uX3w8c/to49+bu99HP390S/s/Q/5+6OP7b1fQPz97vtsP/yF77/Nse/wu3edPrZ3P/zY3vnw Iz7Tlr85Vt+99/7P7X1tda77iPNxrkC/TKBf+f57H/6K67CF3nf6lb3/caAPIvqQ7X30c/6+j4y//53p Y66XSP/e1/8/1wvvXO8gGgumn4n0d5hDxrwye+fjXzJfmcvvfWy33/m53XznY7v57od27d7Hdv3uR3ad RecKi87l2+/b5Zsf2uVbIhYq/r526wO7xuJ0jYXrGsfduPM+9AG/+8BuQrfe/tBucY6bLGLaim7f/bnd vvcLu3PvV3YXuid626CW7dv8/al0z1i07yXQXdtxuPg+etDo+Lk4vmBAFGew82DmfTaDK9dv2bvvvGvv v/uBvf/++/aLn//Cfok34le/wjfxKxwT0C/575e//IX94pe/9O9+6dtf4LTQMeHvX/wCTwZ//xLSNqZf woy/cNIxkPa1jUmfR/Rzth9DHz3AxB/wmRj+fV7WBx//ooUAoQ8Bhg8BBicAIxAvWn87OHwW8wMiXOeT lDBxnIkfBJQHAOcT33OPul+/5/vpQ/5+ELD0XLpHMNPpk4Cm+4/u4UFg+cxn+y0A7/8PwMqZW+OXwOzN oO9jpPH7dWMSHROPRwwgvtDo/CxEkOagAwjz6z2RL1LaarHkO1+4IvLFi89ZKJsXOsDmXRbEd977OaAT 0Tu//HSGBxQ+EwwAidt8nwgIZ5BOf2NA6BcBwvZD6bYvNc8OpORCBXbNAeE9e/+9D5AKPnRGha3tV9FW jC8yACEAACRAEAhoGzHzR87IgaF/zgsQczczf3TsLzjHz0W/iAjw0XH+Owb6I2dwGJ7B/RD6gLcoklTy Pm8lpvfYf0+SyX0UJI9ASCwMvOh9bSXBfCYlShySOvQCfz19wEtuPk6TQdeK7zVhe//kCBKRJsin0XvR OTWJEinxfj7wewsS0gfNxKTVviYvkzNQ4veMpcY1Gl+N8YcAawCoT4KUQClIXBGwOuBG4BaD3X1gGpgx 0GcB7QOfNwNgLD09AN6fkKii+3HGDvfti0S8EGhhELP69bkP/zsRvFuA9QMtGno+AUUEws3PGgOAj5/m oJhc7/bjaD7G2zA3fYHSNf13XDN+fl1b1/F3Eea0z0WXnpFAmKdvv/MLe+fdX9k778D470RSAKt+Igjc /VRJgeM5TlKEAOFcLCUACDt/vYRA0M2k1cQKELhDEM7Wg+l2NLPIUrNKoTK7de22fYBk8HPUgo9QBQKT fwzT/tzpF3z2848+4rMPYN6PwQX+Zvsxx+vzjz/4CDBBzfhQEgbbDz5A7YjpI/Y/so9iQn34iOX7Q+gD 6H3oPUDoXRGAJHqHc73zPluR/w0hsr2DBKPt26J33rd70F2n9xiYmPgcsczpnUDvQG9HpP1m8nMmfM/5 33biHImka8V/cy/3dAzbt997349tJqSse6J337O7n0L6/H7iXH6eiHQurhWTnu8+0j3omiLG5m3GKdwv W+3/GmoeS40r7+ddpzD2egeBPooIsI3VPql+AuBmCse8+5kUjo+pBbyjczMH3nMC4F1djMFaq2oEhL4Q oDJ+EMDar8fx2n9Xc+Z9/a174P61zxjqmLfZ131LRfXFQt9LVUX11bneju7rfZ1XK7UYVGou81h/v+Pn Cu/01vUbdrG63E7mpFljxjFrTDloVXs2W8mqeVa0bLoVLplqBYunWHXyVjtbUmS3rl5D5b5t7/o8fR+e gC9YmN5/D0B5n+vFxN/vAgJvv4tqgmRwT+RqAlupCuw7s9/9ZVAhYPo7d9i/+4vos1/anfg7vj+HDess dM7tX7cJHUBlOBIR4PAJlcFDjglDVgRiZyIPM3NrrII4gSriCirw+d+6fc+Z29UABIGfM2gff/A+0gL0 3rv20fvQB+/Zh2xFH/t+oHfFiDzFXehOtL0LvN19G8aA3rn3Hg/9LpP8PQaA/XfFMKJ3II4TvfOOH38X iGyme+x/Ct3hszt3I7rDFrrN37eg277PfTRT+M4/f4D8d/77t9mK7kF33Y7yb6bb/PbXUeL5deyt6De/ 4XVvclxMn3Wft+/eYwygezwTW9Fv8kzxsb/Nb36T8953TDQ+N+Nx+g2f+9deR+fTuRLH/8GxfvBaOtbH 525497du29ULF+x0ab7VHjtgxZtWWurEwXZ4WFc7OKSTHRjYwfb1F7WD2tvefu1sb1+IbXK/9nZgcGc7 NravZcwcY8UbV1pt2jE7W1dv167e4r7e5RrYEbAz3LyBXQGj9o3r79qNa+/adbbXMKiLrl67w/F37OrV u3YFY/Tla3ftEoZo34+J75v3r92zK9gxrmDHEF3CcJ5WetpSIzpeeuoTkZOfi/MR4m1mdo1VEyxRS9BP be15DBrvIh2ABK4KmH0s0QjGd4JZmwlG/+Cdt+09mPh9tu8CAAKDewDKbSb27eiliMkEDmLcwNQwe+JW zB8BiE/WiMLEjYhzCqgCRYwj5rnF39DNmxEl7vtnMAzHOfG7T6X4+8845l9lajGkzpvAmNq/bzL6fUbE /Wi/+b7ie0o45l+91896hvj6Cffi96AJLmAGXO8JYNn3cf01QCWGECj6exPoPvi7BGb6TUDp1zLw/w4g eOCZHGT8vMyDRHDQO4i+u+9zP+YOc+W2Xb961U6XFVr+yrl2fHxfOzSks+0f1MmSB3Rwht/Vp43t6t3a dveBAIM9Q7vZrkFdbAcAsaN3G9vRqzXHtLU9Agn9Bto3sJMdmzzECjaussaSYrt44RqMfRdmh4nFyGwv i8ToYnIoZnxtY9L3ly63gMAl/e10l98AFhgyHRBk4ARoHAzKAiikFP8GgJCWUWGV1eeslkipuroLTNh3 UBVkEwhGxI8Rr2RPeI9VXRLAe0wQMf/b0HusOm/DpG+zCt/TSiwwiCb9LRjytojPBQCSEJyQCN7WFmDQ ViSQEGDo2FsAyE3O44wmBk9k2E/bF9NDN0R4RW7c4DcJdOP6Pf/Mv/8Mug84YmCIrhUzc7ifBGoGmxiQ ou+i+2m+pweuef3mHRPdgG466f41EROA4oHnvMHfTgnnCr+Lfuu/TziH3gF0m/G7y3jG43xPzC1QTbjH AKb3A6eAV5JVrHrp/d0ROMfvNhHkBMoxWDtARwwXb+8D83DsfRKBg1z8efTeH5QYIqBrBpb7gDE6X3RP GseW52uZP+45uwHxvL6QRM98i7G7pbG7ecuunD9vJ4sLrHznRkudjDQwvLsdGv6WHRjW3Q6wPTZrrKWv WWaZO7dYevIuyzh0wNKhlANQ8m47smmdHUpaYoeWzLX9M8fbweljbP+EobZ3aHfbM7CL7R3U2ZIHd7FD Y/pZyf49drrplF3EdX/58m2AQARTJ67+fObMDgBc0v7lW3YZN/Nl3M6XceFfYuuk7/nuIm7uKzcEBB/Y BQDhPNJHRqKEUPIbAMKxtDIrJaSyHAmhHEC4AvN8iE71EYDg1n3pde985JPjbRj3XTHvLZgc0uDe1eRh gG9f58WCdM0MyHl84PleDN+iD3OeCAje1jkjuoc6cefOuxz/DpMbUIgmaswEMYNdh+k/STDZ9QRC1Lr+ IH3a94mfMVluOAVg0TWat81gE4MOW573uggx7gakbaBPufav+4z7aD5fdN5wH5xL96Tvo3397dfVPbLV 75x0H74fxsF/I1C4LcntXXv66aftqaeesqlTZ7jYqvu8Gd97fM3oXALU27yHe8R6jB07zsaMGWebNm9H jNX9CJgCyCYCr+8DviIH4ETS8Z9BnzhHDFARAGs1F4AIEDWfbmiRiN7NTb9fPuM59Jnfmz9/+NzHSO8k Gl9/T/pe78O3qAWXr9l5RPnGnCwr2bLG0qcOt2Pj+tvR8f3tyPiBljJrnOXt3GQFeflWWFgMlVgR26Ki EisuLrXSkrAtLi7huyLLyy+wvOwcy01Lt+xjxyzr6BHL3LfPUhfPtP2j+1rysB62d0h3gKGrZS6bY9Wc 9+zJ80gMNyKGh9kFEDD8ZZj8EjE8YvYLbAPdsAvnr9v581ehG9B1O3f+pp29wPbCbTtPHM0FVIXz19+3 s5fftdSKs5ZWdsZSAIPjxafJo0jMvlxln1AZdqWUWh45CIV156Dzdp5Bu4fPVVZWAYIMIPfu4R/Fhyrd 587Nt3nZEAN+K5oEgRF4ASLEnuuILhp0HXMTieMuEytMyDApf/bkU/ak6GfsQ2PGjLUVK5LcBnArAgNn xpjpIsa7xnWusS+6yveB0LEw3ly9ccuu4iEJxN962dfYx7By1fUwkfZjCvqZUwJD39B9RxSYOzzLNZ7J SfegvyHpeFck2jndDgSSX7nCahMTzHf/d9H3fH6N40XXfatzhnuNz63z3088L9ePP4vv47O2Gj+Np0Dh a1/7mv3FX/yFDR06jMl3xS4TPKbr+vPF46D3Bt3gPd4mGOwuAB1+9zUbNmwkk/O6T1LptGEc7jWTAxLn iSnMgfi4RMAMn2mutIy7mPqT1Dyn4nkVzzHf6hy6/8DgYczCe9c4alwv+3hyv/4330v0jt/VxSt2rqbO ao8ftbzlcyx9+ihLmTTEUqeNsFT0/uwVC6woeYeVwegV5ZXY2GpQqRusob7JTrCynzp5xs6cPmtnz5yz s2fP2ZkzZ/nstDWdOGn1HFdTXWfVFdVWzm9LS8oCWKSmWurKhQBDf0se3tP2Du6G5NHDcress4ayajt1 +qKdO3vZzp6/BpMDVOdEV+0sEb/nIG3Pki5wxrdX7YzvQ0QLnyF6+BSBXg1nCFojEreebTkBWIfzz9jB PNEpS84+QWr/Wus1aY31xLHQk+0nAGHbsWKSik6RAHLO8qAzlxD9AQRZXuXCeRff6G2MH1oxbt2SwePt 8DIjpr/uepCYTUDAi5HogwgjZryilyXEB+HjCfnnf/7n9tWvtpD+DvQX9o//+E+2cePWMOH14sRw2ncQ 4NwAQDMgiOn57Aov+zLHXIYBLzndRJcSgbBs/W8nIS5bJ01qMe1NJkk0gaKJ5JOHc/v1HFAiihjcf5cA MM7sugddj/PpeqKLl0FyojsvQZd9e53PAmlf93qZbfybq7pn3U90Pbl/dR+KC7nCfYTz61zhWcKz6rrR M3LMJYGhgBGAvML2GltXNdhqfL/61a9av34DrLHxlE+8y0SdNgMk5/J9jQdbrbgS/wUGX+X9DBgwyE6e PIeIe83vUStsIjDG78yZ0Rk0BuX47wC88Xf6PpZkfL+ZuQNIBVAO4HEjBmPfCpyje22+BmOj57+msWDL mFz096Dx0ljzN5G156Pt6YZGqzx8wDLnTwYEhloqUkEaIJA+d4JlL55hlenHrKqiympqaq2BY0+dOm1n z11APL/CuwdIr99E4rmFFMs4YXPQ/o0bN7nXG8ypa37c+fMXAYoL/PasnTxxGiBp5Jw1Vgww5Bzcb0dn TbDkkb1t98DOtrtvezs6c4KVHDlijVX1AMsFGP2SM/ppGP40AOCMr31yhkSnAIPTMSDw+SnoJKkAdUSV 1ikd4DTh+URQHis+Y4cAAwHCvtwm6zNVQECKvwPC6hgQQnET0Y7jJWQinrJcDIt5SAinYeY7qAjvAAiK BrzH/p3b77med50Vvxl9GXQx/xXpNI68N53BxGx6GRdhPL2Ia1rBGThNyK8wIX/y0MP2Vo/e1qNnoJde ftX+5m/+1r7yla/4hNXkW7NmvV3gBWriC1iuaZKj612TwQd97zrba5zzCgzjk0AT4KoYEIbjhV3ixVz2 z3EVwYAXLl+FrnHOq86MzkRM6ovOhBLVRGJWMa7AREzOJOPFX+ZcOk/MjGJ+MZye65ruScwHI+rYixx7 gQlxnuud51oXLzE5/JzRfejedC7dn48V38GUYrJLPK/u4QrfX+HeAygFksRzhfv15+FcepbznPscdF7P p+fWZBQgcE8a7/gepTtf4TuB7pe//BXGvpeVMTFPnDxrF5AUAkjp/iDdC3/rWa9L6uKZ9Du9m169+1h1 XSOr12WXwiSOCzQ1HgLFSxovXwTCO9P+RZ7jAmMs0lj7vNBz+NgGaU7vUL/RM+s3Ar6r7Asgr3K8wDcY 2SJQdLDXeTSWPDt0XqRxZxw0Huf1rv29axvexznexzmYur6g0PLWLLZjEwe5kS915mhLXzjV8jausPLj h6yqsspqpUI0nbDTrPoXLvK8167D9LfdICvDbLOR1j1hwSMm+5cMsQLR6wDEdZ5B4HCF619EGjl/DgY/ dc4aG5ocbAoysyxt1WLbheqwvVcb29r9dduNxJC+NsmqisqQQs7B8BcdEBwISCAUnTxxyU4ACCe1H/9N smAD4FCP1FBDbk4tVHPilpU23LQjJWftYMEZ25930vZlN1nvKWsSJAQBwiDAQOQVj+bYNvyU6aUnLYdU zNya8+QeoFsSVim1QeGadwi7vI7YqRUrrFRhgvskZxJfIM9Bkz4wHjoNQKCJelaTlQFxpuKFidG//OUv W+eu3Sw1I8vSs3MtKzfXcnILLDe30Lr36Glf4vsvM/n+9jvfsZMg63kmrIDGgUB6JFZg3zLJtfKJIcUE AgOfCFzzohhezHEjMN5F7kGT4axERDEpL+gSPuUrILoYRcfrPs+JiX01gSm5Z2dyTepokonpNJGvCAj4 znV6GQi1QjhA6XgmP5PnPAx+DtKk1OTVZHdyMNB+YAAB1wUx9gVNWI73a4upAUEmYDP5ih/ASfeqZzl7 4TK/4Zm4b70L/c4nYmS0DPfGODFeupbA9ktf+rJ17dbd8ovLrbaBCX+OVYwxPqfzaXx8jK5wH6gUXE8M p/em9/JWz55WXl1jZ1j5rvJdeBcBFB0MBVZ6Ps0TAPwydIH7PYs//uwVxl8MCYk5JTnpnlya4Z4v8XsH NZ7tIsde9GO4F/4WmF+8qnvSZxqj8K5i0nnPcs8+Juyf8WdhbEQ82xm2GquTDSet/CC6PABwdNwAO45U kDp7rOWuW2pleTm43CutWhJBYxNz7wxAcIl7BAh4t2J0eWmaDeOKL3HDeOQ5EyAAFLKXyVh8XYDMM11l nl1lTESXNO90r4x5ExJDJSpIXn6hHd2927ZhU1jf6SXb0PEF29KjtR1dNNdKswsBj9N24gRSBtnFJ09A 5GWcbAAQyMto0pYsycZGMo/5vI7MyVryJarIHak8ddMqyNnIr7tGOvZZO5DTZPtzTlpyeoP1nbY+Uhdi CWHQIgBBtNC32whWSCs5QT2Csw4KTSTJXL9FMA3BPHff/bndwiCll67VScyiVdbpIi9FyCfxiK1PbJjg jL+U8GL08sMqfc0n5Be/9CXr1LmLpaRlWlZOvuUXYIgBDfMLS60AXe2FF19k0n7JJ+7CxYvt1JnzDiY+ sSUZcB+Hj6Xaxk1bbePmrX5fWhHFqJpQ5y+z4rkEAENF4r7uS6uaSACjZxDz+kuD0bTS6D59EvEs+lsT 1Vf+BEDQebWa6XMxqn4rI9PGjZu5ny1W33jCJ4EA01ckmFyAEFZTqT1Bx3UJQyurpBuBGMfpvlwi0n1H EoHOn4cBa0N0fjGwwESSl090AYKv8IjwfK4VXc+kMTl85Di/2+JbjZnGUNKZxrYTgJzDeaulC7Ninua5 RWdggDMXAp1jHAVWF3G/OZAACN179LAymObU+QtWwyqn8d+4Zas1oDMLrASyF2EgAUmw6fB8gKFAWsyq +SByUNYYC/Rgtis3JVlhEHPQ1n0EOktOzdnL7EPO8ADEGe7rrCgCMB3v79bHA2JfJADw787x99mL1giQ FWxdb4fH9rMj4wba0akjLH3xLCvNybGyskq8bDVWh0h/4uSpoBrw/q7xLuW5cferx7qEmJbgCZMrM7jE g/dJBlypQFIvYykuUg9j6U/SIvsX4Y2zSAuNTcT9lNdYZma+7d+52zb2bm9JrZ+21W2esY1dX7cDc2ZY cU4RdgupG5Iszll9w3mrJ3OzgWStOqT5OlT8Wqiav6vrLloVoFDuCVqq83HN6yvsyGqwjSm1tv5ota06 WGH9ZlBRLFIbgsrQDAgBGLYcKrZUij5kY43MqeRipAlfw0p5h8zB229/7G5I6WUCgfMXLtoFDbImDXT2 IroOL8BXmOilnOZlnNaLiSasSw+80GZA6NTVMrLzrLi0wqqq662GiVmDKFpT12ATJ032SfvFL37ReiAx NMBkF7luPcwwfOQo+9a3v+2qR2xz0H6btu0sJ68w3B+TSAAgqeKll1+xJ5540oYMHeHGGulkARAQh2GS kaPGuFFz2PARPIcYQeCGRMMLFXONHDnaf//8iy8x6VgxkYSCfnzbJk+eZv/wD/+UcC/BBvI4x+87cJjx iAABi7DEfTegQpOnTHPVICcHieitnvb4409Y165v+RgKHILd5ZZNmjKV8/+jP6dW6Ph5H3/iCUved4gJ hW5JXQqBjsbXQYfrDB8xyr797b+6776+xd+DhwxzsV+A3LkLgJBXZFU1DdaEdfsU43IKpnFiop5iBdO7 E9BcZDxjQOjWvYftSd5nr7/RKrqf8MzxO6jEiKax1/i2a9fBnnjyZ9amTbuIKZkPmjeaK7pnjhGwCkh1 nJ4rCTXx5Fneg0RrAdN57QewckBxhmee8ZmDgB8bnTdxi21EY3MGOoVoXV/VABhssMOj+uDuw3swdaTl bF5jJYBiebnsBPXWhJHw7Fks/by3K5ofjGVwN0eeMmf44PEJgJ1gwHZVJ7JVSCqUJKT5r/uM6Bxbfabt BbwDZ7nHk6dh6vpTVlpWY2kZebZv2y5b37O1LX/jSUtq9TNb3+U1O5y03EqLquGTU1ZDqUMBQF0dMUP1 ZwGAcwAZW4oXVfFdFQBRCTCUITmUquCPCq3UXLK92ads63EBQq2tPlBOQuMGVIa11nPyJySEAAjbD5cQ sEA1IwAhu0qAoJVGLkAysKCreBLkKz3LynDmHBOIgRP5Pmh6Bt/tacTIU7zAU9rqJeqlnkEcZeJexDJ9 gRcaRFYmZOeulpPPhKxu4IXxW17sOX57mnMtWbrCpYMvfOGL1q3bWwRM1fPSqu0HP/hRpMt+1Se2dGFR bHf41re+ZXt272OQo2tioX3xxZf9N3/3d38PoJxl8mMw5X7EQGLqH/5I5/wL+9a3vo0Idw7GOM8LE+PD YDDlD38Yrvnss8+jq8ktFCZL27bt7c+/ij3kK1+1v/3bv7OHHnrE/umf/sX//ir0Te5lN/dyWgDEy5c+ LsOcrjV48FA8KuPtW9/8lhtW9ZtHHnkMcfAcxwIKSCECOIFAOP937KGHH+b8/+zPqs++yW937Up2/fKC 7kkqVcL96pgHxyj8/WWAFgmhUxcHpKpKGKERgxcGLBmxJJae4pwaw9O8Q4Gj9OdY1fgB4/G1v/zL5nGX aieK38H3vvd9nvmCP4c8EjFwpxzP5Drn0YmRRtBzz2E1D+/gZhhLnlXPlJdbjAGP90RBnlNnmA8iGMdB QZZ35pQYyT8TGESkcRYASNf23+kZIqqvabSiPbvsIMa7gyP72tHJwyx/6zoMe4ABHoBaFiIZ/XTPlwFk jWOIDYncvGL+yPjsth4ZJjWfpSrD/OcBEJfwACpneIBU93X2jIyJENvTjKfG1reMj7YyCp7k+/oTYuST VlhSZSmUHdi9Zbut6fSyLXvtcVsJMGzq3c5S9xElWVJLqcNTpgrpVUgMlXVQzSkrrzltZXxeVgWpDCJV mEoJHyiqu2QFSAfp5ZcsOavJth6rtU1ICGv3l9uAmeuwI6hu6GcAwo4jZUgIpy2L0mXZSAgnzrNK4V68 QQrnrTvUHMBgpBX0lCymGFlOinC3nMDVcgKXy8nTbGHmkyJWmZMAgVbkUwIEXt55IrI04GIWAULXLuiw qAh1dScYPK1E6JMyFPFCxo6bgHj6FQeEfn0HWDno+RwM+dWvBINYq1ZtbeOGbZaWSsr23kOsrt3tL//y 6/7dN77xTSsoKHPm1ao3aNBQZyB9l0b1J6GxXoRerGwWsdVdk3rKlOncz0l/YQIErdZ/Lob98letV89+ VlvdBMBdsu7de/rnuta8uYstL6/EcrKLLBfasW23e0l0PTFyff1pJupFB4XYMPd17lWA96UvfcWP/dGP fmJtWrcH+BodQHV+gYHOP2fuIuwrJZaFLpmdXWBbt+667/wN9WfcU3AFyeUtpA0BjK79+ONP2lKANSUV O016js2YMdteeOElBwONa8eOXSwrsxBxtR7Rk3cJo55ET3UCGE74RJYEKCnnsqsakiz0W41ZV4B6C/eS mVlgmzdttxeel5qH7Ydr9+WdNTZQKox0egcmPmvfviOr8AkXeWUUO3cWkETtqalpah6XF198Bb8+rr3K Rj9O+rJWd1nS9S5Piul9q9Vfi03EWM5kHOffBSA4AfOJGgG7stR0O0xg0L4hPezg2EGWs30zMQRyI1Yz H7ChsAhIKtAC4DEoUcCYbETu/WEuXHD3H6u6XHsORmJu7sGBKMxzBy/diwNqGMcmEUAvsD9BkaEmjIQn m9D9o/2GRlQA7rGuDkZHiskrrLSjx7Ntx7qNtqrDi7b01Z/aylZP2tbhfSw9NdMKS/FQVDVZGUBQShnD smqIEoZFbIsqT1hJRZMVsy2qPWMFAEcB6n828UV7M+ps0+EKW3eo3FYdKKWu6SZ3N7Z4GRJUhq5Dltju 4+UYFU+gMgAISAhNAMJV4gxu4WpUkNAljDha8U/D/CdOn7EmDC5NAIK2jViqGwCEJn3HwDRpMLCkauV3 xmSAzoGe55EAYgmhG0atouIya0CHErq6NVkGNoDh0cceb5YQNuF+nDdvUVjtYCCJ1seo8Xj0KMlYbI8f ywEYcm3atFk+2TUpezvznsTgcs52bN/jE1IgNHbMBKusqOPemAC8ZKkRYiD9RpNdDFNRzvdNZ5EEruPl 2OgTWt+vWL7GgSmVlxIY+6vc10LAoJiVFt8y2/x8bCAFpTZr9rxmG8hQVsnGxgAK8bXEVI888lNbv26L paRkc84sy2a1Lq+ss1TsKonnlxqUnYPB1c9f4teZPWuufSl61mHDRjHZzsPceRF4fcWee+5FO3osw45o jI6lWyrXyOT7HADli1z7C1/4AgzayTIziMYrq7P6Ot4lE7WJyemkySpggBnPAWRa9fS8Gl+B3ObNO+0Y zJ4KwOrc6ak5lpmehzT1Y7+vv/za162C81ZXNdrDSE4av7/6q7+xkuJq/PKnXEo4D4NdwRM1aeKU5jFe vDiJ+yy20lKBlJgosqDHq70zebCua0756utbgYDuNwIz5lzMiDW8z6xVy2xPf6ID8fkfmz/dChjP8rIq JJETLFYX3dAn5peKKECQ5ChPmdS6CyxkZ88Gd98pt+hH14LRNY+auOYJtgJQXV+SjcZO20btIxU1AgaN jKvmgQCggflVz3jXNZ5BVRadRv/HllBLnVLGLIMF7cDRDNualGQrWj8DKCApoD7smTEBI3yBFfJMxYBH EQtUIYtIEb8pBEQLyxssv7zR8ipOeExRHkAgr2EmUYr702tsY3KhrdqVb8u359hAFU5GOvBYBLYtNoTB lEwfuoTqKpUe3igJIRdAOEHVo6sKKCIw5QaAIC+CBr4J5hcA1BOQ0QjVnzhjDWxFjXKn8DIaEctPiISK AgUGSnqTSwiRlVuqQHFJOQOHJRd9S4Yy2RDebN02TBAm1tPPPGcZGbku9mtS/cVf/KVt35ZsRw4zyQGB rGwxSDmMUg7DlPqE1KT9q7/6a9e5BAr1rPhf//rX/XNJEmWl1X5fErOfe/4FB5r+/Qf6yvdtbBNFhRW+ qmtFH4LOrRVPon56ei4TtdJVHTH2ww8/EoFAiX9ehd9YomcNwSjSSXUPumarN9tYBS9Pz+n6O5/97GdP W/L+Ixj70pyx0tEd8/PLWC0brQvGPp3/oej8eYBAMeevQLTX99WoWGVM5vj8rRmv2tomf7YYvLbvSPZz H0/Jcskiv6DcSjhHaWlVs4TQvkNny8CQJUCoYzVpxFClVdknLpNVdIJJH3T1S82A0JaV/sDBY3YcFUDS QV5uqRVy/gLewcCBQ/z8X/zClywpaS2BONWM4YjIHiRAnmiVlQ0A7nlnNNljvv/9H/gYS6U7eiSd913A fQJSvIMmJAQxVyNMqK0s7Sf4TPcVVJwwt5wZ2T+RQGJGnaP4+HHbP7yX7erXEX9/X8s9dBhgKkd9bGJO XkQCiMEgDghTKHAEBKiOMdjEjN7oK3tg9oaI6TXnG7ifBu7PP9P3Ebj6mEJSgxrwFoh0X3UNp6wWgKhh W410IJWhovYElc+xdSC5ZAD8+w6n2CaMistaPWVLUR9WtWHeLF1o6ahVeUh2BYxlIWBQABjks59XUW95 ZQ2WW8o+RV1zKeqaTXHjtDKCkdKrbeO+IkvalWvLtmZQ/XwLQBAHJj0ACN0BhOQUbqKEiskCBMSMMyCk 4g0UPqxIw3OsmBJ7BAD1TQAALpN6VvewPWN1+pzvGyQtsPUVR8jooBAAQZMrtnJLN3+rZy/rBzMOHjLU nn/hRde740n9nb/7B9u+Pdkys/JcRNYK//3v/9AOHkq146gK+aBoWVktE6wJJjnh4lbPnn2iCf8lO3zw ONJAgzPLUzCgJqquWcxkaOK+y/HB61pSNeJVWaCgiVyHGCsdsNUbrR2IHn30pw4I5ViDv/e97zljv/DC yzZj+mybM2eBLV68nAjL1bZy5Rrf6m/ds86ney4urkQ0Pem/+wLM0rZtB9u/X0yVjRpQhKRUBaA0MNnP 2/dgED8/RszpiPmz54bzL/+M8+uZBBCPPPKoM9b3v/8jB4MUxigPkCllNalCVK9n8skoq2N0Xx06drZ0 AKGUMZS42oDY6quXr2QCBNRB3psDAqtoLCFI9D/C+bMBGq34FYxxTdUJxuyEHdh/yN+Tzt+3zwCkpXKY u9rHWOP/PJKL3plWTYXdZmXlN59X705Sn6QtgV89jCOmc+ZyxuPeIiaUEVTMr22jVmWt1Nr3Y8MKrOep 5n2lr1xq23u2se192tshgoCyuWZVVZ2rG1JP3Ssjz08U8CWgkn1DqoCrHtE9NACYYWzYch0fL+cH3Zeu GT7XPWj1bxCo6ngHBIEBhDRQj95f64SBUIQKK0CoZM5VsuKXMw+KmZu5LJapSAN7kg/auvGjbAm2hKVv PGGr2j5v+zass3Sk0XwkSlEBi1E+Y5aDhJBdVm9ZSFiZxY1Qg2WWnbC04iZLzqy0zQeLbDUSwrItGTZ0 xjb6mBCteJ8NAemgM9QNQDiQWWsZxDpn43Z0QCBe+orH7isI6Y4Pkh6wHt2wXg8GU/kkgwQGEn98kAAH R8doldFKo5cVrMstE0uT5gt4ETzmQMbByEgo0V2SwZYtu30Vkn4eG8I6sKpJBNakKQcNNaj+klxMO+eM E0/IKVNmIoFUsmITlcXkDF6LL2G3KOOeT9nsOXOd8Z4DiOT+fIZr6p4koVQhhmnCffe733dA6CSPCKt4 BepGsEdg8Ix0cdebI0NfMOTxvVvyZRT9AgDyA2wVuPdY3QMzfsnF9SOshjlIOFoNa9AHJbXIYh5sAPpt YKxYL4/PHdtDvvjFYHQV4EiV0Lndnci9irGys4vDGLEaaXxktJXaEkspsiHEgFBLaf2wgt1PWhWDvtwi IejeU1ARCqmzWQUQ1zEXdJxWbK1+sTFY95HLSlaCoUwSnsZekpaMi43MFamQsddDn2/F9nIMdaygqJyx avJ5pbnUTBjeGiBJp5JAXU1lK2rUdxwbFiqIOSqQKzqWYvvGDLTN3V63rb3aWsquXcynIubMSbcZyIug wCpFV8qeITvBGdQD2S2k1kh9Cqt7JD0xPrJJBPBESuZvZ34BQ6QG6G+BhG91nMaUrWwqui+XDjAI1jDm 1RFVsRUgVDDvymDwIiSEguIKy0ZKOMbc3Ik7cs3IQUgJTzgorAfgDuzZY9mo3PnltUgIAIKkA6SG7BJU pOI6y6AEfFoRVFBvKbkNlowGsGl/gUsIS7dl0K9iC25HvAxRtGJQGQQIbLsPX+b15DMdEM6jezARKI6q 4BsPJSUS8RyIqYcTGNTxUPW8VKF4XUTa13cNAgYhtA8MaOkMi/HHfcEtE+sbWJTFcFrRfoCo/+hPn7CO nbtZ0uqNdvBgGqtcOtJBIStKtU92TSgBgnRurTxVrEr1elkgtpBcBp7lK1Y1T8iJk6axQjK5GOTNW3YE OwHnSFq9lpfRiNvsDT/viFFjLTU9292P+l5uvvIKAlN4xnhVXLBgGYCAjs+gi6HEePJKfBeLujwfP8Qo KMNgTFJd9Fx6vpdees2lgAp+e/9z5GJACzq1Jp1CTuPxaT5/ND4//OFnn/+VV1731Tp+PnkPUsWwGKf8 3LLsKwRWejBW+PiZHBDSkRBKa5GiAAQMi83kTCAJT7+7/73pHeh3JfodK53AX3q1zi2xPZZAOnYkaSer AEDAqr12czMgy8hbjyHvLIuD1ATdtxaAQ0dSXYWR+60G8VnME+ZStHVAiBg+UlEFEA4CmotiSG21aGF/ qEViydqx3Xb07WAbO71iW/p0tKMHjzIuMjifDW5FRVk6GOBOJ0FIIcKyWzQBBjqHVnZt6xkbp2hcmj/T 9yKBgwNAAIH47zp95iDLFjehxleAICmhjjHXQlANVUEVgGsZ0lYRElQhhtXcwnLLBujT4YHD2IN2bN1u q/t2tqWvP2EroM1De6FipVg2Km4OY5bLYpXD4pINGGQVsLjn11oqvSJScmvtSHa17aXY6vrkAluxM4+G Rpk2kKJI3UbTWS1qsxgAYQg0dJH1GL6USCbEC8IbFZiUj4RwFglByOnx48QfnAE1GxsYKB4sAMEDgCAw 8M80IBqYAAYaxMbGAAiywmpCanWVq2n3nsN24ECKP/AR6DAr26EjMoahV6czmYprmdRNzatap06EdDIZ i4uUYIJ9gAH21U++eHT+FYjssXdiwoQpvjJXoWPV4slwOwKMLAt+eWUtf38D99nX8f3m+kTMQwSTaKsJ mpx8wKWN2H5wjB4VWs2lgsSAoJVSYv8h7BlHj2XZMQxsxwCr49g2pNLoeQ4eSvPvZB/QfcSA0LFDYMYS SQfo7w2M60lZ0gG2oDIFKULnP8z5j3EOqReiFK4jkkFV3wkgtRK3AAKMmMG5iwmyYSWSeK7QVrl+JYG0 AELXBECQbhsmrqsN0fbTAEGM7kDCSlSLu0vnl7FNRkKBcgwI7dvrGQtQl2pQtepdhRLg/vjHP3GQXrFi TfO9zJu3xJ8nhyrflRWNzjQOCA4KkSrji0zQ28OCwzwTIEQrsFvrxbweuHPW5036xvW2hdV0bbvnbSOR f4ex25SgnsmLpKQzgYGS0NydjtdDYKC5Wo8fvx5/fr38/cyxuubzRteIQcIBIVzPt35cAJG66HNt6/is DsOtqJb3rSCjmlhKAAwqcRdK9dU4FZXUIMVWuE0sm/eaiScsjfl58GiqbV+FStruBVsiUCB4aeeC2ZaC BykX1S2X3+XALzmMd1ZBDYBQbWm51XY8s8aOZFTTVqHU1u8rsOUChE3ZNnDKButGj1NvwQgofK4LYNAF MOgybBH9DZfTYUb6RgAEuSrOU9pbmWrXlJ+AOKWMqkatIjyUo5zUBolm2hdAuOQQBsMRUYNKNJUGVmGV ysJqBgTXoyk0kXwcA2EmkzoPPT7f0qCMDJI+csphepiF9nKygMvPLyZ57NHHnTHL0ZMUnNEoVxmr0zmy weQPHsjqE4usq5I24q4rxoXVxLGn7WdPPePneAEVYc3aDX7cT3/6JNfF+g5waCV78smn/XPps7169Y3s B4/DkGK6cl5ao/3zP3/XJ7biBqRLy2+cDgNm4MITZWYVRVTgBrKcnBKkHJiHVa9FXA9MFQOCJmGTYtNZ kf/lX76XcP5gPM3g/Jk6N0a8LM4fSH8Tj59X5q662HD67DMvcM1il0j0HgQGWvkUB3JeNpzIWxAYGwNe CWpFjVYvGE16cgI14R7zDLoEyUKgnClpiXegd91yfkp/7znQrBbJmOigDnBU4Sbr2bNv5AX6ku1DL371 VSQ0vEZ/h63oMMCZxnuQxFQtQ3C8IvuqLGIeiVxPD1JhENkVrad7f5BRidrjmhk7dtim7q1sTbvnbAPb o+vXYmRMcfXsIgZNlwxY+M7QYuDESfIAeN46LXqMhSIAaz0SMIBDAIVYYoilhnDd+68f3asfr33AICIF EmkBqCGIqAYPQA0Gv0pIlcrKcReWMqYC0LwC1AXmrgzCkpIzkLSkpu3bf9i2zptly958ypZgZFzd+TXb QwRrRhZGRlSzAmxVuYVVlpmPgyCn0tJyquxoVjV9VWps9+FyW4eEsHRnji3anEnZxLXWbeTSFglBQOAE KPShserxQlqxldJKDVDIJ6jhAr0UPK2VQo2XyNF2FwvM6agdgcL9YCAEZMBg1ICu6JQaTAa1kZjr00rT RCxuMU5hD6Dke1ZGCStoFdb9WiZEHV6ABqskyaqaAdPvNVFffeUNZ2ZF3+XDADIiink0WZUeqpcrN+Ib kRFQfnLp6LlacRhsieR9+w6M3F9/bW9i+RdT9+kzEIbLx0KOFZ/Vf/jw0RzzFV/FZDTUMR07dnPAKmCg q1h1JKLrXqT37ks+4hZ2MXwFK5tIkkA1x8mXXoELSJ9pZZBl+n5ACNZ0rRaaOBJTJX6/Ej2rn3/fEcal 3JlP5630c0Pom/4319BWpMAo3e/f//0/uPuzlmOk18v2c4H3pxVRnpVEQJAapElYK3EWUJKk0rz1e7of EEJAWXfAsZT3cyKAMZl1ctFe4h2MGz+pWUJLApDTdX4MXNWoLhkAYCzFyDMSGxo7dOjqkk5WloCTaFXA KYTjRszoC0siBYYTcDXPNS08WpU198TEPIfE8XxcoduH9rEkGEjGuI1vtfKU42oMy8ocPMtCIjA4efIK z33JAaBGQOCk81E9jHOLwpyOKAYgv150H34PD5COj8KM62olbZzj/IAC80ESQjXlClWysIo5WgkglOEh KCqq5f2hBij2BCDIwAgqCVb2nqN4jXYDuuuJSZDXYRn2hA2De9khgCKThSc7rxI1AzDIrcAgWYZ0UGWH M6pwOVbY9qMYFPEyLNmRZfO3ZmM/SLpfZegyPJIQEBd6T1hFn7oTlo4NQXaEgvqLrCgKz71H4Qh0LF64 oqyaXF2IVYMgGbikENsVHBAkRYCaGozoRTYSRilAkGgZT8gO7bsSKESxCfSdStwj1URY1YKcdVRtqqeE m8CgkfvQSx82bIy7ITXhBw0c6uqCBzMh6mkiqnCE/OzxuZ966jlE0CxWzwomhvTc8xgpdzVPSK1KMsjt 3HnIJZLi4jBps0BaAYIzVnTMvHnLLD0N0Rew0otbsGB5s2vtcSQMMaUCTs6iDikA6xy6ugKFZKXesWOf zZwxz4N9ZK1uBgSYID09MItESKliTUhRWmkWcv74WRVcJGBRnIGfG7E/Jq3au3btt5kz52HhPw249W/W 01evXs/YKww3jJEMZgKE5ORDCYDQzZ9dk1BALimlmbifRt7dCZjkTJRvH6sycm8WAlJ65x5tqPGniIcK dGhcxfTf++4P7dDBDCQJmByAF6PWEETz0kuvNt+jXJN6B1u3JhNLAuAi4laxWtbx7rWY3A8CWqXvJ8Xx P/hZ/LcYuYb5VFxQbcnz5tgqfPkr33zG1nZ82Q7MnISOrkxGRUNiLyARqJ6xFxh4LgDXVziwM7Dum8Wx hs9q9Tf7Pq8dsEIOQQsoRWpGBB76vgVAIvXDz8E5meMqV1iNqlAldYG4gQqoHC9BCXOisLAady42BEkI AIEkxFQRAHcQo/r29etRHZ6zxa8+Zit4rh084xHc11muYpTSYKnM0rJLAYRSO0Lho/3HymzroRJbvTcP CSHb5m9JpzHzJgSCpVE+k1QGAQJGxa7D6OKM6+EYgJCG21FqQyGxz5foFuRFOCjhfAmDi0JCtYLVuU6n SRwDQsLW3SqR2uBoGUkIDPgpUPgEk+7LRP3Jgt4RQMhIw2gIM9YSainmb4AkTWjbwDbockSaMWmVMxAs 1X9pUybP9NBUicGKItuXfNit+bEVP2nlRvTtXF48kWi8NFmM67E6a1Vy6/3nv4DB7wcEOOH2Y/DKyxqd GWtZVaQ2+GT9/Bfd4n9EUoxWLyZ2jQrQ8tIEBJrMup+f/OQRmwVTygOhlVJ2hvnzFhNN2Qbm+3NiHIa4 dCAd3W0IenZsCBkAQnlJA+CH8U4MGNlnwvl/9onzK6DqEswtgJg/fwlSTluP3Ozfb4iL2emI3F8jICg2 jB7C7XoW0FBlHYnsw4aOJFT6281jpJU5AILUrwAILh0kkCQEvXdJGjEgyIi6c9c+lxQVuadKPrqn5597 ySM6df1x46bascPYXVD9NNE1tnr+hQuXNXuBPs87ePKJZ+zggXTAsQjVQnEWmjuxDv/ZDC/Gb5YgIqDQ qt4s3gsQkDCLYYo9Y4fYKphmBb78zeNHENp+CLsRYIy+Xi2pgsWihmtWMU+qeBeVAHQIDRYpP0CgECjk EAACZANr0RL5NQEKlyYioGgBjPgY5pbO4QADGPCclYB4JSqxQpHLAYVyxknzXCqcbGT5BZVICaWuMqSj ekotTUdlPA4o7Nt3zDbPneUGRoHC6n5dbRdemuNSu/EupWeWACCldhQ6lEo8A/aDTQeKbeUeqQzZNndT pvUZk4R2sNi6RgGKn5O60HnwQlcZBlI95RiFF1WEMYPOtgV0VFZ9tquSEKhzIJFTq7t8rK67CRDczSir bovHIbhVgj6qFcbFOomhnqZJnjaDoRVYTCkJQatkGQNQzwDpeF+hxBwAiIAhlhBkcFm5cj0RfF9rdsXJ rvAYEY0CAjGegCbo/2Sy0XkqUwwHE0vHbOK8dTD7Sy++6r///J99wdphw5BtQOqCpANJEbJX6Pe6vz/j GDH7Uc6l4KcKt0XwIpESJOLKixCDQsinIIdBBV+4F91P7B7U+WTHkE7b/OwuIRAtx6R0QNDzQhI59ayH D6e5O/FTz++5Dy3nV1RmOauKjHzdu/fyexfo6Fqyc8juEvIl/hw7wzdd+hAgtm9HYJJsAQCQGPYEzP8J Uuiw3nsMZpGrNUQshvH/Kd6hOB9D4//qK62wCcj2IZuAjL9K3Q1RhfUE4fz1X/+NP9ef/dnnSRwb70bk HFZDAUesarq6qfkT6fCB+VvUiCDW85lW7mi/JgKJwJSyISDxbd1mmzu/aqtbP2vr+3ezjWs3Eep+xG09 AoQa6fTMUQGDQKACCTUmAUMVf1ezWImqtE0EB/6uAxh0D4FUnDiAgt9bdM/6W/crKcOBhTlUzbU8GYl7 rED1EpWL3I7Q6LalQsYuT6DAgpUJk2cQkyCvje79KPaEHTv22JoebWzxS4/YUj3frBmWTMDY0dQiO5aB uzK9GOmg2A4KEI5iUNyfh0ER+8H2LJuHDaHHuCTrjDDQeTAEKHxOQNBJqc9sh07eQHtrJATKMwsQiml9 fRFAuEb1I0kIMSBIb3dfsAdeAAoKTHJQCMDggReRtTowtkRh3F6QAKEWMS5mivaSEGAKoaJUDK2SIb9b cd6X2ddEFDBIrzvNClJry5attu9/T4yiCR8mvQxT2n7723+DajHabQfpablWjB5WS4y3pJJTWvW4t6GD RzQDgkKR05m0ZbhpZBORFCFbQ/Lew85QWsEUQCQrvgJwFPOgZxFoKJhHhr2evfrZd77z9+F+iAuI8xN0 Pz/CVdiv7yC8KMe59xpXD1oAAQmBF1uONCHd1w2KMJ4i8yTK6ths1Bcxu87vDH7f+b/sLk4/P56IIlyM ch8W8szS8QOQtMQwaIx+/OOHWI2PRcwoQCB0mXuQRBPnDXiuvSIBm6MCg9FWRtlw71/EVvGou1zj+IgQ //AVl046deru7uJjx5EOWN3KiJ6ToVk5CGeRJhTbIZDVeQROuxnrYxhNC9GbxXzS/esEAhFJjI9JDB+L 72IuF+0jBq3W6uzMGNkAtAIDkMnDetlG1ASpCluXr7Iduw64N6iY91HNM9XzrPUAoUChSmAPo1ZGoBAk hUCBgSPSCu8kNSJm8rAf/g6k72MQiI+vdGBB8nAJIVyrkhDjclQlSQilovImK8H2pESmAiTcXEAhG8DM yi1zaVa2gnTmxn4MsVtmTrHFLz9ii195zJb36mibcanvO5RhR5G8DwMI+wGE5JRi24n9YENyPvaDTFtE DMKcDSn21qjl1nHIYusIGHQSIGinowBhyEIbOpXqslIZotDlcpjxEpKBylZdpdCjijeeQdc6gZgeIsZE AobIL+y+4CApaHJ5lCLShFYcJXKcUmw3E16TowTky0C0URx8Pg+olfMkCHqqifh0FX6g6stpLL4+MaOt JI0qmLuQwdFvF8xf7gE4moBdSJKaMmUGemi2u65S6Vidh8tGcfSqNqMJrWQaBZlUshpmIXYdPZzh+RB5 Chji+u46kz7JVuK13JU6l0JphcpiXAWk6Pll/KvDhiH3lc51HJfgdmwFkyZOt0mTp9vkSdMJvoli/OmC lQ1wCBBktJQnQ/qgPBO5GEcV2CPJRDkDofIN48u4ye5RDAiJYcVc27dzfuIqJuv8kEBK11W8QTb3UIJO XAXzybMgr8P69Vs9GUtj1JnYjo2btiGR4MnhdwpaOqxoT3ROHSsDrcbGsxwVp++UUImHfUl9eoY0gPYQ 0osiISfxnBp7kQK/du7c77kTul/FXShOQcE3IbiJOg94gdIpiBO7JVvjdk4GoNI1PkRTikHlovNV2w1v EYkZm0X4WJSPmFerekTOzDGx8uYdOmJbCEhaR4LQ1lGDbPvWPa5nF/IcsvqfwGt2AsNiA3OsVu9dacQP SAlBWoiY18FCzCw1IqQaO1BoXxmIbgtoiD4LaoGkisD48TliCQRVQeduVhdOkZREYpKDAclJSAlFLAoF 2K3ysIPkysjoBkO8D3gg0pnfR5hDOzduw+PwtC148SFbiJSQNGWC7dh9EImAru2phTR6LaZfa4ltO1Jo a3fn2oKtKTZn4zGbsfKwdRyz0t4cusDeBANaDVpgn+sAIHTgj05ICMOnb3CVIa2UWggSjVihVQ5N9RKv ICmcQ2VQyqoyyRS37Ykb+IFD1FgIGHFw4DMlFGlSKxgmxJhHaZ9MLPmKNWj5iOB5eABKmfT1MJeMbopz ECljTdcSKJxyCoyiSSvm1WqoCafJeVyJQVAK/vk0JdigaxUSjCTmkJjr6aaeCBNcejXo2sW46OSWy4VK yRyTbSGk/HIcW0kLZUxmgYWO0fG1GMQEcCHzToErWg1wFeFdEFPpumlIG6kAgO5FW+n0WXTCKuQFygsg o1oF96W8AgFWCSG9gWEYoyiTz7eeoSdQIJsN0TGPlUHuS7mdHAhgOIFpOH9hOD/nleSigJcwvvwmAoAU LNNpgKRiEwRg2XJfsp+LGKpcAwUlSToKz//pJNuRzqtnFaApjFuRm3oHAiWFSSurMo3PBaYa1xri8jUf ThP2rDoZqqsg704MCJs27fRYjTzGo5z3KimwFimuOpF4JjGcxGtRvHonivb3ifnRMVpt09attU2kEK/r 8JLtWDCX/IsUH3stSqflXTjHnMbD0OSAQFGRzwSEwMR+be4l3vfVXcBNzEDGli22f2Q/24Ib8Mj0cS5R lrOAVchGkKCG3LfPd+XYpMqgUqSEYgzrxdx3UfkJKwQQCpCc83n/+UgKeSyi2RgaRVlQJnP8GHNrz76j tp4ApfkvPmzzXye0eWAfgsA22a79GcQd5Nue42TfHi2xLQeJUMR2MG9zqs3ecNSmJO23DmOTrM0QAcKC AAjt+a8dgNAew8Lw2ZstpQhAkMsRvagaA6DbEBwQsCDjrpJVX8yqTEbFjnsGl4eQhjBSJwFClMPggOCg EDGlJjurvkR3BY2IucVoyo+QgdCLRyYUiwxFJaNqslFRSVnbFeGlyVnMCq2kJjGXJqoi88oQE7XiCQwE AKEQpa6vVY/75v6UblvJSiom0rniwBqvVafYdUWXMTlVJ0DkYBCtoJ7DrjRbP07hrAqAQffjxRWzSheA 4LqnQiaJTwokEt2P7Bge9q3JLpekGCBaPRUMI+A76RRWZuncbtNQAQx+L3WgiPPr3GJ2uToloQiQdL5G hQ9HyTS6lp5N3xdwrIBNYyRg0/GSkirkxlSeB8+m5z3F9eJafdreDwzhWRV7ovMqF0H5CcrPkLchjL9c x4AcoeIaM0V5epqv3oFqUxA0VkH0p+odSNV46uln7eDhVI/FKGLCVwEeIb4/kAftwGzVUFVEboSLGFNb rdQPMlv4/izj3mR7xwy29agKG7q/abtJ01Y8h+wzmlPnWeB8kTtzNQBCgsrwmQxMSrHsSIlMXsZn2eRv 7BzU3aWRTZ1fsfVIJClr11gBc7FU8QUOChFF+w4EESAIDEoobixAKMKGUMS9CxAKMTiLCrCx5SEp5OKN U8BRZkGVpUOpqBGSBLYsWWgLX37U5qE2zHurvS1ftMLW7UyhNWOubT1ciHRQhEGRgCRsB3M2pdus9QDC CgBh1AprHUkHDgjtIkDogHFx5Pxt1GsPBsV8GUhOk33oZappGIHKcAHruVJAT2G1FiBo5Vd+ggNDFFuu LEjlE2iCqQiJr3xRTrrXRfBiECFZxLPFmMBamc7w2dm4gKR8w8QWBIoBQjnnLZVmxeju7dDEYUKLIUX6 28+pwhrNFWlDamzIWFOmpn6riDxJNCG8WucLUkyQENxFqPN4/LmARfn7ApUInCTJKBff02FjYFBwitym ZLAhhWjV1Yrt6pNHCgZRXNfyHA9nXj6PjHaftTLre0+fVUCMmCV6Xm31tz4XEOie4/uPY/AVpSgwEfAK gOv5W4FlkuBicvuKg0FMUXpvs+qQeN96b2HsgvFYz6vxJy6ChBxdQwDrY+YZgSEzUeqQ4kUGDVK1phYv hNQx2Rmkjsnw6FF8HslHJSBVA0pQGVrE86AyBF2/hSpcNA+reCV2KkW47hzS09WFLf262P49R3zR0L3J PSpvzTnmQz3VusoP7bfilDSAkhgYWfs/ZVXPo5/CsZkT7dCEYXZw6gQ7vniuuwel6+eh8uybNd02dCMA qu1zeDSIIJwynvgBQBijdoXiDLgn3ZsKmej86n9Sit2gRGDA1qUDgKCA8+WXQgBBHpRLclIuNq4cACGL OJ0MSGCQTtzO8SwA4Vihbdm0yxa3e9HmvvCozW3/hs2fMd+Sthy1DftybPOBQsCg0NYRobh4e6bN3JBm 09cds4nL91vnkSuQEBa2SAitBs231ngZOhC2PGbR7lAcRVGKeBgaTpOaqt5xGBW9bBpuR5V8cimBlFEV zvACEA4OTGwKTDT/rbRUMb7XRAhAEFb7OJec7xwc4s/JplOAkfvvI4oBIaHstJejdmBQ1dmwormdIYpW dKZ2IAglqu8XgaPqORFAOWOK8SMAiBnWjWoRM8Tqhs6l6wqgHKi4xxiwwrUS8uQTGCmRyeOV/5OMHwNR y6rcLCVE9xpAVYVLUMMiMBWgJhYziY2B918z/CY+zhlf4+OSUBifRKngtCSVBArGxYhcaokoQYrR2McA JBBwY6SSgiKjpAOVv6OLbhyV8fFb3/orYhTSXK2SF8KjURMCi2LXXrwNAUKRyy7aVrFoVSLJykgXKMFI B/Plo9Zs79/F1rXHfjC4px3CVlGMeqSF7AKu6tPUTsxZON2OqpvS4O62o2dbOzRphEthZc2rOgzMveVs XGdbqW24lUjHLUgbm9hfjxpyaMEsdPpyB7XDW3fahoFv4dp82guabBwz1A5Rz0BeAnkPgoSAKuoUVIVS qKQiUDGBeEWkKBeWnQQQThCGjB2rpJG8BDIWAYYsjK4ZnqhEKDLxGil5VXYkq8L2oxJs3X7YlvXsaPNe fMzmtHnNZk+db8s2HLI1u7JJdy4goYkaCHsIV8aYOGPtcZuy5qiNX3bAOklCgP8lHbiEoP/a8EFHEpvG Ld1tKRgUcwCEYsouNZxRtaDQa+4SlZIuUBtBUW6qnuOFOAmQ8Vp3Ue07pceqgoz+9tJWUS07raRipLim vJe3ivRlT+aJGE3Vc0IzCkKQo6YU+uwskoqaUXj56QRqVi/imvTRNpxfOQGfBIVYWmmSPSKa6CHfPlq5 Y7CIpRoHLK1uUbARVvL4HhWQc04hvdxbc338SMJwe4RWfqeIyWLpIwFs4vJeMTPfvxUzRxV2o/x/Z7ZY DdM2/juB+UK1owAysQoUVKYIIBO3sY1GRlwVImHbTBh4TzhFrsgYDBK2zcVLmsuAB+mqxVMR1TJACpHr tk/vAdRs6GkTxk3HoIvhkRW0XEFRCpvGqBwH/MTBPMHN2BIA5O48eRWk0kZuQBntgtU+Qc9Hd8/FbrK1 bydW7Odt20g6L2EILUcC0Hy8QE2O0q14mGaz0s+dagemjYXZ37B1BPqkkCpdUEjuBaqBVJVyMiO3AwSb UQV2Tx1ve9Zvsm2s/ivbPGdrkQgO7tjlruv9qCQbhvSxZa//zBa/+KhtnEyvBXJ0srGVlelcAEuIOYBc CpFnQWpCRNgNigCDAoCgAKkgr4g05iLSmAvrkQrqkQrqqIGAVLA72Q6Sz3AkvcQOZpTb3tRS27YnzZYN GmBzX3rCZr36rM0YP9sWrTlgSdvSbR2BSGspipJE/sLcTUgHa47ZZAyKY5bsAxBWWivSF1rFRkVJCG0R GTqNWIYIkewehlwyHUvrCUA6qx4EAgSCkkgAuUjwiTr8eK64ikcqLj6uI6etKisn/i3wQKJQOqkzj0pP KdvRwSEqO5XAbMqNlxgnUmSdAny8ZJUkBq3MznifAgpMatkdfJWOpA5PEooMkb5ixoylyS2DnVYwuRgT yItwSG8XcZxIrkAv1cW1BQQenuv3p3ujOnBcTsttCpJ+QtEOL9zhYKBtXJashbmDBBIdG30fH9tyfFwM JEQ4xuSVeKKVWM8QKvPI8xHIpaXonK4KJYCK31MMVtG4OGC5Jyeq8x8BQRPbZsLgpjiJZoquFYNpDK4u TcTf6XhPH4YUcCVjHOJzDgEzacfzPEakGH1Ysfwe4ONh7iGyz7cK9Gn27wMK8ve73z+QAtkEJMoJEBgk 2hYqAIRsjJVb+nSw1Yjwm8gQPIq9Qh4Yt2eQ+py7bK6lzZtCpGwWbtujlrxonq0hvHktx6dTvFYqRwWq X8aalbZRagcxDDt3HrBNRFVuowjskjeftWXtX7Itc2d7XMPONetsXd8uhBL/zIuZbFmzwYOHcjAIV2AX qAYIFNSmMGW3H7i6IOkAycClA4HBCcCgyfKLGlETGgEDQEGAkI9kkFdjB/YetE39uxKC/ZLtmsN1jxfY btyJW/Zm2rKhQ23uK0/azBeftKlDx9q85btt+eY0pIQ8KNdWbMN+sD7Fpq48ZBOWH7IRC3a7yhCDQYuE oOSmkcts8op9blDMq6JaK66/E+dUiz9ICGqDFXrMkS/g/eXiLkShAYpKnymVVEVE4603M+E4hcw6E6me IiChjLsACoHRJH4rS07HeMszFalQHzuu5UyHlBBLB77qOShEK3ck8p6JV8PYGBZPbmeeFmZxJncwCKDg xTQiauBvj9DT1hlN9gZ5PBQqTLlwb10Wwn+1VZFNAZ6yLF09imIImhkigVlD/bwAQkGvjhk5bEOsRgAo F8EVsxGTdHHfj8ubaT8y3EZ2CGe6GNyaASIS2931CzDI/RtJKzHze6OPxBVfgBLFjCTeQwhnls0n3GtI LIqKgfjn8TjGIBsFlXlMSQg0q5M7D8YoRORVOLm2FRTuqCV81/NVEqglHFmqQggyUkCYzvEJd2QECImg UI7InwOjbx/Q1Vaz6q9nhT+y/6AXXXGjMEVispfMssNThtvx7VttLzU5k9etQ5ogvPn1p+zQzj24+Cgs g7HzCBLEekBiY8/2tp1yejsICV/To70tbPWsLe7R0VYlraPX5W7bvHCBreraypa2esbWDOpJSf4dHoGp 8OMKbAMKklK8gQBBNgVFJpY6GEgyEGE3AATyREgHuQUkGuZTjkDpy9CR9HLbNmMmNRZfseWtn3faun6H bSHYaMvudFtB6r4khJnPPWZTkMRmLtlmS7AVrNyaZSu3ZdvSjRk2a9Uxm7TskI1dvN+GzwMQhq9wl+Mb sYTQdjASAoDQffQym7ZyP/aDc2Q5XrCKJuINqKeoltRXadcmKSG0o45aoXmvg9CEIu5eHBp/qvJMC6lG nZep9mq1YnLsEDCWkpE8FVd2A0+8wV7hBVZ13tCaS8eqhFmw6LdM+EQjXNCHY/E4iOeJgTWqwdDCKFGV mxgAokntKdqyoCui0tO1o8QZlxBkK1ECjOL1BVhUNfbWYaHElnIKQg29UB3H6z44c0SMHjFpuIcW8In3 PZzZjauBybwSj1KPY2ouyhFV3ZGR0ynk6TeXO9PfcgH7d+E6wagX3MOSLoItIRQxaS5DFoNHNE5B+ohW 9SigLABBVPknvq+oGpBnHXrmYVQtKE6OUmRqFGWoZCkFGXlgDoa0CoxnikgUcyh12vMAEhOCmgGgJUy4 ueS4yo97CfIoldjTiAOpBJwMkzpnNZb/QvT6vVPH0dvgWYKS0PdXJ3n5ONVrOA0VbVtnB8YPBjQ62U6K rm56602qG1PynMi/vdTgTMP7UYiXKId+FutQO1ax6ie1fcFWtX/ZViAZLGr7oq2YOYMitqtsLSCxbsIY W9HxFQDhaduK1LAZkDiCWqQkpXIMhZXcUyAlMSlMOVAJdgOBQlAVBAaN9MpAVUBFyKKOQVpWjR0lQenA 0QLbMH0mUsmrtvCNZ2z+S4/bmuGDbM32Y7Z2+3FbOmKMzXnhpzbj2cds0lu9bcrcjTZv9UFbuj7Vlm5K tUVIB9NXHrEJSw8CCPts6Kxd1gnbYQCEyIbQYcg8Vxl6kfo8C79kFupCAaJaxQmSkEhsuqxMR4qsqp9i 6K0YWnUJDNSA1dtte/tuCrFG7dodFFSSystSRS3IvO9e6J/oK2tUokqMJpKKIMBQGatt23eShLTd1m/Y TKjyalu0aBkpn0ejnPc4viE2wAkMEMt9ZQ3iqlcOFkNoVY0qNoUceqkEcS69GFGSQLRNAII4zVbSgmwN 8qr4PUaAtXXbTl4297d+s5dKW7BgKf0RjrgPXenfSm8VqMRqh1SQINaH1dOvq/uIr+kAFBfeCNV1ArMH hn+wPkFzrQL3XgRwaJYg/LNA7iXxKlIRKKj2YGRriO+nBRiie3TgSqyHkFAfIRGoHtyP7zNKA47BIDEn wcN6EfuVZi2pQCTRvyWDMBEAQt2ARHLvg1OLa1JepUA6Nmzl2ZF3Re7VY9t22PrORCm2f8F2DOxqeVQe qqeMXRMBddVlFbRPW2ZbKW++nliF1dQWkIdg17r1lM4/GNyhZLfmUsfi4JrVthoQSAJYVnV53ZLIG0ia NYt6GSttOZGzaxYstpWoFMu1egMam1atJ+nsIHEZ1MnEqCiXseJJlLFaibQg16eAQcBYDFgIDHKpapRN haPs3DoiEQncy8atmFFB6HGp7TteTFxBtq1ZstoWdmlnc179mc16/lGb/9pTtmLVTlu+4aAtGDHe5jz/ U5v+9CM2rkd/Gzdzjc1evs8Wrj5q8zEkzll1xKYsBwyW7LfRC/fa4Jk7AiBgQ3xjYAQInQCEjsPmW99x y232qkPenKVIgHCSlVl959W/kQKraurqXZa9KWeoSusNQOlUs3v3HnLgk9kmk/Cym4i6nbaNF7F123bf 6u/t23c5SZ3QyuqqgzfaUOqyOj/RCUnNTTm/cvr/kpr/qjqs8mP/83/+iRc1VRCQXnpsXQ/17CMvg7v+ ouKbsdU7rrobiejSb4MxUcDQIrI7kyrL0BkTXVc5D55aG2wKJwUI3KNSqwVq8f0pdv/zn/+8/fEf/08v ZOJpyHK7qbCHwCi+nq7p7sYWim0XAo77inpEFYvilT9UP44qILsk0bLqx0ydyNzuhfDnDWAYynzH9ocW r4p7VtwN2xIdGUsO7g6OKZYM4tqAcdmwuCJQVEIsSDQtakOsBsXql8BVY+thyQmpxSHmP6QW10VSggOg 19KIKhT5Ns6mDXkyAUBVtET1N+4nz7pVcBZMl0WQ1I7xw11t2IjR8NDsyVZKtSSPY8FNqkzCw9u22f7l i23P2rVEMjJPKU67H4+EAtcUnKb6DMcJAttFlOOWtettE0E/q1ETBATLkQ5WLUuypInjbFnXN20ZUsNa PA3r129HDTnquRwq+KKqXQqIUs0KRW+WEkiWsWyB7ezRgXqPy7EzIIkQhZiB1+BYehmh3CQkpZTYATwI yYfzAQNiDXYdt1Vrdto8mgnNaPWCzZA08NyjtmjKLFu4cpfNIXFtNurC1KcfttFv9bfR09bYtCV7bHbS IZuTdNRmYjuYhCFxDLaDkfP3AAjb3bv4xuAFESDMp+rykLmkP861fmOX2ry1AEIVKgOAUBUDAt2aryMh XI8AIVYTblJn8SYSwW2kg29+85u4kb7l9I1vfMOZWa3GY9LfYiJ9J/rud79nI+gqVEbJJ9X4kxtT/Rrc /oAtQlWMdLx+r1j8//W//peH3lai/ylc2INd3GoejIkh1DZ2cylYKrLERwY1jxPQxI+8DyrQolXfSVl8 imAURTYAMavn2ouZ5NqUFwRAkN1E96j7U8akAEu5DgIE5TsozLgCUJDYGu5BfQKCRyVsI+9KBGT63iv0 cj1l23m1nQggYqNhiI9oieWI+ww0u0Vj12FCzIUfH0tIHjEakcAkjhzV+Gkc4jGJXMJ+r1G8Ruhr0OLV CJGpD6g0cSFRXS8KQHOQ0XgqgE1jGnl0VDU5FB9RmnGoNRCTANifPZKggpoSFWoR2Hj1pshWEalNcSm/ EJ0ZpAnfRuBRTXyEXIiHtmxzNWAthsHNVE46tnCWleA5kMdBVawU+bmPaL9duw84Ke8kjQhPBZnpfWpl zyGi8xCh3jsAiw30AlmzBlBAClhNbsSq6VNtKTkEyzq9bkvbPG+bli4zRWDux8OgyFKF2acTEJVKebiU vcmWsnq57UAqUcKVyrptpzT8Ec59hKjCw4cLqIqUSy5Ctu06kGk7kjPwIFB1edthW7v5oC1bBeNPnWvT O7S2aQDC1Gcesnm0FZg+f7PNGjTCZj3ziE352cM2sltfGzl5lU1esMum416csfSITUZVGLcw2UbM3WXD 5+6m4vJWaz9iqbsb38C54EbFLkPmUEtxDoCw3OauOeyAUAggVKIyqPPzVTV2pX3b9ZuAAiBwXaqCN7AI 7cHVxy4GBG3VzUcl1lUgVIlH2upvtX8XGOgYbfW3AETNWGQfUMsu9Ye8RIegREBQRNuf/dmfeR8GRcdJ SlBpd2/PFcUrBKOeGDpa9SMJIY5J8OAmHSuXoTweIqksIveAqOa+jINRYU15ISIJwplaEkIUh68Ozi0S wlebJQQV+9DkKmOS1VKDIK5f6N6V+Jqym7jtRLEcqhwl+4MYJkgsoVpvUIlCPwQBSgAv70akduDuypVR Vi3AgudG9+8kF62OEUgIJN04KXtAbJQMElQcE6I6CbENJ66voOdUHIjXXvQ6irH7ODQfcaZvlj5CRW29 D9lRQtOUMFa6F/fA6J48mE3PSkCbQtcBhVgKqxEwRDabUDFKUlQAZ0W3avxdutLf2o8Cy5Qg5aqNgEIS QwQGLkl44R7ZE8giJJtRvSp2L15ga4hHcFDAVpA8ZoDl0Re0CGlBBXQyCb9WeLcYWCHxqpVQrrwQSOK+ KlerZN3+5KNIuntpSrPDNuBFWDN9ii0BDJZ0a21LUCnWTRgFWGwmLmAvYdJUAiMOQZW/96Fi7iR0esuI /gQvvYGK8gpSywu2EtvEWuwA6nGxfc8h27HnGHTctu48apu3HaJf5kFbu2mfrV6/x5av2WGLk7banPmr bGqf3jb1xSds8s9+YvP79LLx01bajP5DbfpTD9vkJ35iw7r0seHjl9vEeTtt+uIDNnnxIZuIIXHknD02 YuZOGzZ7hw2avtU64kxohbrwxkABAhJCVwDhraHzrM+4ZTZ31X4HhKIaYrpPEudNnbmrt9S1SYCA2oC0 cM0Nh6rCfMdueXebW87kIjGKmF9ZbH/6p3/Gyv6nzsz6W59LUlAXIlGsEggwZs6c4w1dVPdf/RYFGF+P JI24oYvKmVVSNlvp1u5Hhpll9VfrdOXjOyioW09z8E4IjPJqSjJaqmZC1G5dLd69zXu0veQeA8VYEIkJ Y4nxJDFoIoYIO9kQ8ISoYSuglQgISt+VhKC6B6oCLdBS8Zi4dZvUDD+/PC3ynET7spmc53pnonuPVYr7 Ivu8ZZniPuSdUXk4uXyD2zc8eygMI4+He3LUXozvQ/lwgEFM5F6DYCQMEoueJzCrvD76jY9LTN6iLKLY vSr3cmQEdgNvLJF5GXQFpiFtRIVb/N7Uyt4pnMeNw7ovr2ZMzULurRGmr4tLlUmdkHolIBOg6f4jOi0P kwNowmcu3YUFIEgRLSqFVwNPoBo1PUFyS2F13jp7mq3BBrCa2oobiCnYRn3FQ9PGWebmzbRjJ9sSXV/Z tGWAiIcnE96tfYn5ys1QrsZBskr3UJBm6+p1tnLkYFuM52Fx9za2tEsrWzdtoq1atREJYoft2nnQ64Tu l+SBmrF+8nhbgyqxqtubtopQ6jVvtbXl/bvb4t5dbfHUmRQGBlxQM9YjWazbuMvWQqs27LKk9dgH1myz pau32OKVm23hss02d9Eamz5gkE176Wc2+ckf27zunW3UxMWAxCCb8sSPbMKTD9nQzr1s6IQkGztnu03C gDhh0QEbt2ivSwdDpu+wwbN20Ndxm6sMrVAZBAZvAgpICHOREOZhQwAQ1uynW9NZesEFleEMEsIVAQKt 3AQINwAE0U3fyoYgw+GtZlVAq74Y/E//9E9hkj+2P/qjP/Kt/tZKH0sJLYDwF368xG91fnZQILApqBYB YKQ2KNRVTVTUoESrkXrnySNxVQzN1qMniW8I+nAUmSeRmMnbAgYBAGS4DC5SdWYOW9+PzqXW7VIPPHAq En21WgoQFJSla98PCH/mgPAGgKDeEaoWrFRwr1IkpoiZVdvYQ+PXEkiIUZRg0yKZeHSfJIPmsnABUC7L HRu5O2PXpz+LulpDwTMTvDjOvJJ2onwIB5nIE6PP3cXLvbnHxH8bjYla6MX36O7V4PXxz7xpiSSQ4GIN HZJCtKpsQcpijF3M8ZiqBqcDlbueo16IPO9pxlNZhg2AgKQFqRL6W4wf90p0gNazCPABE//c96N+CYqS jULQ3aagsn5Rfc8QVh3Cq5WurnL6qtB95MBR27p4oa0b0J3qSU97vMEGAGJLl1cteVQ/yz14mGI1NZ59 WkEimtLbC1TXEDuDsmePACp76dO5ddkSW9K7Cy7H9kgGbWxZL4Kf5i/AAL7OK0tv2bbHdrHa7wM8dmEc Xzdloq0c8FawMQgMuH7SosW2mCpc8+csotDNUrqbJ9my5RtsZdJm7ATb2G615au22rKkLbZ01WZbvHyz LQIQFrCdt2C1Te/bH0B4yiY9/iOb07WTDR6z0EZQSmDyT39o45AQBnbuY0MmrLDRs7fb+MXJNnbhARs5 d68NmbXd+k/fboNmbAcQtrpRsc39gDDHurlRcSnGh33ej6GoJhgVT0llUF9HJwABm4EDgm+RDuRBoNNS bBsQ80pN+BN0fon9Q2mRNnLkGJs4YTIFR3rTpPSfmm0JiRKC7ASjRo9BBCTjkGabD6oW0tUHDhyMCKhm nOq2dCWarGGyaZJIXPXuPcpL8NwEXEvKv5eo77X+4lUwrF6+wkYrmRp1yDbg4OKAEETzOIpQUoZEX4/S JMItBgQBlSQgAcLrr7/pXXtLIkCQqB2vlrEkI2kmgEQLxdeTLu8isQOCOhmLyXRfMrQGhvfWYglMKwAQ 6XMZer3JSAwyun+dLzJEyhaha8iN6x2iOTbRPRz/9iL3poxEjYkAwcHTe20yNgIvH+fgupSqJ+DTuDhA R/fjsSRR7EloeR5LNJw7aonmlbdi1UwSh+w0klp4Tw5AuibnE2hqzJrJQSGEz+sdu3QgrwPqgZg/VGpO KBKrfolU9VLxEeUxKJ19J8bujVMn2ppe7fAcvGBraLm+nq0khuMrl5G5SHHfqOqxKhUps/QQQU176Mi8 aswwwKCzLSaBaFHX1rZyxCBLojL3qlUbbN26rYj+u2wndohkJAPVwty2fLklEb24olcHVymWAyLLqcGx eMlKvFPQ/BVsVzggLF2GoTJpI14DvFerAQNoSRKxBEnbbfGK7bZwxQ5bxHbeTDyC3brZ9JeftgmP/cBm dO5s/UfOt3EU3Jn0WACE/t0G20CKn4wEEMYuSLZRCw7Y8Dl7bSCehb5Tt9iAaduhLdaVgEQBwpuD55HT IAlh6FzrNmKuA8KMJDokqXQa0WEVqAwnKYrijV5vv+egICCQdOBdnCQhaBLS+toBQeXMkRAECDICqtb+ 3r0H6K1wFAMNvtgCqsdm5dL96NHIhhBsDaGhyhfslVdf8/Zn6qb0aYAwABGpihbjJXSyGTNmHBV6Hg+q BVKEiqGqfVgBep5qCKoZhvRLTVoPOWaiqdbihImTTW3M1XZdRUh1fYFYMHp+g8o/j1GgtZUbPIupXhu3 7Qq9EoLaoM5TuqZsJS2A8Mf22uutfBVR9yWVe0+h2cgEgLBbt19/veEjRnozGSUNees0JXpFEoaYbMKE SdQdmML9T7KxY8fbKAJQNm7c4owokBw/fuKnjoeyIuM+AnExWoGTVv3YU6TtrFlz7LXXXvcWdhoT0dNP P0MJtAn8/gTXn+hjPhzrtiQ1qW9yBQsYNCYCWElrLqUogA2mVsNcNWZJHOevfe0vvfWduj6tQuSW3cTj NQQuek8CboBEzzuRd6WtumPreTfggpY6qUjX03RbmjZtpjeaVeepanoveNq0mgUxfnWSPEQAayO5NCp+ UkdafjlGxgLUh+MAdzJu7K30C904fx4SA31AAAWFOK/v8ortGtHXjqxfgxEwxY5TyekgBU23LpyH4bCT LenZERWhndsNkiZNsNV4GNau3uxBSNu37XV3ZTKl/A5Q6n3fnv22efZMW4FasZTYhcXUKlhD8NLSpbgq 8VIsW7kBEFhri5YAEEvX2pLlm2zpym2oCDtthRORhtCK1btsadJuaK8tXrXHFkyea7PatbYZLz9jEwGE CT36WT8AYWy7LjbJJYSHrW/34TZg3CrsBdttzHxsBwDC4Fn7rP/U7dZn4hbrN3mT9QMYumJU7ED6c6dh CwhSWqiaivMABFSGsUts5qpkb+OWX33RyimEIrfjVSSD6xEg3IrUhVsAguIPbhBwdI0oxVhCEGOpgKhc cf/yL98lvjsVRkQ3o7tzJT0Q6uqaeJEzElQBVd/5gh//0EMPYyOgMQohpTEgtKgMX7Hevfs6o8oQKSYW AycaKKV6CIR0PXUX1koh45zEW0kK/foN9Ovoei0lyb7sngJN1JZrfsMrKevv4SNG+3nk1XDd20Hh0qcC wquvtfIeiqF5TBP32+9Tr6duzp95Pao9qyu1gEESilZWrc5SnxKfVQw7ZOgwZxoxcXy/D46HmFHFOdW9 SM8gkAmt14PbuIn2e48++piPQeiKpQawoUak3qMAXmMaPEeyD/25N4mVCiiJT+eUMdKlgwgMVqxIau5K HapZhXOpAnbsbdLz61zP0sk7j1Z8MqbKDqEcGd1f4oIQS5JDhw5HIjjrgKQx/JM/+RP7w//xP+wP/uAP aGxST14AkYBIArWSGhwIsFNQ8r9BbQN8i80CAKpS1S3cjVl0Qzp8PN12U3B2Kwa/DTMm2UqMjitRI1ZL rCfWYE331raWxi7LYejlPVnh3wIIMB5K918xebKtJhBpAWL76j6d8U7sx6twlAUwBTqOtyDFkjdtsvUj B9jKrm8Q5gzgTBhtS0hLXklbvlUYHlevRTVAGljuJCDYYUkrNtpKWgOunDTZlo8YasuGDLalg+nWxNxf NH66LZo83+YNGm6zX3kOD8OjNvnZR2x4vxE2CEAYj2F78uM/tvFPPmp9e41xQBg5a6eNXnDQRsw/SJem fdZnynbrOXETDV43Wf9pW60rRsVODggUSRIgdB02z7qOmme9xyy16eQypJPLkI9hsUxJLpRgl1FRgHAz lhDkagQQBA43sCEIEBKNippcshf85CcPkYdPpyLaUdUDBCconnKKztBCer1kTWpNQIncmmA/+tGPvTdh XX2TGxRj96U3dIGJNYGCgfILzZNVoBA8FgGI9L0aqMoqXAlTenuxSH1QPwAZOnVMDAxhskpKeNAD0gJs gwcPD7EP3ggmJHI9KCH80R/9Mf0FXveGrSpNrnLsb73Vy5/r33Y96kNgsFNTXInuMSC40ZbxDUVm/yJ6 ji/+K+PxeW9Np7LtMrQJ0CSOSyqQJCaJyNU8wED3KVVPjKb71rvRu4zdxTFjxu9MUoJatgWQue52iLlz 5/u7iCU/HSsS2Ohcwajc4lJWkRRJDPLKyFuh1V8g2PK837A/5/70+3btO/gc+ZM/+V9ul4rB4L/9t/9m Oej5xRSfrSDtvEYuYyS6JqTCJtQ8J0BL2wbutZHv1N2pkLLme6eOts3o83vorrwVvX/j0qW2eiDMjqSw Em/ECtyCK2Dm5ej+ywECif1J40fbqnnzbd0qsh/nz7XlRCWuIutx7/IlZG9Sy9CrRVG+DHvDjllTbDVG xOV4E5ZzzDKkqpU9ABUCl9ageqwBENZu2Gmr1kFIGSsAgPltiEJs+7IteON5W/D6szb/1WeocfCUzYfm vfwUockEJL3wpE1//gmb+PSjNqlTR+s7bKYNHTPfJr3xOl6Hh2zsc89Y74EzbPDkdQDCbgDhsA2PAKH3 5K3WY8JmB4X+SAidRy63DlRMSpAQ5lv3UQusNxLCDIwP6UWnaSF93spUz9DdjgDCHQDhjlQGtYV/2+5E gCCjomwIiW7HeFV/4oknWCnV0PMUYnuY3GoDv3jx0jAJYUafhExAveTHHvspARvUP0QE1jni8wQV5E8J TvqfTlJHBAphgoXjEgFBzKlGsCVU65FxKG4rpxUtAMLnnZH++q//2ouPSn3453/+54RVKXhABBSKMRDQ qCqQJAXpzOqL+GkqQwsgUCkI/VOdoRKvpy7N8fX+6Te5HsymzNELJIzFEliL0TaMmwK2wngE5n1wPPSc GltVMaql+IhiPsS8V3ln3bu/lfCceEoY2//BiitGk01E70ZjoLGNx1jXEIPrvD169HbVSPeoc64i+87B OQJ7VwU5VpJfXwxggwYNJv7ku/e921CO/osuTTU0nESSo38Ec+TTJE49r4zUf/iHf4hU8N/t93//9+33 fu+/2X/9r//VUtV9Gk9AmfpVKLpTxk4A4SSkrSojaXtCHg62KhCcnrSYmAQkAHIc9lHOfA+5DKoivZmG J2tnTLWkXkgF6PxL8UgsQ1pYSW5C0vRpAMFa7AR4ETAu7tm02dYBGElIFWu6vmrbCJPeOX+27cCbsZHY gjWcW5GNy5E8VgMiSxcuR1p405YAIksIYFo+qI+tnDgBkBlH9GFrwOBlm9/qeZv32rM2t9XLNuuNF20O asEspIAZTz1iM9lOJyx56nM/tYnPPm7j6RDeZ/AU6zditg0fNccmvfaiTSIGYcxLL1ovPIeDpm6wUfP2 2ihcjsPnH7ZBM/dbryk7rMf4jdZzwhbrOw0vw4jl1pZIxfYUWpWU8LmutHDqNmqR9cLLMGXJdkstbHLD YinJTQ30dbyEy1E2BEkIt+68TSDSO3YH8hgE7AgtgPDt+wKTnn76aSSDRnzi8gpcAvmlf1+yp5562hFf E04MHnsi1GNQHZnVbzExUlFMqeP+8A//hwODgENRi6+js4tBwmT92n36vNsTqFYkH7KiBhXj34dJKcYf MXI0Bp+D6OwV3r69HAlGtomUlHR03pfsG7hPEwFB1xw7doJbqhXuqvZfMSBoJQxuR2wIUhkom6ZYBJVi V8enf/onrofakUyHomKadup6ZbSIV9fhf/V66O7yqMiAKq9LDJAtkZuBebWSy5bSuUs3elR+cjxiQBhF 30p1lT5NvQqtwFLhHHAjm49AQ4z2+7//B3Tffsnb18kGUlBUSlfreT4eGmNXGZBOYkBQ1SmNh1yxP/zR j3xhaDEWf8WGDhuBSlCC244kIaQ/PbdsFX6uSE0RuKvxTlV1vUuRsg88GJgmyUXPK/Xg95AI/ut//T37 XYDgd3/3d+2//Jffpex4nkcClqtdn8K1pSZGIfFyIyv2I8RqBNdlI3PiyLTR3sVpDVmQOwlF342+v3/f Ye8mtZvI2s3Ll9paUpxXjxtuayiGsm4xAILdZhfHHWb1T6N1mrqF71k4B0CgvHvbZ5EqcGl2RtUAJKRy KOchiQpKy+fOtSUYHZdgMFw5DxtC5zdg+qdsDvkIc9583ua0fgHmf9ZmvfmiTWv1qk1s9ZqNfKufDes7 ygYPmmiDhky2IQMn2KjeQ2xMt542ivqVQ/sMsd6DJlifYVNt0Nh5NnLEDJssmwJxCKNffM56j1xInMEW GzUfg+JiSQgAwtz9tH7fQYc2WsCP30LH5x3WesgKe2XgCnt5MDRoZQCErgKECUvxVW61lGKywCoopqm+ CBRVvXhDLkcA4dZ7SAfv2e07AMJdAYIMjCQ3XQ8SgnTZlkjFr7tRSoBw8iQrHS950aKl9uTPnnJ1wpko YvL//t//0P4HyL923SYMhkgI/OZBP79AQ81XV6xYS1vsQ+jqme6mHEL7+HiyxiqDmFMxAfIbCxDkApT4 LZem6j3Wor4onkFAIOasoOV2NZNRqkpqakaCqhJsIR4lCcOV0VJcBWRP4vZMBAQdI8Bq1aq1d9ZRSTe1 nveeFRyv/Uo6+aqFfBnXbL4ez5n2GdfrwvV0nMT600hXnzYe6pGYhNgqS3aKj0cp4zHsvvGIAUGNX8vo DiwdXJKaDLSxBCbpQhKBmO3pp5+zzRT50BgLEAQcFZU1CYAQjMABEHrB4DAx4zFr9lwvi5YICN+jAW5u bhGW/WKCfMqQ2AL4Kkcl7mwdqx9aHNbz/uswYKoB64Oh4X/EO9XC8OOfPEyF676kH++ybTuTCZc/6BWY FB+gzlYCPdlf5AmRNyWuWyE3q5O7LHF5Ugb+0NSRMO1rrhJsWLTAdhGLsGUqNRFIckpeuYTqSnswiu8n H2EPKc/sJ+/H06AIRooC0225hPdTTKKUgH3XnKneY3G5GsEo2KiDgKCVrejbzRZOJax4CQZDXIjLNyTb 4nV4CWYvtLld22EUJO/g5cdt2stP2NQXUAGe/amNfeFpG9Clt/UYMs16YNvrNRrpffRC6ykaNd96jZhl PYdPt17Dp1rv4dOs3+jZNnjCQhvdD5vSy8/aeNSIQW07W49RSzzOYMT8QwDCMUKVj9jQBYes17Q9dHre ab2hXtN22muDV9lLA5LsJcDg5UFJARC6j+BCYxfbxAVICORiZwkQaJJSdw7fLyHLzYCA6nAb1cEBAdVB UYoxIKgktwAhXrG1mmkFFaPGUYtaDeIYhf/+34PYJ5JYmYonQjaEehhTom9QA4JbT6vDc8+94K3ClUSk YqFadbaB7J8FCOrnqFh1TVjvdgQjCJiaWIXEpFqtKjB0Llm6whOUpkyZZqNHj73PJhEDgqSXImoH1tGX 8QQT9i8jNUXPp4mqFVahy2q2GialApNUR1CZg9H1AB1db6lfj0izqVOxoEfXSzDGCoDEwPI61CNGn8QN +6CbM4zHiySBEXOPtTyMRznjc/94xIDQEUu8ztcg9Q2JQ30tdU4Z+vROBAifZ7uR6DvF8asDczb1/8uZ 9LV4fsL7kIQQSp/pmd96S81y6/z5Wrdu02xHCvahP7devfvgVVIcf6GDt0ChCAmwgMjAL0agoncrCUxz YvDgoXgLKIqL6zlWUYIEFt6/bCFr122xDVQY3gIgKMRYz36MmgdqdSbACW3r9L5VAEUxDYBAFLzmgWlE mapehySR40nYCwhOWsaqvpiEpGVd3rCVb6FC4HrcNKibHdm6GTdyFglGFJKFsvJo9QcQVDBvangvtYB1 JQCWz3XVpHgzHcHWEouwav4iW7FopS2mU/jC+SttztKNNmc5rsONybZyyxFbsukw7v1dNnH2Ehs9bJSN 7U/OQY8eRBZ2sUFIvn17DiBQEDAYv9j6TlllA6avs0GzNtpACiAP5O/+E5cRVbzABqAiDBwzBzBYYMOn LAMQhtqEl562cagMfTv39T6tAzEojlhCIZSlx2z0khQbsfAIn+3H7Zhs/abvsb7Tk+2NIWtcMnhpYFIE CN4GeoH1QMQYO2s9KgPts1EZCqmYJEA4d02hy7IfICHced8B4e69d+z2XWU3EspMYFJsQ4hDkuPuPpps sdFQE10Tr1n0+73fc9FPhiW95MzsPPcyNOJlSAQE6eH6zfPPv+iTQCW+tfKoVbvsDfcDQlitFUacy8pU jdgtEVRisvRcxS+sW7eBqr+t7W/+5m8/YVF/0EgZM5Ran6uQaA1AIkBJBIQY5Bw0iiocNM5gZ9C1zl+4 zPU2/ivXC/kdsQ0kBiC50sTgtYDjCVqeJwJCy3hQIIPxOEporI8HYCN1K3E8wv3/ibv5CljtJR2dQm1I tNFoldYxMgLv3LmPeP0U3oX6ZNDtigkvT0QM8rEhWOeVO1XH1PO+vv/9H9znBYltA5IEdb9i+NjAGuZD iwFT70vX74YLUZ6oBuoUfNr7FyBs3gJg7UpmUTjMPKAxLLYdvecS1DH1umxkrM6cJTZCY6/37TEVUQyD 4hm0f5V2hOdI4MuhyQml01ag4y+Vd4GyaGuorrQKqWHjwG52lBby+YXYg5CQymsoRsvY1ZAlWQ/g1GEc r2NbhdG6gJ6dKRRA2X0g1dZvp0LRBtyDq3fYgiRo5Xabj5twGZmIK7amUr2IqkbQvPWHbPKyHeQTrCYW YCmr9QJE+HnWfcxc64pE0I0QgJ40TepL4FD/Obts4Nw9NpDtgJnED0xdYwMmLbMB4xfZICSDQZOXYjwE ECi1PxGD4qinf2pd+k227vRpHTiPMOWlR21UUrqNXJpGicR0XI+HrP/MfdZv2n7Ot89eG7rBpYOXkA5c QlAuQ5ehc6zr8PlUXV5jx0jBzCzHsIiEUHOaCLGr1EK4CSCgLty684Hdvvc+gPCe3cGeoEzHGxEgxOJi CF3+govasY1A+r9UA4mlsgoLCP4L+p8mVhKt248dS/NVRAwu9P56goQQM8AL6LaK/JKBT6tdHQYtidSJ kyeI739ibdq0Q5fX+Zp8tZClXkarF154wVfFIPYKrGRg/IKrMcGVeb+RMgaE9h06uUhezf0lXjPo1MFT 0hUDjxhEK6bE8jpUgud/o+sFQ1zsrpW00YHrFbKSioE/CxDUhFZt4tXaq4jxkIFPDXNaxgOvSzQebel9 IMaRnu6A1myMVWRp8M4IRA/Talz9J0ocDE46eIjBQjJXWPnD836e5+3u1xVIxp4IHSePjSRCjatAIDZ+ /k83HgfSvhYHqXcivTONXznMV/8ZgPAsEqIarOzDrXeMDMZsKjwXUfVZLscaxqlRXiyA+OwlgQGBUDD+ RTxgl66xvQ4YaEvMzKXrhKdfJLmqocHSjtEKbTql0KiPuByvwkrcjUkAw2Yanxw9eMQKSlFDmDd1qJu1 xFzUQTXETMi1WY5qUkRhlhyKmhyn69feVGoVJKfa8i37bQEgMHPFXpu5fI9NW5FsU1cdtJmULZtCCvKk NcdtHNWKhlG/tN+srfbWpPXWacwaazdqlb05PMneGL7aWo3eYG3GbbP2k/daBxi349T91mnqHus6aat1 m7CGbkvLrOdY1PwxwfbXZ8hMm/Azkpp+8G0b+sRP7bU+BBmNWGddp+y1HrOPWp95qdYX6jkvxTrNSLG2 k45YmwlHrNXkw/ZE/832WJ+N9kjvjfZwr00RIAAK3dBPhk2jtyOAkEE5pzz1ZVD4siomYUe44dLBB3YH QLj3NoCA2nA7AoRPWsH/1I2FsVogEPg9lwiCIUjfPf/8y7aFhI59oL10bzFTA7qdjJCfXBH/yF586RVv bSbbgLIepQ/LSNbiZQiJRppwYgAHGFY4Wa0VXPODH/wwEpNbJrXARr8RQMgL8Nxzz93ntWgGBFZYBwRE 2ibsAjFgJTKIVrjySE+vYUX5wQ9+8G++ngDBV3SYzQEySgeX5BUAkvEg6EclzKUaqQpQYIjzzdJLULda JCaF38oOIoaLPQexAVDP3wWGzEIyUAn1Oln8JeUgXgcvRzAWJuapyLCbx5hUoDbExt3YLhEDQvAOyRsC 80deohgQ4s8EDPpMQUYSxyVxOKhFnp74eZ9jQdhDSvIxdHgVNS3hmWtwV9YqmIt5cAqD9RkHA3o/XCGe 4QpSIaAgQBAINNMNwOGqPA7nqFZEm/TDh237ovm2fuIoW0ucwPp5s23n1h129Dh2GbxFlWoYQwxDDeXk qkiRryAZq5ACLbkUd8ksbbJjuY22P7PGdpCmvGZ3ti3bcsxmrT5AVaJkxPQ9NhLP3RDyCAahvw9Cnx84 77D1n3fAes3ca12m7rL2E3c487cas9VeH73N3hiz3V4fu8veGLfXWk3Yb29OFCXDwDut/biN1plejN2w D3QftRCiJ+OoZfZWH4LWHvu+TfjBd6zdK93tmZ6LMRJustbjDwAqx6zD9FTrOCPV2k1NBQxSrfWkFHtz 0nF7Y+Jxe7TvFnsEIHi49ya2G5X+HCSEbiPm2JAZdH/Ow9hFK7ccVbM9BZqqfJoA4TaAcPd9u/P2BwAC wHD33fsBwVeHkK6sF6zts88+53EBTz75lNPLMLVCmeW2Uby3ylZ5MI/EYya/wOCsW5lDPYSvIG38qeuQ f2Qvv/yqvyT1OlDGo1avs1R+TmSWREDIyy/2FVZW+gEDBjb7v1skhM97P8JZWNHl3ZC4Kn1Zq9yDK7Zq HajfgEqNf7qEIBFagBAMgf37D/jM68lqX0y0pVyydXXheokBXbGEUACzxRKTVJTY8xEziDoo+6RFlZFL URWvzzwwHnFYtQye6S5ZVeG9aHggSOhr7rLs0KFj0MP1HqRmoW97OPeV683GQreZRNKfxiQLkCnBsBYH dyXaGl586SWPVpw0eSo0zbtqTSW6cNqMWWxn2MQpU4m8VPTlFJs8dYZt27WX0uoYgVFRXCV74P2/8OIr VAxKo6sxTXPw4tQSV3GCd3uaMPMzkIKaLlxWERuIe5aEcBkwuAwYXAYEriEliK5Cl/nuHEWCJc2Vcf8Z WTnEEBzHmHrAdlNL8QAdvdIo/loIw5fCB2Wozwrnz0OVTqca8nHqGx7MrrXdaZW2I6Xc1h+mozKVjVfQ BGURRUxnrz1iE1cSDLRovw2Zv8/6LthvvecdtF7EAvSYdcCp+7R91mFSsrWDWk+A+ccn2+vj0OnH77PX x++31ycehGEPWCvoTb5vO57aBWPWWhcAoBvqfTfU/K4j6cdIpGGvzoNs/E/+0YY/9EN7oc0Ee6rXMnt5 yHZrPe4wgJCClJFm7aenWTu2rSamct4UB4M3JggQtrpkENPnOg+eHVQGkpwGkkJ5NK/J0inFnqMyakgI 55AQrsnL4IAAEAgQ3pGkEADh+g3VLwgTViumGohKDPwWXodNm2mySRTYVizXOyhJtcstwwcAAkI7Dx33 VFOthFW1rPi8nLOIp+cQ8UM9BbkSv+Jip2wIAgTFlCvzTNF8MhCeY0IkHhu7Mlu3bkfVmaLgykLXU/2F RL1ZK5gMmdm5BS5JyB3onobIwxGLvXGchHRwNSGprpbX4pSvsOH+gnqke5RnQF4SSSMP+tv9eg8/zGpe QCQjHaTLELWRImRADatqELO1osc6f5BI0IsBGDFHOKZlPF4CXI8BpjJ21iLei4kFkPF4xMcqLkMu0dQ0 XKKcU8D308cfd/DWyh4/i7w4wYZDsBGrrWwuVxC5LzcDQshkjUFXY6wOTTrno7iCAyjofAFgnnnmWU/2 ys7Jp/BHkatwRRjligDDguJSqhAVWVYOjUuRSnIJa5fFvobxECDEz5v4/iUhHiGyUJGN5W4vICwdIIiT oTy7UjkpoggMrgAICq0PYKDgKUVUqjIXx2BXksdBFbTKqXmQh/0njYIoKXT4zqTeYw59EArV8BgQyCVY 73jhadufU287j1fbhkOllDTPt0U0TZ1LvcKZ1CqcvjbNpqxOtQmrj9jYFSQSUZVoEDkEAxYQHTh3n/We fcB6zkEyEM0EFGbst67Tkq39FEBhcjIr9z5W7QMw6mGYFpp8xN6ccsxaI9a3RULoMH6bdR671rpR6jBI B4CC9sk/GMLiMPEHf20DiDp9psNke7oPXoNhu+2NsUeQCtIBhAxrL1CA3gQM3kRCaAW9Dj3ad/OnAMKQ 2daVQIYhk1YHCYHw5WyiFUupiXABQLh88303Kt6594HdffdDuxtJCLIhKA5Bk0ATLEzCsKLL67CVZJDd GIH20dXmMC6bY/S018TMpPhENoMvI1ylXi6TQIa4kJ9/0c8VR7vJFiEf+UsvvezutSIMSGIASQinAZD7 j5Wq8sfkI+ACJBJNBVjUabh5skaFW8TICoWWS0yrtVx8yqOQ67HF367CLMraVPETdHB5LViZZGiLPSgt wVX/yw13Ahe5NOPr/aUDR8jW1PXykVqUixGkEaIHP+V6EqWbdX7cegKY+Hqy8Msnr/F4kfEQIBQyHtKh fTzwaiiyL/YGaOxiMFX0XI4McDBe23btm+tU6Nzh/H9ugwYPcc+GwPYi6oLA4PjxtGYJIVZD4mQutWDL REqQ10Jjoeu2nO+rblAVCAhw9cxSuaoZ50rAsCxy2+l9DiBuRLEhtagzDQCgpLgH3/8LxIgcQyIqkHHX vQkAoLIs3VioxDQlggUwuCIS40cA4GDAd9eQeK4pzFqJbsqgxA15iuS3BtzS6ghVWE4/BLxs2VQ+zlTD IqogHy9osv1Z9bb9eKVt2F9qy3YW0vkoEwkg1YZRdGQg4n/v6fvtLVb87lNRA9DbO8LkHfms7dQD1nra YWs346i1n3XcOs3OsE7zCq3z/LJAC8vsLaj7glLr5lQJVVnX+VXWhf3O82naO6/IuvC77tMBEWwIPSes xW6QRJjAGvY3Wd/+023sE4/YhB/+nfV69nV7sfcye2lksr05NcvazSmzTvOrrRPn7LiwyrdvTs2z1yZn 22tTcqEcbAefAgiSErqT5DRg4nI7mFfvgJCrrjJEK54hwenqrfftFraD2/c+ckB4+12pDO94PsOVq9ea XYtaLT3GnAkrv/QekpuOkCCi5CbpugXyRyO2Kq20khgBMbZiA6SvnlM5NfVzwHATuynj8mSyRciomCqV AfFeqoD81aLEY0MA0x+SKPW6V8GRpb4CppLRMJ6soXjLV+yVV14lmEUNWAlgQtTXir2NEm+xhyTWv2Xv kMitfohqXSbfe+I1PYIOiUj9CrUiyrUWh0THjBxfLwACICgAgjlUUu4zr4dxT3ELklw+bTwUQBQYhEat 7v1Qd6lPjkcYu5e9UEcWhT8KaHU3e86CyJgaCtgE17Ba2X/FfvjDH3oSk1ywCtRKjC8IK/afuQ3o5Vde xyNBoxVcnlIHJE3FYco6TiQ39JIlyxIAkMhRGekAuSqef/78xe6h0BjOX7DQY1AaGk/c/7y80/j9H3eV MaiXCogSQyv3QSqCwCAAgaSCmCJQUOJVBAZqI3DZK3krevG612aoJQivou4ixYXPWTagcLzwFHzQZHsy eEcpNbbxYJkt21VIT8Qcm7omg34GqTZo3lHryarfffo+6woQyOjXaZJoL2rAPmsz6SCr+yF7c9pRaz39 uLWdlWFtZ+dZh/nF1nEBTLqo2jovqrG3FlXZW4urrMfi6kDRZ90XlgMMpdZ1Tq51n3nM3pq6m/iBTdZr /GqnnhM3WM9x62xomy428aF/spEP/cDeaD/enh202V5BMmg9s4BrAQILa7kWxLY99NqUgggMcu1VQOHh Xp8BCPI29Bu/wg5T+z2lFAmBwSmmdfsZ2rhdvfmB3URduP32R6gLAAJ0FxuCchkuYciJE5S0ImmyyJsg Q9QB8svTM5UBiPEJN6Es0nWs2KoMrAkso6BAIFQyQhdEVG3CdSQgiMV1rXCKVXgeK/NRVrlCVAa1C5No q8zGTxzLtcUAR5FGtKoXAUB///dq1f4Fn7CicL9fQJJ402YTVDNv/kJfNSUdBOu4oij/xCUdeUcUluy+ fiajQCF2p2kiK6hKx7zyymuspqzC+N3/7u/+7oHrKdw3vt48mzdP1+vwa69XDKApNqPZVafrReOhuAy5 YAsQoRVvUU+oczwesrv4vfmxf+AxC2rPrtb1+ZyzEMnsO9/5O3+OkOx1f8JXnAUqdebBhClJTTqvjJr7 KDUmUMrIyPWMU73/ON9E4xwnN0ll69y5C5LAIOtPUJSiVb8JWMRgqjmj4KbKavo7AoC6rwffv573uEdP Bu/LKdTF89g5LqnUP6pNLBEEqUA1IkjbhvRdaAcQUq/V50MFYppIeqqhsngZ3rSCiguWxZw/nH/akjNP 2NaUalsPCCzfVWyLt+XbjA15NEZNxUCYYkPmHrK+sw9ZT8KAZQfoImkAO0AnqCNg0AFqg4gvY6BsABL7 30R/bz073drMyrZ2MGnHhQKEOusC9Vhc0wIGDgqAw6IK67GgxN6al2fdZqUifSQDBkQWSjoQILDtOWGD Deg72cY99ZhN+NE/WM/nWmNMXGHPD92J/SEdAIqBp86vJeoIvT4t11536SDQZwKCaiv2GbMcEamWDtCn PXy5mLzyM/RiuHb7Q7tx9yNUBiSEdz6ydwQIRCyqxLrCkd1izCqZGGOgySTpIDevkFVaWYynKFaKJMDx 0lHP4aNXOqs3P0H/O4tRSGKv3IlxcZUQTquY9d/zwBQljsioqEkjMVlJO59+7At2kFblGeinyoGXX18M rgmoSRtcYbrnmOT6CrkSD55PHhJJJ/L3qyKSjIv3HxNcqWK6g9hFUrGCi9lj//onrxe72n7N9RzQuB5q yKc949OMx2G8DLk0WS2jL6IqA0nq+vTxeN5bt2dy/0rPFqitTFob2WhCwlechNWSjBTcsInJSF7rIpIA n38uuIFlFJbBcjcxEV//+jddZQvP/r+ag47i88dVtFryEuSO/u/2B9BkAsOKqYJcjKvvvmdQuLLePx6g o2m8/xIAASlCrQTP40m4DABcBgBEVyISIOjviyr7ryrf9BFRavUZSQTUtlCZtkrKwudVnLM0PGqHcxpt e2qdrT2EJLC3xOZvz7Npq7NxD6aRNnzcBuIdcBDAh99j+iHrPP0gEoGIfdSCTlPkFoSmHLB27EsyaD3p EHYAJITp2AFmAQizslxK6IiKEANC508AQgCDnqgPPeYV4DJMBwz2W4/J25AI1jdLB70mrCc0eamNaNXO Jj5MePxjD9lr7cbbU/032Isj91mrKVIXSrlOTTMYxKDw+tQWMBAgPJpgUHS3o9QFUVcMi33xbR6hFvxx 6sRnUDmpEFHqzGVKsN/6CED4GLUBQEBKECDcESAQg6A232Lc2MUYuxdlcT5OWKdEaA9JRS+9IMu1l9WK t6ECs3L0Pc8dXU4Wc58kCTELclU+TafgYxS3UMRbOXp6FSnOZbi8Pu3Yp2CWQ7go0xG75abMRlLQ/eg+ w72G+41/q2spYUYrl/YFQnG8hFylStNVIIzasWdTbFPHxven5/3d3/2vJgbdj6Vaer2kia99LeF60fg8 eD15YO67XuSa1fWO6nq4Y7OQOBKv53H8jMdTTz1D3ABuWIx6AgSBYylZlp8cj3BvR8nEVF1AFRatwjiq KMM11ASU9BSvyJK2BAgS92X7+NvvfMcWLlzU7HIMBWX/2O/52WdfIN0XwzCqmbwNGYy1Apv++q//xu8h jPX/8EVCklYLtcSkONgDphrrMeRv5BUQ6oyBUQDh4xstBnreZ/BYpWZmUbKcGg8nTnosgeIMHATU88OL x9A3JKKLl+4gQdzBznAH4+NNVw8a6Wau+o2l9H2URHCUvJ3d9DzYeLTSliWX2uzNuTYmKdOGE+o7YO5h Vwc6y6CH+N9xsuIB2E49bJ2mHbPOM9Kt88xMRPo86z4PW8ACaFElDB2t8qz03Vnxuy1uWaFddI9W6we3 nV2sr7HOC8qtC3aGbrPSuT5eCZKRpB60qAoAw5hVNqRTX5ugVOeHvmtvvdLFnuq9yl4YshVX42HrOAs1 A3WjB+pIsyoSqSSxZBBvH/lMlQFAULz0kdwGS8WqmgF6FlAy+5QCk25/bDfu/RyV4WO8DB+jMnyMyvAe BVcDICQyUJxwIut1Rka2G/YakQ68Ug9lsVSBR8U01AFKYpwqGXmVH1QGZRPWAAgPxi38l//yX5AQnicy DbFdOjiTX63Dy/FFJx6rRBcdKwY4AgMo5z2P+gRaRXcR1KIkmvj4AFyBQqRcD4+J8M9g8Pg5dE5dW+pK pgCBVTZk2YW4iviaT5EHcPBgquvUaZTe3rFjrxtWP+16CsxR0di9FNJ4MFGn+XpICAKEz7qe8g6Owoz5 SEzqnKySX6rn6PcWAUt8b88+97ylU0RUgTwhgIkSY6hc8mIov2ASufdt27bzVOTHsFQrknMixVhqsavk 5hVEwVyhNJ4Y/L/9t993iU25/wqMkhSWh+SkoCYtAm3atHXbg549EADrIBuAtjkmhfH7m7/9jrXh2qmE CWfl4pEAFPR9YtyK3umzSAgZRBeWV1VhhD6JdyH2hESdtKj/eeUKMTM0JxYYnBNdBAzOMUcJsGsgnb+G ugslqMI5LHiHMRbuxVi46WiFLU0us8kb82zMikwbtCQNb8BB64Y6IDVArkGnyQcAgyMYCwEDVu7OswCD menWC2DoPTOD6L9MwoLTbcC8HNyMxdZnYan1BBS6uK0gERQ+bV9gwHELKgCDIus6OxMwQBqZshMw2OgG xF5EHvaasA7aiKowkZyFx912MOyJJ+3FrrPs6QFEHI7AfjElzbrMLbLuC1E7fgNASHQ5RhICcQiKRUBl 6D1yAf7VRkstowN0xRkkBEpbEYdwFTC4+bYA4edICBEgEJwk0UwVhOSuKygo9ESPQ1RIOnzomKVI5MXd pNh+uf4uAgjeiEUlwSg2elkFXFXPMGr1prhzWcnVRKMUO0Ea3oiD5JfvJdFmH9VnJB5rtRTAyKgkfVl9 EFSQ5BjeBx2zB7F1r/zIhN+mMVFVMaiECjlyzeXi1TiO22rSpGmexPPUk08TI/EUWZAD8ITwO10HQNiL W1Tx/Fu37qZyLq5SCl9IFUiDocScqneQiYFR+rsSixQ+LFfqAYJm5EbNzCx0D0oGFZp0zMSJ00xg8STX E/XpMwBw2u8i9l769O3W9ajQq+t5jD7fHeC5UwCWLFQGXS/Dr5dGlZ9D/r2MteobkIqoXkg3Y4XtVqMy SFJQ7f9juGfV2GaXXLw8l34rSakaAFXqbyh9r7qIqj1IKzUYv6KiGnCg0rCyP5HA9FkNWaCqphQCjUIx WUkrYtZ+/Qa5GqJ7VHyDohuL8GBk5Ra6XUH3t4b+Bf0HDHbwSCRlqvaj0MmefYo8PGJHUsgexNaUg3qp ylo5gFBKWoYdOELVoYO8zyOH6VOQYnmFhTxrrd+3MmgvEZGoUm1XmE8XSdW/iDR74dI9VNG7SAS37eTZ W4Qa37BKDIZldI0qJJgoo7DR9mXV2Xpch0n7y9xGMHldto1ZmWEDFx23XnOPIKYfQDLYZ+2JDWg/gXiB KYesw9SjAMIx60KQT89JhBMPWWLDu42wMa0w6rXtalNad7KZb7a3WR2729SuA2zygKk2mhTjnrNyYHRW /s8EhUQwKEbiyLbuM7iH2IjYbDdY5+DQZ/hiG429atLD/2JjHv6RdWjV357qt9ZtB6+OP2adIunApZXY UJmwfVBC+FQbggBB1ZcV7HCYyKu0krNeSq2AoIzTauV270O7/s7P7ZYkhHsBEO7hdVDVnUs0fVUwTjkT Ih90V5m0LKoW5avuPZ81ou+doRqO8gmuqXQXZdyvAQzXEO2uIS1c44UKWFQ6S27HJspqV+Hek98/HQlD WXep5PMrgUWZhB6zjgFNhsla8gZK8RBkitlZLY+wih9LIajE/eMyyMlI1UjDzkafsLkwdCoivRg8maAo lXhLTj7izKwKN0cwvCka8iCisPRj1ecXUyvDLQ8pQwbNQpp25KvJBqu3GE9MoeKbKtEt0CnCii/S9XWM DI1ijt0wv5h5r4pvAiQHWF0FcsodkOgtMFKFXiUWpaRnE5qrLMEK1/kVfKSQ7aO4+XQtqQopPKOkn0pA QN2MZFRUKTHVdJQrMIV7073L9uFZmEgHNc15Fpc5JteGDRvOO1LpNhkkmzhPPWArkk1CTUzyPYYjjj2Q GqAVXirS6tUbeDaMfBg1FSlZg+RRxcIgz4hiE9IwNB7nXRw4fAwgOwJQA7aQQG0vtG//YSItjwIGqHbc iwLJVA+jrLzS7Qi5+QWofNnYZBj/DOVr5AFWqAsNBE5hazrPQiT188olgcFtOwcgnL34Nu0H75JrcMsq m65aPkAgO0EqPRL3ZVbbzmOVtnZfsS3ARjB9U7ZNXJ1jI5elEStwxLrPPWbdCfPthATQcQqqAWpCh8kQ KkLHmSmoBykYEY/YMIKDprTvbtOoSjQNV9+M737DZn3/2zbre9+0qX//VZv811+xSd/4sk3/p2/azCef tEldh5CXcBiLfwVuvwd1+lpcj5IMpCbEYHAUMFBG4ub7jYiSFAhxHta+h0386Q9s3CM/sG4vd7Xneiyy ZwZutpdHH8SlmO3SwVsLpbp8Ul0QQHwSEFqCku4LXVZtxbdIt0wtpNtt6VlSoAnRpOnrWVSGq4Qt3wQE pDLIhhAA4UOClYJhUZllCunVqqLVpVKJR+yH4igX8PkiHcDw1wEBJxUMpWWbA4SDhCoKY1vgPIosPEHq cDXuPaUnK4++lBVeYbeqEeDlzBShph4Bii+nIEa5SmXj6y6AgQphktJipTQrroCim+THi5R0pLh3ua1y YZh0mDydVdi30tWxDWTllOAeLWHLKgV4yFWq+gaFXF/XqEIsr0Q6iQGmAAlEQKFWX0WU8FYPAJVPUwk3 qTWSZsQcWcREpMLkCqxSqm4q0oakDNX/F0gpZFiAp4KeuTBGobwLjKHOIbG+AilLgTv52GNk1MyFCZVH UM7ndZ6SHfo4NFB1SEwvIJTLVfeeh1uymGIxUsXUr+EchtwLgPgauheHvhlfwWPwomcbrli5yjMxVRZf XgHZA+JgL9kDpBpKTfoHUq8VZZoOKBUz7sp7OMG1VWNR4ecC4VIBA9fORmJQWTuBuzJaY0rj70xUhBCU RJwChuea+kbeJ8BULxWohnMg4ZUqdZpaB5xPkuhJvFAKSFM688ULKp1/k2jFm9aARFB/7o4V1V+zVObu gfxTlpzdZOsOl9m83QKADJuwNtWGkPnXe/4BN9Z1m4i7EKZvhwTQfgox/oT2dkAFkN+/y9xs6zo3x7ot wtq/pNIGzM+xieT7TH7qBZv8j39lU//p6zbjJ/9g0x//CXkET9hYku/GETw1DmloEmAx/h++baO/+kWb 9Pdft9FdhgA0WdZhXmULKMheABh0W5Jv3Rdl2Fvzj1mPOfusJynLvaZiNKTJSu9JK6CV7K+2PvRYGNR3 tE146nGXDgY8/7q9/NY8e37AWntt+E4Cm46jynAu4hs+SzoQIHSYTqBSAn1CZQjqQqDu1FRLLT1pWRgU c6vOW3E1LhoZFYlSvIlkcAspQRKCQEGAcBs7goquysVz0bs6qxMQTVQUJCMjopdLVwFOJAIAQH0bvQUc LeG8YjP710WAioOCGxhxQSLSKo1VAUtyL2qSqR/DaWwMSmOWvUGhqiLVHpQYrLqBkhjEEDpeNftVB/Es ufHnogYsOod0aDGugKbESXURaoOxjZWuGjWkEjBSxx4xYhUMqXPrt3GPREknUlmqVccPphVQ1XNe78kY d2/m/hVnIX97KecvBlQURKRgrFLFYgBwKqSi65ZrC8lIKltANR4UVQpuIE6/gViLOq4t/73iDaoIaJKU pDh+1SL0MuhIVqdllFUlYle7KCWma8NAOpdSijV2SrqSpKYQX/XMTCzv5q7YqL5lcKuGxCR5DWSElf4v MJAbc+aseV48Nwdmr5ZKyH2ej/oyeDVkriUbheIKFIykTExJDsVIAJIC5E0olXrC53qeeqRIveuTzJ1T Z4gvORO/e7ILee4GjNI6n5qzqAv4GWIIzikT9+yNAAZnbtI24JaVn7zJ3L1khwrPYCxstF1p9bZyf7nN 2JxtE9aR7bfqOPkEB60vHoBuhAN3mLAH+8A+IgWPORiIOk7PJIAoCzDQaptLjECF9V5QYJMwvE//wT/b +L/6Opb9H9vI19pZnzZ9rEv7UfZG58n2Yvf59hxBQc/3Wmrtuk223q93tTFP0nT1b75k45941LqQn9B2 ViGSgkABqYBAoc4Y/rovTMO9eASPwl7AYGsCGAAEgEGfyUn0TFlig/qNttEvv2gTfvojG/3Yw9ax9VB7 vu8qe3noVntzHJLMjGzrNrf4X5UOfntAoPpyRgl5DHSAFiAUInKdvYyhhkjFG3gYBAi3AIM7khK0RW1Q ToNKq4mx3WAoyy9BItpXl2QBgZrCim5F7d9u0i/yOqDg7eAEDirpTkyD+44VdaYa/Kxi3v8R96SCltxN CVjIQyHjpDc9wZ0UF70IEyUqhBo1IlH5dTUz0fYcv1WFYDUvaWJiCUTqFcsA44VekVFpccBMBT+VG6DG L2e85ZmqNyteQhWcCZ7iOqFRiAqvSFIJTWFi8PHOSs6god+kKjbJNiKSxyUAHLEYWt1JStK1tbprldW9 nVQtBX7r7lnca5KaQncqFY0NPRZOeol5tZhTjj+rJfq0wnhVylzgcIp71jkUzRmXSg+l51Us5AoBQ0ui bMPg/nzQ7SrjoYDg993tF9QESQgKIU/GTpOGGleCxNKoyEbGXu9MJdRDZ281glGfBe7zrNrHAW4nADAS l+qRGhsAKIUoN1LrQePsz6r3S0zLBSUoqbqW4lK8a1QY61PEDah0+8kzBBSdpiL4aaTS0zfIQryGe/wK DYYuWGblReJoTtuO9DrbcLSGEON6XIhFNi4pw0Ykpdiwlcet78yDLpLLYNhp/B5i/Q9bG2wDbaZhDJ0G IOAa7DIv18FA1GNRsQ2dtNsmURJwyl9/2aY+/5T17k7QVq/F9nQPiv70WmFP9FppT/ZebT/rs8bpSSz+ P+u2yHq83NEm/uM3bMz3/966DVhsb05Ot/ZziokeLI1UBABnrvIbdlmv6agIU9beLxkACH3ptzCk5yDK oj3rXoUxP6UAyjOvWKtuM0hg2kwyFLaOKRg55xQQ8Vj+mapCbE/4jSWEbspnoD+D3DF5hC3nVp9HB6P0 2dV3kBAAgzsfOhg4IBCLoPBlJTnFiU53qJNwWx2g6fWoCEZJDl5EhRZwt1R2LeoM7XUZ9ZlT6PHgQOEV nSUxEA6tdvJSKyRZJDYOcQ+FrMlRF2p1o0YFkevJm64ITOR3jhubRG3bJaFcliETAFFvAW9bpgazioX3 yaveDaycDiB4PlQ/IeqMpE5Il9R3ku3lC2ocEvoEKNdeoOUrbtRAROKrA5B3gZJIG7pKnROYMOnFIMo3 CLEYAheuq65SUpW8qk/UDEYM4T0con4G0X3pOO9UFRX+aO5G5UlIIjVqiTo4uQdH9QDC/frz871+r3uZ O2d+cGe6iy8muV/ldlVsRYj/iDNUFU48evQEbC8H7Ti2CRn/alDLpK7ovuK+DBr/0DuC6xMnIGnk/CWe Fa/AWSSUsxcYC+2TXKQEIx9D3av/hkA3PQM2gYtU/L6o8fZuWjcAhmt24sx1gPEGQHCNNOSrVFG+TKm/ y4QYn7VDBWdwmZ+xzSm1tmZ/tS3dXWZL91Cyf1W6DaE4yIAlR23A4iPWbYYiC3EhYifoROBQezwE7ZEK 2gAE7adnuJrQZX4e2zwAIcd6LMy3UdQcnPrDf7Qp3/9b69uunz0DEDzRM8me7LMW6/4me2bQVnueZKIX MOy9PGy7taWuQK+uo23UM0/ZuL/9qg1nRW/Xh+5I4w/6tbrMzsGTkGXdiEDsSZ+EXtM2ulrg6kGkJvQh alhFUEZ062XjVEz1ob+30agi/V9sY627TKXs2Tp7fRRJT1IVZuH6/DWqwm8MCD3HLLaeY5ZgsIAQTTLK FLZ83vJIbiqgg9OV2x/YtXd+4RLCnXeREFAV7rytfIYPAyAQkyADoxOeB21VQOUekoPCm++gVihmQXUY HTAAhNvUaQykqksAgoNF6PfQXOpdgKKWcZImotbzN7R1dUMNaFX1OUgZ1x1M+JwKTvosgEpoNyfJQ+3p vdGJgqzUN0CeDvdwxIATuiJdRXW5ikRz1RvQEKHJ8bJ5uKSj33mpcRlBY+J4ZwD5wkOjFD9P1A3qCr8P nYtC9t1FGCTE3QcJp7nTEftXYGQlEym6Tgwlv7oalegcuk+BWnNHJG+eomsGJvLreucm3R/3L8Mtz+8G XKlkPIvGRFKbVDgBkuw7qhTVr/8gX/UVQhy6Zakqcii7rtgPRWnOmj0fg+g+N3ymYCSVwVh2ohOs/BdY 2RUNKFvSVeJSZBe6Rlm9ayS9XYWuXMMTAHldAsLcNQZxarKCigTmYcyVF6NQeHJnMBBeanYd3kbiuYmk cQN16AaFSa5bCQtVIen5OcQTHCSycPW+Wlu8o8Rmbyq2EctzcBumwiQYAmdhIITpOk0nlwBqRxhxt2X5 1mM5doGVUFKpU/eVEa0gn8CpJNByVvO5pTa89zSb9qN/tPGP/thavTnUnuixDMv+Orfsvzx6v71KVuHr 448SnXiUQkPrbBKeBvVXHPfP2BF+8PfWu00Pe6UfLdNG78BjccS6zDgePAlEIDYHHeFa7C3XIpGIfUha GjJoEv0WiDV4jtJqD/2Djf7pQ8QbdMNuMB8A2mIv4GJ8bUKKvTotx1rNLrHWREC28ZDof93F2WpGviXS D0l5TqTPCQxiQOg9fmkwKGJDyEdCkMpw5c7HdvO9XyEV/NLuvofr0Y2LAoVIQnBAIOnpnfdRIwCEtwUO MSAACiq55gQoeJFWqRiqyRhTAAUHg0h6EFDcdkDgc2f8sFX7eXWO0uS+7UCidvSSRNRJKnSjFji4xNEM GOF4ZwpXVSKDpn8m+4WYRaCj7kfaD3YNTc4bhG1Lpbmm73U+qT/RMdq/6cbRQPpbwOHdizTJXZKRCgWz wiySZFq+l1QTfYe040wU/47f+j3q3PqNt56LOjRF2+bWbX7/Or/OoXsWEAQ7jffgdHAMUpdI9y4QkTgu m4hqPcqbIy/KUbwsB+grsB/r/z5UAidclvvZHsQ1eAwPTCbHFZOdWkOkqPJILrDCuxRHNuF1ge4t9un1 6VvAIQBsyC+4wjGiq4BF2I8iC/WsbmgOYHAJMLjgAUXED1y4bY3EETScvU7z4evUIrhqRbUXvcTfsYKT Hkuw8XCNzd9WbNM3FNmUdYXWf1Eaqy+JRABBR5KKOogAgna4DdsSR9B9ORGAERA0gwHM3/1BMOCzrsuK rcOcEhvcY5JN/u5f2dhHfkheyxD7GSrC82QTys3XalqWtZmeY+3R4ZVNOGTADJvw8Pdt1A9gYq3obbvZ G90n26sDaJk2apN1Jt+h29R9rrb0mEyPBOUnuGsRI+KYFdYXw+WwnkNtCsVWxz+GwfLRH9rIV9+wzu2H 2/ORR+GF4XvslXFHrRVehTdmFdmb8yocDNp8SmTigwDxWwFCH3ozZFZGEoJsCHSBvnaXGIT3f2k4Guze h7/AjoAx0QEBICANWlLC3WjrEoNLCu+yfc+Dl2R4lJ3B6ydIrVA5d1VfUhXnGBSQHCQ9OBDEJEaHCW9H qsUdSRTNEoZ6Q0T9IQAaVYK+eQfAiL7XeWPV5CYZmQKI25zrluwYDipSZYKaIrDxa0RgExrZClBiUOHY CJCk5qjh7XV1rYrUGzGfmE6AEEAlML68J2pe4qu0r4CBaf17qUQqYR8xr6QY76QE3fQVnX3iPwKIQQBT 8MYEKcBbtzkYBGnAjbVuh4klJNl0Wuw2Ak4B7E3dC79X30SP+UD/L8cTIk9JFnEb8oSo0KykALlL09Oo KaiCJHhlCvGWlOO9aMAOcpbfSq0SULmRWGnwKpZz+xbjHoDhqmoQSEIQCQRuSmoIgOCgEEUY6n4kXV0k oOg8YHAOIDiBobAO9aCSgKIyMm5zqi5To+MskYWnbB9hxuvxHKw6UG4ryTeYtamQEOMsG7tcocbyDBxH KghAEKQCUoABhLa4D9tA3ZZiiU+ShIB0IMkgUSKIJQOBAVKEAKH9vFLr03+RTXnkezbmr75k/V/rYC+p AMloMhmn51qH2UWARiGGyFxck4ARxU4G0CRlSJe+1qP7MHuzB2DQZ7a9OWiJdaASUlcKonSfsisEHeFa 7D1utfWl4MmAoTNtWL8xNqbLWzbp1RdsylM/pivT92zoK62sddcp9gwg9HT/jQDRLk9eUnhyW8Cg1dyy Zungfy8g0Jeh11gAgYAkqQw5SAgFdIG+jkRw6wOz2+//yu598EsAgcxHBwQ8De+KUB/Ifryr/AalRUfq w12XFFAfKKridRS8QCtAQB2FW+rzoLJskergkgH7QYK4xxZykJCq8bbnTdzz4q4RuPB7SRy3VbVJxP6t WBJx1URFYINKEoAjkFQTB4uo6cwtGtj6ddj65wIKgYYklmYQiNvXRSqOACa2hzhoRGAgQIg8KGJiV2+a JRAxeYs645LKDdrh6ffqgOVgpOa5ERgJlJolmiDJOOA4iESSDOdw9cnP22K4DW32gu3GgTICXbfl3KCk vgresDrLLiKjnSSFGvoeVuCSVaNaeV+K8YTIK+Jpy3g/lDsi4+tJDLJq8y5bhCSmmzyDV+Hmnd2+LWDg PlR416UEeZEkKQBC+ltG4wgQPPcAMLkgm4Z6RqJCnSOeILgPCSTCPqC+IEV1lzFwX7RDxSctOeuE7cps sC1pNZa0t9gWkn24lHDjiSsybNSSTBu1NIsKRdnWEebvABBIVWhPTEG76UdYuY9YWz5rw/atZfjpURek JjSrBglAoM8cDKAuHNtubol1HLXTxqBWjfvG523qj//RBr/SzroMWE6sAnELuPq6kMXYBZtAF64hCaDD qPXWevASe6PvXHu972xrNWCBtR++gnoGG607wUq96IvQd9QKG0jw0tBu/W0UBXrHvfGajcXmMOaRH9uE n/yTd3Du/+Kb9kaHcW64fJo8heeH724GgzYzC6393HLAoLJZOvjfAghj5q+m99tqGkKusrHz1tiezFLb n1FJDniNHcmpI9vxPbsotUH2AxkU34O5ZVQEDJTodA/Pg9dIUDiz1AnZGFAhRKq/eCcCBBVoVZGVm9oK ENTrQYVbKeAaGPodZ/wwuWSEDH/fY/8ev7kH43vpNgHNO0gfDjYUfFUVJ12HYwQYt1XqjXPGKoozfLM6 EqkpAgwASdfxazvjAFT6TAzEanobppRkEasx3r7OjaahuKyvuFGvy1swRixRBKaOmN0lkLAfKDDRdTFt /FsZXvXMMsTG9hSYV8dKIrlJ1WtRbBtxEJAK4+pUJEF4N+7490GSuslzhTHW+ALiXhNTQByATzH/3n0a Y6Zb77H2y8MhgAiExwMPibwo8lKcxyB7id9cFZjpHJL2NN6oh7eUCs+5VWbvhjf2eRcQoAUg93WNZ5LK FewE5BoAYBexiQgATpGGfBJqIMGt5rRch9etsOEqKuslSy05b0eLztmunJO24XCVrdpH9iG1CGZtzCKW AAMhfQb6KOloQap1n4MfX+G+bLvNwVgHdZ1DaDFM2mMFfvkkaKVItgKBQUSfAQQxIAQJoYyCIpy3x3Qb 8yhdkb75BRuv4KPnsPq37W6juw6zkf2m2wit8oPJGO4zGYlimnVHdejSb5p14+9efeitMGAyEsBYG0EU 46j23WwsfTTGyz5AO/dxP/m+jfneP9s4DJcTH/qejXjiMev3anvr0qa/vUxY8vP91tirGCuVp/D6tHx7 c3a5tZlfY20XNVi7xY3WfsmJ35heGpVsifQJG0IMCA4K89dYcmqpJVMaKjmtCmCoslOX3rOzNz+0izc/ sitRLMLt934BCPzc7r0HCLxL9CLAINuCIhmVAHUTULh1VxmSbAUCiBg3qKlwDbruoKCJKoCIG8Bockly iJrARIwqZr3Lan6XCea2CehtqScuhQSVRPsCnQAGLeTqSMQQvq929l49Wp9rG1SWGxFp3w2d3oQmNn4G D4l7RBwIggel2Qgqe0XzsVJJgvdE0kUAEDFfJHmIyX31lsoU3YckIkgSkV9bhWs53u0nunedC9C8ycru IOIAwz3rWaLnkTTg54yfTddlPG4xHhr7WxiFb1IL8yYZq6qJeQtp7breBb+5xv2KwWXAk2dGjHoBL8l5 9i8AABfVTRoGvux2FN1DaOt3nXN4Ojyk893EA6Vs2Bs6N6Cg83uDYIEC17imaFckHoUXn6f5zxlaBJ7C M9FIcZIawKj8FBIBvUQLSbdPq7xgh5EI9uWfILAI9QD34bLdZCBuybU5W/NsHIVJ+s47ZL2pPNRzNpmA 82UzoICIg0GmdWO/K/tdyTXoAkj0SMI3H6kIwXgYwCBROmgGgEgyuB8QKqhpkGOvkEXYoct4G00Doon/ SCzC33zVprCdSqWiKQ9/lzbsDxEj8JBNwiMw5fWXbCz5HKNavWljXn3Zxr0IeDz7hI2nEevER//FJj8W aMoj/2xTH/0u4PI0x71mY9p0sl6t3rJX24+257rMsqd6LLHn+q22V4fTUIWiqB0JbnpzriSCWmsHGLRf 3PQbA0EMGr8dICxYY7upEbc3rSKAAoBw4uJ7lGL/wM4DCBfIerz99i/t9ru/wsD4SwDhF+wHyeAmEsNN AOHanY/sOoBwhUkid6VqKVyhBNu1a+/bpRvveX3Gq0zy6zDAdU0yZxgmNCSGlegfVmwxhkRfbfnM1QWA AKaXZHAHQLgnQHAvRrBVaAV0tQRGuME1bnDdQDCQN5wJk1pMJAbTuQNDhXuQZOG2DShWO5rtHHyvyR0o GCqDqzQyfkYek9DuLvaiROd0EGoxpDpQ+DUiiUYqUKRK3ea59BwBtIIk5fuAY+jALUkmUgUcFGJ1h+94 RgdgxkkM665iQOAG7+OGtgJoPr8BSNwAIATM1/UuOM9Vnu/qdbY83xXeiwOGAIDvr2k8tfqL4fV7zqPz C2h0Hn12XVuup3J7VzjPFdzVlyjhf544lvMX7wICd5AGbloT7sNaQKD6JC5DJJAiGgLlU68wg47jx/Fw 7aMwyZbUatuYUmVJB6psFhmI49Zk2lhKiaucuFKQu1I9qBslyLqpOAn1ArrOlUSAyA4gCASUHKRtF1yJ sb1AtoJE6eAzQSARFJAQOmK9b4sV/3VqEb44dIe93m22DWjby0aQbTr20Z/YRMT7id//Oxv7L39v436A J4LahmP5e8y/fIf4g7+1cT/+O5vw0D9jDwAMqIw8/qmf2hiqcY94vY2Ngoa/0cE6tRtkr6IavNB5qj3d da49/RbhyH1W2gsD19trI3ZZa7wXCjzqOqfI2i6o+zeDgUDhtwaEvakVtgdA2CtASK+kJfz7dubKh3b+ OoSkcB1AuPU2QPAOngekhGuoEVexH1wRCLBKXEYauCyJ4sb71GOErr9nF669a2eZJKcvv8P57qE7Quiy F1k1LkHX2L/iYrH0zcCsQcyUuMm+xGYxtK/qEcOKiSQVRKJwCxOJ4TW5xcBaBQEBfn+N6+s8mvC+anF+ fXeVSXsDUrCUruGgJDFbK65ASsRvRWKYa7onXzFl0MOV58ZE/tbq7d/xt7wd7uUQ4Ak4YvDjcxhYzOfA EpW3996ZYmLUrBvaRmAgZveVX9f136goDde4EhjXn4cVXPeuMdQz6hjRFX53gXehoLJrAICqXgmQr3Av F/Q957uCPeQK57nEWF27prFg3Ljny3x2meMuw9x6lqvczxXGOXwWAF0dvS5yvguM3QXC289eedtO8W5P k258Gs9AE27Cepi/DltANfUHymD8ErqK51SG0mTpxafseIk8BSdRC0hDTm+0HVm11CSgTNmhclu8lziC vaU2fhX2AdUlSEojwCiNMuL70dVJS4a6kITkYcaAQWeBAVKBshCdiC/oBLnRcLkIu4DsAwk2gt8EFFRT oP08dHXcdfIqPAcoPNM7yV4hbPjNblOtW6dR1rv9AOvbYQAehd42+I1ONuiF12zQq+1sGElP+ntAuz7W p8sw695ltHXsPNZe7z7LXsBj8ORbS+xpIhyf7raA7UJ7qucSe7Zvkr1I5uIrSAWtxuwnijIFe0guoFfs gUeuIvwbJIPfWEKooLZ8OVSBT1fbGTSZmLVqr81Zt9sWrCXzLqvK+z1m8ALzSmmnjS+4HrGyEf+4yqud ZXKegMFVnfk0k/PUJSYGGWdNxJU3XLhjjUyQelmNz97mt2zxKdedlfEIYquMtFPnb/Ob25wLYnuO351h VTntKay3CGKRK+ouCSyIt0y+y1jdL0vU1SrE9S8xGQUsF2Uw45iLHKNc+CbO0YSuKv/1SbXwQjRtIsKt kYlaj158EpH1BFGNJ9Cjm5Qdx0Q+x72eQVw+q+Airn2eZzyH+1AitCzgwR1Gv0DoNIE2jei96jas9NrG JvRhVr4aIgnrm6j9r8+4VgPX8S3GshPozE3ozKf5u4nz65ynlJ3HM5zB0q4svbPS7TnmjAJyuJ/TXtiD CESYrJGknVO44U4QnNPE9RpV/QeLfBNj23hKY8rzsa0+pSi+mzDlTasl46+Wa1fTFr2SQJ4qRPPyE5QN o0hIGWXFSzHeFfPui0kNLqilsCgrdmEdzUxg4GIMy3kkueUzP1RiLL+K4jkVJ0l+O22ZzIlMxPsMxPvU vBM0LGn0Mv5HcmvtEFWJD1GefG96LZWJa2zbUVb9g5WWtK+EoKFCW0iB0tlbKL+2BmPgilQbteKYDcc2 0GdxqvXAU9BtNnEEih8gkrAVocZvToQmHPTw4nZEFIraEl3YbqqqCVMhiG0bqP0cPkugtqQqt1DafdWC Hkz0+bS/W03PszeoMvTa5Ax7edwRexYr/88w8P2050p7rPsie6zrfHu8y1x7rMtse6zzLHu48xx7pNMc e7TzbPsZn/2s0wy2s+yJrnM4Zq490WWm7z/Bd76Fnuw+D/VgkT3bezm5CavtpSEbkQy2E4W4B1XhEMFH cpumuFvzQbfhr3uGByWC54esJ4iqhY4UEdCVQJ+roLikQKFSoMBkmEnHmRnQzFUChl22D1vCYTLF9IKP UTylsOaSFTdSeooS7RUwWB1x5TVM1Fq26vRUSySZQKOKCVmB77is6YYfX9x41Yprr1k5YaZl7GtbzveV jddZQTi+CVGSv2s4r9OJaw4gDXxWz9+6Tj3nreG8dUzyRsCk/gyAc4bVCEZuPI3Pmlh2MUYtzFIBlXEO TfoSUl/LBHiIpaV1VIKqO0dwC4RbtZRtKatXBQxcjghbyWqmGvzVJALVEy5bD+MoIq4OC3st34kqCYyp JFeiEl98OQU3dG6Rcu2LGc8SVsFi3LdFeGxKiOkoovpUGfkFpTBRKYxWquvWn7PKBs5DERpdt5zrV3Af ldSgKBGjckwFx5ZXcV/43stJ3RVgl9IToAQGLYYxS8nkK6UycAmReoVlSu8N3xUSUFZEKG8BFvpCdPJi Ik/zuZccyutnw8C55Ktksp/BCp1Bp670YjJc8+stBWZOL6amJuXH00hyS+P79KITlgZpUUjNp1YGJciP ceyx3FCK/ABMvz+j2valVtme1ErbdbzUth8ptS3QpoPltmYf7kGqEC3dU2KLdhTZLGwB01al2SRCiccv J5yYnoP95tBzkPqEairSiYCdjvIS4BFor3qEKkc+4QCBP9DYA1HOQZoDQAwCbWCUNlNSnZrB4D4gEChw DJWLfh0DPfi9M6CDQk4ECkfthVH77RkkhafIMnySAKXHCVUWQPy0x3J7DHpU27eWQUsDUdpM3+mYZ8h1 EOM/25dYhv6rAIA19uKgdZRN32yvAgKvj95lrcaqNLuAAJfplOPWXklXPKPCjv8dAAEgEBgIFACEGUnb AyBEoOC2BFSHg5lVgEINIh+rhVaQWqLFmNCl1KQrYVKXwkRyFZUQPFJCrbpijERFTOpc1bPHjZldRqx5 ObXrFBItYuUpqOZ3TPj8Gq1Q/LYOsKgl+IT9IkWj8XeRSNditVKEWkk9x3KNUtXDa7gOQ8L4ZLiVNFzj XgAd7ddd5f6usNphqOLa+ZUnqahLHz62ooIqpB2YtoD9EvaLxMw05CgijbgYhisXgAAUZYBHqZiT/XIn /ua78moxHswPU5ZUn7ISCnMWIAbnw/D5MFEuDJXH3wVlJ8LnVPHNZ1Ut4PsCumIVwNyFFZCOBzjy2Ne2 UA1yVPab32TxXR7nyhaVNrJtslzOk0cz3hzyTbJ1DfbzqBKcW9ZE2fATfH/S8jh/NufLwW+fhU6uCsJZ Oh9Mn14EQxdR76KwwVKorp2i6lh5dKKmbF4qHqWjMPmx3Bo7xnEp1A1IAQiOEfyTUsBvSCFOyWmwY9l1 doR6AvsR7w9lAAZp1XQtonNRCmBwuMK2I/JvPVBsG6G1+0tsJQbBpbuLbdH2YoqU5tkMMg7HLQMMCCdW ZaK+AgIqFHtIMbYBpRu3o1JxmykhbuD1sQfpVxDoNagNWYltYJAYALRtnUAOCA9IBTEY/JsBoRkUqEc4 OdNewZ7wMoFBL4w6YM+PSHap4RlCl58Zss2eHrw1ENGET1PwNJA+2+bHvDKUIqjDtiIBYI8YudPeGL0H SWCvvUkvhjaUX3dpgGQrlwh4TkkFMRj8+wOCVAb60QkQYlCQLWEftF+ggPqQwyqYS1izGrkIGApYifIo UpkH8+fDLAKMnBpWHyZjBnkRKaxAh/IbmWxNuDFP2tECRMu8BirbMtGYdOmsWOlF1F8ooeItK15WOUTF pmzOmcGql1vO+VQEk5VOPulc6aGASS5gIsoDPAoAjDyogP1cJJh8Ps+pxocN5ep8XCOvhNr7ME6+mAdw yHWCSSEVzigEFApdbGZbzQoPFYn0mUp0s6/vC331F0OL+WB2zpMH0+VwXjGpGDeL58qE6bIQpbOKuB5M lc31s2HKLJgthxU6Q1QEeDijczz7mTBgJsenw+QZMG5WUR09MlitGa90xtC3nDejkHZ7UAa9AzI5Jo3z Z8C0GYBCBufI4Dqp7Kejn2uctbqnifmzkQLya2g0grSHWH8kS5Kf3MvsQ4e15e9jVM06Ch3nmilIBSrN f1if0Zdgv7xP6dVucN51rAJVoNy20Khk44EiW59cbKvpV5C0I9dW7si3JTvzbSYgMJPaA9PWoR6sy7Jh S47biHmoB0gGg+hP0J2moypU2oXoPdUmbEONwraT1JeAmoQwyMvo0a9Ar47d59vWrJitJ98PAg4I+gx6 UEVIBIP/W4CQCApECL5OYNCrk9LsFcKHXyZs+SUA4iVUipfGHE6gQ+yL+IxgIn3fiudQR6XWqD9tkADa TgYAeKZYEmgGgEgieDAZ6f/rEoKZfS6R6utVLIPUVUj1BKbRn27GqmSbs3qvzVu330bNXW+j5m2zMXSK nrZ4h01ffZi+dYewNxy1uVsO2rxNR2zhllRbsDnF5m8+bgs2Hrd5G/lu01FWiBSbu47txlQ63KTa4p1Z tnR7Ku2vMmzlrgxbsyvfVu3KtFV7s9nPtqTdObZmbx6VbXL4LNfW78ux5XsLIL7blctnebZyT44lJWdy jmxbuCPNFm5PowDGcZu/4SiTkbZadNuds/6gzVp3iGYah23e2kM2Z+1Bm809z1pzxOZsOGZzt6Xbwk0p tpg2XMt2pljSznTE3DRbuzvTVnPtjQfybMMB7mVfNgU2uPa+DFuxI92W8TxLNhy3ORs5z6ZDNpsWXlNX 77PpKw/b9FX7KdnNtbnOdGjqqkM2d8MBm8nzz+f4udzP7A3cz7pU7/s3az3n4Z7nbeDzdcf57ij3fIQu QIwd46fv56/jXjl+/kbGcf1hGoMcthk8w6yVB2gfdgip7pBNgyatOGiTlifb+KU0DKGV2KhFtBSbt5eC obtt5KK9/L2bxp+7aRO+y4bM3mNDZ+22ITN32/CZ22zQnN02dC6NRek72HvaVus0dpO1G7PZ2o/ZaG0J vVW0XYex66396HWE4rIdEfbbax96c+QGVj504FEbcJexHYkoPHKrvTh8i704bDMJQJvtRbL0nh+00X42 aL39pO8a+0mvNfY9sgW/12udPTRgiz3Uf4s9rAYi/RDJh+6xJ4fthXb7/k/6bLIfJ9ATQ3fbE0MCPQ6p z0AgWpN5e7JAD+b9/9v/Vg/EjfZQzw32UI/1Tj95ax20toW680wPUuL3HB//9qGeOlc457/lnn46eJcl 0iO9VvG8LfTwW4stkY4j5SXSg/x/Hxjoy7q6AAj1dLYVTVumhpW7kRxoYJlEJ5rJK23IlNU2dMY6G0m3 6BELAIfF25loO2zskl02dulOiHbX0IRle23S4t02bslexES+g8Yv3cP+XhuftIdJu8cmrEy2STDPpBX7 qXQLJe23Kcv32+RVByh9vZe/99pUJvyUVftgKo7j+4n8ZjI0ceU+m8h5JizfjQjK9Zbymc4tZqCv3vjl e/27ycv4fqmIv9mfyGeTVuyxySv2QjTjXMk1ab01leebsgaG5j5mrT1gs7kHbWetA1AAkul07Z225gBM COPrHjj/RH4/MYn7oMHneM45jp5+4/SM3M94nn089zSO55yoe+F6kxjPCdzb2CV8x+f/n/LOrqlpIArD /wrxRuEKkKIOAipeeiWO0A9qaUnSCEhlEJhSYMaBli/7QaWO/sLj8+6mqHin6I0X75xkk+xmM/s+OSkJ G3M+Zc452qeMbeUaZsW48S5vx+maUqY6XD3qg+pn/1XaWDn4auU9P4dgwPEhWq5eWlj7hPm7Vqh2mT24 Y7mtDga/4H/+8VrtFuK7+0WW8xufmAWYGYWlCvu8u7D5jbYtvG3xHX7TnsdnNls8tmeFE5stHNvs64Y9 Rk/zDXuSP7bHRK0rTkssPyA+RBOLDeYIqNt9fsCaWDy3ifzHJJ7bOCAY47l5LHMKBOp2Gw3OHdmtuYYN pwEC8w0OObVsFAiMJKYfw/B3Mbl0J5Eg8KOug+BmYXAdLH04eFP/LIAhaFzp+3Zv/t8DwHVo/BMgeCgk QNAMtgzaDUGBAZ/m88zc6qGbq15gWNppMq11mxSwDRw6pIMdKwKJ5SqqCRRa7lrAIA13GeDEaN8P9mCP SJYR1TxEygeXFrMtpiwGMmWWg2R7dMDxLAe1nitT3cFe15ehUOvUHbh61S7rmELtyCCh2pIwaqR2nAQo gQvDOlAAJwzudAgsMP07oLNOrACmVWfszw4qK4IZplYdq0gxdkZXxOTEcE990j6UY2ZXjpHLrGt/9SlG OmftGwKB0jbThG93rbSDqlwb9o32v3AtJJbdOnVxDhGQiICtQBAqC9jtWVHXf6djSy4KAm3LbbaAgtQm AxAMPBAyxEylaelKi9giNm1+/aOl1ylb45PcuGlPC970M5h8Jl+3GUwuTSdxBuOrfJL1qRzv22f54Sx7 ZOMola1bis90UwAgBRTGpeyZ3UOCwWjmxAZfNuwWnxIPvgAILw5tmLv7EGYfWlAm4IHQzwJk/D4IfgVC DzD0rjKCvwuCm8w4/qyufwaEPhQq3NUrDD4PBYCw8sEWUEZgWDviObBpi1tNyzPg8tst0s02ajEg28CC QamBiUoA4koCBmZdBhCKgcCh6MqS/ZK4jClKVYHmAuiwnWUNeNWpQb9Ee5LaLNCma9sBSm0iIBUg344H g9oLgVCIEQWnsjPmJRkGRiPDeUOfVxygvHRndkqMLnBJ7ljqE7g8rPpgog+0J0gpe1I7vq0+sC4BGn2n TPtJ6ntA/wqb9AmjFtHS9oW7+0e060Dgzsmvh6T8go1iCRAIBrqeRY4RCNy1ceYHAu9bSWRdUKAsvwko iFm+xXcAkN7yjj1AmCemia+YDMRnAQkIcoAgx9/gMftUEqcBwCM0hSZRKnPI/AAAIU1M11k+5df4M6d7 EjAYzfrsYERAmKsDgiMbAAYDRD0SOCWZwGihx+OAlwx/h2nLf5TKRkib+/pfQNDPFG4aCN8Ax2fzLWx8 FZYAAAAASUVORK5CYII= O ================================================ FILE: Samples/RegEditPHP/RegEditPHP/dlgAbout.hr.resx ================================================ text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAc1JREFUWEe1V4uS gzAItF9e++W5AwMSwiOY1qljX8qygV3yamc7vnF8jk97H+9X+VkAYPc8z7PB8R+84bPgJc8gxveCIwSE gSeAQUDw+VcAOHMnOAPooOD/eI8AtMUAPOxA+m/KKXN9ZWbgHloqeLuz/hcDI+UeAMkGgCYQWwCo4KKg GRN7AArZSyC8ZLtLIKtdB5BdYDFE3bHNgEuxaMNHAKhloqvFgKkDQhe0PpgMYHsJWUF5IbUbvr8Fx6N8 UkWlkBMA6m1slejsKpd1QEkJVzPnPl7ogswXmAEzc8xyPJgVKLIuRBkLw7orb0AAXuZ4o157WhYB4Ika kgJj8CxLCUIzQJ/LILohMQBZ9X6QqxuoBjINyIwJhyGX/m4YZif02phAO53h6gUBoDGCx4kgy8vV7sHD 6nNL9022QgZ6kSEDFFKwsqKCgwV3aZ6U8Nft5xUnm1FJfBQDnht6zjgtTVgDhhdw9YtRbFWE3HngEQNy 4jWcLgMl/cHXAYsBCKy+rwiQLMpBCVPnoyHS8YUVEN5GpcRApBdaDyYDcjYorhKawaLCFLN+aWdEZjTJ 6sJEJH1h2F9UtmalLnAKc9rcVDanWctkv+/srODeP248qvLRqKhVAAAAAElFTkSuQmCC 34, 38 48, 13 Proizvod 88, 38 48, 51 34, 13 Naziv 88, 51 44, 64 38, 13 Verzija 88, 64 54, 77 28, 13 Opis 88, 77 44, 90 38, 13 Tvrtka 88, 90 3, 103 79, 13 Autorska prava 88, 103 21, 116 61, 13 Omogućuje 88, 116 iVBORw0KGgoAAAANSUhEUgAAAQQAAABcCAYAAACIosskAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEwAA CxMBAJqcGAAAxq9JREFUeF7s/QWwJVd25422B+J9L2I8Hns89njsZrvdZGhzc4taUotZKhWzipmZmblu MXPdYrjMzFzMTGKpYb3ff+3Me0+VJHe3v3n+4r2YiliVec/Jk7Bzr/9evH7HzD6X+K+y9ux9H6zfl/W5 xEPeffvW5+xX9/+m+fe/87nP/c5/+n/dd77f7A9+yL/f+dx/gML+f/gd7YV9/fvEFfnqVxa+13fa/R3t sG0+1m9cxyT++lfR3/qcfa4TjokpXE/X/o//SV//x8/9Z475D//xP37uc//JuEO2utDv/IfowPgav9mT /p+j/p8dgf/rP/9f/043EM85bX/JvPkF0/DnYc4l/Auz53eYob/DEf+ZI//f/1vv749/l0mc8O9nD/3j fX9/48t/0sJkzkwwTSJV1JyxRBo4db31nyxa59R58FzrPGR2oMGBuvh2TtgfvtC6jFjUTF21P3KRdR2x GGr5PD5GnwVaat2g7iOXWY+Ry63nyBVOPUautB6jtIVGJTXTW+y/NXqVU3eoG9Q1oi6jk+x+WsnfK/l+ hXXlXF1HLbOuXCdsl7OFOH/XUTqmhbqNS7JeE1dZb56/7xSef/p6Gzh9ow2cAc2MaNYmG/h/6P9nxmDk vF02cv6/B+3kOjug7TZ6/mYbPW8DtBZalUCr2RetsZHz1tnweZtsMPf3v5NmrUq2RKo7fdkS6UH+/yQg ICF8AhCmrLcBMISoy1CYfgjMP2yOdR0KAQLxtgugIObvMipQNwEAW4FBl1FLou8AhpFLIG0hPu8+CiAY vRTmBgzGLLPeY1daH6gfDNl//CrrP2E1tMb6T1prAyau9W3/SdxTAvWftMH6Td5gffmsL/t92PZ22mC9 J7CdsBZaZz3Z9hi/GgJoROMgrvXWWMDmQRq3ynpOXG29Jq+1PtM596wNTPzNNnDOFhs0Z2ug2eyL9Fm8 zzGDRbOjLYAxCBrs2/D5wNkASUzR9zrmE8QxgxKPTfjNvwZEOs//AapPjsG/DxgIcAIYjJq/FYoBYc0D gCBwCIAwCrAIgLDz/3lA+BU6wC+ACvvVL62i+rSVVp+x0srTVlJ50gYhIQyGGYaIpm203iMXWK+xi6z3 6AXWZ9Ri6zVmsfUZv4jtQj5bCJMttd7jVlgvmLn3hBV8t8L6TlwBs660/lOTbMDUVZxvrQ2esdaGzFxv w2ZvtBFM8tHzttjYBVtt3OLtNnnxbpu8bI9NFS3fa9NW7rNpSQds5qqDNmvNIZu7+pDNWXPEFmw4avM3 HrP5m1Jt4WZoiyjNtwv4e/7mNJsn4vu5G1JtzoYUm7n+mM1ce9hmcJ7pqw/YVFHSfpu4Yr9NgMYvg5bu a6YJS/bZJP6etGyfTVkR0cr9NmXVfpvMPU3m95NW77dJqzhm9T6bCCJPTIJWJtsE0Yq9n6CJPNMEnk00 PoHGsT926W4bk0Cjl+y20Ut22ejFMe1kf4eNctrpNHIRtJAJKFqww0Ys2O40nAkZaFugBaKtNoxJ6jTv fhrK36IhcwMNnrvl02kOoBbTXO0ngGEMivdtI3AECIcIJKFBDxJAKbDU5wLd5m30+b8Gni3Ap98mgIDA VCDr5wz79wHCgl0w6+7fXGLg+E8CSuLvtc87iWi0pIN52yABgqQDMX+QEEaxH2gttB4JYSOAwJj/lhLC kHm7/9Xf/NYSQlndVXOqv2rl0PSVYsJdMONum7Zit+06kmk7j2bZLmjH0UwrAiRKUCuKak9ZSZX2T1px 9SkrqjpthfydVX7CMspPWXb5GcuuPGWZfJdedcbSKs5YJiCT4XTSMssjKjvJsSJ+U3HKcipOsz1jWZXn LLPinGU4nQlUqXOI+K7mgmXVXrDs2ovQJaec+ssRXbHc+iuWz9+iAvYLeLaChmsRXbeCputWdPKGFZ64 YUUxNbHfyGeN16ywIT6e3zdAjSLO05RIHNP021Ehx38W/bbn+j/H/3Zjr/HKrzvfTL9u/PL9XV+2PN59 LnMgh3mUXXuZOX3e0isvWBpz/HjJSTta1GSHCxrtQH69HcirtQO5bJ0a7WB+nR0qFNXb8eIGO17WBC+c dH5IhS/Sq89aRs05S4eyOK/mdlYVpPldx/Xqr0HXufZ17uFGoMbrltcAMVfz/G+2n0G7U8otkeZsOMLC 2EIPqhCfawYEQKEUmr5sr01esrOZ9gAEySk5ti+iqhPn0UEuWb10kVOXrfYMdPKi74tKGcSSk5es5NQl Kz5x2UpO8DdUGm1L+F7HlDLQohJtOU7fl50EmE5et4pTLVR64roVw7zFTdecimI6cRVG5rOT17je9Yhu sE0gGL0komLOU6JzPUg6d/wZA10MFUEChYJGJpAT4CLivsMkuQJTf5KKmHD3k+43fJYIAp+YiDxLgegB cHkQOH7dBP63f8+zMq6fpN+e4f7t9/C//1oavwfvJ7/+NweEf/1Z7p8TYY4wVwCNPMDDicUor4G/fTG5 ypa544sK98Xfvq+t/63fawG75KRjP4vJf5vP/82AUAoaiaYhGQgQpizdZZOh3ceybV9ajh1Iy7ODUFXT eWsEDOrPXLWG01d9W3/qijXxWQNUceYKDA1j813F2WtWBnOXwrRlp2F4p2tWHlHlqWtWybGVHFt55rpV nbkGwNyy2rPQuVtWA1VDVXwWUzX71XzvpO8vcNxF0W2rvnjHqe7iXejeA9u7Vst3NaLzHBfTuTtWdfY2 93rLKk4HKjt508qhMsBFABU/g56jlHsu1TMlUAn7ogc/198BoMK2tHk/BrAHtwK3T6EIzEocFAM4NgNj Igg5SAqAkHCiY7QtBDh/HX06IPxmQOHAxXUfZMBPk4Q+nck+C4x+c5D6tGvrWrovPVvz90gIBREo/N8D L93b/YDzaQAUJMoHgSmSMiNAEJAUAByBEoEkkgK0+iO9fgIIHvgs/z4p4aYfL0DYm9oiJfxaCaG09ooV 11y2wuqLVlB50aYABtPRe2cu34POvtcOpOZaek6pZeSVWnZRhTXC5Gcv3bRTV27Y2SvX7cwltpe0vW5n L96w+it3rOnidWs8d9MaLty0epi1nr/rYdxG9psu3mQLXWLf6badgE5Bpy/fhe7ZmStv2+mr79jZa2/b uetvs32HLXQDuhnowq137JLo7rt25e770Hu+vXrvA7sCaRv2P+TzD+zynQ/t0p0P7NLtD+zirff5fQud Z//8zfc4P3Q9bM/quqKrb9uZq9wTdAo6DZ2M6ATbFnrbTnLfMZ1iX6S/4+1Jnu0Ez3jiSkx32G+hJj5v pkvsP0CN/N1MgF6D022rZ+zqHQhvW+2lAHrVFyDATlTldBMCWLU9K9K+QPVmANbo80q+ayY+K08kviuH ys5ApwOVOgF2ToBiIn0CJDnmVAKdYV8U/baM35Y9ALgx2IYtgAgVAZpFALZUvhIYvhgpMJYABYB+HN9J giyFSgTu/L5Y52i8ZIX1F2C8i1bMwlR6gvuXFKlz8rsSji/w8wtEg1Sp3/p3AHuxwN3PHxaBFglVv+Ve OKfAv1DnEEjqfKJYAnPgRLpEIi50KSGSFACDfAGCpAxU2zyRVAOYupnRBQBNN5FSY3Bg37+Pt+wngEQB 6sQewGBPaoXtiVSHXwsIA/AguOFwSnCn7TycbXuOZdruI1m2E/vBpUuX7catO3brzl27c+OuffDBh/b+ zz+2Dz/4uX3w8c/to49+bu99HP390S/s/Q/5+6OP7b1fQPz97vtsP/yF77/Nse/wu3edPrZ3P/zY3vnw Iz7Tlr85Vt+99/7P7X1tda77iPNxrkC/TKBf+f57H/6K67CF3nf6lb3/caAPIvqQ7X30c/6+j4y//53p Y66XSP/e1/8/1wvvXO8gGgumn4n0d5hDxrwye+fjXzJfmcvvfWy33/m53XznY7v57od27d7Hdv3uR3ad RecKi87l2+/b5Zsf2uVbIhYq/r526wO7xuJ0jYXrGsfduPM+9AG/+8BuQrfe/tBucY6bLGLaim7f/bnd vvcLu3PvV3YXuid626CW7dv8/al0z1i07yXQXdtxuPg+etDo+Lk4vmBAFGew82DmfTaDK9dv2bvvvGvv v/uBvf/++/aLn//Cfok34le/wjfxKxwT0C/575e//IX94pe/9O9+6dtf4LTQMeHvX/wCTwZ//xLSNqZf woy/cNIxkPa1jUmfR/Rzth9DHz3AxB/wmRj+fV7WBx//ooUAoQ8Bhg8BBicAIxAvWn87OHwW8wMiXOeT lDBxnIkfBJQHAOcT33OPul+/5/vpQ/5+ELD0XLpHMNPpk4Cm+4/u4UFg+cxn+y0A7/8PwMqZW+OXwOzN oO9jpPH7dWMSHROPRwwgvtDo/CxEkOagAwjz6z2RL1LaarHkO1+4IvLFi89ZKJsXOsDmXRbEd977OaAT 0Tu//HSGBxQ+EwwAidt8nwgIZ5BOf2NA6BcBwvZD6bYvNc8OpORCBXbNAeE9e/+9D5AKPnRGha3tV9FW jC8yACEAACRAEAhoGzHzR87IgaF/zgsQczczf3TsLzjHz0W/iAjw0XH+Owb6I2dwGJ7B/RD6gLcoklTy Pm8lpvfYf0+SyX0UJI9ASCwMvOh9bSXBfCYlShySOvQCfz19wEtuPk6TQdeK7zVhe//kCBKRJsin0XvR OTWJEinxfj7wewsS0gfNxKTVviYvkzNQ4veMpcY1Gl+N8YcAawCoT4KUQClIXBGwOuBG4BaD3X1gGpgx 0GcB7QOfNwNgLD09AN6fkKii+3HGDvfti0S8EGhhELP69bkP/zsRvFuA9QMtGno+AUUEws3PGgOAj5/m oJhc7/bjaD7G2zA3fYHSNf13XDN+fl1b1/F3Eea0z0WXnpFAmKdvv/MLe+fdX9k778D470RSAKt+Igjc /VRJgeM5TlKEAOFcLCUACDt/vYRA0M2k1cQKELhDEM7Wg+l2NLPIUrNKoTK7de22fYBk8HPUgo9QBQKT fwzT/tzpF3z2848+4rMPYN6PwQX+Zvsxx+vzjz/4CDBBzfhQEgbbDz5A7YjpI/Y/so9iQn34iOX7Q+gD 6H3oPUDoXRGAJHqHc73zPluR/w0hsr2DBKPt26J33rd70F2n9xiYmPgcsczpnUDvQG9HpP1m8nMmfM/5 33biHImka8V/cy/3dAzbt997349tJqSse6J337O7n0L6/H7iXH6eiHQurhWTnu8+0j3omiLG5m3GKdwv W+3/GmoeS40r7+ddpzD2egeBPooIsI3VPql+AuBmCse8+5kUjo+pBbyjczMH3nMC4F1djMFaq2oEhL4Q oDJ+EMDar8fx2n9Xc+Z9/a174P61zxjqmLfZ131LRfXFQt9LVUX11bneju7rfZ1XK7UYVGou81h/v+Pn Cu/01vUbdrG63E7mpFljxjFrTDloVXs2W8mqeVa0bLoVLplqBYunWHXyVjtbUmS3rl5D5b5t7/o8fR+e gC9YmN5/D0B5n+vFxN/vAgJvv4tqgmRwT+RqAlupCuw7s9/9ZVAhYPo7d9i/+4vos1/anfg7vj+HDess dM7tX7cJHUBlOBIR4PAJlcFDjglDVgRiZyIPM3NrrII4gSriCirw+d+6fc+Z29UABIGfM2gff/A+0gL0 3rv20fvQB+/Zh2xFH/t+oHfFiDzFXehOtL0LvN19G8aA3rn3Hg/9LpP8PQaA/XfFMKJ3II4TvfOOH38X iGyme+x/Ct3hszt3I7rDFrrN37eg277PfTRT+M4/f4D8d/77t9mK7kF33Y7yb6bb/PbXUeL5deyt6De/ 4XVvclxMn3Wft+/eYwygezwTW9Fv8kzxsb/Nb36T8953TDQ+N+Nx+g2f+9deR+fTuRLH/8GxfvBaOtbH 525497du29ULF+x0ab7VHjtgxZtWWurEwXZ4WFc7OKSTHRjYwfb1F7WD2tvefu1sb1+IbXK/9nZgcGc7 NravZcwcY8UbV1pt2jE7W1dv167e4r7e5RrYEbAz3LyBXQGj9o3r79qNa+/adbbXMKiLrl67w/F37OrV u3YFY/Tla3ftEoZo34+J75v3r92zK9gxrmDHEF3CcJ5WetpSIzpeeuoTkZOfi/MR4m1mdo1VEyxRS9BP be15DBrvIh2ABK4KmH0s0QjGd4JZmwlG/+Cdt+09mPh9tu8CAAKDewDKbSb27eiliMkEDmLcwNQwe+JW zB8BiE/WiMLEjYhzCqgCRYwj5rnF39DNmxEl7vtnMAzHOfG7T6X4+8845l9lajGkzpvAmNq/bzL6fUbE /Wi/+b7ie0o45l+91896hvj6Cffi96AJLmAGXO8JYNn3cf01QCWGECj6exPoPvi7BGb6TUDp1zLw/w4g eOCZHGT8vMyDRHDQO4i+u+9zP+YOc+W2Xb961U6XFVr+yrl2fHxfOzSks+0f1MmSB3Rwht/Vp43t6t3a dveBAIM9Q7vZrkFdbAcAsaN3G9vRqzXHtLU9Agn9Bto3sJMdmzzECjaussaSYrt44RqMfRdmh4nFyGwv i8ToYnIoZnxtY9L3ly63gMAl/e10l98AFhgyHRBk4ARoHAzKAiikFP8GgJCWUWGV1eeslkipuroLTNh3 UBVkEwhGxI8Rr2RPeI9VXRLAe0wQMf/b0HusOm/DpG+zCt/TSiwwiCb9LRjytojPBQCSEJyQCN7WFmDQ ViSQEGDo2FsAyE3O44wmBk9k2E/bF9NDN0R4RW7c4DcJdOP6Pf/Mv/8Mug84YmCIrhUzc7ifBGoGmxiQ ou+i+2m+pweuef3mHRPdgG466f41EROA4oHnvMHfTgnnCr+Lfuu/TziH3gF0m/G7y3jG43xPzC1QTbjH AKb3A6eAV5JVrHrp/d0ROMfvNhHkBMoxWDtARwwXb+8D83DsfRKBg1z8efTeH5QYIqBrBpb7gDE6X3RP GseW52uZP+45uwHxvL6QRM98i7G7pbG7ecuunD9vJ4sLrHznRkudjDQwvLsdGv6WHRjW3Q6wPTZrrKWv WWaZO7dYevIuyzh0wNKhlANQ8m47smmdHUpaYoeWzLX9M8fbweljbP+EobZ3aHfbM7CL7R3U2ZIHd7FD Y/pZyf49drrplF3EdX/58m2AQARTJ67+fObMDgBc0v7lW3YZN/Nl3M6XceFfYuuk7/nuIm7uKzcEBB/Y BQDhPNJHRqKEUPIbAMKxtDIrJaSyHAmhHEC4AvN8iE71EYDg1n3pde985JPjbRj3XTHvLZgc0uDe1eRh gG9f58WCdM0MyHl84PleDN+iD3OeCAje1jkjuoc6cefOuxz/DpMbUIgmaswEMYNdh+k/STDZ9QRC1Lr+ IH3a94mfMVluOAVg0TWat81gE4MOW573uggx7gakbaBPufav+4z7aD5fdN5wH5xL96Tvo3397dfVPbLV 75x0H74fxsF/I1C4LcntXXv66aftqaeesqlTZ7jYqvu8Gd97fM3oXALU27yHe8R6jB07zsaMGWebNm9H jNX9CJgCyCYCr+8DviIH4ETS8Z9BnzhHDFARAGs1F4AIEDWfbmiRiN7NTb9fPuM59Jnfmz9/+NzHSO8k Gl9/T/pe78O3qAWXr9l5RPnGnCwr2bLG0qcOt2Pj+tvR8f3tyPiBljJrnOXt3GQFeflWWFgMlVgR26Ki EisuLrXSkrAtLi7huyLLyy+wvOwcy01Lt+xjxyzr6BHL3LfPUhfPtP2j+1rysB62d0h3gKGrZS6bY9Wc 9+zJ80gMNyKGh9kFEDD8ZZj8EjE8YvYLbAPdsAvnr9v581ehG9B1O3f+pp29wPbCbTtPHM0FVIXz19+3 s5fftdSKs5ZWdsZSAIPjxafJo0jMvlxln1AZdqWUWh45CIV156Dzdp5Bu4fPVVZWAYIMIPfu4R/Fhyrd 587Nt3nZEAN+K5oEgRF4ASLEnuuILhp0HXMTieMuEytMyDApf/bkU/ak6GfsQ2PGjLUVK5LcBnArAgNn xpjpIsa7xnWusS+6yveB0LEw3ly9ccuu4iEJxN962dfYx7By1fUwkfZjCvqZUwJD39B9RxSYOzzLNZ7J SfegvyHpeFck2jndDgSSX7nCahMTzHf/d9H3fH6N40XXfatzhnuNz63z3088L9ePP4vv47O2Gj+Np0Dh a1/7mv3FX/yFDR06jMl3xS4TPKbr+vPF46D3Bt3gPd4mGOwuAB1+9zUbNmwkk/O6T1LptGEc7jWTAxLn iSnMgfi4RMAMn2mutIy7mPqT1Dyn4nkVzzHf6hy6/8DgYczCe9c4alwv+3hyv/4330v0jt/VxSt2rqbO ao8ftbzlcyx9+ihLmTTEUqeNsFT0/uwVC6woeYeVwegV5ZXY2GpQqRusob7JTrCynzp5xs6cPmtnz5yz s2fP2ZkzZ/nstDWdOGn1HFdTXWfVFdVWzm9LS8oCWKSmWurKhQBDf0se3tP2Du6G5NHDcress4ayajt1 +qKdO3vZzp6/BpMDVOdEV+0sEb/nIG3Pki5wxrdX7YzvQ0QLnyF6+BSBXg1nCFojEreebTkBWIfzz9jB PNEpS84+QWr/Wus1aY31xLHQk+0nAGHbsWKSik6RAHLO8qAzlxD9AQRZXuXCeRff6G2MH1oxbt2SwePt 8DIjpr/uepCYTUDAi5HogwgjZryilyXEB+HjCfnnf/7n9tWvtpD+DvQX9o//+E+2cePWMOH14sRw2ncQ 4NwAQDMgiOn57Aov+zLHXIYBLzndRJcSgbBs/W8nIS5bJ01qMe1NJkk0gaKJ5JOHc/v1HFAiihjcf5cA MM7sugddj/PpeqKLl0FyojsvQZd9e53PAmlf93qZbfybq7pn3U90Pbl/dR+KC7nCfYTz61zhWcKz6rrR M3LMJYGhgBGAvML2GltXNdhqfL/61a9av34DrLHxlE+8y0SdNgMk5/J9jQdbrbgS/wUGX+X9DBgwyE6e PIeIe83vUStsIjDG78yZ0Rk0BuX47wC88Xf6PpZkfL+ZuQNIBVAO4HEjBmPfCpyje22+BmOj57+msWDL mFz096Dx0ljzN5G156Pt6YZGqzx8wDLnTwYEhloqUkEaIJA+d4JlL55hlenHrKqiympqaq2BY0+dOm1n z11APL/CuwdIr99E4rmFFMs4YXPQ/o0bN7nXG8ypa37c+fMXAYoL/PasnTxxGiBp5Jw1Vgww5Bzcb0dn TbDkkb1t98DOtrtvezs6c4KVHDlijVX1AMsFGP2SM/ppGP40AOCMr31yhkSnAIPTMSDw+SnoJKkAdUSV 1ikd4DTh+URQHis+Y4cAAwHCvtwm6zNVQECKvwPC6hgQQnET0Y7jJWQinrJcDIt5SAinYeY7qAjvAAiK BrzH/p3b77med50Vvxl9GXQx/xXpNI68N53BxGx6GRdhPL2Ia1rBGThNyK8wIX/y0MP2Vo/e1qNnoJde ftX+5m/+1r7yla/4hNXkW7NmvV3gBWriC1iuaZKj612TwQd97zrba5zzCgzjk0AT4KoYEIbjhV3ixVz2 z3EVwYAXLl+FrnHOq86MzkRM6ovOhBLVRGJWMa7AREzOJOPFX+ZcOk/MjGJ+MZye65ruScwHI+rYixx7 gQlxnuud51oXLzE5/JzRfejedC7dn48V38GUYrJLPK/u4QrfX+HeAygFksRzhfv15+FcepbznPscdF7P p+fWZBQgcE8a7/gepTtf4TuB7pe//BXGvpeVMTFPnDxrF5AUAkjp/iDdC3/rWa9L6uKZ9Du9m169+1h1 XSOr12WXwiSOCzQ1HgLFSxovXwTCO9P+RZ7jAmMs0lj7vNBz+NgGaU7vUL/RM+s3Ar6r7Asgr3K8wDcY 2SJQdLDXeTSWPDt0XqRxZxw0Huf1rv29axvexznexzmYur6g0PLWLLZjEwe5kS915mhLXzjV8jausPLj h6yqsspqpUI0nbDTrPoXLvK8167D9LfdICvDbLOR1j1hwSMm+5cMsQLR6wDEdZ5B4HCF619EGjl/DgY/ dc4aG5ocbAoysyxt1WLbheqwvVcb29r9dduNxJC+NsmqisqQQs7B8BcdEBwISCAUnTxxyU4ACCe1H/9N smAD4FCP1FBDbk4tVHPilpU23LQjJWftYMEZ25930vZlN1nvKWsSJAQBwiDAQOQVj+bYNvyU6aUnLYdU zNya8+QeoFsSVim1QeGadwi7vI7YqRUrrFRhgvskZxJfIM9Bkz4wHjoNQKCJelaTlQFxpuKFidG//OUv W+eu3Sw1I8vSs3MtKzfXcnILLDe30Lr36Glf4vsvM/n+9jvfsZMg63kmrIDGgUB6JFZg3zLJtfKJIcUE AgOfCFzzohhezHEjMN5F7kGT4axERDEpL+gSPuUrILoYRcfrPs+JiX01gSm5Z2dyTepokonpNJGvCAj4 znV6GQi1QjhA6XgmP5PnPAx+DtKk1OTVZHdyMNB+YAAB1wUx9gVNWI73a4upAUEmYDP5ih/ASfeqZzl7 4TK/4Zm4b70L/c4nYmS0DPfGODFeupbA9ktf+rJ17dbd8ovLrbaBCX+OVYwxPqfzaXx8jK5wH6gUXE8M p/em9/JWz55WXl1jZ1j5rvJdeBcBFB0MBVZ6Ps0TAPwydIH7PYs//uwVxl8MCYk5JTnpnlya4Z4v8XsH NZ7tIsde9GO4F/4WmF+8qnvSZxqj8K5i0nnPcs8+Juyf8WdhbEQ82xm2GquTDSet/CC6PABwdNwAO45U kDp7rOWuW2pleTm43CutWhJBYxNz7wxAcIl7BAh4t2J0eWmaDeOKL3HDeOQ5EyAAFLKXyVh8XYDMM11l nl1lTESXNO90r4x5ExJDJSpIXn6hHd2927ZhU1jf6SXb0PEF29KjtR1dNNdKswsBj9N24gRSBtnFJ09A 5GWcbAAQyMto0pYsycZGMo/5vI7MyVryJarIHak8ddMqyNnIr7tGOvZZO5DTZPtzTlpyeoP1nbY+Uhdi CWHQIgBBtNC32whWSCs5QT2Csw4KTSTJXL9FMA3BPHff/bndwiCll67VScyiVdbpIi9FyCfxiK1PbJjg jL+U8GL08sMqfc0n5Be/9CXr1LmLpaRlWlZOvuUXYIgBDfMLS60AXe2FF19k0n7JJ+7CxYvt1JnzDiY+ sSUZcB+Hj6Xaxk1bbePmrX5fWhHFqJpQ5y+z4rkEAENF4r7uS6uaSACjZxDz+kuD0bTS6D59EvEs+lsT 1Vf+BEDQebWa6XMxqn4rI9PGjZu5ny1W33jCJ4EA01ckmFyAEFZTqT1Bx3UJQyurpBuBGMfpvlwi0n1H EoHOn4cBa0N0fjGwwESSl090AYKv8IjwfK4VXc+kMTl85Di/2+JbjZnGUNKZxrYTgJzDeaulC7Ninua5 RWdggDMXAp1jHAVWF3G/OZAACN179LAymObU+QtWwyqn8d+4Zas1oDMLrASyF2EgAUmw6fB8gKFAWsyq +SByUNYYC/Rgtis3JVlhEHPQ1n0EOktOzdnL7EPO8ADEGe7rrCgCMB3v79bHA2JfJADw787x99mL1giQ FWxdb4fH9rMj4wba0akjLH3xLCvNybGyskq8bDVWh0h/4uSpoBrw/q7xLuW5cferx7qEmJbgCZMrM7jE g/dJBlypQFIvYykuUg9j6U/SIvsX4Y2zSAuNTcT9lNdYZma+7d+52zb2bm9JrZ+21W2esY1dX7cDc2ZY cU4RdgupG5Iszll9w3mrJ3OzgWStOqT5OlT8Wqiav6vrLloVoFDuCVqq83HN6yvsyGqwjSm1tv5ota06 WGH9ZlBRLFIbgsrQDAgBGLYcKrZUij5kY43MqeRipAlfw0p5h8zB229/7G5I6WUCgfMXLtoFDbImDXT2 IroOL8BXmOilnOZlnNaLiSasSw+80GZA6NTVMrLzrLi0wqqq662GiVmDKFpT12ATJ032SfvFL37ReiAx NMBkF7luPcwwfOQo+9a3v+2qR2xz0H6btu0sJ68w3B+TSAAgqeKll1+xJ5540oYMHeHGGulkARAQh2GS kaPGuFFz2PARPIcYQeCGRMMLFXONHDnaf//8iy8x6VgxkYSCfnzbJk+eZv/wD/+UcC/BBvI4x+87cJjx iAABi7DEfTegQpOnTHPVICcHieitnvb4409Y165v+RgKHILd5ZZNmjKV8/+jP6dW6Ph5H3/iCUved4gJ hW5JXQqBjsbXQYfrDB8xyr797b+6776+xd+DhwxzsV+A3LkLgJBXZFU1DdaEdfsU43IKpnFiop5iBdO7 E9BcZDxjQOjWvYftSd5nr7/RKrqf8MzxO6jEiKax1/i2a9fBnnjyZ9amTbuIKZkPmjeaK7pnjhGwCkh1 nJ4rCTXx5Fneg0RrAdN57QewckBxhmee8ZmDgB8bnTdxi21EY3MGOoVoXV/VABhssMOj+uDuw3swdaTl bF5jJYBiebnsBPXWhJHw7Fks/by3K5ofjGVwN0eeMmf44PEJgJ1gwHZVJ7JVSCqUJKT5r/uM6Bxbfabt BbwDZ7nHk6dh6vpTVlpWY2kZebZv2y5b37O1LX/jSUtq9TNb3+U1O5y03EqLquGTU1ZDqUMBQF0dMUP1 ZwGAcwAZW4oXVfFdFQBRCTCUITmUquCPCq3UXLK92ads63EBQq2tPlBOQuMGVIa11nPyJySEAAjbD5cQ sEA1IwAhu0qAoJVGLkAysKCreBLkKz3LynDmHBOIgRP5Pmh6Bt/tacTIU7zAU9rqJeqlnkEcZeJexDJ9 gRcaRFYmZOeulpPPhKxu4IXxW17sOX57mnMtWbrCpYMvfOGL1q3bWwRM1fPSqu0HP/hRpMt+1Se2dGFR bHf41re+ZXt272OQo2tioX3xxZf9N3/3d38PoJxl8mMw5X7EQGLqH/5I5/wL+9a3vo0Idw7GOM8LE+PD YDDlD38Yrvnss8+jq8ktFCZL27bt7c+/ij3kK1+1v/3bv7OHHnrE/umf/sX//ir0Te5lN/dyWgDEy5c+ LsOcrjV48FA8KuPtW9/8lhtW9ZtHHnkMcfAcxwIKSCECOIFAOP937KGHH+b8/+zPqs++yW937Up2/fKC 7kkqVcL96pgHxyj8/WWAFgmhUxcHpKpKGKERgxcGLBmxJJae4pwaw9O8Q4Gj9OdY1fgB4/G1v/zL5nGX aieK38H3vvd9nvmCP4c8EjFwpxzP5Drn0YmRRtBzz2E1D+/gZhhLnlXPlJdbjAGP90RBnlNnmA8iGMdB QZZ35pQYyT8TGESkcRYASNf23+kZIqqvabSiPbvsIMa7gyP72tHJwyx/6zoMe4ABHoBaFiIZ/XTPlwFk jWOIDYncvGL+yPjsth4ZJjWfpSrD/OcBEJfwACpneIBU93X2jIyJENvTjKfG1reMj7YyCp7k+/oTYuST VlhSZSmUHdi9Zbut6fSyLXvtcVsJMGzq3c5S9xElWVJLqcNTpgrpVUgMlXVQzSkrrzltZXxeVgWpDCJV mEoJHyiqu2QFSAfp5ZcsOavJth6rtU1ICGv3l9uAmeuwI6hu6GcAwo4jZUgIpy2L0mXZSAgnzrNK4V68 QQrnrTvUHMBgpBX0lCymGFlOinC3nMDVcgKXy8nTbGHmkyJWmZMAgVbkUwIEXt55IrI04GIWAULXLuiw qAh1dScYPK1E6JMyFPFCxo6bgHj6FQeEfn0HWDno+RwM+dWvBINYq1ZtbeOGbZaWSsr23kOsrt3tL//y 6/7dN77xTSsoKHPm1ao3aNBQZyB9l0b1J6GxXoRerGwWsdVdk3rKlOncz0l/YQIErdZ/Lob98letV89+ VlvdBMBdsu7de/rnuta8uYstL6/EcrKLLBfasW23e0l0PTFyff1pJupFB4XYMPd17lWA96UvfcWP/dGP fmJtWrcH+BodQHV+gYHOP2fuIuwrJZaFLpmdXWBbt+667/wN9WfcU3AFyeUtpA0BjK79+ONP2lKANSUV O016js2YMdteeOElBwONa8eOXSwrsxBxtR7Rk3cJo55ET3UCGE74RJYEKCnnsqsakiz0W41ZV4B6C/eS mVlgmzdttxeel5qH7Ydr9+WdNTZQKox0egcmPmvfviOr8AkXeWUUO3cWkETtqalpah6XF198Bb8+rr3K Rj9O+rJWd1nS9S5Piul9q9Vfi03EWM5kHOffBSA4AfOJGgG7stR0O0xg0L4hPezg2EGWs30zMQRyI1Yz H7ChsAhIKtAC4DEoUcCYbETu/WEuXHD3H6u6XHsORmJu7sGBKMxzBy/diwNqGMcmEUAvsD9BkaEmjIQn m9D9o/2GRlQA7rGuDkZHiskrrLSjx7Ntx7qNtqrDi7b01Z/aylZP2tbhfSw9NdMKS/FQVDVZGUBQShnD smqIEoZFbIsqT1hJRZMVsy2qPWMFAEcB6n828UV7M+ps0+EKW3eo3FYdKKWu6SZ3N7Z4GRJUhq5Dltju 4+UYFU+gMgAISAhNAMJV4gxu4WpUkNAljDha8U/D/CdOn7EmDC5NAIK2jViqGwCEJn3HwDRpMLCkauV3 xmSAzoGe55EAYgmhG0atouIya0CHErq6NVkGNoDh0cceb5YQNuF+nDdvUVjtYCCJ1seo8Xj0KMlYbI8f ywEYcm3atFk+2TUpezvznsTgcs52bN/jE1IgNHbMBKusqOPemAC8ZKkRYiD9RpNdDFNRzvdNZ5EEruPl 2OgTWt+vWL7GgSmVlxIY+6vc10LAoJiVFt8y2/x8bCAFpTZr9rxmG8hQVsnGxgAK8bXEVI888lNbv26L paRkc84sy2a1Lq+ss1TsKonnlxqUnYPB1c9f4teZPWuufSl61mHDRjHZzsPceRF4fcWee+5FO3osw45o jI6lWyrXyOT7HADli1z7C1/4AgzayTIziMYrq7P6Ot4lE7WJyemkySpggBnPAWRa9fS8Gl+B3ObNO+0Y zJ4KwOrc6ak5lpmehzT1Y7+vv/za162C81ZXNdrDSE4av7/6q7+xkuJq/PKnXEo4D4NdwRM1aeKU5jFe vDiJ+yy20lKBlJgosqDHq70zebCua0756utbgYDuNwIz5lzMiDW8z6xVy2xPf6ID8fkfmz/dChjP8rIq JJETLFYX3dAn5peKKECQ5ChPmdS6CyxkZ88Gd98pt+hH14LRNY+auOYJtgJQXV+SjcZO20btIxU1AgaN jKvmgQCggflVz3jXNZ5BVRadRv/HllBLnVLGLIMF7cDRDNualGQrWj8DKCApoD7smTEBI3yBFfJMxYBH EQtUIYtIEb8pBEQLyxssv7zR8ipOeExRHkAgr2EmUYr702tsY3KhrdqVb8u359hAFU5GOvBYBLYtNoTB lEwfuoTqKpUe3igJIRdAOEHVo6sKKCIw5QaAIC+CBr4J5hcA1BOQ0QjVnzhjDWxFjXKn8DIaEctPiISK AgUGSnqTSwiRlVuqQHFJOQOHJRd9S4Yy2RDebN02TBAm1tPPPGcZGbku9mtS/cVf/KVt35ZsRw4zyQGB rGwxSDmMUg7DlPqE1KT9q7/6a9e5BAr1rPhf//rX/XNJEmWl1X5fErOfe/4FB5r+/Qf6yvdtbBNFhRW+ qmtFH4LOrRVPon56ei4TtdJVHTH2ww8/EoFAiX9ehd9YomcNwSjSSXUPumarN9tYBS9Pz+n6O5/97GdP W/L+Ixj70pyx0tEd8/PLWC0brQvGPp3/oej8eYBAMeevQLTX99WoWGVM5vj8rRmv2tomf7YYvLbvSPZz H0/Jcskiv6DcSjhHaWlVs4TQvkNny8CQJUCoYzVpxFClVdknLpNVdIJJH3T1S82A0JaV/sDBY3YcFUDS QV5uqRVy/gLewcCBQ/z8X/zClywpaS2BONWM4YjIHiRAnmiVlQ0A7nlnNNljvv/9H/gYS6U7eiSd913A fQJSvIMmJAQxVyNMqK0s7Sf4TPcVVJwwt5wZ2T+RQGJGnaP4+HHbP7yX7erXEX9/X8s9dBhgKkd9bGJO XkQCiMEgDghTKHAEBKiOMdjEjN7oK3tg9oaI6TXnG7ifBu7PP9P3Ebj6mEJSgxrwFoh0X3UNp6wWgKhh W410IJWhovYElc+xdSC5ZAD8+w6n2CaMistaPWVLUR9WtWHeLF1o6ahVeUh2BYxlIWBQABjks59XUW95 ZQ2WW8o+RV1zKeqaTXHjtDKCkdKrbeO+IkvalWvLtmZQ/XwLQBAHJj0ACN0BhOQUbqKEiskCBMSMMyCk 4g0UPqxIw3OsmBJ7BAD1TQAALpN6VvewPWN1+pzvGyQtsPUVR8jooBAAQZMrtnJLN3+rZy/rBzMOHjLU nn/hRde740n9nb/7B9u+Pdkys/JcRNYK//3v/9AOHkq146gK+aBoWVktE6wJJjnh4lbPnn2iCf8lO3zw ONJAgzPLUzCgJqquWcxkaOK+y/HB61pSNeJVWaCgiVyHGCsdsNUbrR2IHn30pw4I5ViDv/e97zljv/DC yzZj+mybM2eBLV68nAjL1bZy5Rrf6m/ds86ney4urkQ0Pem/+wLM0rZtB9u/X0yVjRpQhKRUBaA0MNnP 2/dgED8/RszpiPmz54bzL/+M8+uZBBCPPPKoM9b3v/8jB4MUxigPkCllNalCVK9n8skoq2N0Xx06drZ0 AKGUMZS42oDY6quXr2QCBNRB3psDAqtoLCFI9D/C+bMBGq34FYxxTdUJxuyEHdh/yN+Tzt+3zwCkpXKY u9rHWOP/PJKL3plWTYXdZmXlN59X705Sn6QtgV89jCOmc+ZyxuPeIiaUEVTMr22jVmWt1Nr3Y8MKrOep 5n2lr1xq23u2se192tshgoCyuWZVVZ2rG1JP3Ssjz08U8CWgkn1DqoCrHtE9NACYYWzYch0fL+cH3Zeu GT7XPWj1bxCo6ngHBIEBhDRQj95f64SBUIQKK0CoZM5VsuKXMw+KmZu5LJapSAN7kg/auvGjbAm2hKVv PGGr2j5v+zass3Sk0XwkSlEBi1E+Y5aDhJBdVm9ZSFiZxY1Qg2WWnbC04iZLzqy0zQeLbDUSwrItGTZ0 xjb6mBCteJ8NAemgM9QNQDiQWWsZxDpn43Z0QCBe+orH7isI6Y4Pkh6wHt2wXg8GU/kkgwQGEn98kAAH R8doldFKo5cVrMstE0uT5gt4ETzmQMbByEgo0V2SwZYtu30Vkn4eG8I6sKpJBNakKQcNNaj+klxMO+eM E0/IKVNmIoFUsmITlcXkDF6LL2G3KOOeT9nsOXOd8Z4DiOT+fIZr6p4koVQhhmnCffe733dA6CSPCKt4 BepGsEdg8Ix0cdebI0NfMOTxvVvyZRT9AgDyA2wVuPdY3QMzfsnF9SOshjlIOFoNa9AHJbXIYh5sAPpt YKxYL4/PHdtDvvjFYHQV4EiV0Lndnci9irGys4vDGLEaaXxktJXaEkspsiHEgFBLaf2wgt1PWhWDvtwi IejeU1ARCqmzWQUQ1zEXdJxWbK1+sTFY95HLSlaCoUwSnsZekpaMi43MFamQsddDn2/F9nIMdaygqJyx avJ5pbnUTBjeGiBJp5JAXU1lK2rUdxwbFiqIOSqQKzqWYvvGDLTN3V63rb3aWsquXcynIubMSbcZyIug wCpFV8qeITvBGdQD2S2k1kh9Cqt7JD0xPrJJBPBESuZvZ34BQ6QG6G+BhG91nMaUrWwqui+XDjAI1jDm 1RFVsRUgVDDvymDwIiSEguIKy0ZKOMbc3Ik7cs3IQUgJTzgorAfgDuzZY9mo3PnltUgIAIKkA6SG7BJU pOI6y6AEfFoRVFBvKbkNlowGsGl/gUsIS7dl0K9iC25HvAxRtGJQGQQIbLsPX+b15DMdEM6jezARKI6q 4BsPJSUS8RyIqYcTGNTxUPW8VKF4XUTa13cNAgYhtA8MaOkMi/HHfcEtE+sbWJTFcFrRfoCo/+hPn7CO nbtZ0uqNdvBgGqtcOtJBIStKtU92TSgBgnRurTxVrEr1elkgtpBcBp7lK1Y1T8iJk6axQjK5GOTNW3YE OwHnSFq9lpfRiNvsDT/viFFjLTU9292P+l5uvvIKAlN4xnhVXLBgGYCAjs+gi6HEePJKfBeLujwfP8Qo KMNgTFJd9Fx6vpdees2lgAp+e/9z5GJACzq1Jp1CTuPxaT5/ND4//OFnn/+VV1731Tp+PnkPUsWwGKf8 3LLsKwRWejBW+PiZHBDSkRBKa5GiAAQMi83kTCAJT7+7/73pHeh3JfodK53AX3q1zi2xPZZAOnYkaSer AEDAqr12czMgy8hbjyHvLIuD1ATdtxaAQ0dSXYWR+60G8VnME+ZStHVAiBg+UlEFEA4CmotiSG21aGF/ qEViydqx3Xb07WAbO71iW/p0tKMHjzIuMjifDW5FRVk6GOBOJ0FIIcKyWzQBBjqHVnZt6xkbp2hcmj/T 9yKBgwNAAIH47zp95iDLFjehxleAICmhjjHXQlANVUEVgGsZ0lYRElQhhtXcwnLLBujT4YHD2IN2bN1u q/t2tqWvP2EroM1De6FipVg2Km4OY5bLYpXD4pINGGQVsLjn11oqvSJScmvtSHa17aXY6vrkAluxM4+G Rpk2kKJI3UbTWS1qsxgAYQg0dJH1GL6USCbEC8IbFZiUj4RwFglByOnx48QfnAE1GxsYKB4sAMEDgCAw 8M80IBqYAAYaxMbGAAiywmpCanWVq2n3nsN24ECKP/AR6DAr26EjMoahV6czmYprmdRNzatap06EdDIZ i4uUYIJ9gAH21U++eHT+FYjssXdiwoQpvjJXoWPV4slwOwKMLAt+eWUtf38D99nX8f3m+kTMQwSTaKsJ mpx8wKWN2H5wjB4VWs2lgsSAoJVSYv8h7BlHj2XZMQxsxwCr49g2pNLoeQ4eSvPvZB/QfcSA0LFDYMYS SQfo7w2M60lZ0gG2oDIFKULnP8z5j3EOqReiFK4jkkFV3wkgtRK3AAKMmMG5iwmyYSWSeK7QVrl+JYG0 AELXBECQbhsmrqsN0fbTAEGM7kDCSlSLu0vnl7FNRkKBcgwI7dvrGQtQl2pQtepdhRLg/vjHP3GQXrFi TfO9zJu3xJ8nhyrflRWNzjQOCA4KkSrji0zQ28OCwzwTIEQrsFvrxbweuHPW5036xvW2hdV0bbvnbSOR f4ex25SgnsmLpKQzgYGS0NydjtdDYKC5Wo8fvx5/fr38/cyxuubzRteIQcIBIVzPt35cAJG66HNt6/is DsOtqJb3rSCjmlhKAAwqcRdK9dU4FZXUIMVWuE0sm/eaiScsjfl58GiqbV+FStruBVsiUCB4aeeC2ZaC BykX1S2X3+XALzmMd1ZBDYBQbWm51XY8s8aOZFTTVqHU1u8rsOUChE3ZNnDKButGj1NvwQgofK4LYNAF MOgybBH9DZfTYUb6RgAEuSrOU9pbmWrXlJ+AOKWMqkatIjyUo5zUBolm2hdAuOQQBsMRUYNKNJUGVmGV ysJqBgTXoyk0kXwcA2EmkzoPPT7f0qCMDJI+csphepiF9nKygMvPLyZ57NHHnTHL0ZMUnNEoVxmr0zmy weQPHsjqE4usq5I24q4rxoXVxLGn7WdPPePneAEVYc3aDX7cT3/6JNfF+g5waCV78smn/XPps7169Y3s B4/DkGK6cl5ao/3zP3/XJ7biBqRLy2+cDgNm4MITZWYVRVTgBrKcnBKkHJiHVa9FXA9MFQOCJmGTYtNZ kf/lX76XcP5gPM3g/Jk6N0a8LM4fSH8Tj59X5q662HD67DMvcM1il0j0HgQGWvkUB3JeNpzIWxAYGwNe CWpFjVYvGE16cgI14R7zDLoEyUKgnClpiXegd91yfkp/7znQrBbJmOigDnBU4Sbr2bNv5AX6ku1DL371 VSQ0vEZ/h63oMMCZxnuQxFQtQ3C8IvuqLGIeiVxPD1JhENkVrad7f5BRidrjmhk7dtim7q1sTbvnbAPb o+vXYmRMcfXsIgZNlwxY+M7QYuDESfIAeN46LXqMhSIAaz0SMIBDAIVYYoilhnDd+68f3asfr33AICIF EmkBqCGIqAYPQA0Gv0pIlcrKcReWMqYC0LwC1AXmrgzCkpIzkLSkpu3bf9i2zptly958ypZgZFzd+TXb QwRrRhZGRlSzAmxVuYVVlpmPgyCn0tJyquxoVjV9VWps9+FyW4eEsHRnji3anEnZxLXWbeTSFglBQOAE KPShserxQlqxldJKDVDIJ6jhAr0UPK2VQo2XyNF2FwvM6agdgcL9YCAEZMBg1ICu6JQaTAa1kZjr00rT RCxuMU5hD6Dke1ZGCStoFdb9WiZEHV6ABqskyaqaAdPvNVFffeUNZ2ZF3+XDADIiink0WZUeqpcrN+Ib kRFQfnLp6LlacRhsieR9+w6M3F9/bW9i+RdT9+kzEIbLx0KOFZ/Vf/jw0RzzFV/FZDTUMR07dnPAKmCg q1h1JKLrXqT37ks+4hZ2MXwFK5tIkkA1x8mXXoELSJ9pZZBl+n5ACNZ0rRaaOBJTJX6/Ej2rn3/fEcal 3JlP5630c0Pom/4319BWpMAo3e/f//0/uPuzlmOk18v2c4H3pxVRnpVEQJAapElYK3EWUJKk0rz1e7of EEJAWXfAsZT3cyKAMZl1ctFe4h2MGz+pWUJLApDTdX4MXNWoLhkAYCzFyDMSGxo7dOjqkk5WloCTaFXA KYTjRszoC0siBYYTcDXPNS08WpU198TEPIfE8XxcoduH9rEkGEjGuI1vtfKU42oMy8ocPMtCIjA4efIK z33JAaBGQOCk81E9jHOLwpyOKAYgv150H34PD5COj8KM62olbZzj/IAC80ESQjXlClWysIo5WgkglOEh KCqq5f2hBij2BCDIwAgqCVb2nqN4jXYDuuuJSZDXYRn2hA2De9khgCKThSc7rxI1AzDIrcAgWYZ0UGWH M6pwOVbY9qMYFPEyLNmRZfO3ZmM/SLpfZegyPJIQEBd6T1hFn7oTlo4NQXaEgvqLrCgKz71H4Qh0LF64 oqyaXF2IVYMgGbikENsVHBAkRYCaGozoRTYSRilAkGgZT8gO7bsSKESxCfSdStwj1URY1YKcdVRtqqeE m8CgkfvQSx82bIy7ITXhBw0c6uqCBzMh6mkiqnCE/OzxuZ966jlE0CxWzwomhvTc8xgpdzVPSK1KMsjt 3HnIJZLi4jBps0BaAYIzVnTMvHnLLD0N0Rew0otbsGB5s2vtcSQMMaUCTs6iDikA6xy6ugKFZKXesWOf zZwxz4N9ZK1uBgSYID09MItESKliTUhRWmkWcv74WRVcJGBRnIGfG7E/Jq3au3btt5kz52HhPw249W/W 01evXs/YKww3jJEMZgKE5ORDCYDQzZ9dk1BALimlmbifRt7dCZjkTJRvH6sycm8WAlJ65x5tqPGniIcK dGhcxfTf++4P7dDBDCQJmByAF6PWEETz0kuvNt+jXJN6B1u3JhNLAuAi4laxWtbx7rWY3A8CWqXvJ8Xx P/hZ/LcYuYb5VFxQbcnz5tgqfPkr33zG1nZ82Q7MnISOrkxGRUNiLyARqJ6xFxh4LgDXVziwM7Dum8Wx hs9q9Tf7Pq8dsEIOQQsoRWpGBB76vgVAIvXDz8E5meMqV1iNqlAldYG4gQqoHC9BCXOisLAady42BEkI AIEkxFQRAHcQo/r29etRHZ6zxa8+Zit4rh084xHc11muYpTSYKnM0rJLAYRSO0Lho/3HymzroRJbvTcP CSHb5m9JpzHzJgSCpVE+k1QGAQJGxa7D6OKM6+EYgJCG21FqQyGxz5foFuRFOCjhfAmDi0JCtYLVuU6n SRwDQsLW3SqR2uBoGUkIDPgpUPgEk+7LRP3Jgt4RQMhIw2gIM9YSainmb4AkTWjbwDbockSaMWmVMxAs 1X9pUybP9NBUicGKItuXfNit+bEVP2nlRvTtXF48kWi8NFmM67E6a1Vy6/3nv4DB7wcEOOH2Y/DKyxqd GWtZVaQ2+GT9/Bfd4n9EUoxWLyZ2jQrQ8tIEBJrMup+f/OQRmwVTygOhlVJ2hvnzFhNN2Qbm+3NiHIa4 dCAd3W0IenZsCBkAQnlJA+CH8U4MGNlnwvl/9onzK6DqEswtgJg/fwlSTluP3Ozfb4iL2emI3F8jICg2 jB7C7XoW0FBlHYnsw4aOJFT6281jpJU5AILUrwAILh0kkCQEvXdJGjEgyIi6c9c+lxQVuadKPrqn5597 ySM6df1x46bascPYXVD9NNE1tnr+hQuXNXuBPs87ePKJZ+zggXTAsQjVQnEWmjuxDv/ZDC/Gb5YgIqDQ qt4s3gsQkDCLYYo9Y4fYKphmBb78zeNHENp+CLsRYIy+Xi2pgsWihmtWMU+qeBeVAHQIDRYpP0CgECjk EAACZANr0RL5NQEKlyYioGgBjPgY5pbO4QADGPCclYB4JSqxQpHLAYVyxknzXCqcbGT5BZVICaWuMqSj ekotTUdlPA4o7Nt3zDbPneUGRoHC6n5dbRdemuNSu/EupWeWACCldhQ6lEo8A/aDTQeKbeUeqQzZNndT pvUZk4R2sNi6RgGKn5O60HnwQlcZBlI95RiFF1WEMYPOtgV0VFZ9tquSEKhzIJFTq7t8rK67CRDczSir bovHIbhVgj6qFcbFOomhnqZJnjaDoRVYTCkJQatkGQNQzwDpeF+hxBwAiIAhlhBkcFm5cj0RfF9rdsXJ rvAYEY0CAjGegCbo/2Sy0XkqUwwHE0vHbOK8dTD7Sy++6r///J99wdphw5BtQOqCpANJEbJX6Pe6vz/j GDH7Uc6l4KcKt0XwIpESJOLKixCDQsinIIdBBV+4F91P7B7U+WTHkE7b/OwuIRAtx6R0QNDzQhI59ayH D6e5O/FTz++5Dy3nV1RmOauKjHzdu/fyexfo6Fqyc8juEvIl/hw7wzdd+hAgtm9HYJJsAQCQGPYEzP8J Uuiw3nsMZpGrNUQshvH/Kd6hOB9D4//qK62wCcj2IZuAjL9K3Q1RhfUE4fz1X/+NP9ef/dnnSRwb70bk HFZDAUesarq6qfkT6fCB+VvUiCDW85lW7mi/JgKJwJSyISDxbd1mmzu/aqtbP2vr+3ezjWs3Eep+xG09 AoQa6fTMUQGDQKACCTUmAUMVf1ezWImqtE0EB/6uAxh0D4FUnDiAgt9bdM/6W/crKcOBhTlUzbU8GYl7 rED1EpWL3I7Q6LalQsYuT6DAgpUJk2cQkyCvje79KPaEHTv22JoebWzxS4/YUj3frBmWTMDY0dQiO5aB uzK9GOmg2A4KEI5iUNyfh0ER+8H2LJuHDaHHuCTrjDDQeTAEKHxOQNBJqc9sh07eQHtrJATKMwsQiml9 fRFAuEb1I0kIMSBIb3dfsAdeAAoKTHJQCMDggReRtTowtkRh3F6QAKEWMS5mivaSEGAKoaJUDK2SIb9b cd6X2ddEFDBIrzvNClJry5attu9/T4yiCR8mvQxT2n7723+DajHabQfpablWjB5WS4y3pJJTWvW4t6GD RzQDgkKR05m0ZbhpZBORFCFbQ/Lew85QWsEUQCQrvgJwFPOgZxFoKJhHhr2evfrZd77z9+F+iAuI8xN0 Pz/CVdiv7yC8KMe59xpXD1oAAQmBF1uONCHd1w2KMJ4i8yTK6ths1Bcxu87vDH7f+b/sLk4/P56IIlyM ch8W8szS8QOQtMQwaIx+/OOHWI2PRcwoQCB0mXuQRBPnDXiuvSIBm6MCg9FWRtlw71/EVvGou1zj+IgQ //AVl046deru7uJjx5EOWN3KiJ6ToVk5CGeRJhTbIZDVeQROuxnrYxhNC9GbxXzS/esEAhFJjI9JDB+L 72IuF+0jBq3W6uzMGNkAtAIDkMnDetlG1ASpCluXr7Iduw64N6iY91HNM9XzrPUAoUChSmAPo1ZGoBAk hUCBgSPSCu8kNSJm8rAf/g6k72MQiI+vdGBB8nAJIVyrkhDjclQlSQilovImK8H2pESmAiTcXEAhG8DM yi1zaVa2gnTmxn4MsVtmTrHFLz9ii195zJb36mibcanvO5RhR5G8DwMI+wGE5JRi24n9YENyPvaDTFtE DMKcDSn21qjl1nHIYusIGHQSIGinowBhyEIbOpXqslIZotDlcpjxEpKBylZdpdCjijeeQdc6gZgeIsZE AobIL+y+4CApaHJ5lCLShFYcJXKcUmw3E16TowTky0C0URx8Pg+olfMkCHqqifh0FX6g6stpLL4+MaOt JI0qmLuQwdFvF8xf7gE4moBdSJKaMmUGemi2u65S6Vidh8tGcfSqNqMJrWQaBZlUshpmIXYdPZzh+RB5 Chji+u46kz7JVuK13JU6l0JphcpiXAWk6Pll/KvDhiH3lc51HJfgdmwFkyZOt0mTp9vkSdMJvoli/OmC lQ1wCBBktJQnQ/qgPBO5GEcV2CPJRDkDofIN48u4ye5RDAiJYcVc27dzfuIqJuv8kEBK11W8QTb3UIJO XAXzybMgr8P69Vs9GUtj1JnYjo2btiGR4MnhdwpaOqxoT3ROHSsDrcbGsxwVp++UUImHfUl9eoY0gPYQ 0osiISfxnBp7kQK/du7c77kTul/FXShOQcE3IbiJOg94gdIpiBO7JVvjdk4GoNI1PkRTikHlovNV2w1v EYkZm0X4WJSPmFerekTOzDGx8uYdOmJbCEhaR4LQ1lGDbPvWPa5nF/IcsvqfwGt2AsNiA3OsVu9dacQP SAlBWoiY18FCzCw1IqQaO1BoXxmIbgtoiD4LaoGkisD48TliCQRVQeduVhdOkZREYpKDAclJSAlFLAoF 2K3ysIPkysjoBkO8D3gg0pnfR5hDOzduw+PwtC148SFbiJSQNGWC7dh9EImAru2phTR6LaZfa4ltO1Jo a3fn2oKtKTZn4zGbsfKwdRyz0t4cusDeBANaDVpgn+sAIHTgj05ICMOnb3CVIa2UWggSjVihVQ5N9RKv ICmcQ2VQyqoyyRS37Ykb+IFD1FgIGHFw4DMlFGlSKxgmxJhHaZ9MLPmKNWj5iOB5eABKmfT1MJeMbopz ECljTdcSKJxyCoyiSSvm1WqoCafJeVyJQVAK/vk0JdigaxUSjCTmkJjr6aaeCBNcejXo2sW46OSWy4VK yRyTbSGk/HIcW0kLZUxmgYWO0fG1GMQEcCHzToErWg1wFeFdEFPpumlIG6kAgO5FW+n0WXTCKuQFygsg o1oF96W8AgFWCSG9gWEYoyiTz7eeoSdQIJsN0TGPlUHuS7mdHAhgOIFpOH9hOD/nleSigJcwvvwmAoAU LNNpgKRiEwRg2XJfsp+LGKpcAwUlSToKz//pJNuRzqtnFaApjFuRm3oHAiWFSSurMo3PBaYa1xri8jUf ThP2rDoZqqsg704MCJs27fRYjTzGo5z3KimwFimuOpF4JjGcxGtRvHonivb3ifnRMVpt09attU2kEK/r 8JLtWDCX/IsUH3stSqflXTjHnMbD0OSAQFGRzwSEwMR+be4l3vfVXcBNzEDGli22f2Q/24Ib8Mj0cS5R lrOAVchGkKCG3LfPd+XYpMqgUqSEYgzrxdx3UfkJKwQQCpCc83n/+UgKeSyi2RgaRVlQJnP8GHNrz76j tp4ApfkvPmzzXye0eWAfgsA22a79GcQd5Nue42TfHi2xLQeJUMR2MG9zqs3ecNSmJO23DmOTrM0QAcKC AAjt+a8dgNAew8Lw2ZstpQhAkMsRvagaA6DbEBwQsCDjrpJVX8yqTEbFjnsGl4eQhjBSJwFClMPggOCg EDGlJjurvkR3BY2IucVoyo+QgdCLRyYUiwxFJaNqslFRSVnbFeGlyVnMCq2kJjGXJqoi88oQE7XiCQwE AKEQpa6vVY/75v6UblvJSiom0rniwBqvVafYdUWXMTlVJ0DkYBCtoJ7DrjRbP07hrAqAQffjxRWzSheA 4LqnQiaJTwokEt2P7Bge9q3JLpekGCBaPRUMI+A76RRWZuncbtNQAQx+L3WgiPPr3GJ2uToloQiQdL5G hQ9HyTS6lp5N3xdwrIBNYyRg0/GSkirkxlSeB8+m5z3F9eJafdreDwzhWRV7ovMqF0H5CcrPkLchjL9c x4AcoeIaM0V5epqv3oFqUxA0VkH0p+odSNV46uln7eDhVI/FKGLCVwEeIb4/kAftwGzVUFVEboSLGFNb rdQPMlv4/izj3mR7xwy29agKG7q/abtJ01Y8h+wzmlPnWeB8kTtzNQBCgsrwmQxMSrHsSIlMXsZn2eRv 7BzU3aWRTZ1fsfVIJClr11gBc7FU8QUOChFF+w4EESAIDEoobixAKMKGUMS9CxAKMTiLCrCx5SEp5OKN U8BRZkGVpUOpqBGSBLYsWWgLX37U5qE2zHurvS1ftMLW7UyhNWOubT1ciHRQhEGRgCRsB3M2pdus9QDC CgBh1AprHUkHDgjtIkDogHFx5Pxt1GsPBsV8GUhOk33oZappGIHKcAHruVJAT2G1FiBo5Vd+ggNDFFuu LEjlE2iCqQiJr3xRTrrXRfBiECFZxLPFmMBamc7w2dm4gKR8w8QWBIoBQjnnLZVmxeju7dDEYUKLIUX6 28+pwhrNFWlDamzIWFOmpn6riDxJNCG8WucLUkyQENxFqPN4/LmARfn7ApUInCTJKBff02FjYFBwitym ZLAhhWjV1Yrt6pNHCgZRXNfyHA9nXj6PjHaftTLre0+fVUCMmCV6Xm31tz4XEOie4/uPY/AVpSgwEfAK gOv5W4FlkuBicvuKg0FMUXpvs+qQeN96b2HsgvFYz6vxJy6ChBxdQwDrY+YZgSEzUeqQ4kUGDVK1phYv hNQx2Rmkjsnw6FF8HslHJSBVA0pQGVrE86AyBF2/hSpcNA+reCV2KkW47hzS09WFLf262P49R3zR0L3J PSpvzTnmQz3VusoP7bfilDSAkhgYWfs/ZVXPo5/CsZkT7dCEYXZw6gQ7vniuuwel6+eh8uybNd02dCMA qu1zeDSIIJwynvgBQBijdoXiDLgn3ZsKmej86n9Sit2gRGDA1qUDgKCA8+WXQgBBHpRLclIuNq4cACGL OJ0MSGCQTtzO8SwA4Vihbdm0yxa3e9HmvvCozW3/hs2fMd+Sthy1DftybPOBQsCg0NYRobh4e6bN3JBm 09cds4nL91vnkSuQEBa2SAitBs231ngZOhC2PGbR7lAcRVGKeBgaTpOaqt5xGBW9bBpuR5V8cimBlFEV zvACEA4OTGwKTDT/rbRUMb7XRAhAEFb7OJec7xwc4s/JplOAkfvvI4oBIaHstJejdmBQ1dmwormdIYpW dKZ2IAglqu8XgaPqORFAOWOK8SMAiBnWjWoRM8Tqhs6l6wqgHKi4xxiwwrUS8uQTGCmRyeOV/5OMHwNR y6rcLCVE9xpAVYVLUMMiMBWgJhYziY2B918z/CY+zhlf4+OSUBifRKngtCSVBArGxYhcaokoQYrR2McA JBBwY6SSgiKjpAOVv6OLbhyV8fFb3/orYhTSXK2SF8KjURMCi2LXXrwNAUKRyy7aVrFoVSLJykgXKMFI B/Plo9Zs79/F1rXHfjC4px3CVlGMeqSF7AKu6tPUTsxZON2OqpvS4O62o2dbOzRphEthZc2rOgzMveVs XGdbqW24lUjHLUgbm9hfjxpyaMEsdPpyB7XDW3fahoFv4dp82guabBwz1A5Rz0BeAnkPgoSAKuoUVIVS qKQiUDGBeEWkKBeWnQQQThCGjB2rpJG8BDIWAYYsjK4ZnqhEKDLxGil5VXYkq8L2oxJs3X7YlvXsaPNe fMzmtHnNZk+db8s2HLI1u7JJdy4goYkaCHsIV8aYOGPtcZuy5qiNX3bAOklCgP8lHbiEoP/a8EFHEpvG Ld1tKRgUcwCEYsouNZxRtaDQa+4SlZIuUBtBUW6qnuOFOAmQ8Vp3Ue07pceqgoz+9tJWUS07raRipLim vJe3ivRlT+aJGE3Vc0IzCkKQo6YU+uwskoqaUXj56QRqVi/imvTRNpxfOQGfBIVYWmmSPSKa6CHfPlq5 Y7CIpRoHLK1uUbARVvL4HhWQc04hvdxbc338SMJwe4RWfqeIyWLpIwFs4vJeMTPfvxUzRxV2o/x/Z7ZY DdM2/juB+UK1owAysQoUVKYIIBO3sY1GRlwVImHbTBh4TzhFrsgYDBK2zcVLmsuAB+mqxVMR1TJACpHr tk/vAdRs6GkTxk3HoIvhkRW0XEFRCpvGqBwH/MTBPMHN2BIA5O48eRWk0kZuQBntgtU+Qc9Hd8/FbrK1 bydW7Odt20g6L2EILUcC0Hy8QE2O0q14mGaz0s+dagemjYXZ37B1BPqkkCpdUEjuBaqBVJVyMiO3AwSb UQV2Tx1ve9Zvsm2s/ivbPGdrkQgO7tjlruv9qCQbhvSxZa//zBa/+KhtnEyvBXJ0srGVlelcAEuIOYBc CpFnQWpCRNgNigCDAoCgAKkgr4g05iLSmAvrkQrqkQrqqIGAVLA72Q6Sz3AkvcQOZpTb3tRS27YnzZYN GmBzX3rCZr36rM0YP9sWrTlgSdvSbR2BSGspipJE/sLcTUgHa47ZZAyKY5bsAxBWWivSF1rFRkVJCG0R GTqNWIYIkewehlwyHUvrCUA6qx4EAgSCkkgAuUjwiTr8eK64ikcqLj6uI6etKisn/i3wQKJQOqkzj0pP KdvRwSEqO5XAbMqNlxgnUmSdAny8ZJUkBq3MznifAgpMatkdfJWOpA5PEooMkb5ixoylyS2DnVYwuRgT yItwSG8XcZxIrkAv1cW1BQQenuv3p3ujOnBcTsttCpJ+QtEOL9zhYKBtXJashbmDBBIdG30fH9tyfFwM JEQ4xuSVeKKVWM8QKvPI8xHIpaXonK4KJYCK31MMVtG4OGC5Jyeq8x8BQRPbZsLgpjiJZoquFYNpDK4u TcTf6XhPH4YUcCVjHOJzDgEzacfzPEakGH1Ysfwe4ONh7iGyz7cK9Gn27wMK8ve73z+QAtkEJMoJEBgk 2hYqAIRsjJVb+nSw1Yjwm8gQPIq9Qh4Yt2eQ+py7bK6lzZtCpGwWbtujlrxonq0hvHktx6dTvFYqRwWq X8aalbZRagcxDDt3HrBNRFVuowjskjeftWXtX7Itc2d7XMPONetsXd8uhBL/zIuZbFmzwYOHcjAIV2AX qAYIFNSmMGW3H7i6IOkAycClA4HBCcCgyfKLGlETGgEDQEGAkI9kkFdjB/YetE39uxKC/ZLtmsN1jxfY btyJW/Zm2rKhQ23uK0/azBeftKlDx9q85btt+eY0pIQ8KNdWbMN+sD7Fpq48ZBOWH7IRC3a7yhCDQYuE oOSmkcts8op9blDMq6JaK66/E+dUiz9ICGqDFXrMkS/g/eXiLkShAYpKnymVVEVE4603M+E4hcw6E6me IiChjLsACoHRJH4rS07HeMszFalQHzuu5UyHlBBLB77qOShEK3ck8p6JV8PYGBZPbmeeFmZxJncwCKDg xTQiauBvj9DT1hlN9gZ5PBQqTLlwb10Wwn+1VZFNAZ6yLF09imIImhkigVlD/bwAQkGvjhk5bEOsRgAo F8EVsxGTdHHfj8ubaT8y3EZ2CGe6GNyaASIS2931CzDI/RtJKzHze6OPxBVfgBLFjCTeQwhnls0n3GtI LIqKgfjn8TjGIBsFlXlMSQg0q5M7D8YoRORVOLm2FRTuqCV81/NVEqglHFmqQggyUkCYzvEJd2QECImg UI7InwOjbx/Q1Vaz6q9nhT+y/6AXXXGjMEVispfMssNThtvx7VttLzU5k9etQ5ogvPn1p+zQzj24+Cgs g7HzCBLEekBiY8/2tp1yejsICV/To70tbPWsLe7R0VYlraPX5W7bvHCBreraypa2esbWDOpJSf4dHoGp 8OMKbAMKklK8gQBBNgVFJpY6GEgyEGE3AATyREgHuQUkGuZTjkDpy9CR9HLbNmMmNRZfseWtn3faun6H bSHYaMvudFtB6r4khJnPPWZTkMRmLtlmS7AVrNyaZSu3ZdvSjRk2a9Uxm7TskI1dvN+GzwMQhq9wl+Mb sYTQdjASAoDQffQym7ZyP/aDc2Q5XrCKJuINqKeoltRXadcmKSG0o45aoXmvg9CEIu5eHBp/qvJMC6lG nZep9mq1YnLsEDCWkpE8FVd2A0+8wV7hBVZ13tCaS8eqhFmw6LdM+EQjXNCHY/E4iOeJgTWqwdDCKFGV mxgAokntKdqyoCui0tO1o8QZlxBkK1ECjOL1BVhUNfbWYaHElnIKQg29UB3H6z44c0SMHjFpuIcW8In3 PZzZjauBybwSj1KPY2ouyhFV3ZGR0ynk6TeXO9PfcgH7d+E6wagX3MOSLoItIRQxaS5DFoNHNE5B+ohW 9SigLABBVPknvq+oGpBnHXrmYVQtKE6OUmRqFGWoZCkFGXlgDoa0CoxnikgUcyh12vMAEhOCmgGgJUy4 ueS4yo97CfIoldjTiAOpBJwMkzpnNZb/QvT6vVPH0dvgWYKS0PdXJ3n5ONVrOA0VbVtnB8YPBjQ62U6K rm56602qG1PynMi/vdTgTMP7UYiXKId+FutQO1ax6ie1fcFWtX/ZViAZLGr7oq2YOYMitqtsLSCxbsIY W9HxFQDhaduK1LAZkDiCWqQkpXIMhZXcUyAlMSlMOVAJdgOBQlAVBAaN9MpAVUBFyKKOQVpWjR0lQenA 0QLbMH0mUsmrtvCNZ2z+S4/bmuGDbM32Y7Z2+3FbOmKMzXnhpzbj2cds0lu9bcrcjTZv9UFbuj7Vlm5K tUVIB9NXHrEJSw8CCPts6Kxd1gnbYQCEyIbQYcg8Vxl6kfo8C79kFupCAaJaxQmSkEhsuqxMR4qsqp9i 6K0YWnUJDNSA1dtte/tuCrFG7dodFFSSystSRS3IvO9e6J/oK2tUokqMJpKKIMBQGatt23eShLTd1m/Y TKjyalu0aBkpn0ejnPc4viE2wAkMEMt9ZQ3iqlcOFkNoVY0qNoUceqkEcS69GFGSQLRNAII4zVbSgmwN 8qr4PUaAtXXbTl4297d+s5dKW7BgKf0RjrgPXenfSm8VqMRqh1SQINaH1dOvq/uIr+kAFBfeCNV1ArMH hn+wPkFzrQL3XgRwaJYg/LNA7iXxKlIRKKj2YGRriO+nBRiie3TgSqyHkFAfIRGoHtyP7zNKA47BIDEn wcN6EfuVZi2pQCTRvyWDMBEAQt2ARHLvg1OLa1JepUA6Nmzl2ZF3Re7VY9t22PrORCm2f8F2DOxqeVQe qqeMXRMBddVlFbRPW2ZbKW++nliF1dQWkIdg17r1lM4/GNyhZLfmUsfi4JrVthoQSAJYVnV53ZLIG0ia NYt6GSttOZGzaxYstpWoFMu1egMam1atJ+nsIHEZ1MnEqCiXseJJlLFaibQg16eAQcBYDFgIDHKpapRN haPs3DoiEQncy8atmFFB6HGp7TteTFxBtq1ZstoWdmlnc179mc16/lGb/9pTtmLVTlu+4aAtGDHe5jz/ U5v+9CM2rkd/Gzdzjc1evs8Wrj5q8zEkzll1xKYsBwyW7LfRC/fa4Jk7AiBgQ3xjYAQInQCEjsPmW99x y232qkPenKVIgHCSlVl959W/kQKraurqXZa9KWeoSusNQOlUs3v3HnLgk9kmk/Cym4i6nbaNF7F123bf 6u/t23c5SZ3QyuqqgzfaUOqyOj/RCUnNTTm/cvr/kpr/qjqs8mP/83/+iRc1VRCQXnpsXQ/17CMvg7v+ ouKbsdU7rrobiejSb4MxUcDQIrI7kyrL0BkTXVc5D55aG2wKJwUI3KNSqwVq8f0pdv/zn/+8/fEf/08v ZOJpyHK7qbCHwCi+nq7p7sYWim0XAo77inpEFYvilT9UP44qILsk0bLqx0ydyNzuhfDnDWAYynzH9ocW r4p7VtwN2xIdGUsO7g6OKZYM4tqAcdmwuCJQVEIsSDQtakOsBsXql8BVY+thyQmpxSHmP6QW10VSggOg 19KIKhT5Ns6mDXkyAUBVtET1N+4nz7pVcBZMl0WQ1I7xw11t2IjR8NDsyVZKtSSPY8FNqkzCw9u22f7l i23P2rVEMjJPKU67H4+EAtcUnKb6DMcJAttFlOOWtettE0E/q1ETBATLkQ5WLUuypInjbFnXN20ZUsNa PA3r129HDTnquRwq+KKqXQqIUs0KRW+WEkiWsWyB7ezRgXqPy7EzIIkQhZiB1+BYehmh3CQkpZTYATwI yYfzAQNiDXYdt1Vrdto8mgnNaPWCzZA08NyjtmjKLFu4cpfNIXFtNurC1KcfttFv9bfR09bYtCV7bHbS IZuTdNRmYjuYhCFxDLaDkfP3AAjb3bv4xuAFESDMp+rykLmkP861fmOX2ry1AEIVKgOAUBUDAt2aryMh XI8AIVYTblJn8SYSwW2kg29+85u4kb7l9I1vfMOZWa3GY9LfYiJ9J/rud79nI+gqVEbJJ9X4kxtT/Rrc /oAtQlWMdLx+r1j8//W//peH3lai/ylc2INd3GoejIkh1DZ2cylYKrLERwY1jxPQxI+8DyrQolXfSVl8 imAURTYAMavn2ouZ5NqUFwRAkN1E96j7U8akAEu5DgIE5TsozLgCUJDYGu5BfQKCRyVsI+9KBGT63iv0 cj1l23m1nQggYqNhiI9oieWI+ww0u0Vj12FCzIUfH0tIHjEakcAkjhzV+Gkc4jGJXMJ+r1G8Ruhr0OLV CJGpD6g0cSFRXS8KQHOQ0XgqgE1jGnl0VDU5FB9RmnGoNRCTANifPZKggpoSFWoR2Hj1pshWEalNcSm/ EJ0ZpAnfRuBRTXyEXIiHtmxzNWAthsHNVE46tnCWleA5kMdBVawU+bmPaL9duw84Ke8kjQhPBZnpfWpl zyGi8xCh3jsAiw30AlmzBlBAClhNbsSq6VNtKTkEyzq9bkvbPG+bli4zRWDux8OgyFKF2acTEJVKebiU vcmWsnq57UAqUcKVyrptpzT8Ec59hKjCw4cLqIqUSy5Ctu06kGk7kjPwIFB1edthW7v5oC1bBeNPnWvT O7S2aQDC1Gcesnm0FZg+f7PNGjTCZj3ziE352cM2sltfGzl5lU1esMum416csfSITUZVGLcw2UbM3WXD 5+6m4vJWaz9iqbsb38C54EbFLkPmUEtxDoCw3OauOeyAUAggVKIyqPPzVTV2pX3b9ZuAAiBwXaqCN7AI 7cHVxy4GBG3VzUcl1lUgVIlH2upvtX8XGOgYbfW3AETNWGQfUMsu9Ye8RIegREBQRNuf/dmfeR8GRcdJ SlBpd2/PFcUrBKOeGDpa9SMJIY5J8OAmHSuXoTweIqksIveAqOa+jINRYU15ISIJwplaEkIUh68Ozi0S wlebJQQV+9DkKmOS1VKDIK5f6N6V+Jqym7jtRLEcqhwl+4MYJkgsoVpvUIlCPwQBSgAv70akduDuypVR Vi3AgudG9+8kF62OEUgIJN04KXtAbJQMElQcE6I6CbENJ66voOdUHIjXXvQ6irH7ODQfcaZvlj5CRW29 D9lRQtOUMFa6F/fA6J48mE3PSkCbQtcBhVgKqxEwRDabUDFKUlQAZ0W3avxdutLf2o8Cy5Qg5aqNgEIS QwQGLkl44R7ZE8giJJtRvSp2L15ga4hHcFDAVpA8ZoDl0Re0CGlBBXQyCb9WeLcYWCHxqpVQrrwQSOK+ KlerZN3+5KNIuntpSrPDNuBFWDN9ii0BDJZ0a21LUCnWTRgFWGwmLmAvYdJUAiMOQZW/96Fi7iR0esuI /gQvvYGK8gpSywu2EtvEWuwA6nGxfc8h27HnGHTctu48apu3HaJf5kFbu2mfrV6/x5av2WGLk7banPmr bGqf3jb1xSds8s9+YvP79LLx01bajP5DbfpTD9vkJ35iw7r0seHjl9vEeTtt+uIDNnnxIZuIIXHknD02 YuZOGzZ7hw2avtU64kxohbrwxkABAhJCVwDhraHzrM+4ZTZ31X4HhKIaYrpPEudNnbmrt9S1SYCA2oC0 cM0Nh6rCfMdueXebW87kIjGKmF9ZbH/6p3/Gyv6nzsz6W59LUlAXIlGsEggwZs6c4w1dVPdf/RYFGF+P JI24oYvKmVVSNlvp1u5Hhpll9VfrdOXjOyioW09z8E4IjPJqSjJaqmZC1G5dLd69zXu0veQeA8VYEIkJ Y4nxJDFoIoYIO9kQ8ISoYSuglQgISt+VhKC6B6oCLdBS8Zi4dZvUDD+/PC3ynET7spmc53pnonuPVYr7 Ivu8ZZniPuSdUXk4uXyD2zc8eygMI4+He3LUXozvQ/lwgEFM5F6DYCQMEoueJzCrvD76jY9LTN6iLKLY vSr3cmQEdgNvLJF5GXQFpiFtRIVb/N7Uyt4pnMeNw7ovr2ZMzULurRGmr4tLlUmdkHolIBOg6f4jOi0P kwNowmcu3YUFIEgRLSqFVwNPoBo1PUFyS2F13jp7mq3BBrCa2oobiCnYRn3FQ9PGWebmzbRjJ9sSXV/Z tGWAiIcnE96tfYn5ys1QrsZBskr3UJBm6+p1tnLkYFuM52Fx9za2tEsrWzdtoq1atREJYoft2nnQ64Tu l+SBmrF+8nhbgyqxqtubtopQ6jVvtbXl/bvb4t5dbfHUmRQGBlxQM9YjWazbuMvWQqs27LKk9dgH1myz pau32OKVm23hss02d9Eamz5gkE176Wc2+ckf27zunW3UxMWAxCCb8sSPbMKTD9nQzr1s6IQkGztnu03C gDhh0QEbt2ivSwdDpu+wwbN20Ndxm6sMrVAZBAZvAgpICHOREOZhQwAQ1uynW9NZesEFleEMEsIVAQKt 3AQINwAE0U3fyoYgw+GtZlVAq74Y/E//9E9hkj+2P/qjP/Kt/tZKH0sJLYDwF368xG91fnZQILApqBYB YKQ2KNRVTVTUoESrkXrnySNxVQzN1qMniW8I+nAUmSeRmMnbAgYBAGS4DC5SdWYOW9+PzqXW7VIPPHAq En21WgoQFJSla98PCH/mgPAGgKDeEaoWrFRwr1IkpoiZVdvYQ+PXEkiIUZRg0yKZeHSfJIPmsnABUC7L HRu5O2PXpz+LulpDwTMTvDjOvJJ2onwIB5nIE6PP3cXLvbnHxH8bjYla6MX36O7V4PXxz7xpiSSQ4GIN HZJCtKpsQcpijF3M8ZiqBqcDlbueo16IPO9pxlNZhg2AgKQFqRL6W4wf90p0gNazCPABE//c96N+CYqS jULQ3aagsn5Rfc8QVh3Cq5WurnL6qtB95MBR27p4oa0b0J3qSU97vMEGAGJLl1cteVQ/yz14mGI1NZ59 WkEimtLbC1TXEDuDsmePACp76dO5ddkSW9K7Cy7H9kgGbWxZL4Kf5i/AAL7OK0tv2bbHdrHa7wM8dmEc Xzdloq0c8FawMQgMuH7SosW2mCpc8+csotDNUrqbJ9my5RtsZdJm7ATb2G615au22rKkLbZ01WZbvHyz LQIQFrCdt2C1Te/bH0B4yiY9/iOb07WTDR6z0EZQSmDyT39o45AQBnbuY0MmrLDRs7fb+MXJNnbhARs5 d68NmbXd+k/fboNmbAcQtrpRsc39gDDHurlRcSnGh33ej6GoJhgVT0llUF9HJwABm4EDgm+RDuRBoNNS bBsQ80pN+BN0fon9Q2mRNnLkGJs4YTIFR3rTpPSfmm0JiRKC7ASjRo9BBCTjkGabD6oW0tUHDhyMCKhm nOq2dCWarGGyaZJIXPXuPcpL8NwEXEvKv5eo77X+4lUwrF6+wkYrmRp1yDbg4OKAEETzOIpQUoZEX4/S JMItBgQBlSQgAcLrr7/pXXtLIkCQqB2vlrEkI2kmgEQLxdeTLu8isQOCOhmLyXRfMrQGhvfWYglMKwAQ 6XMZer3JSAwyun+dLzJEyhaha8iN6x2iOTbRPRz/9iL3poxEjYkAwcHTe20yNgIvH+fgupSqJ+DTuDhA R/fjsSRR7EloeR5LNJw7aonmlbdi1UwSh+w0klp4Tw5AuibnE2hqzJrJQSGEz+sdu3QgrwPqgZg/VGpO KBKrfolU9VLxEeUxKJ19J8bujVMn2ppe7fAcvGBraLm+nq0khuMrl5G5SHHfqOqxKhUps/QQQU176Mi8 aswwwKCzLSaBaFHX1rZyxCBLojL3qlUbbN26rYj+u2wndohkJAPVwty2fLklEb24olcHVymWAyLLqcGx eMlKvFPQ/BVsVzggLF2GoTJpI14DvFerAQNoSRKxBEnbbfGK7bZwxQ5bxHbeTDyC3brZ9JeftgmP/cBm dO5s/UfOt3EU3Jn0WACE/t0G20CKn4wEEMYuSLZRCw7Y8Dl7bSCehb5Tt9iAaduhLdaVgEQBwpuD55HT IAlh6FzrNmKuA8KMJDokqXQa0WEVqAwnKYrijV5vv+egICCQdOBdnCQhaBLS+toBQeXMkRAECDICqtb+ 3r0H6K1wFAMNvtgCqsdm5dL96NHIhhBsDaGhyhfslVdf8/Zn6qb0aYAwABGpihbjJXSyGTNmHBV6Hg+q BVKEiqGqfVgBep5qCKoZhvRLTVoPOWaiqdbihImTTW3M1XZdRUh1fYFYMHp+g8o/j1GgtZUbPIupXhu3 7Qq9EoLaoM5TuqZsJS2A8Mf22uutfBVR9yWVe0+h2cgEgLBbt19/veEjRnozGSUNees0JXpFEoaYbMKE SdQdmML9T7KxY8fbKAJQNm7c4owokBw/fuKnjoeyIuM+AnExWoGTVv3YU6TtrFlz7LXXXvcWdhoT0dNP P0MJtAn8/gTXn+hjPhzrtiQ1qW9yBQsYNCYCWElrLqUogA2mVsNcNWZJHOevfe0vvfWduj6tQuSW3cTj NQQuek8CboBEzzuRd6WtumPreTfggpY6qUjX03RbmjZtpjeaVeepanoveNq0mgUxfnWSPEQAayO5NCp+ UkdafjlGxgLUh+MAdzJu7K30C904fx4SA31AAAWFOK/v8ortGtHXjqxfgxEwxY5TyekgBU23LpyH4bCT LenZERWhndsNkiZNsNV4GNau3uxBSNu37XV3ZTKl/A5Q6n3fnv22efZMW4FasZTYhcXUKlhD8NLSpbgq 8VIsW7kBEFhri5YAEEvX2pLlm2zpym2oCDtthRORhtCK1btsadJuaK8tXrXHFkyea7PatbYZLz9jEwGE CT36WT8AYWy7LjbJJYSHrW/34TZg3CrsBdttzHxsBwDC4Fn7rP/U7dZn4hbrN3mT9QMYumJU7ED6c6dh CwhSWqiaivMABFSGsUts5qpkb+OWX33RyimEIrfjVSSD6xEg3IrUhVsAguIPbhBwdI0oxVhCEGOpgKhc cf/yL98lvjsVRkQ3o7tzJT0Q6uqaeJEzElQBVd/5gh//0EMPYyOgMQohpTEgtKgMX7Hevfs6o8oQKSYW AycaKKV6CIR0PXUX1koh45zEW0kK/foN9Ovoei0lyb7sngJN1JZrfsMrKevv4SNG+3nk1XDd20Hh0qcC wquvtfIeiqF5TBP32+9Tr6duzp95Pao9qyu1gEESilZWrc5SnxKfVQw7ZOgwZxoxcXy/D46HmFHFOdW9 SM8gkAmt14PbuIn2e48++piPQeiKpQawoUak3qMAXmMaPEeyD/25N4mVCiiJT+eUMdKlgwgMVqxIau5K HapZhXOpAnbsbdLz61zP0sk7j1Z8MqbKDqEcGd1f4oIQS5JDhw5HIjjrgKQx/JM/+RP7w//xP+wP/uAP aGxST14AkYBIArWSGhwIsFNQ8r9BbQN8i80CAKpS1S3cjVl0Qzp8PN12U3B2Kwa/DTMm2UqMjitRI1ZL rCfWYE331raWxi7LYejlPVnh3wIIMB5K918xebKtJhBpAWL76j6d8U7sx6twlAUwBTqOtyDFkjdtsvUj B9jKrm8Q5gzgTBhtS0hLXklbvlUYHlevRTVAGljuJCDYYUkrNtpKWgOunDTZlo8YasuGDLalg+nWxNxf NH66LZo83+YNGm6zX3kOD8OjNvnZR2x4vxE2CEAYj2F78uM/tvFPPmp9e41xQBg5a6eNXnDQRsw/SJem fdZnynbrOXETDV43Wf9pW60rRsVODggUSRIgdB02z7qOmme9xyy16eQypJPLkI9hsUxJLpRgl1FRgHAz lhDkagQQBA43sCEIEBKNippcshf85CcPkYdPpyLaUdUDBCconnKKztBCer1kTWpNQIncmmA/+tGPvTdh XX2TGxRj96U3dIGJNYGCgfILzZNVoBA8FgGI9L0aqMoqXAlTenuxSH1QPwAZOnVMDAxhskpKeNAD0gJs gwcPD7EP3ggmJHI9KCH80R/9Mf0FXveGrSpNrnLsb73Vy5/r33Y96kNgsFNTXInuMSC40ZbxDUVm/yJ6 ji/+K+PxeW9Np7LtMrQJ0CSOSyqQJCaJyNU8wED3KVVPjKb71rvRu4zdxTFjxu9MUoJatgWQue52iLlz 5/u7iCU/HSsS2Ohcwajc4lJWkRRJDPLKyFuh1V8g2PK837A/5/70+3btO/gc+ZM/+V9ul4rB4L/9t/9m Oej5xRSfrSDtvEYuYyS6JqTCJtQ8J0BL2wbutZHv1N2pkLLme6eOts3o83vorrwVvX/j0qW2eiDMjqSw Em/ECtyCK2Dm5ej+ywECif1J40fbqnnzbd0qsh/nz7XlRCWuIutx7/IlZG9Sy9CrRVG+DHvDjllTbDVG xOV4E5ZzzDKkqpU9ABUCl9ageqwBENZu2Gmr1kFIGSsAgPltiEJs+7IteON5W/D6szb/1WeocfCUzYfm vfwUockEJL3wpE1//gmb+PSjNqlTR+s7bKYNHTPfJr3xOl6Hh2zsc89Y74EzbPDkdQDCbgDhsA2PAKH3 5K3WY8JmB4X+SAidRy63DlRMSpAQ5lv3UQusNxLCDIwP6UWnaSF93spUz9DdjgDCHQDhjlQGtYV/2+5E gCCjomwIiW7HeFV/4oknWCnV0PMUYnuY3GoDv3jx0jAJYUafhExAveTHHvspARvUP0QE1jni8wQV5E8J TvqfTlJHBAphgoXjEgFBzKlGsCVU65FxKG4rpxUtAMLnnZH++q//2ouPSn3453/+54RVKXhABBSKMRDQ qCqQJAXpzOqL+GkqQwsgUCkI/VOdoRKvpy7N8fX+6Te5HsymzNELJIzFEliL0TaMmwK2wngE5n1wPPSc GltVMaql+IhiPsS8V3ln3bu/lfCceEoY2//BiitGk01E70ZjoLGNx1jXEIPrvD169HbVSPeoc64i+87B OQJ7VwU5VpJfXwxggwYNJv7ku/e921CO/osuTTU0nESSo38Ec+TTJE49r4zUf/iHf4hU8N/t93//9+33 fu+/2X/9r//VUtV9Gk9AmfpVKLpTxk4A4SSkrSojaXtCHg62KhCcnrSYmAQkAHIc9lHOfA+5DKoivZmG J2tnTLWkXkgF6PxL8UgsQ1pYSW5C0vRpAMFa7AR4ETAu7tm02dYBGElIFWu6vmrbCJPeOX+27cCbsZHY gjWcW5GNy5E8VgMiSxcuR1p405YAIksIYFo+qI+tnDgBkBlH9GFrwOBlm9/qeZv32rM2t9XLNuuNF20O asEspIAZTz1iM9lOJyx56nM/tYnPPm7j6RDeZ/AU6zditg0fNccmvfaiTSIGYcxLL1ovPIeDpm6wUfP2 2ihcjsPnH7ZBM/dbryk7rMf4jdZzwhbrOw0vw4jl1pZIxfYUWpWU8LmutHDqNmqR9cLLMGXJdkstbHLD YinJTQ30dbyEy1E2BEkIt+68TSDSO3YH8hgE7AgtgPDt+wKTnn76aSSDRnzi8gpcAvmlf1+yp5562hFf E04MHnsi1GNQHZnVbzExUlFMqeP+8A//hwODgENRi6+js4tBwmT92n36vNsTqFYkH7KiBhXj34dJKcYf MXI0Bp+D6OwV3r69HAlGtomUlHR03pfsG7hPEwFB1xw7doJbqhXuqvZfMSBoJQxuR2wIUhkom6ZYBJVi V8enf/onrofakUyHomKadup6ZbSIV9fhf/V66O7yqMiAKq9LDJAtkZuBebWSy5bSuUs3elR+cjxiQBhF 30p1lT5NvQqtwFLhHHAjm49AQ4z2+7//B3Tffsnb18kGUlBUSlfreT4eGmNXGZBOYkBQ1SmNh1yxP/zR j3xhaDEWf8WGDhuBSlCC244kIaQ/PbdsFX6uSE0RuKvxTlV1vUuRsg88GJgmyUXPK/Xg95AI/ut//T37 XYDgd3/3d+2//Jffpex4nkcClqtdn8K1pSZGIfFyIyv2I8RqBNdlI3PiyLTR3sVpDVmQOwlF342+v3/f Ye8mtZvI2s3Ll9paUpxXjxtuayiGsm4xAILdZhfHHWb1T6N1mrqF71k4B0CgvHvbZ5EqcGl2RtUAJKRy KOchiQpKy+fOtSUYHZdgMFw5DxtC5zdg+qdsDvkIc9583ua0fgHmf9ZmvfmiTWv1qk1s9ZqNfKufDes7 ygYPmmiDhky2IQMn2KjeQ2xMt542ivqVQ/sMsd6DJlifYVNt0Nh5NnLEDJssmwJxCKNffM56j1xInMEW GzUfg+JiSQgAwtz9tH7fQYc2WsCP30LH5x3WesgKe2XgCnt5MDRoZQCErgKECUvxVW61lGKywCoopqm+ CBRVvXhDLkcA4dZ7SAfv2e07AMJdAYIMjCQ3XQ8SgnTZlkjFr7tRSoBw8iQrHS950aKl9uTPnnJ1wpko YvL//t//0P4HyL923SYMhkgI/OZBP79AQ81XV6xYS1vsQ+jqme6mHEL7+HiyxiqDmFMxAfIbCxDkApT4 LZem6j3Wor4onkFAIOasoOV2NZNRqkpqakaCqhJsIR4lCcOV0VJcBWRP4vZMBAQdI8Bq1aq1d9ZRSTe1 nveeFRyv/Uo6+aqFfBnXbL4ez5n2GdfrwvV0nMT600hXnzYe6pGYhNgqS3aKj0cp4zHsvvGIAUGNX8vo DiwdXJKaDLSxBCbpQhKBmO3pp5+zzRT50BgLEAQcFZU1CYAQjMABEHrB4DAx4zFr9lwvi5YICN+jAW5u bhGW/WKCfMqQ2AL4Kkcl7mwdqx9aHNbz/uswYKoB64Oh4X/EO9XC8OOfPEyF676kH++ybTuTCZc/6BWY FB+gzlYCPdlf5AmRNyWuWyE3q5O7LHF5Ugb+0NSRMO1rrhJsWLTAdhGLsGUqNRFIckpeuYTqSnswiu8n H2EPKc/sJ+/H06AIRooC0225hPdTTKKUgH3XnKneY3G5GsEo2KiDgKCVrejbzRZOJax4CQZDXIjLNyTb 4nV4CWYvtLld22EUJO/g5cdt2stP2NQXUAGe/amNfeFpG9Clt/UYMs16YNvrNRrpffRC6ykaNd96jZhl PYdPt17Dp1rv4dOs3+jZNnjCQhvdD5vSy8/aeNSIQW07W49RSzzOYMT8QwDCMUKVj9jQBYes17Q9dHre ab2hXtN22muDV9lLA5LsJcDg5UFJARC6j+BCYxfbxAVICORiZwkQaJJSdw7fLyHLzYCA6nAb1cEBAdVB UYoxIKgktwAhXrG1mmkFFaPGUYtaDeIYhf/+34PYJ5JYmYonQjaEehhTom9QA4JbT6vDc8+94K3ClUSk YqFadbaB7J8FCOrnqFh1TVjvdgQjCJiaWIXEpFqtKjB0Llm6whOUpkyZZqNHj73PJhEDgqSXImoH1tGX 8QQT9i8jNUXPp4mqFVahy2q2GialApNUR1CZg9H1AB1db6lfj0izqVOxoEfXSzDGCoDEwPI61CNGn8QN +6CbM4zHiySBEXOPtTyMRznjc/94xIDQEUu8ztcg9Q2JQ30tdU4Z+vROBAifZ7uR6DvF8asDczb1/8uZ 9LV4fsL7kIQQSp/pmd96S81y6/z5Wrdu02xHCvahP7devfvgVVIcf6GDt0ChCAmwgMjAL0agoncrCUxz YvDgoXgLKIqL6zlWUYIEFt6/bCFr122xDVQY3gIgKMRYz36MmgdqdSbACW3r9L5VAEUxDYBAFLzmgWlE mapehySR40nYCwhOWsaqvpiEpGVd3rCVb6FC4HrcNKibHdm6GTdyFglGFJKFsvJo9QcQVDBvangvtYB1 JQCWz3XVpHgzHcHWEouwav4iW7FopS2mU/jC+SttztKNNmc5rsONybZyyxFbsukw7v1dNnH2Ehs9bJSN 7U/OQY8eRBZ2sUFIvn17DiBQEDAYv9j6TlllA6avs0GzNtpACiAP5O/+E5cRVbzABqAiDBwzBzBYYMOn LAMQhtqEl562cagMfTv39T6tAzEojlhCIZSlx2z0khQbsfAIn+3H7Zhs/abvsb7Tk+2NIWtcMnhpYFIE CN4GeoH1QMQYO2s9KgPts1EZCqmYJEA4d02hy7IfICHced8B4e69d+z2XWU3EspMYFJsQ4hDkuPuPpps sdFQE10Tr1n0+73fc9FPhiW95MzsPPcyNOJlSAQE6eH6zfPPv+iTQCW+tfKoVbvsDfcDQlitFUacy8pU jdgtEVRisvRcxS+sW7eBqr+t7W/+5m8/YVF/0EgZM5Ran6uQaA1AIkBJBIQY5Bw0iiocNM5gZ9C1zl+4 zPU2/ivXC/kdsQ0kBiC50sTgtYDjCVqeJwJCy3hQIIPxOEporI8HYCN1K3E8wv3/ibv5CljtJR2dQm1I tNFoldYxMgLv3LmPeP0U3oX6ZNDtigkvT0QM8rEhWOeVO1XH1PO+vv/9H9znBYltA5IEdb9i+NjAGuZD iwFT70vX74YLUZ6oBuoUfNr7FyBs3gJg7UpmUTjMPKAxLLYdvecS1DH1umxkrM6cJTZCY6/37TEVUQyD 4hm0f5V2hOdI4MuhyQml01ag4y+Vd4GyaGuorrQKqWHjwG52lBby+YXYg5CQymsoRsvY1ZAlWQ/g1GEc r2NbhdG6gJ6dKRRA2X0g1dZvp0LRBtyDq3fYgiRo5Xabj5twGZmIK7amUr2IqkbQvPWHbPKyHeQTrCYW YCmr9QJE+HnWfcxc64pE0I0QgJ40TepL4FD/Obts4Nw9NpDtgJnED0xdYwMmLbMB4xfZICSDQZOXYjwE ECi1PxGD4qinf2pd+k227vRpHTiPMOWlR21UUrqNXJpGicR0XI+HrP/MfdZv2n7Ot89eG7rBpYOXkA5c QlAuQ5ehc6zr8PlUXV5jx0jBzCzHsIiEUHOaCLGr1EK4CSCgLty684Hdvvc+gPCe3cGeoEzHGxEgxOJi CF3+govasY1A+r9UA4mlsgoLCP4L+p8mVhKt248dS/NVRAwu9P56goQQM8AL6LaK/JKBT6tdHQYtidSJ kyeI739ibdq0Q5fX+Zp8tZClXkarF154wVfFIPYKrGRg/IKrMcGVeb+RMgaE9h06uUhezf0lXjPo1MFT 0hUDjxhEK6bE8jpUgud/o+sFQ1zsrpW00YHrFbKSioE/CxDUhFZt4tXaq4jxkIFPDXNaxgOvSzQebel9 IMaRnu6A1myMVWRp8M4IRA/Talz9J0ocDE46eIjBQjJXWPnD836e5+3u1xVIxp4IHSePjSRCjatAIDZ+ /k83HgfSvhYHqXcivTONXznMV/8ZgPAsEqIarOzDrXeMDMZsKjwXUfVZLscaxqlRXiyA+OwlgQGBUDD+ RTxgl66xvQ4YaEvMzKXrhKdfJLmqocHSjtEKbTql0KiPuByvwkrcjUkAw2Yanxw9eMQKSlFDmDd1qJu1 xFzUQTXETMi1WY5qUkRhlhyKmhyn69feVGoVJKfa8i37bQEgMHPFXpu5fI9NW5FsU1cdtJmULZtCCvKk NcdtHNWKhlG/tN+srfbWpPXWacwaazdqlb05PMneGL7aWo3eYG3GbbP2k/daBxi349T91mnqHus6aat1 m7CGbkvLrOdY1PwxwfbXZ8hMm/Azkpp+8G0b+sRP7bU+BBmNWGddp+y1HrOPWp95qdYX6jkvxTrNSLG2 k45YmwlHrNXkw/ZE/832WJ+N9kjvjfZwr00RIAAK3dBPhk2jtyOAkEE5pzz1ZVD4siomYUe44dLBB3YH QLj3NoCA2nA7AoRPWsH/1I2FsVogEPg9lwiCIUjfPf/8y7aFhI59oL10bzFTA7qdjJCfXBH/yF586RVv bSbbgLIepQ/LSNbiZQiJRppwYgAHGFY4Wa0VXPODH/wwEpNbJrXARr8RQMgL8Nxzz93ntWgGBFZYBwRE 2ibsAjFgJTKIVrjySE+vYUX5wQ9+8G++ngDBV3SYzQEySgeX5BUAkvEg6EclzKUaqQpQYIjzzdJLULda JCaF38oOIoaLPQexAVDP3wWGzEIyUAn1Oln8JeUgXgcvRzAWJuapyLCbx5hUoDbExt3YLhEDQvAOyRsC 80deohgQ4s8EDPpMQUYSxyVxOKhFnp74eZ9jQdhDSvIxdHgVNS3hmWtwV9YqmIt5cAqD9RkHA3o/XCGe 4QpSIaAgQBAINNMNwOGqPA7nqFZEm/TDh237ovm2fuIoW0ucwPp5s23n1h129Dh2GbxFlWoYQwxDDeXk qkiRryAZq5ACLbkUd8ksbbJjuY22P7PGdpCmvGZ3ti3bcsxmrT5AVaJkxPQ9NhLP3RDyCAahvw9Cnx84 77D1n3fAes3ca12m7rL2E3c487cas9VeH73N3hiz3V4fu8veGLfXWk3Yb29OFCXDwDut/biN1plejN2w D3QftRCiJ+OoZfZWH4LWHvu+TfjBd6zdK93tmZ6LMRJustbjDwAqx6zD9FTrOCPV2k1NBQxSrfWkFHtz 0nF7Y+Jxe7TvFnsEIHi49ya2G5X+HCSEbiPm2JAZdH/Ow9hFK7ccVbM9BZqqfJoA4TaAcPd9u/P2BwAC wHD33fsBwVeHkK6sF6zts88+53EBTz75lNPLMLVCmeW2Uby3ylZ5MI/EYya/wOCsW5lDPYSvIG38qeuQ f2Qvv/yqvyT1OlDGo1avs1R+TmSWREDIyy/2FVZW+gEDBjb7v1skhM97P8JZWNHl3ZC4Kn1Zq9yDK7Zq HajfgEqNf7qEIBFagBAMgf37D/jM68lqX0y0pVyydXXheokBXbGEUACzxRKTVJTY8xEziDoo+6RFlZFL URWvzzwwHnFYtQye6S5ZVeG9aHggSOhr7rLs0KFj0MP1HqRmoW97OPeV683GQreZRNKfxiQLkCnBsBYH dyXaGl586SWPVpw0eSo0zbtqTSW6cNqMWWxn2MQpU4m8VPTlFJs8dYZt27WX0uoYgVFRXCV74P2/8OIr VAxKo6sxTXPw4tQSV3GCd3uaMPMzkIKaLlxWERuIe5aEcBkwuAwYXAYEriEliK5Cl/nuHEWCJc2Vcf8Z WTnEEBzHmHrAdlNL8QAdvdIo/loIw5fCB2Wozwrnz0OVTqca8nHqGx7MrrXdaZW2I6Xc1h+mozKVjVfQ BGURRUxnrz1iE1cSDLRovw2Zv8/6LthvvecdtF7EAvSYdcCp+7R91mFSsrWDWk+A+ccn2+vj0OnH77PX x++31ycehGEPWCvoTb5vO57aBWPWWhcAoBvqfTfU/K4j6cdIpGGvzoNs/E/+0YY/9EN7oc0Ee6rXMnt5 yHZrPe4wgJCClJFm7aenWTu2rSamct4UB4M3JggQtrpkENPnOg+eHVQGkpwGkkJ5NK/J0inFnqMyakgI 55AQrsnL4IAAEAgQ3pGkEADh+g3VLwgTViumGohKDPwWXodNm2mySRTYVizXOyhJtcstwwcAAkI7Dx33 VFOthFW1rPi8nLOIp+cQ8UM9BbkSv+Jip2wIAgTFlCvzTNF8MhCeY0IkHhu7Mlu3bkfVmaLgykLXU/2F RL1ZK5gMmdm5BS5JyB3onobIwxGLvXGchHRwNSGprpbX4pSvsOH+gnqke5RnQF4SSSMP+tv9eg8/zGpe QCQjHaTLELWRImRADatqELO1osc6f5BI0IsBGDFHOKZlPF4CXI8BpjJ21iLei4kFkPF4xMcqLkMu0dQ0 XKKcU8D308cfd/DWyh4/i7w4wYZDsBGrrWwuVxC5LzcDQshkjUFXY6wOTTrno7iCAyjofAFgnnnmWU/2 ys7Jp/BHkatwRRjligDDguJSqhAVWVYOjUuRSnIJa5fFvobxECDEz5v4/iUhHiGyUJGN5W4vICwdIIiT oTy7UjkpoggMrgAICq0PYKDgKUVUqjIXx2BXksdBFbTKqXmQh/0njYIoKXT4zqTeYw59EArV8BgQyCVY 73jhadufU287j1fbhkOllDTPt0U0TZ1LvcKZ1CqcvjbNpqxOtQmrj9jYFSQSUZVoEDkEAxYQHTh3n/We fcB6zkEyEM0EFGbst67Tkq39FEBhcjIr9z5W7QMw6mGYFpp8xN6ccsxaI9a3RULoMH6bdR671rpR6jBI B4CC9sk/GMLiMPEHf20DiDp9psNke7oPXoNhu+2NsUeQCtIBhAxrL1CA3gQM3kRCaAW9Dj3ad/OnAMKQ 2daVQIYhk1YHCYHw5WyiFUupiXABQLh88303Kt6594HdffdDuxtJCLIhKA5Bk0ATLEzCsKLL67CVZJDd GIH20dXmMC6bY/S018TMpPhENoMvI1ylXi6TQIa4kJ9/0c8VR7vJFiEf+UsvvezutSIMSGIASQinAZD7 j5Wq8sfkI+ACJBJNBVjUabh5skaFW8TICoWWS0yrtVx8yqOQ67HF367CLMraVPETdHB5LViZZGiLPSgt wVX/yw13Ahe5NOPr/aUDR8jW1PXykVqUixGkEaIHP+V6EqWbdX7cegKY+Hqy8Msnr/F4kfEQIBQyHtKh fTzwaiiyL/YGaOxiMFX0XI4McDBe23btm+tU6Nzh/H9ugwYPcc+GwPYi6oLA4PjxtGYJIVZD4mQutWDL REqQ10Jjoeu2nO+rblAVCAhw9cxSuaoZ50rAsCxy2+l9DiBuRLEhtagzDQCgpLgH3/8LxIgcQyIqkHHX vQkAoLIs3VioxDQlggUwuCIS40cA4GDAd9eQeK4pzFqJbsqgxA15iuS3BtzS6ghVWE4/BLxs2VQ+zlTD IqogHy9osv1Z9bb9eKVt2F9qy3YW0vkoEwkg1YZRdGQg4n/v6fvtLVb87lNRA9DbO8LkHfms7dQD1nra YWs346i1n3XcOs3OsE7zCq3z/LJAC8vsLaj7glLr5lQJVVnX+VXWhf3O82naO6/IuvC77tMBEWwIPSes xW6QRJjAGvY3Wd/+023sE4/YhB/+nfV69nV7sfcye2lksr05NcvazSmzTvOrrRPn7LiwyrdvTs2z1yZn 22tTcqEcbAefAgiSErqT5DRg4nI7mFfvgJCrrjJEK54hwenqrfftFraD2/c+ckB4+12pDO94PsOVq9ea XYtaLT3GnAkrv/QekpuOkCCi5CbpugXyRyO2Kq20khgBMbZiA6SvnlM5NfVzwHATuynj8mSyRciomCqV AfFeqoD81aLEY0MA0x+SKPW6V8GRpb4CppLRMJ6soXjLV+yVV14lmEUNWAlgQtTXir2NEm+xhyTWv2Xv kMitfohqXSbfe+I1PYIOiUj9CrUiyrUWh0THjBxfLwACICgAgjlUUu4zr4dxT3ELklw+bTwUQBQYhEat 7v1Qd6lPjkcYu5e9UEcWhT8KaHU3e86CyJgaCtgE17Ba2X/FfvjDH3oSk1ywCtRKjC8IK/afuQ3o5Vde xyNBoxVcnlIHJE3FYco6TiQ39JIlyxIAkMhRGekAuSqef/78xe6h0BjOX7DQY1AaGk/c/7y80/j9H3eV MaiXCogSQyv3QSqCwCAAgaSCmCJQUOJVBAZqI3DZK3krevG612aoJQivou4ixYXPWTagcLzwFHzQZHsy eEcpNbbxYJkt21VIT8Qcm7omg34GqTZo3lHryarfffo+6woQyOjXaZJoL2rAPmsz6SCr+yF7c9pRaz39 uLWdlWFtZ+dZh/nF1nEBTLqo2jovqrG3FlXZW4urrMfi6kDRZ90XlgMMpdZ1Tq51n3nM3pq6m/iBTdZr /GqnnhM3WM9x62xomy428aF/spEP/cDeaD/enh202V5BMmg9s4BrAQILa7kWxLY99NqUgggMcu1VQOHh Xp8BCPI29Bu/wg5T+z2lFAmBwSmmdfsZ2rhdvfmB3URduP32R6gLAAJ0FxuCchkuYciJE5S0ImmyyJsg Q9QB8svTM5UBiPEJN6Es0nWs2KoMrAkso6BAIFQyQhdEVG3CdSQgiMV1rXCKVXgeK/NRVrlCVAa1C5No q8zGTxzLtcUAR5FGtKoXAUB///dq1f4Fn7CicL9fQJJ402YTVDNv/kJfNSUdBOu4oij/xCUdeUcUluy+ fiajQCF2p2kiK6hKx7zyymuspqzC+N3/7u/+7oHrKdw3vt48mzdP1+vwa69XDKApNqPZVafrReOhuAy5 YAsQoRVvUU+oczwesrv4vfmxf+AxC2rPrtb1+ZyzEMnsO9/5O3+OkOx1f8JXnAUqdebBhClJTTqvjJr7 KDUmUMrIyPWMU73/ON9E4xwnN0ll69y5C5LAIOtPUJSiVb8JWMRgqjmj4KbKavo7AoC6rwffv573uEdP Bu/LKdTF89g5LqnUP6pNLBEEqUA1IkjbhvRdaAcQUq/V50MFYppIeqqhsngZ3rSCiguWxZw/nH/akjNP 2NaUalsPCCzfVWyLt+XbjA15NEZNxUCYYkPmHrK+sw9ZT8KAZQfoImkAO0AnqCNg0AFqg4gvY6BsABL7 30R/bz073drMyrZ2MGnHhQKEOusC9Vhc0wIGDgqAw6IK67GgxN6al2fdZqUifSQDBkQWSjoQILDtOWGD Deg72cY99ZhN+NE/WM/nWmNMXGHPD92J/SEdAIqBp86vJeoIvT4t11536SDQZwKCaiv2GbMcEamWDtCn PXy5mLzyM/RiuHb7Q7tx9yNUBiSEdz6ydwQIRCyqxLrCkd1izCqZGGOgySTpIDevkFVaWYynKFaKJMDx 0lHP4aNXOqs3P0H/O4tRSGKv3IlxcZUQTquY9d/zwBQljsioqEkjMVlJO59+7At2kFblGeinyoGXX18M rgmoSRtcYbrnmOT6CrkSD55PHhJJJ/L3qyKSjIv3HxNcqWK6g9hFUrGCi9lj//onrxe72n7N9RzQuB5q yKc949OMx2G8DLk0WS2jL6IqA0nq+vTxeN5bt2dy/0rPFqitTFob2WhCwlechNWSjBTcsInJSF7rIpIA n38uuIFlFJbBcjcxEV//+jddZQvP/r+ag47i88dVtFryEuSO/u/2B9BkAsOKqYJcjKvvvmdQuLLePx6g o2m8/xIAASlCrQTP40m4DABcBgBEVyISIOjviyr7ryrf9BFRavUZSQTUtlCZtkrKwudVnLM0PGqHcxpt e2qdrT2EJLC3xOZvz7Npq7NxD6aRNnzcBuIdcBDAh99j+iHrPP0gEoGIfdSCTlPkFoSmHLB27EsyaD3p EHYAJITp2AFmAQizslxK6IiKEANC508AQgCDnqgPPeYV4DJMBwz2W4/J25AI1jdLB70mrCc0eamNaNXO Jj5MePxjD9lr7cbbU/032Isj91mrKVIXSrlOTTMYxKDw+tQWMBAgPJpgUHS3o9QFUVcMi33xbR6hFvxx 6sRnUDmpEFHqzGVKsN/6CED4GLUBQEBKECDcESAQg6A232Lc2MUYuxdlcT5OWKdEaA9JRS+9IMu1l9WK t6ECs3L0Pc8dXU4Wc58kCTELclU+TafgYxS3UMRbOXp6FSnOZbi8Pu3Yp2CWQ7go0xG75abMRlLQ/eg+ w72G+41/q2spYUYrl/YFQnG8hFylStNVIIzasWdTbFPHxven5/3d3/2vJgbdj6Vaer2kia99LeF60fg8 eD15YO67XuSa1fWO6nq4Y7OQOBKv53H8jMdTTz1D3ABuWIx6AgSBYylZlp8cj3BvR8nEVF1AFRatwjiq KMM11ASU9BSvyJK2BAgS92X7+NvvfMcWLlzU7HIMBWX/2O/52WdfIN0XwzCqmbwNGYy1Apv++q//xu8h jPX/8EVCklYLtcSkONgDphrrMeRv5BUQ6oyBUQDh4xstBnreZ/BYpWZmUbKcGg8nTnosgeIMHATU88OL x9A3JKKLl+4gQdzBznAH4+NNVw8a6Wau+o2l9H2URHCUvJ3d9DzYeLTSliWX2uzNuTYmKdOGE+o7YO5h Vwc6y6CH+N9xsuIB2E49bJ2mHbPOM9Kt88xMRPo86z4PW8ACaFElDB2t8qz03Vnxuy1uWaFddI9W6we3 nV2sr7HOC8qtC3aGbrPSuT5eCZKRpB60qAoAw5hVNqRTX5ugVOeHvmtvvdLFnuq9yl4YshVX42HrOAs1 A3WjB+pIsyoSqSSxZBBvH/lMlQFAULz0kdwGS8WqmgF6FlAy+5QCk25/bDfu/RyV4WO8DB+jMnyMyvAe BVcDICQyUJxwIut1Rka2G/YakQ68Ug9lsVSBR8U01AFKYpwqGXmVH1QGZRPWAAgPxi38l//yX5AQnicy DbFdOjiTX63Dy/FFJx6rRBcdKwY4AgMo5z2P+gRaRXcR1KIkmvj4AFyBQqRcD4+J8M9g8Pg5dE5dW+pK pgCBVTZk2YW4iviaT5EHcPBgquvUaZTe3rFjrxtWP+16CsxR0di9FNJ4MFGn+XpICAKEz7qe8g6Owoz5 SEzqnKySX6rn6PcWAUt8b88+97ylU0RUgTwhgIkSY6hc8mIov2ASufdt27bzVOTHsFQrknMixVhqsavk 5hVEwVyhNJ4Y/L/9t993iU25/wqMkhSWh+SkoCYtAm3atHXbg549EADrIBuAtjkmhfH7m7/9jrXh2qmE CWfl4pEAFPR9YtyK3umzSAgZRBeWV1VhhD6JdyH2hESdtKj/eeUKMTM0JxYYnBNdBAzOMUcJsGsgnb+G ugslqMI5LHiHMRbuxVi46WiFLU0us8kb82zMikwbtCQNb8BB64Y6IDVArkGnyQcAgyMYCwEDVu7OswCD menWC2DoPTOD6L9MwoLTbcC8HNyMxdZnYan1BBS6uK0gERQ+bV9gwHELKgCDIus6OxMwQBqZshMw2OgG xF5EHvaasA7aiKowkZyFx912MOyJJ+3FrrPs6QFEHI7AfjElzbrMLbLuC1E7fgNASHQ5RhICcQiKRUBl 6D1yAf7VRkstowN0xRkkBEpbEYdwFTC4+bYA4edICBEgEJwk0UwVhOSuKygo9ESPQ1RIOnzomKVI5MXd pNh+uf4uAgjeiEUlwSg2elkFXFXPMGr1prhzWcnVRKMUO0Ea3oiD5JfvJdFmH9VnJB5rtRTAyKgkfVl9 EFSQ5BjeBx2zB7F1r/zIhN+mMVFVMaiECjlyzeXi1TiO22rSpGmexPPUk08TI/EUWZAD8ITwO10HQNiL W1Tx/Fu37qZyLq5SCl9IFUiDocScqneQiYFR+rsSixQ+LFfqAYJm5EbNzCx0D0oGFZp0zMSJ00xg8STX E/XpMwBw2u8i9l769O3W9ajQq+t5jD7fHeC5UwCWLFQGXS/Dr5dGlZ9D/r2MteobkIqoXkg3Y4XtVqMy SFJQ7f9juGfV2GaXXLw8l34rSakaAFXqbyh9r7qIqj1IKzUYv6KiGnCg0rCyP5HA9FkNWaCqphQCjUIx WUkrYtZ+/Qa5GqJ7VHyDohuL8GBk5Ra6XUH3t4b+Bf0HDHbwSCRlqvaj0MmefYo8PGJHUsgexNaUg3qp ylo5gFBKWoYdOELVoYO8zyOH6VOQYnmFhTxrrd+3MmgvEZGoUm1XmE8XSdW/iDR74dI9VNG7SAS37eTZ W4Qa37BKDIZldI0qJJgoo7DR9mXV2Xpch0n7y9xGMHldto1ZmWEDFx23XnOPIKYfQDLYZ+2JDWg/gXiB KYesw9SjAMIx60KQT89JhBMPWWLDu42wMa0w6rXtalNad7KZb7a3WR2729SuA2zygKk2mhTjnrNyYHRW /s8EhUQwKEbiyLbuM7iH2IjYbDdY5+DQZ/hiG429atLD/2JjHv6RdWjV357qt9ZtB6+OP2adIunApZXY UJmwfVBC+FQbggBB1ZcV7HCYyKu0krNeSq2AoIzTauV270O7/s7P7ZYkhHsBEO7hdVDVnUs0fVUwTjkT Ih90V5m0LKoW5avuPZ81ou+doRqO8gmuqXQXZdyvAQzXEO2uIS1c44UKWFQ6S27HJspqV+Hek98/HQlD WXep5PMrgUWZhB6zjgFNhsla8gZK8RBkitlZLY+wih9LIajE/eMyyMlI1UjDzkafsLkwdCoivRg8maAo lXhLTj7izKwKN0cwvCka8iCisPRj1ecXUyvDLQ8pQwbNQpp25KvJBqu3GE9MoeKbKtEt0CnCii/S9XWM DI1ijt0wv5h5r4pvAiQHWF0FcsodkOgtMFKFXiUWpaRnE5qrLMEK1/kVfKSQ7aO4+XQtqQopPKOkn0pA QN2MZFRUKTHVdJQrMIV7073L9uFZmEgHNc15Fpc5JteGDRvOO1LpNhkkmzhPPWArkk1CTUzyPYYjjj2Q GqAVXirS6tUbeDaMfBg1FSlZg+RRxcIgz4hiE9IwNB7nXRw4fAwgOwJQA7aQQG0vtG//YSItjwIGqHbc iwLJVA+jrLzS7Qi5+QWofNnYZBj/DOVr5AFWqAsNBE5hazrPQiT188olgcFtOwcgnL34Nu0H75JrcMsq m65aPkAgO0EqPRL3ZVbbzmOVtnZfsS3ARjB9U7ZNXJ1jI5elEStwxLrPPWbdCfPthATQcQqqAWpCh8kQ KkLHmSmoBykYEY/YMIKDprTvbtOoSjQNV9+M737DZn3/2zbre9+0qX//VZv811+xSd/4sk3/p2/azCef tEldh5CXcBiLfwVuvwd1+lpcj5IMpCbEYHAUMFBG4ub7jYiSFAhxHta+h0386Q9s3CM/sG4vd7Xneiyy ZwZutpdHH8SlmO3SwVsLpbp8Ul0QQHwSEFqCku4LXVZtxbdIt0wtpNtt6VlSoAnRpOnrWVSGq4Qt3wQE pDLIhhAA4UOClYJhUZllCunVqqLVpVKJR+yH4igX8PkiHcDw1wEBJxUMpWWbA4SDhCoKY1vgPIosPEHq cDXuPaUnK4++lBVeYbeqEeDlzBShph4Bii+nIEa5SmXj6y6AgQphktJipTQrroCim+THi5R0pLh3ua1y YZh0mDydVdi30tWxDWTllOAeLWHLKgV4yFWq+gaFXF/XqEIsr0Q6iQGmAAlEQKFWX0WU8FYPAJVPUwk3 qTWSZsQcWcREpMLkCqxSqm4q0oakDNX/F0gpZFiAp4KeuTBGobwLjKHOIbG+AilLgTv52GNk1MyFCZVH UM7ndZ6SHfo4NFB1SEwvIJTLVfeeh1uymGIxUsXUr+EchtwLgPgauheHvhlfwWPwomcbrli5yjMxVRZf XgHZA+JgL9kDpBpKTfoHUq8VZZoOKBUz7sp7OMG1VWNR4ecC4VIBA9fORmJQWTuBuzJaY0rj70xUhBCU RJwChuea+kbeJ8BULxWohnMg4ZUqdZpaB5xPkuhJvFAKSFM688ULKp1/k2jFm9aARFB/7o4V1V+zVObu gfxTlpzdZOsOl9m83QKADJuwNtWGkPnXe/4BN9Z1m4i7EKZvhwTQfgox/oT2dkAFkN+/y9xs6zo3x7ot wtq/pNIGzM+xieT7TH7qBZv8j39lU//p6zbjJ/9g0x//CXkET9hYku/GETw1DmloEmAx/h++baO/+kWb 9Pdft9FdhgA0WdZhXmULKMheABh0W5Jv3Rdl2Fvzj1mPOfusJynLvaZiNKTJSu9JK6CV7K+2PvRYGNR3 tE146nGXDgY8/7q9/NY8e37AWntt+E4Cm46jynAu4hs+SzoQIHSYTqBSAn1CZQjqQqDu1FRLLT1pWRgU c6vOW3E1LhoZFYlSvIlkcAspQRKCQEGAcBs7goquysVz0bs6qxMQTVQUJCMjopdLVwFOJAIAQH0bvQUc LeG8YjP710WAioOCGxhxQSLSKo1VAUtyL2qSqR/DaWwMSmOWvUGhqiLVHpQYrLqBkhjEEDpeNftVB/Es ufHnogYsOod0aDGugKbESXURaoOxjZWuGjWkEjBSxx4xYhUMqXPrt3GPREknUlmqVccPphVQ1XNe78kY d2/m/hVnIX97KecvBlQURKRgrFLFYgBwKqSi65ZrC8lIKltANR4UVQpuIE6/gViLOq4t/73iDaoIaJKU pDh+1SL0MuhIVqdllFUlYle7KCWma8NAOpdSijV2SrqSpKYQX/XMTCzv5q7YqL5lcKuGxCR5DWSElf4v MJAbc+aseV48Nwdmr5ZKyH2ej/oyeDVkriUbheIKFIykTExJDsVIAJIC5E0olXrC53qeeqRIveuTzJ1T Z4gvORO/e7ILee4GjNI6n5qzqAv4GWIIzikT9+yNAAZnbtI24JaVn7zJ3L1khwrPYCxstF1p9bZyf7nN 2JxtE9aR7bfqOPkEB60vHoBuhAN3mLAH+8A+IgWPORiIOk7PJIAoCzDQaptLjECF9V5QYJMwvE//wT/b +L/6Opb9H9vI19pZnzZ9rEv7UfZG58n2Yvf59hxBQc/3Wmrtuk223q93tTFP0nT1b75k45941LqQn9B2 ViGSgkABqYBAoc4Y/rovTMO9eASPwl7AYGsCGAAEgEGfyUn0TFlig/qNttEvv2gTfvojG/3Yw9ax9VB7 vu8qe3noVntzHJLMjGzrNrf4X5UOfntAoPpyRgl5DHSAFiAUInKdvYyhhkjFG3gYBAi3AIM7khK0RW1Q ToNKq4mx3WAoyy9BItpXl2QBgZrCim5F7d9u0i/yOqDg7eAEDirpTkyD+44VdaYa/Kxi3v8R96SCltxN CVjIQyHjpDc9wZ0UF70IEyUqhBo1IlH5dTUz0fYcv1WFYDUvaWJiCUTqFcsA44VekVFpccBMBT+VG6DG L2e85ZmqNyteQhWcCZ7iOqFRiAqvSFIJTWFi8PHOSs6god+kKjbJNiKSxyUAHLEYWt1JStK1tbprldW9 nVQtBX7r7lnca5KaQncqFY0NPRZOeol5tZhTjj+rJfq0wnhVylzgcIp71jkUzRmXSg+l51Us5AoBQ0ui bMPg/nzQ7SrjoYDg993tF9QESQgKIU/GTpOGGleCxNKoyEbGXu9MJdRDZ281glGfBe7zrNrHAW4nADAS l+qRGhsAKIUoN1LrQePsz6r3S0zLBSUoqbqW4lK8a1QY61PEDah0+8kzBBSdpiL4aaTS0zfIQryGe/wK DYYuWGblReJoTtuO9DrbcLSGEON6XIhFNi4pw0Ykpdiwlcet78yDLpLLYNhp/B5i/Q9bG2wDbaZhDJ0G IOAa7DIv18FA1GNRsQ2dtNsmURJwyl9/2aY+/5T17k7QVq/F9nQPiv70WmFP9FppT/ZebT/rs8bpSSz+ P+u2yHq83NEm/uM3bMz3/966DVhsb05Ot/ZziokeLI1UBABnrvIbdlmv6agIU9beLxkACH3ptzCk5yDK oj3rXoUxP6UAyjOvWKtuM0hg2kwyFLaOKRg55xQQ8Vj+mapCbE/4jSWEbspnoD+D3DF5hC3nVp9HB6P0 2dV3kBAAgzsfOhg4IBCLoPBlJTnFiU53qJNwWx2g6fWoCEZJDl5EhRZwt1R2LeoM7XUZ9ZlT6PHgQOEV nSUxEA6tdvJSKyRZJDYOcQ+FrMlRF2p1o0YFkevJm64ITOR3jhubRG3bJaFcliETAFFvAW9bpgazioX3 yaveDaycDiB4PlQ/IeqMpE5Il9R3ku3lC2ocEvoEKNdeoOUrbtRAROKrA5B3gZJIG7pKnROYMOnFIMo3 CLEYAheuq65SUpW8qk/UDEYM4T0con4G0X3pOO9UFRX+aO5G5UlIIjVqiTo4uQdH9QDC/frz871+r3uZ O2d+cGe6iy8muV/ldlVsRYj/iDNUFU48evQEbC8H7Ti2CRn/alDLpK7ovuK+DBr/0DuC6xMnIGnk/CWe Fa/AWSSUsxcYC+2TXKQEIx9D3av/hkA3PQM2gYtU/L6o8fZuWjcAhmt24sx1gPEGQHCNNOSrVFG+TKm/ y4QYn7VDBWdwmZ+xzSm1tmZ/tS3dXWZL91Cyf1W6DaE4yIAlR23A4iPWbYYiC3EhYifoROBQezwE7ZEK 2gAE7adnuJrQZX4e2zwAIcd6LMy3UdQcnPrDf7Qp3/9b69uunz0DEDzRM8me7LMW6/4me2bQVnueZKIX MOy9PGy7taWuQK+uo23UM0/ZuL/9qg1nRW/Xh+5I4w/6tbrMzsGTkGXdiEDsSZ+EXtM2ulrg6kGkJvQh alhFUEZ062XjVEz1ob+30agi/V9sY627TKXs2Tp7fRRJT1IVZuH6/DWqwm8MCD3HLLaeY5ZgsIAQTTLK FLZ83vJIbiqgg9OV2x/YtXd+4RLCnXeREFAV7rytfIYPAyAQkyADoxOeB21VQOUekoPCm++gVihmQXUY HTAAhNvUaQykqksAgoNF6PfQXOpdgKKWcZImotbzN7R1dUMNaFX1OUgZ1x1M+JwKTvosgEpoNyfJQ+3p vdGJgqzUN0CeDvdwxIATuiJdRXW5ikRz1RvQEKHJ8bJ5uKSj33mpcRlBY+J4ZwD5wkOjFD9P1A3qCr8P nYtC9t1FGCTE3QcJp7nTEftXYGQlEym6Tgwlv7oalegcuk+BWnNHJG+eomsGJvLreucm3R/3L8Mtz+8G XKlkPIvGRFKbVDgBkuw7qhTVr/8gX/UVQhy6Zakqcii7rtgPRWnOmj0fg+g+N3ymYCSVwVh2ohOs/BdY 2RUNKFvSVeJSZBe6Rlm9ayS9XYWuXMMTAHldAsLcNQZxarKCigTmYcyVF6NQeHJnMBBeanYd3kbiuYmk cQN16AaFSa5bCQtVIen5OcQTHCSycPW+Wlu8o8Rmbyq2EctzcBumwiQYAmdhIITpOk0nlwBqRxhxt2X5 1mM5doGVUFKpU/eVEa0gn8CpJNByVvO5pTa89zSb9qN/tPGP/thavTnUnuixDMv+Orfsvzx6v71KVuHr 448SnXiUQkPrbBKeBvVXHPfP2BF+8PfWu00Pe6UfLdNG78BjccS6zDgePAlEIDYHHeFa7C3XIpGIfUha GjJoEv0WiDV4jtJqD/2Djf7pQ8QbdMNuMB8A2mIv4GJ8bUKKvTotx1rNLrHWREC28ZDof93F2WpGviXS D0l5TqTPCQxiQOg9fmkwKGJDyEdCkMpw5c7HdvO9XyEV/NLuvofr0Y2LAoVIQnBAIOnpnfdRIwCEtwUO MSAACiq55gQoeJFWqRiqyRhTAAUHg0h6EFDcdkDgc2f8sFX7eXWO0uS+7UCidvSSRNRJKnSjFji4xNEM GOF4ZwpXVSKDpn8m+4WYRaCj7kfaD3YNTc4bhG1Lpbmm73U+qT/RMdq/6cbRQPpbwOHdizTJXZKRCgWz wiySZFq+l1QTfYe040wU/47f+j3q3PqNt56LOjRF2+bWbX7/Or/OoXsWEAQ7jffgdHAMUpdI9y4QkTgu m4hqPcqbIy/KUbwsB+grsB/r/z5UAidclvvZHsQ1eAwPTCbHFZOdWkOkqPJILrDCuxRHNuF1ge4t9un1 6VvAIQBsyC+4wjGiq4BF2I8iC/WsbmgOYHAJMLjgAUXED1y4bY3EETScvU7z4evUIrhqRbUXvcTfsYKT Hkuw8XCNzd9WbNM3FNmUdYXWf1Eaqy+JRABBR5KKOogAgna4DdsSR9B9ORGAERA0gwHM3/1BMOCzrsuK rcOcEhvcY5JN/u5f2dhHfkheyxD7GSrC82QTys3XalqWtZmeY+3R4ZVNOGTADJvw8Pdt1A9gYq3obbvZ G90n26sDaJk2apN1Jt+h29R9rrb0mEyPBOUnuGsRI+KYFdYXw+WwnkNtCsVWxz+GwfLRH9rIV9+wzu2H 2/ORR+GF4XvslXFHrRVehTdmFdmb8yocDNp8SmTigwDxWwFCH3ozZFZGEoJsCHSBvnaXGIT3f2k4Guze h7/AjoAx0QEBICANWlLC3WjrEoNLCu+yfc+Dl2R4lJ3B6ydIrVA5d1VfUhXnGBSQHCQ9OBDEJEaHCW9H qsUdSRTNEoZ6Q0T9IQAaVYK+eQfAiL7XeWPV5CYZmQKI25zrluwYDipSZYKaIrDxa0RgExrZClBiUOHY CJCk5qjh7XV1rYrUGzGfmE6AEEAlML68J2pe4qu0r4CBaf17qUQqYR8xr6QY76QE3fQVnX3iPwKIQQBT 8MYEKcBbtzkYBGnAjbVuh4klJNl0Wuw2Ak4B7E3dC79X30SP+UD/L8cTIk9JFnEb8oSo0KykALlL09Oo KaiCJHhlCvGWlOO9aMAOcpbfSq0SULmRWGnwKpZz+xbjHoDhqmoQSEIQCQRuSmoIgOCgEEUY6n4kXV0k oOg8YHAOIDiBobAO9aCSgKIyMm5zqi5To+MskYWnbB9hxuvxHKw6UG4ryTeYtamQEOMsG7tcocbyDBxH KghAEKQCUoABhLa4D9tA3ZZiiU+ShIB0IMkgUSKIJQOBAVKEAKH9vFLr03+RTXnkezbmr75k/V/rYC+p AMloMhmn51qH2UWARiGGyFxck4ARxU4G0CRlSJe+1qP7MHuzB2DQZ7a9OWiJdaASUlcKonSfsisEHeFa 7D1utfWl4MmAoTNtWL8xNqbLWzbp1RdsylM/pivT92zoK62sddcp9gwg9HT/jQDRLk9eUnhyW8Cg1dyy Zungfy8g0Jeh11gAgYAkqQw5SAgFdIG+jkRw6wOz2+//yu598EsAgcxHBwQ8De+KUB/Ifryr/AalRUfq w12XFFAfKKridRS8QCtAQB2FW+rzoLJskergkgH7QYK4xxZykJCq8bbnTdzz4q4RuPB7SRy3VbVJxP6t WBJx1URFYINKEoAjkFQTB4uo6cwtGtj6ddj65wIKgYYklmYQiNvXRSqOACa2hzhoRGAgQIg8KGJiV2+a JRAxeYs645LKDdrh6ffqgOVgpOa5ERgJlJolmiDJOOA4iESSDOdw9cnP22K4DW32gu3GgTICXbfl3KCk vgresDrLLiKjnSSFGvoeVuCSVaNaeV+K8YTIK+Jpy3g/lDsi4+tJDLJq8y5bhCSmmzyDV+Hmnd2+LWDg PlR416UEeZEkKQBC+ltG4wgQPPcAMLkgm4Z6RqJCnSOeILgPCSTCPqC+IEV1lzFwX7RDxSctOeuE7cps sC1pNZa0t9gWkn24lHDjiSsybNSSTBu1NIsKRdnWEebvABBIVWhPTEG76UdYuY9YWz5rw/atZfjpURek JjSrBglAoM8cDKAuHNtubol1HLXTxqBWjfvG523qj//RBr/SzroMWE6sAnELuPq6kMXYBZtAF64hCaDD qPXWevASe6PvXHu972xrNWCBtR++gnoGG607wUq96IvQd9QKG0jw0tBu/W0UBXrHvfGajcXmMOaRH9uE n/yTd3Du/+Kb9kaHcW64fJo8heeH724GgzYzC6393HLAoLJZOvjfAghj5q+m99tqGkKusrHz1tiezFLb n1FJDniNHcmpI9vxPbsotUH2AxkU34O5ZVQEDJTodA/Pg9dIUDiz1AnZGFAhRKq/eCcCBBVoVZGVm9oK ENTrQYVbKeAaGPodZ/wwuWSEDH/fY/8ev7kH43vpNgHNO0gfDjYUfFUVJ12HYwQYt1XqjXPGKoozfLM6 EqkpAgwASdfxazvjAFT6TAzEanobppRkEasx3r7OjaahuKyvuFGvy1swRixRBKaOmN0lkLAfKDDRdTFt /FsZXvXMMsTG9hSYV8dKIrlJ1WtRbBtxEJAK4+pUJEF4N+7490GSuslzhTHW+ALiXhNTQByATzH/3n0a Y6Zb77H2y8MhgAiExwMPibwo8lKcxyB7id9cFZjpHJL2NN6oh7eUCs+5VWbvhjf2eRcQoAUg93WNZ5LK FewE5BoAYBexiQgATpGGfBJqIMGt5rRch9etsOEqKuslSy05b0eLztmunJO24XCVrdpH9iG1CGZtzCKW AAMhfQb6KOloQap1n4MfX+G+bLvNwVgHdZ1DaDFM2mMFfvkkaKVItgKBQUSfAQQxIAQJoYyCIpy3x3Qb 8yhdkb75BRuv4KPnsPq37W6juw6zkf2m2wit8oPJGO4zGYlimnVHdejSb5p14+9efeitMGAyEsBYG0EU 46j23WwsfTTGyz5AO/dxP/m+jfneP9s4DJcTH/qejXjiMev3anvr0qa/vUxY8vP91tirGCuVp/D6tHx7 c3a5tZlfY20XNVi7xY3WfsmJ35heGpVsifQJG0IMCA4K89dYcmqpJVMaKjmtCmCoslOX3rOzNz+0izc/ sitRLMLt934BCPzc7r0HCLxL9CLAINuCIhmVAHUTULh1VxmSbAUCiBg3qKlwDbruoKCJKoCIG8Bockly iJrARIwqZr3Lan6XCea2CehtqScuhQSVRPsCnQAGLeTqSMQQvq929l49Wp9rG1SWGxFp3w2d3oQmNn4G D4l7RBwIggel2Qgqe0XzsVJJgvdE0kUAEDFfJHmIyX31lsoU3YckIkgSkV9bhWs53u0nunedC9C8ycru IOIAwz3rWaLnkTTg54yfTddlPG4xHhr7WxiFb1IL8yYZq6qJeQtp7breBb+5xv2KwWXAk2dGjHoBL8l5 9i8AABfVTRoGvux2FN1DaOt3nXN4Ojyk893EA6Vs2Bs6N6Cg83uDYIEC17imaFckHoUXn6f5zxlaBJ7C M9FIcZIawKj8FBIBvUQLSbdPq7xgh5EI9uWfILAI9QD34bLdZCBuybU5W/NsHIVJ+s47ZL2pPNRzNpmA 82UzoICIg0GmdWO/K/tdyTXoAkj0SMI3H6kIwXgYwCBROmgGgEgyuB8QKqhpkGOvkEXYoct4G00Doon/ SCzC33zVprCdSqWiKQ9/lzbsDxEj8JBNwiMw5fWXbCz5HKNavWljXn3Zxr0IeDz7hI2nEevER//FJj8W aMoj/2xTH/0u4PI0x71mY9p0sl6t3rJX24+257rMsqd6LLHn+q22V4fTUIWiqB0JbnpzriSCWmsHGLRf 3PQbA0EMGr8dICxYY7upEbc3rSKAAoBw4uJ7lGL/wM4DCBfIerz99i/t9ru/wsD4SwDhF+wHyeAmEsNN AOHanY/sOoBwhUkid6VqKVyhBNu1a+/bpRvveX3Gq0zy6zDAdU0yZxgmNCSGlegfVmwxhkRfbfnM1QWA AKaXZHAHQLgnQHAvRrBVaAV0tQRGuME1bnDdQDCQN5wJk1pMJAbTuQNDhXuQZOG2DShWO5rtHHyvyR0o GCqDqzQyfkYek9DuLvaiROd0EGoxpDpQ+DUiiUYqUKRK3ea59BwBtIIk5fuAY+jALUkmUgUcFGJ1h+94 RgdgxkkM665iQOAG7+OGtgJoPr8BSNwAIATM1/UuOM9Vnu/qdbY83xXeiwOGAIDvr2k8tfqL4fV7zqPz C2h0Hn12XVuup3J7VzjPFdzVlyjhf544lvMX7wICd5AGbloT7sNaQKD6JC5DJJAiGgLlU68wg47jx/Fw 7aMwyZbUatuYUmVJB6psFhmI49Zk2lhKiaucuFKQu1I9qBslyLqpOAn1ArrOlUSAyA4gCASUHKRtF1yJ sb1AtoJE6eAzQSARFJAQOmK9b4sV/3VqEb44dIe93m22DWjby0aQbTr20Z/YRMT7id//Oxv7L39v436A J4LahmP5e8y/fIf4g7+1cT/+O5vw0D9jDwAMqIw8/qmf2hiqcY94vY2Ngoa/0cE6tRtkr6IavNB5qj3d da49/RbhyH1W2gsD19trI3ZZa7wXCjzqOqfI2i6o+zeDgUDhtwaEvakVtgdA2CtASK+kJfz7dubKh3b+ OoSkcB1AuPU2QPAOngekhGuoEVexH1wRCLBKXEYauCyJ4sb71GOErr9nF669a2eZJKcvv8P57qE7Quiy F1k1LkHX2L/iYrH0zcCsQcyUuMm+xGYxtK/qEcOKiSQVRKJwCxOJ4TW5xcBaBQEBfn+N6+s8mvC+anF+ fXeVSXsDUrCUruGgJDFbK65ASsRvRWKYa7onXzFl0MOV58ZE/tbq7d/xt7wd7uUQ4Ak4YvDjcxhYzOfA EpW3996ZYmLUrBvaRmAgZveVX9f136goDde4EhjXn4cVXPeuMdQz6hjRFX53gXehoLJrAICqXgmQr3Av F/Q957uCPeQK57nEWF27prFg3Ljny3x2meMuw9x6lqvczxXGOXwWAF0dvS5yvguM3QXC289eedtO8W5P k258Gs9AE27Cepi/DltANfUHymD8ErqK51SG0mTpxafseIk8BSdRC0hDTm+0HVm11CSgTNmhclu8lziC vaU2fhX2AdUlSEojwCiNMuL70dVJS4a6kITkYcaAQWeBAVKBshCdiC/oBLnRcLkIu4DsAwk2gt8EFFRT oP08dHXcdfIqPAcoPNM7yV4hbPjNblOtW6dR1rv9AOvbYQAehd42+I1ONuiF12zQq+1sGElP+ntAuz7W p8sw695ltHXsPNZe7z7LXsBj8ORbS+xpIhyf7raA7UJ7qucSe7Zvkr1I5uIrSAWtxuwnijIFe0guoFfs gUeuIvwbJIPfWEKooLZ8OVSBT1fbGTSZmLVqr81Zt9sWrCXzLqvK+z1m8ALzSmmnjS+4HrGyEf+4yqud ZXKegMFVnfk0k/PUJSYGGWdNxJU3XLhjjUyQelmNz97mt2zxKdedlfEIYquMtFPnb/Ob25wLYnuO351h VTntKay3CGKRK+ouCSyIt0y+y1jdL0vU1SrE9S8xGQUsF2Uw45iLHKNc+CbO0YSuKv/1SbXwQjRtIsKt kYlaj158EpH1BFGNJ9Cjm5Qdx0Q+x72eQVw+q+Airn2eZzyH+1AitCzgwR1Gv0DoNIE2jei96jas9NrG JvRhVr4aIgnrm6j9r8+4VgPX8S3GshPozE3ozKf5u4nz65ynlJ3HM5zB0q4svbPS7TnmjAJyuJ/TXtiD CESYrJGknVO44U4QnNPE9RpV/QeLfBNj23hKY8rzsa0+pSi+mzDlTasl46+Wa1fTFr2SQJ4qRPPyE5QN o0hIGWXFSzHeFfPui0kNLqilsCgrdmEdzUxg4GIMy3kkueUzP1RiLL+K4jkVJ0l+O22ZzIlMxPsMxPvU vBM0LGn0Mv5HcmvtEFWJD1GefG96LZWJa2zbUVb9g5WWtK+EoKFCW0iB0tlbKL+2BmPgilQbteKYDcc2 0GdxqvXAU9BtNnEEih8gkrAVocZvToQmHPTw4nZEFIraEl3YbqqqCVMhiG0bqP0cPkugtqQqt1DafdWC Hkz0+bS/W03PszeoMvTa5Ax7edwRexYr/88w8P2050p7rPsie6zrfHu8y1x7rMtse6zzLHu48xx7pNMc e7TzbPsZn/2s0wy2s+yJrnM4Zq490WWm7z/Bd76Fnuw+D/VgkT3bezm5CavtpSEbkQy2E4W4B1XhEMFH cpumuFvzQbfhr3uGByWC54esJ4iqhY4UEdCVQJ+roLikQKFSoMBkmEnHmRnQzFUChl22D1vCYTLF9IKP UTylsOaSFTdSeooS7RUwWB1x5TVM1Fq26vRUSySZQKOKCVmB77is6YYfX9x41Yprr1k5YaZl7GtbzveV jddZQTi+CVGSv2s4r9OJaw4gDXxWz9+6Tj3nreG8dUzyRsCk/gyAc4bVCEZuPI3Pmlh2MUYtzFIBlXEO TfoSUl/LBHiIpaV1VIKqO0dwC4RbtZRtKatXBQxcjghbyWqmGvzVJALVEy5bD+MoIq4OC3st34kqCYyp JFeiEl98OQU3dG6Rcu2LGc8SVsFi3LdFeGxKiOkoovpUGfkFpTBRKYxWquvWn7PKBs5DERpdt5zrV3Af ldSgKBGjckwFx5ZXcV/43stJ3RVgl9IToAQGLYYxS8nkK6UycAmReoVlSu8N3xUSUFZEKG8BFvpCdPJi Ik/zuZccyutnw8C55Ktksp/BCp1Bp670YjJc8+stBWZOL6amJuXH00hyS+P79KITlgZpUUjNp1YGJciP ceyx3FCK/ABMvz+j2valVtme1ErbdbzUth8ptS3QpoPltmYf7kGqEC3dU2KLdhTZLGwB01al2SRCiccv J5yYnoP95tBzkPqEairSiYCdjvIS4BFor3qEKkc+4QCBP9DYA1HOQZoDQAwCbWCUNlNSnZrB4D4gEChw DJWLfh0DPfi9M6CDQk4ECkfthVH77RkkhafIMnySAKXHCVUWQPy0x3J7DHpU27eWQUsDUdpM3+mYZ8h1 EOM/25dYhv6rAIA19uKgdZRN32yvAgKvj95lrcaqNLuAAJfplOPWXklXPKPCjv8dAAEgEBgIFACEGUnb AyBEoOC2BFSHg5lVgEINIh+rhVaQWqLFmNCl1KQrYVKXwkRyFZUQPFJCrbpijERFTOpc1bPHjZldRqx5 ObXrFBItYuUpqOZ3TPj8Gq1Q/LYOsKgl+IT9IkWj8XeRSNditVKEWkk9x3KNUtXDa7gOQ8L4ZLiVNFzj XgAd7ddd5f6usNphqOLa+ZUnqahLHz62ooIqpB2YtoD9EvaLxMw05CgijbgYhisXgAAUZYBHqZiT/XIn /ua78moxHswPU5ZUn7ISCnMWIAbnw/D5MFEuDJXH3wVlJ8LnVPHNZ1Ut4PsCumIVwNyFFZCOBzjy2Ne2 UA1yVPab32TxXR7nyhaVNrJtslzOk0cz3hzyTbJ1DfbzqBKcW9ZE2fATfH/S8jh/NufLwW+fhU6uCsJZ Oh9Mn14EQxdR76KwwVKorp2i6lh5dKKmbF4qHqWjMPmx3Bo7xnEp1A1IAQiOEfyTUsBvSCFOyWmwY9l1 doR6AvsR7w9lAAZp1XQtonNRCmBwuMK2I/JvPVBsG6G1+0tsJQbBpbuLbdH2YoqU5tkMMg7HLQMMCCdW ZaK+AgIqFHtIMbYBpRu3o1JxmykhbuD1sQfpVxDoNagNWYltYJAYALRtnUAOCA9IBTEY/JsBoRkUqEc4 OdNewZ7wMoFBL4w6YM+PSHap4RlCl58Zss2eHrw1ENGET1PwNJA+2+bHvDKUIqjDtiIBYI8YudPeGL0H SWCvvUkvhjaUX3dpgGQrlwh4TkkFMRj8+wOCVAb60QkQYlCQLWEftF+ggPqQwyqYS1izGrkIGApYifIo UpkH8+fDLAKMnBpWHyZjBnkRKaxAh/IbmWxNuDFP2tECRMu8BirbMtGYdOmsWOlF1F8ooeItK15WOUTF pmzOmcGql1vO+VQEk5VOPulc6aGASS5gIsoDPAoAjDyogP1cJJh8Ps+pxocN5ep8XCOvhNr7ME6+mAdw yHWCSSEVzigEFApdbGZbzQoPFYn0mUp0s6/vC331F0OL+WB2zpMH0+VwXjGpGDeL58qE6bIQpbOKuB5M lc31s2HKLJgthxU6Q1QEeDijczz7mTBgJsenw+QZMG5WUR09MlitGa90xtC3nDejkHZ7UAa9AzI5Jo3z Z8C0GYBCBufI4Dqp7Kejn2uctbqnifmzkQLya2g0grSHWH8kS5Kf3MvsQ4e15e9jVM06Ch3nmilIBSrN f1if0Zdgv7xP6dVucN51rAJVoNy20Khk44EiW59cbKvpV5C0I9dW7si3JTvzbSYgMJPaA9PWoR6sy7Jh S47biHmoB0gGg+hP0J2moypU2oXoPdUmbEONwraT1JeAmoQwyMvo0a9Ar47d59vWrJitJ98PAg4I+gx6 UEVIBIP/W4CQCApECL5OYNCrk9LsFcKHXyZs+SUA4iVUipfGHE6gQ+yL+IxgIn3fiudQR6XWqD9tkADa TgYAeKZYEmgGgEgieDAZ6f/rEoKZfS6R6utVLIPUVUj1BKbRn27GqmSbs3qvzVu330bNXW+j5m2zMXSK nrZ4h01ffZi+dYewNxy1uVsO2rxNR2zhllRbsDnF5m8+bgs2Hrd5G/lu01FWiBSbu47txlQ63KTa4p1Z tnR7Ku2vMmzlrgxbsyvfVu3KtFV7s9nPtqTdObZmbx6VbXL4LNfW78ux5XsLIL7blctnebZyT44lJWdy jmxbuCPNFm5PowDGcZu/4SiTkbZadNuds/6gzVp3iGYah23e2kM2Z+1Bm809z1pzxOZsOGZzt6Xbwk0p tpg2XMt2pljSznTE3DRbuzvTVnPtjQfybMMB7mVfNgU2uPa+DFuxI92W8TxLNhy3ORs5z6ZDNpsWXlNX 77PpKw/b9FX7KdnNtbnOdGjqqkM2d8MBm8nzz+f4udzP7A3cz7pU7/s3az3n4Z7nbeDzdcf57ij3fIQu QIwd46fv56/jXjl+/kbGcf1hGoMcthk8w6yVB2gfdgip7pBNgyatOGiTlifb+KU0DKGV2KhFtBSbt5eC obtt5KK9/L2bxp+7aRO+y4bM3mNDZ+22ITN32/CZ22zQnN02dC6NRek72HvaVus0dpO1G7PZ2o/ZaG0J vVW0XYex66396HWE4rIdEfbbax96c+QGVj504FEbcJexHYkoPHKrvTh8i704bDMJQJvtRbL0nh+00X42 aL39pO8a+0mvNfY9sgW/12udPTRgiz3Uf4s9rAYi/RDJh+6xJ4fthXb7/k/6bLIfJ9ATQ3fbE0MCPQ6p z0AgWpN5e7JAD+b9/9v/Vg/EjfZQzw32UI/1Tj95ax20toW680wPUuL3HB//9qGeOlc457/lnn46eJcl 0iO9VvG8LfTwW4stkY4j5SXSg/x/Hxjoy7q6AAj1dLYVTVumhpW7kRxoYJlEJ5rJK23IlNU2dMY6G0m3 6BELAIfF25loO2zskl02dulOiHbX0IRle23S4t02bslexES+g8Yv3cP+XhuftIdJu8cmrEy2STDPpBX7 qXQLJe23Kcv32+RVByh9vZe/99pUJvyUVftgKo7j+4n8ZjI0ceU+m8h5JizfjQjK9Zbymc4tZqCv3vjl e/27ycv4fqmIv9mfyGeTVuyxySv2QjTjXMk1ab01leebsgaG5j5mrT1gs7kHbWetA1AAkul07Z225gBM COPrHjj/RH4/MYn7oMHneM45jp5+4/SM3M94nn089zSO55yoe+F6kxjPCdzb2CV8x+f/n/LOrqlpIArD /wrxRuEKkKIOAipeeiWO0A9qaUnSCEhlEJhSYMaBli/7QaWO/sLj8+6mqHin6I0X75xkk+xmM/s+OSkJ G3M+Zc452qeMbeUaZsW48S5vx+maUqY6XD3qg+pn/1XaWDn4auU9P4dgwPEhWq5eWlj7hPm7Vqh2mT24 Y7mtDga/4H/+8VrtFuK7+0WW8xufmAWYGYWlCvu8u7D5jbYtvG3xHX7TnsdnNls8tmeFE5stHNvs64Y9 Rk/zDXuSP7bHRK0rTkssPyA+RBOLDeYIqNt9fsCaWDy3ifzHJJ7bOCAY47l5LHMKBOp2Gw3OHdmtuYYN pwEC8w0OObVsFAiMJKYfw/B3Mbl0J5Eg8KOug+BmYXAdLH04eFP/LIAhaFzp+3Zv/t8DwHVo/BMgeCgk QNAMtgzaDUGBAZ/m88zc6qGbq15gWNppMq11mxSwDRw6pIMdKwKJ5SqqCRRa7lrAIA13GeDEaN8P9mCP SJYR1TxEygeXFrMtpiwGMmWWg2R7dMDxLAe1nitT3cFe15ehUOvUHbh61S7rmELtyCCh2pIwaqR2nAQo gQvDOlAAJwzudAgsMP07oLNOrACmVWfszw4qK4IZplYdq0gxdkZXxOTEcE990j6UY2ZXjpHLrGt/9SlG OmftGwKB0jbThG93rbSDqlwb9o32v3AtJJbdOnVxDhGQiICtQBAqC9jtWVHXf6djSy4KAm3LbbaAgtQm AxAMPBAyxEylaelKi9giNm1+/aOl1ylb45PcuGlPC970M5h8Jl+3GUwuTSdxBuOrfJL1qRzv22f54Sx7 ZOMola1bis90UwAgBRTGpeyZ3UOCwWjmxAZfNuwWnxIPvgAILw5tmLv7EGYfWlAm4IHQzwJk/D4IfgVC DzD0rjKCvwuCm8w4/qyufwaEPhQq3NUrDD4PBYCw8sEWUEZgWDviObBpi1tNyzPg8tst0s02ajEg28CC QamBiUoA4koCBmZdBhCKgcCh6MqS/ZK4jClKVYHmAuiwnWUNeNWpQb9Ee5LaLNCma9sBSm0iIBUg344H g9oLgVCIEQWnsjPmJRkGRiPDeUOfVxygvHRndkqMLnBJ7ljqE7g8rPpgog+0J0gpe1I7vq0+sC4BGn2n TPtJ6ntA/wqb9AmjFtHS9oW7+0e060Dgzsmvh6T8go1iCRAIBrqeRY4RCNy1ceYHAu9bSWRdUKAsvwko iFm+xXcAkN7yjj1AmCemia+YDMRnAQkIcoAgx9/gMftUEqcBwCM0hSZRKnPI/AAAIU1M11k+5df4M6d7 EjAYzfrsYERAmKsDgiMbAAYDRD0SOCWZwGihx+OAlwx/h2nLf5TKRkib+/pfQNDPFG4aCN8Ax2fzLWx8 FZYAAAAASUVORK5CYII= 158, 443 49, 23 &U redu O ================================================ FILE: Samples/RegEditPHP/RegEditPHP/dlgAbout.php ================================================ InitializeComponent(); } private function InitializeComponent() { $resources = new System:::ComponentModel:::ComponentResourceManager(CLRTypeOf dlgAbout ); $this->tlpMain = new System:::Windows:::Forms:::TableLayoutPanel(); $this->picRegEditPHP = new System:::Windows:::Forms:::PictureBox(); $this->lblProductI = new System:::Windows:::Forms:::Label(); $this->lblProduct = new System:::Windows:::Forms:::Label(); $this->lblTitleI = new System:::Windows:::Forms:::Label(); $this->lblTitle = new System:::Windows:::Forms:::Label(); $this->lblVersionI = new System:::Windows:::Forms:::Label(); $this->lblVersion = new System:::Windows:::Forms:::Label(); $this->lblDescriptionI = new System:::Windows:::Forms:::Label(); $this->lblDescription = new System:::Windows:::Forms:::Label(); $this->lblCompanyI = new System:::Windows:::Forms:::Label(); $this->lblCompany = new System:::Windows:::Forms:::Label(); $this->lblCopyryghtI = new System:::Windows:::Forms:::Label(); $this->lblCopyright = new System:::Windows:::Forms:::Label(); $this->lblPoweredByI = new System:::Windows:::Forms:::Label(); $this->llbPhalanger = new System:::Windows:::Forms:::LinkLabel(); $this->picPhalanger = new System:::Windows:::Forms:::PictureBox(); $this->rtbReadMe = new System:::Windows:::Forms:::RichTextBox(); $this->cmdOK = new System:::Windows:::Forms:::Button(); $this->tlpMain->SuspendLayout(); $this->picRegEditPHP->BeginInit(); $this->picPhalanger->BeginInit(); $this->SuspendLayout(); // // tlpMain // $this->tlpMain->AccessibleDescription = NULL; $this->tlpMain->AccessibleName = NULL; $resources->ApplyResources($this->tlpMain, "tlpMain"); $this->tlpMain->BackgroundImage = NULL; $this->tlpMain->Controls->Add($this->picRegEditPHP, 0, 0); $this->tlpMain->Controls->Add($this->lblProductI, 0, 1); $this->tlpMain->Controls->Add($this->lblProduct, 1, 1); $this->tlpMain->Controls->Add($this->lblTitleI, 0, 2); $this->tlpMain->Controls->Add($this->lblTitle, 1, 2); $this->tlpMain->Controls->Add($this->lblVersionI, 0, 3); $this->tlpMain->Controls->Add($this->lblVersion, 1, 3); $this->tlpMain->Controls->Add($this->lblDescriptionI, 0, 4); $this->tlpMain->Controls->Add($this->lblDescription, 1, 4); $this->tlpMain->Controls->Add($this->lblCompanyI, 0, 5); $this->tlpMain->Controls->Add($this->lblCompany, 1, 5); $this->tlpMain->Controls->Add($this->lblCopyryghtI, 0, 6); $this->tlpMain->Controls->Add($this->lblCopyright, 1, 6); $this->tlpMain->Controls->Add($this->lblPoweredByI, 0, 7); $this->tlpMain->Controls->Add($this->llbPhalanger, 1, 7); $this->tlpMain->Controls->Add($this->picPhalanger, 0, 8); $this->tlpMain->Controls->Add($this->rtbReadMe, 0, 9); $this->tlpMain->Controls->Add($this->cmdOK, 0, 10); $this->tlpMain->Font = NULL; $this->tlpMain->Name = "tlpMain"; // // picRegEditPHP // $this->picRegEditPHP->AccessibleDescription = NULL; $this->picRegEditPHP->AccessibleName = NULL; $resources->ApplyResources($this->picRegEditPHP, "picRegEditPHP"); $this->picRegEditPHP->BackgroundImage = NULL; $this->tlpMain->SetColumnSpan($this->picRegEditPHP, 2); $this->picRegEditPHP->Font = NULL; $this->picRegEditPHP->ImageLocation = NULL; $this->picRegEditPHP->Name = "picRegEditPHP"; $this->picRegEditPHP->TabStop = false; // // lblProductI // $this->lblProductI->AccessibleDescription = NULL; $this->lblProductI->AccessibleName = NULL; $resources->ApplyResources($this->lblProductI, "lblProductI"); $this->lblProductI->Font = NULL; $this->lblProductI->Name = "lblProductI"; // // lblProduct // $this->lblProduct->AccessibleDescription = NULL; $this->lblProduct->AccessibleName = NULL; $resources->ApplyResources($this->lblProduct, "lblProduct"); $this->lblProduct->Font = NULL; $this->lblProduct->Name = "lblProduct"; // // lblTitleI // $this->lblTitleI->AccessibleDescription = NULL; $this->lblTitleI->AccessibleName = NULL; $resources->ApplyResources($this->lblTitleI, "lblTitleI"); $this->lblTitleI->Font = NULL; $this->lblTitleI->Name = "lblTitleI"; // // lblTitle // $this->lblTitle->AccessibleDescription = NULL; $this->lblTitle->AccessibleName = NULL; $resources->ApplyResources($this->lblTitle, "lblTitle"); $this->lblTitle->Font = NULL; $this->lblTitle->Name = "lblTitle"; // // lblVersionI // $this->lblVersionI->AccessibleDescription = NULL; $this->lblVersionI->AccessibleName = NULL; $resources->ApplyResources($this->lblVersionI, "lblVersionI"); $this->lblVersionI->Font = NULL; $this->lblVersionI->Name = "lblVersionI"; // // lblVersion // $this->lblVersion->AccessibleDescription = NULL; $this->lblVersion->AccessibleName = NULL; $resources->ApplyResources($this->lblVersion, "lblVersion"); $this->lblVersion->Font = NULL; $this->lblVersion->Name = "lblVersion"; // // lblDescriptionI // $this->lblDescriptionI->AccessibleDescription = NULL; $this->lblDescriptionI->AccessibleName = NULL; $resources->ApplyResources($this->lblDescriptionI, "lblDescriptionI"); $this->lblDescriptionI->Font = NULL; $this->lblDescriptionI->Name = "lblDescriptionI"; // // lblDescription // $this->lblDescription->AccessibleDescription = NULL; $this->lblDescription->AccessibleName = NULL; $resources->ApplyResources($this->lblDescription, "lblDescription"); $this->lblDescription->Font = NULL; $this->lblDescription->Name = "lblDescription"; // // lblCompanyI // $this->lblCompanyI->AccessibleDescription = NULL; $this->lblCompanyI->AccessibleName = NULL; $resources->ApplyResources($this->lblCompanyI, "lblCompanyI"); $this->lblCompanyI->Font = NULL; $this->lblCompanyI->Name = "lblCompanyI"; // // lblCompany // $this->lblCompany->AccessibleDescription = NULL; $this->lblCompany->AccessibleName = NULL; $resources->ApplyResources($this->lblCompany, "lblCompany"); $this->lblCompany->Font = NULL; $this->lblCompany->Name = "lblCompany"; // // lblCopyryghtI // $this->lblCopyryghtI->AccessibleDescription = NULL; $this->lblCopyryghtI->AccessibleName = NULL; $resources->ApplyResources($this->lblCopyryghtI, "lblCopyryghtI"); $this->lblCopyryghtI->Font = NULL; $this->lblCopyryghtI->Name = "lblCopyryghtI"; // // lblCopyright // $this->lblCopyright->AccessibleDescription = NULL; $this->lblCopyright->AccessibleName = NULL; $resources->ApplyResources($this->lblCopyright, "lblCopyright"); $this->lblCopyright->Font = NULL; $this->lblCopyright->Name = "lblCopyright"; // // lblPoweredByI // $this->lblPoweredByI->AccessibleDescription = NULL; $this->lblPoweredByI->AccessibleName = NULL; $resources->ApplyResources($this->lblPoweredByI, "lblPoweredByI"); $this->lblPoweredByI->Font = NULL; $this->lblPoweredByI->Name = "lblPoweredByI"; // // llbPhalanger // $this->llbPhalanger->AccessibleDescription = NULL; $this->llbPhalanger->AccessibleName = NULL; $resources->ApplyResources($this->llbPhalanger, "llbPhalanger"); $this->llbPhalanger->Font = NULL; $this->llbPhalanger->Name = "llbPhalanger"; $this->llbPhalanger->TabStop = true; $this->llbPhalanger->LinkClicked->Add(new System:::Windows:::Forms:::LinkLabelLinkClickedEventHandler(array($this, "llbPhalanger_LinkClicked"))); // // picPhalanger // $this->picPhalanger->AccessibleDescription = NULL; $this->picPhalanger->AccessibleName = NULL; $resources->ApplyResources($this->picPhalanger, "picPhalanger"); $this->picPhalanger->BackgroundImage = NULL; $this->tlpMain->SetColumnSpan($this->picPhalanger, 2); $this->picPhalanger->Cursor = System:::Windows:::Forms:::Cursors::$Hand; $this->picPhalanger->Font = NULL; $this->picPhalanger->ImageLocation = NULL; $this->picPhalanger->Name = "picPhalanger"; $this->picPhalanger->TabStop = false; $this->picPhalanger->Click->Add(new System:::EventHandler(array($this, "picPhalanger_Click"))); // // rtbReadMe // $this->rtbReadMe->AccessibleDescription = NULL; $this->rtbReadMe->AccessibleName = NULL; $resources->ApplyResources($this->rtbReadMe, "rtbReadMe"); $this->rtbReadMe->BackColor = System:::Drawing:::SystemColors::$Control; $this->rtbReadMe->BackgroundImage = NULL; $this->tlpMain->SetColumnSpan($this->rtbReadMe, 2); $this->rtbReadMe->Font = NULL; $this->rtbReadMe->Name = "rtbReadMe"; $this->rtbReadMe->ReadOnly = true; // // cmdOK // $this->cmdOK->AccessibleDescription = NULL; $this->cmdOK->AccessibleName = NULL; $resources->ApplyResources($this->cmdOK, "cmdOK"); $this->cmdOK->BackgroundImage = NULL; $this->tlpMain->SetColumnSpan($this->cmdOK, 2); $this->cmdOK->DialogResult = System:::Windows:::Forms:::DialogResult::Cancel; $this->cmdOK->Font = NULL; $this->cmdOK->Name = "cmdOK"; $this->cmdOK->UseVisualStyleBackColor = true; $this->cmdOK->Click->Add(new System:::EventHandler(array($this, "cmdOK_Click"))); // // dlgAbout // $this->AcceptButton = $this->cmdOK; $this->AccessibleDescription = NULL; $this->AccessibleName = NULL; $resources->ApplyResources($this, "\$this"); $this->AutoScaleMode = System:::Windows:::Forms:::AutoScaleMode::Font; $this->BackgroundImage = NULL; $this->CancelButton = $this->cmdOK; $this->Controls->Add($this->tlpMain); $this->Font = NULL; $this->Icon = NULL; $this->MaximizeBox = false; $this->MinimizeBox = false; $this->Name = "dlgAbout"; $this->Opacity = 0.9; $this->ShowIcon = false; $this->ShowInTaskbar = false; $this->Load->Add(new System:::EventHandler(array($this, "dlgAbout_Load"))); $this->tlpMain->ResumeLayout(false); $this->tlpMain->PerformLayout(); $this->picRegEditPHP->EndInit(); $this->picPhalanger->EndInit(); $this->ResumeLayout(false); } } } ?> ================================================ FILE: Samples/RegEditPHP/RegEditPHP/dlgAbout.resx ================================================ text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 lblDescriptionI 60, 13 <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="picRegEditPHP" Row="0" RowSpan="1" Column="0" ColumnSpan="2" /><Control Name="lblProductI" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="lblProduct" Row="1" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="lblTitleI" Row="2" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="lblTitle" Row="2" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="lblVersionI" Row="3" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="lblVersion" Row="3" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="lblDescriptionI" Row="4" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="lblDescription" Row="4" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="lblCompanyI" Row="5" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="lblCompany" Row="5" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="lblCopyryghtI" Row="6" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="lblCopyright" Row="6" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="lblPoweredByI" Row="7" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="llbPhalanger" Row="7" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="picPhalanger" Row="8" RowSpan="1" Column="0" ColumnSpan="2" /><Control Name="rtbReadMe" Row="9" RowSpan="1" Column="0" ColumnSpan="2" /><Control Name="cmdOK" Row="10" RowSpan="1" Column="0" ColumnSpan="2" /></Controls><Columns Styles="AutoSize,0,Percent,100" /><Rows Styles="AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0,Percent,100,AutoSize,0,Absolute,20" /></TableLayoutSettings> 16 3 System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 1 lblCompanyI lblProductI System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 None 0 tlpMain System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Version AutoSize lblVersion Fill System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 55, 13 System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tlpMain Powered by 260, 92 Fill 3, 116 11 tlpMain tlpMain iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAc1JREFUWEe1V4uS gzAItF9e++W5AwMSwiOY1qljX8qygV3yamc7vnF8jk97H+9X+VkAYPc8z7PB8R+84bPgJc8gxveCIwSE gSeAQUDw+VcAOHMnOAPooOD/eI8AtMUAPOxA+m/KKXN9ZWbgHloqeLuz/hcDI+UeAMkGgCYQWwCo4KKg GRN7AArZSyC8ZLtLIKtdB5BdYDFE3bHNgEuxaMNHAKhloqvFgKkDQhe0PpgMYHsJWUF5IbUbvr8Fx6N8 UkWlkBMA6m1slejsKpd1QEkJVzPnPl7ogswXmAEzc8xyPJgVKLIuRBkLw7orb0AAXuZ4o157WhYB4Ika kgJj8CxLCUIzQJ/LILohMQBZ9X6QqxuoBjINyIwJhyGX/m4YZif02phAO53h6gUBoDGCx4kgy8vV7sHD 6nNL9022QgZ6kSEDFFKwsqKCgwV3aZ6U8Nft5xUnm1FJfBQDnht6zjgtTVgDhhdw9YtRbFWE3HngEQNy 4jWcLgMl/cHXAYsBCKy+rwiQLMpBCVPnoyHS8YUVEN5GpcRApBdaDyYDcjYorhKawaLCFLN+aWdEZjTJ 6sJEJH1h2F9UtmalLnAKc9rcVDanWctkv+/srODeP248qvLRqKhVAAAAAElFTkSuQmCC 22, 38 7 4 lblDescription 6 tlpMain 72, 51 72, 64 24, 64 Right 0, 13 15, 90 picPhalanger True 51, 13 dlgAbout 4 166, 443 2 32, 32 None tlpMain About 77, 13 True System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 6, 13 tlpMain 7 True 72, 103 tlpMain Left 5 System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 11 72, 38 13 14 Right AutoSize System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 llbPhalanger True 40, 13 GrowAndShrink 15 63, 13 17 Title $this System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 359, 207 0 © Đonny 2009 None tlpMain lblVersionI Right 11 tlpMain picRegEditPHP Left 0 10 True Right 365, 469 Phalanger 52, 132 8 tlpMain 32, 23 67, 13 System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 55, 13 2 Left lblCopyryghtI Left 6, 77 True System.Windows.Forms.RichTextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Description 51, 13 System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 42, 13 0.0.0.0 16 Left 166, 3 System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 lblPoweredByI True Product 13 Left 72, 77 15, 103 True Left 72, 116 lblCopyright 107, 13 True rtbReadMe True System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 lblTitle System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 15 Copyright tlpMain tlpMain tlpMain 0 0, 0 cmdOK 3 12 lblCompany tlpMain System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 365, 469 True True &OK RegEditPHP 9 The Phalanger Team 44, 13 39, 51 2 1 5 17 10 27, 13 12 Right True True 14 Right tlpMain tlpMain Phalanger tlpMain 8 9 Right 72, 90 iVBORw0KGgoAAAANSUhEUgAAAQQAAABcCAYAAACIosskAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEwAA CxMBAJqcGAAAxq9JREFUeF7s/QWwJVd25422B+J9L2I8Hns89njsZrvdZGhzc4taUotZKhWzipmZmblu MXPdYrjMzFzMTGKpYb3ff+3Me0+VJHe3v3n+4r2YiliVec/Jk7Bzr/9evH7HzD6X+K+y9ux9H6zfl/W5 xEPeffvW5+xX9/+m+fe/87nP/c5/+n/dd77f7A9+yL/f+dx/gML+f/gd7YV9/fvEFfnqVxa+13fa/R3t sG0+1m9cxyT++lfR3/qcfa4TjokpXE/X/o//SV//x8/9Z475D//xP37uc//JuEO2utDv/IfowPgav9mT /p+j/p8dgf/rP/9f/043EM85bX/JvPkF0/DnYc4l/Auz53eYob/DEf+ZI//f/1vv749/l0mc8O9nD/3j fX9/48t/0sJkzkwwTSJV1JyxRBo4db31nyxa59R58FzrPGR2oMGBuvh2TtgfvtC6jFjUTF21P3KRdR2x GGr5PD5GnwVaat2g7iOXWY+Ry63nyBVOPUautB6jtIVGJTXTW+y/NXqVU3eoG9Q1oi6jk+x+WsnfK/l+ hXXlXF1HLbOuXCdsl7OFOH/XUTqmhbqNS7JeE1dZb56/7xSef/p6Gzh9ow2cAc2MaNYmG/h/6P9nxmDk vF02cv6/B+3kOjug7TZ6/mYbPW8DtBZalUCr2RetsZHz1tnweZtsMPf3v5NmrUq2RKo7fdkS6UH+/yQg ICF8AhCmrLcBMISoy1CYfgjMP2yOdR0KAQLxtgugIObvMipQNwEAW4FBl1FLou8AhpFLIG0hPu8+CiAY vRTmBgzGLLPeY1daH6gfDNl//CrrP2E1tMb6T1prAyau9W3/SdxTAvWftMH6Td5gffmsL/t92PZ22mC9 J7CdsBZaZz3Z9hi/GgJoROMgrvXWWMDmQRq3ynpOXG29Jq+1PtM596wNTPzNNnDOFhs0Z2ug2eyL9Fm8 zzGDRbOjLYAxCBrs2/D5wNkASUzR9zrmE8QxgxKPTfjNvwZEOs//AapPjsG/DxgIcAIYjJq/FYoBYc0D gCBwCIAwCrAIgLDz/3lA+BU6wC+ACvvVL62i+rSVVp+x0srTVlJ50gYhIQyGGYaIpm203iMXWK+xi6z3 6AXWZ9Ri6zVmsfUZv4jtQj5bCJMttd7jVlgvmLn3hBV8t8L6TlwBs660/lOTbMDUVZxvrQ2esdaGzFxv w2ZvtBFM8tHzttjYBVtt3OLtNnnxbpu8bI9NFS3fa9NW7rNpSQds5qqDNmvNIZu7+pDNWXPEFmw4avM3 HrP5m1Jt4WZoiyjNtwv4e/7mNJsn4vu5G1JtzoYUm7n+mM1ce9hmcJ7pqw/YVFHSfpu4Yr9NgMYvg5bu a6YJS/bZJP6etGyfTVkR0cr9NmXVfpvMPU3m95NW77dJqzhm9T6bCCJPTIJWJtsE0Yq9n6CJPNMEnk00 PoHGsT926W4bk0Cjl+y20Ut22ejFMe1kf4eNctrpNHIRtJAJKFqww0Ys2O40nAkZaFugBaKtNoxJ6jTv fhrK36IhcwMNnrvl02kOoBbTXO0ngGEMivdtI3AECIcIJKFBDxJAKbDU5wLd5m30+b8Gni3Ap98mgIDA VCDr5wz79wHCgl0w6+7fXGLg+E8CSuLvtc87iWi0pIN52yABgqQDMX+QEEaxH2gttB4JYSOAwJj/lhLC kHm7/9Xf/NYSQlndVXOqv2rl0PSVYsJdMONum7Zit+06kmk7j2bZLmjH0UwrAiRKUCuKak9ZSZX2T1px 9SkrqjpthfydVX7CMspPWXb5GcuuPGWZfJdedcbSKs5YJiCT4XTSMssjKjvJsSJ+U3HKcipOsz1jWZXn LLPinGU4nQlUqXOI+K7mgmXVXrDs2ovQJaec+ssRXbHc+iuWz9+iAvYLeLaChmsRXbeCputWdPKGFZ64 YUUxNbHfyGeN16ywIT6e3zdAjSLO05RIHNP021Ehx38W/bbn+j/H/3Zjr/HKrzvfTL9u/PL9XV+2PN59 LnMgh3mUXXuZOX3e0isvWBpz/HjJSTta1GSHCxrtQH69HcirtQO5bJ0a7WB+nR0qFNXb8eIGO17WBC+c dH5IhS/Sq89aRs05S4eyOK/mdlYVpPldx/Xqr0HXufZ17uFGoMbrltcAMVfz/G+2n0G7U8otkeZsOMLC 2EIPqhCfawYEQKEUmr5sr01esrOZ9gAEySk5ti+iqhPn0UEuWb10kVOXrfYMdPKi74tKGcSSk5es5NQl Kz5x2UpO8DdUGm1L+F7HlDLQohJtOU7fl50EmE5et4pTLVR64roVw7zFTdecimI6cRVG5rOT17je9Yhu sE0gGL0komLOU6JzPUg6d/wZA10MFUEChYJGJpAT4CLivsMkuQJTf5KKmHD3k+43fJYIAp+YiDxLgegB cHkQOH7dBP63f8+zMq6fpN+e4f7t9/C//1oavwfvJ7/+NweEf/1Z7p8TYY4wVwCNPMDDicUor4G/fTG5 ypa544sK98Xfvq+t/63fawG75KRjP4vJf5vP/82AUAoaiaYhGQgQpizdZZOh3ceybV9ajh1Iy7ODUFXT eWsEDOrPXLWG01d9W3/qijXxWQNUceYKDA1j813F2WtWBnOXwrRlp2F4p2tWHlHlqWtWybGVHFt55rpV nbkGwNyy2rPQuVtWA1VDVXwWUzX71XzvpO8vcNxF0W2rvnjHqe7iXejeA9u7Vst3NaLzHBfTuTtWdfY2 93rLKk4HKjt508qhMsBFABU/g56jlHsu1TMlUAn7ogc/198BoMK2tHk/BrAHtwK3T6EIzEocFAM4NgNj Igg5SAqAkHCiY7QtBDh/HX06IPxmQOHAxXUfZMBPk4Q+nck+C4x+c5D6tGvrWrovPVvz90gIBREo/N8D L93b/YDzaQAUJMoHgSmSMiNAEJAUAByBEoEkkgK0+iO9fgIIHvgs/z4p4aYfL0DYm9oiJfxaCaG09ooV 11y2wuqLVlB50aYABtPRe2cu34POvtcOpOZaek6pZeSVWnZRhTXC5Gcv3bRTV27Y2SvX7cwltpe0vW5n L96w+it3rOnidWs8d9MaLty0epi1nr/rYdxG9psu3mQLXWLf6badgE5Bpy/fhe7ZmStv2+mr79jZa2/b uetvs32HLXQDuhnowq137JLo7rt25e770Hu+vXrvA7sCaRv2P+TzD+zynQ/t0p0P7NLtD+zirff5fQud Z//8zfc4P3Q9bM/quqKrb9uZq9wTdAo6DZ2M6ATbFnrbTnLfMZ1iX6S/4+1Jnu0Ez3jiSkx32G+hJj5v pkvsP0CN/N1MgF6D022rZ+zqHQhvW+2lAHrVFyDATlTldBMCWLU9K9K+QPVmANbo80q+ayY+K08kviuH ys5ApwOVOgF2ToBiIn0CJDnmVAKdYV8U/baM35Y9ALgx2IYtgAgVAZpFALZUvhIYvhgpMJYABYB+HN9J giyFSgTu/L5Y52i8ZIX1F2C8i1bMwlR6gvuXFKlz8rsSji/w8wtEg1Sp3/p3AHuxwN3PHxaBFglVv+Ve OKfAv1DnEEjqfKJYAnPgRLpEIi50KSGSFACDfAGCpAxU2zyRVAOYupnRBQBNN5FSY3Bg37+Pt+wngEQB 6sQewGBPaoXtiVSHXwsIA/AguOFwSnCn7TycbXuOZdruI1m2E/vBpUuX7catO3brzl27c+OuffDBh/b+ zz+2Dz/4uX3w8c/to49+bu99HP390S/s/Q/5+6OP7b1fQPz97vtsP/yF77/Nse/wu3edPrZ3P/zY3vnw Iz7Tlr85Vt+99/7P7X1tda77iPNxrkC/TKBf+f57H/6K67CF3nf6lb3/caAPIvqQ7X30c/6+j4y//53p Y66XSP/e1/8/1wvvXO8gGgumn4n0d5hDxrwye+fjXzJfmcvvfWy33/m53XznY7v57od27d7Hdv3uR3ad RecKi87l2+/b5Zsf2uVbIhYq/r526wO7xuJ0jYXrGsfduPM+9AG/+8BuQrfe/tBucY6bLGLaim7f/bnd vvcLu3PvV3YXuid626CW7dv8/al0z1i07yXQXdtxuPg+etDo+Lk4vmBAFGew82DmfTaDK9dv2bvvvGvv v/uBvf/++/aLn//Cfok34le/wjfxKxwT0C/575e//IX94pe/9O9+6dtf4LTQMeHvX/wCTwZ//xLSNqZf woy/cNIxkPa1jUmfR/Rzth9DHz3AxB/wmRj+fV7WBx//ooUAoQ8Bhg8BBicAIxAvWn87OHwW8wMiXOeT lDBxnIkfBJQHAOcT33OPul+/5/vpQ/5+ELD0XLpHMNPpk4Cm+4/u4UFg+cxn+y0A7/8PwMqZW+OXwOzN oO9jpPH7dWMSHROPRwwgvtDo/CxEkOagAwjz6z2RL1LaarHkO1+4IvLFi89ZKJsXOsDmXRbEd977OaAT 0Tu//HSGBxQ+EwwAidt8nwgIZ5BOf2NA6BcBwvZD6bYvNc8OpORCBXbNAeE9e/+9D5AKPnRGha3tV9FW jC8yACEAACRAEAhoGzHzR87IgaF/zgsQczczf3TsLzjHz0W/iAjw0XH+Owb6I2dwGJ7B/RD6gLcoklTy Pm8lpvfYf0+SyX0UJI9ASCwMvOh9bSXBfCYlShySOvQCfz19wEtuPk6TQdeK7zVhe//kCBKRJsin0XvR OTWJEinxfj7wewsS0gfNxKTVviYvkzNQ4veMpcY1Gl+N8YcAawCoT4KUQClIXBGwOuBG4BaD3X1gGpgx 0GcB7QOfNwNgLD09AN6fkKii+3HGDvfti0S8EGhhELP69bkP/zsRvFuA9QMtGno+AUUEws3PGgOAj5/m oJhc7/bjaD7G2zA3fYHSNf13XDN+fl1b1/F3Eea0z0WXnpFAmKdvv/MLe+fdX9k778D470RSAKt+Igjc /VRJgeM5TlKEAOFcLCUACDt/vYRA0M2k1cQKELhDEM7Wg+l2NLPIUrNKoTK7de22fYBk8HPUgo9QBQKT fwzT/tzpF3z2848+4rMPYN6PwQX+Zvsxx+vzjz/4CDBBzfhQEgbbDz5A7YjpI/Y/so9iQn34iOX7Q+gD 6H3oPUDoXRGAJHqHc73zPluR/w0hsr2DBKPt26J33rd70F2n9xiYmPgcsczpnUDvQG9HpP1m8nMmfM/5 33biHImka8V/cy/3dAzbt997349tJqSse6J337O7n0L6/H7iXH6eiHQurhWTnu8+0j3omiLG5m3GKdwv W+3/GmoeS40r7+ddpzD2egeBPooIsI3VPql+AuBmCse8+5kUjo+pBbyjczMH3nMC4F1djMFaq2oEhL4Q oDJ+EMDar8fx2n9Xc+Z9/a174P61zxjqmLfZ131LRfXFQt9LVUX11bneju7rfZ1XK7UYVGou81h/v+Pn Cu/01vUbdrG63E7mpFljxjFrTDloVXs2W8mqeVa0bLoVLplqBYunWHXyVjtbUmS3rl5D5b5t7/o8fR+e gC9YmN5/D0B5n+vFxN/vAgJvv4tqgmRwT+RqAlupCuw7s9/9ZVAhYPo7d9i/+4vos1/anfg7vj+HDess dM7tX7cJHUBlOBIR4PAJlcFDjglDVgRiZyIPM3NrrII4gSriCirw+d+6fc+Z29UABIGfM2gff/A+0gL0 3rv20fvQB+/Zh2xFH/t+oHfFiDzFXehOtL0LvN19G8aA3rn3Hg/9LpP8PQaA/XfFMKJ3II4TvfOOH38X iGyme+x/Ct3hszt3I7rDFrrN37eg277PfTRT+M4/f4D8d/77t9mK7kF33Y7yb6bb/PbXUeL5deyt6De/ 4XVvclxMn3Wft+/eYwygezwTW9Fv8kzxsb/Nb36T8953TDQ+N+Nx+g2f+9deR+fTuRLH/8GxfvBaOtbH 525497du29ULF+x0ab7VHjtgxZtWWurEwXZ4WFc7OKSTHRjYwfb1F7WD2tvefu1sb1+IbXK/9nZgcGc7 NravZcwcY8UbV1pt2jE7W1dv167e4r7e5RrYEbAz3LyBXQGj9o3r79qNa+/adbbXMKiLrl67w/F37OrV u3YFY/Tla3ftEoZo34+J75v3r92zK9gxrmDHEF3CcJ5WetpSIzpeeuoTkZOfi/MR4m1mdo1VEyxRS9BP be15DBrvIh2ABK4KmH0s0QjGd4JZmwlG/+Cdt+09mPh9tu8CAAKDewDKbSb27eiliMkEDmLcwNQwe+JW zB8BiE/WiMLEjYhzCqgCRYwj5rnF39DNmxEl7vtnMAzHOfG7T6X4+8845l9lajGkzpvAmNq/bzL6fUbE /Wi/+b7ie0o45l+91896hvj6Cffi96AJLmAGXO8JYNn3cf01QCWGECj6exPoPvi7BGb6TUDp1zLw/w4g eOCZHGT8vMyDRHDQO4i+u+9zP+YOc+W2Xb961U6XFVr+yrl2fHxfOzSks+0f1MmSB3Rwht/Vp43t6t3a dveBAIM9Q7vZrkFdbAcAsaN3G9vRqzXHtLU9Agn9Bto3sJMdmzzECjaussaSYrt44RqMfRdmh4nFyGwv i8ToYnIoZnxtY9L3ly63gMAl/e10l98AFhgyHRBk4ARoHAzKAiikFP8GgJCWUWGV1eeslkipuroLTNh3 UBVkEwhGxI8Rr2RPeI9VXRLAe0wQMf/b0HusOm/DpG+zCt/TSiwwiCb9LRjytojPBQCSEJyQCN7WFmDQ ViSQEGDo2FsAyE3O44wmBk9k2E/bF9NDN0R4RW7c4DcJdOP6Pf/Mv/8Mug84YmCIrhUzc7ifBGoGmxiQ ou+i+2m+pweuef3mHRPdgG466f41EROA4oHnvMHfTgnnCr+Lfuu/TziH3gF0m/G7y3jG43xPzC1QTbjH AKb3A6eAV5JVrHrp/d0ROMfvNhHkBMoxWDtARwwXb+8D83DsfRKBg1z8efTeH5QYIqBrBpb7gDE6X3RP GseW52uZP+45uwHxvL6QRM98i7G7pbG7ecuunD9vJ4sLrHznRkudjDQwvLsdGv6WHRjW3Q6wPTZrrKWv WWaZO7dYevIuyzh0wNKhlANQ8m47smmdHUpaYoeWzLX9M8fbweljbP+EobZ3aHfbM7CL7R3U2ZIHd7FD Y/pZyf49drrplF3EdX/58m2AQARTJ67+fObMDgBc0v7lW3YZN/Nl3M6XceFfYuuk7/nuIm7uKzcEBB/Y BQDhPNJHRqKEUPIbAMKxtDIrJaSyHAmhHEC4AvN8iE71EYDg1n3pde985JPjbRj3XTHvLZgc0uDe1eRh gG9f58WCdM0MyHl84PleDN+iD3OeCAje1jkjuoc6cefOuxz/DpMbUIgmaswEMYNdh+k/STDZ9QRC1Lr+ IH3a94mfMVluOAVg0TWat81gE4MOW573uggx7gakbaBPufav+4z7aD5fdN5wH5xL96Tvo3397dfVPbLV 75x0H74fxsF/I1C4LcntXXv66aftqaeesqlTZ7jYqvu8Gd97fM3oXALU27yHe8R6jB07zsaMGWebNm9H jNX9CJgCyCYCr+8DviIH4ETS8Z9BnzhHDFARAGs1F4AIEDWfbmiRiN7NTb9fPuM59Jnfmz9/+NzHSO8k Gl9/T/pe78O3qAWXr9l5RPnGnCwr2bLG0qcOt2Pj+tvR8f3tyPiBljJrnOXt3GQFeflWWFgMlVgR26Ki EisuLrXSkrAtLi7huyLLyy+wvOwcy01Lt+xjxyzr6BHL3LfPUhfPtP2j+1rysB62d0h3gKGrZS6bY9Wc 9+zJ80gMNyKGh9kFEDD8ZZj8EjE8YvYLbAPdsAvnr9v581ehG9B1O3f+pp29wPbCbTtPHM0FVIXz19+3 s5fftdSKs5ZWdsZSAIPjxafJo0jMvlxln1AZdqWUWh45CIV156Dzdp5Bu4fPVVZWAYIMIPfu4R/Fhyrd 587Nt3nZEAN+K5oEgRF4ASLEnuuILhp0HXMTieMuEytMyDApf/bkU/ak6GfsQ2PGjLUVK5LcBnArAgNn xpjpIsa7xnWusS+6yveB0LEw3ly9ccuu4iEJxN962dfYx7By1fUwkfZjCvqZUwJD39B9RxSYOzzLNZ7J SfegvyHpeFck2jndDgSSX7nCahMTzHf/d9H3fH6N40XXfatzhnuNz63z3088L9ePP4vv47O2Gj+Np0Dh a1/7mv3FX/yFDR06jMl3xS4TPKbr+vPF46D3Bt3gPd4mGOwuAB1+9zUbNmwkk/O6T1LptGEc7jWTAxLn iSnMgfi4RMAMn2mutIy7mPqT1Dyn4nkVzzHf6hy6/8DgYczCe9c4alwv+3hyv/4330v0jt/VxSt2rqbO ao8ftbzlcyx9+ihLmTTEUqeNsFT0/uwVC6woeYeVwegV5ZXY2GpQqRusob7JTrCynzp5xs6cPmtnz5yz s2fP2ZkzZ/nstDWdOGn1HFdTXWfVFdVWzm9LS8oCWKSmWurKhQBDf0se3tP2Du6G5NHDcress4ayajt1 +qKdO3vZzp6/BpMDVOdEV+0sEb/nIG3Pki5wxrdX7YzvQ0QLnyF6+BSBXg1nCFojEreebTkBWIfzz9jB PNEpS84+QWr/Wus1aY31xLHQk+0nAGHbsWKSik6RAHLO8qAzlxD9AQRZXuXCeRff6G2MH1oxbt2SwePt 8DIjpr/uepCYTUDAi5HogwgjZryilyXEB+HjCfnnf/7n9tWvtpD+DvQX9o//+E+2cePWMOH14sRw2ncQ 4NwAQDMgiOn57Aov+zLHXIYBLzndRJcSgbBs/W8nIS5bJ01qMe1NJkk0gaKJ5JOHc/v1HFAiihjcf5cA MM7sugddj/PpeqKLl0FyojsvQZd9e53PAmlf93qZbfybq7pn3U90Pbl/dR+KC7nCfYTz61zhWcKz6rrR M3LMJYGhgBGAvML2GltXNdhqfL/61a9av34DrLHxlE+8y0SdNgMk5/J9jQdbrbgS/wUGX+X9DBgwyE6e PIeIe83vUStsIjDG78yZ0Rk0BuX47wC88Xf6PpZkfL+ZuQNIBVAO4HEjBmPfCpyje22+BmOj57+msWDL mFz096Dx0ljzN5G156Pt6YZGqzx8wDLnTwYEhloqUkEaIJA+d4JlL55hlenHrKqiympqaq2BY0+dOm1n z11APL/CuwdIr99E4rmFFMs4YXPQ/o0bN7nXG8ypa37c+fMXAYoL/PasnTxxGiBp5Jw1Vgww5Bzcb0dn TbDkkb1t98DOtrtvezs6c4KVHDlijVX1AMsFGP2SM/ppGP40AOCMr31yhkSnAIPTMSDw+SnoJKkAdUSV 1ikd4DTh+URQHis+Y4cAAwHCvtwm6zNVQECKvwPC6hgQQnET0Y7jJWQinrJcDIt5SAinYeY7qAjvAAiK BrzH/p3b77med50Vvxl9GXQx/xXpNI68N53BxGx6GRdhPL2Ia1rBGThNyK8wIX/y0MP2Vo/e1qNnoJde ftX+5m/+1r7yla/4hNXkW7NmvV3gBWriC1iuaZKj612TwQd97zrba5zzCgzjk0AT4KoYEIbjhV3ixVz2 z3EVwYAXLl+FrnHOq86MzkRM6ovOhBLVRGJWMa7AREzOJOPFX+ZcOk/MjGJ+MZye65ruScwHI+rYixx7 gQlxnuud51oXLzE5/JzRfejedC7dn48V38GUYrJLPK/u4QrfX+HeAygFksRzhfv15+FcepbznPscdF7P p+fWZBQgcE8a7/gepTtf4TuB7pe//BXGvpeVMTFPnDxrF5AUAkjp/iDdC3/rWa9L6uKZ9Du9m169+1h1 XSOr12WXwiSOCzQ1HgLFSxovXwTCO9P+RZ7jAmMs0lj7vNBz+NgGaU7vUL/RM+s3Ar6r7Asgr3K8wDcY 2SJQdLDXeTSWPDt0XqRxZxw0Huf1rv29axvexznexzmYur6g0PLWLLZjEwe5kS915mhLXzjV8jausPLj h6yqsspqpUI0nbDTrPoXLvK8167D9LfdICvDbLOR1j1hwSMm+5cMsQLR6wDEdZ5B4HCF619EGjl/DgY/ dc4aG5ocbAoysyxt1WLbheqwvVcb29r9dduNxJC+NsmqisqQQs7B8BcdEBwISCAUnTxxyU4ACCe1H/9N smAD4FCP1FBDbk4tVHPilpU23LQjJWftYMEZ25930vZlN1nvKWsSJAQBwiDAQOQVj+bYNvyU6aUnLYdU zNya8+QeoFsSVim1QeGadwi7vI7YqRUrrFRhgvskZxJfIM9Bkz4wHjoNQKCJelaTlQFxpuKFidG//OUv W+eu3Sw1I8vSs3MtKzfXcnILLDe30Lr36Glf4vsvM/n+9jvfsZMg63kmrIDGgUB6JFZg3zLJtfKJIcUE AgOfCFzzohhezHEjMN5F7kGT4axERDEpL+gSPuUrILoYRcfrPs+JiX01gSm5Z2dyTepokonpNJGvCAj4 znV6GQi1QjhA6XgmP5PnPAx+DtKk1OTVZHdyMNB+YAAB1wUx9gVNWI73a4upAUEmYDP5ih/ASfeqZzl7 4TK/4Zm4b70L/c4nYmS0DPfGODFeupbA9ktf+rJ17dbd8ovLrbaBCX+OVYwxPqfzaXx8jK5wH6gUXE8M p/em9/JWz55WXl1jZ1j5rvJdeBcBFB0MBVZ6Ps0TAPwydIH7PYs//uwVxl8MCYk5JTnpnlya4Z4v8XsH NZ7tIsde9GO4F/4WmF+8qnvSZxqj8K5i0nnPcs8+Juyf8WdhbEQ82xm2GquTDSet/CC6PABwdNwAO45U kDp7rOWuW2pleTm43CutWhJBYxNz7wxAcIl7BAh4t2J0eWmaDeOKL3HDeOQ5EyAAFLKXyVh8XYDMM11l nl1lTESXNO90r4x5ExJDJSpIXn6hHd2927ZhU1jf6SXb0PEF29KjtR1dNNdKswsBj9N24gRSBtnFJ09A 5GWcbAAQyMto0pYsycZGMo/5vI7MyVryJarIHak8ddMqyNnIr7tGOvZZO5DTZPtzTlpyeoP1nbY+Uhdi CWHQIgBBtNC32whWSCs5QT2Csw4KTSTJXL9FMA3BPHff/bndwiCll67VScyiVdbpIi9FyCfxiK1PbJjg jL+U8GL08sMqfc0n5Be/9CXr1LmLpaRlWlZOvuUXYIgBDfMLS60AXe2FF19k0n7JJ+7CxYvt1JnzDiY+ sSUZcB+Hj6Xaxk1bbePmrX5fWhHFqJpQ5y+z4rkEAENF4r7uS6uaSACjZxDz+kuD0bTS6D59EvEs+lsT 1Vf+BEDQebWa6XMxqn4rI9PGjZu5ny1W33jCJ4EA01ckmFyAEFZTqT1Bx3UJQyurpBuBGMfpvlwi0n1H EoHOn4cBa0N0fjGwwESSl090AYKv8IjwfK4VXc+kMTl85Di/2+JbjZnGUNKZxrYTgJzDeaulC7Ninua5 RWdggDMXAp1jHAVWF3G/OZAACN179LAymObU+QtWwyqn8d+4Zas1oDMLrASyF2EgAUmw6fB8gKFAWsyq +SByUNYYC/Rgtis3JVlhEHPQ1n0EOktOzdnL7EPO8ADEGe7rrCgCMB3v79bHA2JfJADw787x99mL1giQ FWxdb4fH9rMj4wba0akjLH3xLCvNybGyskq8bDVWh0h/4uSpoBrw/q7xLuW5cferx7qEmJbgCZMrM7jE g/dJBlypQFIvYykuUg9j6U/SIvsX4Y2zSAuNTcT9lNdYZma+7d+52zb2bm9JrZ+21W2esY1dX7cDc2ZY cU4RdgupG5Iszll9w3mrJ3OzgWStOqT5OlT8Wqiav6vrLloVoFDuCVqq83HN6yvsyGqwjSm1tv5ota06 WGH9ZlBRLFIbgsrQDAgBGLYcKrZUij5kY43MqeRipAlfw0p5h8zB229/7G5I6WUCgfMXLtoFDbImDXT2 IroOL8BXmOilnOZlnNaLiSasSw+80GZA6NTVMrLzrLi0wqqq662GiVmDKFpT12ATJ032SfvFL37ReiAx NMBkF7luPcwwfOQo+9a3v+2qR2xz0H6btu0sJ68w3B+TSAAgqeKll1+xJ5540oYMHeHGGulkARAQh2GS kaPGuFFz2PARPIcYQeCGRMMLFXONHDnaf//8iy8x6VgxkYSCfnzbJk+eZv/wD/+UcC/BBvI4x+87cJjx iAABi7DEfTegQpOnTHPVICcHieitnvb4409Y165v+RgKHILd5ZZNmjKV8/+jP6dW6Ph5H3/iCUved4gJ hW5JXQqBjsbXQYfrDB8xyr797b+6776+xd+DhwxzsV+A3LkLgJBXZFU1DdaEdfsU43IKpnFiop5iBdO7 E9BcZDxjQOjWvYftSd5nr7/RKrqf8MzxO6jEiKax1/i2a9fBnnjyZ9amTbuIKZkPmjeaK7pnjhGwCkh1 nJ4rCTXx5Fneg0RrAdN57QewckBxhmee8ZmDgB8bnTdxi21EY3MGOoVoXV/VABhssMOj+uDuw3swdaTl bF5jJYBiebnsBPXWhJHw7Fks/by3K5ofjGVwN0eeMmf44PEJgJ1gwHZVJ7JVSCqUJKT5r/uM6Bxbfabt BbwDZ7nHk6dh6vpTVlpWY2kZebZv2y5b37O1LX/jSUtq9TNb3+U1O5y03EqLquGTU1ZDqUMBQF0dMUP1 ZwGAcwAZW4oXVfFdFQBRCTCUITmUquCPCq3UXLK92ads63EBQq2tPlBOQuMGVIa11nPyJySEAAjbD5cQ sEA1IwAhu0qAoJVGLkAysKCreBLkKz3LynDmHBOIgRP5Pmh6Bt/tacTIU7zAU9rqJeqlnkEcZeJexDJ9 gRcaRFYmZOeulpPPhKxu4IXxW17sOX57mnMtWbrCpYMvfOGL1q3bWwRM1fPSqu0HP/hRpMt+1Se2dGFR bHf41re+ZXt272OQo2tioX3xxZf9N3/3d38PoJxl8mMw5X7EQGLqH/5I5/wL+9a3vo0Idw7GOM8LE+PD YDDlD38Yrvnss8+jq8ktFCZL27bt7c+/ij3kK1+1v/3bv7OHHnrE/umf/sX//ir0Te5lN/dyWgDEy5c+ LsOcrjV48FA8KuPtW9/8lhtW9ZtHHnkMcfAcxwIKSCECOIFAOP937KGHH+b8/+zPqs++yW937Up2/fKC 7kkqVcL96pgHxyj8/WWAFgmhUxcHpKpKGKERgxcGLBmxJJae4pwaw9O8Q4Gj9OdY1fgB4/G1v/zL5nGX aieK38H3vvd9nvmCP4c8EjFwpxzP5Drn0YmRRtBzz2E1D+/gZhhLnlXPlJdbjAGP90RBnlNnmA8iGMdB QZZ35pQYyT8TGESkcRYASNf23+kZIqqvabSiPbvsIMa7gyP72tHJwyx/6zoMe4ABHoBaFiIZ/XTPlwFk jWOIDYncvGL+yPjsth4ZJjWfpSrD/OcBEJfwACpneIBU93X2jIyJENvTjKfG1reMj7YyCp7k+/oTYuST VlhSZSmUHdi9Zbut6fSyLXvtcVsJMGzq3c5S9xElWVJLqcNTpgrpVUgMlXVQzSkrrzltZXxeVgWpDCJV mEoJHyiqu2QFSAfp5ZcsOavJth6rtU1ICGv3l9uAmeuwI6hu6GcAwo4jZUgIpy2L0mXZSAgnzrNK4V68 QQrnrTvUHMBgpBX0lCymGFlOinC3nMDVcgKXy8nTbGHmkyJWmZMAgVbkUwIEXt55IrI04GIWAULXLuiw qAh1dScYPK1E6JMyFPFCxo6bgHj6FQeEfn0HWDno+RwM+dWvBINYq1ZtbeOGbZaWSsr23kOsrt3tL//y 6/7dN77xTSsoKHPm1ao3aNBQZyB9l0b1J6GxXoRerGwWsdVdk3rKlOncz0l/YQIErdZ/Lob98letV89+ VlvdBMBdsu7de/rnuta8uYstL6/EcrKLLBfasW23e0l0PTFyff1pJupFB4XYMPd17lWA96UvfcWP/dGP fmJtWrcH+BodQHV+gYHOP2fuIuwrJZaFLpmdXWBbt+667/wN9WfcU3AFyeUtpA0BjK79+ONP2lKANSUV O016js2YMdteeOElBwONa8eOXSwrsxBxtR7Rk3cJo55ET3UCGE74RJYEKCnnsqsakiz0W41ZV4B6C/eS mVlgmzdttxeel5qH7Ydr9+WdNTZQKox0egcmPmvfviOr8AkXeWUUO3cWkETtqalpah6XF198Bb8+rr3K Rj9O+rJWd1nS9S5Piul9q9Vfi03EWM5kHOffBSA4AfOJGgG7stR0O0xg0L4hPezg2EGWs30zMQRyI1Yz H7ChsAhIKtAC4DEoUcCYbETu/WEuXHD3H6u6XHsORmJu7sGBKMxzBy/diwNqGMcmEUAvsD9BkaEmjIQn m9D9o/2GRlQA7rGuDkZHiskrrLSjx7Ntx7qNtqrDi7b01Z/aylZP2tbhfSw9NdMKS/FQVDVZGUBQShnD smqIEoZFbIsqT1hJRZMVsy2qPWMFAEcB6n828UV7M+ps0+EKW3eo3FYdKKWu6SZ3N7Z4GRJUhq5Dltju 4+UYFU+gMgAISAhNAMJV4gxu4WpUkNAljDha8U/D/CdOn7EmDC5NAIK2jViqGwCEJn3HwDRpMLCkauV3 xmSAzoGe55EAYgmhG0atouIya0CHErq6NVkGNoDh0cceb5YQNuF+nDdvUVjtYCCJ1seo8Xj0KMlYbI8f ywEYcm3atFk+2TUpezvznsTgcs52bN/jE1IgNHbMBKusqOPemAC8ZKkRYiD9RpNdDFNRzvdNZ5EEruPl 2OgTWt+vWL7GgSmVlxIY+6vc10LAoJiVFt8y2/x8bCAFpTZr9rxmG8hQVsnGxgAK8bXEVI888lNbv26L paRkc84sy2a1Lq+ss1TsKonnlxqUnYPB1c9f4teZPWuufSl61mHDRjHZzsPceRF4fcWee+5FO3osw45o jI6lWyrXyOT7HADli1z7C1/4AgzayTIziMYrq7P6Ot4lE7WJyemkySpggBnPAWRa9fS8Gl+B3ObNO+0Y zJ4KwOrc6ak5lpmehzT1Y7+vv/za162C81ZXNdrDSE4av7/6q7+xkuJq/PKnXEo4D4NdwRM1aeKU5jFe vDiJ+yy20lKBlJgosqDHq70zebCua0756utbgYDuNwIz5lzMiDW8z6xVy2xPf6ID8fkfmz/dChjP8rIq JJETLFYX3dAn5peKKECQ5ChPmdS6CyxkZ88Gd98pt+hH14LRNY+auOYJtgJQXV+SjcZO20btIxU1AgaN jKvmgQCggflVz3jXNZ5BVRadRv/HllBLnVLGLIMF7cDRDNualGQrWj8DKCApoD7smTEBI3yBFfJMxYBH EQtUIYtIEb8pBEQLyxssv7zR8ipOeExRHkAgr2EmUYr702tsY3KhrdqVb8u359hAFU5GOvBYBLYtNoTB lEwfuoTqKpUe3igJIRdAOEHVo6sKKCIw5QaAIC+CBr4J5hcA1BOQ0QjVnzhjDWxFjXKn8DIaEctPiISK AgUGSnqTSwiRlVuqQHFJOQOHJRd9S4Yy2RDebN02TBAm1tPPPGcZGbku9mtS/cVf/KVt35ZsRw4zyQGB rGwxSDmMUg7DlPqE1KT9q7/6a9e5BAr1rPhf//rX/XNJEmWl1X5fErOfe/4FB5r+/Qf6yvdtbBNFhRW+ qmtFH4LOrRVPon56ei4TtdJVHTH2ww8/EoFAiX9ehd9YomcNwSjSSXUPumarN9tYBS9Pz+n6O5/97GdP W/L+Ixj70pyx0tEd8/PLWC0brQvGPp3/oej8eYBAMeevQLTX99WoWGVM5vj8rRmv2tomf7YYvLbvSPZz H0/Jcskiv6DcSjhHaWlVs4TQvkNny8CQJUCoYzVpxFClVdknLpNVdIJJH3T1S82A0JaV/sDBY3YcFUDS QV5uqRVy/gLewcCBQ/z8X/zClywpaS2BONWM4YjIHiRAnmiVlQ0A7nlnNNljvv/9H/gYS6U7eiSd913A fQJSvIMmJAQxVyNMqK0s7Sf4TPcVVJwwt5wZ2T+RQGJGnaP4+HHbP7yX7erXEX9/X8s9dBhgKkd9bGJO XkQCiMEgDghTKHAEBKiOMdjEjN7oK3tg9oaI6TXnG7ifBu7PP9P3Ebj6mEJSgxrwFoh0X3UNp6wWgKhh W410IJWhovYElc+xdSC5ZAD8+w6n2CaMistaPWVLUR9WtWHeLF1o6ahVeUh2BYxlIWBQABjks59XUW95 ZQ2WW8o+RV1zKeqaTXHjtDKCkdKrbeO+IkvalWvLtmZQ/XwLQBAHJj0ACN0BhOQUbqKEiskCBMSMMyCk 4g0UPqxIw3OsmBJ7BAD1TQAALpN6VvewPWN1+pzvGyQtsPUVR8jooBAAQZMrtnJLN3+rZy/rBzMOHjLU nn/hRde740n9nb/7B9u+Pdkys/JcRNYK//3v/9AOHkq146gK+aBoWVktE6wJJjnh4lbPnn2iCf8lO3zw ONJAgzPLUzCgJqquWcxkaOK+y/HB61pSNeJVWaCgiVyHGCsdsNUbrR2IHn30pw4I5ViDv/e97zljv/DC yzZj+mybM2eBLV68nAjL1bZy5Rrf6m/ds86ney4urkQ0Pem/+wLM0rZtB9u/X0yVjRpQhKRUBaA0MNnP 2/dgED8/RszpiPmz54bzL/+M8+uZBBCPPPKoM9b3v/8jB4MUxigPkCllNalCVK9n8skoq2N0Xx06drZ0 AKGUMZS42oDY6quXr2QCBNRB3psDAqtoLCFI9D/C+bMBGq34FYxxTdUJxuyEHdh/yN+Tzt+3zwCkpXKY u9rHWOP/PJKL3plWTYXdZmXlN59X705Sn6QtgV89jCOmc+ZyxuPeIiaUEVTMr22jVmWt1Nr3Y8MKrOep 5n2lr1xq23u2se192tshgoCyuWZVVZ2rG1JP3Ssjz08U8CWgkn1DqoCrHtE9NACYYWzYch0fL+cH3Zeu GT7XPWj1bxCo6ngHBIEBhDRQj95f64SBUIQKK0CoZM5VsuKXMw+KmZu5LJapSAN7kg/auvGjbAm2hKVv PGGr2j5v+zass3Sk0XwkSlEBi1E+Y5aDhJBdVm9ZSFiZxY1Qg2WWnbC04iZLzqy0zQeLbDUSwrItGTZ0 xjb6mBCteJ8NAemgM9QNQDiQWWsZxDpn43Z0QCBe+orH7isI6Y4Pkh6wHt2wXg8GU/kkgwQGEn98kAAH R8doldFKo5cVrMstE0uT5gt4ETzmQMbByEgo0V2SwZYtu30Vkn4eG8I6sKpJBNakKQcNNaj+klxMO+eM E0/IKVNmIoFUsmITlcXkDF6LL2G3KOOeT9nsOXOd8Z4DiOT+fIZr6p4koVQhhmnCffe733dA6CSPCKt4 BepGsEdg8Ix0cdebI0NfMOTxvVvyZRT9AgDyA2wVuPdY3QMzfsnF9SOshjlIOFoNa9AHJbXIYh5sAPpt YKxYL4/PHdtDvvjFYHQV4EiV0Lndnci9irGys4vDGLEaaXxktJXaEkspsiHEgFBLaf2wgt1PWhWDvtwi IejeU1ARCqmzWQUQ1zEXdJxWbK1+sTFY95HLSlaCoUwSnsZekpaMi43MFamQsddDn2/F9nIMdaygqJyx avJ5pbnUTBjeGiBJp5JAXU1lK2rUdxwbFiqIOSqQKzqWYvvGDLTN3V63rb3aWsquXcynIubMSbcZyIug wCpFV8qeITvBGdQD2S2k1kh9Cqt7JD0xPrJJBPBESuZvZ34BQ6QG6G+BhG91nMaUrWwqui+XDjAI1jDm 1RFVsRUgVDDvymDwIiSEguIKy0ZKOMbc3Ik7cs3IQUgJTzgorAfgDuzZY9mo3PnltUgIAIKkA6SG7BJU pOI6y6AEfFoRVFBvKbkNlowGsGl/gUsIS7dl0K9iC25HvAxRtGJQGQQIbLsPX+b15DMdEM6jezARKI6q 4BsPJSUS8RyIqYcTGNTxUPW8VKF4XUTa13cNAgYhtA8MaOkMi/HHfcEtE+sbWJTFcFrRfoCo/+hPn7CO nbtZ0uqNdvBgGqtcOtJBIStKtU92TSgBgnRurTxVrEr1elkgtpBcBp7lK1Y1T8iJk6axQjK5GOTNW3YE OwHnSFq9lpfRiNvsDT/viFFjLTU9292P+l5uvvIKAlN4xnhVXLBgGYCAjs+gi6HEePJKfBeLujwfP8Qo KMNgTFJd9Fx6vpdees2lgAp+e/9z5GJACzq1Jp1CTuPxaT5/ND4//OFnn/+VV1731Tp+PnkPUsWwGKf8 3LLsKwRWejBW+PiZHBDSkRBKa5GiAAQMi83kTCAJT7+7/73pHeh3JfodK53AX3q1zi2xPZZAOnYkaSer AEDAqr12czMgy8hbjyHvLIuD1ATdtxaAQ0dSXYWR+60G8VnME+ZStHVAiBg+UlEFEA4CmotiSG21aGF/ qEViydqx3Xb07WAbO71iW/p0tKMHjzIuMjifDW5FRVk6GOBOJ0FIIcKyWzQBBjqHVnZt6xkbp2hcmj/T 9yKBgwNAAIH47zp95iDLFjehxleAICmhjjHXQlANVUEVgGsZ0lYRElQhhtXcwnLLBujT4YHD2IN2bN1u q/t2tqWvP2EroM1De6FipVg2Km4OY5bLYpXD4pINGGQVsLjn11oqvSJScmvtSHa17aXY6vrkAluxM4+G Rpk2kKJI3UbTWS1qsxgAYQg0dJH1GL6USCbEC8IbFZiUj4RwFglByOnx48QfnAE1GxsYKB4sAMEDgCAw 8M80IBqYAAYaxMbGAAiywmpCanWVq2n3nsN24ECKP/AR6DAr26EjMoahV6czmYprmdRNzatap06EdDIZ i4uUYIJ9gAH21U++eHT+FYjssXdiwoQpvjJXoWPV4slwOwKMLAt+eWUtf38D99nX8f3m+kTMQwSTaKsJ mpx8wKWN2H5wjB4VWs2lgsSAoJVSYv8h7BlHj2XZMQxsxwCr49g2pNLoeQ4eSvPvZB/QfcSA0LFDYMYS SQfo7w2M60lZ0gG2oDIFKULnP8z5j3EOqReiFK4jkkFV3wkgtRK3AAKMmMG5iwmyYSWSeK7QVrl+JYG0 AELXBECQbhsmrqsN0fbTAEGM7kDCSlSLu0vnl7FNRkKBcgwI7dvrGQtQl2pQtepdhRLg/vjHP3GQXrFi TfO9zJu3xJ8nhyrflRWNzjQOCA4KkSrji0zQ28OCwzwTIEQrsFvrxbweuHPW5036xvW2hdV0bbvnbSOR f4ex25SgnsmLpKQzgYGS0NydjtdDYKC5Wo8fvx5/fr38/cyxuubzRteIQcIBIVzPt35cAJG66HNt6/is DsOtqJb3rSCjmlhKAAwqcRdK9dU4FZXUIMVWuE0sm/eaiScsjfl58GiqbV+FStruBVsiUCB4aeeC2ZaC BykX1S2X3+XALzmMd1ZBDYBQbWm51XY8s8aOZFTTVqHU1u8rsOUChE3ZNnDKButGj1NvwQgofK4LYNAF MOgybBH9DZfTYUb6RgAEuSrOU9pbmWrXlJ+AOKWMqkatIjyUo5zUBolm2hdAuOQQBsMRUYNKNJUGVmGV ysJqBgTXoyk0kXwcA2EmkzoPPT7f0qCMDJI+csphepiF9nKygMvPLyZ57NHHnTHL0ZMUnNEoVxmr0zmy weQPHsjqE4usq5I24q4rxoXVxLGn7WdPPePneAEVYc3aDX7cT3/6JNfF+g5waCV78smn/XPps7169Y3s B4/DkGK6cl5ao/3zP3/XJ7biBqRLy2+cDgNm4MITZWYVRVTgBrKcnBKkHJiHVa9FXA9MFQOCJmGTYtNZ kf/lX76XcP5gPM3g/Jk6N0a8LM4fSH8Tj59X5q662HD67DMvcM1il0j0HgQGWvkUB3JeNpzIWxAYGwNe CWpFjVYvGE16cgI14R7zDLoEyUKgnClpiXegd91yfkp/7znQrBbJmOigDnBU4Sbr2bNv5AX6ku1DL371 VSQ0vEZ/h63oMMCZxnuQxFQtQ3C8IvuqLGIeiVxPD1JhENkVrad7f5BRidrjmhk7dtim7q1sTbvnbAPb o+vXYmRMcfXsIgZNlwxY+M7QYuDESfIAeN46LXqMhSIAaz0SMIBDAIVYYoilhnDd+68f3asfr33AICIF EmkBqCGIqAYPQA0Gv0pIlcrKcReWMqYC0LwC1AXmrgzCkpIzkLSkpu3bf9i2zptly958ypZgZFzd+TXb QwRrRhZGRlSzAmxVuYVVlpmPgyCn0tJyquxoVjV9VWps9+FyW4eEsHRnji3anEnZxLXWbeTSFglBQOAE KPShserxQlqxldJKDVDIJ6jhAr0UPK2VQo2XyNF2FwvM6agdgcL9YCAEZMBg1ICu6JQaTAa1kZjr00rT RCxuMU5hD6Dke1ZGCStoFdb9WiZEHV6ABqskyaqaAdPvNVFffeUNZ2ZF3+XDADIiink0WZUeqpcrN+Ib kRFQfnLp6LlacRhsieR9+w6M3F9/bW9i+RdT9+kzEIbLx0KOFZ/Vf/jw0RzzFV/FZDTUMR07dnPAKmCg q1h1JKLrXqT37ks+4hZ2MXwFK5tIkkA1x8mXXoELSJ9pZZBl+n5ACNZ0rRaaOBJTJX6/Ej2rn3/fEcal 3JlP5630c0Pom/4319BWpMAo3e/f//0/uPuzlmOk18v2c4H3pxVRnpVEQJAapElYK3EWUJKk0rz1e7of EEJAWXfAsZT3cyKAMZl1ctFe4h2MGz+pWUJLApDTdX4MXNWoLhkAYCzFyDMSGxo7dOjqkk5WloCTaFXA KYTjRszoC0siBYYTcDXPNS08WpU198TEPIfE8XxcoduH9rEkGEjGuI1vtfKU42oMy8ocPMtCIjA4efIK z33JAaBGQOCk81E9jHOLwpyOKAYgv150H34PD5COj8KM62olbZzj/IAC80ESQjXlClWysIo5WgkglOEh KCqq5f2hBij2BCDIwAgqCVb2nqN4jXYDuuuJSZDXYRn2hA2De9khgCKThSc7rxI1AzDIrcAgWYZ0UGWH M6pwOVbY9qMYFPEyLNmRZfO3ZmM/SLpfZegyPJIQEBd6T1hFn7oTlo4NQXaEgvqLrCgKz71H4Qh0LF64 oqyaXF2IVYMgGbikENsVHBAkRYCaGozoRTYSRilAkGgZT8gO7bsSKESxCfSdStwj1URY1YKcdVRtqqeE m8CgkfvQSx82bIy7ITXhBw0c6uqCBzMh6mkiqnCE/OzxuZ966jlE0CxWzwomhvTc8xgpdzVPSK1KMsjt 3HnIJZLi4jBps0BaAYIzVnTMvHnLLD0N0Rew0otbsGB5s2vtcSQMMaUCTs6iDikA6xy6ugKFZKXesWOf zZwxz4N9ZK1uBgSYID09MItESKliTUhRWmkWcv74WRVcJGBRnIGfG7E/Jq3au3btt5kz52HhPw249W/W 01evXs/YKww3jJEMZgKE5ORDCYDQzZ9dk1BALimlmbifRt7dCZjkTJRvH6sycm8WAlJ65x5tqPGniIcK dGhcxfTf++4P7dDBDCQJmByAF6PWEETz0kuvNt+jXJN6B1u3JhNLAuAi4laxWtbx7rWY3A8CWqXvJ8Xx P/hZ/LcYuYb5VFxQbcnz5tgqfPkr33zG1nZ82Q7MnISOrkxGRUNiLyARqJ6xFxh4LgDXVziwM7Dum8Wx hs9q9Tf7Pq8dsEIOQQsoRWpGBB76vgVAIvXDz8E5meMqV1iNqlAldYG4gQqoHC9BCXOisLAady42BEkI AIEkxFQRAHcQo/r29etRHZ6zxa8+Zit4rh084xHc11muYpTSYKnM0rJLAYRSO0Lho/3HymzroRJbvTcP CSHb5m9JpzHzJgSCpVE+k1QGAQJGxa7D6OKM6+EYgJCG21FqQyGxz5foFuRFOCjhfAmDi0JCtYLVuU6n SRwDQsLW3SqR2uBoGUkIDPgpUPgEk+7LRP3Jgt4RQMhIw2gIM9YSainmb4AkTWjbwDbockSaMWmVMxAs 1X9pUybP9NBUicGKItuXfNit+bEVP2nlRvTtXF48kWi8NFmM67E6a1Vy6/3nv4DB7wcEOOH2Y/DKyxqd GWtZVaQ2+GT9/Bfd4n9EUoxWLyZ2jQrQ8tIEBJrMup+f/OQRmwVTygOhlVJ2hvnzFhNN2Qbm+3NiHIa4 dCAd3W0IenZsCBkAQnlJA+CH8U4MGNlnwvl/9onzK6DqEswtgJg/fwlSTluP3Ozfb4iL2emI3F8jICg2 jB7C7XoW0FBlHYnsw4aOJFT6281jpJU5AILUrwAILh0kkCQEvXdJGjEgyIi6c9c+lxQVuadKPrqn5597 ySM6df1x46bascPYXVD9NNE1tnr+hQuXNXuBPs87ePKJZ+zggXTAsQjVQnEWmjuxDv/ZDC/Gb5YgIqDQ qt4s3gsQkDCLYYo9Y4fYKphmBb78zeNHENp+CLsRYIy+Xi2pgsWihmtWMU+qeBeVAHQIDRYpP0CgECjk EAACZANr0RL5NQEKlyYioGgBjPgY5pbO4QADGPCclYB4JSqxQpHLAYVyxknzXCqcbGT5BZVICaWuMqSj ekotTUdlPA4o7Nt3zDbPneUGRoHC6n5dbRdemuNSu/EupWeWACCldhQ6lEo8A/aDTQeKbeUeqQzZNndT pvUZk4R2sNi6RgGKn5O60HnwQlcZBlI95RiFF1WEMYPOtgV0VFZ9tquSEKhzIJFTq7t8rK67CRDczSir bovHIbhVgj6qFcbFOomhnqZJnjaDoRVYTCkJQatkGQNQzwDpeF+hxBwAiIAhlhBkcFm5cj0RfF9rdsXJ rvAYEY0CAjGegCbo/2Sy0XkqUwwHE0vHbOK8dTD7Sy++6r///J99wdphw5BtQOqCpANJEbJX6Pe6vz/j GDH7Uc6l4KcKt0XwIpESJOLKixCDQsinIIdBBV+4F91P7B7U+WTHkE7b/OwuIRAtx6R0QNDzQhI59ayH D6e5O/FTz++5Dy3nV1RmOauKjHzdu/fyexfo6Fqyc8juEvIl/hw7wzdd+hAgtm9HYJJsAQCQGPYEzP8J Uuiw3nsMZpGrNUQshvH/Kd6hOB9D4//qK62wCcj2IZuAjL9K3Q1RhfUE4fz1X/+NP9ef/dnnSRwb70bk HFZDAUesarq6qfkT6fCB+VvUiCDW85lW7mi/JgKJwJSyISDxbd1mmzu/aqtbP2vr+3ezjWs3Eep+xG09 AoQa6fTMUQGDQKACCTUmAUMVf1ezWImqtE0EB/6uAxh0D4FUnDiAgt9bdM/6W/crKcOBhTlUzbU8GYl7 rED1EpWL3I7Q6LalQsYuT6DAgpUJk2cQkyCvje79KPaEHTv22JoebWzxS4/YUj3frBmWTMDY0dQiO5aB uzK9GOmg2A4KEI5iUNyfh0ER+8H2LJuHDaHHuCTrjDDQeTAEKHxOQNBJqc9sh07eQHtrJATKMwsQiml9 fRFAuEb1I0kIMSBIb3dfsAdeAAoKTHJQCMDggReRtTowtkRh3F6QAKEWMS5mivaSEGAKoaJUDK2SIb9b cd6X2ddEFDBIrzvNClJry5attu9/T4yiCR8mvQxT2n7723+DajHabQfpablWjB5WS4y3pJJTWvW4t6GD RzQDgkKR05m0ZbhpZBORFCFbQ/Lew85QWsEUQCQrvgJwFPOgZxFoKJhHhr2evfrZd77z9+F+iAuI8xN0 Pz/CVdiv7yC8KMe59xpXD1oAAQmBF1uONCHd1w2KMJ4i8yTK6ths1Bcxu87vDH7f+b/sLk4/P56IIlyM ch8W8szS8QOQtMQwaIx+/OOHWI2PRcwoQCB0mXuQRBPnDXiuvSIBm6MCg9FWRtlw71/EVvGou1zj+IgQ //AVl046deru7uJjx5EOWN3KiJ6ToVk5CGeRJhTbIZDVeQROuxnrYxhNC9GbxXzS/esEAhFJjI9JDB+L 72IuF+0jBq3W6uzMGNkAtAIDkMnDetlG1ASpCluXr7Iduw64N6iY91HNM9XzrPUAoUChSmAPo1ZGoBAk hUCBgSPSCu8kNSJm8rAf/g6k72MQiI+vdGBB8nAJIVyrkhDjclQlSQilovImK8H2pESmAiTcXEAhG8DM yi1zaVa2gnTmxn4MsVtmTrHFLz9ii195zJb36mibcanvO5RhR5G8DwMI+wGE5JRi24n9YENyPvaDTFtE DMKcDSn21qjl1nHIYusIGHQSIGinowBhyEIbOpXqslIZotDlcpjxEpKBylZdpdCjijeeQdc6gZgeIsZE AobIL+y+4CApaHJ5lCLShFYcJXKcUmw3E16TowTky0C0URx8Pg+olfMkCHqqifh0FX6g6stpLL4+MaOt JI0qmLuQwdFvF8xf7gE4moBdSJKaMmUGemi2u65S6Vidh8tGcfSqNqMJrWQaBZlUshpmIXYdPZzh+RB5 Chji+u46kz7JVuK13JU6l0JphcpiXAWk6Pll/KvDhiH3lc51HJfgdmwFkyZOt0mTp9vkSdMJvoli/OmC lQ1wCBBktJQnQ/qgPBO5GEcV2CPJRDkDofIN48u4ye5RDAiJYcVc27dzfuIqJuv8kEBK11W8QTb3UIJO XAXzybMgr8P69Vs9GUtj1JnYjo2btiGR4MnhdwpaOqxoT3ROHSsDrcbGsxwVp++UUImHfUl9eoY0gPYQ 0osiISfxnBp7kQK/du7c77kTul/FXShOQcE3IbiJOg94gdIpiBO7JVvjdk4GoNI1PkRTikHlovNV2w1v EYkZm0X4WJSPmFerekTOzDGx8uYdOmJbCEhaR4LQ1lGDbPvWPa5nF/IcsvqfwGt2AsNiA3OsVu9dacQP SAlBWoiY18FCzCw1IqQaO1BoXxmIbgtoiD4LaoGkisD48TliCQRVQeduVhdOkZREYpKDAclJSAlFLAoF 2K3ysIPkysjoBkO8D3gg0pnfR5hDOzduw+PwtC148SFbiJSQNGWC7dh9EImAru2phTR6LaZfa4ltO1Jo a3fn2oKtKTZn4zGbsfKwdRyz0t4cusDeBANaDVpgn+sAIHTgj05ICMOnb3CVIa2UWggSjVihVQ5N9RKv ICmcQ2VQyqoyyRS37Ykb+IFD1FgIGHFw4DMlFGlSKxgmxJhHaZ9MLPmKNWj5iOB5eABKmfT1MJeMbopz ECljTdcSKJxyCoyiSSvm1WqoCafJeVyJQVAK/vk0JdigaxUSjCTmkJjr6aaeCBNcejXo2sW46OSWy4VK yRyTbSGk/HIcW0kLZUxmgYWO0fG1GMQEcCHzToErWg1wFeFdEFPpumlIG6kAgO5FW+n0WXTCKuQFygsg o1oF96W8AgFWCSG9gWEYoyiTz7eeoSdQIJsN0TGPlUHuS7mdHAhgOIFpOH9hOD/nleSigJcwvvwmAoAU LNNpgKRiEwRg2XJfsp+LGKpcAwUlSToKz//pJNuRzqtnFaApjFuRm3oHAiWFSSurMo3PBaYa1xri8jUf ThP2rDoZqqsg704MCJs27fRYjTzGo5z3KimwFimuOpF4JjGcxGtRvHonivb3ifnRMVpt09attU2kEK/r 8JLtWDCX/IsUH3stSqflXTjHnMbD0OSAQFGRzwSEwMR+be4l3vfVXcBNzEDGli22f2Q/24Ib8Mj0cS5R lrOAVchGkKCG3LfPd+XYpMqgUqSEYgzrxdx3UfkJKwQQCpCc83n/+UgKeSyi2RgaRVlQJnP8GHNrz76j tp4ApfkvPmzzXye0eWAfgsA22a79GcQd5Nue42TfHi2xLQeJUMR2MG9zqs3ecNSmJO23DmOTrM0QAcKC AAjt+a8dgNAew8Lw2ZstpQhAkMsRvagaA6DbEBwQsCDjrpJVX8yqTEbFjnsGl4eQhjBSJwFClMPggOCg EDGlJjurvkR3BY2IucVoyo+QgdCLRyYUiwxFJaNqslFRSVnbFeGlyVnMCq2kJjGXJqoi88oQE7XiCQwE AKEQpa6vVY/75v6UblvJSiom0rniwBqvVafYdUWXMTlVJ0DkYBCtoJ7DrjRbP07hrAqAQffjxRWzSheA 4LqnQiaJTwokEt2P7Bge9q3JLpekGCBaPRUMI+A76RRWZuncbtNQAQx+L3WgiPPr3GJ2uToloQiQdL5G hQ9HyTS6lp5N3xdwrIBNYyRg0/GSkirkxlSeB8+m5z3F9eJafdreDwzhWRV7ovMqF0H5CcrPkLchjL9c x4AcoeIaM0V5epqv3oFqUxA0VkH0p+odSNV46uln7eDhVI/FKGLCVwEeIb4/kAftwGzVUFVEboSLGFNb rdQPMlv4/izj3mR7xwy29agKG7q/abtJ01Y8h+wzmlPnWeB8kTtzNQBCgsrwmQxMSrHsSIlMXsZn2eRv 7BzU3aWRTZ1fsfVIJClr11gBc7FU8QUOChFF+w4EESAIDEoobixAKMKGUMS9CxAKMTiLCrCx5SEp5OKN U8BRZkGVpUOpqBGSBLYsWWgLX37U5qE2zHurvS1ftMLW7UyhNWOubT1ciHRQhEGRgCRsB3M2pdus9QDC CgBh1AprHUkHDgjtIkDogHFx5Pxt1GsPBsV8GUhOk33oZappGIHKcAHruVJAT2G1FiBo5Vd+ggNDFFuu LEjlE2iCqQiJr3xRTrrXRfBiECFZxLPFmMBamc7w2dm4gKR8w8QWBIoBQjnnLZVmxeju7dDEYUKLIUX6 28+pwhrNFWlDamzIWFOmpn6riDxJNCG8WucLUkyQENxFqPN4/LmARfn7ApUInCTJKBff02FjYFBwitym ZLAhhWjV1Yrt6pNHCgZRXNfyHA9nXj6PjHaftTLre0+fVUCMmCV6Xm31tz4XEOie4/uPY/AVpSgwEfAK gOv5W4FlkuBicvuKg0FMUXpvs+qQeN96b2HsgvFYz6vxJy6ChBxdQwDrY+YZgSEzUeqQ4kUGDVK1phYv hNQx2Rmkjsnw6FF8HslHJSBVA0pQGVrE86AyBF2/hSpcNA+reCV2KkW47hzS09WFLf262P49R3zR0L3J PSpvzTnmQz3VusoP7bfilDSAkhgYWfs/ZVXPo5/CsZkT7dCEYXZw6gQ7vniuuwel6+eh8uybNd02dCMA qu1zeDSIIJwynvgBQBijdoXiDLgn3ZsKmej86n9Sit2gRGDA1qUDgKCA8+WXQgBBHpRLclIuNq4cACGL OJ0MSGCQTtzO8SwA4Vihbdm0yxa3e9HmvvCozW3/hs2fMd+Sthy1DftybPOBQsCg0NYRobh4e6bN3JBm 09cds4nL91vnkSuQEBa2SAitBs231ngZOhC2PGbR7lAcRVGKeBgaTpOaqt5xGBW9bBpuR5V8cimBlFEV zvACEA4OTGwKTDT/rbRUMb7XRAhAEFb7OJec7xwc4s/JplOAkfvvI4oBIaHstJejdmBQ1dmwormdIYpW dKZ2IAglqu8XgaPqORFAOWOK8SMAiBnWjWoRM8Tqhs6l6wqgHKi4xxiwwrUS8uQTGCmRyeOV/5OMHwNR y6rcLCVE9xpAVYVLUMMiMBWgJhYziY2B918z/CY+zhlf4+OSUBifRKngtCSVBArGxYhcaokoQYrR2McA JBBwY6SSgiKjpAOVv6OLbhyV8fFb3/orYhTSXK2SF8KjURMCi2LXXrwNAUKRyy7aVrFoVSLJykgXKMFI B/Plo9Zs79/F1rXHfjC4px3CVlGMeqSF7AKu6tPUTsxZON2OqpvS4O62o2dbOzRphEthZc2rOgzMveVs XGdbqW24lUjHLUgbm9hfjxpyaMEsdPpyB7XDW3fahoFv4dp82guabBwz1A5Rz0BeAnkPgoSAKuoUVIVS qKQiUDGBeEWkKBeWnQQQThCGjB2rpJG8BDIWAYYsjK4ZnqhEKDLxGil5VXYkq8L2oxJs3X7YlvXsaPNe fMzmtHnNZk+db8s2HLI1u7JJdy4goYkaCHsIV8aYOGPtcZuy5qiNX3bAOklCgP8lHbiEoP/a8EFHEpvG Ld1tKRgUcwCEYsouNZxRtaDQa+4SlZIuUBtBUW6qnuOFOAmQ8Vp3Ue07pceqgoz+9tJWUS07raRipLim vJe3ivRlT+aJGE3Vc0IzCkKQo6YU+uwskoqaUXj56QRqVi/imvTRNpxfOQGfBIVYWmmSPSKa6CHfPlq5 Y7CIpRoHLK1uUbARVvL4HhWQc04hvdxbc338SMJwe4RWfqeIyWLpIwFs4vJeMTPfvxUzRxV2o/x/Z7ZY DdM2/juB+UK1owAysQoUVKYIIBO3sY1GRlwVImHbTBh4TzhFrsgYDBK2zcVLmsuAB+mqxVMR1TJACpHr tk/vAdRs6GkTxk3HoIvhkRW0XEFRCpvGqBwH/MTBPMHN2BIA5O48eRWk0kZuQBntgtU+Qc9Hd8/FbrK1 bydW7Odt20g6L2EILUcC0Hy8QE2O0q14mGaz0s+dagemjYXZ37B1BPqkkCpdUEjuBaqBVJVyMiO3AwSb UQV2Tx1ve9Zvsm2s/ivbPGdrkQgO7tjlruv9qCQbhvSxZa//zBa/+KhtnEyvBXJ0srGVlelcAEuIOYBc CpFnQWpCRNgNigCDAoCgAKkgr4g05iLSmAvrkQrqkQrqqIGAVLA72Q6Sz3AkvcQOZpTb3tRS27YnzZYN GmBzX3rCZr36rM0YP9sWrTlgSdvSbR2BSGspipJE/sLcTUgHa47ZZAyKY5bsAxBWWivSF1rFRkVJCG0R GTqNWIYIkewehlwyHUvrCUA6qx4EAgSCkkgAuUjwiTr8eK64ikcqLj6uI6etKisn/i3wQKJQOqkzj0pP KdvRwSEqO5XAbMqNlxgnUmSdAny8ZJUkBq3MznifAgpMatkdfJWOpA5PEooMkb5ixoylyS2DnVYwuRgT yItwSG8XcZxIrkAv1cW1BQQenuv3p3ujOnBcTsttCpJ+QtEOL9zhYKBtXJashbmDBBIdG30fH9tyfFwM JEQ4xuSVeKKVWM8QKvPI8xHIpaXonK4KJYCK31MMVtG4OGC5Jyeq8x8BQRPbZsLgpjiJZoquFYNpDK4u TcTf6XhPH4YUcCVjHOJzDgEzacfzPEakGH1Ysfwe4ONh7iGyz7cK9Gn27wMK8ve73z+QAtkEJMoJEBgk 2hYqAIRsjJVb+nSw1Yjwm8gQPIq9Qh4Yt2eQ+py7bK6lzZtCpGwWbtujlrxonq0hvHktx6dTvFYqRwWq X8aalbZRagcxDDt3HrBNRFVuowjskjeftWXtX7Itc2d7XMPONetsXd8uhBL/zIuZbFmzwYOHcjAIV2AX qAYIFNSmMGW3H7i6IOkAycClA4HBCcCgyfKLGlETGgEDQEGAkI9kkFdjB/YetE39uxKC/ZLtmsN1jxfY btyJW/Zm2rKhQ23uK0/azBeftKlDx9q85btt+eY0pIQ8KNdWbMN+sD7Fpq48ZBOWH7IRC3a7yhCDQYuE oOSmkcts8op9blDMq6JaK66/E+dUiz9ICGqDFXrMkS/g/eXiLkShAYpKnymVVEVE4603M+E4hcw6E6me IiChjLsACoHRJH4rS07HeMszFalQHzuu5UyHlBBLB77qOShEK3ck8p6JV8PYGBZPbmeeFmZxJncwCKDg xTQiauBvj9DT1hlN9gZ5PBQqTLlwb10Wwn+1VZFNAZ6yLF09imIImhkigVlD/bwAQkGvjhk5bEOsRgAo F8EVsxGTdHHfj8ubaT8y3EZ2CGe6GNyaASIS2931CzDI/RtJKzHze6OPxBVfgBLFjCTeQwhnls0n3GtI LIqKgfjn8TjGIBsFlXlMSQg0q5M7D8YoRORVOLm2FRTuqCV81/NVEqglHFmqQggyUkCYzvEJd2QECImg UI7InwOjbx/Q1Vaz6q9nhT+y/6AXXXGjMEVispfMssNThtvx7VttLzU5k9etQ5ogvPn1p+zQzj24+Cgs g7HzCBLEekBiY8/2tp1yejsICV/To70tbPWsLe7R0VYlraPX5W7bvHCBreraypa2esbWDOpJSf4dHoGp 8OMKbAMKklK8gQBBNgVFJpY6GEgyEGE3AATyREgHuQUkGuZTjkDpy9CR9HLbNmMmNRZfseWtn3faun6H bSHYaMvudFtB6r4khJnPPWZTkMRmLtlmS7AVrNyaZSu3ZdvSjRk2a9Uxm7TskI1dvN+GzwMQhq9wl+Mb sYTQdjASAoDQffQym7ZyP/aDc2Q5XrCKJuINqKeoltRXadcmKSG0o45aoXmvg9CEIu5eHBp/qvJMC6lG nZep9mq1YnLsEDCWkpE8FVd2A0+8wV7hBVZ13tCaS8eqhFmw6LdM+EQjXNCHY/E4iOeJgTWqwdDCKFGV mxgAokntKdqyoCui0tO1o8QZlxBkK1ECjOL1BVhUNfbWYaHElnIKQg29UB3H6z44c0SMHjFpuIcW8In3 PZzZjauBybwSj1KPY2ouyhFV3ZGR0ynk6TeXO9PfcgH7d+E6wagX3MOSLoItIRQxaS5DFoNHNE5B+ohW 9SigLABBVPknvq+oGpBnHXrmYVQtKE6OUmRqFGWoZCkFGXlgDoa0CoxnikgUcyh12vMAEhOCmgGgJUy4 ueS4yo97CfIoldjTiAOpBJwMkzpnNZb/QvT6vVPH0dvgWYKS0PdXJ3n5ONVrOA0VbVtnB8YPBjQ62U6K rm56602qG1PynMi/vdTgTMP7UYiXKId+FutQO1ax6ie1fcFWtX/ZViAZLGr7oq2YOYMitqtsLSCxbsIY W9HxFQDhaduK1LAZkDiCWqQkpXIMhZXcUyAlMSlMOVAJdgOBQlAVBAaN9MpAVUBFyKKOQVpWjR0lQenA 0QLbMH0mUsmrtvCNZ2z+S4/bmuGDbM32Y7Z2+3FbOmKMzXnhpzbj2cds0lu9bcrcjTZv9UFbuj7Vlm5K tUVIB9NXHrEJSw8CCPts6Kxd1gnbYQCEyIbQYcg8Vxl6kfo8C79kFupCAaJaxQmSkEhsuqxMR4qsqp9i 6K0YWnUJDNSA1dtte/tuCrFG7dodFFSSystSRS3IvO9e6J/oK2tUokqMJpKKIMBQGatt23eShLTd1m/Y TKjyalu0aBkpn0ejnPc4viE2wAkMEMt9ZQ3iqlcOFkNoVY0qNoUceqkEcS69GFGSQLRNAII4zVbSgmwN 8qr4PUaAtXXbTl4297d+s5dKW7BgKf0RjrgPXenfSm8VqMRqh1SQINaH1dOvq/uIr+kAFBfeCNV1ArMH hn+wPkFzrQL3XgRwaJYg/LNA7iXxKlIRKKj2YGRriO+nBRiie3TgSqyHkFAfIRGoHtyP7zNKA47BIDEn wcN6EfuVZi2pQCTRvyWDMBEAQt2ARHLvg1OLa1JepUA6Nmzl2ZF3Re7VY9t22PrORCm2f8F2DOxqeVQe qqeMXRMBddVlFbRPW2ZbKW++nliF1dQWkIdg17r1lM4/GNyhZLfmUsfi4JrVthoQSAJYVnV53ZLIG0ia NYt6GSttOZGzaxYstpWoFMu1egMam1atJ+nsIHEZ1MnEqCiXseJJlLFaibQg16eAQcBYDFgIDHKpapRN haPs3DoiEQncy8atmFFB6HGp7TteTFxBtq1ZstoWdmlnc179mc16/lGb/9pTtmLVTlu+4aAtGDHe5jz/ U5v+9CM2rkd/Gzdzjc1evs8Wrj5q8zEkzll1xKYsBwyW7LfRC/fa4Jk7AiBgQ3xjYAQInQCEjsPmW99x y232qkPenKVIgHCSlVl959W/kQKraurqXZa9KWeoSusNQOlUs3v3HnLgk9kmk/Cym4i6nbaNF7F123bf 6u/t23c5SZ3QyuqqgzfaUOqyOj/RCUnNTTm/cvr/kpr/qjqs8mP/83/+iRc1VRCQXnpsXQ/17CMvg7v+ ouKbsdU7rrobiejSb4MxUcDQIrI7kyrL0BkTXVc5D55aG2wKJwUI3KNSqwVq8f0pdv/zn/+8/fEf/08v ZOJpyHK7qbCHwCi+nq7p7sYWim0XAo77inpEFYvilT9UP44qILsk0bLqx0ydyNzuhfDnDWAYynzH9ocW r4p7VtwN2xIdGUsO7g6OKZYM4tqAcdmwuCJQVEIsSDQtakOsBsXql8BVY+thyQmpxSHmP6QW10VSggOg 19KIKhT5Ns6mDXkyAUBVtET1N+4nz7pVcBZMl0WQ1I7xw11t2IjR8NDsyVZKtSSPY8FNqkzCw9u22f7l i23P2rVEMjJPKU67H4+EAtcUnKb6DMcJAttFlOOWtettE0E/q1ETBATLkQ5WLUuypInjbFnXN20ZUsNa PA3r129HDTnquRwq+KKqXQqIUs0KRW+WEkiWsWyB7ezRgXqPy7EzIIkQhZiB1+BYehmh3CQkpZTYATwI yYfzAQNiDXYdt1Vrdto8mgnNaPWCzZA08NyjtmjKLFu4cpfNIXFtNurC1KcfttFv9bfR09bYtCV7bHbS IZuTdNRmYjuYhCFxDLaDkfP3AAjb3bv4xuAFESDMp+rykLmkP861fmOX2ry1AEIVKgOAUBUDAt2aryMh XI8AIVYTblJn8SYSwW2kg29+85u4kb7l9I1vfMOZWa3GY9LfYiJ9J/rud79nI+gqVEbJJ9X4kxtT/Rrc /oAtQlWMdLx+r1j8//W//peH3lai/ylc2INd3GoejIkh1DZ2cylYKrLERwY1jxPQxI+8DyrQolXfSVl8 imAURTYAMavn2ouZ5NqUFwRAkN1E96j7U8akAEu5DgIE5TsozLgCUJDYGu5BfQKCRyVsI+9KBGT63iv0 cj1l23m1nQggYqNhiI9oieWI+ww0u0Vj12FCzIUfH0tIHjEakcAkjhzV+Gkc4jGJXMJ+r1G8Ruhr0OLV CJGpD6g0cSFRXS8KQHOQ0XgqgE1jGnl0VDU5FB9RmnGoNRCTANifPZKggpoSFWoR2Hj1pshWEalNcSm/ EJ0ZpAnfRuBRTXyEXIiHtmxzNWAthsHNVE46tnCWleA5kMdBVawU+bmPaL9duw84Ke8kjQhPBZnpfWpl zyGi8xCh3jsAiw30AlmzBlBAClhNbsSq6VNtKTkEyzq9bkvbPG+bli4zRWDux8OgyFKF2acTEJVKebiU vcmWsnq57UAqUcKVyrptpzT8Ec59hKjCw4cLqIqUSy5Ctu06kGk7kjPwIFB1edthW7v5oC1bBeNPnWvT O7S2aQDC1Gcesnm0FZg+f7PNGjTCZj3ziE352cM2sltfGzl5lU1esMum416csfSITUZVGLcw2UbM3WXD 5+6m4vJWaz9iqbsb38C54EbFLkPmUEtxDoCw3OauOeyAUAggVKIyqPPzVTV2pX3b9ZuAAiBwXaqCN7AI 7cHVxy4GBG3VzUcl1lUgVIlH2upvtX8XGOgYbfW3AETNWGQfUMsu9Ye8RIegREBQRNuf/dmfeR8GRcdJ SlBpd2/PFcUrBKOeGDpa9SMJIY5J8OAmHSuXoTweIqksIveAqOa+jINRYU15ISIJwplaEkIUh68Ozi0S wlebJQQV+9DkKmOS1VKDIK5f6N6V+Jqym7jtRLEcqhwl+4MYJkgsoVpvUIlCPwQBSgAv70akduDuypVR Vi3AgudG9+8kF62OEUgIJN04KXtAbJQMElQcE6I6CbENJ66voOdUHIjXXvQ6irH7ODQfcaZvlj5CRW29 D9lRQtOUMFa6F/fA6J48mE3PSkCbQtcBhVgKqxEwRDabUDFKUlQAZ0W3avxdutLf2o8Cy5Qg5aqNgEIS QwQGLkl44R7ZE8giJJtRvSp2L15ga4hHcFDAVpA8ZoDl0Re0CGlBBXQyCb9WeLcYWCHxqpVQrrwQSOK+ KlerZN3+5KNIuntpSrPDNuBFWDN9ii0BDJZ0a21LUCnWTRgFWGwmLmAvYdJUAiMOQZW/96Fi7iR0esuI /gQvvYGK8gpSywu2EtvEWuwA6nGxfc8h27HnGHTctu48apu3HaJf5kFbu2mfrV6/x5av2WGLk7banPmr bGqf3jb1xSds8s9+YvP79LLx01bajP5DbfpTD9vkJ35iw7r0seHjl9vEeTtt+uIDNnnxIZuIIXHknD02 YuZOGzZ7hw2avtU64kxohbrwxkABAhJCVwDhraHzrM+4ZTZ31X4HhKIaYrpPEudNnbmrt9S1SYCA2oC0 cM0Nh6rCfMdueXebW87kIjGKmF9ZbH/6p3/Gyv6nzsz6W59LUlAXIlGsEggwZs6c4w1dVPdf/RYFGF+P JI24oYvKmVVSNlvp1u5Hhpll9VfrdOXjOyioW09z8E4IjPJqSjJaqmZC1G5dLd69zXu0veQeA8VYEIkJ Y4nxJDFoIoYIO9kQ8ISoYSuglQgISt+VhKC6B6oCLdBS8Zi4dZvUDD+/PC3ynET7spmc53pnonuPVYr7 Ivu8ZZniPuSdUXk4uXyD2zc8eygMI4+He3LUXozvQ/lwgEFM5F6DYCQMEoueJzCrvD76jY9LTN6iLKLY vSr3cmQEdgNvLJF5GXQFpiFtRIVb/N7Uyt4pnMeNw7ovr2ZMzULurRGmr4tLlUmdkHolIBOg6f4jOi0P kwNowmcu3YUFIEgRLSqFVwNPoBo1PUFyS2F13jp7mq3BBrCa2oobiCnYRn3FQ9PGWebmzbRjJ9sSXV/Z tGWAiIcnE96tfYn5ys1QrsZBskr3UJBm6+p1tnLkYFuM52Fx9za2tEsrWzdtoq1atREJYoft2nnQ64Tu l+SBmrF+8nhbgyqxqtubtopQ6jVvtbXl/bvb4t5dbfHUmRQGBlxQM9YjWazbuMvWQqs27LKk9dgH1myz pau32OKVm23hss02d9Eamz5gkE176Wc2+ckf27zunW3UxMWAxCCb8sSPbMKTD9nQzr1s6IQkGztnu03C gDhh0QEbt2ivSwdDpu+wwbN20Ndxm6sMrVAZBAZvAgpICHOREOZhQwAQ1uynW9NZesEFleEMEsIVAQKt 3AQINwAE0U3fyoYgw+GtZlVAq74Y/E//9E9hkj+2P/qjP/Kt/tZKH0sJLYDwF368xG91fnZQILApqBYB YKQ2KNRVTVTUoESrkXrnySNxVQzN1qMniW8I+nAUmSeRmMnbAgYBAGS4DC5SdWYOW9+PzqXW7VIPPHAq En21WgoQFJSla98PCH/mgPAGgKDeEaoWrFRwr1IkpoiZVdvYQ+PXEkiIUZRg0yKZeHSfJIPmsnABUC7L HRu5O2PXpz+LulpDwTMTvDjOvJJ2onwIB5nIE6PP3cXLvbnHxH8bjYla6MX36O7V4PXxz7xpiSSQ4GIN HZJCtKpsQcpijF3M8ZiqBqcDlbueo16IPO9pxlNZhg2AgKQFqRL6W4wf90p0gNazCPABE//c96N+CYqS jULQ3aagsn5Rfc8QVh3Cq5WurnL6qtB95MBR27p4oa0b0J3qSU97vMEGAGJLl1cteVQ/yz14mGI1NZ59 WkEimtLbC1TXEDuDsmePACp76dO5ddkSW9K7Cy7H9kgGbWxZL4Kf5i/AAL7OK0tv2bbHdrHa7wM8dmEc Xzdloq0c8FawMQgMuH7SosW2mCpc8+csotDNUrqbJ9my5RtsZdJm7ATb2G615au22rKkLbZ01WZbvHyz LQIQFrCdt2C1Te/bH0B4yiY9/iOb07WTDR6z0EZQSmDyT39o45AQBnbuY0MmrLDRs7fb+MXJNnbhARs5 d68NmbXd+k/fboNmbAcQtrpRsc39gDDHurlRcSnGh33ej6GoJhgVT0llUF9HJwABm4EDgm+RDuRBoNNS bBsQ80pN+BN0fon9Q2mRNnLkGJs4YTIFR3rTpPSfmm0JiRKC7ASjRo9BBCTjkGabD6oW0tUHDhyMCKhm nOq2dCWarGGyaZJIXPXuPcpL8NwEXEvKv5eo77X+4lUwrF6+wkYrmRp1yDbg4OKAEETzOIpQUoZEX4/S JMItBgQBlSQgAcLrr7/pXXtLIkCQqB2vlrEkI2kmgEQLxdeTLu8isQOCOhmLyXRfMrQGhvfWYglMKwAQ 6XMZer3JSAwyun+dLzJEyhaha8iN6x2iOTbRPRz/9iL3poxEjYkAwcHTe20yNgIvH+fgupSqJ+DTuDhA R/fjsSRR7EloeR5LNJw7aonmlbdi1UwSh+w0klp4Tw5AuibnE2hqzJrJQSGEz+sdu3QgrwPqgZg/VGpO KBKrfolU9VLxEeUxKJ19J8bujVMn2ppe7fAcvGBraLm+nq0khuMrl5G5SHHfqOqxKhUps/QQQU176Mi8 aswwwKCzLSaBaFHX1rZyxCBLojL3qlUbbN26rYj+u2wndohkJAPVwty2fLklEb24olcHVymWAyLLqcGx eMlKvFPQ/BVsVzggLF2GoTJpI14DvFerAQNoSRKxBEnbbfGK7bZwxQ5bxHbeTDyC3brZ9JeftgmP/cBm dO5s/UfOt3EU3Jn0WACE/t0G20CKn4wEEMYuSLZRCw7Y8Dl7bSCehb5Tt9iAaduhLdaVgEQBwpuD55HT IAlh6FzrNmKuA8KMJDokqXQa0WEVqAwnKYrijV5vv+egICCQdOBdnCQhaBLS+toBQeXMkRAECDICqtb+ 3r0H6K1wFAMNvtgCqsdm5dL96NHIhhBsDaGhyhfslVdf8/Zn6qb0aYAwABGpihbjJXSyGTNmHBV6Hg+q BVKEiqGqfVgBep5qCKoZhvRLTVoPOWaiqdbihImTTW3M1XZdRUh1fYFYMHp+g8o/j1GgtZUbPIupXhu3 7Qq9EoLaoM5TuqZsJS2A8Mf22uutfBVR9yWVe0+h2cgEgLBbt19/veEjRnozGSUNees0JXpFEoaYbMKE SdQdmML9T7KxY8fbKAJQNm7c4owokBw/fuKnjoeyIuM+AnExWoGTVv3YU6TtrFlz7LXXXvcWdhoT0dNP P0MJtAn8/gTXn+hjPhzrtiQ1qW9yBQsYNCYCWElrLqUogA2mVsNcNWZJHOevfe0vvfWduj6tQuSW3cTj NQQuek8CboBEzzuRd6WtumPreTfggpY6qUjX03RbmjZtpjeaVeepanoveNq0mgUxfnWSPEQAayO5NCp+ UkdafjlGxgLUh+MAdzJu7K30C904fx4SA31AAAWFOK/v8ortGtHXjqxfgxEwxY5TyekgBU23LpyH4bCT LenZERWhndsNkiZNsNV4GNau3uxBSNu37XV3ZTKl/A5Q6n3fnv22efZMW4FasZTYhcXUKlhD8NLSpbgq 8VIsW7kBEFhri5YAEEvX2pLlm2zpym2oCDtthRORhtCK1btsadJuaK8tXrXHFkyea7PatbYZLz9jEwGE CT36WT8AYWy7LjbJJYSHrW/34TZg3CrsBdttzHxsBwDC4Fn7rP/U7dZn4hbrN3mT9QMYumJU7ED6c6dh CwhSWqiaivMABFSGsUts5qpkb+OWX33RyimEIrfjVSSD6xEg3IrUhVsAguIPbhBwdI0oxVhCEGOpgKhc cf/yL98lvjsVRkQ3o7tzJT0Q6uqaeJEzElQBVd/5gh//0EMPYyOgMQohpTEgtKgMX7Hevfs6o8oQKSYW AycaKKV6CIR0PXUX1koh45zEW0kK/foN9Ovoei0lyb7sngJN1JZrfsMrKevv4SNG+3nk1XDd20Hh0qcC wquvtfIeiqF5TBP32+9Tr6duzp95Pao9qyu1gEESilZWrc5SnxKfVQw7ZOgwZxoxcXy/D46HmFHFOdW9 SM8gkAmt14PbuIn2e48++piPQeiKpQawoUak3qMAXmMaPEeyD/25N4mVCiiJT+eUMdKlgwgMVqxIau5K HapZhXOpAnbsbdLz61zP0sk7j1Z8MqbKDqEcGd1f4oIQS5JDhw5HIjjrgKQx/JM/+RP7w//xP+wP/uAP aGxST14AkYBIArWSGhwIsFNQ8r9BbQN8i80CAKpS1S3cjVl0Qzp8PN12U3B2Kwa/DTMm2UqMjitRI1ZL rCfWYE331raWxi7LYejlPVnh3wIIMB5K918xebKtJhBpAWL76j6d8U7sx6twlAUwBTqOtyDFkjdtsvUj B9jKrm8Q5gzgTBhtS0hLXklbvlUYHlevRTVAGljuJCDYYUkrNtpKWgOunDTZlo8YasuGDLalg+nWxNxf NH66LZo83+YNGm6zX3kOD8OjNvnZR2x4vxE2CEAYj2F78uM/tvFPPmp9e41xQBg5a6eNXnDQRsw/SJem fdZnynbrOXETDV43Wf9pW60rRsVODggUSRIgdB02z7qOmme9xyy16eQypJPLkI9hsUxJLpRgl1FRgHAz lhDkagQQBA43sCEIEBKNippcshf85CcPkYdPpyLaUdUDBCconnKKztBCer1kTWpNQIncmmA/+tGPvTdh XX2TGxRj96U3dIGJNYGCgfILzZNVoBA8FgGI9L0aqMoqXAlTenuxSH1QPwAZOnVMDAxhskpKeNAD0gJs gwcPD7EP3ggmJHI9KCH80R/9Mf0FXveGrSpNrnLsb73Vy5/r33Y96kNgsFNTXInuMSC40ZbxDUVm/yJ6 ji/+K+PxeW9Np7LtMrQJ0CSOSyqQJCaJyNU8wED3KVVPjKb71rvRu4zdxTFjxu9MUoJatgWQue52iLlz 5/u7iCU/HSsS2Ohcwajc4lJWkRRJDPLKyFuh1V8g2PK837A/5/70+3btO/gc+ZM/+V9ul4rB4L/9t/9m Oej5xRSfrSDtvEYuYyS6JqTCJtQ8J0BL2wbutZHv1N2pkLLme6eOts3o83vorrwVvX/j0qW2eiDMjqSw Em/ECtyCK2Dm5ej+ywECif1J40fbqnnzbd0qsh/nz7XlRCWuIutx7/IlZG9Sy9CrRVG+DHvDjllTbDVG xOV4E5ZzzDKkqpU9ABUCl9ageqwBENZu2Gmr1kFIGSsAgPltiEJs+7IteON5W/D6szb/1WeocfCUzYfm vfwUockEJL3wpE1//gmb+PSjNqlTR+s7bKYNHTPfJr3xOl6Hh2zsc89Y74EzbPDkdQDCbgDhsA2PAKH3 5K3WY8JmB4X+SAidRy63DlRMSpAQ5lv3UQusNxLCDIwP6UWnaSF93spUz9DdjgDCHQDhjlQGtYV/2+5E gCCjomwIiW7HeFV/4oknWCnV0PMUYnuY3GoDv3jx0jAJYUafhExAveTHHvspARvUP0QE1jni8wQV5E8J TvqfTlJHBAphgoXjEgFBzKlGsCVU65FxKG4rpxUtAMLnnZH++q//2ouPSn3453/+54RVKXhABBSKMRDQ qCqQJAXpzOqL+GkqQwsgUCkI/VOdoRKvpy7N8fX+6Te5HsymzNELJIzFEliL0TaMmwK2wngE5n1wPPSc GltVMaql+IhiPsS8V3ln3bu/lfCceEoY2//BiitGk01E70ZjoLGNx1jXEIPrvD169HbVSPeoc64i+87B OQJ7VwU5VpJfXwxggwYNJv7ku/e921CO/osuTTU0nESSo38Ec+TTJE49r4zUf/iHf4hU8N/t93//9+33 fu+/2X/9r//VUtV9Gk9AmfpVKLpTxk4A4SSkrSojaXtCHg62KhCcnrSYmAQkAHIc9lHOfA+5DKoivZmG J2tnTLWkXkgF6PxL8UgsQ1pYSW5C0vRpAMFa7AR4ETAu7tm02dYBGElIFWu6vmrbCJPeOX+27cCbsZHY gjWcW5GNy5E8VgMiSxcuR1p405YAIksIYFo+qI+tnDgBkBlH9GFrwOBlm9/qeZv32rM2t9XLNuuNF20O asEspIAZTz1iM9lOJyx56nM/tYnPPm7j6RDeZ/AU6zditg0fNccmvfaiTSIGYcxLL1ovPIeDpm6wUfP2 2ihcjsPnH7ZBM/dbryk7rMf4jdZzwhbrOw0vw4jl1pZIxfYUWpWU8LmutHDqNmqR9cLLMGXJdkstbHLD YinJTQ30dbyEy1E2BEkIt+68TSDSO3YH8hgE7AgtgPDt+wKTnn76aSSDRnzi8gpcAvmlf1+yp5562hFf E04MHnsi1GNQHZnVbzExUlFMqeP+8A//hwODgENRi6+js4tBwmT92n36vNsTqFYkH7KiBhXj34dJKcYf MXI0Bp+D6OwV3r69HAlGtomUlHR03pfsG7hPEwFB1xw7doJbqhXuqvZfMSBoJQxuR2wIUhkom6ZYBJVi V8enf/onrofakUyHomKadup6ZbSIV9fhf/V66O7yqMiAKq9LDJAtkZuBebWSy5bSuUs3elR+cjxiQBhF 30p1lT5NvQqtwFLhHHAjm49AQ4z2+7//B3Tffsnb18kGUlBUSlfreT4eGmNXGZBOYkBQ1SmNh1yxP/zR j3xhaDEWf8WGDhuBSlCC244kIaQ/PbdsFX6uSE0RuKvxTlV1vUuRsg88GJgmyUXPK/Xg95AI/ut//T37 XYDgd3/3d+2//Jffpex4nkcClqtdn8K1pSZGIfFyIyv2I8RqBNdlI3PiyLTR3sVpDVmQOwlF342+v3/f Ye8mtZvI2s3Ll9paUpxXjxtuayiGsm4xAILdZhfHHWb1T6N1mrqF71k4B0CgvHvbZ5EqcGl2RtUAJKRy KOchiQpKy+fOtSUYHZdgMFw5DxtC5zdg+qdsDvkIc9583ua0fgHmf9ZmvfmiTWv1qk1s9ZqNfKufDes7 ygYPmmiDhky2IQMn2KjeQ2xMt542ivqVQ/sMsd6DJlifYVNt0Nh5NnLEDJssmwJxCKNffM56j1xInMEW GzUfg+JiSQgAwtz9tH7fQYc2WsCP30LH5x3WesgKe2XgCnt5MDRoZQCErgKECUvxVW61lGKywCoopqm+ CBRVvXhDLkcA4dZ7SAfv2e07AMJdAYIMjCQ3XQ8SgnTZlkjFr7tRSoBw8iQrHS950aKl9uTPnnJ1wpko YvL//t//0P4HyL923SYMhkgI/OZBP79AQ81XV6xYS1vsQ+jqme6mHEL7+HiyxiqDmFMxAfIbCxDkApT4 LZem6j3Wor4onkFAIOasoOV2NZNRqkpqakaCqhJsIR4lCcOV0VJcBWRP4vZMBAQdI8Bq1aq1d9ZRSTe1 nveeFRyv/Uo6+aqFfBnXbL4ez5n2GdfrwvV0nMT600hXnzYe6pGYhNgqS3aKj0cp4zHsvvGIAUGNX8vo DiwdXJKaDLSxBCbpQhKBmO3pp5+zzRT50BgLEAQcFZU1CYAQjMABEHrB4DAx4zFr9lwvi5YICN+jAW5u bhGW/WKCfMqQ2AL4Kkcl7mwdqx9aHNbz/uswYKoB64Oh4X/EO9XC8OOfPEyF676kH++ybTuTCZc/6BWY FB+gzlYCPdlf5AmRNyWuWyE3q5O7LHF5Ugb+0NSRMO1rrhJsWLTAdhGLsGUqNRFIckpeuYTqSnswiu8n H2EPKc/sJ+/H06AIRooC0225hPdTTKKUgH3XnKneY3G5GsEo2KiDgKCVrejbzRZOJax4CQZDXIjLNyTb 4nV4CWYvtLld22EUJO/g5cdt2stP2NQXUAGe/amNfeFpG9Clt/UYMs16YNvrNRrpffRC6ykaNd96jZhl PYdPt17Dp1rv4dOs3+jZNnjCQhvdD5vSy8/aeNSIQW07W49RSzzOYMT8QwDCMUKVj9jQBYes17Q9dHre ab2hXtN22muDV9lLA5LsJcDg5UFJARC6j+BCYxfbxAVICORiZwkQaJJSdw7fLyHLzYCA6nAb1cEBAdVB UYoxIKgktwAhXrG1mmkFFaPGUYtaDeIYhf/+34PYJ5JYmYonQjaEehhTom9QA4JbT6vDc8+94K3ClUSk YqFadbaB7J8FCOrnqFh1TVjvdgQjCJiaWIXEpFqtKjB0Llm6whOUpkyZZqNHj73PJhEDgqSXImoH1tGX 8QQT9i8jNUXPp4mqFVahy2q2GialApNUR1CZg9H1AB1db6lfj0izqVOxoEfXSzDGCoDEwPI61CNGn8QN +6CbM4zHiySBEXOPtTyMRznjc/94xIDQEUu8ztcg9Q2JQ30tdU4Z+vROBAifZ7uR6DvF8asDczb1/8uZ 9LV4fsL7kIQQSp/pmd96S81y6/z5Wrdu02xHCvahP7devfvgVVIcf6GDt0ChCAmwgMjAL0agoncrCUxz YvDgoXgLKIqL6zlWUYIEFt6/bCFr122xDVQY3gIgKMRYz36MmgdqdSbACW3r9L5VAEUxDYBAFLzmgWlE mapehySR40nYCwhOWsaqvpiEpGVd3rCVb6FC4HrcNKibHdm6GTdyFglGFJKFsvJo9QcQVDBvangvtYB1 JQCWz3XVpHgzHcHWEouwav4iW7FopS2mU/jC+SttztKNNmc5rsONybZyyxFbsukw7v1dNnH2Ehs9bJSN 7U/OQY8eRBZ2sUFIvn17DiBQEDAYv9j6TlllA6avs0GzNtpACiAP5O/+E5cRVbzABqAiDBwzBzBYYMOn LAMQhtqEl562cagMfTv39T6tAzEojlhCIZSlx2z0khQbsfAIn+3H7Zhs/abvsb7Tk+2NIWtcMnhpYFIE CN4GeoH1QMQYO2s9KgPts1EZCqmYJEA4d02hy7IfICHced8B4e69d+z2XWU3EspMYFJsQ4hDkuPuPpps sdFQE10Tr1n0+73fc9FPhiW95MzsPPcyNOJlSAQE6eH6zfPPv+iTQCW+tfKoVbvsDfcDQlitFUacy8pU jdgtEVRisvRcxS+sW7eBqr+t7W/+5m8/YVF/0EgZM5Ran6uQaA1AIkBJBIQY5Bw0iiocNM5gZ9C1zl+4 zPU2/ivXC/kdsQ0kBiC50sTgtYDjCVqeJwJCy3hQIIPxOEporI8HYCN1K3E8wv3/ibv5CljtJR2dQm1I tNFoldYxMgLv3LmPeP0U3oX6ZNDtigkvT0QM8rEhWOeVO1XH1PO+vv/9H9znBYltA5IEdb9i+NjAGuZD iwFT70vX74YLUZ6oBuoUfNr7FyBs3gJg7UpmUTjMPKAxLLYdvecS1DH1umxkrM6cJTZCY6/37TEVUQyD 4hm0f5V2hOdI4MuhyQml01ag4y+Vd4GyaGuorrQKqWHjwG52lBby+YXYg5CQymsoRsvY1ZAlWQ/g1GEc r2NbhdG6gJ6dKRRA2X0g1dZvp0LRBtyDq3fYgiRo5Xabj5twGZmIK7amUr2IqkbQvPWHbPKyHeQTrCYW YCmr9QJE+HnWfcxc64pE0I0QgJ40TepL4FD/Obts4Nw9NpDtgJnED0xdYwMmLbMB4xfZICSDQZOXYjwE ECi1PxGD4qinf2pd+k227vRpHTiPMOWlR21UUrqNXJpGicR0XI+HrP/MfdZv2n7Ot89eG7rBpYOXkA5c QlAuQ5ehc6zr8PlUXV5jx0jBzCzHsIiEUHOaCLGr1EK4CSCgLty684Hdvvc+gPCe3cGeoEzHGxEgxOJi CF3+govasY1A+r9UA4mlsgoLCP4L+p8mVhKt248dS/NVRAwu9P56goQQM8AL6LaK/JKBT6tdHQYtidSJ kyeI739ibdq0Q5fX+Zp8tZClXkarF154wVfFIPYKrGRg/IKrMcGVeb+RMgaE9h06uUhezf0lXjPo1MFT 0hUDjxhEK6bE8jpUgud/o+sFQ1zsrpW00YHrFbKSioE/CxDUhFZt4tXaq4jxkIFPDXNaxgOvSzQebel9 IMaRnu6A1myMVWRp8M4IRA/Talz9J0ocDE46eIjBQjJXWPnD836e5+3u1xVIxp4IHSePjSRCjatAIDZ+ /k83HgfSvhYHqXcivTONXznMV/8ZgPAsEqIarOzDrXeMDMZsKjwXUfVZLscaxqlRXiyA+OwlgQGBUDD+ RTxgl66xvQ4YaEvMzKXrhKdfJLmqocHSjtEKbTql0KiPuByvwkrcjUkAw2Yanxw9eMQKSlFDmDd1qJu1 xFzUQTXETMi1WY5qUkRhlhyKmhyn69feVGoVJKfa8i37bQEgMHPFXpu5fI9NW5FsU1cdtJmULZtCCvKk NcdtHNWKhlG/tN+srfbWpPXWacwaazdqlb05PMneGL7aWo3eYG3GbbP2k/daBxi349T91mnqHus6aat1 m7CGbkvLrOdY1PwxwfbXZ8hMm/Azkpp+8G0b+sRP7bU+BBmNWGddp+y1HrOPWp95qdYX6jkvxTrNSLG2 k45YmwlHrNXkw/ZE/832WJ+N9kjvjfZwr00RIAAK3dBPhk2jtyOAkEE5pzz1ZVD4siomYUe44dLBB3YH QLj3NoCA2nA7AoRPWsH/1I2FsVogEPg9lwiCIUjfPf/8y7aFhI59oL10bzFTA7qdjJCfXBH/yF586RVv bSbbgLIepQ/LSNbiZQiJRppwYgAHGFY4Wa0VXPODH/wwEpNbJrXARr8RQMgL8Nxzz93ntWgGBFZYBwRE 2ibsAjFgJTKIVrjySE+vYUX5wQ9+8G++ngDBV3SYzQEySgeX5BUAkvEg6EclzKUaqQpQYIjzzdJLULda JCaF38oOIoaLPQexAVDP3wWGzEIyUAn1Oln8JeUgXgcvRzAWJuapyLCbx5hUoDbExt3YLhEDQvAOyRsC 80deohgQ4s8EDPpMQUYSxyVxOKhFnp74eZ9jQdhDSvIxdHgVNS3hmWtwV9YqmIt5cAqD9RkHA3o/XCGe 4QpSIaAgQBAINNMNwOGqPA7nqFZEm/TDh237ovm2fuIoW0ucwPp5s23n1h129Dh2GbxFlWoYQwxDDeXk qkiRryAZq5ACLbkUd8ksbbJjuY22P7PGdpCmvGZ3ti3bcsxmrT5AVaJkxPQ9NhLP3RDyCAahvw9Cnx84 77D1n3fAes3ca12m7rL2E3c487cas9VeH73N3hiz3V4fu8veGLfXWk3Yb29OFCXDwDut/biN1plejN2w D3QftRCiJ+OoZfZWH4LWHvu+TfjBd6zdK93tmZ6LMRJustbjDwAqx6zD9FTrOCPV2k1NBQxSrfWkFHtz 0nF7Y+Jxe7TvFnsEIHi49ya2G5X+HCSEbiPm2JAZdH/Ow9hFK7ccVbM9BZqqfJoA4TaAcPd9u/P2BwAC wHD33fsBwVeHkK6sF6zts88+53EBTz75lNPLMLVCmeW2Uby3ylZ5MI/EYya/wOCsW5lDPYSvIG38qeuQ f2Qvv/yqvyT1OlDGo1avs1R+TmSWREDIyy/2FVZW+gEDBjb7v1skhM97P8JZWNHl3ZC4Kn1Zq9yDK7Zq HajfgEqNf7qEIBFagBAMgf37D/jM68lqX0y0pVyydXXheokBXbGEUACzxRKTVJTY8xEziDoo+6RFlZFL URWvzzwwHnFYtQye6S5ZVeG9aHggSOhr7rLs0KFj0MP1HqRmoW97OPeV683GQreZRNKfxiQLkCnBsBYH dyXaGl586SWPVpw0eSo0zbtqTSW6cNqMWWxn2MQpU4m8VPTlFJs8dYZt27WX0uoYgVFRXCV74P2/8OIr VAxKo6sxTXPw4tQSV3GCd3uaMPMzkIKaLlxWERuIe5aEcBkwuAwYXAYEriEliK5Cl/nuHEWCJc2Vcf8Z WTnEEBzHmHrAdlNL8QAdvdIo/loIw5fCB2Wozwrnz0OVTqca8nHqGx7MrrXdaZW2I6Xc1h+mozKVjVfQ BGURRUxnrz1iE1cSDLRovw2Zv8/6LthvvecdtF7EAvSYdcCp+7R91mFSsrWDWk+A+ccn2+vj0OnH77PX x++31ycehGEPWCvoTb5vO57aBWPWWhcAoBvqfTfU/K4j6cdIpGGvzoNs/E/+0YY/9EN7oc0Ee6rXMnt5 yHZrPe4wgJCClJFm7aenWTu2rSamct4UB4M3JggQtrpkENPnOg+eHVQGkpwGkkJ5NK/J0inFnqMyakgI 55AQrsnL4IAAEAgQ3pGkEADh+g3VLwgTViumGohKDPwWXodNm2mySRTYVizXOyhJtcstwwcAAkI7Dx33 VFOthFW1rPi8nLOIp+cQ8UM9BbkSv+Jip2wIAgTFlCvzTNF8MhCeY0IkHhu7Mlu3bkfVmaLgykLXU/2F RL1ZK5gMmdm5BS5JyB3onobIwxGLvXGchHRwNSGprpbX4pSvsOH+gnqke5RnQF4SSSMP+tv9eg8/zGpe QCQjHaTLELWRImRADatqELO1osc6f5BI0IsBGDFHOKZlPF4CXI8BpjJ21iLei4kFkPF4xMcqLkMu0dQ0 XKKcU8D308cfd/DWyh4/i7w4wYZDsBGrrWwuVxC5LzcDQshkjUFXY6wOTTrno7iCAyjofAFgnnnmWU/2 ys7Jp/BHkatwRRjligDDguJSqhAVWVYOjUuRSnIJa5fFvobxECDEz5v4/iUhHiGyUJGN5W4vICwdIIiT oTy7UjkpoggMrgAICq0PYKDgKUVUqjIXx2BXksdBFbTKqXmQh/0njYIoKXT4zqTeYw59EArV8BgQyCVY 73jhadufU287j1fbhkOllDTPt0U0TZ1LvcKZ1CqcvjbNpqxOtQmrj9jYFSQSUZVoEDkEAxYQHTh3n/We fcB6zkEyEM0EFGbst67Tkq39FEBhcjIr9z5W7QMw6mGYFpp8xN6ccsxaI9a3RULoMH6bdR671rpR6jBI B4CC9sk/GMLiMPEHf20DiDp9psNke7oPXoNhu+2NsUeQCtIBhAxrL1CA3gQM3kRCaAW9Dj3ad/OnAMKQ 2daVQIYhk1YHCYHw5WyiFUupiXABQLh88303Kt6594HdffdDuxtJCLIhKA5Bk0ATLEzCsKLL67CVZJDd GIH20dXmMC6bY/S018TMpPhENoMvI1ylXi6TQIa4kJ9/0c8VR7vJFiEf+UsvvezutSIMSGIASQinAZD7 j5Wq8sfkI+ACJBJNBVjUabh5skaFW8TICoWWS0yrtVx8yqOQ67HF367CLMraVPETdHB5LViZZGiLPSgt wVX/yw13Ahe5NOPr/aUDR8jW1PXykVqUixGkEaIHP+V6EqWbdX7cegKY+Hqy8Msnr/F4kfEQIBQyHtKh fTzwaiiyL/YGaOxiMFX0XI4McDBe23btm+tU6Nzh/H9ugwYPcc+GwPYi6oLA4PjxtGYJIVZD4mQutWDL REqQ10Jjoeu2nO+rblAVCAhw9cxSuaoZ50rAsCxy2+l9DiBuRLEhtagzDQCgpLgH3/8LxIgcQyIqkHHX vQkAoLIs3VioxDQlggUwuCIS40cA4GDAd9eQeK4pzFqJbsqgxA15iuS3BtzS6ghVWE4/BLxs2VQ+zlTD IqogHy9osv1Z9bb9eKVt2F9qy3YW0vkoEwkg1YZRdGQg4n/v6fvtLVb87lNRA9DbO8LkHfms7dQD1nra YWs346i1n3XcOs3OsE7zCq3z/LJAC8vsLaj7glLr5lQJVVnX+VXWhf3O82naO6/IuvC77tMBEWwIPSes xW6QRJjAGvY3Wd/+023sE4/YhB/+nfV69nV7sfcye2lksr05NcvazSmzTvOrrRPn7LiwyrdvTs2z1yZn 22tTcqEcbAefAgiSErqT5DRg4nI7mFfvgJCrrjJEK54hwenqrfftFraD2/c+ckB4+12pDO94PsOVq9ea XYtaLT3GnAkrv/QekpuOkCCi5CbpugXyRyO2Kq20khgBMbZiA6SvnlM5NfVzwHATuynj8mSyRciomCqV AfFeqoD81aLEY0MA0x+SKPW6V8GRpb4CppLRMJ6soXjLV+yVV14lmEUNWAlgQtTXir2NEm+xhyTWv2Xv kMitfohqXSbfe+I1PYIOiUj9CrUiyrUWh0THjBxfLwACICgAgjlUUu4zr4dxT3ELklw+bTwUQBQYhEat 7v1Qd6lPjkcYu5e9UEcWhT8KaHU3e86CyJgaCtgE17Ba2X/FfvjDH3oSk1ywCtRKjC8IK/afuQ3o5Vde xyNBoxVcnlIHJE3FYco6TiQ39JIlyxIAkMhRGekAuSqef/78xe6h0BjOX7DQY1AaGk/c/7y80/j9H3eV MaiXCogSQyv3QSqCwCAAgaSCmCJQUOJVBAZqI3DZK3krevG612aoJQivou4ixYXPWTagcLzwFHzQZHsy eEcpNbbxYJkt21VIT8Qcm7omg34GqTZo3lHryarfffo+6woQyOjXaZJoL2rAPmsz6SCr+yF7c9pRaz39 uLWdlWFtZ+dZh/nF1nEBTLqo2jovqrG3FlXZW4urrMfi6kDRZ90XlgMMpdZ1Tq51n3nM3pq6m/iBTdZr /GqnnhM3WM9x62xomy428aF/spEP/cDeaD/enh202V5BMmg9s4BrAQILa7kWxLY99NqUgggMcu1VQOHh Xp8BCPI29Bu/wg5T+z2lFAmBwSmmdfsZ2rhdvfmB3URduP32R6gLAAJ0FxuCchkuYciJE5S0ImmyyJsg Q9QB8svTM5UBiPEJN6Es0nWs2KoMrAkso6BAIFQyQhdEVG3CdSQgiMV1rXCKVXgeK/NRVrlCVAa1C5No q8zGTxzLtcUAR5FGtKoXAUB///dq1f4Fn7CicL9fQJJ402YTVDNv/kJfNSUdBOu4oij/xCUdeUcUluy+ fiajQCF2p2kiK6hKx7zyymuspqzC+N3/7u/+7oHrKdw3vt48mzdP1+vwa69XDKApNqPZVafrReOhuAy5 YAsQoRVvUU+oczwesrv4vfmxf+AxC2rPrtb1+ZyzEMnsO9/5O3+OkOx1f8JXnAUqdebBhClJTTqvjJr7 KDUmUMrIyPWMU73/ON9E4xwnN0ll69y5C5LAIOtPUJSiVb8JWMRgqjmj4KbKavo7AoC6rwffv573uEdP Bu/LKdTF89g5LqnUP6pNLBEEqUA1IkjbhvRdaAcQUq/V50MFYppIeqqhsngZ3rSCiguWxZw/nH/akjNP 2NaUalsPCCzfVWyLt+XbjA15NEZNxUCYYkPmHrK+sw9ZT8KAZQfoImkAO0AnqCNg0AFqg4gvY6BsABL7 30R/bz073drMyrZ2MGnHhQKEOusC9Vhc0wIGDgqAw6IK67GgxN6al2fdZqUifSQDBkQWSjoQILDtOWGD Deg72cY99ZhN+NE/WM/nWmNMXGHPD92J/SEdAIqBp86vJeoIvT4t11536SDQZwKCaiv2GbMcEamWDtCn PXy5mLzyM/RiuHb7Q7tx9yNUBiSEdz6ydwQIRCyqxLrCkd1izCqZGGOgySTpIDevkFVaWYynKFaKJMDx 0lHP4aNXOqs3P0H/O4tRSGKv3IlxcZUQTquY9d/zwBQljsioqEkjMVlJO59+7At2kFblGeinyoGXX18M rgmoSRtcYbrnmOT6CrkSD55PHhJJJ/L3qyKSjIv3HxNcqWK6g9hFUrGCi9lj//onrxe72n7N9RzQuB5q yKc949OMx2G8DLk0WS2jL6IqA0nq+vTxeN5bt2dy/0rPFqitTFob2WhCwlechNWSjBTcsInJSF7rIpIA n38uuIFlFJbBcjcxEV//+jddZQvP/r+ag47i88dVtFryEuSO/u/2B9BkAsOKqYJcjKvvvmdQuLLePx6g o2m8/xIAASlCrQTP40m4DABcBgBEVyISIOjviyr7ryrf9BFRavUZSQTUtlCZtkrKwudVnLM0PGqHcxpt e2qdrT2EJLC3xOZvz7Npq7NxD6aRNnzcBuIdcBDAh99j+iHrPP0gEoGIfdSCTlPkFoSmHLB27EsyaD3p EHYAJITp2AFmAQizslxK6IiKEANC508AQgCDnqgPPeYV4DJMBwz2W4/J25AI1jdLB70mrCc0eamNaNXO Jj5MePxjD9lr7cbbU/032Isj91mrKVIXSrlOTTMYxKDw+tQWMBAgPJpgUHS3o9QFUVcMi33xbR6hFvxx 6sRnUDmpEFHqzGVKsN/6CED4GLUBQEBKECDcESAQg6A232Lc2MUYuxdlcT5OWKdEaA9JRS+9IMu1l9WK t6ECs3L0Pc8dXU4Wc58kCTELclU+TafgYxS3UMRbOXp6FSnOZbi8Pu3Yp2CWQ7go0xG75abMRlLQ/eg+ w72G+41/q2spYUYrl/YFQnG8hFylStNVIIzasWdTbFPHxven5/3d3/2vJgbdj6Vaer2kia99LeF60fg8 eD15YO67XuSa1fWO6nq4Y7OQOBKv53H8jMdTTz1D3ABuWIx6AgSBYylZlp8cj3BvR8nEVF1AFRatwjiq KMM11ASU9BSvyJK2BAgS92X7+NvvfMcWLlzU7HIMBWX/2O/52WdfIN0XwzCqmbwNGYy1Apv++q//xu8h jPX/8EVCklYLtcSkONgDphrrMeRv5BUQ6oyBUQDh4xstBnreZ/BYpWZmUbKcGg8nTnosgeIMHATU88OL x9A3JKKLl+4gQdzBznAH4+NNVw8a6Wau+o2l9H2URHCUvJ3d9DzYeLTSliWX2uzNuTYmKdOGE+o7YO5h Vwc6y6CH+N9xsuIB2E49bJ2mHbPOM9Kt88xMRPo86z4PW8ACaFElDB2t8qz03Vnxuy1uWaFddI9W6we3 nV2sr7HOC8qtC3aGbrPSuT5eCZKRpB60qAoAw5hVNqRTX5ugVOeHvmtvvdLFnuq9yl4YshVX42HrOAs1 A3WjB+pIsyoSqSSxZBBvH/lMlQFAULz0kdwGS8WqmgF6FlAy+5QCk25/bDfu/RyV4WO8DB+jMnyMyvAe BVcDICQyUJxwIut1Rka2G/YakQ68Ug9lsVSBR8U01AFKYpwqGXmVH1QGZRPWAAgPxi38l//yX5AQnicy DbFdOjiTX63Dy/FFJx6rRBcdKwY4AgMo5z2P+gRaRXcR1KIkmvj4AFyBQqRcD4+J8M9g8Pg5dE5dW+pK pgCBVTZk2YW4iviaT5EHcPBgquvUaZTe3rFjrxtWP+16CsxR0di9FNJ4MFGn+XpICAKEz7qe8g6Owoz5 SEzqnKySX6rn6PcWAUt8b88+97ylU0RUgTwhgIkSY6hc8mIov2ASufdt27bzVOTHsFQrknMixVhqsavk 5hVEwVyhNJ4Y/L/9t993iU25/wqMkhSWh+SkoCYtAm3atHXbg549EADrIBuAtjkmhfH7m7/9jrXh2qmE CWfl4pEAFPR9YtyK3umzSAgZRBeWV1VhhD6JdyH2hESdtKj/eeUKMTM0JxYYnBNdBAzOMUcJsGsgnb+G ugslqMI5LHiHMRbuxVi46WiFLU0us8kb82zMikwbtCQNb8BB64Y6IDVArkGnyQcAgyMYCwEDVu7OswCD menWC2DoPTOD6L9MwoLTbcC8HNyMxdZnYan1BBS6uK0gERQ+bV9gwHELKgCDIus6OxMwQBqZshMw2OgG xF5EHvaasA7aiKowkZyFx912MOyJJ+3FrrPs6QFEHI7AfjElzbrMLbLuC1E7fgNASHQ5RhICcQiKRUBl 6D1yAf7VRkstowN0xRkkBEpbEYdwFTC4+bYA4edICBEgEJwk0UwVhOSuKygo9ESPQ1RIOnzomKVI5MXd pNh+uf4uAgjeiEUlwSg2elkFXFXPMGr1prhzWcnVRKMUO0Ea3oiD5JfvJdFmH9VnJB5rtRTAyKgkfVl9 EFSQ5BjeBx2zB7F1r/zIhN+mMVFVMaiECjlyzeXi1TiO22rSpGmexPPUk08TI/EUWZAD8ITwO10HQNiL W1Tx/Fu37qZyLq5SCl9IFUiDocScqneQiYFR+rsSixQ+LFfqAYJm5EbNzCx0D0oGFZp0zMSJ00xg8STX E/XpMwBw2u8i9l769O3W9ajQq+t5jD7fHeC5UwCWLFQGXS/Dr5dGlZ9D/r2MteobkIqoXkg3Y4XtVqMy SFJQ7f9juGfV2GaXXLw8l34rSakaAFXqbyh9r7qIqj1IKzUYv6KiGnCg0rCyP5HA9FkNWaCqphQCjUIx WUkrYtZ+/Qa5GqJ7VHyDohuL8GBk5Ra6XUH3t4b+Bf0HDHbwSCRlqvaj0MmefYo8PGJHUsgexNaUg3qp ylo5gFBKWoYdOELVoYO8zyOH6VOQYnmFhTxrrd+3MmgvEZGoUm1XmE8XSdW/iDR74dI9VNG7SAS37eTZ W4Qa37BKDIZldI0qJJgoo7DR9mXV2Xpch0n7y9xGMHldto1ZmWEDFx23XnOPIKYfQDLYZ+2JDWg/gXiB KYesw9SjAMIx60KQT89JhBMPWWLDu42wMa0w6rXtalNad7KZb7a3WR2729SuA2zygKk2mhTjnrNyYHRW /s8EhUQwKEbiyLbuM7iH2IjYbDdY5+DQZ/hiG429atLD/2JjHv6RdWjV357qt9ZtB6+OP2adIunApZXY UJmwfVBC+FQbggBB1ZcV7HCYyKu0krNeSq2AoIzTauV270O7/s7P7ZYkhHsBEO7hdVDVnUs0fVUwTjkT Ih90V5m0LKoW5avuPZ81ou+doRqO8gmuqXQXZdyvAQzXEO2uIS1c44UKWFQ6S27HJspqV+Hek98/HQlD WXep5PMrgUWZhB6zjgFNhsla8gZK8RBkitlZLY+wih9LIajE/eMyyMlI1UjDzkafsLkwdCoivRg8maAo lXhLTj7izKwKN0cwvCka8iCisPRj1ecXUyvDLQ8pQwbNQpp25KvJBqu3GE9MoeKbKtEt0CnCii/S9XWM DI1ijt0wv5h5r4pvAiQHWF0FcsodkOgtMFKFXiUWpaRnE5qrLMEK1/kVfKSQ7aO4+XQtqQopPKOkn0pA QN2MZFRUKTHVdJQrMIV7073L9uFZmEgHNc15Fpc5JteGDRvOO1LpNhkkmzhPPWArkk1CTUzyPYYjjj2Q GqAVXirS6tUbeDaMfBg1FSlZg+RRxcIgz4hiE9IwNB7nXRw4fAwgOwJQA7aQQG0vtG//YSItjwIGqHbc iwLJVA+jrLzS7Qi5+QWofNnYZBj/DOVr5AFWqAsNBE5hazrPQiT188olgcFtOwcgnL34Nu0H75JrcMsq m65aPkAgO0EqPRL3ZVbbzmOVtnZfsS3ARjB9U7ZNXJ1jI5elEStwxLrPPWbdCfPthATQcQqqAWpCh8kQ KkLHmSmoBykYEY/YMIKDprTvbtOoSjQNV9+M737DZn3/2zbre9+0qX//VZv811+xSd/4sk3/p2/azCef tEldh5CXcBiLfwVuvwd1+lpcj5IMpCbEYHAUMFBG4ub7jYiSFAhxHta+h0386Q9s3CM/sG4vd7Xneiyy ZwZutpdHH8SlmO3SwVsLpbp8Ul0QQHwSEFqCku4LXVZtxbdIt0wtpNtt6VlSoAnRpOnrWVSGq4Qt3wQE pDLIhhAA4UOClYJhUZllCunVqqLVpVKJR+yH4igX8PkiHcDw1wEBJxUMpWWbA4SDhCoKY1vgPIosPEHq cDXuPaUnK4++lBVeYbeqEeDlzBShph4Bii+nIEa5SmXj6y6AgQphktJipTQrroCim+THi5R0pLh3ua1y YZh0mDydVdi30tWxDWTllOAeLWHLKgV4yFWq+gaFXF/XqEIsr0Q6iQGmAAlEQKFWX0WU8FYPAJVPUwk3 qTWSZsQcWcREpMLkCqxSqm4q0oakDNX/F0gpZFiAp4KeuTBGobwLjKHOIbG+AilLgTv52GNk1MyFCZVH UM7ndZ6SHfo4NFB1SEwvIJTLVfeeh1uymGIxUsXUr+EchtwLgPgauheHvhlfwWPwomcbrli5yjMxVRZf XgHZA+JgL9kDpBpKTfoHUq8VZZoOKBUz7sp7OMG1VWNR4ecC4VIBA9fORmJQWTuBuzJaY0rj70xUhBCU RJwChuea+kbeJ8BULxWohnMg4ZUqdZpaB5xPkuhJvFAKSFM688ULKp1/k2jFm9aARFB/7o4V1V+zVObu gfxTlpzdZOsOl9m83QKADJuwNtWGkPnXe/4BN9Z1m4i7EKZvhwTQfgox/oT2dkAFkN+/y9xs6zo3x7ot wtq/pNIGzM+xieT7TH7qBZv8j39lU//p6zbjJ/9g0x//CXkET9hYku/GETw1DmloEmAx/h++baO/+kWb 9Pdft9FdhgA0WdZhXmULKMheABh0W5Jv3Rdl2Fvzj1mPOfusJynLvaZiNKTJSu9JK6CV7K+2PvRYGNR3 tE146nGXDgY8/7q9/NY8e37AWntt+E4Cm46jynAu4hs+SzoQIHSYTqBSAn1CZQjqQqDu1FRLLT1pWRgU c6vOW3E1LhoZFYlSvIlkcAspQRKCQEGAcBs7goquysVz0bs6qxMQTVQUJCMjopdLVwFOJAIAQH0bvQUc LeG8YjP710WAioOCGxhxQSLSKo1VAUtyL2qSqR/DaWwMSmOWvUGhqiLVHpQYrLqBkhjEEDpeNftVB/Es ufHnogYsOod0aDGugKbESXURaoOxjZWuGjWkEjBSxx4xYhUMqXPrt3GPREknUlmqVccPphVQ1XNe78kY d2/m/hVnIX97KecvBlQURKRgrFLFYgBwKqSi65ZrC8lIKltANR4UVQpuIE6/gViLOq4t/73iDaoIaJKU pDh+1SL0MuhIVqdllFUlYle7KCWma8NAOpdSijV2SrqSpKYQX/XMTCzv5q7YqL5lcKuGxCR5DWSElf4v MJAbc+aseV48Nwdmr5ZKyH2ej/oyeDVkriUbheIKFIykTExJDsVIAJIC5E0olXrC53qeeqRIveuTzJ1T Z4gvORO/e7ILee4GjNI6n5qzqAv4GWIIzikT9+yNAAZnbtI24JaVn7zJ3L1khwrPYCxstF1p9bZyf7nN 2JxtE9aR7bfqOPkEB60vHoBuhAN3mLAH+8A+IgWPORiIOk7PJIAoCzDQaptLjECF9V5QYJMwvE//wT/b +L/6Opb9H9vI19pZnzZ9rEv7UfZG58n2Yvf59hxBQc/3Wmrtuk223q93tTFP0nT1b75k45941LqQn9B2 ViGSgkABqYBAoc4Y/rovTMO9eASPwl7AYGsCGAAEgEGfyUn0TFlig/qNttEvv2gTfvojG/3Yw9ax9VB7 vu8qe3noVntzHJLMjGzrNrf4X5UOfntAoPpyRgl5DHSAFiAUInKdvYyhhkjFG3gYBAi3AIM7khK0RW1Q ToNKq4mx3WAoyy9BItpXl2QBgZrCim5F7d9u0i/yOqDg7eAEDirpTkyD+44VdaYa/Kxi3v8R96SCltxN CVjIQyHjpDc9wZ0UF70IEyUqhBo1IlH5dTUz0fYcv1WFYDUvaWJiCUTqFcsA44VekVFpccBMBT+VG6DG L2e85ZmqNyteQhWcCZ7iOqFRiAqvSFIJTWFi8PHOSs6god+kKjbJNiKSxyUAHLEYWt1JStK1tbprldW9 nVQtBX7r7lnca5KaQncqFY0NPRZOeol5tZhTjj+rJfq0wnhVylzgcIp71jkUzRmXSg+l51Us5AoBQ0ui bMPg/nzQ7SrjoYDg993tF9QESQgKIU/GTpOGGleCxNKoyEbGXu9MJdRDZ281glGfBe7zrNrHAW4nADAS l+qRGhsAKIUoN1LrQePsz6r3S0zLBSUoqbqW4lK8a1QY61PEDah0+8kzBBSdpiL4aaTS0zfIQryGe/wK DYYuWGblReJoTtuO9DrbcLSGEON6XIhFNi4pw0Ykpdiwlcet78yDLpLLYNhp/B5i/Q9bG2wDbaZhDJ0G IOAa7DIv18FA1GNRsQ2dtNsmURJwyl9/2aY+/5T17k7QVq/F9nQPiv70WmFP9FppT/ZebT/rs8bpSSz+ P+u2yHq83NEm/uM3bMz3/966DVhsb05Ot/ZziokeLI1UBABnrvIbdlmv6agIU9beLxkACH3ptzCk5yDK oj3rXoUxP6UAyjOvWKtuM0hg2kwyFLaOKRg55xQQ8Vj+mapCbE/4jSWEbspnoD+D3DF5hC3nVp9HB6P0 2dV3kBAAgzsfOhg4IBCLoPBlJTnFiU53qJNwWx2g6fWoCEZJDl5EhRZwt1R2LeoM7XUZ9ZlT6PHgQOEV nSUxEA6tdvJSKyRZJDYOcQ+FrMlRF2p1o0YFkevJm64ITOR3jhubRG3bJaFcliETAFFvAW9bpgazioX3 yaveDaycDiB4PlQ/IeqMpE5Il9R3ku3lC2ocEvoEKNdeoOUrbtRAROKrA5B3gZJIG7pKnROYMOnFIMo3 CLEYAheuq65SUpW8qk/UDEYM4T0con4G0X3pOO9UFRX+aO5G5UlIIjVqiTo4uQdH9QDC/frz871+r3uZ O2d+cGe6iy8muV/ldlVsRYj/iDNUFU48evQEbC8H7Ti2CRn/alDLpK7ovuK+DBr/0DuC6xMnIGnk/CWe Fa/AWSSUsxcYC+2TXKQEIx9D3av/hkA3PQM2gYtU/L6o8fZuWjcAhmt24sx1gPEGQHCNNOSrVFG+TKm/ y4QYn7VDBWdwmZ+xzSm1tmZ/tS3dXWZL91Cyf1W6DaE4yIAlR23A4iPWbYYiC3EhYifoROBQezwE7ZEK 2gAE7adnuJrQZX4e2zwAIcd6LMy3UdQcnPrDf7Qp3/9b69uunz0DEDzRM8me7LMW6/4me2bQVnueZKIX MOy9PGy7taWuQK+uo23UM0/ZuL/9qg1nRW/Xh+5I4w/6tbrMzsGTkGXdiEDsSZ+EXtM2ulrg6kGkJvQh alhFUEZ062XjVEz1ob+30agi/V9sY627TKXs2Tp7fRRJT1IVZuH6/DWqwm8MCD3HLLaeY5ZgsIAQTTLK FLZ83vJIbiqgg9OV2x/YtXd+4RLCnXeREFAV7rytfIYPAyAQkyADoxOeB21VQOUekoPCm++gVihmQXUY HTAAhNvUaQykqksAgoNF6PfQXOpdgKKWcZImotbzN7R1dUMNaFX1OUgZ1x1M+JwKTvosgEpoNyfJQ+3p vdGJgqzUN0CeDvdwxIATuiJdRXW5ikRz1RvQEKHJ8bJ5uKSj33mpcRlBY+J4ZwD5wkOjFD9P1A3qCr8P nYtC9t1FGCTE3QcJp7nTEftXYGQlEym6Tgwlv7oalegcuk+BWnNHJG+eomsGJvLreucm3R/3L8Mtz+8G XKlkPIvGRFKbVDgBkuw7qhTVr/8gX/UVQhy6Zakqcii7rtgPRWnOmj0fg+g+N3ymYCSVwVh2ohOs/BdY 2RUNKFvSVeJSZBe6Rlm9ayS9XYWuXMMTAHldAsLcNQZxarKCigTmYcyVF6NQeHJnMBBeanYd3kbiuYmk cQN16AaFSa5bCQtVIen5OcQTHCSycPW+Wlu8o8Rmbyq2EctzcBumwiQYAmdhIITpOk0nlwBqRxhxt2X5 1mM5doGVUFKpU/eVEa0gn8CpJNByVvO5pTa89zSb9qN/tPGP/thavTnUnuixDMv+Orfsvzx6v71KVuHr 448SnXiUQkPrbBKeBvVXHPfP2BF+8PfWu00Pe6UfLdNG78BjccS6zDgePAlEIDYHHeFa7C3XIpGIfUha GjJoEv0WiDV4jtJqD/2Djf7pQ8QbdMNuMB8A2mIv4GJ8bUKKvTotx1rNLrHWREC28ZDof93F2WpGviXS D0l5TqTPCQxiQOg9fmkwKGJDyEdCkMpw5c7HdvO9XyEV/NLuvofr0Y2LAoVIQnBAIOnpnfdRIwCEtwUO MSAACiq55gQoeJFWqRiqyRhTAAUHg0h6EFDcdkDgc2f8sFX7eXWO0uS+7UCidvSSRNRJKnSjFji4xNEM GOF4ZwpXVSKDpn8m+4WYRaCj7kfaD3YNTc4bhG1Lpbmm73U+qT/RMdq/6cbRQPpbwOHdizTJXZKRCgWz wiySZFq+l1QTfYe040wU/47f+j3q3PqNt56LOjRF2+bWbX7/Or/OoXsWEAQ7jffgdHAMUpdI9y4QkTgu m4hqPcqbIy/KUbwsB+grsB/r/z5UAidclvvZHsQ1eAwPTCbHFZOdWkOkqPJILrDCuxRHNuF1ge4t9un1 6VvAIQBsyC+4wjGiq4BF2I8iC/WsbmgOYHAJMLjgAUXED1y4bY3EETScvU7z4evUIrhqRbUXvcTfsYKT Hkuw8XCNzd9WbNM3FNmUdYXWf1Eaqy+JRABBR5KKOogAgna4DdsSR9B9ORGAERA0gwHM3/1BMOCzrsuK rcOcEhvcY5JN/u5f2dhHfkheyxD7GSrC82QTys3XalqWtZmeY+3R4ZVNOGTADJvw8Pdt1A9gYq3obbvZ G90n26sDaJk2apN1Jt+h29R9rrb0mEyPBOUnuGsRI+KYFdYXw+WwnkNtCsVWxz+GwfLRH9rIV9+wzu2H 2/ORR+GF4XvslXFHrRVehTdmFdmb8yocDNp8SmTigwDxWwFCH3ozZFZGEoJsCHSBvnaXGIT3f2k4Guze h7/AjoAx0QEBICANWlLC3WjrEoNLCu+yfc+Dl2R4lJ3B6ydIrVA5d1VfUhXnGBSQHCQ9OBDEJEaHCW9H qsUdSRTNEoZ6Q0T9IQAaVYK+eQfAiL7XeWPV5CYZmQKI25zrluwYDipSZYKaIrDxa0RgExrZClBiUOHY CJCk5qjh7XV1rYrUGzGfmE6AEEAlML68J2pe4qu0r4CBaf17qUQqYR8xr6QY76QE3fQVnX3iPwKIQQBT 8MYEKcBbtzkYBGnAjbVuh4klJNl0Wuw2Ak4B7E3dC79X30SP+UD/L8cTIk9JFnEb8oSo0KykALlL09Oo KaiCJHhlCvGWlOO9aMAOcpbfSq0SULmRWGnwKpZz+xbjHoDhqmoQSEIQCQRuSmoIgOCgEEUY6n4kXV0k oOg8YHAOIDiBobAO9aCSgKIyMm5zqi5To+MskYWnbB9hxuvxHKw6UG4ryTeYtamQEOMsG7tcocbyDBxH KghAEKQCUoABhLa4D9tA3ZZiiU+ShIB0IMkgUSKIJQOBAVKEAKH9vFLr03+RTXnkezbmr75k/V/rYC+p AMloMhmn51qH2UWARiGGyFxck4ARxU4G0CRlSJe+1qP7MHuzB2DQZ7a9OWiJdaASUlcKonSfsisEHeFa 7D1utfWl4MmAoTNtWL8xNqbLWzbp1RdsylM/pivT92zoK62sddcp9gwg9HT/jQDRLk9eUnhyW8Cg1dyy Zungfy8g0Jeh11gAgYAkqQw5SAgFdIG+jkRw6wOz2+//yu598EsAgcxHBwQ8De+KUB/Ifryr/AalRUfq w12XFFAfKKridRS8QCtAQB2FW+rzoLJskergkgH7QYK4xxZykJCq8bbnTdzz4q4RuPB7SRy3VbVJxP6t WBJx1URFYINKEoAjkFQTB4uo6cwtGtj6ddj65wIKgYYklmYQiNvXRSqOACa2hzhoRGAgQIg8KGJiV2+a JRAxeYs645LKDdrh6ffqgOVgpOa5ERgJlJolmiDJOOA4iESSDOdw9cnP22K4DW32gu3GgTICXbfl3KCk vgresDrLLiKjnSSFGvoeVuCSVaNaeV+K8YTIK+Jpy3g/lDsi4+tJDLJq8y5bhCSmmzyDV+Hmnd2+LWDg PlR416UEeZEkKQBC+ltG4wgQPPcAMLkgm4Z6RqJCnSOeILgPCSTCPqC+IEV1lzFwX7RDxSctOeuE7cps sC1pNZa0t9gWkn24lHDjiSsybNSSTBu1NIsKRdnWEebvABBIVWhPTEG76UdYuY9YWz5rw/atZfjpURek JjSrBglAoM8cDKAuHNtubol1HLXTxqBWjfvG523qj//RBr/SzroMWE6sAnELuPq6kMXYBZtAF64hCaDD qPXWevASe6PvXHu972xrNWCBtR++gnoGG607wUq96IvQd9QKG0jw0tBu/W0UBXrHvfGajcXmMOaRH9uE n/yTd3Du/+Kb9kaHcW64fJo8heeH724GgzYzC6393HLAoLJZOvjfAghj5q+m99tqGkKusrHz1tiezFLb n1FJDniNHcmpI9vxPbsotUH2AxkU34O5ZVQEDJTodA/Pg9dIUDiz1AnZGFAhRKq/eCcCBBVoVZGVm9oK ENTrQYVbKeAaGPodZ/wwuWSEDH/fY/8ev7kH43vpNgHNO0gfDjYUfFUVJ12HYwQYt1XqjXPGKoozfLM6 EqkpAgwASdfxazvjAFT6TAzEanobppRkEasx3r7OjaahuKyvuFGvy1swRixRBKaOmN0lkLAfKDDRdTFt /FsZXvXMMsTG9hSYV8dKIrlJ1WtRbBtxEJAK4+pUJEF4N+7490GSuslzhTHW+ALiXhNTQByATzH/3n0a Y6Zb77H2y8MhgAiExwMPibwo8lKcxyB7id9cFZjpHJL2NN6oh7eUCs+5VWbvhjf2eRcQoAUg93WNZ5LK FewE5BoAYBexiQgATpGGfBJqIMGt5rRch9etsOEqKuslSy05b0eLztmunJO24XCVrdpH9iG1CGZtzCKW AAMhfQb6KOloQap1n4MfX+G+bLvNwVgHdZ1DaDFM2mMFfvkkaKVItgKBQUSfAQQxIAQJoYyCIpy3x3Qb 8yhdkb75BRuv4KPnsPq37W6juw6zkf2m2wit8oPJGO4zGYlimnVHdejSb5p14+9efeitMGAyEsBYG0EU 46j23WwsfTTGyz5AO/dxP/m+jfneP9s4DJcTH/qejXjiMev3anvr0qa/vUxY8vP91tirGCuVp/D6tHx7 c3a5tZlfY20XNVi7xY3WfsmJ35heGpVsifQJG0IMCA4K89dYcmqpJVMaKjmtCmCoslOX3rOzNz+0izc/ sitRLMLt934BCPzc7r0HCLxL9CLAINuCIhmVAHUTULh1VxmSbAUCiBg3qKlwDbruoKCJKoCIG8Bockly iJrARIwqZr3Lan6XCea2CehtqScuhQSVRPsCnQAGLeTqSMQQvq929l49Wp9rG1SWGxFp3w2d3oQmNn4G D4l7RBwIggel2Qgqe0XzsVJJgvdE0kUAEDFfJHmIyX31lsoU3YckIkgSkV9bhWs53u0nunedC9C8ycru IOIAwz3rWaLnkTTg54yfTddlPG4xHhr7WxiFb1IL8yYZq6qJeQtp7breBb+5xv2KwWXAk2dGjHoBL8l5 9i8AABfVTRoGvux2FN1DaOt3nXN4Ojyk893EA6Vs2Bs6N6Cg83uDYIEC17imaFckHoUXn6f5zxlaBJ7C M9FIcZIawKj8FBIBvUQLSbdPq7xgh5EI9uWfILAI9QD34bLdZCBuybU5W/NsHIVJ+s47ZL2pPNRzNpmA 82UzoICIg0GmdWO/K/tdyTXoAkj0SMI3H6kIwXgYwCBROmgGgEgyuB8QKqhpkGOvkEXYoct4G00Doon/ SCzC33zVprCdSqWiKQ9/lzbsDxEj8JBNwiMw5fWXbCz5HKNavWljXn3Zxr0IeDz7hI2nEevER//FJj8W aMoj/2xTH/0u4PI0x71mY9p0sl6t3rJX24+257rMsqd6LLHn+q22V4fTUIWiqB0JbnpzriSCWmsHGLRf 3PQbA0EMGr8dICxYY7upEbc3rSKAAoBw4uJ7lGL/wM4DCBfIerz99i/t9ru/wsD4SwDhF+wHyeAmEsNN AOHanY/sOoBwhUkid6VqKVyhBNu1a+/bpRvveX3Gq0zy6zDAdU0yZxgmNCSGlegfVmwxhkRfbfnM1QWA AKaXZHAHQLgnQHAvRrBVaAV0tQRGuME1bnDdQDCQN5wJk1pMJAbTuQNDhXuQZOG2DShWO5rtHHyvyR0o GCqDqzQyfkYek9DuLvaiROd0EGoxpDpQ+DUiiUYqUKRK3ea59BwBtIIk5fuAY+jALUkmUgUcFGJ1h+94 RgdgxkkM665iQOAG7+OGtgJoPr8BSNwAIATM1/UuOM9Vnu/qdbY83xXeiwOGAIDvr2k8tfqL4fV7zqPz C2h0Hn12XVuup3J7VzjPFdzVlyjhf544lvMX7wICd5AGbloT7sNaQKD6JC5DJJAiGgLlU68wg47jx/Fw 7aMwyZbUatuYUmVJB6psFhmI49Zk2lhKiaucuFKQu1I9qBslyLqpOAn1ArrOlUSAyA4gCASUHKRtF1yJ sb1AtoJE6eAzQSARFJAQOmK9b4sV/3VqEb44dIe93m22DWjby0aQbTr20Z/YRMT7id//Oxv7L39v436A J4LahmP5e8y/fIf4g7+1cT/+O5vw0D9jDwAMqIw8/qmf2hiqcY94vY2Ngoa/0cE6tRtkr6IavNB5qj3d da49/RbhyH1W2gsD19trI3ZZa7wXCjzqOqfI2i6o+zeDgUDhtwaEvakVtgdA2CtASK+kJfz7dubKh3b+ OoSkcB1AuPU2QPAOngekhGuoEVexH1wRCLBKXEYauCyJ4sb71GOErr9nF669a2eZJKcvv8P57qE7Quiy F1k1LkHX2L/iYrH0zcCsQcyUuMm+xGYxtK/qEcOKiSQVRKJwCxOJ4TW5xcBaBQEBfn+N6+s8mvC+anF+ fXeVSXsDUrCUruGgJDFbK65ASsRvRWKYa7onXzFl0MOV58ZE/tbq7d/xt7wd7uUQ4Ak4YvDjcxhYzOfA EpW3996ZYmLUrBvaRmAgZveVX9f136goDde4EhjXn4cVXPeuMdQz6hjRFX53gXehoLJrAICqXgmQr3Av F/Q957uCPeQK57nEWF27prFg3Ljny3x2meMuw9x6lqvczxXGOXwWAF0dvS5yvguM3QXC289eedtO8W5P k258Gs9AE27Cepi/DltANfUHymD8ErqK51SG0mTpxafseIk8BSdRC0hDTm+0HVm11CSgTNmhclu8lziC vaU2fhX2AdUlSEojwCiNMuL70dVJS4a6kITkYcaAQWeBAVKBshCdiC/oBLnRcLkIu4DsAwk2gt8EFFRT oP08dHXcdfIqPAcoPNM7yV4hbPjNblOtW6dR1rv9AOvbYQAehd42+I1ONuiF12zQq+1sGElP+ntAuz7W p8sw695ltHXsPNZe7z7LXsBj8ORbS+xpIhyf7raA7UJ7qucSe7Zvkr1I5uIrSAWtxuwnijIFe0guoFfs gUeuIvwbJIPfWEKooLZ8OVSBT1fbGTSZmLVqr81Zt9sWrCXzLqvK+z1m8ALzSmmnjS+4HrGyEf+4yqud ZXKegMFVnfk0k/PUJSYGGWdNxJU3XLhjjUyQelmNz97mt2zxKdedlfEIYquMtFPnb/Ob25wLYnuO351h VTntKay3CGKRK+ouCSyIt0y+y1jdL0vU1SrE9S8xGQUsF2Uw45iLHKNc+CbO0YSuKv/1SbXwQjRtIsKt kYlaj158EpH1BFGNJ9Cjm5Qdx0Q+x72eQVw+q+Airn2eZzyH+1AitCzgwR1Gv0DoNIE2jei96jas9NrG JvRhVr4aIgnrm6j9r8+4VgPX8S3GshPozE3ozKf5u4nz65ynlJ3HM5zB0q4svbPS7TnmjAJyuJ/TXtiD CESYrJGknVO44U4QnNPE9RpV/QeLfBNj23hKY8rzsa0+pSi+mzDlTasl46+Wa1fTFr2SQJ4qRPPyE5QN o0hIGWXFSzHeFfPui0kNLqilsCgrdmEdzUxg4GIMy3kkueUzP1RiLL+K4jkVJ0l+O22ZzIlMxPsMxPvU vBM0LGn0Mv5HcmvtEFWJD1GefG96LZWJa2zbUVb9g5WWtK+EoKFCW0iB0tlbKL+2BmPgilQbteKYDcc2 0GdxqvXAU9BtNnEEih8gkrAVocZvToQmHPTw4nZEFIraEl3YbqqqCVMhiG0bqP0cPkugtqQqt1DafdWC Hkz0+bS/W03PszeoMvTa5Ax7edwRexYr/88w8P2050p7rPsie6zrfHu8y1x7rMtse6zzLHu48xx7pNMc e7TzbPsZn/2s0wy2s+yJrnM4Zq490WWm7z/Bd76Fnuw+D/VgkT3bezm5CavtpSEbkQy2E4W4B1XhEMFH cpumuFvzQbfhr3uGByWC54esJ4iqhY4UEdCVQJ+roLikQKFSoMBkmEnHmRnQzFUChl22D1vCYTLF9IKP UTylsOaSFTdSeooS7RUwWB1x5TVM1Fq26vRUSySZQKOKCVmB77is6YYfX9x41Yprr1k5YaZl7GtbzveV jddZQTi+CVGSv2s4r9OJaw4gDXxWz9+6Tj3nreG8dUzyRsCk/gyAc4bVCEZuPI3Pmlh2MUYtzFIBlXEO TfoSUl/LBHiIpaV1VIKqO0dwC4RbtZRtKatXBQxcjghbyWqmGvzVJALVEy5bD+MoIq4OC3st34kqCYyp JFeiEl98OQU3dG6Rcu2LGc8SVsFi3LdFeGxKiOkoovpUGfkFpTBRKYxWquvWn7PKBs5DERpdt5zrV3Af ldSgKBGjckwFx5ZXcV/43stJ3RVgl9IToAQGLYYxS8nkK6UycAmReoVlSu8N3xUSUFZEKG8BFvpCdPJi Ik/zuZccyutnw8C55Ktksp/BCp1Bp670YjJc8+stBWZOL6amJuXH00hyS+P79KITlgZpUUjNp1YGJciP ceyx3FCK/ABMvz+j2valVtme1ErbdbzUth8ptS3QpoPltmYf7kGqEC3dU2KLdhTZLGwB01al2SRCiccv J5yYnoP95tBzkPqEairSiYCdjvIS4BFor3qEKkc+4QCBP9DYA1HOQZoDQAwCbWCUNlNSnZrB4D4gEChw DJWLfh0DPfi9M6CDQk4ECkfthVH77RkkhafIMnySAKXHCVUWQPy0x3J7DHpU27eWQUsDUdpM3+mYZ8h1 EOM/25dYhv6rAIA19uKgdZRN32yvAgKvj95lrcaqNLuAAJfplOPWXklXPKPCjv8dAAEgEBgIFACEGUnb AyBEoOC2BFSHg5lVgEINIh+rhVaQWqLFmNCl1KQrYVKXwkRyFZUQPFJCrbpijERFTOpc1bPHjZldRqx5 ObXrFBItYuUpqOZ3TPj8Gq1Q/LYOsKgl+IT9IkWj8XeRSNditVKEWkk9x3KNUtXDa7gOQ8L4ZLiVNFzj XgAd7ddd5f6usNphqOLa+ZUnqahLHz62ooIqpB2YtoD9EvaLxMw05CgijbgYhisXgAAUZYBHqZiT/XIn /ua78moxHswPU5ZUn7ISCnMWIAbnw/D5MFEuDJXH3wVlJ8LnVPHNZ1Ut4PsCumIVwNyFFZCOBzjy2Ne2 UA1yVPab32TxXR7nyhaVNrJtslzOk0cz3hzyTbJ1DfbzqBKcW9ZE2fATfH/S8jh/NufLwW+fhU6uCsJZ Oh9Mn14EQxdR76KwwVKorp2i6lh5dKKmbF4qHqWjMPmx3Bo7xnEp1A1IAQiOEfyTUsBvSCFOyWmwY9l1 doR6AvsR7w9lAAZp1XQtonNRCmBwuMK2I/JvPVBsG6G1+0tsJQbBpbuLbdH2YoqU5tkMMg7HLQMMCCdW ZaK+AgIqFHtIMbYBpRu3o1JxmykhbuD1sQfpVxDoNagNWYltYJAYALRtnUAOCA9IBTEY/JsBoRkUqEc4 OdNewZ7wMoFBL4w6YM+PSHap4RlCl58Zss2eHrw1ENGET1PwNJA+2+bHvDKUIqjDtiIBYI8YudPeGL0H SWCvvUkvhjaUX3dpgGQrlwh4TkkFMRj8+wOCVAb60QkQYlCQLWEftF+ggPqQwyqYS1izGrkIGApYifIo UpkH8+fDLAKMnBpWHyZjBnkRKaxAh/IbmWxNuDFP2tECRMu8BirbMtGYdOmsWOlF1F8ooeItK15WOUTF pmzOmcGql1vO+VQEk5VOPulc6aGASS5gIsoDPAoAjDyogP1cJJh8Ps+pxocN5ep8XCOvhNr7ME6+mAdw yHWCSSEVzigEFApdbGZbzQoPFYn0mUp0s6/vC331F0OL+WB2zpMH0+VwXjGpGDeL58qE6bIQpbOKuB5M lc31s2HKLJgthxU6Q1QEeDijczz7mTBgJsenw+QZMG5WUR09MlitGa90xtC3nDejkHZ7UAa9AzI5Jo3z Z8C0GYBCBufI4Dqp7Kejn2uctbqnifmzkQLya2g0grSHWH8kS5Kf3MvsQ4e15e9jVM06Ch3nmilIBSrN f1if0Zdgv7xP6dVucN51rAJVoNy20Khk44EiW59cbKvpV5C0I9dW7si3JTvzbSYgMJPaA9PWoR6sy7Jh S47biHmoB0gGg+hP0J2moypU2oXoPdUmbEONwraT1JeAmoQwyMvo0a9Ar47d59vWrJitJ98PAg4I+gx6 UEVIBIP/W4CQCApECL5OYNCrk9LsFcKHXyZs+SUA4iVUipfGHE6gQ+yL+IxgIn3fiudQR6XWqD9tkADa TgYAeKZYEmgGgEgieDAZ6f/rEoKZfS6R6utVLIPUVUj1BKbRn27GqmSbs3qvzVu330bNXW+j5m2zMXSK nrZ4h01ffZi+dYewNxy1uVsO2rxNR2zhllRbsDnF5m8+bgs2Hrd5G/lu01FWiBSbu47txlQ63KTa4p1Z tnR7Ku2vMmzlrgxbsyvfVu3KtFV7s9nPtqTdObZmbx6VbXL4LNfW78ux5XsLIL7blctnebZyT44lJWdy jmxbuCPNFm5PowDGcZu/4SiTkbZadNuds/6gzVp3iGYah23e2kM2Z+1Bm809z1pzxOZsOGZzt6Xbwk0p tpg2XMt2pljSznTE3DRbuzvTVnPtjQfybMMB7mVfNgU2uPa+DFuxI92W8TxLNhy3ORs5z6ZDNpsWXlNX 77PpKw/b9FX7KdnNtbnOdGjqqkM2d8MBm8nzz+f4udzP7A3cz7pU7/s3az3n4Z7nbeDzdcf57ij3fIQu QIwd46fv56/jXjl+/kbGcf1hGoMcthk8w6yVB2gfdgip7pBNgyatOGiTlifb+KU0DKGV2KhFtBSbt5eC obtt5KK9/L2bxp+7aRO+y4bM3mNDZ+22ITN32/CZ22zQnN02dC6NRek72HvaVus0dpO1G7PZ2o/ZaG0J vVW0XYex66396HWE4rIdEfbbax96c+QGVj504FEbcJexHYkoPHKrvTh8i704bDMJQJvtRbL0nh+00X42 aL39pO8a+0mvNfY9sgW/12udPTRgiz3Uf4s9rAYi/RDJh+6xJ4fthXb7/k/6bLIfJ9ATQ3fbE0MCPQ6p z0AgWpN5e7JAD+b9/9v/Vg/EjfZQzw32UI/1Tj95ax20toW680wPUuL3HB//9qGeOlc457/lnn46eJcl 0iO9VvG8LfTwW4stkY4j5SXSg/x/Hxjoy7q6AAj1dLYVTVumhpW7kRxoYJlEJ5rJK23IlNU2dMY6G0m3 6BELAIfF25loO2zskl02dulOiHbX0IRle23S4t02bslexES+g8Yv3cP+XhuftIdJu8cmrEy2STDPpBX7 qXQLJe23Kcv32+RVByh9vZe/99pUJvyUVftgKo7j+4n8ZjI0ceU+m8h5JizfjQjK9Zbymc4tZqCv3vjl e/27ycv4fqmIv9mfyGeTVuyxySv2QjTjXMk1ab01leebsgaG5j5mrT1gs7kHbWetA1AAkul07Z225gBM COPrHjj/RH4/MYn7oMHneM45jp5+4/SM3M94nn089zSO55yoe+F6kxjPCdzb2CV8x+f/n/LOrqlpIArD /wrxRuEKkKIOAipeeiWO0A9qaUnSCEhlEJhSYMaBli/7QaWO/sLj8+6mqHin6I0X75xkk+xmM/s+OSkJ G3M+Zc452qeMbeUaZsW48S5vx+maUqY6XD3qg+pn/1XaWDn4auU9P4dgwPEhWq5eWlj7hPm7Vqh2mT24 Y7mtDga/4H/+8VrtFuK7+0WW8xufmAWYGYWlCvu8u7D5jbYtvG3xHX7TnsdnNls8tmeFE5stHNvs64Y9 Rk/zDXuSP7bHRK0rTkssPyA+RBOLDeYIqNt9fsCaWDy3ifzHJJ7bOCAY47l5LHMKBOp2Gw3OHdmtuYYN pwEC8w0OObVsFAiMJKYfw/B3Mbl0J5Eg8KOug+BmYXAdLH04eFP/LIAhaFzp+3Zv/t8DwHVo/BMgeCgk QNAMtgzaDUGBAZ/m88zc6qGbq15gWNppMq11mxSwDRw6pIMdKwKJ5SqqCRRa7lrAIA13GeDEaN8P9mCP SJYR1TxEygeXFrMtpiwGMmWWg2R7dMDxLAe1nitT3cFe15ehUOvUHbh61S7rmELtyCCh2pIwaqR2nAQo gQvDOlAAJwzudAgsMP07oLNOrACmVWfszw4qK4IZplYdq0gxdkZXxOTEcE990j6UY2ZXjpHLrGt/9SlG OmftGwKB0jbThG93rbSDqlwb9o32v3AtJJbdOnVxDhGQiICtQBAqC9jtWVHXf6djSy4KAm3LbbaAgtQm AxAMPBAyxEylaelKi9giNm1+/aOl1ylb45PcuGlPC970M5h8Jl+3GUwuTSdxBuOrfJL1qRzv22f54Sx7 ZOMola1bis90UwAgBRTGpeyZ3UOCwWjmxAZfNuwWnxIPvgAILw5tmLv7EGYfWlAm4IHQzwJk/D4IfgVC DzD0rjKCvwuCm8w4/qyufwaEPhQq3NUrDD4PBYCw8sEWUEZgWDviObBpi1tNyzPg8tst0s02ajEg28CC QamBiUoA4koCBmZdBhCKgcCh6MqS/ZK4jClKVYHmAuiwnWUNeNWpQb9Ee5LaLNCma9sBSm0iIBUg344H g9oLgVCIEQWnsjPmJRkGRiPDeUOfVxygvHRndkqMLnBJ7ljqE7g8rPpgog+0J0gpe1I7vq0+sC4BGn2n TPtJ6ntA/wqb9AmjFtHS9oW7+0e060Dgzsmvh6T8go1iCRAIBrqeRY4RCNy1ceYHAu9bSWRdUKAsvwko iFm+xXcAkN7yjj1AmCemia+YDMRnAQkIcoAgx9/gMftUEqcBwCM0hSZRKnPI/AAAIU1M11k+5df4M6d7 EjAYzfrsYERAmKsDgiMbAAYDRD0SOCWZwGihx+OAlwx/h2nLf5TKRkib+/pfQNDPFG4aCN8Ax2fzLWx8 FZYAAAAASUVORK5CYII= System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Company 3, 230 6 True lblProduct tlpMain lblTitleI True ================================================ FILE: Samples/RegEditPHP/RegEditPHP/dlgAbout.user.php ================================================ The "About" dialog partial class dlgAbout extends System:::Windows:::Forms:::Form{ //Called when dialog loads private function dlgAbout_Load(System:::Object $sender, System:::EventArgs $e) { //We need some info from our assembly (set in Program.php) //The easiest way to get assembly is get come type from it - i.e. dlgAbout $Type=CLRTypeOf dlgAbout; //And then query the type for assembly $Asm = $Type->Assembly;//So, this is our assembly //Now query the assembly from info stored in attributes and show the info in labels //In each step we get all the attributes of given type, //PHPBUG: // select 1st of them (using GetValue because [0] does not work well for non-Php arrays sometimes, currently // we are sure that there is one (otherwisa exception will occur) // and then get value of the information and show it //Product name $attrs=$Asm->GetCustomAttributes(CLRTypeOf AssemblyProductAttribute,false); $this->lblProduct->Text = $attrs->GetValue(0)->Product; //Assembly title (aka name) $attrs=$Asm->GetCustomAttributes(CLRTypeOf AssemblyTitleAttribute,false); $this->lblTitle->Text = $attrs->GetValue(0)->Title; //Version $attrs=$Asm->GetCustomAttributes(CLRTypeOf AssemblyVersionAttribute,false); $this->lblVersion->Text = $attrs->GetValue(0)->Version->ToString(); //Now we can set titlebar of window $this->Text .= " " . $this->lblTitle->Text . " " .$this->lblVersion->Text; //Description (note: it is not localized) $attrs=$Asm->GetCustomAttributes(CLRTypeOf AssemblyDescriptionAttribute,false); $this->lblDescription->Text = $attrs->GetValue(0)->Description; //Company name $attrs=$Asm->GetCustomAttributes(CLRTypeOf AssemblyCompanyAttribute,false); $this->lblCompany->Text = $attrs->GetValue(0)->Company; //Copyright $attrs=$Asm->GetCustomAttributes(CLRTypeOf AssemblyCopyrightAttribute,false); $this->lblCopyright->Text = $attrs->GetValue(0)->Copyright; //Finally load readme from resources $this->rtbReadMe->Rtf=Program::$Resources->readme; } //Handles click on link private function llbPhalanger_LinkClicked(System:::Object $sender, System:::Windows:::Forms:::LinkLabelLinkClickedEventArgs $e) { self::GoPhalanger(); $e->Link->Visited=true; } //Handles click on powered-by image private function picPhalanger_Click(System:::Object $sender, System:::EventArgs $e) { self::GoPhalanger(); } ///Opens Phalanger URL in browser private static function GoPhalanger(){ //Just start process with url try{System:::Diagnostics:::Process::Start("http://codeplex.com/Phalanger");} catch(System:::Exception $ex){}//And ignore any failure } //Handles click on OK button private function cmdOK_Click(System:::Object $sender, System:::EventArgs $e) { $this->DialogResult = DialogResult::OK;//This is not necessary since nothing depends on dialog result of this dialog $this->Close();//Close form } } } ?> ================================================ FILE: Samples/RegEditPHP/RegEditPHP/frmMain.cs.resx ================================================ text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAGNJREFUOE9jYKAW aGho+I+OiTYbpPHAgQP///9nQKFB4gQNwaUZZhg2l6EYDOKQCqAGQFyHMADV+ejeQeZjNQBbGOAyZNQF B8AJDhj+VIwFXIkFnzjcBdCkCnMSqTTBlE57BQAHeeYQb3jOvQAAAABJRU5ErkJggg== 296, 22 &Klíč ... 293, 6 iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAIhJREFUOE+9kw0O gCAIhfXmHs2bmS97DH/YoLXY2LLgg2eQSyktBa3nZEkBIGKIn4q+AaCgQDQgpdblDKfpM56fRMgeTsAa SIj1vtb6MQAteySws62DyJ9ArFuC1Zkb8N8lWpVcEqDHMnzTzrjpDjhVa/A2db1NDp4A9CKeEg6LekOO gMBWyy5cVhhsBP+FxlcAAAAASUVORK5CYII= 296, 22 &Binární hodnota ... iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAI5JREFUOE+lUwES gCAI05/7NH9WLoOgZolx550lmwNHLqVsKRgNkxUCgkgg3126QoALlWSFoMlH2X1FCaTcWqsnSAnN7P2Q vXyzf46AASzINllyXxV8gXE+VQJ73ikFtqRRXx4KImaiJfwigJxR4Mwu6gNx1T35tOvluuY8MZ72wA4i A5BBPUgoQWCqVdUOvHGH+nw++r8AAAAASUVORK5CYII= 296, 22 Hodnota &DWord ... iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAI5JREFUOE+lUwES gCAI05/7NH9WLoOgZolx550lmwNHLqVsKRgNkxUCgkgg3126QoALlWSFoMlH2X1FCaTcWqsnSAnN7P2Q vXyzf46AASzINllyXxV8gXE+VQJ73ikFtqRRXx4KImaiJfwigJxR4Mwu6gNx1T35tOvluuY8MZ72wA4i A5BBPUgoQWCqVdUOvHGH+nw++r8AAAAASUVORK5CYII= 296, 22 Hodnota &QWord iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAJBJREFUOE+tk4EO gCAIRPXP+TT/zDoTRnqltNhYbcHjCMgiUlPQzpxsKQBEDPG3ol8AKGiQFUBSqnC1noi2L48CFFRKmQFa DU8ENKldwaiEAkymk+0T/ftSgfa9DXgK3Aawfsf+/TRe/8HOYv0L0JGxyvjmne6BbtUYPG0dxttvx1rw h8gSyKE2CAUErtpu4QCx1HhPZJRr1QAAAABJRU5ErkJggg== 296, 22 &Řetězcová hodnota ... iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAJBJREFUOE+tk4EO gCAIRPXP+TT/zDoTRnqltNhYbcHjCMgiUlPQzpxsKQBEDPG3ol8AKGiQFUBSqnC1noi2L48CFFRKmQFa DU8ENKldwaiEAkymk+0T/ftSgfa9DXgK3Aawfsf+/TRe/8HOYv0L0JGxyvjmne6BbtUYPG0dxttvx1rw h8gSyKE2CAUErtpu4QCx1HhPZJRr1QAAAABJRU5ErkJggg== 296, 22 &Expandovatelný řetězec ... iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAJBJREFUOE+tk4EO gCAIRPXP+TT/zDoTRnqltNhYbcHjCMgiUlPQzpxsKQBEDPG3ol8AKGiQFUBSqnC1noi2L48CFFRKmQFa DU8ENKldwaiEAkymk+0T/ftSgfa9DXgK3Aawfsf+/TRe/8HOYv0L0JGxyvjmne6BbtUYPG0dxttvx1rw h8gSyKE2CAUErtpu4QCx1HhPZJRr1QAAAABJRU5ErkJggg== 296, 22 &Víceřetězcová hodnota ... iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEwAA CxMBAJqcGAAAApdJREFUOE+Nkt9PUnEYxukv6K6L5uZF3nTTbOuiuumiKy8Sy7W5tdZF6DDMtMylSWUz ZoVmuJjMBMTI9My0peVmDX+loagF/QJU8HcCogI7Bzic8/Q9HLZu3PC7vfvuvXg/z/M+ew8AkKR77r6j tkMZh0MHM09mzI93ZWWdPrdIB1yONfdiTCIA0lXcKTV7B48Du2qsjBaQvwmeD8cQsef0pR1Own3VLoS1 ADuJ8FoP+ccg9FvOmvTqAsDZnckvWfIR+dsLDjug/f0Q+tWhE/sDEAd3sdtMIWqhCIQiTijSg/Or9gdg XXl5no/ZFLeppIL6M8CQTMxg4QYkhjc/0PbagdZX36Brn8UL/TQ0OiueaSfw9Pko6hssMLfUYqRXCf67 CtvduQj0FCA8X4J16yVI9J0O8DwPluMRYznQUQ4hmkMwkoBvh8VakIXXFwcMOuBeNXBFClw4AvX5UyQe cgJtZjs4MlzesgqFZgWyhmVcrvfCH2KxsZ3AcmDv4bJbXSLgJbHOJnhcrPNAen8BOdVunK10YVNQ32JF ZWUVUc4F8kVlq4vB9bJOEaAzzSHO8mDiHCIMh21i3R9KYJ1Y38v29DyDCScDRalZBLQYZxAlw486ZlDX Po2HRise6CeBgC21M1FO7XyzcQBl6vcY/8OgWNEhArR6G+gYCY5JJNV9uyl1ASAUWUGwPeuJYsrN4AsZ Hv1FQ15sEgHNrVOIkOSTDkzEgUF0YMsmV54armweQkXTIEQH/Rj+SaNQ3i4CNLqvSfVgOJEMbj0Yh9cf h3sjht+rMdiXYphd/K8+QtQ/O2jIigwiQDgYtWYMjxuHUffkE2pVg1DWDqCq5h1u33mL8goKpSRxRYkZ 8msmFBYZcVWmT5YA+Aehl/jy7tE8WgAAAABJRU5ErkJggg== 183, 22 &Nový iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEwAA CxMBAJqcGAAAATBJREFUOE9j/P//PwNFAGQAOgYaCDIVKAw2HM7GqhabIEwMZgheNVQzIDo6Otff33+X t7f3THd3dwGY82EWWFhYlAPxfyguh7sSxPD19e338fF57OHhccrV1fW/tbX1I2QDgJrSQBqRDAMZ5AJW AyKANtbDJIGGvLW0tIQHIEgcqPgMFgM64AaAGEFBQX1AfNXLy+sbTDEsEBMSEmBOh9NZWVkQS4CahEJD Q/+HhITcA7IF7O3tb5mbm6O74C7U72BnI2OQ/ysCAgL+u7m5LXZ2duYHav5mZmaGbgAsAFcBDRIEYqXV q1dD1ACdLGBjY/MfpAmIb5uYmLwzNjZGMQAaDh1Aje9AGGQhSizY2dkJAwPOFMN50NRIVkKCJWFCqREj H6AEELkuoFpmwud3mBwAxyxA1dGzKyUAAAAASUVORK5CYII= 183, 22 &Přejmenovat iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEwAA CxMBAJqcGAAAAhJJREFUOE+Vk31LU2EYxif0TfoCwf7qSyTVB5Aos2bDRubKajGsRGz1RwQuSsssI0Vn Ls2ypA10ypbBKtecx9f1QiJkpaTJr/t+9nKwlOiBH+dwnnNf1/Xc9zklgOO/VukOU5CY23A4xylxXAkv oFzt+0ggnKUxNEtD5xT1D1JcbEvib36Fr2mU2mtRaAmCr5b4LofBmAcezfNrA4OudbmursPyT1j8AR+W YXpJNvLFlJXCvp1c3rs7J9DYPcOaFCl14rgV2xUbgYbODCtrGNR5Rfgm7kur8Pl73vncaSjbA/tzzp4L vcbdCFxqn+CrFCh/um/lnHiT2SxQ15o0Z1VUwOnEwGLcNMw45888tgAj45N4/D12An9zgqw0SlGB4lIB RZqnsXVveB5exjNUne+yBXxNMSzpslIQCAaDuTHli/Vt3YvMwFAsg/vMQ1tA55v6gmFTAjuLudO95xb0 Ry0qT7XbAt7AIK8/YdhujIXnAxl4HLFwnbxrC1TX9zMqzVHGshCTc47I/fAcRGcl8jQMivPAJITfQ2jI osJz2xbQjkbkReVfCUIT0PXCotx90xZwn+3gmUQzTOWuT4UnQp+49oprTwq6pbjjbU7goEv+icKHVBB4 l06TTKXRD0VnrePSjmvT9NwaXYv/Eqj03qdIzT1cXqGmjaPVrRw5cYfDx1sor7rFoWM3xLnJcKDiejHB b88e++xiBDeHAAAAAElFTkSuQmCC 183, 22 &Upravit ... iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEwAA CxMBAJqcGAAAAjVJREFUOE9j/P//P4O3l5fBP0aGHob/DG1MjAwHtm7d9o+BWODo6MLs7OKaDqT/Ozk7 f/P28g709vFmBhmMjq1sHViCAgOU3N3d8mByDECNLECcZGfvtM3c0va/vYPLHw8Pzypfb1RDVDQNOazt nZyArv3u4OA0B24AiAE0QBKILRwcXbZZ2dj/t7N3+O/v673R19eHGyRvamHL6e7pucLW3um3qal5t5ae CQ+KATAO0BA2IC6wd3D+bWfn9N/H13eZpZW9npWV3WRbG5v/eoYmk9W0DPiRvYbhT2tbW0Z7eydNoJfO m5lb/zcyNvtuaGz0Xk1Ld52yui4nerhgGABToG9g4qCnb/LT0sr2v56+0T0FZU0hbAGL1QBjExMFNXWd S7p6hv+ABv03MbX4r6Wte4soAwyNTOXVNLSvAg34o6GpvUZETNJETl5lm4Gh8X9Vde1MvF7Q0NaVkFVQ PiWnqPofaPshSQkpIR4+Pm5+IRFueSW16QYGxl9UtQxksQaihoEFh5yi2iIJacWPOrqGT7R19bVgCnkE BDg4Obn5dPUNz0rKKEySUVSDJzR4GEjJKniLSSj8V1XT/q+iptHKyc0LTgMwzMLCzAQUV1FRUb3PKyAo r65rwgSSAysQEBBiExERaxUSFv8vr6C8i4OLR42HTwCsABkLCAgym5lZTubm5TJV1zNHGABSJCOvasTK xj6RgZHJjpmFhRdbiINtZGBgYWJi4sKaEnFpwieOMyERaxgAd/H0VrlTD2AAAAAASUVORK5CYII= 183, 22 &Smazat 180, 6 iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEwAA CxMBAJqcGAAAAUFJREFUOE9j/P//PwNFAGQACG86dOM/Ol6378r/lTvP/1+y+SQId8PUItNgzTADgDRW MGf1gf9mXilYDYEbsH7/VVz6/6/defL/rqNXYIb0YHXB6t0XsRpQMFP5/7lrZ/7X9y/5b+WXDjYEqwHL t52BG/Dw5bn/II0wHF4t8H/dzlP/Jy/ajtuAxZtOwA0AaTx2dRWYH1Qm+P/2owv/X779CjbA1DMZuwvm rTuMYgCM8/PXn//vPn7///D5R/wGzFq5DyMM/vz99//T159gr9x6+A6/AdOW7oIb8ObjPbCm7z9+/7/6 8AiYffn2a/wGgPwHA8gBCGLvOb3n/+mrz4k34Onb6//9swTAAXfn8fv/F2+++n/k/BPiDUAOuKt33/w/ efnZ/72nHhJnAMgr+DDOaITFMUgBIYw1JWLLacSIAQBXZuNaAr2wAAAAAABJRU5ErkJggg== 183, 22 &Obnovit Obnoví obsah aktuálního klíče 183, 22 &Vybrat vše iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEwAA CxMBAJqcGAAAAfFJREFUOE+lk99LU3EYh0//SSlDqptu7KqbiDKlwKDwoqAgi652oVddRYZBVjMWONsW 1ixlm53pItJFysy1NJk5169Jy8A2mMo5upzTM3va+UpTF24XvfDcnO95n/f9nB+7AOm/yjv8BR15KCJw 9ofo9L7jts1brctLIenNheXoC3K56SkHa+oPlBR4BiPb+rPrv2nreoUvEOFsQ2tJieQcmBACXxTkDxCO qdx3vEQeUXEPK7j8Co8GFMy9C4Lzd+OHtm4ldXqD+Q1W17KoSxniyZQQFFZz9xyVlwI6eYlkd/vFfR2B NUz9KtflnzQ+jtH1ev4fQYM1iXdUZX9dn46QSJZcXj33clpjTkkzE1/kU2we+4uEELTIWUF4epELpgT7 6p6z93QPFbVP9GNJ0vOuZLT8ZKM9yhXLR+65ZrZtoP7SmJ5dITC1hFUex3Dy4aZATWX4/D3JxNc4wfAP ht5/o6lj4/Ve605htCQ4dyfKqRuTAqs8hqGmfVNQWX2RQhrNk0Kg5eIlFY2p2DKDIRXPmwUe9AQprzJv CHb6UOqbR4Vg6+S/G7S731J21FRccOaqn/TqOvbeEDbPONZnY2Ky3mxxjrDnyK3igiqjL/e0XYKKWgeG EzbKj7dRdqw119zC7sM3iwt2ilZ4veTfVkr0By//4cDea+9lAAAAAElFTkSuQmCC 183, 22 Z&kopírovat plnou cestu iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEwAA CxMBAJqcGAAAAjJJREFUOE+lk91L01EYx/NP6L4boYtua2oM52Q5+JVzKMuGYUWk9os0S9NlmqhYmUYt XyCd4tJJq9UknFTkC5giJWIsJfMtp7jE4Ss6EQy+necEO66sizzw/C4OfD7PeV5+IQD27emQ4M1rPyhc betoda7hmX0ZzU0+1FvmUVM9B/NDD+6VTaGkeBwF+V+QmzOMa1fdDGXJ6UNgdxdQXbVFl389m1vb0CV1 43TSKx4BgfPlKhdUlK/8E/YtbyLa8BYKhQzjKYcQ2J8ucUFJ8fddBZSZ4G/eVYTpXci/OY2ThhYhsDYu cMEN0+Qfgp3w5wkfDklOZGeNIiHeKgS1j71ckHllOEjwO9zv9uKAxg5ZHoRebxGCqspZLpAvDgYEu8Fd AzPYH9mEM2ffIza2RgjuV0yjswNslMD5lI8wnuvj3aaGUc30bMr8C+5BovEdJMksBLdLJ9DuAtsBoMX2 g819A2V3F3lTqWFUc0a6OwDHJbRBqy0XglsFo3A8B55Yt9ni+KFLzgoKwwUTki8X8sxx8Qw+4YBGUyoE ptwRBgOVj/w8MwnYeiNMJWFobAEjU4uQc+4gRtfKYdUxG9TqQiGgtbTUIfBsEhB8Ke8BvnqW4Jlfw/Ui M8I1NgY3IzyqAarIPCHISP/E6l7nNR/UOhB6RMKL9l64OvrR2TOAvg9DOK43QqFuRASDDytroVRmBwkS 01J7+XrShtGS0JxpVNRtahjVTFkpCD4akSkE9FP8b/wEuMDBOdcQbKsAAAAASUVORK5CYII= 183, 22 &Exportovat ... 184, 186 AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAC6 DQAAAk1TRnQBSQFMAgEBCAEAAQkBAAEEAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo AwABQAMAATADAAEBAQABCAYAAQwYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/ AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD//8A/wD/AP8ALAAC7BoA AewJAAHsAQcEAAHsCQAB7AEHCAAC7AgADuwBAAHsAgAEBwHsBAAB7AH/AQcBAAHsAgAEBwHsBAAB7AH/ AQcHAATsBwAO7AEAAewBBwb/BAcC/wEHAQAB7AEHBv8EBwL/AQcHAATsBwAO7AEAAewF/wL5Bv8BBwEA AewN/wEHBgAG7AcADOwCAAHsBf8C+Qb/AQcBAAHsDf8BBwYABuwHAAzsAgAB7A3/AQcBAAHsAf8CBAH/ BAQB/wMEAf8BBwUACOwHAArsAwAB7AX/AvkG/wEHAQAB7AH/AgQB/wIEBf8CBAEHBQAI7AcACuwDAAHs Bf8C+Qb/AQcBAAHsAf8CBAL/AgQD/wIEAf8BBwQACuwHAAjsBAAB7Ab/AvkF/wEHAQAB7AMEA/8CBAP/ AgQBBwQACuwHAAjsBAAB7Af/AvkE/wEHAQAB7AH/AgQB/wMEAv8DBAH/AQcDAAzsBwAG7AUAAewD/wL5 Av8C+QT/AQcBAAHsDf8BBwMADOwHAAbsBQAB7AP/AvkC/wL5Av8B7AMAAewL/wHsBAAO7AcABOwGAAHs BP8E+QP/AewB/wHsAQAB7Av/AewB/wHsAgAO7AcABOwGAAHsC/8C7AIAAewL/wLsAwAO7AgAAuwHAA3s AwAN7BoAAuxKAAHsCQAB7AEHJAAB7AkAAewBBwEAAewCAAQHAewEAAHsAf8BByEAAewCAAQHAewEAAHs Af8BBwEAAewBBwb/BAcC/wEHAQAO7AQADOwCAAHsAQcG/wQHAv8BBwEAAewB/wL8Af8C/AL/A/wC/wEH AQAB7AH/AfsBBwH7AQcB+wEHAfsBBwH7AQcB+wHsBAAB7AH/AfsBBwH7AQcB+wEHAfsBBwH7AewCAAHs Df8BBwEAAewB/wL8Af8C/AH/AvwB/wL8Af8BBwEAAewB/wEHAfsBBwH7AQcB+wEHAfsBBwH7AQcB7AMA AewB/wH7AQcB+wEHAfsBBwH7AQcB+wEHAQAB7AEAAewN/wEHAQAB7AH/AvwB/wL8Af8C/AH/AvwB/wEH AQAB7AH/AfsBBwH7AQcB+wEHAfsBBwH7AQcB+wHsAwAB7AH/AQcB+wEHAfsBBwH7AQcB+wEHAewBAAHs AQAB7AL/CQEC/wEHAQAB7AH/AvwB/wL8Av8D/AL/AQcBAAHsAf8BBwH7AQcB+wEHAfsBBwH7AQcB+wEH AewCAAHsAf8BBwH7AQcB+wEHAfsBBwH7AQcB+wEAAuwBAAHsAf8CAQH/AgEB/wIBAf8CAQH/AQcBAAHs Df8BBwEAAewB/wH7AQcB+wEHAfsBBwH7AQcB+wEHAfsB7AIAAewK/wHsAQABBwHsAQAB7AL/BAEB/wIB Af8CAQH/AQcBAAHsAv8D/AL/AvwB/wL8Af8BBwEAAewB/wEHAfsBBwH7AQcB+wEHAfsBBwH7AQcB7AIA DewB+wHsAQAB7AT/AgEB/wIBAf8CAQH/AQcBAAHsAf8C/AH/AvwB/wL8Af8C/AH/AQcBAAHsAf8B+wEH AfsBBwH7AQcB+wEHAfsBBwH7AewDAAHsAf8BBwH7AQcB+wEHAfsBBwH7AQcB+wEHAewBAAHsAv8DAQEH Af8EAQL/AQcBAAHsAf8C/AH/AvwB/wL8Af8C/AH/AQcBAAHsDP8B7AMAAewB/wH7AQcB+wEHAfsBBwX/ AewBAAHsB/8CAQT/AQcBAAHsAv8D/AL/AvwB/wH8AewDAAHsAQcB+wEHAfsBBwH7AQcG7AMAAewB/wEH AfsBBwH7AQcB/wbsAQAB7Af/AgEC/wHsAwAB7Av/AewB/wHsAgAB7AEHAfsBBwH7AQcB7AoAAewF/wHs BwAB7Av/AewB/wHsAQAB7Av/AuwEAAXsDAAF7AgAAewL/wLsAgAN7CMADewDAAFCAU0BPgcAAT4DAAEo AwABQAMAATADAAEBAQABAQUAAYABARYAA/+BAAH/AfgB/wH4Af4BfwL/AeAB8AHgAfAB/gF/AYABAQQA AfwBPwGAAQEEAAH8AT8BgAEBBAAB+AEfAcABAwQAAfgBHwHAAQMEAAHwAQ8B4AEHBAAB8AEPAeABBwQA AeABBwHwAQ8EAAHgAQcB8AEPBAABwAEDAfgBHwQAAcABAwH4AR8EAAGAAQEB/AE/AQABAQEAAQEBgAEB AfwBPwEAAQMBAAEDAYABAQH+AX8BAAEHAQABBwL/Af4BfwH/AfgF/wH4AeAB8AT/AeAB8AIAAYABAQHg BgABAQHABgABAQHABgABAQGABgABAQGABgABAQcAAQEHAAEBBwABAQGABgABAQGABgABAwGAAQEDAAEB AYAB/wHAAX8BAAEBAQABAwHBAf8B4AH/AQABAwEAAQcE/wEAAQcL AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAAB1TeXN0 ZW0uV2luZG93cy5Gb3Jtcy5UcmVlTm9kZQgAAAAEVGV4dAROYW1lCUlzQ2hlY2tlZApJbWFnZUluZGV4 CEltYWdlS2V5ElNlbGVjdGVkSW1hZ2VJbmRleBBTZWxlY3RlZEltYWdlS2V5CkNoaWxkQ291bnQBAQAA AQABAAEICAgCAAAABgMAAAARSEtFWV9DTEFTU0VTX1JPT1QGBAAAABFIS0VZX0NMQVNTRVNfUk9PVAD/ ////BgUAAAAGY2xvc2Vk/////wYGAAAABmNsb3NlZAAAAAAL AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAAB1TeXN0 ZW0uV2luZG93cy5Gb3Jtcy5UcmVlTm9kZQgAAAAEVGV4dAROYW1lCUlzQ2hlY2tlZApJbWFnZUluZGV4 CEltYWdlS2V5ElNlbGVjdGVkSW1hZ2VJbmRleBBTZWxlY3RlZEltYWdlS2V5CkNoaWxkQ291bnQBAQAA AQABAAEICAgCAAAABgMAAAARSEtFWV9DVVJSRU5UX1VTRVIGBAAAABFIS0VZX0NVUlJFTlRfVVNFUgD/ ////BgUAAAAGY2xvc2Vk/////wYGAAAABmNsb3NlZAAAAAAL AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAAB1TeXN0 ZW0uV2luZG93cy5Gb3Jtcy5UcmVlTm9kZQgAAAAEVGV4dAROYW1lCUlzQ2hlY2tlZApJbWFnZUluZGV4 CEltYWdlS2V5ElNlbGVjdGVkSW1hZ2VJbmRleBBTZWxlY3RlZEltYWdlS2V5CkNoaWxkQ291bnQBAQAA AQABAAEICAgCAAAABgMAAAASSEtFWV9MT0NBTF9NQUNISU5FBgQAAAASSEtFWV9MT0NBTF9NQUNISU5F AP////8GBQAAAAZjbG9zZWT/////BgYAAAAGY2xvc2VkAAAAAAs= AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAAB1TeXN0 ZW0uV2luZG93cy5Gb3Jtcy5UcmVlTm9kZQgAAAAEVGV4dAROYW1lCUlzQ2hlY2tlZApJbWFnZUluZGV4 CEltYWdlS2V5ElNlbGVjdGVkSW1hZ2VJbmRleBBTZWxlY3RlZEltYWdlS2V5CkNoaWxkQ291bnQBAQAA AQABAAEICAgCAAAABgMAAAAKSEtFWV9VU0VSUwYEAAAACkhLRVlfVVNFUlMA/////wYFAAAABmNsb3Nl ZP////8GBgAAAAZjbG9zZWQAAAAACw== AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAAB1TeXN0 ZW0uV2luZG93cy5Gb3Jtcy5UcmVlTm9kZQgAAAAEVGV4dAROYW1lCUlzQ2hlY2tlZApJbWFnZUluZGV4 CEltYWdlS2V5ElNlbGVjdGVkSW1hZ2VJbmRleBBTZWxlY3RlZEltYWdlS2V5CkNoaWxkQ291bnQBAQAA AQABAAEICAgCAAAABgMAAAATSEtFWV9DVVJSRU5UX0NPTkZJRwYEAAAAE0hLRVlfQ1VSUkVOVF9DT05G SUcA/////wYFAAAABmNsb3NlZP////8GBgAAAAZjbG9zZWQAAAAACw== AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAAB1TeXN0 ZW0uV2luZG93cy5Gb3Jtcy5UcmVlTm9kZQgAAAAEVGV4dAROYW1lCUlzQ2hlY2tlZApJbWFnZUluZGV4 CEltYWdlS2V5ElNlbGVjdGVkSW1hZ2VJbmRleBBTZWxlY3RlZEltYWdlS2V5CkNoaWxkQ291bnQBAQAA AQABAAEICAgCAAAABgMAAAANSEtFWV9EWU5fREFUQQYEAAAADUhLRVlfRFlOX0RBVEEA/////wYFAAAA BmNsb3NlZP////8JBQAAAAAAAAAL AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAAB1TeXN0 ZW0uV2luZG93cy5Gb3Jtcy5UcmVlTm9kZQgAAAAEVGV4dAROYW1lCUlzQ2hlY2tlZApJbWFnZUluZGV4 CEltYWdlS2V5ElNlbGVjdGVkSW1hZ2VJbmRleBBTZWxlY3RlZEltYWdlS2V5CkNoaWxkQ291bnQBAQAA AQABAAEICAgCAAAABgMAAAAVSEtFWV9QRVJGT1JNQU5DRV9EQVRBBgQAAAAVSEtFWV9QRVJGT1JNQU5D RV9EQVRBAP////8GBQAAAAZjbG9zZWT/////CQUAAAAAAAAACw== Název Typ Hodnota Hodnota (jinak) 143, 22 &Konec 53, 20 &Soubor 151, 22 &Jazyk ... 148, 6 151, 22 Jít &na klíč ... 151, 22 Jít na &stejný iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEwAA CxMBAJqcGAAAAUFJREFUOE9j/P//PwNFAGQACG86dOM/Ol6378r/lTvP/1+y+SQId8PUItNgzTADgDRW MGf1gf9mXilYDYEbsH7/VVz6/6/defL/rqNXYIb0YHXB6t0XsRpQMFP5/7lrZ/7X9y/5b+WXDjYEqwHL t52BG/Dw5bn/II0wHF4t8H/dzlP/Jy/ajtuAxZtOwA0AaTx2dRWYH1Qm+P/2owv/X779CjbA1DMZuwvm rTuMYgCM8/PXn//vPn7///D5R/wGzFq5DyMM/vz99//T159gr9x6+A6/AdOW7oIb8ObjPbCm7z9+/7/6 8AiYffn2a/wGgPwHA8gBCGLvOb3n/+mrz4k34Onb6//9swTAAXfn8fv/F2+++n/k/BPiDUAOuKt33/w/ efnZ/72nHhJnAMgr+DDOaITFMUgBIYw1JWLLacSIAQBXZuNaAr2wAAAAAABJRU5ErkJggg== 151, 22 &Obnovit vše 60, 20 &Nástroje &O aplikaci ... 68, 20 Nápo&věda Soubory registru (*.reg)|*.reg|Soubory XML (*.xml)|*.xml|Binární soubory registru (*.*)|*.* Exportovat klíč registru AAABAAIAICAQAAAABADoAgAAJgAAABAQEAAAAAQAKAEAAA4DAAAoAAAAIAAAAEAAAAABAAQAAAAAAAAC AAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAMDAwACAgIAAAAD/AAD/ AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAAAACO/vb+/m7+9gAAC7uwAAAAj+/m7+9v 7+ZgAAsAsAAAAI7+9v7+bv72YAALALAAAACP7+bv72/v5mC7uwC7sAAAhmZmZmYP//ZrsAAAALuwAI/v 5u/vYO/vuwAAAAAAuwCO/vb+/mYAC7AAAAAAAAsAj+/m7+9mBmsAAAAAAAALsI7+9v7+Zga7AAAAALAA ALCGZmD//2YGsAAAAAC7AACwjv72Bm72BrAAC7AAuwAAsI/v5mAAAA+7u7uwALsAALCO/vZgZmZg/v5g sAALAACwj+/mYGZvZgAAC7AAAAALsI//9mBm/mYGZrsAAAAACwAI7+9gb+9mBruwAAAAALsAAIZmYP// ZgawAAAAAAuwAAAI7+9v7+YLsAAAALu7AAAAAIZmZmZmCwAAAACwAAAAAAAI7+9v7+sAALAAu7u7sAAA AIiIiIiLAAC7ALsAALAAAAAAAAAACwAAuwCwAACwAAAAAAAAAAsAAAsAsAAAsAAAAAAAAAALsAAAAAAA C7AAAAAAAAAAALAAAAAAALtgAAAAAAAAAAi7AAAAAAu2AAAAAAAAAAAIa7sAAAC7YAAAAAAAAAAACP77 sAC7uIAAAAAAAAAAAACP77sAsAAAAAAAAAAAAAAACPALu7AAAAAAAAAAAAAAAACAAAAAAAAAAAD//wAA eH8AADh/AAAYfwAAAB8AAAAHAAAAAwAAAAMAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAA4AA AAPAAAAH4AAAD/AAAH/4AAAB/AAAAf/+AAH//gAB//4AAf//AAD//gAB//4AA//+AAf//wB///+If/// 3/8oAAAAEAAAACAAAAABAAQAAAAAAIAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAgAAAgAAAAICAAIAA AACAAIAAgIAAAMDAwACAgIAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAu7AAj+b+b+uw uwCO9u9uuwALsIZmZmuwAAC7j+b+awCwsAuO9u9rALCwC4Zgb2u7sAALj+YAALsAALuO9gZrsAALsAjv DvsAALsAAIZv+wCwu7sACIiLALCwCwAAAAuwAAC7AAAACLsAC7AAAAAAi7C7AAAAAAAIu7AAAAcAAAAD AAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAgAMAAMAAAADgAAAA/gAAAP4BAAD/AwAA/4cAAA== ================================================ FILE: Samples/RegEditPHP/RegEditPHP/frmMain.hr.resx ================================================ text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAGNJREFUOE9jYKAW aGho+I+OiTYbpPHAgQP///9nQKFB4gQNwaUZZhg2l6EYDOKQCqAGQFyHMADV+ejeQeZjNQBbGOAyZNQF B8AJDhj+VIwFXIkFnzjcBdCkCnMSqTTBlE57BQAHeeYQb3jOvQAAAABJRU5ErkJggg== 271, 22 &Ključ ... 268, 6 iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAIhJREFUOE+9kw0O gCAIhfXmHs2bmS97DH/YoLXY2LLgg2eQSyktBa3nZEkBIGKIn4q+AaCgQDQgpdblDKfpM56fRMgeTsAa SIj1vtb6MQAteySws62DyJ9ArFuC1Zkb8N8lWpVcEqDHMnzTzrjpDjhVa/A2db1NDp4A9CKeEg6LekOO gMBWyy5cVhhsBP+FxlcAAAAASUVORK5CYII= 271, 22 &Binarna vriejdnost ... iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAI5JREFUOE+lUwES gCAI05/7NH9WLoOgZolx550lmwNHLqVsKRgNkxUCgkgg3126QoALlWSFoMlH2X1FCaTcWqsnSAnN7P2Q vXyzf46AASzINllyXxV8gXE+VQJ73ikFtqRRXx4KImaiJfwigJxR4Mwu6gNx1T35tOvluuY8MZ72wA4i A5BBPUgoQWCqVdUOvHGH+nw++r8AAAAASUVORK5CYII= 271, 22 &DWord vrijednost ... iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAI5JREFUOE+lUwES gCAI05/7NH9WLoOgZolx550lmwNHLqVsKRgNkxUCgkgg3126QoALlWSFoMlH2X1FCaTcWqsnSAnN7P2Q vXyzf46AASzINllyXxV8gXE+VQJ73ikFtqRRXx4KImaiJfwigJxR4Mwu6gNx1T35tOvluuY8MZ72wA4i A5BBPUgoQWCqVdUOvHGH+nw++r8AAAAASUVORK5CYII= 271, 22 &QWord vrijednost ... iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAJBJREFUOE+tk4EO gCAIRPXP+TT/zDoTRnqltNhYbcHjCMgiUlPQzpxsKQBEDPG3ol8AKGiQFUBSqnC1noi2L48CFFRKmQFa DU8ENKldwaiEAkymk+0T/ftSgfa9DXgK3Aawfsf+/TRe/8HOYv0L0JGxyvjmne6BbtUYPG0dxttvx1rw h8gSyKE2CAUErtpu4QCx1HhPZJRr1QAAAABJRU5ErkJggg== 271, 22 &Nizna vrijednost ... iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAJBJREFUOE+tk4EO gCAIRPXP+TT/zDoTRnqltNhYbcHjCMgiUlPQzpxsKQBEDPG3ol8AKGiQFUBSqnC1noi2L48CFFRKmQFa DU8ENKldwaiEAkymk+0T/ftSgfa9DXgK3Aawfsf+/TRe/8HOYv0L0JGxyvjmne6BbtUYPG0dxttvx1rw h8gSyKE2CAUErtpu4QCx1HhPZJRr1QAAAABJRU5ErkJggg== 271, 22 Niz za &poširivanje ... iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAJBJREFUOE+tk4EO gCAIRPXP+TT/zDoTRnqltNhYbcHjCMgiUlPQzpxsKQBEDPG3ol8AKGiQFUBSqnC1noi2L48CFFRKmQFa DU8ENKldwaiEAkymk+0T/ftSgfa9DXgK3Aawfsf+/TRe/8HOYv0L0JGxyvjmne6BbtUYPG0dxttvx1rw h8gSyKE2CAUErtpu4QCx1HhPZJRr1QAAAABJRU5ErkJggg== 271, 22 &Višenizna vrijednost ... iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEwAA CxMBAJqcGAAAApdJREFUOE+Nkt9PUnEYxukv6K6L5uZF3nTTbOuiuumiKy8Sy7W5tdZF6DDMtMylSWUz ZoVmuJjMBMTI9My0peVmDX+loagF/QJU8HcCogI7Bzic8/Q9HLZu3PC7vfvuvXg/z/M+ew8AkKR77r6j tkMZh0MHM09mzI93ZWWdPrdIB1yONfdiTCIA0lXcKTV7B48Du2qsjBaQvwmeD8cQsef0pR1Own3VLoS1 ADuJ8FoP+ccg9FvOmvTqAsDZnckvWfIR+dsLDjug/f0Q+tWhE/sDEAd3sdtMIWqhCIQiTijSg/Or9gdg XXl5no/ZFLeppIL6M8CQTMxg4QYkhjc/0PbagdZX36Brn8UL/TQ0OiueaSfw9Pko6hssMLfUYqRXCf67 CtvduQj0FCA8X4J16yVI9J0O8DwPluMRYznQUQ4hmkMwkoBvh8VakIXXFwcMOuBeNXBFClw4AvX5UyQe cgJtZjs4MlzesgqFZgWyhmVcrvfCH2KxsZ3AcmDv4bJbXSLgJbHOJnhcrPNAen8BOdVunK10YVNQ32JF ZWUVUc4F8kVlq4vB9bJOEaAzzSHO8mDiHCIMh21i3R9KYJ1Y38v29DyDCScDRalZBLQYZxAlw486ZlDX Po2HRise6CeBgC21M1FO7XyzcQBl6vcY/8OgWNEhArR6G+gYCY5JJNV9uyl1ASAUWUGwPeuJYsrN4AsZ Hv1FQ15sEgHNrVOIkOSTDkzEgUF0YMsmV54armweQkXTIEQH/Rj+SaNQ3i4CNLqvSfVgOJEMbj0Yh9cf h3sjht+rMdiXYphd/K8+QtQ/O2jIigwiQDgYtWYMjxuHUffkE2pVg1DWDqCq5h1u33mL8goKpSRxRYkZ 8msmFBYZcVWmT5YA+Aehl/jy7tE8WgAAAABJRU5ErkJggg== 169, 22 &Novi iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEwAA CxMBAJqcGAAAATBJREFUOE9j/P//PwNFAGQAOgYaCDIVKAw2HM7GqhabIEwMZgheNVQzIDo6Otff33+X t7f3THd3dwGY82EWWFhYlAPxfyguh7sSxPD19e338fF57OHhccrV1fW/tbX1I2QDgJrSQBqRDAMZ5AJW AyKANtbDJIGGvLW0tIQHIEgcqPgMFgM64AaAGEFBQX1AfNXLy+sbTDEsEBMSEmBOh9NZWVkQS4CahEJD Q/+HhITcA7IF7O3tb5mbm6O74C7U72BnI2OQ/ysCAgL+u7m5LXZ2duYHav5mZmaGbgAsAFcBDRIEYqXV q1dD1ACdLGBjY/MfpAmIb5uYmLwzNjZGMQAaDh1Aje9AGGQhSizY2dkJAwPOFMN50NRIVkKCJWFCqREj H6AEELkuoFpmwud3mBwAxyxA1dGzKyUAAAAASUVORK5CYII= 169, 22 &Preimenuj iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEwAA CxMBAJqcGAAAAhJJREFUOE+Vk31LU2EYxif0TfoCwf7qSyTVB5Aos2bDRubKajGsRGz1RwQuSsssI0Vn Ls2ypA10ypbBKtecx9f1QiJkpaTJr/t+9nKwlOiBH+dwnnNf1/Xc9zklgOO/VukOU5CY23A4xylxXAkv oFzt+0ggnKUxNEtD5xT1D1JcbEvib36Fr2mU2mtRaAmCr5b4LofBmAcezfNrA4OudbmursPyT1j8AR+W YXpJNvLFlJXCvp1c3rs7J9DYPcOaFCl14rgV2xUbgYbODCtrGNR5Rfgm7kur8Pl73vncaSjbA/tzzp4L vcbdCFxqn+CrFCh/um/lnHiT2SxQ15o0Z1VUwOnEwGLcNMw45888tgAj45N4/D12An9zgqw0SlGB4lIB RZqnsXVveB5exjNUne+yBXxNMSzpslIQCAaDuTHli/Vt3YvMwFAsg/vMQ1tA55v6gmFTAjuLudO95xb0 Ry0qT7XbAt7AIK8/YdhujIXnAxl4HLFwnbxrC1TX9zMqzVHGshCTc47I/fAcRGcl8jQMivPAJITfQ2jI osJz2xbQjkbkReVfCUIT0PXCotx90xZwn+3gmUQzTOWuT4UnQp+49oprTwq6pbjjbU7goEv+icKHVBB4 l06TTKXRD0VnrePSjmvT9NwaXYv/Eqj03qdIzT1cXqGmjaPVrRw5cYfDx1sor7rFoWM3xLnJcKDiejHB b88e++xiBDeHAAAAAElFTkSuQmCC 169, 22 &Uređi ... iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEwAA CxMBAJqcGAAAAjVJREFUOE9j/P//P4O3l5fBP0aGHob/DG1MjAwHtm7d9o+BWODo6MLs7OKaDqT/Ozk7 f/P28g709vFmBhmMjq1sHViCAgOU3N3d8mByDECNLECcZGfvtM3c0va/vYPLHw8Pzypfb1RDVDQNOazt nZyArv3u4OA0B24AiAE0QBKILRwcXbZZ2dj/t7N3+O/v673R19eHGyRvamHL6e7pucLW3um3qal5t5ae CQ+KATAO0BA2IC6wd3D+bWfn9N/H13eZpZW9npWV3WRbG5v/eoYmk9W0DPiRvYbhT2tbW0Z7eydNoJfO m5lb/zcyNvtuaGz0Xk1Ld52yui4nerhgGABToG9g4qCnb/LT0sr2v56+0T0FZU0hbAGL1QBjExMFNXWd S7p6hv+ABv03MbX4r6Wte4soAwyNTOXVNLSvAg34o6GpvUZETNJETl5lm4Gh8X9Vde1MvF7Q0NaVkFVQ PiWnqPofaPshSQkpIR4+Pm5+IRFueSW16QYGxl9UtQxksQaihoEFh5yi2iIJacWPOrqGT7R19bVgCnkE BDg4Obn5dPUNz0rKKEySUVSDJzR4GEjJKniLSSj8V1XT/q+iptHKyc0LTgMwzMLCzAQUV1FRUb3PKyAo r65rwgSSAysQEBBiExERaxUSFv8vr6C8i4OLR42HTwCsABkLCAgym5lZTubm5TJV1zNHGABSJCOvasTK xj6RgZHJjpmFhRdbiINtZGBgYWJi4sKaEnFpwieOMyERaxgAd/H0VrlTD2AAAAAASUVORK5CYII= 169, 22 &Izbriši 166, 6 iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEwAA CxMBAJqcGAAAAUFJREFUOE9j/P//PwNFAGQACG86dOM/Ol6378r/lTvP/1+y+SQId8PUItNgzTADgDRW MGf1gf9mXilYDYEbsH7/VVz6/6/defL/rqNXYIb0YHXB6t0XsRpQMFP5/7lrZ/7X9y/5b+WXDjYEqwHL t52BG/Dw5bn/II0wHF4t8H/dzlP/Jy/ajtuAxZtOwA0AaTx2dRWYH1Qm+P/2owv/X779CjbA1DMZuwvm rTuMYgCM8/PXn//vPn7///D5R/wGzFq5DyMM/vz99//T159gr9x6+A6/AdOW7oIb8ObjPbCm7z9+/7/6 8AiYffn2a/wGgPwHA8gBCGLvOb3n/+mrz4k34Onb6//9swTAAXfn8fv/F2+++n/k/BPiDUAOuKt33/w/ efnZ/72nHhJnAMgr+DDOaITFMUgBIYw1JWLLacSIAQBXZuNaAr2wAAAAAABJRU5ErkJggg== 169, 22 Pono&vi Ponovi sadržaj aktivnog ključa 169, 22 &Odaber sve iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEwAA CxMBAJqcGAAAAfFJREFUOE+lk99LU3EYh0//SSlDqptu7KqbiDKlwKDwoqAgi652oVddRYZBVjMWONsW 1ixlm53pItJFysy1NJk5169Jy8A2mMo5upzTM3va+UpTF24XvfDcnO95n/f9nB+7AOm/yjv8BR15KCJw 9ofo9L7jts1brctLIenNheXoC3K56SkHa+oPlBR4BiPb+rPrv2nreoUvEOFsQ2tJieQcmBACXxTkDxCO qdx3vEQeUXEPK7j8Co8GFMy9C4Lzd+OHtm4ldXqD+Q1W17KoSxniyZQQFFZz9xyVlwI6eYlkd/vFfR2B NUz9KtflnzQ+jtH1ev4fQYM1iXdUZX9dn46QSJZcXj33clpjTkkzE1/kU2we+4uEELTIWUF4epELpgT7 6p6z93QPFbVP9GNJ0vOuZLT8ZKM9yhXLR+65ZrZtoP7SmJ5dITC1hFUex3Dy4aZATWX4/D3JxNc4wfAP ht5/o6lj4/Ve605htCQ4dyfKqRuTAqs8hqGmfVNQWX2RQhrNk0Kg5eIlFY2p2DKDIRXPmwUe9AQprzJv CHb6UOqbR4Vg6+S/G7S731J21FRccOaqn/TqOvbeEDbPONZnY2Ky3mxxjrDnyK3igiqjL/e0XYKKWgeG EzbKj7dRdqw119zC7sM3iwt2ilZ4veTfVkr0By//4cDea+9lAAAAAElFTkSuQmCC 169, 22 &Kopiraci cijelu cestu iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEwAA CxMBAJqcGAAAAjJJREFUOE+lk91L01EYx/NP6L4boYtua2oM52Q5+JVzKMuGYUWk9os0S9NlmqhYmUYt XyCd4tJJq9UknFTkC5giJWIsJfMtp7jE4Ss6EQy+necEO66sizzw/C4OfD7PeV5+IQD27emQ4M1rPyhc betoda7hmX0ZzU0+1FvmUVM9B/NDD+6VTaGkeBwF+V+QmzOMa1fdDGXJ6UNgdxdQXbVFl389m1vb0CV1 43TSKx4BgfPlKhdUlK/8E/YtbyLa8BYKhQzjKYcQ2J8ucUFJ8fddBZSZ4G/eVYTpXci/OY2ThhYhsDYu cMEN0+Qfgp3w5wkfDklOZGeNIiHeKgS1j71ckHllOEjwO9zv9uKAxg5ZHoRebxGCqspZLpAvDgYEu8Fd AzPYH9mEM2ffIza2RgjuV0yjswNslMD5lI8wnuvj3aaGUc30bMr8C+5BovEdJMksBLdLJ9DuAtsBoMX2 g819A2V3F3lTqWFUc0a6OwDHJbRBqy0XglsFo3A8B55Yt9ni+KFLzgoKwwUTki8X8sxx8Qw+4YBGUyoE ptwRBgOVj/w8MwnYeiNMJWFobAEjU4uQc+4gRtfKYdUxG9TqQiGgtbTUIfBsEhB8Ke8BvnqW4Jlfw/Ui M8I1NgY3IzyqAarIPCHISP/E6l7nNR/UOhB6RMKL9l64OvrR2TOAvg9DOK43QqFuRASDDytroVRmBwkS 01J7+XrShtGS0JxpVNRtahjVTFkpCD4akSkE9FP8b/wEuMDBOdcQbKsAAAAASUVORK5CYII= 169, 22 &Izvoz ... 170, 186 AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAC6 DQAAAk1TRnQBSQFMAgEBCAEAAQkBAAEEAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo AwABQAMAATADAAEBAQABCAYAAQwYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/ AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD//8A/wD/AP8ALAAC7BoA AewJAAHsAQcEAAHsCQAB7AEHCAAC7AgADuwBAAHsAgAEBwHsBAAB7AH/AQcBAAHsAgAEBwHsBAAB7AH/ AQcHAATsBwAO7AEAAewBBwb/BAcC/wEHAQAB7AEHBv8EBwL/AQcHAATsBwAO7AEAAewF/wL5Bv8BBwEA AewN/wEHBgAG7AcADOwCAAHsBf8C+Qb/AQcBAAHsDf8BBwYABuwHAAzsAgAB7A3/AQcBAAHsAf8CBAH/ BAQB/wMEAf8BBwUACOwHAArsAwAB7AX/AvkG/wEHAQAB7AH/AgQB/wIEBf8CBAEHBQAI7AcACuwDAAHs Bf8C+Qb/AQcBAAHsAf8CBAL/AgQD/wIEAf8BBwQACuwHAAjsBAAB7Ab/AvkF/wEHAQAB7AMEA/8CBAP/ AgQBBwQACuwHAAjsBAAB7Af/AvkE/wEHAQAB7AH/AgQB/wMEAv8DBAH/AQcDAAzsBwAG7AUAAewD/wL5 Av8C+QT/AQcBAAHsDf8BBwMADOwHAAbsBQAB7AP/AvkC/wL5Av8B7AMAAewL/wHsBAAO7AcABOwGAAHs BP8E+QP/AewB/wHsAQAB7Av/AewB/wHsAgAO7AcABOwGAAHsC/8C7AIAAewL/wLsAwAO7AgAAuwHAA3s AwAN7BoAAuxKAAHsCQAB7AEHJAAB7AkAAewBBwEAAewCAAQHAewEAAHsAf8BByEAAewCAAQHAewEAAHs Af8BBwEAAewBBwb/BAcC/wEHAQAO7AQADOwCAAHsAQcG/wQHAv8BBwEAAewB/wL8Af8C/AL/A/wC/wEH AQAB7AH/AfsBBwH7AQcB+wEHAfsBBwH7AQcB+wHsBAAB7AH/AfsBBwH7AQcB+wEHAfsBBwH7AewCAAHs Df8BBwEAAewB/wL8Af8C/AH/AvwB/wL8Af8BBwEAAewB/wEHAfsBBwH7AQcB+wEHAfsBBwH7AQcB7AMA AewB/wH7AQcB+wEHAfsBBwH7AQcB+wEHAQAB7AEAAewN/wEHAQAB7AH/AvwB/wL8Af8C/AH/AvwB/wEH AQAB7AH/AfsBBwH7AQcB+wEHAfsBBwH7AQcB+wHsAwAB7AH/AQcB+wEHAfsBBwH7AQcB+wEHAewBAAHs AQAB7AL/CQEC/wEHAQAB7AH/AvwB/wL8Av8D/AL/AQcBAAHsAf8BBwH7AQcB+wEHAfsBBwH7AQcB+wEH AewCAAHsAf8BBwH7AQcB+wEHAfsBBwH7AQcB+wEAAuwBAAHsAf8CAQH/AgEB/wIBAf8CAQH/AQcBAAHs Df8BBwEAAewB/wH7AQcB+wEHAfsBBwH7AQcB+wEHAfsB7AIAAewK/wHsAQABBwHsAQAB7AL/BAEB/wIB Af8CAQH/AQcBAAHsAv8D/AL/AvwB/wL8Af8BBwEAAewB/wEHAfsBBwH7AQcB+wEHAfsBBwH7AQcB7AIA DewB+wHsAQAB7AT/AgEB/wIBAf8CAQH/AQcBAAHsAf8C/AH/AvwB/wL8Af8C/AH/AQcBAAHsAf8B+wEH AfsBBwH7AQcB+wEHAfsBBwH7AewDAAHsAf8BBwH7AQcB+wEHAfsBBwH7AQcB+wEHAewBAAHsAv8DAQEH Af8EAQL/AQcBAAHsAf8C/AH/AvwB/wL8Af8C/AH/AQcBAAHsDP8B7AMAAewB/wH7AQcB+wEHAfsBBwX/ AewBAAHsB/8CAQT/AQcBAAHsAv8D/AL/AvwB/wH8AewDAAHsAQcB+wEHAfsBBwH7AQcG7AMAAewB/wEH AfsBBwH7AQcB/wbsAQAB7Af/AgEC/wHsAwAB7Av/AewB/wHsAgAB7AEHAfsBBwH7AQcB7AoAAewF/wHs BwAB7Av/AewB/wHsAQAB7Av/AuwEAAXsDAAF7AgAAewL/wLsAgAN7CMADewDAAFCAU0BPgcAAT4DAAEo AwABQAMAATADAAEBAQABAQUAAYABARYAA/+BAAH/AfgB/wH4Af4BfwL/AeAB8AHgAfAB/gF/AYABAQQA AfwBPwGAAQEEAAH8AT8BgAEBBAAB+AEfAcABAwQAAfgBHwHAAQMEAAHwAQ8B4AEHBAAB8AEPAeABBwQA AeABBwHwAQ8EAAHgAQcB8AEPBAABwAEDAfgBHwQAAcABAwH4AR8EAAGAAQEB/AE/AQABAQEAAQEBgAEB AfwBPwEAAQMBAAEDAYABAQH+AX8BAAEHAQABBwL/Af4BfwH/AfgF/wH4AeAB8AT/AeAB8AIAAYABAQHg BgABAQHABgABAQHABgABAQGABgABAQGABgABAQcAAQEHAAEBBwABAQGABgABAQGABgABAwGAAQEDAAEB AYAB/wHAAX8BAAEBAQABAwHBAf8B4AH/AQABAwEAAQcE/wEAAQcL AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAAB1TeXN0 ZW0uV2luZG93cy5Gb3Jtcy5UcmVlTm9kZQgAAAAEVGV4dAROYW1lCUlzQ2hlY2tlZApJbWFnZUluZGV4 CEltYWdlS2V5ElNlbGVjdGVkSW1hZ2VJbmRleBBTZWxlY3RlZEltYWdlS2V5CkNoaWxkQ291bnQBAQAA AQABAAEICAgCAAAABgMAAAARSEtFWV9DTEFTU0VTX1JPT1QGBAAAABFIS0VZX0NMQVNTRVNfUk9PVAD/ ////BgUAAAAGY2xvc2Vk/////wYGAAAABmNsb3NlZAAAAAAL AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAAB1TeXN0 ZW0uV2luZG93cy5Gb3Jtcy5UcmVlTm9kZQgAAAAEVGV4dAROYW1lCUlzQ2hlY2tlZApJbWFnZUluZGV4 CEltYWdlS2V5ElNlbGVjdGVkSW1hZ2VJbmRleBBTZWxlY3RlZEltYWdlS2V5CkNoaWxkQ291bnQBAQAA AQABAAEICAgCAAAABgMAAAARSEtFWV9DVVJSRU5UX1VTRVIGBAAAABFIS0VZX0NVUlJFTlRfVVNFUgD/ ////BgUAAAAGY2xvc2Vk/////wYGAAAABmNsb3NlZAAAAAAL AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAAB1TeXN0 ZW0uV2luZG93cy5Gb3Jtcy5UcmVlTm9kZQgAAAAEVGV4dAROYW1lCUlzQ2hlY2tlZApJbWFnZUluZGV4 CEltYWdlS2V5ElNlbGVjdGVkSW1hZ2VJbmRleBBTZWxlY3RlZEltYWdlS2V5CkNoaWxkQ291bnQBAQAA AQABAAEICAgCAAAABgMAAAASSEtFWV9MT0NBTF9NQUNISU5FBgQAAAASSEtFWV9MT0NBTF9NQUNISU5F AP////8GBQAAAAZjbG9zZWT/////BgYAAAAGY2xvc2VkAAAAAAs= AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAAB1TeXN0 ZW0uV2luZG93cy5Gb3Jtcy5UcmVlTm9kZQgAAAAEVGV4dAROYW1lCUlzQ2hlY2tlZApJbWFnZUluZGV4 CEltYWdlS2V5ElNlbGVjdGVkSW1hZ2VJbmRleBBTZWxlY3RlZEltYWdlS2V5CkNoaWxkQ291bnQBAQAA AQABAAEICAgCAAAABgMAAAAKSEtFWV9VU0VSUwYEAAAACkhLRVlfVVNFUlMA/////wYFAAAABmNsb3Nl ZP////8GBgAAAAZjbG9zZWQAAAAACw== AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAAB1TeXN0 ZW0uV2luZG93cy5Gb3Jtcy5UcmVlTm9kZQgAAAAEVGV4dAROYW1lCUlzQ2hlY2tlZApJbWFnZUluZGV4 CEltYWdlS2V5ElNlbGVjdGVkSW1hZ2VJbmRleBBTZWxlY3RlZEltYWdlS2V5CkNoaWxkQ291bnQBAQAA AQABAAEICAgCAAAABgMAAAATSEtFWV9DVVJSRU5UX0NPTkZJRwYEAAAAE0hLRVlfQ1VSUkVOVF9DT05G SUcA/////wYFAAAABmNsb3NlZP////8GBgAAAAZjbG9zZWQAAAAACw== AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAAB1TeXN0 ZW0uV2luZG93cy5Gb3Jtcy5UcmVlTm9kZQgAAAAEVGV4dAROYW1lCUlzQ2hlY2tlZApJbWFnZUluZGV4 CEltYWdlS2V5ElNlbGVjdGVkSW1hZ2VJbmRleBBTZWxlY3RlZEltYWdlS2V5CkNoaWxkQ291bnQBAQAA AQABAAEICAgCAAAABgMAAAANSEtFWV9EWU5fREFUQQYEAAAADUhLRVlfRFlOX0RBVEEA/////wYFAAAA BmNsb3NlZP////8JBQAAAAAAAAAL AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAAB1TeXN0 ZW0uV2luZG93cy5Gb3Jtcy5UcmVlTm9kZQgAAAAEVGV4dAROYW1lCUlzQ2hlY2tlZApJbWFnZUluZGV4 CEltYWdlS2V5ElNlbGVjdGVkSW1hZ2VJbmRleBBTZWxlY3RlZEltYWdlS2V5CkNoaWxkQ291bnQBAQAA AQABAAEICAgCAAAABgMAAAAVSEtFWV9QRVJGT1JNQU5DRV9EQVRBBgQAAAAVSEtFWV9QRVJGT1JNQU5D RV9EQVRBAP////8GBQAAAAZjbG9zZWT/////CQUAAAAAAAAACw== Naziv Oblik Vrijednost Vrijednost (inače) 152, 22 &Izlaz 63, 20 &Datoteka 152, 22 &Jezik ... 149, 6 152, 22 Ići za &ključ ... 152, 22 &Ići za isti iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEwAA CxMBAJqcGAAAAUFJREFUOE9j/P//PwNFAGQACG86dOM/Ol6378r/lTvP/1+y+SQId8PUItNgzTADgDRW MGf1gf9mXilYDYEbsH7/VVz6/6/defL/rqNXYIb0YHXB6t0XsRpQMFP5/7lrZ/7X9y/5b+WXDjYEqwHL t52BG/Dw5bn/II0wHF4t8H/dzlP/Jy/ajtuAxZtOwA0AaTx2dRWYH1Qm+P/2owv/X779CjbA1DMZuwvm rTuMYgCM8/PXn//vPn7///D5R/wGzFq5DyMM/vz99//T159gr9x6+A6/AdOW7oIb8ObjPbCm7z9+/7/6 8AiYffn2a/wGgPwHA8gBCGLvOb3n/+mrz4k34Onb6//9swTAAXfn8fv/F2+++n/k/BPiDUAOuKt33/w/ efnZ/72nHhJnAMgr+DDOaITFMUgBIYw1JWLLacSIAQBXZuNaAr2wAAAAAABJRU5ErkJggg== 152, 22 &Ponoviti sve 40, 20 &Alati 152, 22 &O aplikaciji ... 50, 20 &Pomoć Datotege registara (*.reg)|*.reg|XML datoteke (*.xml)|*.xml|Binarne datoteke registara (*.*)|*.* Izvoz ključa registara AAABAAIAICAQAAAABADoAgAAJgAAABAQEAAAAAQAKAEAAA4DAAAoAAAAIAAAAEAAAAABAAQAAAAAAAAC AAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAMDAwACAgIAAAAD/AAD/ AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAAAACO/vb+/m7+9gAAC7uwAAAAj+/m7+9v 7+ZgAAsAsAAAAI7+9v7+bv72YAALALAAAACP7+bv72/v5mC7uwC7sAAAhmZmZmYP//ZrsAAAALuwAI/v 5u/vYO/vuwAAAAAAuwCO/vb+/mYAC7AAAAAAAAsAj+/m7+9mBmsAAAAAAAALsI7+9v7+Zga7AAAAALAA ALCGZmD//2YGsAAAAAC7AACwjv72Bm72BrAAC7AAuwAAsI/v5mAAAA+7u7uwALsAALCO/vZgZmZg/v5g sAALAACwj+/mYGZvZgAAC7AAAAALsI//9mBm/mYGZrsAAAAACwAI7+9gb+9mBruwAAAAALsAAIZmYP// ZgawAAAAAAuwAAAI7+9v7+YLsAAAALu7AAAAAIZmZmZmCwAAAACwAAAAAAAI7+9v7+sAALAAu7u7sAAA AIiIiIiLAAC7ALsAALAAAAAAAAAACwAAuwCwAACwAAAAAAAAAAsAAAsAsAAAsAAAAAAAAAALsAAAAAAA C7AAAAAAAAAAALAAAAAAALtgAAAAAAAAAAi7AAAAAAu2AAAAAAAAAAAIa7sAAAC7YAAAAAAAAAAACP77 sAC7uIAAAAAAAAAAAACP77sAsAAAAAAAAAAAAAAACPALu7AAAAAAAAAAAAAAAACAAAAAAAAAAAD//wAA eH8AADh/AAAYfwAAAB8AAAAHAAAAAwAAAAMAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAA4AA AAPAAAAH4AAAD/AAAH/4AAAB/AAAAf/+AAH//gAB//4AAf//AAD//gAB//4AA//+AAf//wB///+If/// 3/8oAAAAEAAAACAAAAABAAQAAAAAAIAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAgAAAgAAAAICAAIAA AACAAIAAgIAAAMDAwACAgIAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAu7AAj+b+b+uw uwCO9u9uuwALsIZmZmuwAAC7j+b+awCwsAuO9u9rALCwC4Zgb2u7sAALj+YAALsAALuO9gZrsAALsAjv DvsAALsAAIZv+wCwu7sACIiLALCwCwAAAAuwAAC7AAAACLsAC7AAAAAAi7C7AAAAAAAIu7AAAAcAAAAD AAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAgAMAAMAAAADgAAAA/gAAAP4BAAD/AwAA/4cAAA== ================================================ FILE: Samples/RegEditPHP/RegEditPHP/frmMain.php ================================================ InitializeComponent(); $this->Init(); } public function InitializeComponent() { $this->components = new System:::ComponentModel:::Container(); $resources = new System:::ComponentModel:::ComponentResourceManager(CLRTypeOf frmMain ); $this->tscMain = new System:::Windows:::Forms:::ToolStripContainer(); $this->stsStatus = new System:::Windows:::Forms:::StatusStrip(); $this->tslKey = new System:::Windows:::Forms:::ToolStripStatusLabel(); $this->splMain = new System:::Windows:::Forms:::SplitContainer(); $this->tvwRegistry = new System:::Windows:::Forms:::TreeView(); $this->cmsContext = new System:::Windows:::Forms:::ContextMenuStrip($this->components); $this->tmiNew = new System:::Windows:::Forms:::ToolStripMenuItem(); $this->tmiNewKey = new System:::Windows:::Forms:::ToolStripMenuItem(); $this->tmiNewSep1 = new System:::Windows:::Forms:::ToolStripSeparator(); $this->tmiNewBinary = new System:::Windows:::Forms:::ToolStripMenuItem(); $this->tmiNewDWord = new System:::Windows:::Forms:::ToolStripMenuItem(); $this->tmiNewQWord = new System:::Windows:::Forms:::ToolStripMenuItem(); $this->tmiNewString = new System:::Windows:::Forms:::ToolStripMenuItem(); $this->tmiNewExpandable = new System:::Windows:::Forms:::ToolStripMenuItem(); $this->tmiNewMulti = new System:::Windows:::Forms:::ToolStripMenuItem(); $this->tmiRename = new System:::Windows:::Forms:::ToolStripMenuItem(); $this->tmiEdit = new System:::Windows:::Forms:::ToolStripMenuItem(); $this->tmiDelete = new System:::Windows:::Forms:::ToolStripMenuItem(); $this->tssCms1 = new System:::Windows:::Forms:::ToolStripSeparator(); $this->tmiRefreshNode = new System:::Windows:::Forms:::ToolStripMenuItem(); $this->tmiSelectAll = new System:::Windows:::Forms:::ToolStripMenuItem(); $this->tmiCopyFullPath = new System:::Windows:::Forms:::ToolStripMenuItem(); $this->tmiExport = new System:::Windows:::Forms:::ToolStripMenuItem(); $this->imlImages = new System:::Windows:::Forms:::ImageList($this->components); $this->lvwRegistry = new System:::Windows:::Forms:::ListView(); $this->cohName = new System:::Windows:::Forms:::ColumnHeader($resources->GetString("lvwRegistry.Columns")); $this->cohType = new System:::Windows:::Forms:::ColumnHeader(); $this->cohValue = new System:::Windows:::Forms:::ColumnHeader(); $this->cohAlternative = new System:::Windows:::Forms:::ColumnHeader(); $this->mnsMain = new System:::Windows:::Forms:::MenuStrip(); $this->tmiFile = new System:::Windows:::Forms:::ToolStripMenuItem(); $this->tmiExit = new System:::Windows:::Forms:::ToolStripMenuItem(); $this->tmiTools = new System:::Windows:::Forms:::ToolStripMenuItem(); $this->tmiLanguage = new System:::Windows:::Forms:::ToolStripMenuItem(); $this->tssTools1 = new System:::Windows:::Forms:::ToolStripSeparator(); $this->tmiJump = new System:::Windows:::Forms:::ToolStripMenuItem(); $this->tmiJumpToSame = new System:::Windows:::Forms:::ToolStripMenuItem(); $this->tmiRefreshAll = new System:::Windows:::Forms:::ToolStripMenuItem(); $this->tmiHelp = new System:::Windows:::Forms:::ToolStripMenuItem(); $this->tmiAbout = new System:::Windows:::Forms:::ToolStripMenuItem(); $this->sfdExport = new System:::Windows:::Forms:::SaveFileDialog(); $this->tscMain->BottomToolStripPanel->SuspendLayout(); $this->tscMain->ContentPanel->SuspendLayout(); $this->tscMain->TopToolStripPanel->SuspendLayout(); $this->tscMain->SuspendLayout(); $this->stsStatus->SuspendLayout(); $this->splMain->Panel1->SuspendLayout(); $this->splMain->Panel2->SuspendLayout(); $this->splMain->SuspendLayout(); $this->cmsContext->SuspendLayout(); $this->mnsMain->SuspendLayout(); $this->SuspendLayout(); // // tscMain // $this->tscMain->AccessibleDescription = NULL; $this->tscMain->AccessibleName = NULL; $resources->ApplyResources($this->tscMain, "tscMain"); // // tscMain.BottomToolStripPanel // $this->tscMain->BottomToolStripPanel->AccessibleDescription = NULL; $this->tscMain->BottomToolStripPanel->AccessibleName = NULL; $this->tscMain->BottomToolStripPanel->BackgroundImage = NULL; $resources->ApplyResources($this->tscMain->BottomToolStripPanel, "tscMain.BottomToolStripPanel"); $this->tscMain->BottomToolStripPanel->Controls->Add($this->stsStatus); $this->tscMain->BottomToolStripPanel->Font = NULL; // // tscMain.ContentPanel // $this->tscMain->ContentPanel->AccessibleDescription = NULL; $this->tscMain->ContentPanel->AccessibleName = NULL; $resources->ApplyResources($this->tscMain->ContentPanel, "tscMain.ContentPanel"); $this->tscMain->ContentPanel->BackgroundImage = NULL; $this->tscMain->ContentPanel->Controls->Add($this->splMain); $this->tscMain->ContentPanel->Font = NULL; $this->tscMain->Font = NULL; // // tscMain.LeftToolStripPanel // $this->tscMain->LeftToolStripPanel->AccessibleDescription = NULL; $this->tscMain->LeftToolStripPanel->AccessibleName = NULL; $this->tscMain->LeftToolStripPanel->BackgroundImage = NULL; $resources->ApplyResources($this->tscMain->LeftToolStripPanel, "tscMain.LeftToolStripPanel"); $this->tscMain->LeftToolStripPanel->Font = NULL; $this->tscMain->Name = "tscMain"; // // tscMain.RightToolStripPanel // $this->tscMain->RightToolStripPanel->AccessibleDescription = NULL; $this->tscMain->RightToolStripPanel->AccessibleName = NULL; $this->tscMain->RightToolStripPanel->BackgroundImage = NULL; $resources->ApplyResources($this->tscMain->RightToolStripPanel, "tscMain.RightToolStripPanel"); $this->tscMain->RightToolStripPanel->Font = NULL; // // tscMain.TopToolStripPanel // $this->tscMain->TopToolStripPanel->AccessibleDescription = NULL; $this->tscMain->TopToolStripPanel->AccessibleName = NULL; $this->tscMain->TopToolStripPanel->BackgroundImage = NULL; $resources->ApplyResources($this->tscMain->TopToolStripPanel, "tscMain.TopToolStripPanel"); $this->tscMain->TopToolStripPanel->Controls->Add($this->mnsMain); $this->tscMain->TopToolStripPanel->Font = NULL; // // stsStatus // $this->stsStatus->AccessibleDescription = NULL; $this->stsStatus->AccessibleName = NULL; $resources->ApplyResources($this->stsStatus, "stsStatus"); $this->stsStatus->BackgroundImage = NULL; $this->stsStatus->Font = NULL; $this->stsStatus->Items->AddRange(array($this->tslKey)); $this->stsStatus->Name = "stsStatus"; // // tslKey // $this->tslKey->AccessibleDescription = NULL; $this->tslKey->AccessibleName = NULL; $resources->ApplyResources($this->tslKey, "tslKey"); $this->tslKey->BackgroundImage = NULL; $this->tslKey->Name = "tslKey"; // // splMain // $this->splMain->AccessibleDescription = NULL; $this->splMain->AccessibleName = NULL; $resources->ApplyResources($this->splMain, "splMain"); $this->splMain->BackgroundImage = NULL; $this->splMain->Font = NULL; $this->splMain->Name = "splMain"; // // splMain.Panel1 // $this->splMain->Panel1->AccessibleDescription = NULL; $this->splMain->Panel1->AccessibleName = NULL; $resources->ApplyResources($this->splMain->Panel1, "splMain.Panel1"); $this->splMain->Panel1->BackgroundImage = NULL; $this->splMain->Panel1->Controls->Add($this->tvwRegistry); $this->splMain->Panel1->Font = NULL; // // splMain.Panel2 // $this->splMain->Panel2->AccessibleDescription = NULL; $this->splMain->Panel2->AccessibleName = NULL; $resources->ApplyResources($this->splMain->Panel2, "splMain.Panel2"); $this->splMain->Panel2->BackgroundImage = NULL; $this->splMain->Panel2->Controls->Add($this->lvwRegistry); $this->splMain->Panel2->Font = NULL; // // tvwRegistry // $this->tvwRegistry->AccessibleDescription = NULL; $this->tvwRegistry->AccessibleName = NULL; $resources->ApplyResources($this->tvwRegistry, "tvwRegistry"); $this->tvwRegistry->BackgroundImage = NULL; $this->tvwRegistry->ContextMenuStrip = $this->cmsContext; $this->tvwRegistry->Font = NULL; $this->tvwRegistry->HideSelection = false; $this->tvwRegistry->ImageList = $this->imlImages; $this->tvwRegistry->LabelEdit = true; $this->tvwRegistry->Name = "tvwRegistry"; $this->tvwRegistry->Nodes->AddRange(array($resources->GetObject("tvwRegistry.Nodes"), $resources->GetObject("tvwRegistry.Nodes1"), $resources->GetObject("tvwRegistry.Nodes2"), $resources->GetObject("tvwRegistry.Nodes3"), $resources->GetObject("tvwRegistry.Nodes4"), $resources->GetObject("tvwRegistry.Nodes5"), $resources->GetObject("tvwRegistry.Nodes6"))); $this->tvwRegistry->AfterCollapse->Add(new System:::Windows:::Forms:::TreeViewEventHandler(array($this, "tvwRegistry_AfterCollapse"))); $this->tvwRegistry->AfterLabelEdit->Add(new System:::Windows:::Forms:::NodeLabelEditEventHandler(array($this, "tvwRegistry_AfterLabelEdit"))); $this->tvwRegistry->BeforeExpand->Add(new System:::Windows:::Forms:::TreeViewCancelEventHandler(array($this, "tvwRegistry_BeforeExpand"))); $this->tvwRegistry->AfterSelect->Add(new System:::Windows:::Forms:::TreeViewEventHandler(array($this, "tvwRegistry_AfterSelect"))); $this->tvwRegistry->MouseDown->Add(new System:::Windows:::Forms:::MouseEventHandler(array($this, "tvwRegistry_MouseDown"))); $this->tvwRegistry->BeforeLabelEdit->Add(new System:::Windows:::Forms:::NodeLabelEditEventHandler(array($this, "tvwRegistry_BeforeLabelEdit"))); $this->tvwRegistry->KeyDown->Add(new System:::Windows:::Forms:::KeyEventHandler(array($this, "tvwRegistry_KeyDown"))); $this->tvwRegistry->AfterExpand->Add(new System:::Windows:::Forms:::TreeViewEventHandler(array($this, "tvwRegistry_AfterExpand"))); // // cmsContext // $this->cmsContext->AccessibleDescription = NULL; $this->cmsContext->AccessibleName = NULL; $resources->ApplyResources($this->cmsContext, "cmsContext"); $this->cmsContext->BackgroundImage = NULL; $this->cmsContext->Font = NULL; $this->cmsContext->Items->AddRange(array($this->tmiNew, $this->tmiRename, $this->tmiEdit, $this->tmiDelete, $this->tssCms1, $this->tmiRefreshNode, $this->tmiSelectAll, $this->tmiCopyFullPath, $this->tmiExport)); $this->cmsContext->Name = "cmsContext"; $this->cmsContext->Opening->Add(new System:::ComponentModel:::CancelEventHandler(array($this, "cmsContext_Opening"))); // // tmiNew // $this->tmiNew->AccessibleDescription = NULL; $this->tmiNew->AccessibleName = NULL; $resources->ApplyResources($this->tmiNew, "tmiNew"); $this->tmiNew->BackgroundImage = NULL; $this->tmiNew->DropDownItems->AddRange(array($this->tmiNewKey, $this->tmiNewSep1, $this->tmiNewBinary, $this->tmiNewDWord, $this->tmiNewQWord, $this->tmiNewString, $this->tmiNewExpandable, $this->tmiNewMulti)); $this->tmiNew->Name = "tmiNew"; $this->tmiNew->ShortcutKeyDisplayString = NULL; // // tmiNewKey // $this->tmiNewKey->AccessibleDescription = NULL; $this->tmiNewKey->AccessibleName = NULL; $resources->ApplyResources($this->tmiNewKey, "tmiNewKey"); $this->tmiNewKey->BackgroundImage = NULL; $this->tmiNewKey->Name = "tmiNewKey"; $this->tmiNewKey->Click->Add(new System:::EventHandler(array($this, "tmiNewKey_Click"))); // // tmiNewSep1 // $this->tmiNewSep1->AccessibleDescription = NULL; $this->tmiNewSep1->AccessibleName = NULL; $resources->ApplyResources($this->tmiNewSep1, "tmiNewSep1"); $this->tmiNewSep1->Name = "tmiNewSep1"; // // tmiNewBinary // $this->tmiNewBinary->AccessibleDescription = NULL; $this->tmiNewBinary->AccessibleName = NULL; $resources->ApplyResources($this->tmiNewBinary, "tmiNewBinary"); $this->tmiNewBinary->BackgroundImage = NULL; $this->tmiNewBinary->Name = "tmiNewBinary"; $this->tmiNewBinary->Click->Add(new System:::EventHandler(array($this, "tmiNewValue_Click"))); // // tmiNewDWord // $this->tmiNewDWord->AccessibleDescription = NULL; $this->tmiNewDWord->AccessibleName = NULL; $resources->ApplyResources($this->tmiNewDWord, "tmiNewDWord"); $this->tmiNewDWord->BackgroundImage = NULL; $this->tmiNewDWord->Name = "tmiNewDWord"; $this->tmiNewDWord->Click->Add(new System:::EventHandler(array($this, "tmiNewValue_Click"))); // // tmiNewQWord // $this->tmiNewQWord->AccessibleDescription = NULL; $this->tmiNewQWord->AccessibleName = NULL; $resources->ApplyResources($this->tmiNewQWord, "tmiNewQWord"); $this->tmiNewQWord->BackgroundImage = NULL; $this->tmiNewQWord->Name = "tmiNewQWord"; $this->tmiNewQWord->Click->Add(new System:::EventHandler(array($this, "tmiNewValue_Click"))); // // tmiNewString // $this->tmiNewString->AccessibleDescription = NULL; $this->tmiNewString->AccessibleName = NULL; $resources->ApplyResources($this->tmiNewString, "tmiNewString"); $this->tmiNewString->BackgroundImage = NULL; $this->tmiNewString->Name = "tmiNewString"; $this->tmiNewString->Click->Add(new System:::EventHandler(array($this, "tmiNewValue_Click"))); // // tmiNewExpandable // $this->tmiNewExpandable->AccessibleDescription = NULL; $this->tmiNewExpandable->AccessibleName = NULL; $resources->ApplyResources($this->tmiNewExpandable, "tmiNewExpandable"); $this->tmiNewExpandable->BackgroundImage = NULL; $this->tmiNewExpandable->Name = "tmiNewExpandable"; $this->tmiNewExpandable->Click->Add(new System:::EventHandler(array($this, "tmiNewValue_Click"))); // // tmiNewMulti // $this->tmiNewMulti->AccessibleDescription = NULL; $this->tmiNewMulti->AccessibleName = NULL; $resources->ApplyResources($this->tmiNewMulti, "tmiNewMulti"); $this->tmiNewMulti->BackgroundImage = NULL; $this->tmiNewMulti->Name = "tmiNewMulti"; $this->tmiNewMulti->Click->Add(new System:::EventHandler(array($this, "tmiNewValue_Click"))); // // tmiRename // $this->tmiRename->AccessibleDescription = NULL; $this->tmiRename->AccessibleName = NULL; $resources->ApplyResources($this->tmiRename, "tmiRename"); $this->tmiRename->BackgroundImage = NULL; $this->tmiRename->Name = "tmiRename"; $this->tmiRename->Click->Add(new System:::EventHandler(array($this, "tmiRename_Click"))); // // tmiEdit // $this->tmiEdit->AccessibleDescription = NULL; $this->tmiEdit->AccessibleName = NULL; $resources->ApplyResources($this->tmiEdit, "tmiEdit"); $this->tmiEdit->BackgroundImage = NULL; $this->tmiEdit->Name = "tmiEdit"; $this->tmiEdit->Click->Add(new System:::EventHandler(array($this, "tmiEdit_Click"))); // // tmiDelete // $this->tmiDelete->AccessibleDescription = NULL; $this->tmiDelete->AccessibleName = NULL; $resources->ApplyResources($this->tmiDelete, "tmiDelete"); $this->tmiDelete->BackgroundImage = NULL; $this->tmiDelete->Name = "tmiDelete"; $this->tmiDelete->Click->Add(new System:::EventHandler(array($this, "tmiDelete_Click"))); // // tssCms1 // $this->tssCms1->AccessibleDescription = NULL; $this->tssCms1->AccessibleName = NULL; $resources->ApplyResources($this->tssCms1, "tssCms1"); $this->tssCms1->Name = "tssCms1"; // // tmiRefreshNode // $this->tmiRefreshNode->AccessibleDescription = NULL; $this->tmiRefreshNode->AccessibleName = NULL; $resources->ApplyResources($this->tmiRefreshNode, "tmiRefreshNode"); $this->tmiRefreshNode->BackgroundImage = NULL; $this->tmiRefreshNode->Name = "tmiRefreshNode"; $this->tmiRefreshNode->ShortcutKeyDisplayString = NULL; $this->tmiRefreshNode->Click->Add(new System:::EventHandler(array($this, "tmiRefreshNode_Click"))); // // tmiSelectAll // $this->tmiSelectAll->AccessibleDescription = NULL; $this->tmiSelectAll->AccessibleName = NULL; $resources->ApplyResources($this->tmiSelectAll, "tmiSelectAll"); $this->tmiSelectAll->BackgroundImage = NULL; $this->tmiSelectAll->Name = "tmiSelectAll"; $this->tmiSelectAll->Click->Add(new System:::EventHandler(array($this, "tmiSelectAll_Click"))); // // tmiCopyFullPath // $this->tmiCopyFullPath->AccessibleDescription = NULL; $this->tmiCopyFullPath->AccessibleName = NULL; $resources->ApplyResources($this->tmiCopyFullPath, "tmiCopyFullPath"); $this->tmiCopyFullPath->BackgroundImage = NULL; $this->tmiCopyFullPath->Name = "tmiCopyFullPath"; $this->tmiCopyFullPath->ShortcutKeyDisplayString = NULL; $this->tmiCopyFullPath->Click->Add(new System:::EventHandler(array($this, "tmiCopyFullPath_Click"))); // // tmiExport // $this->tmiExport->AccessibleDescription = NULL; $this->tmiExport->AccessibleName = NULL; $resources->ApplyResources($this->tmiExport, "tmiExport"); $this->tmiExport->BackgroundImage = NULL; $this->tmiExport->Name = "tmiExport"; $this->tmiExport->ShortcutKeyDisplayString = NULL; $this->tmiExport->Click->Add(new System:::EventHandler(array($this, "tmiExport_Click"))); // // imlImages // $this->imlImages->ImageStream = $resources->GetObject("imlImages.ImageStream"); $this->imlImages->TransparentColor = System:::Drawing:::Color::$Transparent; $this->imlImages->Images->SetKeyName(0, "binary"); $this->imlImages->Images->SetKeyName(1, "closed"); $this->imlImages->Images->SetKeyName(2, "open"); $this->imlImages->Images->SetKeyName(3, "string"); $this->imlImages->Images->SetKeyName(4, "unknown"); $this->imlImages->Images->SetKeyName(5, "numeric"); $this->imlImages->Images->SetKeyName(6, "desc"); $this->imlImages->Images->SetKeyName(7, "asc"); // // lvwRegistry // $this->lvwRegistry->AccessibleDescription = NULL; $this->lvwRegistry->AccessibleName = NULL; $resources->ApplyResources($this->lvwRegistry, "lvwRegistry"); $this->lvwRegistry->BackgroundImage = NULL; $this->lvwRegistry->Columns->AddRange(array($this->cohName, $this->cohType, $this->cohValue, $this->cohAlternative)); $this->lvwRegistry->ContextMenuStrip = $this->cmsContext; $this->lvwRegistry->Font = NULL; $this->lvwRegistry->FullRowSelect = true; $this->lvwRegistry->HideSelection = false; $this->lvwRegistry->LabelEdit = true; $this->lvwRegistry->Name = "lvwRegistry"; $this->lvwRegistry->SmallImageList = $this->imlImages; $this->lvwRegistry->Sorting = System:::Windows:::Forms:::SortOrder::Ascending; $this->lvwRegistry->UseCompatibleStateImageBehavior = false; $this->lvwRegistry->View = System:::Windows:::Forms:::View::Details; $this->lvwRegistry->ItemActivate->Add(new System:::EventHandler(array($this, "lvwRegistry_ItemActivate"))); $this->lvwRegistry->AfterLabelEdit->Add(new System:::Windows:::Forms:::LabelEditEventHandler(array($this, "lvwRegistry_AfterLabelEdit"))); $this->lvwRegistry->ColumnClick->Add(new System:::Windows:::Forms:::ColumnClickEventHandler(array($this, "lvwRegistry_ColumnClick"))); $this->lvwRegistry->KeyDown->Add(new System:::Windows:::Forms:::KeyEventHandler(array($this, "lvwRegistry_KeyDown"))); // // cohName // $resources->ApplyResources($this->cohName, "cohName"); // // cohType // $resources->ApplyResources($this->cohType, "cohType"); // // cohValue // $resources->ApplyResources($this->cohValue, "cohValue"); // // cohAlternative // $resources->ApplyResources($this->cohAlternative, "cohAlternative"); // // mnsMain // $this->mnsMain->AccessibleDescription = NULL; $this->mnsMain->AccessibleName = NULL; $resources->ApplyResources($this->mnsMain, "mnsMain"); $this->mnsMain->BackgroundImage = NULL; $this->mnsMain->Font = NULL; $this->mnsMain->Items->AddRange(array($this->tmiFile, $this->tmiTools, $this->tmiHelp)); $this->mnsMain->Name = "mnsMain"; // // tmiFile // $this->tmiFile->AccessibleDescription = NULL; $this->tmiFile->AccessibleName = NULL; $resources->ApplyResources($this->tmiFile, "tmiFile"); $this->tmiFile->BackgroundImage = NULL; $this->tmiFile->DropDownItems->AddRange(array($this->tmiExit)); $this->tmiFile->Name = "tmiFile"; $this->tmiFile->ShortcutKeyDisplayString = NULL; // // tmiExit // $this->tmiExit->AccessibleDescription = NULL; $this->tmiExit->AccessibleName = NULL; $resources->ApplyResources($this->tmiExit, "tmiExit"); $this->tmiExit->BackgroundImage = NULL; $this->tmiExit->Name = "tmiExit"; $this->tmiExit->Click->Add(new System:::EventHandler(array($this, "tmiExit_Click"))); // // tmiTools // $this->tmiTools->AccessibleDescription = NULL; $this->tmiTools->AccessibleName = NULL; $resources->ApplyResources($this->tmiTools, "tmiTools"); $this->tmiTools->BackgroundImage = NULL; $this->tmiTools->DropDownItems->AddRange(array($this->tmiLanguage, $this->tssTools1, $this->tmiJump, $this->tmiJumpToSame, $this->tmiRefreshAll)); $this->tmiTools->Name = "tmiTools"; $this->tmiTools->ShortcutKeyDisplayString = NULL; $this->tmiTools->DropDownOpening->Add(new System:::EventHandler(array($this, "tmiTools_DropDownOpening"))); // // tmiLanguage // $this->tmiLanguage->AccessibleDescription = NULL; $this->tmiLanguage->AccessibleName = NULL; $resources->ApplyResources($this->tmiLanguage, "tmiLanguage"); $this->tmiLanguage->BackgroundImage = NULL; $this->tmiLanguage->Name = "tmiLanguage"; $this->tmiLanguage->ShortcutKeyDisplayString = NULL; $this->tmiLanguage->Click->Add(new System:::EventHandler(array($this, "tmiLanguage_Click"))); // // tssTools1 // $this->tssTools1->AccessibleDescription = NULL; $this->tssTools1->AccessibleName = NULL; $resources->ApplyResources($this->tssTools1, "tssTools1"); $this->tssTools1->Name = "tssTools1"; // // tmiJump // $this->tmiJump->AccessibleDescription = NULL; $this->tmiJump->AccessibleName = NULL; $resources->ApplyResources($this->tmiJump, "tmiJump"); $this->tmiJump->BackgroundImage = NULL; $this->tmiJump->Name = "tmiJump"; $this->tmiJump->ShortcutKeyDisplayString = NULL; $this->tmiJump->Click->Add(new System:::EventHandler(array($this, "tmiJump_Click"))); // // tmiJumpToSame // $this->tmiJumpToSame->AccessibleDescription = NULL; $this->tmiJumpToSame->AccessibleName = NULL; $resources->ApplyResources($this->tmiJumpToSame, "tmiJumpToSame"); $this->tmiJumpToSame->BackgroundImage = NULL; $this->tmiJumpToSame->Name = "tmiJumpToSame"; $this->tmiJumpToSame->ShortcutKeyDisplayString = NULL; $this->tmiJumpToSame->Click->Add(new System:::EventHandler(array($this, "tmiJumpToSame_Click"))); // // tmiRefreshAll // $this->tmiRefreshAll->AccessibleDescription = NULL; $this->tmiRefreshAll->AccessibleName = NULL; $resources->ApplyResources($this->tmiRefreshAll, "tmiRefreshAll"); $this->tmiRefreshAll->BackgroundImage = NULL; $this->tmiRefreshAll->Name = "tmiRefreshAll"; $this->tmiRefreshAll->ShortcutKeyDisplayString = NULL; $this->tmiRefreshAll->Click->Add(new System:::EventHandler(array($this, "tmiRefreshAll_Click"))); // // tmiHelp // $this->tmiHelp->AccessibleDescription = NULL; $this->tmiHelp->AccessibleName = NULL; $resources->ApplyResources($this->tmiHelp, "tmiHelp"); $this->tmiHelp->BackgroundImage = NULL; $this->tmiHelp->DropDownItems->AddRange(array($this->tmiAbout)); $this->tmiHelp->Name = "tmiHelp"; $this->tmiHelp->ShortcutKeyDisplayString = NULL; // // tmiAbout // $this->tmiAbout->AccessibleDescription = NULL; $this->tmiAbout->AccessibleName = NULL; $resources->ApplyResources($this->tmiAbout, "tmiAbout"); $this->tmiAbout->BackgroundImage = NULL; $this->tmiAbout->Name = "tmiAbout"; $this->tmiAbout->ShortcutKeyDisplayString = NULL; $this->tmiAbout->Click->Add(new System:::EventHandler(array($this, "tmiAbout_Click"))); // // sfdExport // $this->sfdExport->DefaultExt = "reg"; $resources->ApplyResources($this->sfdExport, "sfdExport"); // // frmMain // $this->AccessibleDescription = NULL; $this->AccessibleName = NULL; $resources->ApplyResources($this, "\$this"); $this->AutoScaleMode = System:::Windows:::Forms:::AutoScaleMode::Font; $this->BackgroundImage = NULL; $this->Controls->Add($this->tscMain); $this->Font = NULL; $this->MainMenuStrip = $this->mnsMain; $this->Name = "frmMain"; $this->Load->Add(new System:::EventHandler(array($this, "frmMain_Load"))); $this->FormClosed->Add(new System:::Windows:::Forms:::FormClosedEventHandler(array($this, "frmMain_FormClosed"))); $this->tscMain->BottomToolStripPanel->ResumeLayout(false); $this->tscMain->BottomToolStripPanel->PerformLayout(); $this->tscMain->ContentPanel->ResumeLayout(false); $this->tscMain->TopToolStripPanel->ResumeLayout(false); $this->tscMain->TopToolStripPanel->PerformLayout(); $this->tscMain->ResumeLayout(false); $this->tscMain->PerformLayout(); $this->stsStatus->ResumeLayout(false); $this->stsStatus->PerformLayout(); $this->splMain->Panel1->ResumeLayout(false); $this->splMain->Panel2->ResumeLayout(false); $this->splMain->ResumeLayout(false); $this->cmsContext->ResumeLayout(false); $this->mnsMain->ResumeLayout(false); $this->mnsMain->PerformLayout(); $this->ResumeLayout(false); } } } ?> ================================================ FILE: Samples/RegEditPHP/RegEditPHP/frmMain.resx ================================================ text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 576, 405 System.Windows.Forms.ToolStripPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 &Binary value ... 40, 20 System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAAB1TeXN0 ZW0uV2luZG93cy5Gb3Jtcy5UcmVlTm9kZQgAAAAEVGV4dAROYW1lCUlzQ2hlY2tlZApJbWFnZUluZGV4 CEltYWdlS2V5ElNlbGVjdGVkSW1hZ2VJbmRleBBTZWxlY3RlZEltYWdlS2V5CkNoaWxkQ291bnQBAQAA AQABAAEICAgCAAAABgMAAAASSEtFWV9MT0NBTF9NQUNISU5FBgQAAAASSEtFWV9MT0NBTF9NQUNISU5F AP////8GBQAAAAZjbG9zZWT/////BgYAAAAGY2xvc2VkAAAAAAs= Alt+F4 System.Windows.Forms.ImageList, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 0, 0 0 iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAGNJREFUOE9jYKAW aGho+I+OiTYbpPHAgQP///9nQKFB4gQNwaUZZhg2l6EYDOKQCqAGQFyHMADV+ejeQeZjNQBbGOAyZNQF B8AJDhj+VIwFXIkFnzjcBdCkCnMSqTTBlE57BQAHeeYQb3jOvQAAAABJRU5ErkJggg== System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Fill System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Value (alternative) System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEwAA CxMBAJqcGAAAAUFJREFUOE9j/P//PwNFAGQACG86dOM/Ol6378r/lTvP/1+y+SQId8PUItNgzTADgDRW MGf1gf9mXilYDYEbsH7/VVz6/6/defL/rqNXYIb0YHXB6t0XsRpQMFP5/7lrZ/7X9y/5b+WXDjYEqwHL t52BG/Dw5bn/II0wHF4t8H/dzlP/Jy/ajtuAxZtOwA0AaTx2dRWYH1Qm+P/2owv/X779CjbA1DMZuwvm rTuMYgCM8/PXn//vPn7///D5R/wGzFq5DyMM/vz99//T159gr9x6+A6/AdOW7oIb8ObjPbCm7z9+/7/6 8AiYffn2a/wGgPwHA8gBCGLvOb3n/+mrz4k34Onb6//9swTAAXfn8fv/F2+++n/k/BPiDUAOuKt33/w/ efnZ/72nHhJnAMgr+DDOaITFMUgBIYw1JWLLacSIAQBXZuNaAr2wAAAAAABJRU5ErkJggg== System.Windows.Forms.SplitterPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tscMain.LeftToolStripPanel 265, 22 tmiJumpToSame 0 &Tools iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEwAA CxMBAJqcGAAAAjJJREFUOE+lk91L01EYx/NP6L4boYtua2oM52Q5+JVzKMuGYUWk9os0S9NlmqhYmUYt XyCd4tJJq9UknFTkC5giJWIsJfMtp7jE4Ss6EQy+necEO66sizzw/C4OfD7PeV5+IQD27emQ4M1rPyhc betoda7hmX0ZzU0+1FvmUVM9B/NDD+6VTaGkeBwF+V+QmzOMa1fdDGXJ6UNgdxdQXbVFl389m1vb0CV1 43TSKx4BgfPlKhdUlK/8E/YtbyLa8BYKhQzjKYcQ2J8ucUFJ8fddBZSZ4G/eVYTpXci/OY2ThhYhsDYu cMEN0+Qfgp3w5wkfDklOZGeNIiHeKgS1j71ckHllOEjwO9zv9uKAxg5ZHoRebxGCqspZLpAvDgYEu8Fd AzPYH9mEM2ffIza2RgjuV0yjswNslMD5lI8wnuvj3aaGUc30bMr8C+5BovEdJMksBLdLJ9DuAtsBoMX2 g819A2V3F3lTqWFUc0a6OwDHJbRBqy0XglsFo3A8B55Yt9ni+KFLzgoKwwUTki8X8sxx8Qw+4YBGUyoE ptwRBgOVj/w8MwnYeiNMJWFobAEjU4uQc+4gRtfKYdUxG9TqQiGgtbTUIfBsEhB8Ke8BvnqW4Jlfw/Ui M8I1NgY3IzyqAarIPCHISP/E6l7nNR/UOhB6RMKL9l64OvrR2TOAvg9DOK43QqFuRASDDytroVRmBwkS 01J7+XrShtGS0JxpVNRtahjVTFkpCD4akSkE9FP8b/wEuMDBOdcQbKsAAAAASUVORK5CYII= splMain.Panel2 System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 F2 System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 REG_EXPAND_SZ Jump to &same 4 System.Windows.Forms.ToolStripPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 295, 405 iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAJBJREFUOE+tk4EO gCAIRPXP+TT/zDoTRnqltNhYbcHjCMgiUlPQzpxsKQBEDPG3ol8AKGiQFUBSqnC1noi2L48CFFRKmQFa DU8ENKldwaiEAkymk+0T/ftSgfa9DXgK3Aawfsf+/TRe/8HOYv0L0JGxyvjmne6BbtUYPG0dxttvx1rw h8gSyKE2CAUErtpu4QCx1HhPZJRr1QAAAABJRU5ErkJggg== 159, 22 REG_DWORD System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 &Copy full path &QWord value ... 0 None 265, 22 &Help F5 tscMain Enter, F4 AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAAB1TeXN0 ZW0uV2luZG93cy5Gb3Jtcy5UcmVlTm9kZQgAAAAEVGV4dAROYW1lCUlzQ2hlY2tlZApJbWFnZUluZGV4 CEltYWdlS2V5ElNlbGVjdGVkSW1hZ2VJbmRleBBTZWxlY3RlZEltYWdlS2V5CkNoaWxkQ291bnQBAQAA AQABAAEICAgCAAAABgMAAAAVSEtFWV9QRVJGT1JNQU5DRV9EQVRBBgQAAAAVSEtFWV9QRVJGT1JNQU5D RV9EQVRBAP////8GBQAAAAZjbG9zZWT/////CQUAAAAAAAAACw== System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 REQ_QWORD 1 0 262, 6 tvwRegistry 576, 451 tmiHelp 265, 22 &New frmMain AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAAB1TeXN0 ZW0uV2luZG93cy5Gb3Jtcy5UcmVlTm9kZQgAAAAEVGV4dAROYW1lCUlzQ2hlY2tlZApJbWFnZUluZGV4 CEltYWdlS2V5ElNlbGVjdGVkSW1hZ2VJbmRleBBTZWxlY3RlZEltYWdlS2V5CkNoaWxkQ291bnQBAQAA AQABAAEICAgCAAAABgMAAAARSEtFWV9DVVJSRU5UX1VTRVIGBAAAABFIS0VZX0NVUlJFTlRfVVNFUgD/ ////BgUAAAAGY2xvc2Vk/////wYGAAAABmNsb3NlZAAAAAAL tscMain.RightToolStripPanel &Export ... 0, 0 &Delete 265, 22 0, 0 iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEwAA CxMBAJqcGAAAAUFJREFUOE9j/P//PwNFAGQACG86dOM/Ol6378r/lTvP/1+y+SQId8PUItNgzTADgDRW MGf1gf9mXilYDYEbsH7/VVz6/6/defL/rqNXYIb0YHXB6t0XsRpQMFP5/7lrZ/7X9y/5b+WXDjYEqwHL t52BG/Dw5bn/II0wHF4t8H/dzlP/Jy/ajtuAxZtOwA0AaTx2dRWYH1Qm+P/2owv/X779CjbA1DMZuwvm rTuMYgCM8/PXn//vPn7///D5R/wGzFq5DyMM/vz99//T159gr9x6+A6/AdOW7oIb8ObjPbCm7z9+/7/6 8AiYffn2a/wGgPwHA8gBCGLvOb3n/+mrz4k34Onb6//9swTAAXfn8fv/F2+++n/k/BPiDUAOuKt33/w/ efnZ/72nHhJnAMgr+DDOaITFMUgBIYw1JWLLacSIAQBXZuNaAr2wAAAAAABJRU5ErkJggg== System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 147, 22 iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAIhJREFUOE+9kw0O gCAIhfXmHs2bmS97DH/YoLXY2LLgg2eQSyktBa3nZEkBIGKIn4q+AaCgQDQgpdblDKfpM56fRMgeTsAa SIj1vtb6MQAteySws62DyJ9ArFuC1Zkb8N8lWpVcEqDHMnzTzrjpDjhVa/A2db1NDp4A9CKeEg6LekOO gMBWyy5cVhhsBP+FxlcAAAAASUVORK5CYII= 0 6, 13 tssTools1 System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 159, 22 iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEwAA CxMBAJqcGAAAATBJREFUOE9j/P//PwNFAGQAOgYaCDIVKAw2HM7GqhabIEwMZgheNVQzIDo6Otff33+X t7f3THd3dwGY82EWWFhYlAPxfyguh7sSxPD19e338fF57OHhccrV1fW/tbX1I2QDgJrSQBqRDAMZ5AJW AyKANtbDJIGGvLW0tIQHIEgcqPgMFgM64AaAGEFBQX1AfNXLy+sbTDEsEBMSEmBOh9NZWVkQS4CahEJD Q/+HhITcA7IF7O3tb5mbm6O74C7U72BnI2OQ/ysCAgL+u7m5LXZ2duYHav5mZmaGbgAsAFcBDRIEYqXV q1dD1ACdLGBjY/MfpAmIb5uYmLwzNjZGMQAaDh1Aje9AGGQhSizY2dkJAwPOFMN50NRIVkKCJWFCqREj H6AEELkuoFpmwud3mBwAxyxA1dGzKyUAAAAASUVORK5CYII= 0, 0 &File 160, 186 0 0 &About ... &Multistring value ... tmiEdit &Exit Value 1 Type toolStripContainer1 System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Windows.Forms.ToolStripPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tscMain 120 tscMain 35, 20 System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Expandable string ... $this System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 159, 22 cohValue System.Windows.Forms.SplitterPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 sfdExport System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAAB1TeXN0 ZW0uV2luZG93cy5Gb3Jtcy5UcmVlTm9kZQgAAAAEVGV4dAROYW1lCUlzQ2hlY2tlZApJbWFnZUluZGV4 CEltYWdlS2V5ElNlbGVjdGVkSW1hZ2VJbmRleBBTZWxlY3RlZEltYWdlS2V5CkNoaWxkQ291bnQBAQAA AQABAAEICAgCAAAABgMAAAANSEtFWV9EWU5fREFUQQYEAAAADUhLRVlfRFlOX0RBVEEA/////wYFAAAA BmNsb3NlZP////8JBQAAAAAAAAAL &Jump to key ... 0 tssCms1 &Key ... iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAJBJREFUOE+tk4EO gCAIRPXP+TT/zDoTRnqltNhYbcHjCMgiUlPQzpxsKQBEDPG3ol8AKGiQFUBSqnC1noi2L48CFFRKmQFa DU8ENKldwaiEAkymk+0T/ftSgfa9DXgK3Aawfsf+/TRe/8HOYv0L0JGxyvjmne6BbtUYPG0dxttvx1rw h8gSyKE2CAUErtpu4QCx1HhPZJRr1QAAAABJRU5ErkJggg== Fill System.Windows.Forms.SplitContainer, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tmiNewQWord tscMain.ContentPanel tmiExport cohAlternative tmiAbout mnsMain 1 REG_BINARY tscMain.BottomToolStripPanel System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tscMain.ContentPanel tmiFile AAABAAIAICAQAAAABADoAgAAJgAAABAQEAAAAAQAKAEAAA4DAAAoAAAAIAAAAEAAAAABAAQAAAAAAAAC AAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAMDAwACAgIAAAAD/AAD/ AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAAAACO/vb+/m7+9gAAC7uwAAAAj+/m7+9v 7+ZgAAsAsAAAAI7+9v7+bv72YAALALAAAACP7+bv72/v5mC7uwC7sAAAhmZmZmYP//ZrsAAAALuwAI/v 5u/vYO/vuwAAAAAAuwCO/vb+/mYAC7AAAAAAAAsAj+/m7+9mBmsAAAAAAAALsI7+9v7+Zga7AAAAALAA ALCGZmD//2YGsAAAAAC7AACwjv72Bm72BrAAC7AAuwAAsI/v5mAAAA+7u7uwALsAALCO/vZgZmZg/v5g sAALAACwj+/mYGZvZgAAC7AAAAALsI//9mBm/mYGZrsAAAAACwAI7+9gb+9mBruwAAAAALsAAIZmYP// ZgawAAAAAAuwAAAI7+9v7+YLsAAAALu7AAAAAIZmZmZmCwAAAACwAAAAAAAI7+9v7+sAALAAu7u7sAAA AIiIiIiLAAC7ALsAALAAAAAAAAAACwAAuwCwAACwAAAAAAAAAAsAAAsAsAAAsAAAAAAAAAALsAAAAAAA C7AAAAAAAAAAALAAAAAAALtgAAAAAAAAAAi7AAAAAAu2AAAAAAAAAAAIa7sAAAC7YAAAAAAAAAAACP77 sAC7uIAAAAAAAAAAAACP77sAsAAAAAAAAAAAAAAACPALu7AAAAAAAAAAAAAAAACAAAAAAAAAAAD//wAA eH8AADh/AAAYfwAAAB8AAAAHAAAAAwAAAAMAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAA4AA AAPAAAAH4AAAD/AAAH/4AAAB/AAAAf/+AAH//gAB//4AAf//AAD//gAB//4AA//+AAf//wB///+If/// 3/8oAAAAEAAAACAAAAABAAQAAAAAAIAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAgAAAgAAAAICAAIAA AACAAIAAgIAAAMDAwACAgIAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAu7AAj+b+b+uw uwCO9u9uuwALsIZmZmuwAAC7j+b+awCwsAuO9u9rALCwC4Zgb2u7sAALj+YAALsAALuO9gZrsAALsAjv DvsAALsAAIZv+wCwu7sACIiLALCwCwAAAAuwAAC7AAAACLsAC7AAAAAAi7C7AAAAAAAIu7AAAAcAAAAD AAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAgAMAAMAAAADgAAAA/gAAAP4BAAD/AwAA/4cAAA== tmiNewBinary False iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEwAA CxMBAJqcGAAAAfFJREFUOE+lk99LU3EYh0//SSlDqptu7KqbiDKlwKDwoqAgi652oVddRYZBVjMWONsW 1ixlm53pItJFysy1NJk5169Jy8A2mMo5upzTM3va+UpTF24XvfDcnO95n/f9nB+7AOm/yjv8BR15KCJw 9ofo9L7jts1brctLIenNheXoC3K56SkHa+oPlBR4BiPb+rPrv2nreoUvEOFsQ2tJieQcmBACXxTkDxCO qdx3vEQeUXEPK7j8Co8GFMy9C4Lzd+OHtm4ldXqD+Q1W17KoSxniyZQQFFZz9xyVlwI6eYlkd/vFfR2B NUz9KtflnzQ+jtH1ev4fQYM1iXdUZX9dn46QSJZcXj33clpjTkkzE1/kU2we+4uEELTIWUF4epELpgT7 6p6z93QPFbVP9GNJ0vOuZLT8ZKM9yhXLR+65ZrZtoP7SmJ5dITC1hFUex3Dy4aZATWX4/D3JxNc4wfAP ht5/o6lj4/Ve605htCQ4dyfKqRuTAqs8hqGmfVNQWX2RQhrNk0Kg5eIlFY2p2DKDIRXPmwUe9AQprzJv CHb6UOqbR4Vg6+S/G7S731J21FRccOaqn/TqOvbeEDbPONZnY2Ky3mxxjrDnyK3igiqjL/e0XYKKWgeG EzbKj7dRdqw119zC7sM3iwt2ilZ4veTfVkr0By//4cDea+9lAAAAAElFTkSuQmCC System.Windows.Forms.SaveFileDialog, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Windows.Forms.TreeView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tscMain.TopToolStripPanel 120 tmiNewString 159, 22 tscMain 0 tmiNew 0 tmiNewDWord iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEwAA CxMBAJqcGAAAApdJREFUOE+Nkt9PUnEYxukv6K6L5uZF3nTTbOuiuumiKy8Sy7W5tdZF6DDMtMylSWUz ZoVmuJjMBMTI9My0peVmDX+loagF/QJU8HcCogI7Bzic8/Q9HLZu3PC7vfvuvXg/z/M+ew8AkKR77r6j tkMZh0MHM09mzI93ZWWdPrdIB1yONfdiTCIA0lXcKTV7B48Du2qsjBaQvwmeD8cQsef0pR1Own3VLoS1 ADuJ8FoP+ccg9FvOmvTqAsDZnckvWfIR+dsLDjug/f0Q+tWhE/sDEAd3sdtMIWqhCIQiTijSg/Or9gdg XXl5no/ZFLeppIL6M8CQTMxg4QYkhjc/0PbagdZX36Brn8UL/TQ0OiueaSfw9Pko6hssMLfUYqRXCf67 CtvduQj0FCA8X4J16yVI9J0O8DwPluMRYznQUQ4hmkMwkoBvh8VakIXXFwcMOuBeNXBFClw4AvX5UyQe cgJtZjs4MlzesgqFZgWyhmVcrvfCH2KxsZ3AcmDv4bJbXSLgJbHOJnhcrPNAen8BOdVunK10YVNQ32JF ZWUVUc4F8kVlq4vB9bJOEaAzzSHO8mDiHCIMh21i3R9KYJ1Y38v29DyDCScDRalZBLQYZxAlw486ZlDX Po2HRise6CeBgC21M1FO7XyzcQBl6vcY/8OgWNEhArR6G+gYCY5JJNV9uyl1ASAUWUGwPeuJYsrN4AsZ Hv1FQ15sEgHNrVOIkOSTDkzEgUF0YMsmV54armweQkXTIEQH/Rj+SaNQ3i4CNLqvSfVgOJEMbj0Yh9cf h3sjht+rMdiXYphd/K8+QtQ/O2jIigwiQDgYtWYMjxuHUffkE2pVg1DWDqCq5h1u33mL8goKpSRxRYkZ 8msmFBYZcVWmT5YA+Aehl/jy7tE8WgAAAABJRU5ErkJggg== 576, 405 Fill iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAI5JREFUOE+lUwES gCAI05/7NH9WLoOgZolx550lmwNHLqVsKRgNkxUCgkgg3126QoALlWSFoMlH2X1FCaTcWqsnSAnN7P2Q vXyzf46AASzINllyXxV8gXE+VQJ73ikFtqRRXx4KImaiJfwigJxR4Mwu6gNx1T35tOvluuY8MZ72wA4i A5BBPUgoQWCqVdUOvHGH+nw++r8AAAAASUVORK5CYII= tmiCopyFullPath &Edit ... asc 0, 0 System.Windows.Forms.ListView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 REG_MULTI_SZ 2 Refresh content of current node AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAAB1TeXN0 ZW0uV2luZG93cy5Gb3Jtcy5UcmVlTm9kZQgAAAAEVGV4dAROYW1lCUlzQ2hlY2tlZApJbWFnZUluZGV4 CEltYWdlS2V5ElNlbGVjdGVkSW1hZ2VJbmRleBBTZWxlY3RlZEltYWdlS2V5CkNoaWxkQ291bnQBAQAA AQABAAEICAgCAAAABgMAAAATSEtFWV9DVVJSRU5UX0NPTkZJRwYEAAAAE0hLRVlfQ1VSUkVOVF9DT05G SUcA/////wYFAAAABmNsb3NlZP////8GBgAAAAZjbG9zZWQAAAAACw== iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEwAA CxMBAJqcGAAAAhJJREFUOE+Vk31LU2EYxif0TfoCwf7qSyTVB5Aos2bDRubKajGsRGz1RwQuSsssI0Vn Ls2ypA10ypbBKtecx9f1QiJkpaTJr/t+9nKwlOiBH+dwnnNf1/Xc9zklgOO/VukOU5CY23A4xylxXAkv oFzt+0ggnKUxNEtD5xT1D1JcbEvib36Fr2mU2mtRaAmCr5b4LofBmAcezfNrA4OudbmursPyT1j8AR+W YXpJNvLFlJXCvp1c3rs7J9DYPcOaFCl14rgV2xUbgYbODCtrGNR5Rfgm7kur8Pl73vncaSjbA/tzzp4L vcbdCFxqn+CrFCh/um/lnHiT2SxQ15o0Z1VUwOnEwGLcNMw45888tgAj45N4/D12An9zgqw0SlGB4lIB RZqnsXVveB5exjNUne+yBXxNMSzpslIQCAaDuTHli/Vt3YvMwFAsg/vMQ1tA55v6gmFTAjuLudO95xb0 Ry0qT7XbAt7AIK8/YdhujIXnAxl4HLFwnbxrC1TX9zMqzVHGshCTc47I/fAcRGcl8jQMivPAJITfQ2jI osJz2xbQjkbkReVfCUIT0PXCotx90xZwn+3gmUQzTOWuT4UnQp+49oprTwq6pbjjbU7goEv+icKHVBB4 l06TTKXRD0VnrePSjmvT9NwaXYv/Eqj03qdIzT1cXqGmjaPVrRw5cYfDx1sor7rFoWM3xLnJcKDiejHB b88e++xiBDeHAAAAAElFTkSuQmCC tscMain 265, 22 cmsContext 118, 22 tmiDelete tscMain.TopToolStripPanel splMain tmiExit 1 Select &all System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 159, 22 Fill 0, 17 1 tmiJump tmiNewSep1 44, 20 132, 22 Registry files (*.reg)|*.reg|XML files (*.xml)|*.xml|Binary registry file (*.*)|*.* tmiSelectAll System.Windows.Forms.ToolStripContainer, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuStrip1 System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 0 System.Windows.Forms.MenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 156, 6 159, 22 295 System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAI5JREFUOE+lUwES gCAI05/7NH9WLoOgZolx550lmwNHLqVsKRgNkxUCgkgg3126QoALlWSFoMlH2X1FCaTcWqsnSAnN7P2Q vXyzf46AASzINllyXxV8gXE+VQJ73ikFtqRRXx4KImaiJfwigJxR4Mwu6gNx1T35tOvluuY8MZ72wA4i A5BBPUgoQWCqVdUOvHGH+nw++r8AAAAASUVORK5CYII= 3 cohType 159, 22 tmiTools tscMain.BottomToolStripPanel tmiNewMulti Del AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAC6 DQAAAk1TRnQBSQFMAgEBCAEAAQkBAAEEAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo AwABQAMAATADAAEBAQABCAYAAQwYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/ AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD//8A/wD/AP8ALAAC7BoA AewJAAHsAQcEAAHsCQAB7AEHCAAC7AgADuwBAAHsAgAEBwHsBAAB7AH/AQcBAAHsAgAEBwHsBAAB7AH/ AQcHAATsBwAO7AEAAewBBwb/BAcC/wEHAQAB7AEHBv8EBwL/AQcHAATsBwAO7AEAAewF/wL5Bv8BBwEA AewN/wEHBgAG7AcADOwCAAHsBf8C+Qb/AQcBAAHsDf8BBwYABuwHAAzsAgAB7A3/AQcBAAHsAf8CBAH/ BAQB/wMEAf8BBwUACOwHAArsAwAB7AX/AvkG/wEHAQAB7AH/AgQB/wIEBf8CBAEHBQAI7AcACuwDAAHs Bf8C+Qb/AQcBAAHsAf8CBAL/AgQD/wIEAf8BBwQACuwHAAjsBAAB7Ab/AvkF/wEHAQAB7AMEA/8CBAP/ AgQBBwQACuwHAAjsBAAB7Af/AvkE/wEHAQAB7AH/AgQB/wMEAv8DBAH/AQcDAAzsBwAG7AUAAewD/wL5 Av8C+QT/AQcBAAHsDf8BBwMADOwHAAbsBQAB7AP/AvkC/wL5Av8B7AMAAewL/wHsBAAO7AcABOwGAAHs BP8E+QP/AewB/wHsAQAB7Av/AewB/wHsAgAO7AcABOwGAAHsC/8C7AIAAewL/wLsAwAO7AgAAuwHAA3s AwAN7BoAAuxKAAHsCQAB7AEHJAAB7AkAAewBBwEAAewCAAQHAewEAAHsAf8BByEAAewCAAQHAewEAAHs Af8BBwEAAewBBwb/BAcC/wEHAQAO7AQADOwCAAHsAQcG/wQHAv8BBwEAAewB/wL8Af8C/AL/A/wC/wEH AQAB7AH/AfsBBwH7AQcB+wEHAfsBBwH7AQcB+wHsBAAB7AH/AfsBBwH7AQcB+wEHAfsBBwH7AewCAAHs Df8BBwEAAewB/wL8Af8C/AH/AvwB/wL8Af8BBwEAAewB/wEHAfsBBwH7AQcB+wEHAfsBBwH7AQcB7AMA AewB/wH7AQcB+wEHAfsBBwH7AQcB+wEHAQAB7AEAAewN/wEHAQAB7AH/AvwB/wL8Af8C/AH/AvwB/wEH AQAB7AH/AfsBBwH7AQcB+wEHAfsBBwH7AQcB+wHsAwAB7AH/AQcB+wEHAfsBBwH7AQcB+wEHAewBAAHs AQAB7AL/CQEC/wEHAQAB7AH/AvwB/wL8Av8D/AL/AQcBAAHsAf8BBwH7AQcB+wEHAfsBBwH7AQcB+wEH AewCAAHsAf8BBwH7AQcB+wEHAfsBBwH7AQcB+wEAAuwBAAHsAf8CAQH/AgEB/wIBAf8CAQH/AQcBAAHs Df8BBwEAAewB/wH7AQcB+wEHAfsBBwH7AQcB+wEHAfsB7AIAAewK/wHsAQABBwHsAQAB7AL/BAEB/wIB Af8CAQH/AQcBAAHsAv8D/AL/AvwB/wL8Af8BBwEAAewB/wEHAfsBBwH7AQcB+wEHAfsBBwH7AQcB7AIA DewB+wHsAQAB7AT/AgEB/wIBAf8CAQH/AQcBAAHsAf8C/AH/AvwB/wL8Af8C/AH/AQcBAAHsAf8B+wEH AfsBBwH7AQcB+wEHAfsBBwH7AewDAAHsAf8BBwH7AQcB+wEHAfsBBwH7AQcB+wEHAewBAAHsAv8DAQEH Af8EAQL/AQcBAAHsAf8C/AH/AvwB/wL8Af8C/AH/AQcBAAHsDP8B7AMAAewB/wH7AQcB+wEHAfsBBwX/ AewBAAHsB/8CAQT/AQcBAAHsAv8D/AL/AvwB/wH8AewDAAHsAQcB+wEHAfsBBwH7AQcG7AMAAewB/wEH AfsBBwH7AQcB/wbsAQAB7Af/AgEC/wHsAwAB7Av/AewB/wHsAgAB7AEHAfsBBwH7AQcB7AoAAewF/wHs BwAB7Av/AewB/wHsAQAB7Av/AuwEAAXsDAAF7AgAAewL/wLsAgAN7CMADewDAAFCAU0BPgcAAT4DAAEo AwABQAMAATADAAEBAQABAQUAAYABARYAA/+BAAH/AfgB/wH4Af4BfwL/AeAB8AHgAfAB/gF/AYABAQQA AfwBPwGAAQEEAAH8AT8BgAEBBAAB+AEfAcABAwQAAfgBHwHAAQMEAAHwAQ8B4AEHBAAB8AEPAeABBwQA AeABBwHwAQ8EAAHgAQcB8AEPBAABwAEDAfgBHwQAAcABAwH4AR8EAAGAAQEB/AE/AQABAQEAAQEBgAEB AfwBPwEAAQMBAAEDAYABAQH+AX8BAAEHAQABBwL/Af4BfwH/AfgF/wH4AeAB8AT/AeAB8AIAAYABAQHg BgABAQHABgABAQHABgABAQGABgABAQGABgABAQcAAQEHAAEBBwABAQGABgABAQGABgABAwGAAQEDAAEB AYAB/wHAAX8BAAEBAQABAwHBAf8B4AH/AQABAwEAAQcE/wEAAQcL System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tmiRefreshAll System.Windows.Forms.StatusStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 147, 22 imlImages cohName Re&fresh System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 144, 6 stsStatus System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 1 tmiNewKey 265, 22 AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAAB1TeXN0 ZW0uV2luZG93cy5Gb3Jtcy5UcmVlTm9kZQgAAAAEVGV4dAROYW1lCUlzQ2hlY2tlZApJbWFnZUluZGV4 CEltYWdlS2V5ElNlbGVjdGVkSW1hZ2VJbmRleBBTZWxlY3RlZEltYWdlS2V5CkNoaWxkQ291bnQBAQAA AQABAAEICAgCAAAABgMAAAARSEtFWV9DTEFTU0VTX1JPT1QGBAAAABFIS0VZX0NMQVNTRVNfUk9PVAD/ ////BgUAAAAGY2xvc2Vk/////wYGAAAABmNsb3NlZAAAAAAL &DWord value ... iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEwAA CxMBAJqcGAAAAjVJREFUOE9j/P//P4O3l5fBP0aGHob/DG1MjAwHtm7d9o+BWODo6MLs7OKaDqT/Ozk7 f/P28g709vFmBhmMjq1sHViCAgOU3N3d8mByDECNLECcZGfvtM3c0va/vYPLHw8Pzypfb1RDVDQNOazt nZyArv3u4OA0B24AiAE0QBKILRwcXbZZ2dj/t7N3+O/v673R19eHGyRvamHL6e7pucLW3um3qal5t5ae CQ+KATAO0BA2IC6wd3D+bWfn9N/H13eZpZW9npWV3WRbG5v/eoYmk9W0DPiRvYbhT2tbW0Z7eydNoJfO m5lb/zcyNvtuaGz0Xk1Ld52yui4nerhgGABToG9g4qCnb/LT0sr2v56+0T0FZU0hbAGL1QBjExMFNXWd S7p6hv+ABv03MbX4r6Wte4soAwyNTOXVNLSvAg34o6GpvUZETNJETl5lm4Gh8X9Vde1MvF7Q0NaVkFVQ PiWnqPofaPshSQkpIR4+Pm5+IRFueSW16QYGxl9UtQxksQaihoEFh5yi2iIJacWPOrqGT7R19bVgCnkE BDg4Obn5dPUNz0rKKEySUVSDJzR4GEjJKniLSSj8V1XT/q+iptHKyc0LTgMwzMLCzAQUV1FRUb3PKyAo r65rwgSSAysQEBBiExERaxUSFv8vr6C8i4OLR42HTwCsABkLCAgym5lZTubm5TJV1zNHGABSJCOvasTK xj6RgZHJjpmFhRdbiINtZGBgYWJi4sKaEnFpwieOMyERaxgAd/H0VrlTD2AAAAAASUVORK5CYII= System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAAB1TeXN0 ZW0uV2luZG93cy5Gb3Jtcy5UcmVlTm9kZQgAAAAEVGV4dAROYW1lCUlzQ2hlY2tlZApJbWFnZUluZGV4 CEltYWdlS2V5ElNlbGVjdGVkSW1hZ2VJbmRleBBTZWxlY3RlZEltYWdlS2V5CkNoaWxkQ291bnQBAQAA AQABAAEICAgCAAAABgMAAAAKSEtFWV9VU0VSUwYEAAAACkhLRVlfVVNFUlMA/////wYFAAAABmNsb3Nl ZP////8GBgAAAAZjbG9zZWQAAAAACw== System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tmiNewExpandable splMain.Panel1 splMain tmiRename 0, 0 147, 22 0 iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAJBJREFUOE+tk4EO gCAIRPXP+TT/zDoTRnqltNhYbcHjCMgiUlPQzpxsKQBEDPG3ol8AKGiQFUBSqnC1noi2L48CFFRKmQFa DU8ENKldwaiEAkymk+0T/ftSgfa9DXgK3Aawfsf+/TRe/8HOYv0L0JGxyvjmne6BbtUYPG0dxttvx1rw h8gSyKE2CAUErtpu4QCx1HhPZJRr1QAAAABJRU5ErkJggg== 147, 22 576, 24 System.Windows.Forms.ToolStripPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tscMain splMain System.Windows.Forms.ToolStripContentPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Export registry key 576, 451 265, 22 90 576, 22 System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 RegEdit PHP tslKey tmiLanguage Name Ctrl+A Shift+F4 REG_SZ lvwRegistry 277, 405 &Rename &String value ... System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 &Refresh all None 159, 22 F7 &Language ... splMain.Panel1 tmiRefreshNode System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 splMain.Panel2 43 0, 0 216, 17 True 325, 17 113, 17 0, 0 ================================================ FILE: Samples/RegEditPHP/RegEditPHP/frmMain.user.php ================================================ Main application form partial class frmMain extends System:::Windows:::Forms:::Form{ //This class represents main form of this application. It contains the most of the code. //Initialization ///This name is used as name and text of placeholder child key const dummy = "dummy node"; //Each tree node in TreeView that have never been expanded is filled with one dummy node to have the + sign in front of itself (to appear expandable). This node is replaced with actual nodes before expanding. ///Gives access to localized resources private $Resources;//See ResourceAccessor.php ///Internal initialization method private function Init(){ //Call to this method wa manually added to __construct() in frmMain.php //Following commented lines are no longer needed because pictures now can be added form designer //$this->tmiNew->Image = Program::$Resources->new; //$this->tmiNewKey->Image = Program::$Resources->folder->ToBitmap(); //$this->tmiNewDWord->Image = //$this->tmiNewQWord->Image = Program::$Resources->numeric->ToBitmap(); //$this->tmiNewString->Image = //$this->tmiNewExpandable->Image = //$this->tmiNewMulti->Image = Program::$Resources->string->ToBitmap(); //$this->tmiNewBinary->Image = Program::$Resources->binary->ToBitmap(); //$this->tmiRename->Image = Program::$Resources->rename; //$this->tmiEdit->Image = Program::$Resources->edit; //$this->tmiDelete->Image = Program::$Resources->delete; //$this->tmiRefreshNode->Image = Program::$Resources->refresh; //Initialize sorter to sort list of values $this->Sorter = new Sorter($this->lvwRegistry); //Fill nodes added in designer with placeholder subnodes //This can be done in designer as well but it's so much clicking and use of self::dummy is better than use of "dummy key" (which'd be case of designer) foreach($this->tvwRegistry->Nodes as $node): $node->Nodes->Add(self::dummy)->Name=self::dummy; endforeach; } //Main menu //Handles click to Exit menu item private function tmiExit_Click(System:::Object $sender, System:::EventArgs $e) { $this->Close();//Close the main form (it terminates the application) } //Handles click to Language menu item private function tmiLanguage_Click(System:::Object $sender, System:::EventArgs $e) { //Create instance of form for language sleection $lSel = new LanguageSelector(); //Show it and test if user clicked OK if($lSel->ShowDialog($this) == DialogResult::OK): //If so, the application must be restarted (changing UI strings without restart is too much work) //To restart the application we need know path of it - location of assembly //So get the assembly from type contained in it $MyType = CLRTypeOf frmMain; $MyPath = $MyType->Assembly->Location; try{ //Launch it System:::Diagnostics:::Process::Start($MyPath); }catch(System:::Exception $ex){ //This probably will not happen self::OnError(Program::$Resources->e_Restart."\r\n$ex->Message"); return; } //If application successfully started, this can be closed $this->Close(); endif; } //Handles click on the Jump menu item private function tmiJump_Click(System:::Object $sender, System:::EventArgs $e) { //get path to jump to using InputBox (see InputBox.user.php) $Path = InputBox::GetInput(Program::$Resources->JumpToKey,Program::$Resources->JumpToKey_t); if(!is_null($Path)) //InputBox::GetInput returns null on cancel $this->JumpToKey($Path);//Do the jump } //Handles click on the Refresh all menu item private function tmiRefreshAll_Click(System:::Object $sender, System:::EventArgs $e) { //Remember currently selected key $OldPath = $this->tvwRegistry->SelectedNode->FullPath; //Clear content of all top-level nodes foreach($this->tvwRegistry->Nodes as $node): $node->Nodes->Clear; //And add placeholder into each of them to appear expandable $node->Nodes->Add(self::dummy)->Name=self::dummy; endforeach; //For user convenience, navigate to node that was selected when reloading (I hate when reloading changes my status) $this->JumpToKey($OldPath); } ///Navigates to key with given path ///Path full to navigate too ///success private function JumpToKey(string $Path){ //Firts trim trailing backslashes //We must use $Path->ToString() because we want to work with .NET string and .NET string is not same as PHP string (i think this is bug, teher should be only one string) while($Path->ToString()->EndsWith("\\")) $Path = $Path->ToString()->Substring(0,strlen($Path) - 1); //You can use many of PHP built-in function you are familiar with. Sometimes they are nicer/better tna .NET ones - as explode() $PathParts = explode("\\",$Path); $CurrentNodes = $this->tvwRegistry->Nodes;//Starting with top-level nodes foreach($PathParts as $Part)://For each path part foreach($CurrentNodes as $Node)://Wee look for node with same at current level if($Node->Name->ToLower() == $Part->ToString()->ToLower())://Note: Usage of ToString() on PHP string is required to use ToLower(); $Node->Name is not PHP string but .NET string $this->NoExpandQuestion=true;//Turn of expand question ofr HKCR $Node->Expand();//Expand node $this->NoExpandQuestion=false;//Turn the question back on $CurrentNodes = $Node->Nodes;//Dive one more level $LastNode = $Node;//Remember last succesfully found node (in case of failure, we will navigate to last-match level) continue 2;//Next (deeper) level endif; endforeach; self::OnError(Program::$Resources->e_KeyDoesNotExist($Path));//continue 2 above skips this line if node is found break; endforeach; if(!is_null($LastNode))://If there was matc at least at one level $this->tvwRegistry->SelectedNode = $LastNode;//select it $LastNode->EnsureVisible();//And scroll it to view return $LastNode->FullPath->ToLower() == $Path->ToString()->ToLower();//Only when all levels succeeded we consider jump successfull else: return false;//The root name was unknown endif; } //Hanndles click on the Jump to same key under ... menu item //It navigates to node with same addres but sapped first part HKLM<->HKCU (if possible) private function tmiJumpToSame_Click(System:::Object $sender, System:::EventArgs $e) { if($this->tvwRegistry->SelectedNode->FullPath->StartsWith("HKEY_CURRENT_USER\\")): $start=HKEY_CURRENT_USER;//current 1st part $new=HKEY_LOCAL_MACHINE;//new 1st part else: $new=HKEY_CURRENT_USER;//new 1st part $start=HKEY_LOCAL_MACHINE;//current 1st part endif; $new= $new . $this->tvwRegistry->SelectedNode->FullPath->Substring(strlen($start));///replace 1st part $this->JumpToKey($new);//Navigate to new path (if navigation is not possible, navigates as near as can) } //Handles dropdown opening of the Tools top-level menu item private function tmiTools_DropDownOpening(System:::Object $sender, System:::EventArgs $e) { //We enable/disable Jump to same menu item depending on if user is under HKCU or HKLM or not $this->tmiJumpToSame->Enabled = ( $this->tvwRegistry->SelectedNode->FullPath->StartsWith("HKEY_CURRENT_USER\\") or $this->tvwRegistry->SelectedNode->FullPath->StartsWith("HKEY_LOCAL_MACHINE\\")); //And adjust text to show name of target hive (top-level node) if($this->tmiJumpToSame->Enabled and $this->tvwRegistry->SelectedNode->FullPath->StartsWith("HKEY_CURRENT_USER\\")): $this->tmiJumpToSame->Text = Program::$Resources->JumToSameKey("HKLM"); elseif($this->tmiJumpToSame->Enabled): $this->tmiJumpToSame->Text = Program::$Resources->JumToSameKey("HKCU"); endif; } //Handles click on About menu item private function tmiAbout_Click(System:::Object $sender, System:::EventArgs $e) { $ad=new dlgAbout();//Create about dialog $ad->ShowDialog($this);//And show it } //Tree ///If false, user is askt if (s)he really wants to expand HKCR private $NoExpandQuestion = false; //Called before tree node is expanded //Dummy sub keys are deleted in this event and actual node content is loaded private function tvwRegistry_BeforeExpand(System:::Object $sender, System:::Windows:::Forms:::TreeViewCancelEventArgs $e) { if(!$this->NoExpandQuestion and $e->Node->FullPath==HKEY_CLASSES_ROOT and $e->Node->Nodes->Count == 1): //PHPBUG: //We use Sorter::Iterate because indexing and default properties does not work well in current version of Phalanger if(Sorter::Iterate($e->Node->Nodes->GetEnumerator(),0)->Name == self::dummy): //If node is HKCR and it was never expanded before, ask user if (s)he really wants to expand it (because it typically contains as many 2nd-level subkey as loading take a while (even in MS's regedit) if(MessageBox::Show(Program::$Resources->ExpandHKCR,Program::$Resources->ExpandHKCR_t,MessageBoxButtons::YesNo,MessageBoxIcon::Information) != DialogResult::Yes): //Cancels expanding (node will remain unexpanded) $e->Cancel = true; return; endif; endif; endif; //Test if node hals only one child - the Dummy if($e->Node->Nodes->Count==1): //Following 2 lines are same as Sorter::Iterate($e->Node->Nodes->GetEnumerator(),0) (legacy) $nem=$e->Node->Nodes->GetEnumerator(); $nem->MoveNext(); if($nem->Current->Name=self::dummy): //Need load childs from registry $this->Cursor = Cursors::$WaitCursor;//Set cursor to horglass (it may take a while) try{ self::FillNode($e->Node);//Load subkeys }catch(System:::Exception $ex){ $e->Node->Nodes->Clear();//When there is error, treat key as empty self::OnError($ex->Message);//Show error message } $this->Cursor = Cursors::$Default;//Revert cursor icon endif; endif; } //Caled after tree node is expanded private function tvwRegistry_AfterExpand(System:::Object $sender, System:::Windows:::Forms:::TreeViewEventArgs $e) { //We handle change of icon here //Note: Tree node has 2 icons - normal and selected // Both icons are taken from associated image list (set in designer) // and we want them to be the same, thus same key $e->Node->ImageKey="open"; $e->Node->SelectedImageKey="open"; } //Called after tree node is collapsed private function tvwRegistry_AfterCollapse(System:::Object $sender, System:::Windows:::Forms:::TreeViewEventArgs $e) { //Same as above, but change icon to closed $e->Node->ImageKey="closed"; $e->Node->SelectedImageKey="closed"; } ///Fills node with subnodes representing corresponding key subkeys ///Node to fill /// private static function FillNode(TreeNode $Node){ //1st clear any current content //It's typically dummy node, but for refresh it may be anything $Node->Nodes->Clear(); //Get key for node path //Nice with TreeViewIs that it gives path of node which is immediatelly usable for registry lookup $Key=self::getRegistryKey($Node->FullPath); $SubKeys=$Key->GetSubKeyNames();//Enumerate sub keys (this may throw an exception and it must be handles by caller) foreach($SubKeys as $SubKeyName)://Add the keys to current node $SubKey = $Node->Nodes->Add($SubKeyName);//Add it (this creates node with given text, adds it and returns it) $SubKey->Name = $SubKeyName;//Set its name (it is used by Fullpath) $SubKey->ImageKey = "closed";//Set its image $SubKey->SelectedImageKey = "closed"; $SubKey->Nodes->Add(self::dummy)->Name=self::dummy;//And fill it with dummy child (to seem to be axpandable) endforeach; //Note: Every node seems to be expandable if it has been never expanded // so user may experience following: // (S)he clicks the + and instead of node expanding, the + vanishes // it's not 100% good behavior, but is quite common and saves us some pre-testing } ///Gets registry key for its path ///Full path of key to open ///True to open key for writing, false to open it as readonly ///Opened key private static function getRegistryKey(string $Path,bool $writeable = false){ //We must firts parse the path $parts=explode("\\",$Path);//Explode it by \ //The bad thisng with .NET registry API is that there is no general-purpose function for opening registry key // The top-level keys (so-called hives) must be treated separatelly switch($parts[0])://So switch for them case HKCR://Shortcut names are not currently utilized by this program case HKEY_CLASSES_ROOT: $root=Registry::$ClassesRoot; break; case HKCU: case HKEY_CURRENT_USER: $root=Registry::$CurrentUser; break; case HKLM: case HKEY_LOCAL_MACHINE: $root=Registry::$LocalMachine; break; case HKU: case HKEY_USERS: $root=Registry::$Users; break; case HKCC: case HKEY_CURRENT_CONFIG: $root=Registry::$CurrentConfig; break; case HKDD: case HKEY_DYN_DATA: $root=Registry::$DynData; break; case HKPD: case HKEY_PERFORMANCE_DATA: $root=Registry::$PerformanceData; break; default: throw new CLRException(new ArgumentException(Program::$Resources->e_UnknownRoot)); endswitch; if(count($parts)==1) return $root;//Return root for single-part path //Otherwise open root's sub key (now ve have general-purpose function to open multiple levels at once) return $root->OpenSubKey(i'String'::Join("\\",$parts,1,count($parts)-1),$writeable); //Note: Two uncommon things at line above: //1) i'String' is Phalanger way how to point to class or function that has same name as Phalanger keyword (in this case string). We use this i-preceded string in single quotes. i'String' means System:::String //2) I pass $parts (PHP array) where .NET String[] array is expected //PHPBUG: // It is strange, but Phalanger currently has not silent implicit conversion from string to System::String but has conversion of array to String[] } //Called after node in tree is selected private function tvwRegistry_AfterSelect(System:::Object $sender, System:::Windows:::Forms:::TreeViewEventArgs $e) { //We need show values in this key try{ //get key and show values for it $this->LoadValues(self::GetRegistryKey($e->Node->FullPath)); }catch(System:::Exception $ex){ self::OnError($ex->Message); } $this->tslKey->Text=$e->Node->FullPath; } ///Loads values for given key rto ListView>/summary> ///Key to load values from /// private function LoadValues(RegistryKey $key){ //Gate value names (may cause Exception, must be caught by caller) $ValueNames=$key->GetValueNames(); //Clear list $this->lvwRegistry->Items->Clear(); foreach($ValueNames as $Name)://For each name $item=$this->lvwRegistry->Items->Add($Name);//Create and add item $item->Name=$Name;//Set its name switch($key->GetValueKind($Name))://We must support regtlue types separately case RegistryValueKind::Binary://Binary (got as array of bytes) $item->ImageKey="binary"; $kind=REG_BINARY;//You know - undefined constant's $value=$key->GetValue($Name); if(!is_null($value))$value=self::GetBytesString($value,&$alt);//Call helper method to display byte array break; case RegistryValueKind::DWord://DWord (got as int32) $item->ImageKey="numeric"; $kind=REG_DWORD; $value=$key->GetValue($Name); $alt="0x".$value->ToString("X");//Hexa $value=$value->ToString();//Decadic break; case RegistryValueKind::ExpandString://Expandable string (%something% is replaced by value of system variable something) $item->ImageKey="string"; $kind=REG_EXPAND_SZ; $value=$key->GetValue($Name,null,RegistryValueOptions::DoNotExpandEnvironmentNames);//Unexpanded value $alt=$key->GetValue($Name);//Expanded value break; case RegistryValueKind::MultiString://MultistringgotasString $item->ImageKey="string"; $kind=REG_MULTI_SZ; $value=$key->GetValue($Name); $value=System:::String::Join("; ",$value);//Just join it using semicolon $alt=$value;//No alternative sight break; case RegistryValueKind::QWord://QWord (got as int64) XP regedit does not support it, but we DO! $item->ImageKey="numeric"; $kind=REG_QWORD; $value=$key->GetValue($Name); $alt="0x".$value->ToString("X");//Hexa $value=$value->ToString();//decadic break; case RegistryValueKind::i'String'://Normal string //PHPBUG: //This is littele inconsistent behavior: // While RegistryValueKind::String is invalid // System:::String is valid $item->ImageKey="string"; $kind=REG_SZ; $value=$key->GetValue($Name); $alt=$value;//There is no alternative sight of plain text break; default://Unknown kind (tehre are more kinds of registry values - uncommon and I dunno what good for) //Just show that there is sth $item->ImageKey="unknown"; $kind="unknown"; $value=Program::$Resources->UnknownValue; $alt=Program::$Resources->UnknownValueAlt; endswitch; //Fill subitems (2nd, 3rd, 4th columns in list view) $item->SubItems->Add($kind); $item->SubItems->Add($value); $item->SubItems->Add($alt); endforeach; $this->lvwRegistry->Sort();//Sort list (sorting is actually provided by Sorter.php) $this->AfterSort();//Some after-sort settings } ///Gets display string for byte array ///Byte array to get values from ///Output parameter filled with alternative (decimal) representation of ///String representation of byte array (2-digits hexadecimal numbers separated by spaces) private static function GetBytesString(i'Array' $bytes,&$alt){ //Note: i'Array' means that we acceps System:::array, not PHP array //Output parameters passed by reference are possible in PHP as well, but not commonly used. This uis the rare case when it is useful // In phalanger you can use [out] attribute, whoch I'm not using here //StringBuolder is efficient way of concatenating strings in .NET $ret=new System:::Text:::StringBuilder(count($bytes)*3);//Initial capacity count*3 is not compulsory but is god for efficiency $ret2=new System:::Text:::StringBuilder(count($bytes)*3);//For decimal capacity as approximate foreach($bytes as $byte): if($ret->Length>0) $ret->Append(" ");//Add space, if non empty if($ret2->Length>0) $ret2->Append(" "); $ret->Append($byte->ToString("X2"));//Hexadecimal, 2 didigts $ret2->Append($byte->ToString());//Decimal endforeach; $alt=$ret2->ToString(); //StringBuilder must be converted to string explicitly return $ret->ToString(); } //Handles click on list view collumn private function lvwRegistry_ColumnClick(System:::Object $sender, System:::Windows:::Forms:::ColumnClickEventArgs $e) { //We do sorting here if($this->Sorter->Column == $e->Column): //If user click same column 2nd or more times switch($this->Sorter->Order)://reverse order case SortOrder::Ascending: $this->Sorter->Order=SortOrder::Descending; break; default:$this->Sorter->Order=SortOrder::Ascending; endswitch; else://CHange sort column and set order to ASC $this->Sorter->Order=SortOrder::Ascending; $this->Sorter->Column = $e->Column; endif; $this->lvwRegistry->Sort();//Force apply sorting $this->AfterSort();//After sort operations } ///Does common after ListView sort operations /// private function AfterSort(){ foreach($this->lvwRegistry->Columns as $col) $col->ImageKey=null;//Remove sort image from all columns //And set it for the used one using direction-aware image Sorter::Iterate($this->lvwRegistry->Columns->GetEnumerator(),$this->Sorter->Column)->ImageKey = $this->Sorter->Order == SortOrder::Ascending ? 'asc' : 'desc'; } //Context menu and actions //Called befor context menu is opened private function cmsContext_Opening(System:::Object $sender, System:::ComponentModel:::CancelEventArgs $e) { //Note: ContextMenuStrip is associated with TreeView and ListView in designer //We hide/show and enable/disable certain menu items here based on conditions //Note: The === compares 2 instances for bering reference equal (the same instance). It's stronger than ==.Phalanger behavior with CLR classes is a little different form original PHP usage. if($this->cmsContext->SourceControl === $this->tvwRegistry and is_null($this->tvwRegistry->SelectedNode)): //No TreeNode selected - this should not happedn $e->Cancel=true;//Do not show the menu return; endif; //Edit only for values $this->tmiEdit->Visible = ( $this->cmsContext->SourceControl === $this->lvwRegistry and $this->lvwRegistry->SelectedItems->Count == 1); //No rename for no value selected or more values selected $this->tmiRename->Visible = !($this->cmsContext->SourceControl === $this->lvwRegistry and $this->lvwRegistry->SelectedItems->Count <> 1); //No delete for no values selected $this->tmiDelete->Visible = !($this->cmsContext->SourceControl === $this->lvwRegistry and $this->lvwRegistry->SelectedItems->Count == 0); //No delete for root $this->tmiDelete->Enabled = !($this->cmsContext->SourceControl === $this->tvwRegistry and is_null($this->tvwRegistry->SelectedNode->Parent)); //Select all only for values $this->tmiSelectAll->Visible = $this->cmsContext->SourceControl === $this->lvwRegistry; //If there is nothig to select ... $this->tmiSelectAll->Enabled = $this->lvwRegistry->Items->Count > 0; //Refres only for nodes $this->tmiRefreshNode->Visible = $this->cmsContext->SourceControl === $this->tvwRegistry; //Copy only for single key or current values //Note: LIst veiw recognizec selected values and focused vakues $this->tmiCopyFullPath->Enabled = ( $this->cmsContext->SourceControl === $this->tvwRegistry or ($this->cmsContext->SourceControl === $this->lvwRegistry and !is_null($this->lvwRegistry->FocusedItem))); } //Handles attempt to rename tree node private function tvwRegistry_BeforeLabelEdit(System:::Object $sender, System:::Windows:::Forms:::NodeLabelEditEventArgs $e) { //Top-level cannot be renamed $e->CancelEdit = $e->CancelEdit || is_null($e->Node->Parent); } //Hanldes confirmed rename of tree node private function tvwRegistry_AfterLabelEdit(System:::Object $sender, System:::Windows:::Forms:::NodeLabelEditEventArgs $e) { //Reaname can be cancled or it is not rename at all (user haven't changed text - indinated by null Label) if(is_null($e->Label) or $e->Label == $e->Node->Text) $e->CancelEdit=true;//No change if($e->CancelEdit) return; $e->CancelEdit = !$this->RenameKey($e->Node, $e->Label);//Try to rename } //Handles confirned rename of values private function lvwRegistry_AfterLabelEdit(System:::Object $sender, System:::Windows:::Forms:::LabelEditEventArgs $e) { //Same as rename of key - the event can indicate no rename at all (null Label) if(is_null($e->Label)) $e->CancelEdit = true; $node = Sorter::Iterate($this->lvwRegistry->Items->GetEnumerator(),$e->Item); if($node->Text == $e->Label) $e->CancelEdit = true;//No change if($e->CancelEdit) return; $e->CancelEdit = $this->RenameValue($node, $e->Label);//Try to rename } //Handles click on New key context menu item private function tmiNewKey_Click(System:::Object $sender, System:::EventArgs $e) { $this->AddKey();//Add the key } //Handles click on Rename context menu item private function tmiRename_Click(System:::Object $sender, System:::EventArgs $e) { //We just detect which control context menu is show on and let the control to deal with rename on its own (in fact 2 functions above) if($this->cmsContext->SourceControl === $this->tvwRegistry): $this->tvwRegistry->SelectedNode->BeginEdit();//Tree else: Sorter::Iterate($this->lvwRegistry->SelectedItems,0)->BeginEdit();//List endif; } //Handles click on Edit context menu item private function tmiEdit_Click(System:::Object $sender, System:::EventArgs $e) { $this->EditValue();//Do the edit } //Handles doble-click on list view item //Note: Some lama-users like to instruct system to activate list view item on single click instead of on double click (link behavior) // If your ListView follows this user decision can be set in designer private function lvwRegistry_ItemActivate(System:::Object $sender, System:::EventArgs $e) { $this->EditValue();//Edit value value } //Handles click on delete on context menu item private function tmiDelete_Click(System:::Object $sender, System:::EventArgs $e) { //We just detect control contet menu is shown on and call appropriate method if($this->cmsContext->SourceControl === $this->tvwRegistry): $this->DeleteKey();//Delete key else: $this->DeleteValues();//Delete value endif; } //Handles key down when tree view is active private function tvwRegistry_KeyDown(System:::Object $sender, System:::Windows:::Forms:::KeyEventArgs $e) { //We are intrested only in some keys //KeyData contains or combination of KeyCode and Ctrl+Alt+Shift state switch($e->KeyData): case Keys::Delete: $this->DeleteKey();//Delete key (w/o any Ctrl+Shift+Alt) break; case Keys::F2://F2 key (w/o ...) if(!is_null($this->tvwRegistry->SelectedNode) and !is_null($this->tvwRegistry->SelectedNode->Parent)): $this->tvwRegistry->SelectedNode->BeginEdit(); endif; break; case Keys::F7: $this->AddKey();//F7 - I love Total Commander :-) endswitch; } //Handles key down on list view private function lvwRegistry_KeyDown(System:::Object $sender, System:::Windows:::Forms:::KeyEventArgs $e) { //Same note as abowe but we're interested in more keys switch($e->KeyData): case Keys::Delete: $this->DeleteValues();//delete break; case Keys::F2://rename if(!is_null($this->lvwRegistry->FocusedItem)) $this->lvwRegistry->FocusedItem->BeginEdit(); break; case Keys::Control | Keys::A://This is how to uttilize the key combination foreach($this->lvwRegistry->Items as $item)//Select all items $item->Selected=true; break; case Keys::F4://Edit (like in TC) case Keys::Enter: $this->EditValue();//Edit break; case Keys::Shift | Keys::F4://New string (like in TC) $this->Addvalue(RegistryValueKind::i'String'); break; endswitch; } //Handles click on any of New value menu items //Note: More events can have sam handler and more hahndlers can be attached to single event in .NET private function tmiNewValue_Click(System:::Object $sender, System:::EventArgs $e) { //Detect kind from item being clicked if($sender === $this->tmiNewBinary) $kind = RegistryValueKind::Binary; elseif($sender === $this->tmiNewDWord) $kind = RegistryValueKind::DWord; elseif($sender === $this->tmiNewExpandable) $kind = RegistryValueKind::ExpandString; elseif($sender === $this->tmiNewMulti) $kind = RegistryValueKind::MultiString; elseif($sender === $this->tmiNewQWord) $kind = RegistryValueKind::QWord; elseif($sender === $this->tmiNewString) $kind = RegistryValueKind::i'String'; $this->Addvalue($kind);//Do add } ///deletes currently selected registry key ///success private function DeleteKey(){ $KeyName=$this->tvwRegistry->SelectedNode->Text; //Ask user if(MessageBox::Show(Program::$Resources->DeleteKey($KeyName),Program::$Resources->DeleteKey_t,MessageBoxButtons::YesNo,MessageBoxIcon::Question) == DialogResult::Yes): //We must open parent key and ask it to delete its child $parts=explode("\\",$this->tvwRegistry->SelectedNode->FullPath); $ParentPath=i'String'::Join("\\",$parts,0,count($parts)-1);//Parent path try{ $ParentKey=$this->getRegistryKey($ParentPath,true);//Open parent }catch(System:::Exception $ex){ self::OnError($ex->Message); return false; } try{ $ParentKey->DeleteSubKeyTree($parts[count($parts)-1]);//Delete child }catch(System:::Exception $ex){ self::OnError($ex->Message); return false; } $this->tvwRegistry->SelectedNode->Remove();//On success delete the node visualy as vell return true; else: return false; endif; } ///Deletes selected values ///success private function DeleteValues(){ //First chose message if($this->lvwRegistry->SelectedItems->Count == 1): //For one-value deletion as with value name $item1=Sorter::Iterate($this->lvwRegistry->SelectedItems->GetEnumerator(),0)->Text; $message= Program::$Resources->DeleteValue($item1); else://Otherwise simly ask on values $message=Program::$Resources->DeleteValues; endif; //Ask user if(MessageBox::Show($message,Program::$Resources->DeleteValues_t,MessageBoxButtons::YesNo,MessageBoxIcon::Question)==DialogResult::Yes): try{//Open key $key=$this->getRegistryKey($this->tvwRegistry->SelectedNode->FullPath,true); }catch(System:::Exception $ex){ self::OnError($ex->Message); return false; } //Index of st selected item (to preselect something after deletion, users like it) $fsi=Sorter::Iterate($this->lvwRegistry->SelectedIndices->GetEnumerator(),0); //Number of items to delete (to detect skip) $todelcnt=$this->lvwRegistry->SelectedItems->Count; foreach($this->lvwRegistry->SelectedItems as $item): //Label is target for goto statement (Phalanger PHP extension) DeleteValue: try{ $key->DeleteValue($item->Name);//Try to delete }catch(System:::Exception $ex){//On error ask user what to do switch(self::OnError(Program::$Resources->e_DeleteValue($item->Name)."\r\n$ex->Message",MessageBoxButtons::AbortRetryIgnore)): case DialogResult::Ignore: continue 2;//Ignore, just procede to next selected value case DialogResult::Retry: goto DeleteValue;//Retry (this is where goto is usefully). default: break 2;//Stop deleteing more values (exit foreach loop) endswitch; } $deleted[]=$item;//Remeber deleted items (to delete them visually as well) endforeach; foreach($deleted as $deleteditem)//Delete items visually $this->lvwRegistry->Items->Remove($deleteditem); //If all selected items was deleted // there is no selected item now // if there is somethign to select if(count($deleted) == $todelcnt and $this->lvwRegistry->Items->Count > 0): //We will select item near the deleted one $newIndex = max(min($this->lvwRegistry->Items->Count-1,$fsi-1),0); Sorter::Iterate($this->lvwRegistry->Items->GetEnumerator(),$newIndex)->Selected = true; endif; return count($deleted) > 0;//It may indicate success or semi-success else: return false; endif; } ///Adds key under curent key ///Node (not key) to add key into ///Name of key to add. If empty user is asked. ///True to not add the key to TreeView and return it instead ///Bool success; created key on success when norefresh was true private function AddKey($parent=null, string $newname="", bool $norefresh=false){ //This is somewhat complicated because it ca operate in ineractive and non-interactive mode if(is_null($parent)): //Get parent node if we haven't got it if(is_null($this->tvwRegistry->SelectedNode)) return false; $parent = $this->tvwRegistry->SelectedNode; endif; $Name=$newname; if($newname<>"") goto testBS;//Do not ask for name //Ask for name EnterName: if(!is_null($Name=InputBox::GetInput(Program::$Resources->NameOfNewKey,Program::$Resources->CreateKey_t,$Name))): testBS: if($Name->Contains("\\"))://Name cannot contain \ self::OnError(Program::$Resources->e_InvalidName($Name)); if($newname=="") goto EnterName;//Interactive mode (repeat enter) else return false; endif; try{ //Open paren registry key for writing $parentkey=$this->getRegistryKey($parent->FullPath,true); }catch(System:::Exception $ex){ $this->OnError($ex->Message); return false; } //Check if key to be created already exists try{ $existing = $parentkey->OpenSubKey($Name,false); }catch(System:::Exception $ex){ $this->OnError($ex->Message); return false; } if(!is_null($existing)): self::OnError(Program::$Resources->e_KeyExists($Name)); return false; endif; try{//Create it $newKey = $parentkey->CreateSubKey($Name); }catch(System:::Exception $ex){ $this->OnError($ex->Message); return false; } if($norefresh) return $newKey;//Not interactive, return created key to caller //Otherwise navigate to the new key $wasdummy = ($parent->Nodes->Count == 1 and Sorter::Iterate($parent->Nodes->GetEnumerator(),0)->Name=self::dummy); $parent->Expand();//Expand prent if($wasdummy)://If parent was not loaded, it is now loaded and contain newly created key foreach($parent->Nodes as $node)://search for it if($node->Name == $Name): $newNode=$node;//found break; endif; endforeach; else://Otherwise add it visually $newNode = $parent->Nodes->Add($Name); $newNode->Name = $Name; $newNode->ImageKey = "closed"; $newNode->SelectedImageKey = "closed"; endif; if (!is_null($newNode)): $this->tvwRegistry->SelectedNode = $newNode;//Select new key $newNode->EnsureVisible();//and scrollit to view endif; return true; else: return false; endif; } ///Adds value of given type ///Type of value to add ///success private function Addvalue(int $type){ //PHPBUG: //Note: We cannot declare $type as RegistryValueKind because it then will not assept values like RegistryValueKind::Binary (being it treated as int) $editor = new ValueEditor();//Create value editor $editor->SetValue(null,$type);//Initialize it $editor->NameReadOnly=false;//Allow enter of name if($editor->ShowDialog($this)==DialogResult::OK)://Show it try{ //Open registry key to add value into $key=$this->getRegistryKey($this->tvwRegistry->SelectedNode->FullPath,true); try{//Check if value with same name exists $key->GetValueKind($editor->ValueName); self::OnError(Program::$Resources->e_ValueExists($editor->ValueName)); return false; }catch(System:::IO:::IOException $ex){}//Non existent value is indicated by System:::IO:::IOExcpetion - and its what we want $key->SetValue($editor->ValueName,$editor->Value,$type);//Create it (create and change value are same operations) }catch(System:::Exception $ex){ self::OnError($ex->Message); return false; } $this->LoadValues($key);//refresh list of values foreach($this->lvwRegistry->Items as $item)://Search for newly added if($item->Name==$editor->ValueName): $item->Selected=true;//select it $item->EnsureVisible();//and scroll it into view break; endif; endforeach; return true; else: return false; endif; } ///Attempts to rename registry key ///Tree node representing the key to reanem ///success private function RenameKey(TreeNode $node, string $newname){ //This is tricky operation because neither .NET registry API nor Win32 ASPI supports key rename // we must clone the key and then delete original //Create target for copy $newKey = $this->AddKey($node->Parent,$newname,true); if(is_bool($newKey)) return false; $copyed=false; $this->Cursor = Cursors::$WaitCursor;//Set cursor to hourglass try{ $OldKey=$this->getRegistryKey($node->FullPath,false);//Open source key for reading $copyed = self::CopyKey($OldKey,$newKey,false);//Copy old key to new key }catch(System:::Exception $ex){ self::OnError($ex->Message); } $this->Cursor = Cursors::$Default;//Reset cursor back to normal $OldKey->Close();//Closing old key is necessary to be done explicitly (PHP closes IDisposable for you somewhen), but open key cannot be deleted unset($OldKey); if($copyed): try{ $pathparts = explode("\\",$node->FullPath); //Open old key's parent $parent = $this->getRegistryKey(System:::String::Join("\\",$pathparts,0,count($pathparts)-1),true); $parent->DeleteSubKeyTree($node->Name);//delete old key }catch(System:::Exception $ex){ //Delete failed - now we have two identical keys, super :-( $TwoKeys=true; if(isset($parent)): //When we're puzzled, puzzle user as well - let him decide if(self::OnError(Program::$Resources->e_DeleteOriginalKey.":\r\n$ex->Message\r\n".Program::$Resources->KeepBoth."\r\n".Program::$Resources->KeepBoth_note,MessageBoxButtons::YesNo)<>DialogResult::Yes): try{//Delete old key $parent->DeleteSubKeyTree($newname); $TwoKeys=false; }catch(System:::Exception $ex){ //Faild. It'sn't probable, but it's possible self::OnError(Program::$Resources->e_DeleteDuplicated."\r\n$ex->Message"); } endif; endif; if($TwoKeys)://Add doplicate key to tree to user see it $newNode = $this->tvwRegistry->Nodes->Add($newKey->Name); $newenameparts=explode("\\",$newKey->Name); $newNode->Name = $newenameparts[count($newenameparts)-1]; $newNode->ImageKey="closed"; $newNode->SelectedImageKey="closed"; $newNode->Nodes->Add(self::dummy)->Name=self::dummy; endif; return false; } $node->Name=$newname;//Change of name (change of label is automatic) return true; else: return false; endif; } ///Renames registry value /// representing item to rename ///Proposed new name private function RenameValue(ListViewItem $item, string $newname){ //Technically the same situation as key rename, but copying is quite easy try{//Open key $key=$this->getRegistryKey($this->tvwRegistry->SelectedNode->FullPath,true); }catch(System:::Exception $ex){ self::OnError($ex->Message); return false; } try{//Chekck existence of newname-named value $key->GetValueKind($newname); self::OnError(Program::$Resources->e_Rename($item->Text,$newname)); return false; }catch(System:::IO:::IOException $ex){}//If thrown it does not exist try{//Set new value $key->SetValue($newname, $key->GetValue($item->Name,null,RegistryValueOptions::DoNotExpandEnvironmentNames), $key->GetValueKind($item->Name)); }catch(System:::Exception $ex){ self::OnError($ex->Message); return false; } try{//Delete old value $key->DeleteValue($item->Name); }catch(System:::Exception $ex){ //Failed of delete (inprobable when we were allowed to create one). Let user see both $this->LoadValues($key); foreach($this->lvwRegistry->Items as $item2): $item2->Selected = ($item2->Name == $newname or $item2->Name == $item->Name); endforeach; return true; } //Do the rename $item->Name=$newname; $item->Text=$newname;#is that necessary? return true; } ///Performs value editing ///success private function EditValue(){ if ($this->lvwRegistry->SelectedItems->Count<>1) return false; $name = Sorter::Iterate($this->lvwRegistry->SelectedItems->GetEnumerator(),0)->Name; try{ //Open key $key=$this->getRegistryKey($this->tvwRegistry->SelectedNode->FullPath,true); $type = $key->GetValueKind($name);//get kind if($type==RegistryValueKind::Unknown)://Cannot edit unknown self::OnError(Program::$Resources->e_editUnknown); return false; endif; //Get value $value = $key->GetValue($name,null,RegistryValueOptions::DoNotExpandEnvironmentNames); }catch(System:::Exception $ex){ self::OnError($ex->Message); return false; } $editor = new ValueEditor();//Create editor $editor->SetValue($value,$type);//Initialize it $editor->ValueName=$name;//Set value name if($editor->ShowDialog($this)==DialogResult::OK)://Show it try{ $key->SetValue($name,$editor->Value,$type);//Write changed value }catch(System:::Exception $ex){ self::OnError($ex->Message); return false; } $this->LoadValues($key);//referesh list foreach($this->lvwRegistry->Items as $item): if($item->Name == $name)://Search for edited value $item->Selected=true;//Select it $item->EnsureVisible();//Scroll it into view break; endif; endforeach; return true; else: return false; endif; } ///Show error message box ///Message ///Buttons to show ///Message box result (clicked button) public static function OnError(string $message, $buttons = MessageBoxButtons::OK){ //This is the most common Windows API return MessageBox::Show($message, Program::$Resources->Error_t, $buttons, MessageBoxIcon::Error); } //Handles mosued down on tree private function tvwRegistry_MouseDown(System:::Object $sender, System:::Windows:::Forms:::MouseEventArgs $e) { if ($e->Button == MouseButtons::Right and !is_null($node = $sender->GetNodeAt($e->X,$e->Y))): //This little hack selects node befor context menu is shown for right click $sender->SelectedNode = $node; endif; } //Handles clcick on tzhe Referesh cionetx menu item private function tmiRefreshNode_Click(System:::Object $sender, System:::EventArgs $e) { if($this->tvwRegistry->SelectedNode->FullPath == HKEY_CLASSES_ROOT) //Ask for HKCR because it may take long if(MessageBox::Show(Program::$Resources->RefreshHKCR,Program::$Resources->RefreshHKCR_t,MessageBoxButtons::YesNo,MessageBoxIcon::Question)<>DialogResult::Yes) return; $this->Cursor = Cursors::$WaitCursor; self::FillNode($this->tvwRegistry->SelectedNode);//Reload nodes $this->tvwRegistry->SelectedNode->Expand();//expand it $this->Cursor = Cursors::$Default; } //Hasndles clcick on Select all context menu item private function tmiSelectAll_Click(System:::Object $sender, System:::EventArgs $e) { foreach($this->lvwRegistry->Items as $item) $item->Selected = true; } //Handkles click on Copy full path context menu item private function tmiCopyFullPath_Click(System:::Object $sender, System:::EventArgs $e) { //we can copy full poath of key as welkl as of value if($this->cmsContext->SourceControl === $this->tvwRegistry): $str = $this->tvwRegistry->SelectedNode->FullPath; else://Just append value name $str = $this->tvwRegistry->SelectedNode->FullPath . "\\" . $this->lvwRegistry->FocusedItem->Name; endif; //And place it into clipboard Clipboard::SetText($str,TextDataFormat::UnicodeText); } //Settings //Called when form loads private function frmMain_Load(System:::Object $sender, System:::EventArgs $e) { $this->LoadSettings();//Load settings } //Called after form closes private function frmMain_FormClosed(System:::Object $sender, System:::Windows:::Forms:::FormClosedEventArgs $e) { $this->SaveSettings();//Save settings } ///Loads form settings from settings class private function LoadSettings(){ //Size if(!is_null($value=Program::$Settings->MainSize)) $this->ClientSize = $value; //State if(!is_null($value=Program::$Settings->MainState)) $this->WindowState = $value; //Splitter (between tree view and listview) distance if(!is_null($value=Program::$Settings->SplitterDistance)) $this->splMain->SplitterDistance = $value; //Widths of columns if(!is_null($value=Program::$Settings->ColumnWidths)): if(count($value) == $this->lvwRegistry->Columns->Count): $i=0; foreach($this->lvwRegistry->Columns as $col): $col->Width = Program::$Settings->ColumnWidths[$i++]; endforeach; endif; endif; } ///Saves settings to settings class private function SaveSettings(){ Program::$Settings->MainSize = $this->ClientSize;//Size Program::$Settings->MainState = $this->WindowState;//State Program::$Settings->SplitterDistance = $this->splMain->SplitterDistance;//Splitter distance foreach($this->lvwRegistry->Columns as $col)://Column widths $widths[] = $col->Width; endforeach; Program::$Settings->ColumnWidths = $widths; Program::$Settings->Save();//Write to disc } //Copy ///Copies content of given registry key to another ///Source key ///Destination key ///Allow user to recover form errors (if false only error message is displayed) ///Success private static function CopyKey(RegistryKey $src, RegistryKey $dest,bool $interactive){ //Copy values if (!self::CopyValues($src,$dest,$interactive)) return false; //and copy keys return self::CopySubKeys($src,$dest,$interactive); } ///Copies value ofrom one key to another ///Source key ///Destination key ///Allow user to recover form errors (if false only error message is displayed) ///Success private static function CopyValues(RegistryKey $src, RegistryKey $dest, bool $interactive){ //Prepare message box buttons $mb=$interactive ? MessageBoxButtons::AbortRetryIgnore : MessageBoxButtons::OK; InitCopy: try{ foreach($src->GetValueNames() as $name): CopyValue: try{//Copy value $dest->SetValue($name, $src->GetValue($name,null,RegistryValueOptions::DoNotExpandEnvironmentNames), $src->GetValueKind($name)); }catch(System:::Exception $ex){ switch(self::OnError(Program::$Resources->e_CopyValue($name,$src->Name,$dest->Name)."\r\n$ex->Message",$mb)): case DialogResult::Retry: goto CopyValue; case DialogResult::Ignore: break; default:return false; endswitch; } endforeach; }catch(System:::Exception $ex){ switch(self::OnError(Program::$Resources->e_EnlistValues($src->Name)."\r\n$ex->Message",$mb)): case DialogResult::Retry: goto InitCopy; case DialogResult::Ignore: return true; default:return false; endswitch; } return true; } ///Copies keys from one key to another ///Source key ///Destination key ///Allow user to recover form errors (if false only error message is displayed) ///Success private static function CopySubKeys(RegistryKey $src, RegistryKey $dest, bool $interactive){ //Prepare message box buttons $mb=$interactive ? MessageBoxButtons::AbortRetryIgnore : MessageBoxButtons::OK; InitCopy: try{ foreach($src->GetSubKeyNames() as $skName)://For each sub key OpenSrc: try{ $SrcSubKey=$src->OpenSubKey($skName);//Open it }catch(System:::Exception $ex){ switch(self::OnError(Program::$Resources->e_OpenSubKey($src->Name,$skName)."\r\n$ex->Message",$mb)): case DialogResult::Retry: goto OpenSrc; case DialogResult::Ignore: continue 2; default:return false; endswitch; } OpenDest: try{ $DestSubKey=$dest->CreateSubKey($skName);//Create it in target }catch(System:::Exception $ex){ switch(self::OnError(Program::$Resources->e_CreateSubKey($dest->Name,$skName)."\r\n$ex->Message",$mb)): case DialogResult::Retry: goto OpenDest; case DialogResult::Ignore: $SrcSubKey->Close(); continue 2; default:return false; endswitch; } //Recurse if(!self::CopyKey($SrcSubKey,$DestSubKey,$interactive)) return false; //PHP does this automatically for IDisposable // but for massive operations it's better to do it manually $SrcSubKey->Close(); $DestSubKey->Close(); endforeach; }catch(System:::Exception $ex){ switch (self::OnError(Program::$Resources->e_EnlistSubKeys($src->Name)."\r\n$ex->Message",$mb)): case DialogResult::Retry: goto InitCopy; case DialogResult::Ignore: return true; default:return false; endswitch; } return true; } //Export //Handles clcik on Export context menu item private function tmiExport_Click(System:::Object $sender, System:::EventArgs $e) { //Show save file dialog if($this->sfdExport->ShowDialog() == DialogResult::OK): unset($kw); //Depending on format selected by user switch($this->sfdExport->FilterIndex): case 1: $kw="export"; case 3: $kw = isset($kw) ? $kw : "save"; $Keypath = $this->tvwRegistry->SelectedNode->FullPath; $file = $this->sfdExport->FileName; if(System:::IO:::File::Exists($file)): //If file exist delete is as reg does not delete it automatically try{System:::IO:::File::Delete($file);} catch(System:::Exception $ex){ self::OnError($ex->Message); return; } endif; //Call reg to do the work // because .NET does not have function for it // doing it manually is too much work //PHPBUG: // using Win32 API cannot be done from Phalanger yet $result = `reg $kw "$Keypath" "$file"`;//This curious feature of PHP requires at least 7 lines of code in C#/VB :-) MessageBox::Show($result,Program::$Resources->ExportKey_t,MessageBoxButtons::OK,MessageBoxIcon::Information); break; case 2: //To XML do it manually (it's not so hard) //Create XML $xml=self::KeysToXml(array(self::getRegistryKey($this->tvwRegistry->SelectedNode->FullPath)),true); if(is_null($xml)) return; try{ $xml->Save($this->sfdExport->FileName);//Save XML }catch(System:::Exception $ex){ self::OnError($ex-Message); return; } MessageBox::Show(Program::$Resources->ExportSuccessful,Program::$Resources->ExportKey_t,MessageBoxButtons::OK,MessageBoxIcon::Information); break; default: self::OnError(Program::$Resources->e_UnknownregistryFileType); endswitch; endif; } //private static function GetKeyHandle(RegistryKey $key){ //$KeyType = CLRTypeOf RegistryKey; //$hKey = $KeyType->GetField("hkey",System:::Reflection:::BindingFlags::NonPublic | System:::Reflection:::BindingFlags::Instance); //$hKey = $hKey->GetValue($key); //return $hKey; //} ///XML namespace name for registry XML const XMLNS = "http://dzonny.cz/xml/registry"; ///Converts registry keys to XML ///Keys tio convert>/param> ///Allow user to recover from errors ///XML document with exported nodes private static function KeysToXml(array $Keys,bool $Interactive){ $doc = new System:::Xml:::XmlDocument(); $ns=self::XMLNS; //Creating XML document this way is easier than using DOM $doc->LoadXml(<< xmlstring ); try{//Convert keys to XML foreach($Keys as $key){//Ooops I've used C-syntax, I've must be drunken :-) $keyXml = self::KeyToXml($key,$doc,$Interactive);//Get XML $keyXml->SetAttribute("name",$key->Name);//Change name to be fully qualified $doc->DocumentElement->AppendChild($keyXml,$Interactive);//Add to document } }catch(System:::Exception $ex){return null;} catch(Exception $ex){return null;} return $doc; } ///COnverts single registry key to XML ///Key to export ///Document to create element for ///Allow user to recover form errros ///Element with exported key private static function KeyToXml(RegistryKey $key,System:::Xml:::XmlDocument $doc,bool $Interactive){ //Prepare message box buttons $mb=$interactive ? MessageBoxButtons::AbortRetryIgnore : MessageBoxButtons::OK; //Create element $el = $doc->CreateElement("key",self::XMLNS); $parts = explode("\\",$key->Name); $el->SetAttribute("name",$parts[count($parts)-1]);//Name it GetNames: try{//Get value names $names=$key->GetValueNames(); }catch(System:::Exception $ex){ switch(self::OnError(Program::$Resources->e_EnlistValues($key->Name)."\r\n$ex->Message",$mb)): case DialogResult::Retry: goto GetNames; case DialogResult::Ignore: goto GetKNames; default: throw new CLRException($ex); endswitch; } foreach($names as $name)://Serialize values GetValue: unset($eln); try{ switch($key->GetValueKind($name))://Depending on type case RegistryValueKind::Binary://Base 64 $vel=$doc->CreateElement("binary",self::XMLNS); $vel->InnerText = System:::Convert::ToBase64String($key->GetValue($name)); break; case RegistryValueKind::QWord://This is easy $eln="qword"; case RegistryValueKind::DWord: $eln = isset($eln)?$eln:"dword"; $vel=$doc->CreateElement($eln,self::XMLNS); //Just better use invariant culture to prevent arabicx or even georgian numerals in your XML $vel->InnerText = $key->GetValue($name)->ToString("D",System:::Globalization:::CultureInfo::$InvariantCulture); break; case RegistryValueKind::ExpandString: $eln="expand"; case RegistryValueKind::i'String': $eln = isset($eln)?$eln:"string"; $vel=$doc->CreateElement($eln,self::XMLNS); //String mkust be saved non-expanded $vel->InnerText = $key->GetValue($name,null,RegistryValueOptions::DoNotExpandEnvironmentNames); break; case RegistryValueKind::MultiString: //Store in multible subelements $vel=$doc->CreateElement("multi",self::XMLNS); foreach($key->GetValue($name) as $string): $subel=$doc->CreateElement("string",self::XMLNS); $subel->InnerText = $string; $vel->AppendChild($subel); endforeach; break; default://Cannot store unknown switch(self::OnError(Program::$Resources->e_GetValue($key->Name,$name)."\r\n$ex->Message",$mb)): case DialogResult::Retry: goto GetValue; case DialogResult::Ignore: continue 3; default: throw new CLRException($ex); endswitch; endswitch; }catch(System:::Exception $ex){ switch(self::OnError(Program::$Resources->e_GetValue($key->Name,$name)."\r\n$ex->Message",$mb)): case DialogResult::Retry: goto GetValue; case DialogResult::Ignore: continue 2; default: throw new CLRException($ex); endswitch; } $el->AppendChild($vel); $vel->SetAttribute("name",$name); endforeach; GetKNames: try{//Get sub key names $names=$key->GetSubKeyNames(); }catch(System:::Exception $ex){ switch(self::OnError(Program::$Resources->e_EnlistSubKeys($key->Name)."\r\n$ex->Message",$mb)): case DialogResult::Retry: goto GetKNames; case DialogResult::Ignore: return $el; default: throw new CLRException($ex); endswitch; } foreach($names as $name)://Save sub keys GetKey: unset($SubKey); try{ $SubKey = $key->OpenSubKey($name);//Open $kel = self::KeyToXml($SubKey,$doc,$Interactive);//Recurse $el->AppendChild($kel); }catch(System:::Exception $ex){ switch(self::OnError(Program::$Resources->e_OpenSubKey($key->Name,$name)."\r\n$ex->Message",$mb)): case DialogResult::Retry: goto GetKey; case DialogResult::Ignore: break 2; default: throw new CLRException($ex); endswitch; } if(!is_null($SubKey))$SubKey->Close(); endforeach; return $el; } } } ?> ================================================ FILE: Samples/RegEditPHP/RegEditPHP/readme.cs.rtf ================================================ {\rtf1\adeflang1025\ansi\ansicpg1250\uc1\adeff31507\deff0\stshfdbch31505\stshfloch31506\stshfhich31506\stshfbi0\deflang1029\deflangfe1029\themelang1029\themelangfe2052\themelangcs0{\fonttbl{\f0\fbidi \froman\fcharset238\fprq2{\*\panose 02020603050405020304}Times New Roman;} {\f2\fbidi \fmodern\fcharset238\fprq1{\*\panose 02070309020205020404}Courier New;}{\f3\fbidi \froman\fcharset2\fprq2{\*\panose 05050102010706020507}Symbol;}{\f10\fbidi \fnil\fcharset2\fprq2{\*\panose 05000000000000000000}Wingdings;} {\f13\fbidi \fnil\fcharset134\fprq2{\*\panose 02010600030101010101}SimSun{\*\falt ??\'a1\'a6|||||||\'a1\'a6||||||\'a1\'a6||||\'a1\'a6|||\'a1\'a6|\'a1\'a6\'a8\'a7\'a1\'a6};}{\f34\fbidi \froman\fcharset238\fprq2{\*\panose 02040503050406030204}Cambria Math;} {\f39\fbidi \fswiss\fcharset238\fprq2{\*\panose 020b0604030504040204}Tahoma;}{\f40\fbidi \fnil\fcharset134\fprq2{\*\panose 02010600030101010101}@SimSun;}{\flomajor\f31500\fbidi \froman\fcharset238\fprq2{\*\panose 02020603050405020304}Times New Roman;} {\fdbmajor\f31501\fbidi \fnil\fcharset134\fprq2{\*\panose 02010600030101010101}SimSun{\*\falt ??\'a1\'a6|||||||\'a1\'a6||||||\'a1\'a6||||\'a1\'a6|||\'a1\'a6|\'a1\'a6\'a8\'a7\'a1\'a6};} {\fhimajor\f31502\fbidi \froman\fcharset238\fprq2{\*\panose 02040503050406030204}Cambria;}{\fbimajor\f31503\fbidi \froman\fcharset238\fprq2{\*\panose 02020603050405020304}Times New Roman;} {\flominor\f31504\fbidi \froman\fcharset238\fprq2{\*\panose 02020603050405020304}Times New Roman;} {\fdbminor\f31505\fbidi \fnil\fcharset134\fprq2{\*\panose 02010600030101010101}SimSun{\*\falt ??\'a1\'a6|||||||\'a1\'a6||||||\'a1\'a6||||\'a1\'a6|||\'a1\'a6|\'a1\'a6\'a8\'a7\'a1\'a6};} {\fhiminor\f31506\fbidi \fswiss\fcharset238\fprq2{\*\panose 020f0502020204030204}Calibri;}{\fbiminor\f31507\fbidi \froman\fcharset238\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f55\fbidi \froman\fcharset0\fprq2 Times New Roman;} {\f54\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\f56\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\f57\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\f58\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);} {\f59\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\f60\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\f61\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\f75\fbidi \fmodern\fcharset0\fprq1 Courier New;} {\f74\fbidi \fmodern\fcharset204\fprq1 Courier New Cyr;}{\f76\fbidi \fmodern\fcharset161\fprq1 Courier New Greek;}{\f77\fbidi \fmodern\fcharset162\fprq1 Courier New Tur;}{\f78\fbidi \fmodern\fcharset177\fprq1 Courier New (Hebrew);} {\f79\fbidi \fmodern\fcharset178\fprq1 Courier New (Arabic);}{\f80\fbidi \fmodern\fcharset186\fprq1 Courier New Baltic;}{\f81\fbidi \fmodern\fcharset163\fprq1 Courier New (Vietnamese);} {\f185\fbidi \fnil\fcharset0\fprq2 SimSun Western{\*\falt ??\'a1\'a6|||||||\'a1\'a6||||||\'a1\'a6||||\'a1\'a6|||\'a1\'a6|\'a1\'a6\'a8\'a7\'a1\'a6};}{\f395\fbidi \froman\fcharset0\fprq2 Cambria Math;} {\f394\fbidi \froman\fcharset204\fprq2 Cambria Math Cyr;}{\f396\fbidi \froman\fcharset161\fprq2 Cambria Math Greek;}{\f397\fbidi \froman\fcharset162\fprq2 Cambria Math Tur;}{\f400\fbidi \froman\fcharset186\fprq2 Cambria Math Baltic;} {\f445\fbidi \fswiss\fcharset0\fprq2 Tahoma;}{\f444\fbidi \fswiss\fcharset204\fprq2 Tahoma Cyr;}{\f446\fbidi \fswiss\fcharset161\fprq2 Tahoma Greek;}{\f447\fbidi \fswiss\fcharset162\fprq2 Tahoma Tur;} {\f448\fbidi \fswiss\fcharset177\fprq2 Tahoma (Hebrew);}{\f449\fbidi \fswiss\fcharset178\fprq2 Tahoma (Arabic);}{\f450\fbidi \fswiss\fcharset186\fprq2 Tahoma Baltic;}{\f451\fbidi \fswiss\fcharset163\fprq2 Tahoma (Vietnamese);} {\f452\fbidi \fswiss\fcharset222\fprq2 Tahoma (Thai);}{\f455\fbidi \fnil\fcharset0\fprq2 @SimSun Western;}{\flomajor\f31510\fbidi \froman\fcharset0\fprq2 Times New Roman;}{\flomajor\f31509\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;} {\flomajor\f31511\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\flomajor\f31512\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\flomajor\f31513\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);} {\flomajor\f31514\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\flomajor\f31515\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\flomajor\f31516\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);} {\fdbmajor\f31520\fbidi \fnil\fcharset0\fprq2 SimSun Western{\*\falt ??\'a1\'a6|||||||\'a1\'a6||||||\'a1\'a6||||\'a1\'a6|||\'a1\'a6|\'a1\'a6\'a8\'a7\'a1\'a6};}{\fhimajor\f31530\fbidi \froman\fcharset0\fprq2 Cambria;} {\fhimajor\f31529\fbidi \froman\fcharset204\fprq2 Cambria Cyr;}{\fhimajor\f31531\fbidi \froman\fcharset161\fprq2 Cambria Greek;}{\fhimajor\f31532\fbidi \froman\fcharset162\fprq2 Cambria Tur;} {\fhimajor\f31535\fbidi \froman\fcharset186\fprq2 Cambria Baltic;}{\fbimajor\f31540\fbidi \froman\fcharset0\fprq2 Times New Roman;}{\fbimajor\f31539\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;} {\fbimajor\f31541\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fbimajor\f31542\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fbimajor\f31543\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);} {\fbimajor\f31544\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fbimajor\f31545\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fbimajor\f31546\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);} {\flominor\f31550\fbidi \froman\fcharset0\fprq2 Times New Roman;}{\flominor\f31549\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\flominor\f31551\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;} {\flominor\f31552\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\flominor\f31553\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\flominor\f31554\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);} {\flominor\f31555\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\flominor\f31556\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);} {\fdbminor\f31560\fbidi \fnil\fcharset0\fprq2 SimSun Western{\*\falt ??\'a1\'a6|||||||\'a1\'a6||||||\'a1\'a6||||\'a1\'a6|||\'a1\'a6|\'a1\'a6\'a8\'a7\'a1\'a6};}{\fhiminor\f31570\fbidi \fswiss\fcharset0\fprq2 Calibri;} {\fhiminor\f31569\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;}{\fhiminor\f31571\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;}{\fhiminor\f31572\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;} {\fhiminor\f31575\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;}{\fbiminor\f31580\fbidi \froman\fcharset0\fprq2 Times New Roman;}{\fbiminor\f31579\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;} {\fbiminor\f31581\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fbiminor\f31582\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fbiminor\f31583\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);} {\fbiminor\f31584\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fbiminor\f31585\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fbiminor\f31586\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}} {\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0; \red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;\chyperlink\ctint255\cshade255\red0\green0\blue255;}{\*\defchp \fs22\loch\af31506\hich\af31506\dbch\af31505 }{\*\defpap \ql \li0\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 }\noqfpromote {\stylesheet{\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 \fs22\lang1029\langfe2052\loch\f31506\hich\af31506\dbch\af31505\cgrid\langnp1029\langfenp2052 \snext0 \sqformat \spriority0 \styrsid2969566 Normal;}{\*\cs10 \additive \ssemihidden \sunhideused \spriority1 Default Paragraph Font;}{\*\ts11\tsrowd\trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\trcbpat1\trcfpat1\tblind0\tblindtype3\tscellwidthfts0\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv \ql \li0\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0 \fs22\lang1029\langfe1029\loch\f31506\hich\af31506\dbch\af31505\cgrid\langnp1029\langfenp1029 \snext11 \ssemihidden \sunhideused \sqformat Normal Table;}{\s15\ql \li720\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin720\itap0\contextualspace \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 \fs22\lang1029\langfe2052\loch\f31506\hich\af31506\dbch\af31505\cgrid\langnp1029\langfenp2052 \sbasedon0 \snext15 \sqformat \spriority34 \styrsid5461175 List Paragraph;}{\*\cs16 \additive \rtlch\fcs1 \af0 \ltrch\fcs0 \ul\cf17 \sbasedon10 \sunhideused \styrsid15158737 Hyperlink;}}{\*\listtable{\list\listtemplateid-328425630\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67436545 \'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67436547\'01o;}{\levelnumbers ;}\f2\fbias0\hres0\chhres0 \fi-360\li1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67436549\'01\u-3929 ?;}{\levelnumbers;} \f10\fbias0\hres0\chhres0 \fi-360\li2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67436545\'01\u-3913 ?;}{\levelnumbers;} \f3\fbias0\hres0\chhres0 \fi-360\li2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67436547\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67436549\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67436545\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67436547\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li5760\lin5760 } {\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67436549\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li6480\lin6480 }{\listname ;}\listid193737980}{\list\listtemplateid-458086446\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67436545\'01\u-3913 ?;}{\levelnumbers;} \f3\fbias0\hres0\chhres0 \fi-360\li720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67436547\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67436549\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67436545\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67436547\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li3600\lin3600 } {\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67436549\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li4320\lin4320 }{\listlevel \levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67436545\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li5040\lin5040 }{\listlevel\levelnfc23 \levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67436547\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0 \leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67436549\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li6480\lin6480 }{\listname ;}\listid618268834}}{\*\listoverridetable {\listoverride\listid618268834\listoverridecount0\ls1}{\listoverride\listid193737980\listoverridecount0\ls2}}{\*\rsidtbl \rsid142241\rsid208113\rsid217781\rsid345974\rsid550746\rsid552350\rsid1593398\rsid1783103\rsid2055905\rsid2711893\rsid2969566 \rsid2980693\rsid3231679\rsid3347747\rsid3895175\rsid4411658\rsid4654667\rsid4672345\rsid5124551\rsid5128047\rsid5389481\rsid5461175\rsid6241037\rsid6970024\rsid7087192\rsid7540268\rsid7560460\rsid8005191\rsid8067474\rsid8089220\rsid8209989\rsid8461511 \rsid9070747\rsid9123274\rsid10109114\rsid10250287\rsid10686364\rsid11100254\rsid11100399\rsid11290244\rsid11483350\rsid11556869\rsid11603778\rsid11611650\rsid11680637\rsid11738431\rsid11740698\rsid12018813\rsid12415101\rsid12601025\rsid12609733 \rsid12859122\rsid13059307\rsid13397719\rsid13722403\rsid13922005\rsid14054378\rsid14360527\rsid14640974\rsid15158737\rsid16205939\rsid16256917\rsid16466085\rsid16604065\rsid16661396\rsid16731120}{\mmathPr\mmathFont34\mbrkBin0\mbrkBinSub0\msmallFrac0 \mdispDef1\mlMargin0\mrMargin0\mdefJc1\mwrapIndent1440\mintLim0\mnaryLim1}{\info{\author Jan Z\'e1ruba}{\operator Honza}{\creatim\yr2009\mo1\dy21\min4}{\revtim\yr2009\mo1\dy24\hr14\min40}{\version15}{\edmins20}{\nofpages1}{\nofwords336}{\nofchars1989} {\*\company }{\nofcharsws2321}{\vern32895}}{\*\xmlnstbl {\xmlns1 http://schemas.microsoft.com/office/word/2003/wordml}}\paperw11906\paperh16838\margl1417\margr1417\margt1417\margb1417\gutter0\ltrsect \deftab708\widowctrl\ftnbj\aenddoc\hyphhotz425\trackmoves1\trackformatting1\donotembedsysfont1\relyonvml0\donotembedlingdata0\grfdocevents0\validatexml1\showplaceholdtext0\ignoremixedcontent0\saveinvalidxml0 \showxmlerrors1\noxlattoyen\expshrtn\noultrlspc\dntblnsbdb\nospaceforul\formshade\horzdoc\dgmargin\dghspace180\dgvspace180\dghorigin1417\dgvorigin1417\dghshow1\dgvshow1 \jexpand\viewkind1\viewscale100\pgbrdrhead\pgbrdrfoot\splytwnine\ftnlytwnine\htmautsp\nolnhtadjtbl\useltbaln\alntblind\lytcalctblwd\lyttblrtgr\lnbrkrule\nobrkwrptbl\snaptogridincell\allowfieldendsel\wrppunct \asianbrkrule\rsidroot5461175\newtblstyruls\nogrowautofit\usenormstyforlist\noindnmbrts\felnbrelev\nocxsptable\indrlsweleven\noafcnsttbl\afelev\utinl\hwelev\spltpgpar\notcvasp\notbrkcnstfrctbl\notvatxbx\krnprsnet\cachedcolbal \nouicompat \fet0 {\*\wgrffmtfilter 2450}\nofeaturethrottle1\ilfomacatclnup0\ltrpar \sectd \ltrsect\linex0\headery708\footery708\colsx708\endnhere\sectlinegrid360\sectdefaultcl\sectrsid2969566\sftnbj {\*\pnseclvl1\pnucrm\pnqc\pnstart1\pnindent720\pnhang {\pntxta .}} {\*\pnseclvl2\pnucltr\pnqc\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl3\pndec\pnqc\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl4\pnlcltr\pnqc\pnstart1\pnindent720\pnhang {\pntxta )}}{\*\pnseclvl5\pndec\pnqc\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnqc\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnqc\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnqc\pnstart1\pnindent720\pnhang {\pntxtb (} {\pntxta )}}{\*\pnseclvl9\pnlcrm\pnqc\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}\pard\plain \ltrpar\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 \fs22\lang1029\langfe2052\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1029\langfenp2052 {\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\insrsid5128047\charrsid16466085 \hich\af39\dbch\af31505\loch\f39 \hich\f39 Tato aplikace byla vytvo \'f8\loch\f39 \hich\f39 ena jako sou\'e8\'e1\loch\f39 \hich\f39 st moj\'ed\loch\f39 \hich\f39 diplomov\'e9\loch\f39 \hich\f39 pr\'e1\loch\f39 \hich\f39 ce za \'fa\'e8\loch\f39 elem }{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\insrsid13059307\charrsid16466085 \hich\af39\dbch\af31505\loch\f39 demonstrace}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\insrsid5128047\charrsid16466085 \hich\af39\dbch\af31505\loch\f39 \hich\f39 schopnost\'ed\loch\f39 integrace Windows Forms Designeru pro Phalanger do Visual Studi}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\insrsid13059307\charrsid16466085 \hich\af39\dbch\af31505\loch\f39 a}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\insrsid5128047\charrsid16466085 \hich\af39\dbch\af31505\loch\f39 . D\hich\af39\dbch\af31505\loch\f39 \hich\f39 emonstruje n\'e1\loch\f39 \hich\f39 sleduj\'ed\loch\f39 \hich\f39 c\'ed\loch\f39 oblasti: \par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f3\fs16\lang1029\langfe2052\langfenp2052\insrsid5128047\charrsid16466085 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}}\pard\plain \ltrpar\s15\ql \fi-360\li720\ri0\sl276\slmult1 \widctlpar\wrapdefault\aspalpha\aspnum\faauto\ls1\adjustright\rin0\lin720\itap0\pararsid6970024\contextualspace \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 \fs22\lang1029\langfe2052\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1029\langfenp2052 {\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\insrsid5128047\charrsid16466085 \hich\af39\dbch\af31505\loch\f39 \hich\f39 N\'e1\loch\f39 \hich\f39 vrh formul \'e1\'f8\'f9}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\insrsid5461175\charrsid16466085 \par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f3\fs16\lang1029\langfe2052\langfenp2052\insrsid13059307\charrsid16466085 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\insrsid13059307\charrsid16466085 \hich\af39\dbch\af31505\loch\f39 \hich\f39 N\'e1\loch\f39 vrh}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\insrsid5128047\charrsid16466085 \hich\af39\dbch\af31505\loch\f39 \hich\f39 u\'9e\loch\f39 \hich\f39 ivatelsk\'fd\loch\f39 \hich\f39 ch ovl\'e1\loch\f39 \hich\f39 dac\'ed\loch\f39 \hich\f39 ch prvk\'f9}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\insrsid5461175\charrsid16466085 \par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f3\fs16\lang1029\langfe2052\langfenp2052\insrsid5128047\charrsid16466085 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\insrsid5128047\charrsid16466085 \hich\af39\dbch\af31505\loch\f39 Lokalizaci}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\insrsid5461175\charrsid16466085 \par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f3\fs16\lang1029\langfe2052\langfenp2052\insrsid5128047\charrsid16466085 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\insrsid5128047\charrsid16466085 \hich\af39\dbch\af31505\loch\f39 \hich\f39 Omezenou podporu pro \'e8\'e1\loch\f39 \hich\f39 ste\'e8\loch\f39 \hich\f39 n\'e9\loch\f39 \hich\f39 t\'f8\'ed\loch\f39 dy ve Visual Studiu}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\insrsid5461175\charrsid16466085 \par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f3\fs16\lang1029\langfe2052\langfenp2052\insrsid5128047\charrsid16466085 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\insrsid5128047\charrsid16466085 \hich\af39\dbch\af31505\loch\f39 \hich\f39 P\'f8\loch\f39 \hich\f39 evodn\'ed\loch\f39 k z PHP na CodeDOM}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\insrsid5461175\charrsid16466085 \par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f3\fs16\lang1029\langfe2052\langfenp2052\insrsid13397719\charrsid16466085 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}}\pard \ltrpar\s15\ql \fi-360\li720\ri0\sa200\sl276\slmult1 \widctlpar\wrapdefault\aspalpha\aspnum\faauto\ls1\adjustright\rin0\lin720\itap0\pararsid5461175\contextualspace {\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\insrsid13397719\charrsid16466085 \hich\af39\dbch\af31505\loch\f39 \hich\f39 Zp\'f9\loch\f39 \hich\f39 sob programov\'e1\loch\f39 \hich\f39 n\'ed\loch\f39 v\~PHP pro .NET a Windows Forms}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\insrsid13397719 \par }\pard\plain \ltrpar\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid7087192 \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 \fs22\lang1029\langfe2052\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1029\langfenp2052 {\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\insrsid7087192 \hich\af39\dbch\af31505\loch\f39 \hich\f39 Aplikaci lze tak\'e9\hich\af39\dbch\af31505\loch\f39 \hich\f39 pou\'9e\'ed\loch\f39 \hich\f39 t jako WinForms tutori\'e1\loch\f39 \hich\f39 l pro PHP program\'e1\loch\f39 \hich\f39 tory. Jen si projd\'ec\loch\f39 \hich\f39 te zdroj\'e1\loch\f39 \hich\f39 ky abecedn\'ec\loch\f39 \hich\f39 a \'e8\loch\f39 \hich\f39 t\'ec\loch\f39 \hich\f39 te koment\'e1\'f8\loch\f39 e.}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\insrsid7087192\charrsid7087192 \par }\pard \ltrpar\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid5461175 {\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \b\f39\fs16\insrsid5128047\charrsid16466085 \hich\af39\dbch\af31505\loch\f39 \hich\f39 Zn\'e1\loch\f39 \hich\f39 m\'e9\loch\f39 \hich\f39 probl\'e9\loch\f39 my}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \b\f39\fs16\insrsid5461175\charrsid16466085 \hich\af39\dbch\af31505\loch\f39 : \par }\pard \ltrpar\ql \fi360\li0\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid4672345 {\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \b\f39\fs16\insrsid4672345\charrsid16466085 \hich\af39\dbch\af31505\loch\f39 Aplikace \par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f3\fs16\lang1029\langfe2052\langfenp2052\insrsid5128047\charrsid16466085 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}}\pard\plain \ltrpar\s15\ql \fi-360\li720\ri0\sl276\slmult1 \widctlpar\wrapdefault\aspalpha\aspnum\faauto\ls2\adjustright\rin0\lin720\itap0\pararsid6970024\contextualspace \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 \fs22\lang1029\langfe2052\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1029\langfenp2052 {\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\insrsid5128047\charrsid16466085 \hich\af39\dbch\af31505\loch\f39 \hich\f39 Phalanger mus\'ed\loch\f39 \hich\f39 b\'fd\loch\f39 \hich\f39 t nainstalov\'e1\loch\f39 \hich\f39 ny, aby aplikace b\'ec\'9e\loch\f39 ela.}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\insrsid5461175\charrsid16466085 \par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f3\fs16\lang1029\langfe2052\langfenp2052\insrsid4672345\charrsid16466085 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\insrsid4672345\charrsid16466085 \hich\af39\dbch\af31505\loch\f39 \hich\f39 Export do *.reg a bin\'e1\loch\f39 \hich\f39 rn\'ed\loch\f39 \hich\f39 export oznamuj\'ed\loch\f39 \hich\f39 selh\'e1\loch\f39 \hich\f39 n\'ed \hich\af39\dbch\af31505\loch\f39 jako informaci, nikoliv jako chybu. \par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f3\fs16\lang1029\langfe2052\langfenp2052\insrsid4672345\charrsid16466085 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}\hich\af39\dbch\af31505\loch\f39 \hich\f39 Kl\'ed\'e8\loch\f39 \hich\f39 e HKEY_DYN_DATA a HKEY_PERFORMANCE_DATA nefunguj\'ed. \par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f3\fs16\lang1029\langfe2052\langfenp2052\insrsid13397719\charrsid16466085 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\insrsid13397719\charrsid16466085 \hich\af39\dbch\af31505\loch\f39 \hich\f39 Aplikace m\'e1\loch\f39 funkci export, ale ne import.}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\insrsid13397719 \par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f3\fs16\lang1029\langfe2052\langfenp2052\insrsid3895175 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}}\pard \ltrpar\s15\ql \fi-360\li720\ri0\sa200\sl276\slmult1 \widctlpar\wrapdefault\aspalpha\aspnum\faauto\ls2\adjustright\rin0\lin720\itap0\pararsid5461175\contextualspace {\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\insrsid3895175 \hich\af39\dbch\af31505\loch\f39 \hich\f39 Na Windows Vista se zobrazuj\'ed \loch\f39 v\~\hich\f39 z\'e1\loch\f39 \hich\f39 hlav\'ed\loch\f39 \hich\f39 sloupc\'f9\loch\f39 \hich\f39 neo\'e8\loch\f39 \hich\f39 ek\'e1\loch\f39 \hich\f39 van\'e9\loch\f39 \hich\f39 ikony (jedn\'e1\loch\f39 se o bug v .NETu }{\field{\*\fldinst { \rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\insrsid3895175 \hich\af39\dbch\af31505\loch\f39 HYPERLINK "}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\insrsid3895175\charrsid3895175 \hich\af39\dbch\af31505\loch\f39 https://connec \hich\af39\dbch\af31505\loch\f39 t.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=395739}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\insrsid3895175 \hich\af39\dbch\af31505\loch\f39 " }{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\insrsid217781 {\*\datafield 00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90bc8000000680074007400700073003a002f002f0063006f006e006e006500630074002e006d006900630072006f0073006f00660074002e0063006f006d002f00560069007300750061006c0053007400750064006900 6f002f0066006500650064006200610063006b002f00560069006500770046006500650064006200610063006b002e0061007300700078003f0046006500650064006200610063006b00490044003d003300390035003700330039000000795881f43b1d7f48af2c825dc485276300000000a5ab0000ff}}}{\fldrslt { \rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \cs16\f39\fs16\ul\cf17\insrsid3895175\charrsid10109114 \hich\af39\dbch\af31505\loch\f39 https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=395739}}}\sectd \ltrsect \linex0\headery708\footery708\colsx708\endnhere\sectlinegrid360\sectdefaultcl\sectrsid2969566\sftnbj {\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\insrsid3895175 \hich\af39\dbch\af31505\loch\f39 ) }{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\insrsid3895175\charrsid16466085 \par }\pard\plain \ltrpar\ql \li360\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin360\itap0\pararsid4672345 \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 \fs22\lang1029\langfe2052\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1029\langfenp2052 {\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \b\f39\fs16\insrsid4672345\charrsid16466085 \hich\af39\dbch\af31505\loch\f39 \hich\f39 V\'fd\loch\f39 voj \hich\af39\dbch\af31505\loch\f39 \hich\f39 ov\'e9\loch\f39 \hich\f39 prost\'f8\loch\f39 \hich\f39 ed\'ed \par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f3\fs16\lang1029\langfe2052\langfenp2052\insrsid5128047\charrsid16466085 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}}\pard\plain \ltrpar\s15\ql \fi-360\li720\ri0\sl276\slmult1 \widctlpar\wrapdefault\aspalpha\aspnum\faauto\ls2\adjustright\rin0\lin720\itap0\pararsid6970024\contextualspace \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 \fs22\lang1029\langfe2052\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1029\langfenp2052 {\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\insrsid5128047\charrsid16466085 \hich\af39\dbch\af31505\loch\f39 \hich\f39 U n\'ec\loch\f39 \hich\f39 kter\'fd \loch\f39 \hich\f39 ch formul\'e1\'f8\'f9\loch\f39 \hich\f39 je nutn\'e9\loch\f39 \hich\f39 aplikaci nejd\'f8\'ed\loch\f39 \hich\f39 ve zkompilovat, aby se zobrazily v n\'e1\loch\f39 \hich\f39 vrh\'e1\'f8\loch\f39 i.}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\insrsid5461175\charrsid16466085 \par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f3\fs16\lang1029\langfe2052\langfenp2052\insrsid13059307\charrsid16466085 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\insrsid13059307\charrsid16466085 \hich\af39\dbch\af31505\loch\f39 Visual Studio spadne na souboru Sorter.php}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\insrsid5461175\charrsid16466085 \par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f3\fs16\lang1029\langfe2052\langfenp2052\insrsid4672345\charrsid16466085 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\insrsid4672345\charrsid16466085 \hich\af39\dbch\af31505\loch\f39 \hich\f39 Kompil\'e1\loch\f39 \hich\f39 tor Phalanger nespr\'e1\loch\f39 \hich\f39 vn\'ec\loch\f39 \hich\f39 vytv\'e1\'f8\'ed\loch\f39 \hich\f39 ladic\'ed\loch\f39 \hich\f39 informace pro \'e8\'e1\loch\f39 \hich\f39 ste\'e8\loch\f39 \hich\f39 n\'e9\loch\f39 \hich\f39 t\'f8\'ed\loch\f39 dy \hich\f39 \endash \loch\f39 \hich\f39 debugger si mysl\'ed\loch\f39 \hich\f39 , \'9e\loch\f39 \hich\f39 e v\'9a \hich\af39\dbch\af31505\loch\f39 \hich\f39 echny \'e8\'e1\loch\f39 \hich\f39 sti poch\'e1\loch\f39 \hich\f39 zej\'ed\loch\f39 \hich\f39 ze stejn\'e9\loch\f39 \hich\f39 ho souboru. Projekt aplikace byl upraven tak, aby t\'ed\loch\f39 \hich\f39 mto souborem byl v\'9e\loch\f39 dy *.user.php}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\insrsid2055905\charrsid16466085 \hich\af39\dbch\af31505\loch\f39 .*}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\insrsid4672345 \par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f3\fs16\lang1029\langfe2052\langfenp2052\insrsid7560460 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\insrsid7560460 \hich\af39\dbch\af31505\loch\f39 \hich\f39 Chyba PictureBox.BeginInit/EndInit nen\'ed\loch\f39 \hich\f39 deklarov\'e1\loch\f39 \hich\f39 na pro formul\'e1\'f8\loch\f39 e s\~\hich\f39 PictureBoxem. M\'f9\'9e\loch\f39 ete ji s\~klidem ignorovat. \par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f3\fs16\lang1029\langfe2052\langfenp2052\insrsid3895175 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}}\pard \ltrpar\s15\ql \fi-360\li720\ri0\sa200\sl276\slmult1 \widctlpar\wrapdefault\aspalpha\aspnum\faauto\ls2\adjustright\rin0\lin720\itap0\pararsid8089220\contextualspace {\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\insrsid3895175 \hich\af39\dbch\af31505\loch\f39 \hich\f39 Pro build je pot\'f8\loch\f39 eba a \hich\af39\dbch\af31505\loch\f39 by mt.exe bylo v\~\hich\f39 syst\'e9\loch\f39 \hich\f39 mov\'e9\loch\f39 \hich\f39 prom\'ec}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\insrsid8089220 \hich\af39\dbch\af31505\loch\f39 n}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\insrsid3895175 \hich\af39\dbch\af31505\loch\f39 \hich\f39 n\'e9\loch\f39 PATH (od verze 2.0.0.1}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\insrsid8089220 \hich\af39\dbch\af31505\loch\f39 \hich\f39 ; Vista manifest je p\'f8 \loch\f39 \hich\f39 ibalen pomoc\'ed\loch\f39 \hich\f39 post-build ud\'e1\loch\f39 \hich\f39 losti spou\'9a\loch\f39 \hich\f39 t\'ec\loch\f39 \hich\f39 j\'ed\loch\f39 \hich\f39 c\'ed\loch\f39 \hich\f39 mt.exe; ud\'e1\loch\f39 \hich\f39 lost je zaps\'e1 \loch\f39 na na konci *.phpproj souboru}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\insrsid3895175 \hich\af39\dbch\af31505\loch\f39 ) \par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f3\fs16\lang1029\langfe2052\langfenp2052\insrsid12415101 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}}\pard \ltrpar\s15\ql \fi-360\li720\ri0\sa200\sl276\slmult1 \widctlpar\wrapdefault\aspalpha\aspnum\faauto\ls2\adjustright\rin0\lin720\itap0\pararsid12415101\contextualspace {\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\insrsid12415101 \hich\af39\dbch\af31505\loch\f39 \hich\f39 Regedit.ico nesm\'ed\loch\f39 \hich\f39 b\'fd\loch\f39 t jen p\hich\af39\dbch\af31505\loch\f39 \hich\f39 ro \'e8\loch\f39 \hich\f39 ten\'ed\hich\af39\dbch\af31505\loch\f39 \hich\f39 p\'f8\loch\f39 i buildu.}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\insrsid12415101\charrsid16466085 \par }\pard\plain \ltrpar\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid10686364 \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 \fs22\lang1029\langfe2052\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1029\langfenp2052 {\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\insrsid13059307\charrsid16466085 \hich\af39\dbch\af31505\loch\f39 \hich\f39 Aplikace byla kompilov\'e1\loch\f39 \hich\f39 na oproti a za pou\'9e\loch\f39 \hich\f39 it\'ed\loch\f39 \hich\f39 nejnov\'ec\loch\f39 \hich\f39 j\'9a\'ed\loch\f39 \hich\f39 ch zdrojov\'fd\loch\f39 \hich\f39 ch k\'f3\loch\f39 \hich\f39 d\'f9\loch\f39 \hich\af39\dbch\af31505\loch\f39 Phalanger k }{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\insrsid10686364 \hich\af39\dbch\af31505\loch\f39 24}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\insrsid13059307\charrsid16466085 \hich\af39\dbch\af31505\loch\f39 .1. 2009.}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\insrsid5461175 \par }\pard \ltrpar\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid5461175 {\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\insrsid15158737 \hich\af39\dbch\af31505\loch\f39 Diplomka on-line:} {\field{\*\fldinst {\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\insrsid15158737 \hich\af39\dbch\af31505\loch\f39 HYPERLINK "%20https:/dip.felk.cvut.cz/browse/details.php?f=F3&d=K13136&y=2009&a=zarubj1&t=dipl" }{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\insrsid217781 {\*\datafield 00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90bba000000680074007400700073003a002f006400690070002e00660065006c006b002e0063007600750074002e0063007a002f00620072006f007700730065002f00640065007400610069006c0073002e0070006800 70003f0066003d0046003300260064003d004b0031003300310033003600260079003d003200300030003900260061003d007a0061007200750062006a003100260074003d006400690070006c000000795881f43b1d7f48af2c825dc485276300000000a5ab00006400417303}}}{\fldrslt {\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \cs16\f39\fs16\ul\cf17\insrsid15158737\charrsid15158737 \hich\af39\dbch\af31505\loch\f39 https://dip.felk.cvut.cz/browse/details.php?f=F3&d=K13136&y=2009&a=zarubj1&t=dipl}}}\sectd \ltrsect \linex0\headery708\footery708\colsx708\endnhere\sectlinegrid360\sectdefaultcl\sectrsid2969566\sftnbj {\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\insrsid15158737\charrsid16466085 \par }{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\insrsid2055905\charrsid16466085 \hich\af39\dbch\af31505\loch\f39 \hich\f39 * Tj. editovat *.phpproj soubor tak, aby soubor *.user.php byl p\'f8\loch\f39 \hich\f39 ed p\'f8\'ed\loch\f39 \hich\f39 slu\'9a \loch\f39 \hich\f39 n\'fd\loch\f39 m *.php souborem.}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\insrsid2055905 \par }{\rtlch\fcs1 \ab\af39\afs16 \ltrch\fcs0 \b\f39\fs16\insrsid3895175 \hich\af39\dbch\af31505\loch\f39 \hich\f39 Historie verz\'ed\loch\f39 : \par }\pard \ltrpar\ql \fi-851\li851\ri0\sl276\slmult1\widctlpar\tx709\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin851\itap0\pararsid16731120 {\rtlch\fcs1 \ab\af39\afs16 \ltrch\fcs0 \b\f39\fs16\insrsid3895175 \hich\af39\dbch\af31505\loch\f39 2.0.0.0 }{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\insrsid10686364 \tab }{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\insrsid3895175\charrsid3895175 \loch\af39\dbch\af31505\hich\f39 \endash \loch\f39 }{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\insrsid3895175 \hich\af39\dbch\af31505\loch\f39 \hich\f39 Prvn\'ed\loch\f39 verze}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\insrsid10686364 \hich\af39\dbch\af31505\loch\f39 (20.1.2009)}{\rtlch\fcs1 \ab\af39\afs16 \ltrch\fcs0 \b\f39\fs16\insrsid3895175 \par }{\rtlch\fcs1 \ab\af39\afs16 \ltrch\fcs0 \b\f39\fs16\insrsid3895175\charrsid3895175 \hich\af39\dbch\af31505\loch\f39 2.0.0.1}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\insrsid10686364 \tab \loch\af39\dbch\af31505\hich\f39 \endash \loch\f39 24.1.2009 \par \tab }{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\insrsid3895175 \loch\af39\dbch\af31505\hich\f39 \endash \loch\f39 \hich\f39 podpora pro Windows Vista (zabr\'e1\loch\f39 \hich\f39 n\'ec\loch\f39 \hich\f39 n\'ed\loch\f39 \hich\f39 virtualizaci registr\'f9\loch\f39 )}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\insrsid3895175\charrsid3895175 \par }{\*\themedata 504b030414000600080000002100828abc13fa0000001c020000130000005b436f6e74656e745f54797065735d2e786d6cac91cb6ac3301045f785fe83d0b6d8 72ba28a5d8cea249777d2cd20f18e4b12d6a8f843409c9df77ecb850ba082d74231062ce997b55ae8fe3a00e1893f354e9555e6885647de3a8abf4fbee29bbd7 2a3150038327acf409935ed7d757e5ee14302999a654e99e393c18936c8f23a4dc072479697d1c81e51a3b13c07e4087e6b628ee8cf5c4489cf1c4d075f92a0b 44d7a07a83c82f308ac7b0a0f0fbf90c2480980b58abc733615aa2d210c2e02cb04430076a7ee833dfb6ce62e3ed7e14693e8317d8cd0433bf5c60f53fea2fe7 065bd80facb647e9e25c7fc421fd2ddb526b2e9373fed4bb902e182e97b7b461e6bfad3f010000ffff0300504b030414000600080000002100a5d6a7e7c00000 00360100000b0000005f72656c732f2e72656c73848fcf6ac3300c87ef85bd83d17d51d2c31825762fa590432fa37d00e1287f68221bdb1bebdb4fc7060abb08 84a4eff7a93dfeae8bf9e194e720169aaa06c3e2433fcb68e1763dbf7f82c985a4a725085b787086a37bdbb55fbc50d1a33ccd311ba548b63095120f88d94fbc 52ae4264d1c910d24a45db3462247fa791715fd71f989e19e0364cd3f51652d73760ae8fa8c9ffb3c330cc9e4fc17faf2ce545046e37944c69e462a1a82fe353 bd90a865aad41ed0b5b8f9d6fd010000ffff0300504b0304140006000800000021006b799616830000008a0000001c0000007468656d652f7468656d652f7468 656d654d616e616765722e786d6c0ccc4d0ac3201040e17da17790d93763bb284562b2cbaebbf600439c1a41c7a0d29fdbd7e5e38337cedf14d59b4b0d592c9c 070d8a65cd2e88b7f07c2ca71ba8da481cc52c6ce1c715e6e97818c9b48d13df49c873517d23d59085adb5dd20d6b52bd521ef2cdd5eb9246a3d8b4757e8d3f7 29e245eb2b260a0238fd010000ffff0300504b0304140006000800000021000cc90327a8060000611b0000160000007468656d652f7468656d652f7468656d65 312e786d6cec594f6f1c3514bf23f11dacb9b7d94d76d36cd44d95ddec1248d346d96d518fde19ef8c1bcf78647b93ee0db547242444412051094e1c1050a995 b89413e293048aa048fd0a3cdb33b3e3eca449da082ae81e9219fbe7f7ff3d3f7b2e5fb91333b44f84a43c697bf58b350f91c4e7014dc2b67763d8bfb0e221a9 701260c613d2f6a6447a57d6de7eeb325e5511890982f5895cc56d2f522a5d5d58903e0c637991a72481b931173156f02ac28540e003a01bb385c55a6d7921c6 34f150826320bbcd15dd47120753747d3ca63ef1d6720e3d066c1225f580cfc440d327d9b22d9cf884fdfcf52f5f187cb057d72839955d26d03e666d0f1806fc 6048ee280f312c154cb4bd9af9790b6b9717f06ab688a963d696d6f5cd2f5b972d08f6160d4f118e0aa6f57ea37569a3a06f004ccde37abd5eb7572fe81900f6 7dd0d6ca52a6d9e8afd43b39cd12c83eced3eed69ab5868b2fd15f9a93b9d5e9749aad4c164bd480ec63630ebf525b6eac2f3a7803b2f8e61cbed159ef76971d bc0159fcf21cbe7fa9b5dc70f10614319aeccda1b543fbfd8c7a011973b659095f01f84a2d83cf50100d45846916639ea817c55b8c6f73d107900633ac6882d4 342563ec434877713c12146b267895e0d28c1df2e5dc90e687a42f68aadade7b2986f498d17bfee4bbe74f1ea1c3bb8f0feffe7878efdee1dd1f2c2167d5264e c2f2aa67df7cfcd7830fd09f8fbe7a76ffd36abc2ce37ffbfec35f7ffaa41a08293413e7e9670f7f7ffcf0e9e71ffdf1edfd0af8bac0a3327c486322d1357280 76790c8a19abb892939138db8a61846979c57a124a9c60cda5827e4f450efada14b3cc3b8e1c1de25af0a6801252057c6772db1178108989a2159cb7a2d8016e 73ce3a5c545a614bf32a99793849c26ae66252c6ed62bc5fc5bb8b13c7bfbd490af5330f4b47f16e441c3177184e140e494214d2737c8f900aed6e51ead8759b fa824b3e56e816451d4c2b4d32a423279a668b36690c7e9956e90cfe766cb37d137538abd27a83ecbb48c80acc2a841f12e698f11d3c5138ae2239c4312b1bfc 2a5651959083a9f0cbb89e54e0e990308e7a0191b26acd7501fa969cbe85a16a55ba7d9b4d63172914ddaba27915735e466ef0bd6e84e3b40a3ba04954c6be2b f7204431dae1aa0abecddd0cd1efe0079c1cebee9b9438ee3eb91adca0a123d22c40f4cc44685f42b9762a704c9317956346a11edb1838bf720c05f0e9970f2a 22eb752dc4ebb0275565c2e691f27b1cee68d1ed7211d0d7bfe66ee049b24320cce7379e3725f74dc9f5fef325f7b87c3e6da19dd55628bbba6fb08db16993e3 1776c963cad8404d19b92a4da32c61af08fa30a8d79ae322294e4e69048f596d7770a1c0660d125cbd4f553488700a4d76ddd3444299910e254ab984039e19ae a4adf1d0a82b7b3c6cea8383ad0912ab6d1ed8e1253d9c9f0f0a3266c709cd413467b4a4099c96d9d2a58c28a8fd32ccea5aa85373ab1bd14cb973b8152a831f e75583c1c29ad08420685dc0cacb7060d7ace170821909b4ddedfe9bbbc578e13c5d24231c90cc475aef791fd58d93f25831b702103b153ed287bd13ac56e2d6 d2645f81db699c5466d738865deebd57f1521ec1332fe9dc3d928e2c2927274bd041db6b35179b1ef271daf6c670ae85c73805af4bddf76116c24d91af840dfb 1393d964f9cc9bad5c313709ea705d61ed3ea7b053075221d50696910d0d339585004b34272bff6213cc7a5e0ad8487f092996562018fe3529c08eae6bc9784c 7c5576766944dbcebe66a5944f141183283840233611bb18dcaf4315f409a884eb095311f40bdca7696b9b29b738674957bec532383b8e591ae1acdcea14cd33 d9c24d1e173298b79278a05ba5ec46b9b3ab6252fe9c542987f1ff4c15bd9fc06dc152a03de0c3bdaec048e76bdbe342451caa501a51bf2fa07930b503a205ee 64611a820a6e97cd7f41f6f57f9b739686496b38f4a95d1a2241613f5291206407ca9289be1388d5b3bdcb9264192113512571656ac51e917dc286ba062eebbd dd431184baa926591930b8a3f1e7be6719340a759353ce37a786147bafcd817fbaf3b1c90c4ab975d83434b9fd0b112b7655bbde2ccff7deb2227a62d66635f2 ac0066a5ada095a5fd4b8a70c6add656ac398d179bb970e0c5798d61b0688852b8f341fa0fec7f54f8cc7ea5d01bea90ef426d45f0c1411383b081a8be601b0f a40ba41d1c41e364076d306952d6b459eba4ad966fd6e7dce9167c8f185b4b761a7f9fd1d84573e6b27372f13c8d9d59d8b1b51d3bd6d4e0d9a3290a43e3fc30 631c63be7195bf40f1d16d70f406dcf14f98922698e0db92c0d07a0e4c1e40f25b8e66e9dadf000000ffff0300504b0304140006000800000021000dd1909fb6 0000001b010000270000007468656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73848f4d0ac2301484f78277086f6f d3ba109126dd88d0add40384e4350d363f2451eced0dae2c082e8761be9969bb979dc9136332de3168aa1a083ae995719ac16db8ec8e4052164e89d93b64b060 828e6f37ed1567914b284d262452282e3198720e274a939cd08a54f980ae38a38f56e422a3a641c8bbd048f7757da0f19b017cc524bd62107bd5001996509aff b3fd381a89672f1f165dfe514173d9850528a2c6cce0239baa4c04ca5bbabac4df000000ffff0300504b01022d0014000600080000002100828abc13fa000000 1c0200001300000000000000000000000000000000005b436f6e74656e745f54797065735d2e786d6c504b01022d0014000600080000002100a5d6a7e7c00000 00360100000b000000000000000000000000002b0100005f72656c732f2e72656c73504b01022d00140006000800000021006b799616830000008a0000001c00 000000000000000000000000140200007468656d652f7468656d652f7468656d654d616e616765722e786d6c504b01022d00140006000800000021000cc90327 a8060000611b00001600000000000000000000000000d10200007468656d652f7468656d652f7468656d65312e786d6c504b01022d0014000600080000002100 0dd1909fb60000001b0100002700000000000000000000000000ad0900007468656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73504b050600000000050005005d010000a80a00000000} {\*\colorschememapping 3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d22796573223f3e0d0a3c613a636c724d 617020786d6c6e733a613d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f64726177696e676d6c2f323030362f6d6169 6e22206267313d226c743122207478313d22646b3122206267323d226c743222207478323d22646b322220616363656e74313d22616363656e74312220616363 656e74323d22616363656e74322220616363656e74333d22616363656e74332220616363656e74343d22616363656e74342220616363656e74353d22616363656e74352220616363656e74363d22616363656e74362220686c696e6b3d22686c696e6b2220666f6c486c696e6b3d22666f6c486c696e6b222f3e} {\*\latentstyles\lsdstimax267\lsdlockeddef0\lsdsemihiddendef1\lsdunhideuseddef1\lsdqformatdef0\lsdprioritydef99{\lsdlockedexcept \lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority0 \lsdlocked0 Normal; \lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 1;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 2;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 3;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 4; \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 5;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 6;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 7;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 8;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 9; \lsdpriority39 \lsdlocked0 toc 1;\lsdpriority39 \lsdlocked0 toc 2;\lsdpriority39 \lsdlocked0 toc 3;\lsdpriority39 \lsdlocked0 toc 4;\lsdpriority39 \lsdlocked0 toc 5;\lsdpriority39 \lsdlocked0 toc 6;\lsdpriority39 \lsdlocked0 toc 7; \lsdpriority39 \lsdlocked0 toc 8;\lsdpriority39 \lsdlocked0 toc 9;\lsdqformat1 \lsdpriority35 \lsdlocked0 caption;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority10 \lsdlocked0 Title;\lsdpriority1 \lsdlocked0 Default Paragraph Font; \lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority11 \lsdlocked0 Subtitle;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority22 \lsdlocked0 Strong;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority20 \lsdlocked0 Emphasis; \lsdsemihidden0 \lsdunhideused0 \lsdpriority59 \lsdlocked0 Table Grid;\lsdunhideused0 \lsdlocked0 Placeholder Text;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority1 \lsdlocked0 No Spacing; \lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid; \lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1; \lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2; \lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading; \lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 1; \lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 1; \lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 1;\lsdunhideused0 \lsdlocked0 Revision; \lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority34 \lsdlocked0 List Paragraph;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority29 \lsdlocked0 Quote;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority30 \lsdlocked0 Intense Quote; \lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 1; \lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 1; \lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 2; \lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 2; \lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 2; \lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 2; \lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 2; \lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 3; \lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 3; \lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 3; \lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 3; \lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 3; \lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 4; \lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 4; \lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 4; \lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 4; \lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 5; \lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 5; \lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 5; \lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 5; \lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 5; \lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 6; \lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 6; \lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 6; \lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 6; \lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 6; \lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority19 \lsdlocked0 Subtle Emphasis;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority21 \lsdlocked0 Intense Emphasis; \lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority31 \lsdlocked0 Subtle Reference;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority32 \lsdlocked0 Intense Reference; \lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority33 \lsdlocked0 Book Title;\lsdpriority37 \lsdlocked0 Bibliography;\lsdqformat1 \lsdpriority39 \lsdlocked0 TOC Heading;}}{\*\datastore 010500000200000018000000 4d73786d6c322e534158584d4c5265616465722e352e3000000000000000000000060000 d0cf11e0a1b11ae1000000000000000000000000000000003e000300feff090006000000000000000000000001000000010000000000000000100000feffffff00000000feffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffdfffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffff52006f006f007400200045006e00740072007900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000500ffffffffffffffffffffffffec69d9888b8b3d4c859eaf6cd158be0f000000000000000000000000203e d644297ec901feffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000105000000000000}} ================================================ FILE: Samples/RegEditPHP/RegEditPHP/readme.hr.rtf ================================================ {\rtf1\adeflang1025\ansi\ansicpg1250\uc1\adeff31507\deff0\stshfdbch31505\stshfloch31506\stshfhich31506\stshfbi0\deflang1029\deflangfe1029\themelang1029\themelangfe2052\themelangcs0{\fonttbl{\f0\fbidi \froman\fcharset238\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f1\fbidi \fswiss\fcharset238\fprq2{\*\panose 020b0604020202020204}Arial;} {\f2\fbidi \fmodern\fcharset238\fprq1{\*\panose 02070309020205020404}Courier New;}{\f3\fbidi \froman\fcharset2\fprq2{\*\panose 05050102010706020507}Symbol;}{\f10\fbidi \fnil\fcharset2\fprq2{\*\panose 05000000000000000000}Wingdings;} {\f13\fbidi \fnil\fcharset134\fprq2{\*\panose 02010600030101010101}SimSun{\*\falt ??\'a1\'a6|||||||\'a1\'a6||||||\'a1\'a6||||\'a1\'a6|||\'a1\'a6|\'a1\'a6\'a8\'a7\'a1\'a6};}{\f34\fbidi \froman\fcharset238\fprq2{\*\panose 02040503050406030204}Cambria Math;} {\f37\fbidi \fswiss\fcharset238\fprq2{\*\panose 020f0502020204030204}Calibri;}{\f38\fbidi \fnil\fcharset2\fprq2{\*\panose 05010101010101010101}Ligatures 3;}{\f39\fbidi \fswiss\fcharset238\fprq2{\*\panose 020b0604030504040204}Tahoma;} {\f40\fbidi \fnil\fcharset134\fprq2{\*\panose 02010600030101010101}@SimSun;}{\flomajor\f31500\fbidi \froman\fcharset238\fprq2{\*\panose 02020603050405020304}Times New Roman;} {\fdbmajor\f31501\fbidi \fnil\fcharset134\fprq2{\*\panose 02010600030101010101}SimSun{\*\falt ??\'a1\'a6|||||||\'a1\'a6||||||\'a1\'a6||||\'a1\'a6|||\'a1\'a6|\'a1\'a6\'a8\'a7\'a1\'a6};} {\fhimajor\f31502\fbidi \froman\fcharset238\fprq2{\*\panose 02040503050406030204}Cambria;}{\fbimajor\f31503\fbidi \froman\fcharset238\fprq2{\*\panose 02020603050405020304}Times New Roman;} {\flominor\f31504\fbidi \froman\fcharset238\fprq2{\*\panose 02020603050405020304}Times New Roman;} {\fdbminor\f31505\fbidi \fnil\fcharset134\fprq2{\*\panose 02010600030101010101}SimSun{\*\falt ??\'a1\'a6|||||||\'a1\'a6||||||\'a1\'a6||||\'a1\'a6|||\'a1\'a6|\'a1\'a6\'a8\'a7\'a1\'a6};} {\fhiminor\f31506\fbidi \fswiss\fcharset238\fprq2{\*\panose 020f0502020204030204}Calibri;}{\fbiminor\f31507\fbidi \froman\fcharset238\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f55\fbidi \froman\fcharset0\fprq2 Times New Roman;} {\f54\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\f56\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\f57\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\f58\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);} {\f59\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\f60\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\f61\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\f65\fbidi \fswiss\fcharset0\fprq2 Arial;} {\f64\fbidi \fswiss\fcharset204\fprq2 Arial Cyr;}{\f66\fbidi \fswiss\fcharset161\fprq2 Arial Greek;}{\f67\fbidi \fswiss\fcharset162\fprq2 Arial Tur;}{\f68\fbidi \fswiss\fcharset177\fprq2 Arial (Hebrew);} {\f69\fbidi \fswiss\fcharset178\fprq2 Arial (Arabic);}{\f70\fbidi \fswiss\fcharset186\fprq2 Arial Baltic;}{\f71\fbidi \fswiss\fcharset163\fprq2 Arial (Vietnamese);}{\f75\fbidi \fmodern\fcharset0\fprq1 Courier New;} {\f74\fbidi \fmodern\fcharset204\fprq1 Courier New Cyr;}{\f76\fbidi \fmodern\fcharset161\fprq1 Courier New Greek;}{\f77\fbidi \fmodern\fcharset162\fprq1 Courier New Tur;}{\f78\fbidi \fmodern\fcharset177\fprq1 Courier New (Hebrew);} {\f79\fbidi \fmodern\fcharset178\fprq1 Courier New (Arabic);}{\f80\fbidi \fmodern\fcharset186\fprq1 Courier New Baltic;}{\f81\fbidi \fmodern\fcharset163\fprq1 Courier New (Vietnamese);} {\f185\fbidi \fnil\fcharset0\fprq2 SimSun Western{\*\falt ??\'a1\'a6|||||||\'a1\'a6||||||\'a1\'a6||||\'a1\'a6|||\'a1\'a6|\'a1\'a6\'a8\'a7\'a1\'a6};}{\f395\fbidi \froman\fcharset0\fprq2 Cambria Math;} {\f394\fbidi \froman\fcharset204\fprq2 Cambria Math Cyr;}{\f396\fbidi \froman\fcharset161\fprq2 Cambria Math Greek;}{\f397\fbidi \froman\fcharset162\fprq2 Cambria Math Tur;}{\f400\fbidi \froman\fcharset186\fprq2 Cambria Math Baltic;} {\f425\fbidi \fswiss\fcharset0\fprq2 Calibri;}{\f424\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;}{\f426\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;}{\f427\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;} {\f430\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;}{\f445\fbidi \fswiss\fcharset0\fprq2 Tahoma;}{\f444\fbidi \fswiss\fcharset204\fprq2 Tahoma Cyr;}{\f446\fbidi \fswiss\fcharset161\fprq2 Tahoma Greek;}{\f447\fbidi \fswiss\fcharset162\fprq2 Tahoma Tur;} {\f448\fbidi \fswiss\fcharset177\fprq2 Tahoma (Hebrew);}{\f449\fbidi \fswiss\fcharset178\fprq2 Tahoma (Arabic);}{\f450\fbidi \fswiss\fcharset186\fprq2 Tahoma Baltic;}{\f451\fbidi \fswiss\fcharset163\fprq2 Tahoma (Vietnamese);} {\f452\fbidi \fswiss\fcharset222\fprq2 Tahoma (Thai);}{\f455\fbidi \fnil\fcharset0\fprq2 @SimSun Western;}{\flomajor\f31510\fbidi \froman\fcharset0\fprq2 Times New Roman;}{\flomajor\f31509\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;} {\flomajor\f31511\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\flomajor\f31512\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\flomajor\f31513\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);} {\flomajor\f31514\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\flomajor\f31515\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\flomajor\f31516\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);} {\fdbmajor\f31520\fbidi \fnil\fcharset0\fprq2 SimSun Western{\*\falt ??\'a1\'a6|||||||\'a1\'a6||||||\'a1\'a6||||\'a1\'a6|||\'a1\'a6|\'a1\'a6\'a8\'a7\'a1\'a6};}{\fhimajor\f31530\fbidi \froman\fcharset0\fprq2 Cambria;} {\fhimajor\f31529\fbidi \froman\fcharset204\fprq2 Cambria Cyr;}{\fhimajor\f31531\fbidi \froman\fcharset161\fprq2 Cambria Greek;}{\fhimajor\f31532\fbidi \froman\fcharset162\fprq2 Cambria Tur;} {\fhimajor\f31535\fbidi \froman\fcharset186\fprq2 Cambria Baltic;}{\fbimajor\f31540\fbidi \froman\fcharset0\fprq2 Times New Roman;}{\fbimajor\f31539\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;} {\fbimajor\f31541\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fbimajor\f31542\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fbimajor\f31543\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);} {\fbimajor\f31544\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fbimajor\f31545\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fbimajor\f31546\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);} {\flominor\f31550\fbidi \froman\fcharset0\fprq2 Times New Roman;}{\flominor\f31549\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\flominor\f31551\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;} {\flominor\f31552\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\flominor\f31553\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\flominor\f31554\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);} {\flominor\f31555\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\flominor\f31556\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);} {\fdbminor\f31560\fbidi \fnil\fcharset0\fprq2 SimSun Western{\*\falt ??\'a1\'a6|||||||\'a1\'a6||||||\'a1\'a6||||\'a1\'a6|||\'a1\'a6|\'a1\'a6\'a8\'a7\'a1\'a6};}{\fhiminor\f31570\fbidi \fswiss\fcharset0\fprq2 Calibri;} {\fhiminor\f31569\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;}{\fhiminor\f31571\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;}{\fhiminor\f31572\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;} {\fhiminor\f31575\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;}{\fbiminor\f31580\fbidi \froman\fcharset0\fprq2 Times New Roman;}{\fbiminor\f31579\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;} {\fbiminor\f31581\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fbiminor\f31582\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fbiminor\f31583\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);} {\fbiminor\f31584\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fbiminor\f31585\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fbiminor\f31586\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}} {\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0; \red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;\chyperlink\ctint255\cshade255\red0\green0\blue255;}{\*\defchp \fs22\loch\af31506\hich\af31506\dbch\af31505 }{\*\defpap \ql \li0\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 }\noqfpromote {\stylesheet{\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 \fs22\lang1029\langfe2052\loch\f31506\hich\af31506\dbch\af31505\cgrid\langnp1029\langfenp2052 \snext0 \sqformat \spriority0 \styrsid2969566 Normal;}{\*\cs10 \additive \ssemihidden \sunhideused \spriority1 Default Paragraph Font;}{\*\ts11\tsrowd\trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\trcbpat1\trcfpat1\tblind0\tblindtype3\tscellwidthfts0\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv \ql \li0\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0 \fs22\lang1029\langfe1029\loch\f31506\hich\af31506\dbch\af31505\cgrid\langnp1029\langfenp1029 \snext11 \ssemihidden \sunhideused \sqformat Normal Table;}{\s15\ql \li720\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin720\itap0\contextualspace \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 \fs22\lang1029\langfe2052\loch\f31506\hich\af31506\dbch\af31505\cgrid\langnp1029\langfenp2052 \sbasedon0 \snext15 \sqformat \spriority34 \styrsid5461175 List Paragraph;}{\*\cs16 \additive \rtlch\fcs1 \af0 \ltrch\fcs0 \ul\cf17 \sbasedon10 \sunhideused \styrsid15158737 Hyperlink;}{\s17\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af31507\afs20\alang1025 \ltrch\fcs0 \fs20\lang1029\langfe2052\loch\f31506\hich\af31506\dbch\af31505\cgrid\langnp1029\langfenp2052 \sbasedon0 \snext17 \slink18 \ssemihidden \sunhideused \styrsid7361181 endnote text;}{\*\cs18 \additive \rtlch\fcs1 \af31507\afs20 \ltrch\fcs0 \fs20 \sbasedon10 \slink17 \slocked \ssemihidden \styrsid7361181 Text vysv\'ectlivek Char;}{\*\cs19 \additive \rtlch\fcs1 \af0 \ltrch\fcs0 \super \sbasedon10 \ssemihidden \sunhideused \styrsid7361181 endnote reference;}}{\*\listtable {\list\listtemplateid-328425630\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67436545\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67436547\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li1440\lin1440 } {\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67436549\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li2160\lin2160 }{\listlevel \levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67436545\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li2880\lin2880 }{\listlevel\levelnfc23 \levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67436547\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0 \leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67436549\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0 \levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67436545\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0 \levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67436547\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative \levelspace360\levelindent0{\leveltext\leveltemplateid67436549\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li6480\lin6480 }{\listname ;}\listid193737980}{\list\listtemplateid2099139110\listhybrid{\listlevel\levelnfc23\levelnfcn23 \leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67436545\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0 \levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67436547\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative \levelspace360\levelindent0{\leveltext\leveltemplateid67436549\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360 \levelindent0{\leveltext\leveltemplateid67436545\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0 {\leveltext\leveltemplateid67436547\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext \leveltemplateid67436549\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext \leveltemplateid67436545\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext \leveltemplateid67436547\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67436549 \'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li6480\lin6480 }{\listname ;}\listid618268834}{\list\listtemplateid1356235222\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360 \levelindent0{\leveltext\leveltemplateid67436545\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0 {\leveltext\leveltemplateid67436547\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext \leveltemplateid67436549\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext \leveltemplateid67436545\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext \leveltemplateid67436547\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67436549 \'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67436545 \'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67436547 \'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67436549 \'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li6480\lin6480 }{\listname ;}\listid1475443951}{\list\listtemplateid1657961614\listhybrid{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360 \levelindent0{\leveltext\leveltemplateid67436559\'02\'00.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \hres0\chhres0 \fi-360\li1080\lin1080 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360 \levelindent0{\leveltext\leveltemplateid67436569\'02\'01.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \hres0\chhres0 \fi-360\li1800\lin1800 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2\levelfollow0\levelstartat1\lvltentative\levelspace360 \levelindent0{\leveltext\leveltemplateid67436571\'02\'02.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \hres0\chhres0 \fi-180\li2520\lin2520 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360 \levelindent0{\leveltext\leveltemplateid67436559\'02\'03.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \hres0\chhres0 \fi-360\li3240\lin3240 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360 \levelindent0{\leveltext\leveltemplateid67436569\'02\'04.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \hres0\chhres0 \fi-360\li3960\lin3960 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2\levelfollow0\levelstartat1\lvltentative\levelspace360 \levelindent0{\leveltext\leveltemplateid67436571\'02\'05.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \hres0\chhres0 \fi-180\li4680\lin4680 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360 \levelindent0{\leveltext\leveltemplateid67436559\'02\'06.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \hres0\chhres0 \fi-360\li5400\lin5400 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360 \levelindent0{\leveltext\leveltemplateid67436569\'02\'07.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \hres0\chhres0 \fi-360\li6120\lin6120 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2\levelfollow0\levelstartat1\lvltentative\levelspace360 \levelindent0{\leveltext\leveltemplateid67436571\'02\'08.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \hres0\chhres0 \fi-180\li6840\lin6840 }{\listname ;}\listid1702592304}}{\*\listoverridetable{\listoverride\listid618268834\listoverridecount0\ls1} {\listoverride\listid193737980\listoverridecount0\ls2}{\listoverride\listid1702592304\listoverridecount0\ls3}{\listoverride\listid1475443951\listoverridecount0\ls4}}{\*\rsidtbl \rsid142241\rsid208113\rsid275639\rsid345974\rsid550746\rsid552350\rsid683278 \rsid1378136\rsid1593398\rsid1783103\rsid1930230\rsid2055905\rsid2711893\rsid2969566\rsid2980693\rsid3231679\rsid3694742\rsid3895175\rsid4411658\rsid4654667\rsid4672345\rsid4678839\rsid5124551\rsid5128047\rsid5389481\rsid5461175\rsid6186956\rsid6241037 \rsid6565277\rsid7361181\rsid7540268\rsid7560460\rsid8005191\rsid8067474\rsid8209989\rsid8458801\rsid8461511\rsid9070747\rsid9123274\rsid9775175\rsid10109114\rsid10250287\rsid11100254\rsid11100399\rsid11290244\rsid11483350\rsid11556869\rsid11603778 \rsid11611650\rsid11680637\rsid11738431\rsid11740698\rsid12018813\rsid12601025\rsid12609733\rsid12859122\rsid13059307\rsid13397719\rsid13922005\rsid14054378\rsid14360527\rsid14640974\rsid15158737\rsid15491994\rsid16205939\rsid16322290\rsid16390806 \rsid16466085\rsid16470532\rsid16604065\rsid16661396}{\mmathPr\mmathFont34\mbrkBin0\mbrkBinSub0\msmallFrac0\mdispDef1\mlMargin0\mrMargin0\mdefJc1\mwrapIndent1440\mintLim0\mnaryLim1}{\info{\author Jan Z\'e1ruba}{\operator Honza} {\creatim\yr2009\mo1\dy21\hr17\min58}{\revtim\yr2009\mo1\dy24\hr14\min41}{\version8}{\edmins41}{\nofpages1}{\nofwords304}{\nofchars2134}{\*\company }{\nofcharsws2434}{\vern32895}}{\*\xmlnstbl {\xmlns1 http://schemas.microsoft.com/office/word/2003/wordml} }\paperw11906\paperh16838\margl1417\margr1417\margt1417\margb1417\gutter0\ltrsect \deftab708\widowctrl\ftnbj\aenddoc\hyphhotz425\trackmoves1\trackformatting1\donotembedsysfont1\relyonvml0\donotembedlingdata0\grfdocevents0\validatexml1\showplaceholdtext0\ignoremixedcontent0\saveinvalidxml0 \showxmlerrors1\noxlattoyen\expshrtn\noultrlspc\dntblnsbdb\nospaceforul\formshade\horzdoc\dgmargin\dghspace180\dgvspace180\dghorigin1417\dgvorigin1417\dghshow1\dgvshow1 \jexpand\viewkind1\viewscale100\pgbrdrhead\pgbrdrfoot\splytwnine\ftnlytwnine\htmautsp\nolnhtadjtbl\useltbaln\alntblind\lytcalctblwd\lyttblrtgr\lnbrkrule\nobrkwrptbl\snaptogridincell\allowfieldendsel\wrppunct \asianbrkrule\rsidroot5461175\newtblstyruls\nogrowautofit\usenormstyforlist\noindnmbrts\felnbrelev\nocxsptable\indrlsweleven\noafcnsttbl\afelev\utinl\hwelev\spltpgpar\notcvasp\notbrkcnstfrctbl\notvatxbx\krnprsnet\cachedcolbal \nouicompat \fet0 {\*\wgrffmtfilter 2450}\nofeaturethrottle1\ilfomacatclnup0{\*\ftnsep \ltrpar \pard\plain \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid7361181 \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 \fs22\lang1029\langfe2052\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1029\langfenp2052 {\rtlch\fcs1 \af31507 \ltrch\fcs0 \insrsid7361181 \chftnsep \par }}{\*\ftnsepc \ltrpar \pard\plain \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid7361181 \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 \fs22\lang1029\langfe2052\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1029\langfenp2052 {\rtlch\fcs1 \af31507 \ltrch\fcs0 \insrsid7361181 \chftnsepc \par }}{\*\aftnsep \ltrpar \pard\plain \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid7361181 \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 \fs22\lang1029\langfe2052\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1029\langfenp2052 {\rtlch\fcs1 \af31507 \ltrch\fcs0 \insrsid7361181 \chftnsep \par }}{\*\aftnsepc \ltrpar \pard\plain \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid7361181 \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 \fs22\lang1029\langfe2052\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1029\langfenp2052 {\rtlch\fcs1 \af31507 \ltrch\fcs0 \insrsid7361181 \chftnsepc \par }}\ltrpar \sectd \ltrsect\linex0\headery708\footery708\colsx708\endnhere\sectlinegrid360\sectdefaultcl\sectrsid2969566\sftnbj {\*\pnseclvl1\pnucrm\pnqc\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl2\pnucltr\pnqc\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl3\pndec\pnqc\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl4\pnlcltr\pnqc\pnstart1\pnindent720\pnhang {\pntxta )}}{\*\pnseclvl5\pndec\pnqc\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl6 \pnlcltr\pnqc\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnqc\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnqc\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl9 \pnlcrm\pnqc\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}\pard\plain \ltrpar\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 \fs22\lang1029\langfe2052\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1029\langfenp2052 {\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1050\langfe2052\langnp1050\insrsid683278\charrsid8458801 \hich\af39\dbch\af31505\loch\f39 Ova aplikacije bila je napravena kao dio mojeg diplomskog posla. Njezin cilj}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1050\langfe2052\langnp1050\insrsid16390806\charrsid8458801 \hich\af39\dbch\af31505\loch\f39 je demonstra \hich\af39\dbch\af31505\loch\f39 \hich\f39 cija sposobnosti integracije Windows Forms Designer-a za Phalanger za Visual Studio. Demonstrira sljede\'e6\loch\f39 e oblasti:}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1050\langfe2052\langnp1050\insrsid683278\charrsid8458801 \par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f3\fs16\lang1050\langfe2052\langnp1050\langfenp2052\insrsid16390806\charrsid8458801 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}}\pard\plain \ltrpar\s15\ql \fi-360\li720\ri0\sl276\slmult1 \widctlpar\wrapdefault\aspalpha\aspnum\faauto\ls1\adjustright\rin0\lin720\itap0\pararsid9775175\contextualspace \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 \fs22\lang1029\langfe2052\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1029\langfenp2052 {\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1050\langfe2052\langnp1050\insrsid16390806\charrsid8458801 \hich\af39\dbch\af31505\loch\f39 Plan formulara \par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f3\fs16\lang1050\langfe2052\langnp1050\langfenp2052\insrsid16390806\charrsid8458801 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}\hich\af39\dbch\af31505\loch\f39 \hich\f39 Plan korisni\'e8 \loch\f39 kih kontrola \par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f3\fs16\lang1050\langfe2052\langnp1050\langfenp2052\insrsid16390806\charrsid8458801 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}\hich\af39\dbch\af31505\loch\f39 Lokalizaciju \par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f3\fs16\lang1050\langfe2052\langnp1050\langfenp2052\insrsid16390806\charrsid8458801 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}\hich\af39\dbch\af31505\loch\f39 \hich\f39 Ograni\'e8 \loch\f39 \hich\f39 enu potporu za djelomi\'e8\loch\f39 ne klase u Visual Studio-u \par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f3\fs16\lang1050\langfe2052\langnp1050\langfenp2052\insrsid16390806\charrsid8458801 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}\hich\af39\dbch\af31505\loch\f39 Pretvornik is PHP za \hich\af39\dbch\af31505\loch\f39 CodeDOM \par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f3\fs16\lang1050\langfe2052\langnp1050\langfenp2052\insrsid16390806\charrsid8458801 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}}\pard \ltrpar\s15\ql \fi-360\li720\ri0\sa200\sl276\slmult1 \widctlpar\wrapdefault\aspalpha\aspnum\faauto\ls1\adjustright\rin0\lin720\itap0\pararsid16390806\contextualspace {\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1050\langfe2052\langnp1050\insrsid16390806\charrsid8458801 \hich\af39\dbch\af31505\loch\f39 \hich\f39 Na\'e8\loch\f39 in programiranje za .NET i Windows Forms u PHP-u}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1050\langfe2052\langnp1050\insrsid13397719 \par }\pard\plain \ltrpar\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid7361181 \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 \fs22\lang1029\langfe2052\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1029\langfenp2052 {\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1050\langfe2052\langnp1050\insrsid7361181 \hich\af39\dbch\af31505\loch\f39 \hich\f39 Aplikacija mo\'9e \loch\f39 \hich\f39 e tako\'f0\loch\f39 \hich\f39 er slu\'9e\loch\f39 \hich\f39 iti kao prakti\'e8\loch\f39 \hich\f39 ni vodi\'9e\loch\f39 \hich\f39 WinForms za PHP programatore. Samo \'e8\loch\f39 itajte komentare u datotecima u abecednom redu.}{ \rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1050\langfe2052\langnp1050\insrsid7361181\charrsid7361181 \par }\pard \ltrpar\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid5461175 {\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \b\f39\fs16\lang1050\langfe2052\langnp1050\insrsid16390806\charrsid8458801 \hich\af39\dbch\af31505\loch\f39 Poznate probleme \par }\pard \ltrpar\ql \fi360\li0\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid4672345 {\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \b\f39\fs16\lang1050\langfe2052\langnp1050\insrsid16390806\charrsid8458801 \hich\af39\dbch\af31505\loch\f39 Aplikacija}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \b\f39\fs16\lang1050\langfe2052\langnp1050\insrsid4672345\charrsid8458801 \par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f3\fs16\lang1050\langfe2052\langnp1050\langfenp2052\insrsid16390806\charrsid8458801 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}}\pard\plain \ltrpar\s15\ql \fi-360\li720\ri0\sl276\slmult1 \widctlpar\wrapdefault\aspalpha\aspnum\faauto\ls4\adjustright\rin0\lin720\itap0\pararsid9775175\contextualspace \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 \fs22\lang1029\langfe2052\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1029\langfenp2052 {\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1050\langfe2052\langnp1050\insrsid16390806\charrsid8458801 \hich\af39\dbch\af31505\loch\f39 Je trema imati instaliran Phalanger da bi ova aplikacija radila. \par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f3\fs16\lang1050\langfe2052\langnp1050\langfenp2052\insrsid16390806\charrsid8458801 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}\hich\af39\dbch\af31505\loch\f39 Izvod za *.reg i }{ \rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1050\langfe2052\langnp1050\insrsid16470532\charrsid8458801 \hich\af39\dbch\af31505\loch\f39 binarne}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1050\langfe2052\langnp1050\insrsid16390806\charrsid8458801 \hich\af39\dbch\af31505\loch\f39 \hich\f39 datoteke javi gre\'9a\loch\f39 ke kao informacije. \par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f3\fs16\lang1050\langfe2052\langnp1050\langfenp2052\insrsid16390806\charrsid8458801 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}\hich\af39\dbch\af31505\loch\f39 \hich\f39 Klju\'e8 \loch\f39 evi HKEY_DYN_DATA\~ni HKEY_PERFORMANCE_DATA}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1050\langfe2052\langnp1050\insrsid16470532\charrsid8458801 \hich\af39\dbch\af31505\loch\f39 }{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1050\langfe2052\langnp1050\insrsid16390806\charrsid8458801 \hich\af39\dbch\af31505\loch\f39 ne radi. \par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f3\fs16\lang1050\langfe2052\langnp1050\langfenp2052\insrsid16390806\charrsid8458801 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}\hich\af39\dbch\af31505\loch\f39 Aplikacija ima funkciju izvod ali ne ima uvod.}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \b\f39\fs16\lang1050\langfe2052\langnp1050\insrsid16390806\charrsid4678839 \par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f3\fs16\lang1050\langfe2052\langnp1050\langfenp2052\insrsid4678839 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}}\pard \ltrpar\s15\ql \fi-360\li720\ri0\sa200\sl276\slmult1 \widctlpar\wrapdefault\aspalpha\aspnum\faauto\ls4\adjustright\rin0\lin720\itap0\pararsid16390806\contextualspace {\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1050\langfe2052\langnp1050\insrsid4678839 \hich\af39\dbch\af31505\loch\f39 U Windows Vista \hich\af39\dbch\af31505\loch\f39 \hich\f39 u zaglavljima stupaca su neo\'e8\loch\f39 \hich\f39 ekivane ikone (ovo je pogre\'9a\loch\f39 ka u }{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1050\langfe2052\langnp1050\insrsid4678839\charrsid4678839 {\field{\*\fldinst SYMBOL 33 \\f "Ligatures 3" \\s 8}{\fldrslt\f38\fs16}}}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1050\langfe2052\langnp1050\insrsid4678839 \hich\af39\dbch\af31505\loch\f39 -u }{\field\flddirty{\*\fldinst {\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\insrsid4678839 \hich\af39\dbch\af31505\loch\f39 HYPERLINK "}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\insrsid4678839\charrsid3895175 \hich\af39\dbch\af31505\loch\f39 https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=395739}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\insrsid4678839 \hich\af39\dbch\af31505\loch\f39 " }{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\insrsid15491994 {\*\datafield 00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90bc8000000680074007400700073003a002f002f0063006f006e006e006500630074002e006d006900630072006f0073006f00660074002e0063006f006d002f00560069007300750061006c0053007400750064006900 6f002f0066006500650064006200610063006b002f00560069006500770046006500650064006200610063006b002e0061007300700078003f0046006500650064006200610063006b00490044003d003300390035003700330039000000795881f43b1d7f48af2c825dc485276300000000a5ab000000}}}{\fldrslt { \rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \cs16\f39\fs16\ul\cf17\insrsid4678839\charrsid10109114 \hich\af39\dbch\af31505\loch\f39 https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=395739}}}\sectd \ltrsect \linex0\headery708\footery708\colsx708\endnhere\sectlinegrid360\sectdefaultcl\sectrsid2969566\sftnbj {\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\insrsid4678839 \hich\af39\dbch\af31505\loch\f39 )}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \b\f39\fs16\lang1050\langfe2052\langnp1050\insrsid4678839\charrsid8458801 \par }\pard\plain \ltrpar\ql \fi360\li0\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid16390806 \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 \fs22\lang1029\langfe2052\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1029\langfenp2052 {\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \b\f39\fs16\lang1050\langfe2052\langnp1050\insrsid16390806\charrsid8458801 \hich\af39\dbch\af31505\loch\f39 \hich\f39 Razvojno okru\'9e\loch\f39 uje}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \b\f39\fs16\lang1050\langfe2052\langnp1050\insrsid4672345\charrsid8458801 \par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f3\fs16\lang1050\langfe2052\langnp1050\langfenp2052\insrsid16470532\charrsid8458801 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}}\pard\plain \ltrpar\s15\ql \fi-360\li720\ri0\sl276\slmult1 \widctlpar\wrapdefault\aspalpha\aspnum\faauto\ls2\adjustright\rin0\lin720\itap0\pararsid9775175\contextualspace \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 \fs22\lang1029\langfe2052\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1029\langfenp2052 {\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1050\langfe2052\langnp1050\insrsid16470532\charrsid8458801 \hich\af39\dbch\af31505\loch\f39 Da bi se neke formulare prikazali, treba je najprije sastaviti aplikaciju.}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1050\langfe2052\langnp1050\insrsid16390806\charrsid8458801 \par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f3\fs16\lang1050\langfe2052\langnp1050\langfenp2052\insrsid16470532\charrsid8458801 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1050\langfe2052\langnp1050\insrsid16470532\charrsid8458801 \hich\af39\dbch\af31505\loch\f39 Visual Studio padne uza otvaranje datoteke Sorter.php \par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f3\fs16\lang1050\langfe2052\langnp1050\langfenp2052\insrsid16470532\charrsid8458801 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}\hich\af39\dbch\af31505\loch\f39 \hich\f39 Kompilator Phalanger ne to\'e8\loch\f39 \hich\f39 no napravlja informacije za ispravu pogre\'9a\loch\f39 \hich\f39 ka za djelomi\'e8\loch\f39 ne klase \hich\f39 \endash \hich\af39\dbch\af31505\loch\f39 \hich\f39 program za ispravljanje pogre\'9a \loch\f39 aka misli si, da sva dia pothecaju iz jedine datoteke. Projekt aplikacije bio je priredjen, da bi ova datoteka uvijek bila *.user.php.* \par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f3\fs16\lang1050\langfe2052\langnp1050\langfenp2052\insrsid16470532\charrsid8458801 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}\hich\af39\dbch\af31505\loch\f39 \hich\f39 Gre\'9a\loch\f39 \hich\f39 ka PictureBox.BeginInit/EndInit nije deklariran za formulare sa PictureBox-om. Mo\'9e\loch\f39 e\hich\af39\dbch\af31505\loch\f39 te nju bezopasno ignorirati.}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1050\langfe2052\langnp1050\insrsid16470532 \par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f3\fs16\lang1050\langfe2052\langnp1050\langfenp2052\insrsid4678839 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}}\pard \ltrpar\s15\ql \fi-360\li720\ri0\sa200\sl276\slmult1 \widctlpar\wrapdefault\aspalpha\aspnum\faauto\ls2\adjustright\rin0\lin720\itap0\pararsid4678839\contextualspace {\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1050\langfe2052\langnp1050\insrsid4678839 \hich\af39\dbch\af31505\loch\f39 Za }{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1050\langfe2052\langnp1050\insrsid1378136 \hich\af39\dbch\af31505\loch\f39 sastavljene}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1050\langfe2052\langnp1050\insrsid4678839 \hich\af39\dbch\af31505\loch\f39 \hich\f39 je treba da bi mt.exe bio u sistemskoj promjenjivoj PATH (od verzije 2.0.0.1; mt.exe nu\'9e\loch\f39 \hich\f39 no je za ulo\'9e\loch\f39 \hich\f39 enje Vista manifesta post-build doga\'f0\loch\f39 \hich\f39 ajem koji pokreta mt.exe; taj doga \'f0\loch\f39 aj upisan je u koncu *.phpproj datotek\hich\af39\dbch\af31505\loch\f39 e) \par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f3\fs16\lang1050\langfe2052\langnp1050\langfenp2052\insrsid1378136 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1050\langfe2052\langnp1050\insrsid1378136 \hich\af39\dbch\af31505\loch\f39 \hich\f39 Regedit.ico ne mo\'9e\loch\f39 \hich\f39 e biti samo za \'e8\loch\f39 itanje uz sastavljanja.}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1050\langfe2052\langnp1050\insrsid1378136\charrsid8458801 \par }\pard\plain \ltrpar\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid4678839 \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 \fs22\lang1029\langfe2052\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1029\langfenp2052 {\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1050\langfe2052\langnp1050\insrsid16470532\charrsid8458801 \hich\af39\dbch\af31505\loch\f39 Aplikacije bila je sastavena }{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1050\langfe2052\langnp1050\insrsid8458801 \hich\af39\dbch\af31505\loch\f39 nasuprot}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1050\langfe2052\langnp1050\insrsid16470532\charrsid8458801 \hich\af39\dbch\af31505\loch\f39 \hich\f39 i upotrijeblju\'e6\loch\f39 e }{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1050\langfe2052\langnp1050\insrsid8458801\charrsid8458801 \hich\af39\dbch\af31505\loch\f39 najnovije}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1050\langfe2052\langnp1050\insrsid16470532\charrsid8458801 \hich\af39\dbch\af31505\loch\f39 }{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1050\langfe2052\langnp1050\insrsid8458801\charrsid8458801 \hich\af39\dbch\af31505\loch\f39 izvorne k}{\rtlch\fcs1 \af1\afs16 \ltrch\fcs0 \f1\fs16\lang1050\langfe2052\langnp1050\insrsid8458801\charrsid8458801 \loch\af1\dbch\af31505\hich\f1 \'f4\loch\f1 de Phalanger dana 2}{\rtlch\fcs1 \af1\afs16 \ltrch\fcs0 \f1\fs16\lang1050\langfe2052\langnp1050\insrsid4678839 \hich\af1\dbch\af31505\loch\f1 4}{\rtlch\fcs1 \af1\afs16 \ltrch\fcs0 \f1\fs16\lang1050\langfe2052\langnp1050\insrsid8458801\charrsid8458801 \hich\af1\dbch\af31505\loch\f1 .1.2009.}{\rtlch\fcs1 \af1\afs16 \ltrch\fcs0 \f1\fs16\lang1050\langfe2052\langnp1050\insrsid16470532\charrsid8458801 \par }\pard \ltrpar\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid5461175 {\rtlch\fcs1 \af1\afs16 \ltrch\fcs0 \f1\fs16\lang1050\langfe2052\langnp1050\insrsid8458801\charrsid8458801 \hich\af1\dbch\af31505\loch\f1 Diplomski posao on-line:}{\field\flddirty{\*\fldinst {\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1050\langfe2052\langnp1050\insrsid15158737\charrsid8458801 \hich\af39\dbch\af31505\loch\f39 HYPERLINK "%20https:/dip.felk.cvut.cz/browse/details.php?f=F3&d=K13136&y=2009&a=zarubj1&t=dipl" }{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1050\langfe2052\langnp1050\insrsid15491994\charrsid8458801 {\*\datafield 00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90bba000000680074007400700073003a002f006400690070002e00660065006c006b002e0063007600750074002e0063007a002f00620072006f007700730065002f00640065007400610069006c0073002e0070006800 70003f0066003d0046003300260064003d004b0031003300310033003600260079003d003200300030003900260061003d007a0061007200750062006a003100260074003d006400690070006c000000795881f43b1d7f48af2c825dc485276300000000a5ab000064730062610e}}}{\fldrslt {\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \cs16\f39\fs16\ul\cf17\lang1050\langfe2052\langnp1050\insrsid15158737\charrsid8458801 \hich\af39\dbch\af31505\loch\f39 https://dip.felk.cvut.cz/browse/details.php?f=F3&d=K13136&y=2009&a=zarubj1&t=dipl}}}\sectd \ltrsect \linex0\headery708\footery708\colsx708\endnhere\sectlinegrid360\sectdefaultcl\sectrsid2969566\sftnbj {\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1050\langfe2052\langnp1050\insrsid15158737\charrsid8458801 \par }\pard \ltrpar\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid8458801 {\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1050\langfe2052\langnp1050\insrsid8458801\charrsid8458801 \hich\af39\dbch\af31505\loch\f39 \hich\f39 * Ovo zna\'e8\loch\f39 i edit\hich\af39\dbch\af31505\loch\f39 irati *.phpproj datoteku tako, da datoteka *.user.php je ispred odgovorne *.php datoteke.}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1050\langfe2052\langnp1050\insrsid2055905 \par }{\rtlch\fcs1 \ab\af39\afs16 \ltrch\fcs0 \b\f39\fs16\lang1050\langfe2052\langnp1050\insrsid4678839 \hich\af39\dbch\af31505\loch\f39 Povijest verzijama: \par }\pard \ltrpar\ql \fi-851\li851\ri0\sl276\slmult1\widctlpar\tx709\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin851\itap0\pararsid16322290 {\rtlch\fcs1 \ab\af39\afs16 \ltrch\fcs0 \b\f39\fs16\lang1050\langfe2052\langnp1050\insrsid4678839 \hich\af39\dbch\af31505\loch\f39 2.0.0.0}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1050\langfe2052\langnp1050\insrsid4678839 \tab }{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1050\langfe2052\langnp1050\insrsid4678839\charrsid4678839 \loch\af39\dbch\af31505\hich\f39 \endash \loch\f39 Prva verzija }{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1050\langfe2052\langnp1050\insrsid4678839 \hich\af39\dbch\af31505\loch\f39 (20.1.2009) \par }{\rtlch\fcs1 \ab\af39\afs16 \ltrch\fcs0 \b\f39\fs16\lang1050\langfe2052\langnp1050\insrsid4678839\charrsid4678839 \hich\af39\dbch\af31505\loch\f39 2.0.0.1}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1050\langfe2052\langnp1050\insrsid4678839 \tab \loch\af39\dbch\af31505\hich\f39 \endash \loch\f39 24.1.2009 \par \tab \hich\af39\dbch\af31505\loch\f39 \hich\f39 - potpora za Windows Vista (sprije\'e8\loch\f39 enje virtualizacije registara)}{\rtlch\fcs1 \ab\af39\afs16 \ltrch\fcs0 \b\f39\fs16\lang1050\langfe2052\langnp1050\insrsid4678839\charrsid4678839 \par }{\*\themedata 504b030414000600080000002100828abc13fa0000001c020000130000005b436f6e74656e745f54797065735d2e786d6cac91cb6ac3301045f785fe83d0b6d8 72ba28a5d8cea249777d2cd20f18e4b12d6a8f843409c9df77ecb850ba082d74231062ce997b55ae8fe3a00e1893f354e9555e6885647de3a8abf4fbee29bbd7 2a3150038327acf409935ed7d757e5ee14302999a654e99e393c18936c8f23a4dc072479697d1c81e51a3b13c07e4087e6b628ee8cf5c4489cf1c4d075f92a0b 44d7a07a83c82f308ac7b0a0f0fbf90c2480980b58abc733615aa2d210c2e02cb04430076a7ee833dfb6ce62e3ed7e14693e8317d8cd0433bf5c60f53fea2fe7 065bd80facb647e9e25c7fc421fd2ddb526b2e9373fed4bb902e182e97b7b461e6bfad3f010000ffff0300504b030414000600080000002100a5d6a7e7c00000 00360100000b0000005f72656c732f2e72656c73848fcf6ac3300c87ef85bd83d17d51d2c31825762fa590432fa37d00e1287f68221bdb1bebdb4fc7060abb08 84a4eff7a93dfeae8bf9e194e720169aaa06c3e2433fcb68e1763dbf7f82c985a4a725085b787086a37bdbb55fbc50d1a33ccd311ba548b63095120f88d94fbc 52ae4264d1c910d24a45db3462247fa791715fd71f989e19e0364cd3f51652d73760ae8fa8c9ffb3c330cc9e4fc17faf2ce545046e37944c69e462a1a82fe353 bd90a865aad41ed0b5b8f9d6fd010000ffff0300504b0304140006000800000021006b799616830000008a0000001c0000007468656d652f7468656d652f7468 656d654d616e616765722e786d6c0ccc4d0ac3201040e17da17790d93763bb284562b2cbaebbf600439c1a41c7a0d29fdbd7e5e38337cedf14d59b4b0d592c9c 070d8a65cd2e88b7f07c2ca71ba8da481cc52c6ce1c715e6e97818c9b48d13df49c873517d23d59085adb5dd20d6b52bd521ef2cdd5eb9246a3d8b4757e8d3f7 29e245eb2b260a0238fd010000ffff0300504b0304140006000800000021000cc90327a8060000611b0000160000007468656d652f7468656d652f7468656d65 312e786d6cec594f6f1c3514bf23f11dacb9b7d94d76d36cd44d95ddec1248d346d96d518fde19ef8c1bcf78647b93ee0db547242444412051094e1c1050a995 b89413e293048aa048fd0a3cdb33b3e3eca449da082ae81e9219fbe7f7ff3d3f7b2e5fb91333b44f84a43c697bf58b350f91c4e7014dc2b67763d8bfb0e221a9 701260c613d2f6a6447a57d6de7eeb325e5511890982f5895cc56d2f522a5d5d58903e0c637991a72481b931173156f02ac28540e003a01bb385c55a6d7921c6 34f150826320bbcd15dd47120753747d3ca63ef1d6720e3d066c1225f580cfc440d327d9b22d9cf884fdfcf52f5f187cb057d72839955d26d03e666d0f1806fc 6048ee280f312c154cb4bd9af9790b6b9717f06ab688a963d696d6f5cd2f5b972d08f6160d4f118e0aa6f57ea37569a3a06f004ccde37abd5eb7572fe81900f6 7dd0d6ca52a6d9e8afd43b39cd12c83eced3eed69ab5868b2fd15f9a93b9d5e9749aad4c164bd480ec63630ebf525b6eac2f3a7803b2f8e61cbed159ef76971d bc0159fcf21cbe7fa9b5dc70f10614319aeccda1b543fbfd8c7a011973b659095f01f84a2d83cf50100d45846916639ea817c55b8c6f73d107900633ac6882d4 342563ec434877713c12146b267895e0d28c1df2e5dc90e687a42f68aadade7b2986f498d17bfee4bbe74f1ea1c3bb8f0feffe7878efdee1dd1f2c2167d5264e c2f2aa67df7cfcd7830fd09f8fbe7a76ffd36abc2ce37ffbfec35f7ffaa41a08293413e7e9670f7f7ffcf0e9e71ffdf1edfd0af8bac0a3327c486322d1357280 76790c8a19abb892939138db8a61846979c57a124a9c60cda5827e4f450efada14b3cc3b8e1c1de25af0a6801252057c6772db1178108989a2159cb7a2d8016e 73ce3a5c545a614bf32a99793849c26ae66252c6ed62bc5fc5bb8b13c7bfbd490af5330f4b47f16e441c3177184e140e494214d2737c8f900aed6e51ead8759b fa824b3e56e816451d4c2b4d32a423279a668b36690c7e9956e90cfe766cb37d137538abd27a83ecbb48c80acc2a841f12e698f11d3c5138ae2239c4312b1bfc 2a5651959083a9f0cbb89e54e0e990308e7a0191b26acd7501fa969cbe85a16a55ba7d9b4d63172914ddaba27915735e466ef0bd6e84e3b40a3ba04954c6be2b f7204431dae1aa0abecddd0cd1efe0079c1cebee9b9438ee3eb91adca0a123d22c40f4cc44685f42b9762a704c9317956346a11edb1838bf720c05f0e9970f2a 22eb752dc4ebb0275565c2e691f27b1cee68d1ed7211d0d7bfe66ee049b24320cce7379e3725f74dc9f5fef325f7b87c3e6da19dd55628bbba6fb08db16993e3 1776c963cad8404d19b92a4da32c61af08fa30a8d79ae322294e4e69048f596d7770a1c0660d125cbd4f553488700a4d76ddd3444299910e254ab984039e19ae a4adf1d0a82b7b3c6cea8383ad0912ab6d1ed8e1253d9c9f0f0a3266c709cd413467b4a4099c96d9d2a58c28a8fd32ccea5aa85373ab1bd14cb973b8152a831f e75583c1c29ad08420685dc0cacb7060d7ace170821909b4ddedfe9bbbc578e13c5d24231c90cc475aef791fd58d93f25831b702103b153ed287bd13ac56e2d6 d2645f81db699c5466d738865deebd57f1521ec1332fe9dc3d928e2c2927274bd041db6b35179b1ef271daf6c670ae85c73805af4bddf76116c24d91af840dfb 1393d964f9cc9bad5c313709ea705d61ed3ea7b053075221d50696910d0d339585004b34272bff6213cc7a5e0ad8487f092996562018fe3529c08eae6bc9784c 7c5576766944dbcebe66a5944f141183283840233611bb18dcaf4315f409a884eb095311f40bdca7696b9b29b738674957bec532383b8e591ae1acdcea14cd33 d9c24d1e173298b79278a05ba5ec46b9b3ab6252fe9c542987f1ff4c15bd9fc06dc152a03de0c3bdaec048e76bdbe342451caa501a51bf2fa07930b503a205ee 64611a820a6e97cd7f41f6f57f9b739686496b38f4a95d1a2241613f5291206407ca9289be1388d5b3bdcb9264192113512571656ac51e917dc286ba062eebbd dd431184baa926591930b8a3f1e7be6719340a759353ce37a786147bafcd817fbaf3b1c90c4ab975d83434b9fd0b112b7655bbde2ccff7deb2227a62d66635f2 ac0066a5ada095a5fd4b8a70c6add656ac398d179bb970e0c5798d61b0688852b8f341fa0fec7f54f8cc7ea5d01bea90ef426d45f0c1411383b081a8be601b0f a40ba41d1c41e364076d306952d6b459eba4ad966fd6e7dce9167c8f185b4b761a7f9fd1d84573e6b27372f13c8d9d59d8b1b51d3bd6d4e0d9a3290a43e3fc30 631c63be7195bf40f1d16d70f406dcf14f98922698e0db92c0d07a0e4c1e40f25b8e66e9dadf000000ffff0300504b0304140006000800000021000dd1909fb6 0000001b010000270000007468656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73848f4d0ac2301484f78277086f6f d3ba109126dd88d0add40384e4350d363f2451eced0dae2c082e8761be9969bb979dc9136332de3168aa1a083ae995719ac16db8ec8e4052164e89d93b64b060 828e6f37ed1567914b284d262452282e3198720e274a939cd08a54f980ae38a38f56e422a3a641c8bbd048f7757da0f19b017cc524bd62107bd5001996509aff b3fd381a89672f1f165dfe514173d9850528a2c6cce0239baa4c04ca5bbabac4df000000ffff0300504b01022d0014000600080000002100828abc13fa000000 1c0200001300000000000000000000000000000000005b436f6e74656e745f54797065735d2e786d6c504b01022d0014000600080000002100a5d6a7e7c00000 00360100000b000000000000000000000000002b0100005f72656c732f2e72656c73504b01022d00140006000800000021006b799616830000008a0000001c00 000000000000000000000000140200007468656d652f7468656d652f7468656d654d616e616765722e786d6c504b01022d00140006000800000021000cc90327 a8060000611b00001600000000000000000000000000d10200007468656d652f7468656d652f7468656d65312e786d6c504b01022d0014000600080000002100 0dd1909fb60000001b0100002700000000000000000000000000ad0900007468656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73504b050600000000050005005d010000a80a00000000} {\*\colorschememapping 3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d22796573223f3e0d0a3c613a636c724d 617020786d6c6e733a613d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f64726177696e676d6c2f323030362f6d6169 6e22206267313d226c743122207478313d22646b3122206267323d226c743222207478323d22646b322220616363656e74313d22616363656e74312220616363 656e74323d22616363656e74322220616363656e74333d22616363656e74332220616363656e74343d22616363656e74342220616363656e74353d22616363656e74352220616363656e74363d22616363656e74362220686c696e6b3d22686c696e6b2220666f6c486c696e6b3d22666f6c486c696e6b222f3e} {\*\latentstyles\lsdstimax267\lsdlockeddef0\lsdsemihiddendef1\lsdunhideuseddef1\lsdqformatdef0\lsdprioritydef99{\lsdlockedexcept \lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority0 \lsdlocked0 Normal; \lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 1;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 2;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 3;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 4; \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 5;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 6;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 7;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 8;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 9; \lsdpriority39 \lsdlocked0 toc 1;\lsdpriority39 \lsdlocked0 toc 2;\lsdpriority39 \lsdlocked0 toc 3;\lsdpriority39 \lsdlocked0 toc 4;\lsdpriority39 \lsdlocked0 toc 5;\lsdpriority39 \lsdlocked0 toc 6;\lsdpriority39 \lsdlocked0 toc 7; \lsdpriority39 \lsdlocked0 toc 8;\lsdpriority39 \lsdlocked0 toc 9;\lsdqformat1 \lsdpriority35 \lsdlocked0 caption;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority10 \lsdlocked0 Title;\lsdpriority1 \lsdlocked0 Default Paragraph Font; \lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority11 \lsdlocked0 Subtitle;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority22 \lsdlocked0 Strong;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority20 \lsdlocked0 Emphasis; \lsdsemihidden0 \lsdunhideused0 \lsdpriority59 \lsdlocked0 Table Grid;\lsdunhideused0 \lsdlocked0 Placeholder Text;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority1 \lsdlocked0 No Spacing; \lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid; \lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1; \lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2; \lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading; \lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 1; \lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 1; \lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 1;\lsdunhideused0 \lsdlocked0 Revision; \lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority34 \lsdlocked0 List Paragraph;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority29 \lsdlocked0 Quote;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority30 \lsdlocked0 Intense Quote; \lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 1; \lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 1; \lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 2; \lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 2; \lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 2; \lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 2; \lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 2; \lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 3; \lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 3; \lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 3; \lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 3; \lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 3; \lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 4; \lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 4; \lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 4; \lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 4; \lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 5; \lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 5; \lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 5; \lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 5; \lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 5; \lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 6; \lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 6; \lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 6; \lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 6; \lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 6; \lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority19 \lsdlocked0 Subtle Emphasis;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority21 \lsdlocked0 Intense Emphasis; \lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority31 \lsdlocked0 Subtle Reference;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority32 \lsdlocked0 Intense Reference; \lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority33 \lsdlocked0 Book Title;\lsdpriority37 \lsdlocked0 Bibliography;\lsdqformat1 \lsdpriority39 \lsdlocked0 TOC Heading;}}{\*\datastore 010500000200000018000000 4d73786d6c322e534158584d4c5265616465722e352e3000000000000000000000060000 d0cf11e0a1b11ae1000000000000000000000000000000003e000300feff090006000000000000000000000001000000010000000000000000100000feffffff00000000feffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffdfffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffff52006f006f007400200045006e00740072007900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000500ffffffffffffffffffffffffec69d9888b8b3d4c859eaf6cd158be0f000000000000000000000000206e 7967297ec901feffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000105000000000000}} ================================================ FILE: Samples/RegEditPHP/RegEditPHP/readme.rtf ================================================ {\rtf1\adeflang1025\ansi\ansicpg1250\uc1\adeff31507\deff0\stshfdbch31505\stshfloch31506\stshfhich31506\stshfbi0\deflang1029\deflangfe1029\themelang1029\themelangfe2052\themelangcs0{\fonttbl{\f0\fbidi \froman\fcharset238\fprq2{\*\panose 02020603050405020304}Times New Roman;} {\f2\fbidi \fmodern\fcharset238\fprq1{\*\panose 02070309020205020404}Courier New;}{\f3\fbidi \froman\fcharset2\fprq2{\*\panose 05050102010706020507}Symbol;}{\f10\fbidi \fnil\fcharset2\fprq2{\*\panose 05000000000000000000}Wingdings;} {\f13\fbidi \fnil\fcharset134\fprq2{\*\panose 02010600030101010101}SimSun{\*\falt ??\'a1\'a6|||||||\'a1\'a6||||||\'a1\'a6||||\'a1\'a6|||\'a1\'a6|\'a1\'a6\'a8\'a7\'a1\'a6};}{\f34\fbidi \froman\fcharset238\fprq2{\*\panose 02040503050406030204}Cambria Math;} {\f38\fbidi \fnil\fcharset2\fprq2{\*\panose 05010101010101010101}Ligatures 3;}{\f39\fbidi \fswiss\fcharset238\fprq2{\*\panose 020b0604030504040204}Tahoma;}{\f40\fbidi \fnil\fcharset134\fprq2{\*\panose 02010600030101010101}@SimSun;} {\flomajor\f31500\fbidi \froman\fcharset238\fprq2{\*\panose 02020603050405020304}Times New Roman;} {\fdbmajor\f31501\fbidi \fnil\fcharset134\fprq2{\*\panose 02010600030101010101}SimSun{\*\falt ??\'a1\'a6|||||||\'a1\'a6||||||\'a1\'a6||||\'a1\'a6|||\'a1\'a6|\'a1\'a6\'a8\'a7\'a1\'a6};} {\fhimajor\f31502\fbidi \froman\fcharset238\fprq2{\*\panose 02040503050406030204}Cambria;}{\fbimajor\f31503\fbidi \froman\fcharset238\fprq2{\*\panose 02020603050405020304}Times New Roman;} {\flominor\f31504\fbidi \froman\fcharset238\fprq2{\*\panose 02020603050405020304}Times New Roman;} {\fdbminor\f31505\fbidi \fnil\fcharset134\fprq2{\*\panose 02010600030101010101}SimSun{\*\falt ??\'a1\'a6|||||||\'a1\'a6||||||\'a1\'a6||||\'a1\'a6|||\'a1\'a6|\'a1\'a6\'a8\'a7\'a1\'a6};} {\fhiminor\f31506\fbidi \fswiss\fcharset238\fprq2{\*\panose 020f0502020204030204}Calibri;}{\fbiminor\f31507\fbidi \froman\fcharset238\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f51\fbidi \froman\fcharset0\fprq2 Times New Roman;} {\f50\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\f52\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\f53\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\f54\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);} {\f55\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\f56\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\f57\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\f71\fbidi \fmodern\fcharset0\fprq1 Courier New;} {\f70\fbidi \fmodern\fcharset204\fprq1 Courier New Cyr;}{\f72\fbidi \fmodern\fcharset161\fprq1 Courier New Greek;}{\f73\fbidi \fmodern\fcharset162\fprq1 Courier New Tur;}{\f74\fbidi \fmodern\fcharset177\fprq1 Courier New (Hebrew);} {\f75\fbidi \fmodern\fcharset178\fprq1 Courier New (Arabic);}{\f76\fbidi \fmodern\fcharset186\fprq1 Courier New Baltic;}{\f77\fbidi \fmodern\fcharset163\fprq1 Courier New (Vietnamese);} {\f181\fbidi \fnil\fcharset0\fprq2 SimSun Western{\*\falt ??\'a1\'a6|||||||\'a1\'a6||||||\'a1\'a6||||\'a1\'a6|||\'a1\'a6|\'a1\'a6\'a8\'a7\'a1\'a6};}{\f391\fbidi \froman\fcharset0\fprq2 Cambria Math;} {\f390\fbidi \froman\fcharset204\fprq2 Cambria Math Cyr;}{\f392\fbidi \froman\fcharset161\fprq2 Cambria Math Greek;}{\f393\fbidi \froman\fcharset162\fprq2 Cambria Math Tur;}{\f396\fbidi \froman\fcharset186\fprq2 Cambria Math Baltic;} {\f441\fbidi \fswiss\fcharset0\fprq2 Tahoma;}{\f440\fbidi \fswiss\fcharset204\fprq2 Tahoma Cyr;}{\f442\fbidi \fswiss\fcharset161\fprq2 Tahoma Greek;}{\f443\fbidi \fswiss\fcharset162\fprq2 Tahoma Tur;} {\f444\fbidi \fswiss\fcharset177\fprq2 Tahoma (Hebrew);}{\f445\fbidi \fswiss\fcharset178\fprq2 Tahoma (Arabic);}{\f446\fbidi \fswiss\fcharset186\fprq2 Tahoma Baltic;}{\f447\fbidi \fswiss\fcharset163\fprq2 Tahoma (Vietnamese);} {\f448\fbidi \fswiss\fcharset222\fprq2 Tahoma (Thai);}{\f451\fbidi \fnil\fcharset0\fprq2 @SimSun Western;}{\flomajor\f31510\fbidi \froman\fcharset0\fprq2 Times New Roman;}{\flomajor\f31509\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;} {\flomajor\f31511\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\flomajor\f31512\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\flomajor\f31513\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);} {\flomajor\f31514\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\flomajor\f31515\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\flomajor\f31516\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);} {\fdbmajor\f31520\fbidi \fnil\fcharset0\fprq2 SimSun Western{\*\falt ??\'a1\'a6|||||||\'a1\'a6||||||\'a1\'a6||||\'a1\'a6|||\'a1\'a6|\'a1\'a6\'a8\'a7\'a1\'a6};}{\fhimajor\f31530\fbidi \froman\fcharset0\fprq2 Cambria;} {\fhimajor\f31529\fbidi \froman\fcharset204\fprq2 Cambria Cyr;}{\fhimajor\f31531\fbidi \froman\fcharset161\fprq2 Cambria Greek;}{\fhimajor\f31532\fbidi \froman\fcharset162\fprq2 Cambria Tur;} {\fhimajor\f31535\fbidi \froman\fcharset186\fprq2 Cambria Baltic;}{\fbimajor\f31540\fbidi \froman\fcharset0\fprq2 Times New Roman;}{\fbimajor\f31539\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;} {\fbimajor\f31541\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fbimajor\f31542\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fbimajor\f31543\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);} {\fbimajor\f31544\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fbimajor\f31545\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fbimajor\f31546\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);} {\flominor\f31550\fbidi \froman\fcharset0\fprq2 Times New Roman;}{\flominor\f31549\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\flominor\f31551\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;} {\flominor\f31552\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\flominor\f31553\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\flominor\f31554\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);} {\flominor\f31555\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\flominor\f31556\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);} {\fdbminor\f31560\fbidi \fnil\fcharset0\fprq2 SimSun Western{\*\falt ??\'a1\'a6|||||||\'a1\'a6||||||\'a1\'a6||||\'a1\'a6|||\'a1\'a6|\'a1\'a6\'a8\'a7\'a1\'a6};}{\fhiminor\f31570\fbidi \fswiss\fcharset0\fprq2 Calibri;} {\fhiminor\f31569\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;}{\fhiminor\f31571\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;}{\fhiminor\f31572\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;} {\fhiminor\f31575\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;}{\fbiminor\f31580\fbidi \froman\fcharset0\fprq2 Times New Roman;}{\fbiminor\f31579\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;} {\fbiminor\f31581\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fbiminor\f31582\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fbiminor\f31583\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);} {\fbiminor\f31584\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fbiminor\f31585\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fbiminor\f31586\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}} {\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0; \red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;\chyperlink\ctint255\cshade255\red0\green0\blue255;}{\*\defchp \fs22\loch\af31506\hich\af31506\dbch\af31505 }{\*\defpap \ql \li0\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 }\noqfpromote {\stylesheet{\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 \fs22\lang1029\langfe2052\loch\f31506\hich\af31506\dbch\af31505\cgrid\langnp1029\langfenp2052 \snext0 \sqformat \spriority0 \styrsid2969566 Normal;}{\*\cs10 \additive \ssemihidden \sunhideused \spriority1 Default Paragraph Font;}{\*\ts11\tsrowd\trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\trcbpat1\trcfpat1\tblind0\tblindtype3\tscellwidthfts0\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv \ql \li0\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0 \fs22\lang1029\langfe1029\loch\f31506\hich\af31506\dbch\af31505\cgrid\langnp1029\langfenp1029 \snext11 \ssemihidden \sunhideused \sqformat Normal Table;}{\s15\ql \li720\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin720\itap0\contextualspace \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 \fs22\lang1029\langfe2052\loch\f31506\hich\af31506\dbch\af31505\cgrid\langnp1029\langfenp2052 \sbasedon0 \snext15 \sqformat \spriority34 \styrsid5461175 List Paragraph;}{\*\cs16 \additive \rtlch\fcs1 \af0 \ltrch\fcs0 \ul\cf17 \sbasedon10 \sunhideused \styrsid10037286 Hyperlink;}}{\*\listtable{\list\listtemplateid-328425630\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67436545 \'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67436547\'01o;}{\levelnumbers ;}\f2\fbias0\hres0\chhres0 \fi-360\li1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67436549\'01\u-3929 ?;}{\levelnumbers;} \f10\fbias0\hres0\chhres0 \fi-360\li2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67436545\'01\u-3913 ?;}{\levelnumbers;} \f3\fbias0\hres0\chhres0 \fi-360\li2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67436547\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67436549\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67436545\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67436547\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li5760\lin5760 } {\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67436549\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li6480\lin6480 }{\listname ;}\listid193737980}{\list\listtemplateid-458086446\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67436545\'01\u-3913 ?;}{\levelnumbers;} \f3\fbias0\hres0\chhres0 \fi-360\li720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67436547\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67436549\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67436545\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67436547\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li3600\lin3600 } {\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67436549\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li4320\lin4320 }{\listlevel \levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67436545\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li5040\lin5040 }{\listlevel\levelnfc23 \levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67436547\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0 \leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67436549\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li6480\lin6480 }{\listname ;}\listid618268834}}{\*\listoverridetable {\listoverride\listid618268834\listoverridecount0\ls1}{\listoverride\listid193737980\listoverridecount0\ls2}}{\*\rsidtbl \rsid142241\rsid345974\rsid550746\rsid552350\rsid729657\rsid1539400\rsid1593398\rsid1600798\rsid1783103\rsid2575936\rsid2711893 \rsid2714154\rsid2900870\rsid2969566\rsid2980693\rsid3231679\rsid3895175\rsid4411658\rsid4654667\rsid4664920\rsid4738795\rsid4919942\rsid5124551\rsid5389481\rsid5461175\rsid6241037\rsid7540268\rsid7669778\rsid8005191\rsid8016588\rsid8209989\rsid8461511 \rsid9070747\rsid9123274\rsid9853923\rsid10037286\rsid10109114\rsid10250287\rsid11100254\rsid11100399\rsid11290244\rsid11483350\rsid11556869\rsid11603778\rsid11611650\rsid11680637\rsid11738431\rsid11740698\rsid12018813\rsid12601025\rsid12609733 \rsid12859122\rsid13127900\rsid13922005\rsid14054378\rsid14360527\rsid14640974\rsid14683935\rsid14880278\rsid15615793\rsid16205939\rsid16602033\rsid16604065\rsid16658837\rsid16661396}{\mmathPr\mmathFont34\mbrkBin0\mbrkBinSub0\msmallFrac0\mdispDef1 \mlMargin0\mrMargin0\mdefJc1\mwrapIndent1440\mintLim0\mnaryLim1}{\info{\author Jan Z\'e1ruba}{\operator Honza}{\creatim\yr2009\mo1\dy20\hr23\min51}{\revtim\yr2009\mo1\dy24\hr14\min39}{\version15}{\edmins42}{\nofpages1}{\nofwords331}{\nofchars1954} {\*\company }{\nofcharsws2281}{\vern32895}}{\*\xmlnstbl {\xmlns1 http://schemas.microsoft.com/office/word/2003/wordml}}\paperw11906\paperh16838\margl1417\margr1417\margt1417\margb1417\gutter0\ltrsect \deftab708\widowctrl\ftnbj\aenddoc\hyphhotz425\trackmoves1\trackformatting1\donotembedsysfont1\relyonvml0\donotembedlingdata0\grfdocevents0\validatexml1\showplaceholdtext0\ignoremixedcontent0\saveinvalidxml0 \showxmlerrors1\noxlattoyen\expshrtn\noultrlspc\dntblnsbdb\nospaceforul\formshade\horzdoc\dgmargin\dghspace180\dgvspace180\dghorigin1417\dgvorigin1417\dghshow1\dgvshow1 \jexpand\viewkind1\viewscale100\pgbrdrhead\pgbrdrfoot\splytwnine\ftnlytwnine\htmautsp\nolnhtadjtbl\useltbaln\alntblind\lytcalctblwd\lyttblrtgr\lnbrkrule\nobrkwrptbl\snaptogridincell\allowfieldendsel\wrppunct \asianbrkrule\rsidroot5461175\newtblstyruls\nogrowautofit\usenormstyforlist\noindnmbrts\felnbrelev\nocxsptable\indrlsweleven\noafcnsttbl\afelev\utinl\hwelev\spltpgpar\notcvasp\notbrkcnstfrctbl\notvatxbx\krnprsnet\cachedcolbal \nouicompat \fet0 {\*\wgrffmtfilter 2450}\nofeaturethrottle1\ilfomacatclnup0\ltrpar \sectd \ltrsect\linex0\headery708\footery708\colsx708\endnhere\sectlinegrid360\sectdefaultcl\sectrsid2969566\sftnbj {\*\pnseclvl1\pnucrm\pnqc\pnstart1\pnindent720\pnhang {\pntxta .}} {\*\pnseclvl2\pnucltr\pnqc\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl3\pndec\pnqc\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl4\pnlcltr\pnqc\pnstart1\pnindent720\pnhang {\pntxta )}}{\*\pnseclvl5\pndec\pnqc\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnqc\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnqc\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnqc\pnstart1\pnindent720\pnhang {\pntxtb (} {\pntxta )}}{\*\pnseclvl9\pnlcrm\pnqc\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}\pard\plain \ltrpar\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 \fs22\lang1029\langfe2052\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1029\langfenp2052 {\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe2052\langnp1033\insrsid5461175\charrsid13127900 \hich\af39\dbch\af31505\loch\f39 This application was created as part of my Diploma to demonstrate capabilities of Windows Forms Designer integration of Phalanger. The application demonstrates:}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe2052\langnp1033\insrsid2969566\charrsid13127900 \par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f3\fs16\lang1033\langfe2052\langnp1033\langfenp2052\insrsid5461175\charrsid13127900 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}}\pard\plain \ltrpar\s15\ql \fi-360\li720\ri0\sl276\slmult1 \widctlpar\wrapdefault\aspalpha\aspnum\faauto\ls1\adjustright\rin0\lin720\itap0\pararsid16602033\contextualspace \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 \fs22\lang1029\langfe2052\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1029\langfenp2052 {\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe2052\langnp1033\insrsid5461175\charrsid13127900 \hich\af39\dbch\af31505\loch\f39 Form design \par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f3\fs16\lang1033\langfe2052\langnp1033\langfenp2052\insrsid5461175\charrsid13127900 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}\hich\af39\dbch\af31505\loch\f39 User control design \par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f3\fs16\lang1033\langfe2052\langnp1033\langfenp2052\insrsid5461175\charrsid13127900 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}\hich\af39\dbch\af31505\loch\f39 Localization \par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f3\fs16\lang1033\langfe2052\langnp1033\langfenp2052\insrsid5461175\charrsid13127900 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}\hich\af39\dbch\af31505\loch\f39 Limited support for partial classes in Visual Studio \par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f3\fs16\lang1033\langfe2052\langnp1033\langfenp2052\insrsid5461175\charrsid13127900 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}\hich\af39\dbch\af31505\loch\f39 Localization \par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f3\fs16\lang1033\langfe2052\langnp1033\langfenp2052\insrsid5461175\charrsid13127900 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}\hich\af39\dbch\af31505\loch\f39 PHP-to-CodeDOM translator \par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f3\fs16\lang1033\langfe2052\langnp1033\langfenp2052\insrsid8016588\charrsid13127900 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}}\pard \ltrpar\s15\ql \fi-360\li720\ri0\sa200\sl276\slmult1 \widctlpar\wrapdefault\aspalpha\aspnum\faauto\ls1\adjustright\rin0\lin720\itap0\pararsid5461175\contextualspace {\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe2052\langnp1033\insrsid8016588\charrsid13127900 \hich\af39\dbch\af31505\loch\f39 How to write applications in PHP for .NET and Windows Forms}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe2052\langnp1033\insrsid8016588 \par }\pard\plain \ltrpar\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid9853923 \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 \fs22\lang1029\langfe2052\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1029\langfenp2052 {\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe2052\langnp1033\insrsid9853923 \hich\af39\dbch\af31505\loch\f39 Application can be also treated as WinForms Pro\hich\af39\dbch\af31505\loch\f39 graming tutorial for PHP programmers. Just brows files alphabetically and read the comments.}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe2052\langnp1033\insrsid9853923\charrsid9853923 \par }\pard \ltrpar\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid5461175 {\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \b\f39\fs16\lang1033\langfe2052\langnp1033\insrsid5461175\charrsid13127900 \hich\af39\dbch\af31505\loch\f39 Know issues: \par }\pard \ltrpar\ql \fi360\li0\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid1539400 {\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \b\f39\fs16\lang1033\langfe2052\langnp1033\insrsid1539400\charrsid13127900 \hich\af39\dbch\af31505\loch\f39 The application \par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f3\fs16\lang1033\langfe2052\langnp1033\langfenp2052\insrsid5461175\charrsid13127900 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}}\pard\plain \ltrpar\s15\ql \fi-360\li720\ri0\sl276\slmult1 \widctlpar\wrapdefault\aspalpha\aspnum\faauto\ls2\adjustright\rin0\lin720\itap0\pararsid16602033\contextualspace \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 \fs22\lang1029\langfe2052\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1029\langfenp2052 {\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe2052\langnp1033\insrsid5461175\charrsid13127900 \hich\af39\dbch\af31505\loch\f39 In order to run the application, Phalanger must be installed. \par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f3\fs16\lang1033\langfe2052\langnp1033\langfenp2052\insrsid2575936\charrsid13127900 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe2052\langnp1033\insrsid2575936\charrsid13127900 \hich\af39\dbch\af31505\loch\f39 *.\hich\af39\dbch\af31505\loch\f39 reg and binary export reports failure as information, not as error. \par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f3\fs16\lang1033\langfe2052\langnp1033\langfenp2052\insrsid2575936\charrsid13127900 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}\hich\af39\dbch\af31505\loch\f39 The HKEY_DYN_DATA and HKEY_PERFORMANCE_DATA keys don}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe2052\langnp1033\insrsid14880278\charrsid13127900 \hich\af39\dbch\af31505\loch\f39 '}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe2052\langnp1033\insrsid2575936\charrsid13127900 \hich\af39\dbch\af31505\loch\f39 t work. \par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f3\fs16\lang1033\langfe2052\langnp1033\langfenp2052\insrsid8016588\charrsid13127900 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe2052\langnp1033\insrsid8016588\charrsid13127900 \hich\af39\dbch\af31505\loch\f39 There is Export function, but no Import.}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe2052\langnp1033\insrsid8016588 \par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f3\fs16\lang1033\langfe2052\langnp1033\langfenp2052\insrsid4919942 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}}\pard \ltrpar\s15\ql \fi-360\li720\ri0\sa200\sl276\slmult1 \widctlpar\wrapdefault\aspalpha\aspnum\faauto\ls2\adjustright\rin0\lin720\itap0\pararsid4919942\contextualspace {\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe2052\langnp1033\insrsid4919942 \hich\af39\dbch\af31505\loch\f39 On Vista column headers have unexpected icons (it's bug in }{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe2052\langnp1033\insrsid4919942\charrsid4919942 {\field{\*\fldinst SYMBOL 33 \\f "Ligatures 3" \\s 8}{\fldrslt\f38\fs16}}}{ \rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe2052\langnp1033\insrsid4919942 \hich\af39\dbch\af31505\loch\f39 , see }{\field\flddirty{\*\fldinst {\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\insrsid4919942 \hich\af39\dbch\af31505\loch\f39 HYPERLINK "}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\insrsid4919942\charrsid3895175 \hich\af39\dbch\af31505\loch\f39 https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=395739}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\insrsid4919942 \hich\af39\dbch\af31505\loch\f39 " }{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\insrsid2900870 {\*\datafield 00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90bc8000000680074007400700073003a002f002f0063006f006e006e006500630074002e006d006900630072006f0073006f00660074002e0063006f006d002f00560069007300750061006c0053007400750064006900 6f002f0066006500650064006200610063006b002f00560069006500770046006500650064006200610063006b002e0061007300700078003f0046006500650064006200610063006b00490044003d003300390035003700330039000000795881f43b1d7f48af2c825dc485276300000000a5ab000000}}}{\fldrslt { \rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \cs16\f39\fs16\ul\cf17\insrsid4919942\charrsid10109114 \hich\af39\dbch\af31505\loch\f39 https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=395739}}}\sectd \ltrsect \linex0\headery708\footery708\colsx708\endnhere\sectlinegrid360\sectdefaultcl\sectrsid2969566\sftnbj {\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\insrsid4919942 \hich\af39\dbch\af31505\loch\f39 )}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe2052\langnp1033\insrsid4919942\charrsid4919942 \par }\pard\plain \ltrpar\ql \li360\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin360\itap0\pararsid1539400 \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 \fs22\lang1029\langfe2052\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1029\langfenp2052 {\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \b\f39\fs16\lang1033\langfe2052\langnp1033\insrsid1539400\charrsid13127900 \hich\af39\dbch\af31505\loch\f39 Development environment \par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f3\fs16\lang1033\langfe2052\langnp1033\langfenp2052\insrsid5461175\charrsid13127900 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}}\pard\plain \ltrpar\s15\ql \fi-360\li720\ri0\sl276\slmult1 \widctlpar\wrapdefault\aspalpha\aspnum\faauto\ls2\adjustright\rin0\lin720\itap0\pararsid16602033\contextualspace \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 \fs22\lang1029\langfe2052\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1029\langfenp2052 {\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe2052\langnp1033\insrsid5461175\charrsid13127900 \hich\af39\dbch\af31505\loch\f39 In order to show certain forms in designer, application must be first build. \par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f3\fs16\lang1033\langfe2052\langnp1033\langfenp2052\insrsid5461175\charrsid13127900 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}\hich\af39\dbch\af31505\loch\f39 Visual Studio crashes on Sorter PHP \par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f3\fs16\lang1033\langfe2052\langnp1033\langfenp2052\insrsid1539400\charrsid13127900 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe2052\langnp1033\insrsid1539400\charrsid13127900 \hich\af39\dbch\af31505\loch\f39 Phalanger compiler incorrectly creates debugging information for partial classes \hich\f39 \endash \loch\f39 all parts seems for debugger as being compiled from same file. Application project is customized in such way that this file is always t\hich\af39\dbch\af31505\loch\f39 he *.user.php.}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe2052\langnp1033\insrsid13127900\charrsid13127900 \hich\af39\dbch\af31505\loch\f39 *}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe2052\langnp1033\insrsid1539400 \par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f3\fs16\lang1033\langfe2052\langnp1033\langfenp2052\insrsid4664920 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe2052\langnp1033\insrsid4664920 \hich\af39\dbch\af31505\loch\f39 The PictureBox.BeginInit/EndInit is not defined error at forms with PictureBox. It can be safely ignored. \par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f3\fs16\lang1033\langfe2052\langnp1033\langfenp2052\insrsid4919942 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}}\pard \ltrpar\s15\ql \fi-360\li720\ri0\sa200\sl276\slmult1 \widctlpar\wrapdefault\aspalpha\aspnum\faauto\ls2\adjustright\rin0\lin720\itap0\pararsid729657\contextualspace {\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe2052\langnp1033\insrsid4919942 \hich\af39\dbch\af31505\loch\f39 It's required for mt.exe to be in PATH system variable for }{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe2052\langnp1033\insrsid729657 \hich\af39\dbch\af31505\loch\f39 successful build (since 2.0.0.1; Vista manifest is embedded using post \hich\af39\dbch\af31505\loch\f39 build event launching mt.exe; the post build event is written at the end of in *.phpproj file)}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe2052\langnp1033\insrsid4919942 \par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f3\fs16\lang1033\langfe2052\langnp1033\langfenp2052\insrsid2714154 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe2052\langnp1033\insrsid2714154 \hich\af39\dbch\af31505\loch\f39 Regedit.ico must not be read-\hich\af39\dbch\af31505\loch\f39 only to build.}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe2052\langnp1033\insrsid2714154\charrsid13127900 \par }\pard\plain \ltrpar\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid14683935 \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 \fs22\lang1029\langfe2052\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1029\langfenp2052 {\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe2052\langnp1033\insrsid5461175\charrsid13127900 \hich\af39\dbch\af31505\loch\f39 Application was compiled }{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe2052\langnp1033\insrsid14683935 \hich\af39\dbch\af31505\loch\f39 24}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe2052\langnp1033\insrsid5461175\charrsid13127900 \hich\af39\dbch\af31505\loch\f39 January 2009 against and using latest sources of Phalanger.}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe2052\langnp1033\insrsid5461175 \par }\pard \ltrpar\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid5461175 {\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe2052\langnp1033\insrsid10037286 \hich\af39\dbch\af31505\loch\f39 The diploma online: }{\field{\*\fldinst {\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe2052\langnp1033\insrsid10037286 \hich\af39\dbch\af31505\loch\f39 HYPERLINK "https://dip.felk.cvut.cz/browse/details.php?f=F3&d=K13136&y=2009&a=zarubj1&t=dipl" }{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe2052\langnp1033\insrsid2900870 {\*\datafield 00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90bbc000000680074007400700073003a002f002f006400690070002e00660065006c006b002e0063007600750074002e0063007a002f00620072006f007700730065002f00640065007400610069006c0073002e007000 680070003f0066003d0046003300260064003d004b0031003300310033003600260079003d003200300030003900260061003d007a0061007200750062006a003100260074003d006400690070006c000000795881f43b1d7f48af2c825dc485276300000000a5ab000000006d7504}}}{\fldrslt {\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \cs16\f39\fs16\ul\cf17\lang1033\langfe2052\langnp1033\insrsid10037286\charrsid10037286 \hich\af39\dbch\af31505\loch\f39 https:\hich\af39\dbch\af31505\loch\f39 //dip.felk.cvut.cz/browse/details.php?f=F3&d=K13136&y=2009&a=zarubj1&t=dipl}}}\sectd \ltrsect\linex0\headery708\footery708\colsx708\endnhere\sectlinegrid360\sectdefaultcl\sectrsid2969566\sftnbj {\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe2052\langnp1033\insrsid10037286\charrsid13127900 \par }{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe2052\langnp1033\insrsid13127900\charrsid13127900 \hich\af39\dbch\af31505\loch\f39 * This is edit the *.phpproj file to *.user.php file be before corresponding *.php file.}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe2052\langnp1033\insrsid13127900 \par }{\rtlch\fcs1 \ab\af39\afs16 \ltrch\fcs0 \b\f39\fs16\lang1033\langfe2052\langnp1033\insrsid4919942 \hich\af39\dbch\af31505\loch\f39 Version history:}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe2052\langnp1033\insrsid4919942 \par }\pard \ltrpar\ql \fi-851\li851\ri0\sl276\slmult1\widctlpar\tx644\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin851\itap0\pararsid16658837 {\rtlch\fcs1 \ab\af39\afs16 \ltrch\fcs0 \b\f39\fs16\lang1033\langfe2052\langnp1033\insrsid4919942 \hich\af39\dbch\af31505\loch\f39 2.0.0.0}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe2052\langnp1033\insrsid14683935 \tab }{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe2052\langnp1033\insrsid4919942 \loch\af39\dbch\af31505\hich\f39 \endash \loch\f39 First version}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe2052\langnp1033\insrsid14683935 \hich\af39\dbch\af31505\loch\f39 (Jan 20 2009)}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe2052\langnp1033\insrsid4919942\charrsid4919942 \par }{\rtlch\fcs1 \ab\af39\afs16 \ltrch\fcs0 \b\f39\fs16\lang1033\langfe2052\langnp1033\insrsid4919942 \hich\af39\dbch\af31505\loch\f39 2.0.0.1}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe2052\langnp1033\insrsid14683935 \tab \loch\af39\dbch\af31505\hich\f39 \endash \loch\f39 Jan 24 2009 \par \tab }{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe2052\langnp1033\insrsid4919942 \loch\af39\dbch\af31505\hich\f39 \endash \hich\af39\dbch\af31505\loch\f39 Windows Vista support (registry virtualization prevention)}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe2052\langnp1033\insrsid4919942\charrsid4919942 \par }{\*\themedata 504b030414000600080000002100828abc13fa0000001c020000130000005b436f6e74656e745f54797065735d2e786d6cac91cb6ac3301045f785fe83d0b6d8 72ba28a5d8cea249777d2cd20f18e4b12d6a8f843409c9df77ecb850ba082d74231062ce997b55ae8fe3a00e1893f354e9555e6885647de3a8abf4fbee29bbd7 2a3150038327acf409935ed7d757e5ee14302999a654e99e393c18936c8f23a4dc072479697d1c81e51a3b13c07e4087e6b628ee8cf5c4489cf1c4d075f92a0b 44d7a07a83c82f308ac7b0a0f0fbf90c2480980b58abc733615aa2d210c2e02cb04430076a7ee833dfb6ce62e3ed7e14693e8317d8cd0433bf5c60f53fea2fe7 065bd80facb647e9e25c7fc421fd2ddb526b2e9373fed4bb902e182e97b7b461e6bfad3f010000ffff0300504b030414000600080000002100a5d6a7e7c00000 00360100000b0000005f72656c732f2e72656c73848fcf6ac3300c87ef85bd83d17d51d2c31825762fa590432fa37d00e1287f68221bdb1bebdb4fc7060abb08 84a4eff7a93dfeae8bf9e194e720169aaa06c3e2433fcb68e1763dbf7f82c985a4a725085b787086a37bdbb55fbc50d1a33ccd311ba548b63095120f88d94fbc 52ae4264d1c910d24a45db3462247fa791715fd71f989e19e0364cd3f51652d73760ae8fa8c9ffb3c330cc9e4fc17faf2ce545046e37944c69e462a1a82fe353 bd90a865aad41ed0b5b8f9d6fd010000ffff0300504b0304140006000800000021006b799616830000008a0000001c0000007468656d652f7468656d652f7468 656d654d616e616765722e786d6c0ccc4d0ac3201040e17da17790d93763bb284562b2cbaebbf600439c1a41c7a0d29fdbd7e5e38337cedf14d59b4b0d592c9c 070d8a65cd2e88b7f07c2ca71ba8da481cc52c6ce1c715e6e97818c9b48d13df49c873517d23d59085adb5dd20d6b52bd521ef2cdd5eb9246a3d8b4757e8d3f7 29e245eb2b260a0238fd010000ffff0300504b0304140006000800000021000cc90327a8060000611b0000160000007468656d652f7468656d652f7468656d65 312e786d6cec594f6f1c3514bf23f11dacb9b7d94d76d36cd44d95ddec1248d346d96d518fde19ef8c1bcf78647b93ee0db547242444412051094e1c1050a995 b89413e293048aa048fd0a3cdb33b3e3eca449da082ae81e9219fbe7f7ff3d3f7b2e5fb91333b44f84a43c697bf58b350f91c4e7014dc2b67763d8bfb0e221a9 701260c613d2f6a6447a57d6de7eeb325e5511890982f5895cc56d2f522a5d5d58903e0c637991a72481b931173156f02ac28540e003a01bb385c55a6d7921c6 34f150826320bbcd15dd47120753747d3ca63ef1d6720e3d066c1225f580cfc440d327d9b22d9cf884fdfcf52f5f187cb057d72839955d26d03e666d0f1806fc 6048ee280f312c154cb4bd9af9790b6b9717f06ab688a963d696d6f5cd2f5b972d08f6160d4f118e0aa6f57ea37569a3a06f004ccde37abd5eb7572fe81900f6 7dd0d6ca52a6d9e8afd43b39cd12c83eced3eed69ab5868b2fd15f9a93b9d5e9749aad4c164bd480ec63630ebf525b6eac2f3a7803b2f8e61cbed159ef76971d bc0159fcf21cbe7fa9b5dc70f10614319aeccda1b543fbfd8c7a011973b659095f01f84a2d83cf50100d45846916639ea817c55b8c6f73d107900633ac6882d4 342563ec434877713c12146b267895e0d28c1df2e5dc90e687a42f68aadade7b2986f498d17bfee4bbe74f1ea1c3bb8f0feffe7878efdee1dd1f2c2167d5264e c2f2aa67df7cfcd7830fd09f8fbe7a76ffd36abc2ce37ffbfec35f7ffaa41a08293413e7e9670f7f7ffcf0e9e71ffdf1edfd0af8bac0a3327c486322d1357280 76790c8a19abb892939138db8a61846979c57a124a9c60cda5827e4f450efada14b3cc3b8e1c1de25af0a6801252057c6772db1178108989a2159cb7a2d8016e 73ce3a5c545a614bf32a99793849c26ae66252c6ed62bc5fc5bb8b13c7bfbd490af5330f4b47f16e441c3177184e140e494214d2737c8f900aed6e51ead8759b fa824b3e56e816451d4c2b4d32a423279a668b36690c7e9956e90cfe766cb37d137538abd27a83ecbb48c80acc2a841f12e698f11d3c5138ae2239c4312b1bfc 2a5651959083a9f0cbb89e54e0e990308e7a0191b26acd7501fa969cbe85a16a55ba7d9b4d63172914ddaba27915735e466ef0bd6e84e3b40a3ba04954c6be2b f7204431dae1aa0abecddd0cd1efe0079c1cebee9b9438ee3eb91adca0a123d22c40f4cc44685f42b9762a704c9317956346a11edb1838bf720c05f0e9970f2a 22eb752dc4ebb0275565c2e691f27b1cee68d1ed7211d0d7bfe66ee049b24320cce7379e3725f74dc9f5fef325f7b87c3e6da19dd55628bbba6fb08db16993e3 1776c963cad8404d19b92a4da32c61af08fa30a8d79ae322294e4e69048f596d7770a1c0660d125cbd4f553488700a4d76ddd3444299910e254ab984039e19ae a4adf1d0a82b7b3c6cea8383ad0912ab6d1ed8e1253d9c9f0f0a3266c709cd413467b4a4099c96d9d2a58c28a8fd32ccea5aa85373ab1bd14cb973b8152a831f e75583c1c29ad08420685dc0cacb7060d7ace170821909b4ddedfe9bbbc578e13c5d24231c90cc475aef791fd58d93f25831b702103b153ed287bd13ac56e2d6 d2645f81db699c5466d738865deebd57f1521ec1332fe9dc3d928e2c2927274bd041db6b35179b1ef271daf6c670ae85c73805af4bddf76116c24d91af840dfb 1393d964f9cc9bad5c313709ea705d61ed3ea7b053075221d50696910d0d339585004b34272bff6213cc7a5e0ad8487f092996562018fe3529c08eae6bc9784c 7c5576766944dbcebe66a5944f141183283840233611bb18dcaf4315f409a884eb095311f40bdca7696b9b29b738674957bec532383b8e591ae1acdcea14cd33 d9c24d1e173298b79278a05ba5ec46b9b3ab6252fe9c542987f1ff4c15bd9fc06dc152a03de0c3bdaec048e76bdbe342451caa501a51bf2fa07930b503a205ee 64611a820a6e97cd7f41f6f57f9b739686496b38f4a95d1a2241613f5291206407ca9289be1388d5b3bdcb9264192113512571656ac51e917dc286ba062eebbd dd431184baa926591930b8a3f1e7be6719340a759353ce37a786147bafcd817fbaf3b1c90c4ab975d83434b9fd0b112b7655bbde2ccff7deb2227a62d66635f2 ac0066a5ada095a5fd4b8a70c6add656ac398d179bb970e0c5798d61b0688852b8f341fa0fec7f54f8cc7ea5d01bea90ef426d45f0c1411383b081a8be601b0f a40ba41d1c41e364076d306952d6b459eba4ad966fd6e7dce9167c8f185b4b761a7f9fd1d84573e6b27372f13c8d9d59d8b1b51d3bd6d4e0d9a3290a43e3fc30 631c63be7195bf40f1d16d70f406dcf14f98922698e0db92c0d07a0e4c1e40f25b8e66e9dadf000000ffff0300504b0304140006000800000021000dd1909fb6 0000001b010000270000007468656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73848f4d0ac2301484f78277086f6f d3ba109126dd88d0add40384e4350d363f2451eced0dae2c082e8761be9969bb979dc9136332de3168aa1a083ae995719ac16db8ec8e4052164e89d93b64b060 828e6f37ed1567914b284d262452282e3198720e274a939cd08a54f980ae38a38f56e422a3a641c8bbd048f7757da0f19b017cc524bd62107bd5001996509aff b3fd381a89672f1f165dfe514173d9850528a2c6cce0239baa4c04ca5bbabac4df000000ffff0300504b01022d0014000600080000002100828abc13fa000000 1c0200001300000000000000000000000000000000005b436f6e74656e745f54797065735d2e786d6c504b01022d0014000600080000002100a5d6a7e7c00000 00360100000b000000000000000000000000002b0100005f72656c732f2e72656c73504b01022d00140006000800000021006b799616830000008a0000001c00 000000000000000000000000140200007468656d652f7468656d652f7468656d654d616e616765722e786d6c504b01022d00140006000800000021000cc90327 a8060000611b00001600000000000000000000000000d10200007468656d652f7468656d652f7468656d65312e786d6c504b01022d0014000600080000002100 0dd1909fb60000001b0100002700000000000000000000000000ad0900007468656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73504b050600000000050005005d010000a80a00000000} {\*\colorschememapping 3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d22796573223f3e0d0a3c613a636c724d 617020786d6c6e733a613d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f64726177696e676d6c2f323030362f6d6169 6e22206267313d226c743122207478313d22646b3122206267323d226c743222207478323d22646b322220616363656e74313d22616363656e74312220616363 656e74323d22616363656e74322220616363656e74333d22616363656e74332220616363656e74343d22616363656e74342220616363656e74353d22616363656e74352220616363656e74363d22616363656e74362220686c696e6b3d22686c696e6b2220666f6c486c696e6b3d22666f6c486c696e6b222f3e} {\*\latentstyles\lsdstimax267\lsdlockeddef0\lsdsemihiddendef1\lsdunhideuseddef1\lsdqformatdef0\lsdprioritydef99{\lsdlockedexcept \lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority0 \lsdlocked0 Normal; \lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 1;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 2;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 3;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 4; \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 5;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 6;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 7;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 8;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 9; \lsdpriority39 \lsdlocked0 toc 1;\lsdpriority39 \lsdlocked0 toc 2;\lsdpriority39 \lsdlocked0 toc 3;\lsdpriority39 \lsdlocked0 toc 4;\lsdpriority39 \lsdlocked0 toc 5;\lsdpriority39 \lsdlocked0 toc 6;\lsdpriority39 \lsdlocked0 toc 7; \lsdpriority39 \lsdlocked0 toc 8;\lsdpriority39 \lsdlocked0 toc 9;\lsdqformat1 \lsdpriority35 \lsdlocked0 caption;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority10 \lsdlocked0 Title;\lsdpriority1 \lsdlocked0 Default Paragraph Font; \lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority11 \lsdlocked0 Subtitle;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority22 \lsdlocked0 Strong;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority20 \lsdlocked0 Emphasis; \lsdsemihidden0 \lsdunhideused0 \lsdpriority59 \lsdlocked0 Table Grid;\lsdunhideused0 \lsdlocked0 Placeholder Text;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority1 \lsdlocked0 No Spacing; \lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid; \lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1; \lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2; \lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading; \lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 1; \lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 1; \lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 1;\lsdunhideused0 \lsdlocked0 Revision; \lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority34 \lsdlocked0 List Paragraph;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority29 \lsdlocked0 Quote;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority30 \lsdlocked0 Intense Quote; \lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 1; \lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 1; \lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 2; \lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 2; \lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 2; \lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 2; \lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 2; \lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 3; \lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 3; \lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 3; \lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 3; \lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 3; \lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 4; \lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 4; \lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 4; \lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 4; \lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 5; \lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 5; \lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 5; \lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 5; \lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 5; \lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 6; \lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 6; \lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 6; \lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 6; \lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 6; \lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority19 \lsdlocked0 Subtle Emphasis;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority21 \lsdlocked0 Intense Emphasis; \lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority31 \lsdlocked0 Subtle Reference;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority32 \lsdlocked0 Intense Reference; \lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority33 \lsdlocked0 Book Title;\lsdpriority37 \lsdlocked0 Bibliography;\lsdqformat1 \lsdpriority39 \lsdlocked0 TOC Heading;}}{\*\datastore 010500000200000018000000 4d73786d6c322e534158584d4c5265616465722e352e3000000000000000000000060000 d0cf11e0a1b11ae1000000000000000000000000000000003e000300feff090006000000000000000000000001000000010000000000000000100000feffffff00000000feffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffdfffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffff52006f006f007400200045006e00740072007900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000500ffffffffffffffffffffffffec69d9888b8b3d4c859eaf6cd158be0f000000000000000000000000e043 b630297ec901feffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000105000000000000}} ================================================ FILE: Samples/RegEditPHP/RegEditPHP.sln ================================================  Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 Project("{7FB7D0AD-ABC6-4BF8-BB4D-B2C68B00F984}") = "RegEditPHP", "RegEditPHP\RegEditPHP.phpproj", "{D5A73F0B-7DEA-4F46-879C-14913395DB11}" EndProject Global GlobalSection(TeamFoundationVersionControl) = preSolution SccNumberOfProjects = 2 SccEnterpriseProvider = {4CA58AB2-18FA-4F8D-95D4-32DDF27D184C} SccTeamFoundationServer = https://team.corp.devsense.com:8443/tfs/projects SccLocalPath0 = . SccProjectUniqueName1 = RegEditPHP\\RegEditPHP.phpproj SccProjectName1 = RegEditPHP SccLocalPath1 = RegEditPHP EndGlobalSection GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {D5A73F0B-7DEA-4F46-879C-14913395DB11}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D5A73F0B-7DEA-4F46-879C-14913395DB11}.Debug|Any CPU.Build.0 = Debug|Any CPU {D5A73F0B-7DEA-4F46-879C-14913395DB11}.Release|Any CPU.ActiveCfg = Release|Any CPU {D5A73F0B-7DEA-4F46-879C-14913395DB11}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal ================================================ FILE: Samples/RegEditPHP/RegEditPHP.vssscc ================================================ "" { "FILE_VERSION" = "9237" "ENLISTMENT_CHOICE" = "NEVER" "PROJECT_FILE_RELATIVE_PATH" = "" "NUMBER_OF_EXCLUDED_FILES" = "0" "ORIGINAL_PROJECT_FILE_PATH" = "" "NUMBER_OF_NESTED_PROJECTS" = "0" "SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROJECT" } ================================================ FILE: Solutions/Phalanger.cmd ================================================ ..\Tools\Elevate cmd /C "start %~dp0\Phalanger.sln" ================================================ FILE: Solutions/Phalanger.sln ================================================ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 14 VisualStudioVersion = 14.0.24720.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Extensions", "Extensions", "{BBF40DB7-2CCE-4E82-98C9-F506E356CC08}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Applications", "Applications", "{64A5B5CA-E0A5-4816-96EE-D574E4189E83}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Core", "..\Source\Core\Core.csproj", "{9A2867A2-981C-4B5A-A1C5-EACCC80B5148}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ClassLibrary", "..\Source\ClassLibrary\ClassLibrary.csproj", "{D515E8F4-357C-4CAF-87C1-97D64C5F865A}" ProjectSection(ProjectDependencies) = postProject {9A2867A2-981C-4B5A-A1C5-EACCC80B5148} = {9A2867A2-981C-4B5A-A1C5-EACCC80B5148} EndProjectSection EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "phpc", "..\Source\PhpNetCompiler\phpc.csproj", "{79B2B824-23B8-45C3-ADE4-5BC8D593FC3F}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Extension.MsSql", "..\Source\Extensions\MSSql\Extension.MsSql.csproj", "{2153C1DA-B1C5-4B6F-B6D9-272D6099FFC6}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MkDynamic", "..\Source\MkDynamic\MkDynamic.csproj", "{1FBEBAD2-F7C5-4F75-965C-45098F5A0A48}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Extension.XmlDom", "..\Source\Extensions\XmlDom\Extension.XmlDom.csproj", "{CCF4F53B-E0EF-47E5-A82B-B52EC6C521D4}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Phalanger.CompilerTask", "..\Source\Phalanger.CompilerTask\Phalanger.CompilerTask.csproj", "{68B54816-884B-48A1-949C-DBBDE2A5C412}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Extension.PDO", "..\Source\Extensions\PDO\Extension.PDO.csproj", "{A3D74786-1B4A-4967-853E-C98D74E6990B}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Extension.PDOSQLite", "..\Source\Extensions\PDOSQLite\Extension.PDOSQLite.csproj", "{E736D942-D76C-46B6-B7F1-82E3068D46A8}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Extension.SQLite", "..\Source\Extensions\SQLite\Extension.SQLite.csproj", "{B7E4DD8D-A51F-42E5-8964-0774CDAE0F3F}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Extension.Zip", "..\Source\Extensions\Zip\Extension.Zip.csproj", "{EC3E5E89-7125-448F-BCBA-5F1FF8474B60}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Extension.PDOSQLServer", "..\Source\Extensions\PDOSQLServer\Extension.PDOSQLServer.csproj", "{7445CDB5-09EE-4884-B606-B1D870E03B3B}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Extension.Curl", "..\Source\Extensions\Curl\Extension.Curl.csproj", "{BF2CCCE1-AD1F-4765-A556-35E454C7C861}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Extension.Gd2", "..\Source\Extensions\Gd2\Extension.Gd2.csproj", "{1E43FFF4-D113-4CE7-90C1-0CB39E068194}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Extension.iconv", "..\Source\Extensions\iconv\Extension.iconv.csproj", "{5E1DFCA3-11ED-491D-8EC0-7923ECC9CC03}" ProjectSection(ProjectDependencies) = postProject {533EA853-45F3-483D-8C89-CF686249CC5E} = {533EA853-45F3-483D-8C89-CF686249CC5E} EndProjectSection EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Extension.mbstring", "..\Source\Extensions\mbstring\Extension.mbstring.csproj", "{533EA853-45F3-483D-8C89-CF686249CC5E}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Extension.Soap", "..\Source\Extensions\Soap\Extension.Soap.csproj", "{44AA3DCA-F38D-4E09-97AF-A0BE74820CFD}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Extension.Xml", "..\Source\Extensions\Xml\Extension.Xml.csproj", "{8145F722-1B6C-4162-92DC-824DFDC3ED6A}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Extension.Zlib", "..\Source\Extensions\Zlib\Extension.Zlib.csproj", "{630C04B5-0B38-4883-981E-2F094982D49D}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Core.CodeDom", "..\Source\Core.CodeDom\Core.CodeDom.csproj", "{5BCE0C1A-03EA-4942-9198-D8FB9F1F69B1}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Core.Parsers", "..\Source\Core.Parsers\Core.Parsers.csproj", "{581F1486-5062-459E-BAE6-A41886584F81}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Core.DuckTyping", "..\Source\Core.DuckTyping\Core.DuckTyping.csproj", "{BFDBBA9E-D6BF-4BA0-88BC-B3853A4D6808}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{2FC1ABC3-5452-411E-8C09-FAABCE16A469}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Core.Parsers.Tests", "..\Source\Core.Parsers.Tests\Core.Parsers.Tests.csproj", "{B7676837-C805-4898-AE2A-BF00C2AC9C51}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Core.Tests", "..\Source\Core.Tests\Core.Tests.csproj", "{2BC9950D-CD28-4A47-A405-0AE639A76384}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ClassLibrary.Tests", "..\Source\ClassLibrary.Tests\ClassLibrary.Tests.csproj", "{D2388680-0C99-467F-9C17-68E1E6E4F1C0}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Extension.GetText", "..\Source\Extensions\GetText\Extension.GetText.csproj", "{16622C0F-AC63-4DB3-A9D6-D85195BE8C3D}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Debug|Mixed Platforms = Debug|Mixed Platforms Debug|Win32 = Debug|Win32 DebugNoGac|Any CPU = DebugNoGac|Any CPU DebugNoGac|Mixed Platforms = DebugNoGac|Mixed Platforms DebugNoGac|Win32 = DebugNoGac|Win32 Release|Any CPU = Release|Any CPU Release|Mixed Platforms = Release|Mixed Platforms Release|Win32 = Release|Win32 ReleaseGAC|Any CPU = ReleaseGAC|Any CPU ReleaseGAC|Mixed Platforms = ReleaseGAC|Mixed Platforms ReleaseGAC|Win32 = ReleaseGAC|Win32 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {9A2867A2-981C-4B5A-A1C5-EACCC80B5148}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {9A2867A2-981C-4B5A-A1C5-EACCC80B5148}.Debug|Any CPU.Build.0 = Debug|Any CPU {9A2867A2-981C-4B5A-A1C5-EACCC80B5148}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {9A2867A2-981C-4B5A-A1C5-EACCC80B5148}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU {9A2867A2-981C-4B5A-A1C5-EACCC80B5148}.Debug|Win32.ActiveCfg = Debug|Any CPU {9A2867A2-981C-4B5A-A1C5-EACCC80B5148}.DebugNoGac|Any CPU.ActiveCfg = Debug|Any CPU {9A2867A2-981C-4B5A-A1C5-EACCC80B5148}.DebugNoGac|Any CPU.Build.0 = Debug|Any CPU {9A2867A2-981C-4B5A-A1C5-EACCC80B5148}.DebugNoGac|Mixed Platforms.ActiveCfg = Debug|Any CPU {9A2867A2-981C-4B5A-A1C5-EACCC80B5148}.DebugNoGac|Mixed Platforms.Build.0 = Debug|Any CPU {9A2867A2-981C-4B5A-A1C5-EACCC80B5148}.DebugNoGac|Win32.ActiveCfg = Debug|Any CPU {9A2867A2-981C-4B5A-A1C5-EACCC80B5148}.Release|Any CPU.ActiveCfg = Release|Any CPU {9A2867A2-981C-4B5A-A1C5-EACCC80B5148}.Release|Any CPU.Build.0 = Release|Any CPU {9A2867A2-981C-4B5A-A1C5-EACCC80B5148}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {9A2867A2-981C-4B5A-A1C5-EACCC80B5148}.Release|Mixed Platforms.Build.0 = Release|Any CPU {9A2867A2-981C-4B5A-A1C5-EACCC80B5148}.Release|Win32.ActiveCfg = Release|Any CPU {9A2867A2-981C-4B5A-A1C5-EACCC80B5148}.ReleaseGAC|Any CPU.ActiveCfg = ReleaseGAC|Any CPU {9A2867A2-981C-4B5A-A1C5-EACCC80B5148}.ReleaseGAC|Any CPU.Build.0 = ReleaseGAC|Any CPU {9A2867A2-981C-4B5A-A1C5-EACCC80B5148}.ReleaseGAC|Mixed Platforms.ActiveCfg = ReleaseGAC|Any CPU {9A2867A2-981C-4B5A-A1C5-EACCC80B5148}.ReleaseGAC|Mixed Platforms.Build.0 = ReleaseGAC|Any CPU {9A2867A2-981C-4B5A-A1C5-EACCC80B5148}.ReleaseGAC|Win32.ActiveCfg = ReleaseGAC|Any CPU {9A2867A2-981C-4B5A-A1C5-EACCC80B5148}.ReleaseGAC|Win32.Build.0 = ReleaseGAC|Any CPU {D515E8F4-357C-4CAF-87C1-97D64C5F865A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D515E8F4-357C-4CAF-87C1-97D64C5F865A}.Debug|Any CPU.Build.0 = Debug|Any CPU {D515E8F4-357C-4CAF-87C1-97D64C5F865A}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {D515E8F4-357C-4CAF-87C1-97D64C5F865A}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU {D515E8F4-357C-4CAF-87C1-97D64C5F865A}.Debug|Win32.ActiveCfg = Debug|Any CPU {D515E8F4-357C-4CAF-87C1-97D64C5F865A}.DebugNoGac|Any CPU.ActiveCfg = Debug|Any CPU {D515E8F4-357C-4CAF-87C1-97D64C5F865A}.DebugNoGac|Any CPU.Build.0 = Debug|Any CPU {D515E8F4-357C-4CAF-87C1-97D64C5F865A}.DebugNoGac|Mixed Platforms.ActiveCfg = Debug|Any CPU {D515E8F4-357C-4CAF-87C1-97D64C5F865A}.DebugNoGac|Mixed Platforms.Build.0 = Debug|Any CPU {D515E8F4-357C-4CAF-87C1-97D64C5F865A}.DebugNoGac|Win32.ActiveCfg = Debug|Any CPU {D515E8F4-357C-4CAF-87C1-97D64C5F865A}.Release|Any CPU.ActiveCfg = Release|Any CPU {D515E8F4-357C-4CAF-87C1-97D64C5F865A}.Release|Any CPU.Build.0 = Release|Any CPU {D515E8F4-357C-4CAF-87C1-97D64C5F865A}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {D515E8F4-357C-4CAF-87C1-97D64C5F865A}.Release|Mixed Platforms.Build.0 = Release|Any CPU {D515E8F4-357C-4CAF-87C1-97D64C5F865A}.Release|Win32.ActiveCfg = Release|Any CPU {D515E8F4-357C-4CAF-87C1-97D64C5F865A}.ReleaseGAC|Any CPU.ActiveCfg = ReleaseGAC|Any CPU {D515E8F4-357C-4CAF-87C1-97D64C5F865A}.ReleaseGAC|Any CPU.Build.0 = ReleaseGAC|Any CPU {D515E8F4-357C-4CAF-87C1-97D64C5F865A}.ReleaseGAC|Mixed Platforms.ActiveCfg = ReleaseGAC|Any CPU {D515E8F4-357C-4CAF-87C1-97D64C5F865A}.ReleaseGAC|Mixed Platforms.Build.0 = ReleaseGAC|Any CPU {D515E8F4-357C-4CAF-87C1-97D64C5F865A}.ReleaseGAC|Win32.ActiveCfg = ReleaseGAC|Any CPU {D515E8F4-357C-4CAF-87C1-97D64C5F865A}.ReleaseGAC|Win32.Build.0 = ReleaseGAC|Any CPU {79B2B824-23B8-45C3-ADE4-5BC8D593FC3F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {79B2B824-23B8-45C3-ADE4-5BC8D593FC3F}.Debug|Any CPU.Build.0 = Debug|Any CPU {79B2B824-23B8-45C3-ADE4-5BC8D593FC3F}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {79B2B824-23B8-45C3-ADE4-5BC8D593FC3F}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU {79B2B824-23B8-45C3-ADE4-5BC8D593FC3F}.Debug|Win32.ActiveCfg = Debug|Any CPU {79B2B824-23B8-45C3-ADE4-5BC8D593FC3F}.DebugNoGac|Any CPU.ActiveCfg = Debug|Any CPU {79B2B824-23B8-45C3-ADE4-5BC8D593FC3F}.DebugNoGac|Any CPU.Build.0 = Debug|Any CPU {79B2B824-23B8-45C3-ADE4-5BC8D593FC3F}.DebugNoGac|Mixed Platforms.ActiveCfg = Debug|Any CPU {79B2B824-23B8-45C3-ADE4-5BC8D593FC3F}.DebugNoGac|Mixed Platforms.Build.0 = Debug|Any CPU {79B2B824-23B8-45C3-ADE4-5BC8D593FC3F}.DebugNoGac|Win32.ActiveCfg = Debug|Any CPU {79B2B824-23B8-45C3-ADE4-5BC8D593FC3F}.Release|Any CPU.ActiveCfg = Release|Any CPU {79B2B824-23B8-45C3-ADE4-5BC8D593FC3F}.Release|Any CPU.Build.0 = Release|Any CPU {79B2B824-23B8-45C3-ADE4-5BC8D593FC3F}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {79B2B824-23B8-45C3-ADE4-5BC8D593FC3F}.Release|Mixed Platforms.Build.0 = Release|Any CPU {79B2B824-23B8-45C3-ADE4-5BC8D593FC3F}.Release|Win32.ActiveCfg = Release|Any CPU {79B2B824-23B8-45C3-ADE4-5BC8D593FC3F}.ReleaseGAC|Any CPU.ActiveCfg = ReleaseGAC|Any CPU {79B2B824-23B8-45C3-ADE4-5BC8D593FC3F}.ReleaseGAC|Any CPU.Build.0 = ReleaseGAC|Any CPU {79B2B824-23B8-45C3-ADE4-5BC8D593FC3F}.ReleaseGAC|Mixed Platforms.ActiveCfg = ReleaseGAC|Any CPU {79B2B824-23B8-45C3-ADE4-5BC8D593FC3F}.ReleaseGAC|Mixed Platforms.Build.0 = ReleaseGAC|Any CPU {79B2B824-23B8-45C3-ADE4-5BC8D593FC3F}.ReleaseGAC|Win32.ActiveCfg = ReleaseGAC|Any CPU {79B2B824-23B8-45C3-ADE4-5BC8D593FC3F}.ReleaseGAC|Win32.Build.0 = ReleaseGAC|Any CPU {2153C1DA-B1C5-4B6F-B6D9-272D6099FFC6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {2153C1DA-B1C5-4B6F-B6D9-272D6099FFC6}.Debug|Any CPU.Build.0 = Debug|Any CPU {2153C1DA-B1C5-4B6F-B6D9-272D6099FFC6}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {2153C1DA-B1C5-4B6F-B6D9-272D6099FFC6}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU {2153C1DA-B1C5-4B6F-B6D9-272D6099FFC6}.Debug|Win32.ActiveCfg = Debug|Any CPU {2153C1DA-B1C5-4B6F-B6D9-272D6099FFC6}.DebugNoGac|Any CPU.ActiveCfg = Debug|Any CPU {2153C1DA-B1C5-4B6F-B6D9-272D6099FFC6}.DebugNoGac|Any CPU.Build.0 = Debug|Any CPU {2153C1DA-B1C5-4B6F-B6D9-272D6099FFC6}.DebugNoGac|Mixed Platforms.ActiveCfg = Debug|Any CPU {2153C1DA-B1C5-4B6F-B6D9-272D6099FFC6}.DebugNoGac|Mixed Platforms.Build.0 = Debug|Any CPU {2153C1DA-B1C5-4B6F-B6D9-272D6099FFC6}.DebugNoGac|Win32.ActiveCfg = Debug|Any CPU {2153C1DA-B1C5-4B6F-B6D9-272D6099FFC6}.Release|Any CPU.ActiveCfg = Release|Any CPU {2153C1DA-B1C5-4B6F-B6D9-272D6099FFC6}.Release|Any CPU.Build.0 = Release|Any CPU {2153C1DA-B1C5-4B6F-B6D9-272D6099FFC6}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {2153C1DA-B1C5-4B6F-B6D9-272D6099FFC6}.Release|Mixed Platforms.Build.0 = Release|Any CPU {2153C1DA-B1C5-4B6F-B6D9-272D6099FFC6}.Release|Win32.ActiveCfg = Release|Any CPU {2153C1DA-B1C5-4B6F-B6D9-272D6099FFC6}.ReleaseGAC|Any CPU.ActiveCfg = ReleaseGAC|Any CPU {2153C1DA-B1C5-4B6F-B6D9-272D6099FFC6}.ReleaseGAC|Any CPU.Build.0 = ReleaseGAC|Any CPU {2153C1DA-B1C5-4B6F-B6D9-272D6099FFC6}.ReleaseGAC|Mixed Platforms.ActiveCfg = ReleaseGAC|Any CPU {2153C1DA-B1C5-4B6F-B6D9-272D6099FFC6}.ReleaseGAC|Mixed Platforms.Build.0 = ReleaseGAC|Any CPU {2153C1DA-B1C5-4B6F-B6D9-272D6099FFC6}.ReleaseGAC|Win32.ActiveCfg = ReleaseGAC|Any CPU {2153C1DA-B1C5-4B6F-B6D9-272D6099FFC6}.ReleaseGAC|Win32.Build.0 = ReleaseGAC|Any CPU {1FBEBAD2-F7C5-4F75-965C-45098F5A0A48}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1FBEBAD2-F7C5-4F75-965C-45098F5A0A48}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {1FBEBAD2-F7C5-4F75-965C-45098F5A0A48}.Debug|Win32.ActiveCfg = Debug|Any CPU {1FBEBAD2-F7C5-4F75-965C-45098F5A0A48}.DebugNoGac|Any CPU.ActiveCfg = Debug|Any CPU {1FBEBAD2-F7C5-4F75-965C-45098F5A0A48}.DebugNoGac|Any CPU.Build.0 = Debug|Any CPU {1FBEBAD2-F7C5-4F75-965C-45098F5A0A48}.DebugNoGac|Mixed Platforms.ActiveCfg = Debug|Any CPU {1FBEBAD2-F7C5-4F75-965C-45098F5A0A48}.DebugNoGac|Mixed Platforms.Build.0 = Debug|Any CPU {1FBEBAD2-F7C5-4F75-965C-45098F5A0A48}.DebugNoGac|Win32.ActiveCfg = Debug|Any CPU {1FBEBAD2-F7C5-4F75-965C-45098F5A0A48}.Release|Any CPU.ActiveCfg = Release|Any CPU {1FBEBAD2-F7C5-4F75-965C-45098F5A0A48}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {1FBEBAD2-F7C5-4F75-965C-45098F5A0A48}.Release|Mixed Platforms.Build.0 = Release|Any CPU {1FBEBAD2-F7C5-4F75-965C-45098F5A0A48}.Release|Win32.ActiveCfg = Release|Any CPU {1FBEBAD2-F7C5-4F75-965C-45098F5A0A48}.ReleaseGAC|Any CPU.ActiveCfg = Release|Any CPU {1FBEBAD2-F7C5-4F75-965C-45098F5A0A48}.ReleaseGAC|Any CPU.Build.0 = Release|Any CPU {1FBEBAD2-F7C5-4F75-965C-45098F5A0A48}.ReleaseGAC|Mixed Platforms.ActiveCfg = Release|Any CPU {1FBEBAD2-F7C5-4F75-965C-45098F5A0A48}.ReleaseGAC|Mixed Platforms.Build.0 = Release|Any CPU {1FBEBAD2-F7C5-4F75-965C-45098F5A0A48}.ReleaseGAC|Win32.ActiveCfg = Release|Any CPU {1FBEBAD2-F7C5-4F75-965C-45098F5A0A48}.ReleaseGAC|Win32.Build.0 = Release|Any CPU {CCF4F53B-E0EF-47E5-A82B-B52EC6C521D4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {CCF4F53B-E0EF-47E5-A82B-B52EC6C521D4}.Debug|Any CPU.Build.0 = Debug|Any CPU {CCF4F53B-E0EF-47E5-A82B-B52EC6C521D4}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {CCF4F53B-E0EF-47E5-A82B-B52EC6C521D4}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU {CCF4F53B-E0EF-47E5-A82B-B52EC6C521D4}.Debug|Win32.ActiveCfg = Debug|Any CPU {CCF4F53B-E0EF-47E5-A82B-B52EC6C521D4}.DebugNoGac|Any CPU.ActiveCfg = Debug|Any CPU {CCF4F53B-E0EF-47E5-A82B-B52EC6C521D4}.DebugNoGac|Any CPU.Build.0 = Debug|Any CPU {CCF4F53B-E0EF-47E5-A82B-B52EC6C521D4}.DebugNoGac|Mixed Platforms.ActiveCfg = Debug|Any CPU {CCF4F53B-E0EF-47E5-A82B-B52EC6C521D4}.DebugNoGac|Mixed Platforms.Build.0 = Debug|Any CPU {CCF4F53B-E0EF-47E5-A82B-B52EC6C521D4}.DebugNoGac|Win32.ActiveCfg = Debug|Any CPU {CCF4F53B-E0EF-47E5-A82B-B52EC6C521D4}.Release|Any CPU.ActiveCfg = Release|Any CPU {CCF4F53B-E0EF-47E5-A82B-B52EC6C521D4}.Release|Any CPU.Build.0 = Release|Any CPU {CCF4F53B-E0EF-47E5-A82B-B52EC6C521D4}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {CCF4F53B-E0EF-47E5-A82B-B52EC6C521D4}.Release|Mixed Platforms.Build.0 = Release|Any CPU {CCF4F53B-E0EF-47E5-A82B-B52EC6C521D4}.Release|Win32.ActiveCfg = Release|Any CPU {CCF4F53B-E0EF-47E5-A82B-B52EC6C521D4}.ReleaseGAC|Any CPU.ActiveCfg = ReleaseGAC|Any CPU {CCF4F53B-E0EF-47E5-A82B-B52EC6C521D4}.ReleaseGAC|Any CPU.Build.0 = ReleaseGAC|Any CPU {CCF4F53B-E0EF-47E5-A82B-B52EC6C521D4}.ReleaseGAC|Mixed Platforms.ActiveCfg = ReleaseGAC|Any CPU {CCF4F53B-E0EF-47E5-A82B-B52EC6C521D4}.ReleaseGAC|Mixed Platforms.Build.0 = ReleaseGAC|Any CPU {CCF4F53B-E0EF-47E5-A82B-B52EC6C521D4}.ReleaseGAC|Win32.ActiveCfg = ReleaseGAC|Any CPU {CCF4F53B-E0EF-47E5-A82B-B52EC6C521D4}.ReleaseGAC|Win32.Build.0 = ReleaseGAC|Any CPU {68B54816-884B-48A1-949C-DBBDE2A5C412}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {68B54816-884B-48A1-949C-DBBDE2A5C412}.Debug|Any CPU.Build.0 = Debug|Any CPU {68B54816-884B-48A1-949C-DBBDE2A5C412}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {68B54816-884B-48A1-949C-DBBDE2A5C412}.Debug|Win32.ActiveCfg = Debug|Any CPU {68B54816-884B-48A1-949C-DBBDE2A5C412}.DebugNoGac|Any CPU.ActiveCfg = Debug|Any CPU {68B54816-884B-48A1-949C-DBBDE2A5C412}.DebugNoGac|Any CPU.Build.0 = Debug|Any CPU {68B54816-884B-48A1-949C-DBBDE2A5C412}.DebugNoGac|Mixed Platforms.ActiveCfg = Debug|Any CPU {68B54816-884B-48A1-949C-DBBDE2A5C412}.DebugNoGac|Mixed Platforms.Build.0 = Debug|Any CPU {68B54816-884B-48A1-949C-DBBDE2A5C412}.DebugNoGac|Win32.ActiveCfg = Debug|Any CPU {68B54816-884B-48A1-949C-DBBDE2A5C412}.Release|Any CPU.ActiveCfg = Release|Any CPU {68B54816-884B-48A1-949C-DBBDE2A5C412}.Release|Any CPU.Build.0 = Release|Any CPU {68B54816-884B-48A1-949C-DBBDE2A5C412}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {68B54816-884B-48A1-949C-DBBDE2A5C412}.Release|Mixed Platforms.Build.0 = Release|Any CPU {68B54816-884B-48A1-949C-DBBDE2A5C412}.Release|Win32.ActiveCfg = Release|Any CPU {68B54816-884B-48A1-949C-DBBDE2A5C412}.ReleaseGAC|Any CPU.ActiveCfg = ReleaseGAC|Any CPU {68B54816-884B-48A1-949C-DBBDE2A5C412}.ReleaseGAC|Any CPU.Build.0 = ReleaseGAC|Any CPU {68B54816-884B-48A1-949C-DBBDE2A5C412}.ReleaseGAC|Mixed Platforms.ActiveCfg = ReleaseGAC|Any CPU {68B54816-884B-48A1-949C-DBBDE2A5C412}.ReleaseGAC|Mixed Platforms.Build.0 = ReleaseGAC|Any CPU {68B54816-884B-48A1-949C-DBBDE2A5C412}.ReleaseGAC|Win32.ActiveCfg = ReleaseGAC|Any CPU {68B54816-884B-48A1-949C-DBBDE2A5C412}.ReleaseGAC|Win32.Build.0 = ReleaseGAC|Any CPU {A3D74786-1B4A-4967-853E-C98D74E6990B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {A3D74786-1B4A-4967-853E-C98D74E6990B}.Debug|Any CPU.Build.0 = Debug|Any CPU {A3D74786-1B4A-4967-853E-C98D74E6990B}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {A3D74786-1B4A-4967-853E-C98D74E6990B}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU {A3D74786-1B4A-4967-853E-C98D74E6990B}.Debug|Win32.ActiveCfg = Debug|Any CPU {A3D74786-1B4A-4967-853E-C98D74E6990B}.DebugNoGac|Any CPU.ActiveCfg = Debug|Any CPU {A3D74786-1B4A-4967-853E-C98D74E6990B}.DebugNoGac|Any CPU.Build.0 = Debug|Any CPU {A3D74786-1B4A-4967-853E-C98D74E6990B}.DebugNoGac|Mixed Platforms.ActiveCfg = Debug|Any CPU {A3D74786-1B4A-4967-853E-C98D74E6990B}.DebugNoGac|Mixed Platforms.Build.0 = Debug|Any CPU {A3D74786-1B4A-4967-853E-C98D74E6990B}.DebugNoGac|Win32.ActiveCfg = Debug|Any CPU {A3D74786-1B4A-4967-853E-C98D74E6990B}.Release|Any CPU.ActiveCfg = Release|Any CPU {A3D74786-1B4A-4967-853E-C98D74E6990B}.Release|Any CPU.Build.0 = Release|Any CPU {A3D74786-1B4A-4967-853E-C98D74E6990B}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {A3D74786-1B4A-4967-853E-C98D74E6990B}.Release|Mixed Platforms.Build.0 = Release|Any CPU {A3D74786-1B4A-4967-853E-C98D74E6990B}.Release|Win32.ActiveCfg = Release|Any CPU {A3D74786-1B4A-4967-853E-C98D74E6990B}.ReleaseGAC|Any CPU.ActiveCfg = ReleaseGAC|Any CPU {A3D74786-1B4A-4967-853E-C98D74E6990B}.ReleaseGAC|Any CPU.Build.0 = ReleaseGAC|Any CPU {A3D74786-1B4A-4967-853E-C98D74E6990B}.ReleaseGAC|Mixed Platforms.ActiveCfg = ReleaseGAC|Any CPU {A3D74786-1B4A-4967-853E-C98D74E6990B}.ReleaseGAC|Mixed Platforms.Build.0 = ReleaseGAC|Any CPU {A3D74786-1B4A-4967-853E-C98D74E6990B}.ReleaseGAC|Win32.ActiveCfg = ReleaseGAC|Any CPU {A3D74786-1B4A-4967-853E-C98D74E6990B}.ReleaseGAC|Win32.Build.0 = ReleaseGAC|Any CPU {E736D942-D76C-46B6-B7F1-82E3068D46A8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {E736D942-D76C-46B6-B7F1-82E3068D46A8}.Debug|Any CPU.Build.0 = Debug|Any CPU {E736D942-D76C-46B6-B7F1-82E3068D46A8}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {E736D942-D76C-46B6-B7F1-82E3068D46A8}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU {E736D942-D76C-46B6-B7F1-82E3068D46A8}.Debug|Win32.ActiveCfg = Debug|Any CPU {E736D942-D76C-46B6-B7F1-82E3068D46A8}.DebugNoGac|Any CPU.ActiveCfg = Debug|Any CPU {E736D942-D76C-46B6-B7F1-82E3068D46A8}.DebugNoGac|Any CPU.Build.0 = Debug|Any CPU {E736D942-D76C-46B6-B7F1-82E3068D46A8}.DebugNoGac|Mixed Platforms.ActiveCfg = Debug|Any CPU {E736D942-D76C-46B6-B7F1-82E3068D46A8}.DebugNoGac|Mixed Platforms.Build.0 = Debug|Any CPU {E736D942-D76C-46B6-B7F1-82E3068D46A8}.DebugNoGac|Win32.ActiveCfg = Debug|Any CPU {E736D942-D76C-46B6-B7F1-82E3068D46A8}.Release|Any CPU.ActiveCfg = Release|Any CPU {E736D942-D76C-46B6-B7F1-82E3068D46A8}.Release|Any CPU.Build.0 = Release|Any CPU {E736D942-D76C-46B6-B7F1-82E3068D46A8}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {E736D942-D76C-46B6-B7F1-82E3068D46A8}.Release|Mixed Platforms.Build.0 = Release|Any CPU {E736D942-D76C-46B6-B7F1-82E3068D46A8}.Release|Win32.ActiveCfg = Release|Any CPU {E736D942-D76C-46B6-B7F1-82E3068D46A8}.ReleaseGAC|Any CPU.ActiveCfg = ReleaseGAC|Any CPU {E736D942-D76C-46B6-B7F1-82E3068D46A8}.ReleaseGAC|Any CPU.Build.0 = ReleaseGAC|Any CPU {E736D942-D76C-46B6-B7F1-82E3068D46A8}.ReleaseGAC|Mixed Platforms.ActiveCfg = ReleaseGAC|Any CPU {E736D942-D76C-46B6-B7F1-82E3068D46A8}.ReleaseGAC|Mixed Platforms.Build.0 = ReleaseGAC|Any CPU {E736D942-D76C-46B6-B7F1-82E3068D46A8}.ReleaseGAC|Win32.ActiveCfg = ReleaseGAC|Any CPU {E736D942-D76C-46B6-B7F1-82E3068D46A8}.ReleaseGAC|Win32.Build.0 = ReleaseGAC|Any CPU {B7E4DD8D-A51F-42E5-8964-0774CDAE0F3F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B7E4DD8D-A51F-42E5-8964-0774CDAE0F3F}.Debug|Any CPU.Build.0 = Debug|Any CPU {B7E4DD8D-A51F-42E5-8964-0774CDAE0F3F}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {B7E4DD8D-A51F-42E5-8964-0774CDAE0F3F}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU {B7E4DD8D-A51F-42E5-8964-0774CDAE0F3F}.Debug|Win32.ActiveCfg = Debug|Any CPU {B7E4DD8D-A51F-42E5-8964-0774CDAE0F3F}.DebugNoGac|Any CPU.ActiveCfg = Debug|Any CPU {B7E4DD8D-A51F-42E5-8964-0774CDAE0F3F}.DebugNoGac|Any CPU.Build.0 = Debug|Any CPU {B7E4DD8D-A51F-42E5-8964-0774CDAE0F3F}.DebugNoGac|Mixed Platforms.ActiveCfg = Debug|Any CPU {B7E4DD8D-A51F-42E5-8964-0774CDAE0F3F}.DebugNoGac|Mixed Platforms.Build.0 = Debug|Any CPU {B7E4DD8D-A51F-42E5-8964-0774CDAE0F3F}.DebugNoGac|Win32.ActiveCfg = Debug|Any CPU {B7E4DD8D-A51F-42E5-8964-0774CDAE0F3F}.Release|Any CPU.ActiveCfg = Release|Any CPU {B7E4DD8D-A51F-42E5-8964-0774CDAE0F3F}.Release|Any CPU.Build.0 = Release|Any CPU {B7E4DD8D-A51F-42E5-8964-0774CDAE0F3F}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {B7E4DD8D-A51F-42E5-8964-0774CDAE0F3F}.Release|Mixed Platforms.Build.0 = Release|Any CPU {B7E4DD8D-A51F-42E5-8964-0774CDAE0F3F}.Release|Win32.ActiveCfg = Release|Any CPU {B7E4DD8D-A51F-42E5-8964-0774CDAE0F3F}.ReleaseGAC|Any CPU.ActiveCfg = ReleaseGAC|Any CPU {B7E4DD8D-A51F-42E5-8964-0774CDAE0F3F}.ReleaseGAC|Any CPU.Build.0 = ReleaseGAC|Any CPU {B7E4DD8D-A51F-42E5-8964-0774CDAE0F3F}.ReleaseGAC|Mixed Platforms.ActiveCfg = ReleaseGAC|Any CPU {B7E4DD8D-A51F-42E5-8964-0774CDAE0F3F}.ReleaseGAC|Mixed Platforms.Build.0 = ReleaseGAC|Any CPU {B7E4DD8D-A51F-42E5-8964-0774CDAE0F3F}.ReleaseGAC|Win32.ActiveCfg = ReleaseGAC|Any CPU {B7E4DD8D-A51F-42E5-8964-0774CDAE0F3F}.ReleaseGAC|Win32.Build.0 = ReleaseGAC|Any CPU {EC3E5E89-7125-448F-BCBA-5F1FF8474B60}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {EC3E5E89-7125-448F-BCBA-5F1FF8474B60}.Debug|Any CPU.Build.0 = Debug|Any CPU {EC3E5E89-7125-448F-BCBA-5F1FF8474B60}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {EC3E5E89-7125-448F-BCBA-5F1FF8474B60}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU {EC3E5E89-7125-448F-BCBA-5F1FF8474B60}.Debug|Win32.ActiveCfg = Debug|Any CPU {EC3E5E89-7125-448F-BCBA-5F1FF8474B60}.DebugNoGac|Any CPU.ActiveCfg = Debug|Any CPU {EC3E5E89-7125-448F-BCBA-5F1FF8474B60}.DebugNoGac|Any CPU.Build.0 = Debug|Any CPU {EC3E5E89-7125-448F-BCBA-5F1FF8474B60}.DebugNoGac|Mixed Platforms.ActiveCfg = Debug|Any CPU {EC3E5E89-7125-448F-BCBA-5F1FF8474B60}.DebugNoGac|Mixed Platforms.Build.0 = Debug|Any CPU {EC3E5E89-7125-448F-BCBA-5F1FF8474B60}.DebugNoGac|Win32.ActiveCfg = Debug|Any CPU {EC3E5E89-7125-448F-BCBA-5F1FF8474B60}.Release|Any CPU.ActiveCfg = Release|Any CPU {EC3E5E89-7125-448F-BCBA-5F1FF8474B60}.Release|Any CPU.Build.0 = Release|Any CPU {EC3E5E89-7125-448F-BCBA-5F1FF8474B60}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {EC3E5E89-7125-448F-BCBA-5F1FF8474B60}.Release|Mixed Platforms.Build.0 = Release|Any CPU {EC3E5E89-7125-448F-BCBA-5F1FF8474B60}.Release|Win32.ActiveCfg = Release|Any CPU {EC3E5E89-7125-448F-BCBA-5F1FF8474B60}.ReleaseGAC|Any CPU.ActiveCfg = ReleaseGAC|Any CPU {EC3E5E89-7125-448F-BCBA-5F1FF8474B60}.ReleaseGAC|Any CPU.Build.0 = ReleaseGAC|Any CPU {EC3E5E89-7125-448F-BCBA-5F1FF8474B60}.ReleaseGAC|Mixed Platforms.ActiveCfg = ReleaseGAC|Any CPU {EC3E5E89-7125-448F-BCBA-5F1FF8474B60}.ReleaseGAC|Mixed Platforms.Build.0 = ReleaseGAC|Any CPU {EC3E5E89-7125-448F-BCBA-5F1FF8474B60}.ReleaseGAC|Win32.ActiveCfg = ReleaseGAC|Any CPU {EC3E5E89-7125-448F-BCBA-5F1FF8474B60}.ReleaseGAC|Win32.Build.0 = ReleaseGAC|Any CPU {7445CDB5-09EE-4884-B606-B1D870E03B3B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7445CDB5-09EE-4884-B606-B1D870E03B3B}.Debug|Any CPU.Build.0 = Debug|Any CPU {7445CDB5-09EE-4884-B606-B1D870E03B3B}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {7445CDB5-09EE-4884-B606-B1D870E03B3B}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU {7445CDB5-09EE-4884-B606-B1D870E03B3B}.Debug|Win32.ActiveCfg = Debug|Any CPU {7445CDB5-09EE-4884-B606-B1D870E03B3B}.DebugNoGac|Any CPU.ActiveCfg = Debug|Any CPU {7445CDB5-09EE-4884-B606-B1D870E03B3B}.DebugNoGac|Any CPU.Build.0 = Debug|Any CPU {7445CDB5-09EE-4884-B606-B1D870E03B3B}.DebugNoGac|Mixed Platforms.ActiveCfg = Debug|Any CPU {7445CDB5-09EE-4884-B606-B1D870E03B3B}.DebugNoGac|Mixed Platforms.Build.0 = Debug|Any CPU {7445CDB5-09EE-4884-B606-B1D870E03B3B}.DebugNoGac|Win32.ActiveCfg = Debug|Any CPU {7445CDB5-09EE-4884-B606-B1D870E03B3B}.Release|Any CPU.ActiveCfg = Release|Any CPU {7445CDB5-09EE-4884-B606-B1D870E03B3B}.Release|Any CPU.Build.0 = Release|Any CPU {7445CDB5-09EE-4884-B606-B1D870E03B3B}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {7445CDB5-09EE-4884-B606-B1D870E03B3B}.Release|Mixed Platforms.Build.0 = Release|Any CPU {7445CDB5-09EE-4884-B606-B1D870E03B3B}.Release|Win32.ActiveCfg = Release|Any CPU {7445CDB5-09EE-4884-B606-B1D870E03B3B}.ReleaseGAC|Any CPU.ActiveCfg = ReleaseGAC|Any CPU {7445CDB5-09EE-4884-B606-B1D870E03B3B}.ReleaseGAC|Any CPU.Build.0 = ReleaseGAC|Any CPU {7445CDB5-09EE-4884-B606-B1D870E03B3B}.ReleaseGAC|Mixed Platforms.ActiveCfg = ReleaseGAC|Any CPU {7445CDB5-09EE-4884-B606-B1D870E03B3B}.ReleaseGAC|Mixed Platforms.Build.0 = ReleaseGAC|Any CPU {7445CDB5-09EE-4884-B606-B1D870E03B3B}.ReleaseGAC|Win32.ActiveCfg = ReleaseGAC|Any CPU {7445CDB5-09EE-4884-B606-B1D870E03B3B}.ReleaseGAC|Win32.Build.0 = ReleaseGAC|Any CPU {BF2CCCE1-AD1F-4765-A556-35E454C7C861}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {BF2CCCE1-AD1F-4765-A556-35E454C7C861}.Debug|Any CPU.Build.0 = Debug|Any CPU {BF2CCCE1-AD1F-4765-A556-35E454C7C861}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {BF2CCCE1-AD1F-4765-A556-35E454C7C861}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU {BF2CCCE1-AD1F-4765-A556-35E454C7C861}.Debug|Win32.ActiveCfg = Debug|Any CPU {BF2CCCE1-AD1F-4765-A556-35E454C7C861}.DebugNoGac|Any CPU.ActiveCfg = Debug|Any CPU {BF2CCCE1-AD1F-4765-A556-35E454C7C861}.DebugNoGac|Any CPU.Build.0 = Debug|Any CPU {BF2CCCE1-AD1F-4765-A556-35E454C7C861}.DebugNoGac|Mixed Platforms.ActiveCfg = Debug|Any CPU {BF2CCCE1-AD1F-4765-A556-35E454C7C861}.DebugNoGac|Mixed Platforms.Build.0 = Debug|Any CPU {BF2CCCE1-AD1F-4765-A556-35E454C7C861}.DebugNoGac|Win32.ActiveCfg = Debug|Any CPU {BF2CCCE1-AD1F-4765-A556-35E454C7C861}.Release|Any CPU.ActiveCfg = Release|Any CPU {BF2CCCE1-AD1F-4765-A556-35E454C7C861}.Release|Any CPU.Build.0 = Release|Any CPU {BF2CCCE1-AD1F-4765-A556-35E454C7C861}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {BF2CCCE1-AD1F-4765-A556-35E454C7C861}.Release|Mixed Platforms.Build.0 = Release|Any CPU {BF2CCCE1-AD1F-4765-A556-35E454C7C861}.Release|Win32.ActiveCfg = Release|Any CPU {BF2CCCE1-AD1F-4765-A556-35E454C7C861}.ReleaseGAC|Any CPU.ActiveCfg = ReleaseGAC|Any CPU {BF2CCCE1-AD1F-4765-A556-35E454C7C861}.ReleaseGAC|Any CPU.Build.0 = ReleaseGAC|Any CPU {BF2CCCE1-AD1F-4765-A556-35E454C7C861}.ReleaseGAC|Mixed Platforms.ActiveCfg = ReleaseGAC|Any CPU {BF2CCCE1-AD1F-4765-A556-35E454C7C861}.ReleaseGAC|Mixed Platforms.Build.0 = ReleaseGAC|Any CPU {BF2CCCE1-AD1F-4765-A556-35E454C7C861}.ReleaseGAC|Win32.ActiveCfg = ReleaseGAC|Any CPU {BF2CCCE1-AD1F-4765-A556-35E454C7C861}.ReleaseGAC|Win32.Build.0 = ReleaseGAC|Any CPU {1E43FFF4-D113-4CE7-90C1-0CB39E068194}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1E43FFF4-D113-4CE7-90C1-0CB39E068194}.Debug|Any CPU.Build.0 = Debug|Any CPU {1E43FFF4-D113-4CE7-90C1-0CB39E068194}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {1E43FFF4-D113-4CE7-90C1-0CB39E068194}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU {1E43FFF4-D113-4CE7-90C1-0CB39E068194}.Debug|Win32.ActiveCfg = Debug|Any CPU {1E43FFF4-D113-4CE7-90C1-0CB39E068194}.DebugNoGac|Any CPU.ActiveCfg = Debug|Any CPU {1E43FFF4-D113-4CE7-90C1-0CB39E068194}.DebugNoGac|Any CPU.Build.0 = Debug|Any CPU {1E43FFF4-D113-4CE7-90C1-0CB39E068194}.DebugNoGac|Mixed Platforms.ActiveCfg = Debug|Any CPU {1E43FFF4-D113-4CE7-90C1-0CB39E068194}.DebugNoGac|Mixed Platforms.Build.0 = Debug|Any CPU {1E43FFF4-D113-4CE7-90C1-0CB39E068194}.DebugNoGac|Win32.ActiveCfg = Debug|Any CPU {1E43FFF4-D113-4CE7-90C1-0CB39E068194}.Release|Any CPU.ActiveCfg = Release|Any CPU {1E43FFF4-D113-4CE7-90C1-0CB39E068194}.Release|Any CPU.Build.0 = Release|Any CPU {1E43FFF4-D113-4CE7-90C1-0CB39E068194}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {1E43FFF4-D113-4CE7-90C1-0CB39E068194}.Release|Mixed Platforms.Build.0 = Release|Any CPU {1E43FFF4-D113-4CE7-90C1-0CB39E068194}.Release|Win32.ActiveCfg = Release|Any CPU {1E43FFF4-D113-4CE7-90C1-0CB39E068194}.ReleaseGAC|Any CPU.ActiveCfg = ReleaseGAC|Any CPU {1E43FFF4-D113-4CE7-90C1-0CB39E068194}.ReleaseGAC|Any CPU.Build.0 = ReleaseGAC|Any CPU {1E43FFF4-D113-4CE7-90C1-0CB39E068194}.ReleaseGAC|Mixed Platforms.ActiveCfg = ReleaseGAC|Any CPU {1E43FFF4-D113-4CE7-90C1-0CB39E068194}.ReleaseGAC|Mixed Platforms.Build.0 = ReleaseGAC|Any CPU {1E43FFF4-D113-4CE7-90C1-0CB39E068194}.ReleaseGAC|Win32.ActiveCfg = ReleaseGAC|Any CPU {1E43FFF4-D113-4CE7-90C1-0CB39E068194}.ReleaseGAC|Win32.Build.0 = ReleaseGAC|Any CPU {5E1DFCA3-11ED-491D-8EC0-7923ECC9CC03}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {5E1DFCA3-11ED-491D-8EC0-7923ECC9CC03}.Debug|Any CPU.Build.0 = Debug|Any CPU {5E1DFCA3-11ED-491D-8EC0-7923ECC9CC03}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {5E1DFCA3-11ED-491D-8EC0-7923ECC9CC03}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU {5E1DFCA3-11ED-491D-8EC0-7923ECC9CC03}.Debug|Win32.ActiveCfg = Debug|Any CPU {5E1DFCA3-11ED-491D-8EC0-7923ECC9CC03}.DebugNoGac|Any CPU.ActiveCfg = Debug|Any CPU {5E1DFCA3-11ED-491D-8EC0-7923ECC9CC03}.DebugNoGac|Any CPU.Build.0 = Debug|Any CPU {5E1DFCA3-11ED-491D-8EC0-7923ECC9CC03}.DebugNoGac|Mixed Platforms.ActiveCfg = Debug|Any CPU {5E1DFCA3-11ED-491D-8EC0-7923ECC9CC03}.DebugNoGac|Mixed Platforms.Build.0 = Debug|Any CPU {5E1DFCA3-11ED-491D-8EC0-7923ECC9CC03}.DebugNoGac|Win32.ActiveCfg = Debug|Any CPU {5E1DFCA3-11ED-491D-8EC0-7923ECC9CC03}.Release|Any CPU.ActiveCfg = Release|Any CPU {5E1DFCA3-11ED-491D-8EC0-7923ECC9CC03}.Release|Any CPU.Build.0 = Release|Any CPU {5E1DFCA3-11ED-491D-8EC0-7923ECC9CC03}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {5E1DFCA3-11ED-491D-8EC0-7923ECC9CC03}.Release|Mixed Platforms.Build.0 = Release|Any CPU {5E1DFCA3-11ED-491D-8EC0-7923ECC9CC03}.Release|Win32.ActiveCfg = Release|Any CPU {5E1DFCA3-11ED-491D-8EC0-7923ECC9CC03}.ReleaseGAC|Any CPU.ActiveCfg = ReleaseGAC|Any CPU {5E1DFCA3-11ED-491D-8EC0-7923ECC9CC03}.ReleaseGAC|Any CPU.Build.0 = ReleaseGAC|Any CPU {5E1DFCA3-11ED-491D-8EC0-7923ECC9CC03}.ReleaseGAC|Mixed Platforms.ActiveCfg = ReleaseGAC|Any CPU {5E1DFCA3-11ED-491D-8EC0-7923ECC9CC03}.ReleaseGAC|Mixed Platforms.Build.0 = ReleaseGAC|Any CPU {5E1DFCA3-11ED-491D-8EC0-7923ECC9CC03}.ReleaseGAC|Win32.ActiveCfg = ReleaseGAC|Any CPU {5E1DFCA3-11ED-491D-8EC0-7923ECC9CC03}.ReleaseGAC|Win32.Build.0 = ReleaseGAC|Any CPU {533EA853-45F3-483D-8C89-CF686249CC5E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {533EA853-45F3-483D-8C89-CF686249CC5E}.Debug|Any CPU.Build.0 = Debug|Any CPU {533EA853-45F3-483D-8C89-CF686249CC5E}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {533EA853-45F3-483D-8C89-CF686249CC5E}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU {533EA853-45F3-483D-8C89-CF686249CC5E}.Debug|Win32.ActiveCfg = Debug|Any CPU {533EA853-45F3-483D-8C89-CF686249CC5E}.DebugNoGac|Any CPU.ActiveCfg = Debug|Any CPU {533EA853-45F3-483D-8C89-CF686249CC5E}.DebugNoGac|Any CPU.Build.0 = Debug|Any CPU {533EA853-45F3-483D-8C89-CF686249CC5E}.DebugNoGac|Mixed Platforms.ActiveCfg = Debug|Any CPU {533EA853-45F3-483D-8C89-CF686249CC5E}.DebugNoGac|Mixed Platforms.Build.0 = Debug|Any CPU {533EA853-45F3-483D-8C89-CF686249CC5E}.DebugNoGac|Win32.ActiveCfg = Debug|Any CPU {533EA853-45F3-483D-8C89-CF686249CC5E}.Release|Any CPU.ActiveCfg = Release|Any CPU {533EA853-45F3-483D-8C89-CF686249CC5E}.Release|Any CPU.Build.0 = Release|Any CPU {533EA853-45F3-483D-8C89-CF686249CC5E}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {533EA853-45F3-483D-8C89-CF686249CC5E}.Release|Mixed Platforms.Build.0 = Release|Any CPU {533EA853-45F3-483D-8C89-CF686249CC5E}.Release|Win32.ActiveCfg = Release|Any CPU {533EA853-45F3-483D-8C89-CF686249CC5E}.ReleaseGAC|Any CPU.ActiveCfg = ReleaseGAC|Any CPU {533EA853-45F3-483D-8C89-CF686249CC5E}.ReleaseGAC|Any CPU.Build.0 = ReleaseGAC|Any CPU {533EA853-45F3-483D-8C89-CF686249CC5E}.ReleaseGAC|Mixed Platforms.ActiveCfg = ReleaseGAC|Any CPU {533EA853-45F3-483D-8C89-CF686249CC5E}.ReleaseGAC|Mixed Platforms.Build.0 = ReleaseGAC|Any CPU {533EA853-45F3-483D-8C89-CF686249CC5E}.ReleaseGAC|Win32.ActiveCfg = ReleaseGAC|Any CPU {533EA853-45F3-483D-8C89-CF686249CC5E}.ReleaseGAC|Win32.Build.0 = ReleaseGAC|Any CPU {44AA3DCA-F38D-4E09-97AF-A0BE74820CFD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {44AA3DCA-F38D-4E09-97AF-A0BE74820CFD}.Debug|Any CPU.Build.0 = Debug|Any CPU {44AA3DCA-F38D-4E09-97AF-A0BE74820CFD}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {44AA3DCA-F38D-4E09-97AF-A0BE74820CFD}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU {44AA3DCA-F38D-4E09-97AF-A0BE74820CFD}.Debug|Win32.ActiveCfg = Debug|Any CPU {44AA3DCA-F38D-4E09-97AF-A0BE74820CFD}.DebugNoGac|Any CPU.ActiveCfg = Debug|Any CPU {44AA3DCA-F38D-4E09-97AF-A0BE74820CFD}.DebugNoGac|Any CPU.Build.0 = Debug|Any CPU {44AA3DCA-F38D-4E09-97AF-A0BE74820CFD}.DebugNoGac|Mixed Platforms.ActiveCfg = Debug|Any CPU {44AA3DCA-F38D-4E09-97AF-A0BE74820CFD}.DebugNoGac|Mixed Platforms.Build.0 = Debug|Any CPU {44AA3DCA-F38D-4E09-97AF-A0BE74820CFD}.DebugNoGac|Win32.ActiveCfg = Debug|Any CPU {44AA3DCA-F38D-4E09-97AF-A0BE74820CFD}.Release|Any CPU.ActiveCfg = Release|Any CPU {44AA3DCA-F38D-4E09-97AF-A0BE74820CFD}.Release|Any CPU.Build.0 = Release|Any CPU {44AA3DCA-F38D-4E09-97AF-A0BE74820CFD}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {44AA3DCA-F38D-4E09-97AF-A0BE74820CFD}.Release|Mixed Platforms.Build.0 = Release|Any CPU {44AA3DCA-F38D-4E09-97AF-A0BE74820CFD}.Release|Win32.ActiveCfg = Release|Any CPU {44AA3DCA-F38D-4E09-97AF-A0BE74820CFD}.ReleaseGAC|Any CPU.ActiveCfg = ReleaseGAC|Any CPU {44AA3DCA-F38D-4E09-97AF-A0BE74820CFD}.ReleaseGAC|Any CPU.Build.0 = ReleaseGAC|Any CPU {44AA3DCA-F38D-4E09-97AF-A0BE74820CFD}.ReleaseGAC|Mixed Platforms.ActiveCfg = ReleaseGAC|Any CPU {44AA3DCA-F38D-4E09-97AF-A0BE74820CFD}.ReleaseGAC|Mixed Platforms.Build.0 = ReleaseGAC|Any CPU {44AA3DCA-F38D-4E09-97AF-A0BE74820CFD}.ReleaseGAC|Win32.ActiveCfg = ReleaseGAC|Any CPU {44AA3DCA-F38D-4E09-97AF-A0BE74820CFD}.ReleaseGAC|Win32.Build.0 = ReleaseGAC|Any CPU {8145F722-1B6C-4162-92DC-824DFDC3ED6A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {8145F722-1B6C-4162-92DC-824DFDC3ED6A}.Debug|Any CPU.Build.0 = Debug|Any CPU {8145F722-1B6C-4162-92DC-824DFDC3ED6A}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {8145F722-1B6C-4162-92DC-824DFDC3ED6A}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU {8145F722-1B6C-4162-92DC-824DFDC3ED6A}.Debug|Win32.ActiveCfg = Debug|Any CPU {8145F722-1B6C-4162-92DC-824DFDC3ED6A}.DebugNoGac|Any CPU.ActiveCfg = Debug|Any CPU {8145F722-1B6C-4162-92DC-824DFDC3ED6A}.DebugNoGac|Any CPU.Build.0 = Debug|Any CPU {8145F722-1B6C-4162-92DC-824DFDC3ED6A}.DebugNoGac|Mixed Platforms.ActiveCfg = Debug|Any CPU {8145F722-1B6C-4162-92DC-824DFDC3ED6A}.DebugNoGac|Mixed Platforms.Build.0 = Debug|Any CPU {8145F722-1B6C-4162-92DC-824DFDC3ED6A}.DebugNoGac|Win32.ActiveCfg = Debug|Any CPU {8145F722-1B6C-4162-92DC-824DFDC3ED6A}.Release|Any CPU.ActiveCfg = Release|Any CPU {8145F722-1B6C-4162-92DC-824DFDC3ED6A}.Release|Any CPU.Build.0 = Release|Any CPU {8145F722-1B6C-4162-92DC-824DFDC3ED6A}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {8145F722-1B6C-4162-92DC-824DFDC3ED6A}.Release|Mixed Platforms.Build.0 = Release|Any CPU {8145F722-1B6C-4162-92DC-824DFDC3ED6A}.Release|Win32.ActiveCfg = Release|Any CPU {8145F722-1B6C-4162-92DC-824DFDC3ED6A}.ReleaseGAC|Any CPU.ActiveCfg = ReleaseGAC|Any CPU {8145F722-1B6C-4162-92DC-824DFDC3ED6A}.ReleaseGAC|Any CPU.Build.0 = ReleaseGAC|Any CPU {8145F722-1B6C-4162-92DC-824DFDC3ED6A}.ReleaseGAC|Mixed Platforms.ActiveCfg = ReleaseGAC|Any CPU {8145F722-1B6C-4162-92DC-824DFDC3ED6A}.ReleaseGAC|Mixed Platforms.Build.0 = ReleaseGAC|Any CPU {8145F722-1B6C-4162-92DC-824DFDC3ED6A}.ReleaseGAC|Win32.ActiveCfg = ReleaseGAC|Any CPU {8145F722-1B6C-4162-92DC-824DFDC3ED6A}.ReleaseGAC|Win32.Build.0 = ReleaseGAC|Any CPU {630C04B5-0B38-4883-981E-2F094982D49D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {630C04B5-0B38-4883-981E-2F094982D49D}.Debug|Any CPU.Build.0 = Debug|Any CPU {630C04B5-0B38-4883-981E-2F094982D49D}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {630C04B5-0B38-4883-981E-2F094982D49D}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU {630C04B5-0B38-4883-981E-2F094982D49D}.Debug|Win32.ActiveCfg = Debug|Any CPU {630C04B5-0B38-4883-981E-2F094982D49D}.DebugNoGac|Any CPU.ActiveCfg = Debug|Any CPU {630C04B5-0B38-4883-981E-2F094982D49D}.DebugNoGac|Any CPU.Build.0 = Debug|Any CPU {630C04B5-0B38-4883-981E-2F094982D49D}.DebugNoGac|Mixed Platforms.ActiveCfg = Debug|Any CPU {630C04B5-0B38-4883-981E-2F094982D49D}.DebugNoGac|Mixed Platforms.Build.0 = Debug|Any CPU {630C04B5-0B38-4883-981E-2F094982D49D}.DebugNoGac|Win32.ActiveCfg = Debug|Any CPU {630C04B5-0B38-4883-981E-2F094982D49D}.Release|Any CPU.ActiveCfg = Release|Any CPU {630C04B5-0B38-4883-981E-2F094982D49D}.Release|Any CPU.Build.0 = Release|Any CPU {630C04B5-0B38-4883-981E-2F094982D49D}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {630C04B5-0B38-4883-981E-2F094982D49D}.Release|Mixed Platforms.Build.0 = Release|Any CPU {630C04B5-0B38-4883-981E-2F094982D49D}.Release|Win32.ActiveCfg = Release|Any CPU {630C04B5-0B38-4883-981E-2F094982D49D}.ReleaseGAC|Any CPU.ActiveCfg = ReleaseGAC|Any CPU {630C04B5-0B38-4883-981E-2F094982D49D}.ReleaseGAC|Any CPU.Build.0 = ReleaseGAC|Any CPU {630C04B5-0B38-4883-981E-2F094982D49D}.ReleaseGAC|Mixed Platforms.ActiveCfg = ReleaseGAC|Any CPU {630C04B5-0B38-4883-981E-2F094982D49D}.ReleaseGAC|Mixed Platforms.Build.0 = ReleaseGAC|Any CPU {630C04B5-0B38-4883-981E-2F094982D49D}.ReleaseGAC|Win32.ActiveCfg = ReleaseGAC|Any CPU {630C04B5-0B38-4883-981E-2F094982D49D}.ReleaseGAC|Win32.Build.0 = ReleaseGAC|Any CPU {5BCE0C1A-03EA-4942-9198-D8FB9F1F69B1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {5BCE0C1A-03EA-4942-9198-D8FB9F1F69B1}.Debug|Any CPU.Build.0 = Debug|Any CPU {5BCE0C1A-03EA-4942-9198-D8FB9F1F69B1}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {5BCE0C1A-03EA-4942-9198-D8FB9F1F69B1}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU {5BCE0C1A-03EA-4942-9198-D8FB9F1F69B1}.Debug|Win32.ActiveCfg = Debug|Any CPU {5BCE0C1A-03EA-4942-9198-D8FB9F1F69B1}.DebugNoGac|Any CPU.ActiveCfg = Debug|Any CPU {5BCE0C1A-03EA-4942-9198-D8FB9F1F69B1}.DebugNoGac|Any CPU.Build.0 = Debug|Any CPU {5BCE0C1A-03EA-4942-9198-D8FB9F1F69B1}.DebugNoGac|Mixed Platforms.ActiveCfg = Debug|Any CPU {5BCE0C1A-03EA-4942-9198-D8FB9F1F69B1}.DebugNoGac|Mixed Platforms.Build.0 = Debug|Any CPU {5BCE0C1A-03EA-4942-9198-D8FB9F1F69B1}.DebugNoGac|Win32.ActiveCfg = Debug|Any CPU {5BCE0C1A-03EA-4942-9198-D8FB9F1F69B1}.Release|Any CPU.ActiveCfg = Release|Any CPU {5BCE0C1A-03EA-4942-9198-D8FB9F1F69B1}.Release|Any CPU.Build.0 = Release|Any CPU {5BCE0C1A-03EA-4942-9198-D8FB9F1F69B1}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {5BCE0C1A-03EA-4942-9198-D8FB9F1F69B1}.Release|Mixed Platforms.Build.0 = Release|Any CPU {5BCE0C1A-03EA-4942-9198-D8FB9F1F69B1}.Release|Win32.ActiveCfg = Release|Any CPU {5BCE0C1A-03EA-4942-9198-D8FB9F1F69B1}.ReleaseGAC|Any CPU.ActiveCfg = ReleaseGAC|Any CPU {5BCE0C1A-03EA-4942-9198-D8FB9F1F69B1}.ReleaseGAC|Any CPU.Build.0 = ReleaseGAC|Any CPU {5BCE0C1A-03EA-4942-9198-D8FB9F1F69B1}.ReleaseGAC|Mixed Platforms.ActiveCfg = ReleaseGAC|Any CPU {5BCE0C1A-03EA-4942-9198-D8FB9F1F69B1}.ReleaseGAC|Mixed Platforms.Build.0 = ReleaseGAC|Any CPU {5BCE0C1A-03EA-4942-9198-D8FB9F1F69B1}.ReleaseGAC|Win32.ActiveCfg = ReleaseGAC|Any CPU {5BCE0C1A-03EA-4942-9198-D8FB9F1F69B1}.ReleaseGAC|Win32.Build.0 = ReleaseGAC|Any CPU {581F1486-5062-459E-BAE6-A41886584F81}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {581F1486-5062-459E-BAE6-A41886584F81}.Debug|Any CPU.Build.0 = Debug|Any CPU {581F1486-5062-459E-BAE6-A41886584F81}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {581F1486-5062-459E-BAE6-A41886584F81}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU {581F1486-5062-459E-BAE6-A41886584F81}.Debug|Win32.ActiveCfg = Debug|Any CPU {581F1486-5062-459E-BAE6-A41886584F81}.DebugNoGac|Any CPU.ActiveCfg = Debug|Any CPU {581F1486-5062-459E-BAE6-A41886584F81}.DebugNoGac|Any CPU.Build.0 = Debug|Any CPU {581F1486-5062-459E-BAE6-A41886584F81}.DebugNoGac|Mixed Platforms.ActiveCfg = Debug|Any CPU {581F1486-5062-459E-BAE6-A41886584F81}.DebugNoGac|Mixed Platforms.Build.0 = Debug|Any CPU {581F1486-5062-459E-BAE6-A41886584F81}.DebugNoGac|Win32.ActiveCfg = Debug|Any CPU {581F1486-5062-459E-BAE6-A41886584F81}.Release|Any CPU.ActiveCfg = Release|Any CPU {581F1486-5062-459E-BAE6-A41886584F81}.Release|Any CPU.Build.0 = Release|Any CPU {581F1486-5062-459E-BAE6-A41886584F81}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {581F1486-5062-459E-BAE6-A41886584F81}.Release|Mixed Platforms.Build.0 = Release|Any CPU {581F1486-5062-459E-BAE6-A41886584F81}.Release|Win32.ActiveCfg = Release|Any CPU {581F1486-5062-459E-BAE6-A41886584F81}.ReleaseGAC|Any CPU.ActiveCfg = ReleaseGAC|Any CPU {581F1486-5062-459E-BAE6-A41886584F81}.ReleaseGAC|Any CPU.Build.0 = ReleaseGAC|Any CPU {581F1486-5062-459E-BAE6-A41886584F81}.ReleaseGAC|Mixed Platforms.ActiveCfg = ReleaseGAC|Any CPU {581F1486-5062-459E-BAE6-A41886584F81}.ReleaseGAC|Mixed Platforms.Build.0 = ReleaseGAC|Any CPU {581F1486-5062-459E-BAE6-A41886584F81}.ReleaseGAC|Win32.ActiveCfg = ReleaseGAC|Any CPU {581F1486-5062-459E-BAE6-A41886584F81}.ReleaseGAC|Win32.Build.0 = ReleaseGAC|Any CPU {BFDBBA9E-D6BF-4BA0-88BC-B3853A4D6808}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {BFDBBA9E-D6BF-4BA0-88BC-B3853A4D6808}.Debug|Any CPU.Build.0 = Debug|Any CPU {BFDBBA9E-D6BF-4BA0-88BC-B3853A4D6808}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {BFDBBA9E-D6BF-4BA0-88BC-B3853A4D6808}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU {BFDBBA9E-D6BF-4BA0-88BC-B3853A4D6808}.Debug|Win32.ActiveCfg = Debug|Any CPU {BFDBBA9E-D6BF-4BA0-88BC-B3853A4D6808}.DebugNoGac|Any CPU.ActiveCfg = Debug|Any CPU {BFDBBA9E-D6BF-4BA0-88BC-B3853A4D6808}.DebugNoGac|Any CPU.Build.0 = Debug|Any CPU {BFDBBA9E-D6BF-4BA0-88BC-B3853A4D6808}.DebugNoGac|Mixed Platforms.ActiveCfg = Debug|Any CPU {BFDBBA9E-D6BF-4BA0-88BC-B3853A4D6808}.DebugNoGac|Mixed Platforms.Build.0 = Debug|Any CPU {BFDBBA9E-D6BF-4BA0-88BC-B3853A4D6808}.DebugNoGac|Win32.ActiveCfg = Debug|Any CPU {BFDBBA9E-D6BF-4BA0-88BC-B3853A4D6808}.Release|Any CPU.ActiveCfg = Release|Any CPU {BFDBBA9E-D6BF-4BA0-88BC-B3853A4D6808}.Release|Any CPU.Build.0 = Release|Any CPU {BFDBBA9E-D6BF-4BA0-88BC-B3853A4D6808}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {BFDBBA9E-D6BF-4BA0-88BC-B3853A4D6808}.Release|Mixed Platforms.Build.0 = Release|Any CPU {BFDBBA9E-D6BF-4BA0-88BC-B3853A4D6808}.Release|Win32.ActiveCfg = Release|Any CPU {BFDBBA9E-D6BF-4BA0-88BC-B3853A4D6808}.ReleaseGAC|Any CPU.ActiveCfg = ReleaseGAC|Any CPU {BFDBBA9E-D6BF-4BA0-88BC-B3853A4D6808}.ReleaseGAC|Any CPU.Build.0 = ReleaseGAC|Any CPU {BFDBBA9E-D6BF-4BA0-88BC-B3853A4D6808}.ReleaseGAC|Mixed Platforms.ActiveCfg = ReleaseGAC|Any CPU {BFDBBA9E-D6BF-4BA0-88BC-B3853A4D6808}.ReleaseGAC|Mixed Platforms.Build.0 = ReleaseGAC|Any CPU {BFDBBA9E-D6BF-4BA0-88BC-B3853A4D6808}.ReleaseGAC|Win32.ActiveCfg = ReleaseGAC|Any CPU {BFDBBA9E-D6BF-4BA0-88BC-B3853A4D6808}.ReleaseGAC|Win32.Build.0 = ReleaseGAC|Any CPU {B7676837-C805-4898-AE2A-BF00C2AC9C51}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B7676837-C805-4898-AE2A-BF00C2AC9C51}.Debug|Any CPU.Build.0 = Debug|Any CPU {B7676837-C805-4898-AE2A-BF00C2AC9C51}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {B7676837-C805-4898-AE2A-BF00C2AC9C51}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU {B7676837-C805-4898-AE2A-BF00C2AC9C51}.Debug|Win32.ActiveCfg = Debug|Any CPU {B7676837-C805-4898-AE2A-BF00C2AC9C51}.DebugNoGac|Any CPU.ActiveCfg = Debug|Any CPU {B7676837-C805-4898-AE2A-BF00C2AC9C51}.DebugNoGac|Any CPU.Build.0 = Debug|Any CPU {B7676837-C805-4898-AE2A-BF00C2AC9C51}.DebugNoGac|Mixed Platforms.ActiveCfg = Debug|Any CPU {B7676837-C805-4898-AE2A-BF00C2AC9C51}.DebugNoGac|Mixed Platforms.Build.0 = Debug|Any CPU {B7676837-C805-4898-AE2A-BF00C2AC9C51}.DebugNoGac|Win32.ActiveCfg = Debug|Any CPU {B7676837-C805-4898-AE2A-BF00C2AC9C51}.Release|Any CPU.ActiveCfg = Release|Any CPU {B7676837-C805-4898-AE2A-BF00C2AC9C51}.Release|Any CPU.Build.0 = Release|Any CPU {B7676837-C805-4898-AE2A-BF00C2AC9C51}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {B7676837-C805-4898-AE2A-BF00C2AC9C51}.Release|Win32.ActiveCfg = Release|Any CPU {B7676837-C805-4898-AE2A-BF00C2AC9C51}.ReleaseGAC|Any CPU.ActiveCfg = Release|Any CPU {B7676837-C805-4898-AE2A-BF00C2AC9C51}.ReleaseGAC|Any CPU.Build.0 = Release|Any CPU {B7676837-C805-4898-AE2A-BF00C2AC9C51}.ReleaseGAC|Mixed Platforms.ActiveCfg = Release|Any CPU {B7676837-C805-4898-AE2A-BF00C2AC9C51}.ReleaseGAC|Mixed Platforms.Build.0 = Release|Any CPU {B7676837-C805-4898-AE2A-BF00C2AC9C51}.ReleaseGAC|Win32.ActiveCfg = Release|Any CPU {B7676837-C805-4898-AE2A-BF00C2AC9C51}.ReleaseGAC|Win32.Build.0 = Release|Any CPU {2BC9950D-CD28-4A47-A405-0AE639A76384}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {2BC9950D-CD28-4A47-A405-0AE639A76384}.Debug|Any CPU.Build.0 = Debug|Any CPU {2BC9950D-CD28-4A47-A405-0AE639A76384}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {2BC9950D-CD28-4A47-A405-0AE639A76384}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU {2BC9950D-CD28-4A47-A405-0AE639A76384}.Debug|Win32.ActiveCfg = Debug|Any CPU {2BC9950D-CD28-4A47-A405-0AE639A76384}.DebugNoGac|Any CPU.ActiveCfg = Debug|Any CPU {2BC9950D-CD28-4A47-A405-0AE639A76384}.DebugNoGac|Any CPU.Build.0 = Debug|Any CPU {2BC9950D-CD28-4A47-A405-0AE639A76384}.DebugNoGac|Mixed Platforms.ActiveCfg = Debug|Any CPU {2BC9950D-CD28-4A47-A405-0AE639A76384}.DebugNoGac|Mixed Platforms.Build.0 = Debug|Any CPU {2BC9950D-CD28-4A47-A405-0AE639A76384}.DebugNoGac|Win32.ActiveCfg = Debug|Any CPU {2BC9950D-CD28-4A47-A405-0AE639A76384}.Release|Any CPU.ActiveCfg = Release|Any CPU {2BC9950D-CD28-4A47-A405-0AE639A76384}.Release|Any CPU.Build.0 = Release|Any CPU {2BC9950D-CD28-4A47-A405-0AE639A76384}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {2BC9950D-CD28-4A47-A405-0AE639A76384}.Release|Win32.ActiveCfg = Release|Any CPU {2BC9950D-CD28-4A47-A405-0AE639A76384}.ReleaseGAC|Any CPU.ActiveCfg = Release|Any CPU {2BC9950D-CD28-4A47-A405-0AE639A76384}.ReleaseGAC|Any CPU.Build.0 = Release|Any CPU {2BC9950D-CD28-4A47-A405-0AE639A76384}.ReleaseGAC|Mixed Platforms.ActiveCfg = Release|Any CPU {2BC9950D-CD28-4A47-A405-0AE639A76384}.ReleaseGAC|Mixed Platforms.Build.0 = Release|Any CPU {2BC9950D-CD28-4A47-A405-0AE639A76384}.ReleaseGAC|Win32.ActiveCfg = Release|Any CPU {2BC9950D-CD28-4A47-A405-0AE639A76384}.ReleaseGAC|Win32.Build.0 = Release|Any CPU {D2388680-0C99-467F-9C17-68E1E6E4F1C0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D2388680-0C99-467F-9C17-68E1E6E4F1C0}.Debug|Any CPU.Build.0 = Debug|Any CPU {D2388680-0C99-467F-9C17-68E1E6E4F1C0}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {D2388680-0C99-467F-9C17-68E1E6E4F1C0}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU {D2388680-0C99-467F-9C17-68E1E6E4F1C0}.Debug|Win32.ActiveCfg = Debug|Any CPU {D2388680-0C99-467F-9C17-68E1E6E4F1C0}.DebugNoGac|Any CPU.ActiveCfg = Debug|Any CPU {D2388680-0C99-467F-9C17-68E1E6E4F1C0}.DebugNoGac|Any CPU.Build.0 = Debug|Any CPU {D2388680-0C99-467F-9C17-68E1E6E4F1C0}.DebugNoGac|Mixed Platforms.ActiveCfg = Debug|Any CPU {D2388680-0C99-467F-9C17-68E1E6E4F1C0}.DebugNoGac|Mixed Platforms.Build.0 = Debug|Any CPU {D2388680-0C99-467F-9C17-68E1E6E4F1C0}.DebugNoGac|Win32.ActiveCfg = Debug|Any CPU {D2388680-0C99-467F-9C17-68E1E6E4F1C0}.Release|Any CPU.ActiveCfg = Release|Any CPU {D2388680-0C99-467F-9C17-68E1E6E4F1C0}.Release|Any CPU.Build.0 = Release|Any CPU {D2388680-0C99-467F-9C17-68E1E6E4F1C0}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {D2388680-0C99-467F-9C17-68E1E6E4F1C0}.Release|Win32.ActiveCfg = Release|Any CPU {D2388680-0C99-467F-9C17-68E1E6E4F1C0}.ReleaseGAC|Any CPU.ActiveCfg = Release|Any CPU {D2388680-0C99-467F-9C17-68E1E6E4F1C0}.ReleaseGAC|Any CPU.Build.0 = Release|Any CPU {D2388680-0C99-467F-9C17-68E1E6E4F1C0}.ReleaseGAC|Mixed Platforms.ActiveCfg = Release|Any CPU {D2388680-0C99-467F-9C17-68E1E6E4F1C0}.ReleaseGAC|Mixed Platforms.Build.0 = Release|Any CPU {D2388680-0C99-467F-9C17-68E1E6E4F1C0}.ReleaseGAC|Win32.ActiveCfg = Release|Any CPU {D2388680-0C99-467F-9C17-68E1E6E4F1C0}.ReleaseGAC|Win32.Build.0 = Release|Any CPU {16622C0F-AC63-4DB3-A9D6-D85195BE8C3D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {16622C0F-AC63-4DB3-A9D6-D85195BE8C3D}.Debug|Any CPU.Build.0 = Debug|Any CPU {16622C0F-AC63-4DB3-A9D6-D85195BE8C3D}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {16622C0F-AC63-4DB3-A9D6-D85195BE8C3D}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU {16622C0F-AC63-4DB3-A9D6-D85195BE8C3D}.Debug|Win32.ActiveCfg = Debug|Any CPU {16622C0F-AC63-4DB3-A9D6-D85195BE8C3D}.Debug|Win32.Build.0 = Debug|Any CPU {16622C0F-AC63-4DB3-A9D6-D85195BE8C3D}.DebugNoGac|Any CPU.ActiveCfg = Debug|Any CPU {16622C0F-AC63-4DB3-A9D6-D85195BE8C3D}.DebugNoGac|Any CPU.Build.0 = Debug|Any CPU {16622C0F-AC63-4DB3-A9D6-D85195BE8C3D}.DebugNoGac|Mixed Platforms.ActiveCfg = Debug|Any CPU {16622C0F-AC63-4DB3-A9D6-D85195BE8C3D}.DebugNoGac|Mixed Platforms.Build.0 = Debug|Any CPU {16622C0F-AC63-4DB3-A9D6-D85195BE8C3D}.DebugNoGac|Win32.ActiveCfg = Debug|Any CPU {16622C0F-AC63-4DB3-A9D6-D85195BE8C3D}.DebugNoGac|Win32.Build.0 = Debug|Any CPU {16622C0F-AC63-4DB3-A9D6-D85195BE8C3D}.Release|Any CPU.ActiveCfg = Release|Any CPU {16622C0F-AC63-4DB3-A9D6-D85195BE8C3D}.Release|Any CPU.Build.0 = Release|Any CPU {16622C0F-AC63-4DB3-A9D6-D85195BE8C3D}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {16622C0F-AC63-4DB3-A9D6-D85195BE8C3D}.Release|Mixed Platforms.Build.0 = Release|Any CPU {16622C0F-AC63-4DB3-A9D6-D85195BE8C3D}.Release|Win32.ActiveCfg = Release|Any CPU {16622C0F-AC63-4DB3-A9D6-D85195BE8C3D}.Release|Win32.Build.0 = Release|Any CPU {16622C0F-AC63-4DB3-A9D6-D85195BE8C3D}.ReleaseGAC|Any CPU.ActiveCfg = ReleaseGAC|Any CPU {16622C0F-AC63-4DB3-A9D6-D85195BE8C3D}.ReleaseGAC|Any CPU.Build.0 = ReleaseGAC|Any CPU {16622C0F-AC63-4DB3-A9D6-D85195BE8C3D}.ReleaseGAC|Mixed Platforms.ActiveCfg = ReleaseGAC|Any CPU {16622C0F-AC63-4DB3-A9D6-D85195BE8C3D}.ReleaseGAC|Mixed Platforms.Build.0 = ReleaseGAC|Any CPU {16622C0F-AC63-4DB3-A9D6-D85195BE8C3D}.ReleaseGAC|Win32.ActiveCfg = ReleaseGAC|Any CPU {16622C0F-AC63-4DB3-A9D6-D85195BE8C3D}.ReleaseGAC|Win32.Build.0 = ReleaseGAC|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(NestedProjects) = preSolution {79B2B824-23B8-45C3-ADE4-5BC8D593FC3F} = {64A5B5CA-E0A5-4816-96EE-D574E4189E83} {2153C1DA-B1C5-4B6F-B6D9-272D6099FFC6} = {BBF40DB7-2CCE-4E82-98C9-F506E356CC08} {1FBEBAD2-F7C5-4F75-965C-45098F5A0A48} = {64A5B5CA-E0A5-4816-96EE-D574E4189E83} {CCF4F53B-E0EF-47E5-A82B-B52EC6C521D4} = {BBF40DB7-2CCE-4E82-98C9-F506E356CC08} {A3D74786-1B4A-4967-853E-C98D74E6990B} = {BBF40DB7-2CCE-4E82-98C9-F506E356CC08} {E736D942-D76C-46B6-B7F1-82E3068D46A8} = {BBF40DB7-2CCE-4E82-98C9-F506E356CC08} {B7E4DD8D-A51F-42E5-8964-0774CDAE0F3F} = {BBF40DB7-2CCE-4E82-98C9-F506E356CC08} {EC3E5E89-7125-448F-BCBA-5F1FF8474B60} = {BBF40DB7-2CCE-4E82-98C9-F506E356CC08} {7445CDB5-09EE-4884-B606-B1D870E03B3B} = {BBF40DB7-2CCE-4E82-98C9-F506E356CC08} {BF2CCCE1-AD1F-4765-A556-35E454C7C861} = {BBF40DB7-2CCE-4E82-98C9-F506E356CC08} {1E43FFF4-D113-4CE7-90C1-0CB39E068194} = {BBF40DB7-2CCE-4E82-98C9-F506E356CC08} {5E1DFCA3-11ED-491D-8EC0-7923ECC9CC03} = {BBF40DB7-2CCE-4E82-98C9-F506E356CC08} {533EA853-45F3-483D-8C89-CF686249CC5E} = {BBF40DB7-2CCE-4E82-98C9-F506E356CC08} {44AA3DCA-F38D-4E09-97AF-A0BE74820CFD} = {BBF40DB7-2CCE-4E82-98C9-F506E356CC08} {8145F722-1B6C-4162-92DC-824DFDC3ED6A} = {BBF40DB7-2CCE-4E82-98C9-F506E356CC08} {630C04B5-0B38-4883-981E-2F094982D49D} = {BBF40DB7-2CCE-4E82-98C9-F506E356CC08} {B7676837-C805-4898-AE2A-BF00C2AC9C51} = {2FC1ABC3-5452-411E-8C09-FAABCE16A469} {2BC9950D-CD28-4A47-A405-0AE639A76384} = {2FC1ABC3-5452-411E-8C09-FAABCE16A469} {D2388680-0C99-467F-9C17-68E1E6E4F1C0} = {2FC1ABC3-5452-411E-8C09-FAABCE16A469} {16622C0F-AC63-4DB3-A9D6-D85195BE8C3D} = {BBF40DB7-2CCE-4E82-98C9-F506E356CC08} EndGlobalSection GlobalSection(SolutionNotes) = postSolution EndGlobalSection EndGlobal ================================================ FILE: Solutions/Phalanger.sln.DotSettings ================================================  <Policy Inspect="True" Prefix="" Suffix="" Style="AA_BB" /> <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> ================================================ FILE: Solutions/Phalanger.sln.cmd ================================================ ..\Tools\Elevate cmd /C "start %~dp0\Phalanger.sln" ================================================ FILE: Solutions/Phalanger.vssscc ================================================ "" { "FILE_VERSION" = "9237" "ENLISTMENT_CHOICE" = "NEVER" "PROJECT_FILE_RELATIVE_PATH" = "" "NUMBER_OF_EXCLUDED_FILES" = "0" "ORIGINAL_PROJECT_FILE_PATH" = "" "NUMBER_OF_NESTED_PROJECTS" = "0" "SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROJECT" } ================================================ FILE: Source/Build/AssemblyInfoCommon.cs ================================================ using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; [assembly: AssemblyCompany("The Phalanger Project Team")] [assembly: AssemblyProduct("Phalanger")] [assembly: AssemblyCopyright("Copyright (c) 2004-2014 Tomas Matousek, Ladislav Prosek, Vaclav Novak, Pavel Novak, Jan Benda, Martin Maly, Tomas Petricek, Daniel Balas, Miloslav Beno, Jakub Misek")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] [assembly: System.Resources.NeutralResourcesLanguage("en-US", System.Resources.UltimateResourceFallbackLocation.MainAssembly)] [assembly: AssemblyVersion(AssemblyVersionInfo.StableVersion)] [assembly: AssemblyFileVersion(AssemblyVersionInfo.FileVersion)] class AssemblyVersionInfo { // This version string (and the comments for StableVersion and Version) // should be updated manually between major releases. // Servicing branches should retain the value public const string ReleaseVersion = "4.0"; // Replaced by changeset number using build script. public const string ChangesetNumber = "8139"; public const string StableVersion = ReleaseVersion + ".0.0"; public const string FileVersion = ReleaseVersion + ".0." + ChangesetNumber; } ================================================ FILE: Source/Build/Common.Build.settings ================================================ $(MSBuildAllProjects);$(MSBuildThisFileFullPath) $(MSBuildThisFileDirectory)..\..\ $(RootDir)Tools\ Debug AnyCPU $(RootDir)Deployment\$(Configuration)\ $(OutputPath)obj\ $(OutputPath) $(IntermediateOutputPath) $(OutputPath)$(AssemblyName).xml $(ProjectRootDir)Tools\ $(ToolsDir) http://nuget.org/nuget.exe $(NuGetExeDir)nuget.exe $(ToolsDir)gacutil "$(NuGetExe)" "$(GacUtilExe)" False true prompt 4 $(NoWarn),419,436,1591,CS0618 true false false AllRules.ruleset full false DEBUG;TRACE pdbonly true TRACE ================================================ FILE: Source/Build/Common.Build.targets ================================================ AssemblyInfoCommon.cs
$(OutputPath)NuGet ================================================ FILE: Source/ClassLibrary/Arrays.cs ================================================ /* Copyright (c) 2004-2006 Tomas Matousek. The use and distribution terms for this software are contained in the file named License.txt, which can be found in the root of the Phalanger distribution. By using this software in any fashion, you are agreeing to be bound by the terms of this license. You must not remove this notice from this software. */ /* NOTES: - compact, extract functions are implemented in PhpVariables class TODO: - array_map depends on call-time ampersand modification (see bug #33940) - array_diff_assoc - strict equality comparison - array_pop - it is probably buggy in PHP 5.1.2, submitted bug report. */ using System; using System.Collections; using System.Text; using System.IO; using System.Runtime.Serialization; using System.ComponentModel; using PHP.Core; using System.Collections.Generic; using System.Diagnostics; #if SILVERLIGHT using PHP.CoreCLR; #endif namespace PHP.Library { #region Enumerations /// /// Type of sorting. /// public enum ComparisonMethod { /// Regular comparison. [ImplementsConstant("SORT_REGULAR")] Regular = 0, /// Numeric comparison. [ImplementsConstant("SORT_NUMERIC")] Numeric = 1, /// String comparison. [ImplementsConstant("SORT_STRING")] String = 2, /// String comparison respecting to locale. [ImplementsConstant("SORT_LOCALE_STRING")] LocaleString = 5, /// Undefined comparison. Undefined = -1 }; /// /// Sort order. /// public enum SortingOrder { /// Descending [ImplementsConstant("SORT_DESC")] Descending = 3, /// Ascending [ImplementsConstant("SORT_ASC")] Ascending = 4, /// Undefined Undefined = -1 } /// /// Whether or not the sort is case-sensitive. /// public enum LetterCase { /// Lower case. [ImplementsConstant("CASE_LOWER")] Lower = 0, /// Upper case. [ImplementsConstant("CASE_UPPER")] Upper = 1 } #endregion /// /// Manipulates arrays and collections. /// /// public static class PhpArrays { /// /// Array which is always empty. Nobody should add any item to it. /// internal static readonly PhpArray EmptyArray = new PhpArray(); #region reset, pos, prev, next, key, end, each /// /// Retrieves a value being pointed by an array intrinsic enumerator. /// /// The array which current value to return. /// False, if the intrinsic enumerator is behind the last item of , /// otherwise the value being pointed by the enumerator (beware of values which are false!). /// The value returned is dereferenced. [ImplementsFunction("current")] [return: PhpDeepCopy] public static object Current([PhpRw] IPhpEnumerable array) { if (array == null) { PhpException.ReferenceNull("array"); return null; } if (array.IntrinsicEnumerator.AtEnd) return false; // dereferences result since enumerator doesn't do so: return PhpVariable.Dereference(array.IntrinsicEnumerator.Value); } /// /// Retrieves a value being pointed by an array intrinsic enumerator. /// /// The array which current value to return. /// /// False if the intrinsic enumerator is behind the last item of , /// otherwise the value being pointed by the enumerator (beware of values which are false!). /// /// /// Alias of . The value returned is dereferenced. /// [ImplementsFunction("pos")] [return: PhpDeepCopy] public static object Pos([PhpRw] IPhpEnumerable array) { return Current(array); } /// /// Retrieves a key being pointed by an array intrinsic enumerator. /// /// The array which current key to return. /// /// Null, if the intrinsic enumerator is behind the last item of , /// otherwise the key being pointed by the enumerator. /// [ImplementsFunction("key")] public static object Key([PhpRw] IPhpEnumerable array) { if (array == null) { PhpException.ReferenceNull("array"); return null; } if (array.IntrinsicEnumerator.AtEnd) return null; // note, key can't be of type PhpReference, hence no dereferencing follows: return ((IntStringKey)array.IntrinsicEnumerator.Key).Object; } /// /// Advances array intrinsic enumerator one item forward. /// /// The array which intrinsic enumerator to advance. /// /// The value being pointed by the enumerator after it has been advanced /// or false if the enumerator has moved behind the last item of . /// /// The value returned is dereferenced. /// [ImplementsFunction("next")] [return: PhpDeepCopy] public static object Next([PhpRw] IPhpEnumerable array) { if (array == null) { PhpException.ReferenceNull("array"); return null; } // moves to the next item and returns false if there is no such item: if (!array.IntrinsicEnumerator.MoveNext()) return false; // dereferences result since enumerator doesn't do so: return PhpVariable.Dereference(array.IntrinsicEnumerator.Value); } /// /// Moves array intrinsic enumerator one item backward. /// /// The array which intrinsic enumerator to move. /// /// The value being pointed by the enumerator after it has been moved /// or false if the enumerator has moved before the first item of . /// /// The value returned is dereferenced. /// [ImplementsFunction("prev")] [return: PhpDeepCopy] public static object Prev([PhpRw] IPhpEnumerable array) { if (array == null) { PhpException.ReferenceNull("array"); return null; } // moves to the previous item and returns false if there is no such item: if (!array.IntrinsicEnumerator.MovePrevious()) return false; // gets a value: object result = array.IntrinsicEnumerator.Value; // dereferences result since enumerator doesn't do so: return PhpVariable.Dereference(result); } /// /// Moves array intrinsic enumerator so it will point to the last item of the array. /// /// The array which intrinsic enumerator to move. /// The last value in the or false if /// is empty. /// The value returned is dereferenced. [ImplementsFunction("end")] [return: PhpDeepCopy] public static object End([PhpRw] IPhpEnumerable array) { if (array == null) { PhpException.ReferenceNull("array"); return null; } // moves to the last item and returns false if there is no such item: if (!array.IntrinsicEnumerator.MoveLast()) return false; // gets a value: object result = array.IntrinsicEnumerator.Value; // dereferences result since enumerator doesn't do so: return PhpVariable.Dereference(result); } /// /// Moves array intrinsic enumerator so it will point to the first item of the array. /// /// The array which intrinsic enumerator to move. /// The first value in the or false if /// is empty. /// The value returned is dereferenced. [ImplementsFunction("reset")] [return: PhpDeepCopy] public static object Reset([PhpRw] IPhpEnumerable array) { if (array == null) { //PhpException.ReferenceNull("array"); return null; } // moves to the last item and returns false if there is no such item: if (!array.IntrinsicEnumerator.MoveFirst()) return false; // gets a value: object result = array.IntrinsicEnumerator.Value; // dereferences result since enumerator doesn't do so: return PhpVariable.Dereference(result); } /// /// Retrieves the current entry and advances array intrinsic enumerator one item forward. /// /// The array which entry get and which intrinsic enumerator to advance. /// /// The instance of (0 => key, 1 => value, "key" => key, "value" => value) /// where key and value are pointed by the enumerator before it is advanced /// or false if the enumerator has been behind the last item of /// before the call. /// /// [ImplementsFunction("each")] [return: CastToFalse, PhpDeepCopy] public static PhpArray Each([PhpRw] IPhpEnumerable array) { if (array == null) { //PhpException.ReferenceNull("array"); return null; } if (array.IntrinsicEnumerator.AtEnd) return null; DictionaryEntry entry = array.IntrinsicEnumerator.Entry; array.IntrinsicEnumerator.MoveNext(); // dereferences result since enumerator doesn't do so: object key = ((IntStringKey)entry.Key).Object; object value = PhpVariable.Dereference(entry.Value); // creates the resulting array: PhpArray result = new PhpArray(); result.Add(1, value); result.Add("value", value); result.Add(0, key); result.Add("key", key); // keys and values should be inplace deeply copied: result.InplaceCopyOnReturn = true; return result; } #endregion #region array_pop, array_push, array_shift, array_unshift, array_reverse /// /// Removes the last item from an array and returns it. /// /// The array whcih item to pop. /// The last item of or a null reference if it is empty. /// Resets intrinsic enumerator. [ImplementsFunction("array_pop")] [return: PhpDeepCopy] public static object Pop([PhpRw] PhpArray array) { if (array == null) { PhpException.ReferenceNull("array"); return null; } if (array.Count == 0) return null; // dereferences result since the array doesn't do so: object result = PhpVariable.Dereference(array.RemoveLast().Value); array.RefreshMaxIntegerKey(); array.RestartIntrinsicEnumerator(); return result; } /// /// Adds multiple items into an array. /// /// The array where to add values. /// The array of values to add. /// The number of items in array after all items was added. [ImplementsFunction("array_push")] public static int Push([PhpRw] PhpArray array, [PhpDeepCopy] params object[] vars) { if (array == null) { PhpException.ReferenceNull("array"); return 0; } // adds copies variables (if called by PHP): for (int i = 0; i < vars.Length; i++) { array.Add(vars[i]); } return array.Count; } /// /// Removes the first item of an array and reindex integer keys starting from zero. /// /// The array to be shifted. /// The removed object. /// Resets intrinsic enumerator. [ImplementsFunction("array_shift")] [return: PhpDeepCopy] public static object Shift([PhpRw] PhpArray array) { if (array == null) { PhpException.ReferenceNull("array"); return null; } if (array.Count == 0) return null; // dereferences result since the array doesn't do so: object result = PhpVariable.Dereference(array.RemoveFirst().Value); // reindexes integer keys starting from zero: array.ReindexIntegers(0); array.RestartIntrinsicEnumerator(); return result; } /// /// Inserts specified items before the first item of an array and reindex integer keys starting from zero. /// /// The array to be unshifted. /// Variables to be inserted. /// The number of items in resulting array. [ImplementsFunction("array_unshift")] public static int Unshift([PhpRw] PhpArray array, [PhpDeepCopy] params object[] vars) { if (array == null) { PhpException.ReferenceNull("array"); return 0; } // reindexes integer keys starting from the number of items to be prepended: array.ReindexIntegers(vars.Length); // prepends items indexing keys from 0 to the number of items - 1: for (int i = vars.Length - 1; i >= 0; i--) { array.Prepend(i, vars[i]); } return array.Count; } /// /// Returns array which elements are taken from a specified one in reversed order. /// Integer keys are reindexed starting from zero. /// /// The array to be reversed. /// The array with items in reversed order. [ImplementsFunction("array_reverse")] [return: PhpDeepCopy] public static PhpArray Reverse(PhpArray array) { return Reverse(array, false); } /// /// Returns array which elements are taken from a specified one in reversed order. /// /// The array to be reversed. /// Whether keys should be left untouched. /// If set to false then integer keys are reindexed starting from zero. /// The array with items in reversed order. [ImplementsFunction("array_reverse")] [return: PhpDeepCopy] public static PhpArray Reverse(PhpArray array, bool preserveKeys) { if (array == null) { PhpException.ArgumentNull("array"); return null; } PhpArray result = new PhpArray(); if (preserveKeys) { // changes only the order of elements: foreach (KeyValuePair entry in array) result.Prepend(entry.Key, entry.Value); } else { // changes the order of elements and reindexes integer keys: int i = array.IntegerCount; foreach (KeyValuePair entry in array) { if (entry.Key.IsString) result.Prepend(entry.Key.String, entry.Value); else result.Prepend(--i, entry.Value); } } // if called by PHP languge then all items in the result should be inplace deeply copied: result.InplaceCopyOnReturn = true; return result; } #endregion #region array_slice, array_splice /// /// Retrieves a slice of specified array. /// /// The array which slice to get. /// The ordinal number of a first item of the slice. /// The slice of . /// /// The same as where length is infinity. /// . Resets integer keys. /// [ImplementsFunction("array_slice")] [return: PhpDeepCopy] public static PhpArray Slice(PhpArray array, int offset) { return Slice(array, offset, int.MaxValue, false); } /// /// Retrieves a slice of specified array. /// /// The array which slice to get. /// The relativized offset of the first item of the slice. /// The relativized length of the slice. /// The slice of . /// /// See for details about and /// . Resets integer keys. /// [ImplementsFunction("array_slice")] [return: PhpDeepCopy] public static PhpArray Slice(PhpArray array, int offset, int length) { return Slice(array, offset, length, false); } /// /// Retrieves a slice of specified array. /// /// The array which slice to get. /// The relativized offset of the first item of the slice. /// The relativized length of the slice. /// Whether to preserve integer keys. If false, the integer keys are reset. /// The slice of . /// /// See for details about and . /// [ImplementsFunction("array_slice")] [return: PhpDeepCopy] public static PhpArray Slice(PhpArray array, int offset, int length, bool preserveKeys) { if (array == null) { PhpException.ArgumentNull("array"); return null; } // absolutizes range: PhpMath.AbsolutizeRange(ref offset, ref length, array.Count); var iterator = array.GetBaseEnumerator(); // moves iterator to the first item of the slice; // starts either from beginning or from the end (which one is more efficient): if (offset < array.Count - offset) { for (int i = -1; i < offset; i++) iterator.MoveNext(); } else { for (int i = array.Count; i > offset; i--) iterator.MovePrevious(); } // copies the slice: PhpArray result = new PhpArray(length); int ikey = 0; for (int i = 0; i < length; i++) { KeyValuePair entry = iterator.Current; // integer keys are reindexed if preserveKeys is false, string keys are not touched: if (entry.Key.IsString) { result.Add(entry.Key, entry.Value); } else { if (!preserveKeys) result.Add(ikey++, entry.Value); else result.Add(entry.Key, entry.Value); } iterator.MoveNext(); } result.InplaceCopyOnReturn = true; return result; } /// /// Removes a slice of an array. /// /// The array which slice to remove. /// The relativized offset of a first item of the slice. /// /// Items from -th to the last one are removed from . /// /// See for details about . [ImplementsFunction("array_splice")] public static PhpArray Splice([PhpRw] PhpArray array, int offset) { // Splice would be equivalent to SpliceDc if no replacelent is specified (=> no SpliceDc): return Splice(array, offset, int.MaxValue, null); } /// /// Removes a slice of an array. /// /// The array which slice to remove. /// The relativized offset of a first item of the slice. /// The relativized length of the slice. /// /// items are removed from /// starting with the -th one. /// /// See for details about . [ImplementsFunction("array_splice")] public static PhpArray Splice([PhpRw] PhpArray array, int offset, int length) { // Splice would be equivalent to SpliceDc if no replacement is specified (=> no SpliceDc): return Splice(array, offset, length, null); } /// /// Replaces a slice of an array with specified item(s). /// /// /// The same as except for that /// replacement items are deeply copied to the . /// [ImplementsFunction("array_splice")] public static PhpArray SpliceDc([PhpRw] PhpArray array, int offset, int length, object replacement) { if (array == null) { PhpException.ReferenceNull("array"); return null; } return SpliceInternal(array, offset, length, replacement, true); } /// /// Replaces a slice of an array with specified item(s). /// /// The array which slice to replace. /// The relativized offset of a first item of the slice. /// The relativized length of the slice. /// of items to replace the splice or a single item. /// The of replaced items indexed by integers starting from zero. /// /// See for details about and . /// Reindexes all integer keys in resulting array. /// public static PhpArray Splice(PhpArray array, int offset, int length, object replacement) { if (array == null) { PhpException.Throw( PhpError.Warning, string.Format(Strings.unexpected_arg_given, "array", PhpArray.PhpTypeName, PhpVariable.TypeNameNull)); return null; } return SpliceInternal(array, offset, length, replacement, false); } /// /// Implementation of and . /// /// Whether to make a deep-copy of items in the replacement. internal static PhpArray SpliceInternal(PhpArray array, int offset, int length, object replacement, bool deepCopy) { Debug.Assert(array != null); int count = array.Count; // converts offset and length to interval [first,last]: PhpMath.AbsolutizeRange(ref offset, ref length, count); PhpArray result = new PhpArray(length); PhpArray r_array = replacement as PhpArray; // replacement is an array: if (r_array != null) { // provides deep copies: IEnumerable e; if (deepCopy) e = PhpVariable.EnumerateDeepCopies(r_array.Values); else e = r_array.Values; // does replacement: array.ReindexAndReplace(offset, length, e, result); } else if (replacement != null) { // replacement is another type // // creates a deep copy: if (deepCopy) replacement = PhpVariable.DeepCopy(replacement); // does replacement: array.ReindexAndReplace(offset, length, new object[] { replacement }, result); } else { // replacement is null: array.ReindexAndReplace(offset, length, null, result); } return result; } #endregion #region shuffle, array_rand /// /// Randomizes the order of elements in the array using PhpMath random numbers generator. /// /// Thrown if the argument is null. /// Reindexes all keys in the resulting array. /// True on success, False on failure. [ImplementsFunction("shuffle")] public static bool Shuffle([PhpRw] PhpArray array) { if (array == null) { PhpException.ArgumentNull("array"); return false; } array.Shuffle(PhpMath.Generator); array.ReindexAll(); return true; } /// /// Returns a key of an entry chosen at random using PhpMath random numbers generator. /// /// The array which to choose from. /// The chosen key. /// is a null reference. [ImplementsFunction("array_rand")] [return: PhpDeepCopy] public static object RandomKeys(PhpArray array) { return RandomKeys(array, 1); } /// /// Chooses specified number of keys from an array at random. /// /// The from which to choose. /// The number of items to choose. /// Either of chosen keys ( > 1) or a single key. /// /// Items are chosen uniformly in time O(n), where n is the number of items in the /// using conveyor belt sampling. /// /// is a null reference. /// is not positive and less /// than the number of items in . (Warning) [ImplementsFunction("array_rand")] [return: PhpDeepCopy] public static object RandomKeys(PhpArray array, int count) { if (count == 1) { ArrayList result = new ArrayList(1); return RandomSubset(((IDictionary)array).Keys, result, count, PhpMath.Generator) ? result[0] : null; } else { PhpArray result = new PhpArray(count > 0 ? count : 0, 0); if (RandomSubset(((IDictionary)array).Keys, result, count, PhpMath.Generator)) { result.InplaceCopyOnReturn = true; return result; } else { return null; } } } /// /// Chooses specified number of items from a collection at random. /// /// The from which to choose. /// The where to add chosen items. /// The number of items to choose. /// The initialized random numbers generator. /// /// Items are chosen uniformly in time O(n), where n is the number of items in the collection /// using conveyor belt sampling. /// /// false on failure. /// Either or or /// is a null reference (Warning) /// is not positive and less /// than the number of items in . (Warning) public static bool RandomSubset(ICollection source, IList result, int count, Random generator) { #region requires (source && result && generator && count>=1 && count<=source.Count) if (source == null) { PhpException.ArgumentNull("array"); return false; } if (result == null) { PhpException.ArgumentNull("result"); return false; } if (generator == null) { PhpException.ArgumentNull("generator"); return false; } if (count < 1 || count > source.Count) { PhpException.InvalidArgument("count", LibResources.GetString("number_of_items_not_between_one_and_item_count", count, source.Count)); return false; } #endregion int n = source.Count; IEnumerator iterator = source.GetEnumerator(); while (iterator.MoveNext()) { // adds item to result with probability count/n: if ((double)count > generator.NextDouble() * n) { result.Add(iterator.Current); if (--count == 0) break; } n--; } return true; } #endregion #region array_key_exists, in_array, array_search /// /// Checks if a key exists in the array. /// /// The key to be searched for. /// The array where to search for the key. /// Whether the exists in the . /// is converted by before the search. /// argument is a null reference (Warning). /// has type which is illegal for array key. [ImplementsFunction("array_key_exists")] public static bool KeyExists(object key, PhpArray array) { if (array == null) { PhpException.ArgumentNull("array"); return false; } IntStringKey array_key; if (Core.Convert.ObjectToArrayKey(key, out array_key)) return array.ContainsKey(array_key); PhpException.Throw(PhpError.Warning, CoreResources.GetString("illegal_offset_type")); return false; } /// /// Alias of . /// [ImplementsFunction("key_exists"), EditorBrowsable(EditorBrowsableState.Never)] public static bool KeyExistsObsolete(object key, PhpArray array) { return KeyExists(key, array); } /// /// Checks if a value exists in an array. /// /// The value to search for. /// The where to search. /// Whether there is the value in the . /// Regular comparison () is used for comparing values. /// is a null reference (Warning). [ImplementsFunction("in_array")] public static bool InArray(object needle, PhpArray haystack) { object b = Search(needle, haystack, false); return !(b is bool) || (bool)b; } /// /// Checks if a value exists in an array. /// /// The value to search for. /// The where to search. /// Whether strict comparison method (operator ===) is used for comparing values. /// Whether there is the value in the . /// is a null reference (Warning). [ImplementsFunction("in_array")] public static bool InArray(object needle, PhpArray haystack, bool strict) { object b = Search(needle, haystack, strict); return !(b is bool) || (bool)b; } /// /// Searches the array for a given value and returns the corresponding key if successful. /// /// The value to search for. /// The where to search. /// The key associated with the or false if there is no such key. /// Regular comparison () is used for comparing values. /// is a null reference (Warning). [ImplementsFunction("array_search")] public static object Search(object needle, PhpArray haystack) { return Search(needle, haystack, false); } /// /// Searches the array for a given value and returns the corresponding key if successful. /// /// The value to search for. /// The where to search. /// Whether strict comparison method (operator ===) is used for comparing values. /// The key associated with the or false if there is no such key. /// is a null reference (Warning). [ImplementsFunction("array_search")] public static object Search(object needle, PhpArray haystack, bool strict) { // result needn't to be deeply copied because it is a key of an array // if (haystack == null) { PhpException.ArgumentNull("haystack"); return false; } // using operator ===: if (strict) { using (var enumerator = haystack.GetFastEnumerator()) while (enumerator.MoveNext()) { // dereferences value (because of StrictEquality operator): object val = PhpVariable.Dereference(enumerator.CurrentValue); if (Operators.StrictEquality(needle, val)) return enumerator.CurrentKey.Object; } } else { // using operator ==: using (var enumerator = haystack.GetFastEnumerator()) while (enumerator.MoveNext()) { // comparator manages references well: if (PhpComparer.CompareEq(needle, enumerator.CurrentValue)) return enumerator.CurrentKey.Object; } } // not found: return false; } #endregion #region array_fill, array_fill_keys, array_pad /// /// Creates a new array filled with a specified value. /// /// The value of the key of the first item in the array. /// The number of items in the array. /// The value copied to all items in the array. /// The array. /// Thrown if is not positive. [ImplementsFunction("array_fill")] [return: PhpDeepCopy] public static PhpArray Fill(int startIndex, int count, object value) { if (count <= 0) { PhpException.InvalidArgument("count", LibResources.GetString("arg:negative_or_zero")); return null; } PhpArray result = new PhpArray(count, 0); int last = startIndex + count; for (int i = startIndex; i < last; i++) result.Add(i, value); // makes deep copies of all added items: result.InplaceCopyOnReturn = true; return result; } [ImplementsFunction("array_fill_keys")] [return: PhpDeepCopy] public static PhpArray FillKeys(PhpArray keys, object value) { if (keys == null) { PhpException.ArgumentNull("keys"); return null; } var result = new PhpArray(keys.Count); foreach (var x in keys) { IntStringKey key; if (Core.Convert.ObjectToArrayKey(x.Value, out key) && !result.ContainsKey(key)) { result.Add(key, value); } } // makes deep copies of all added items: result.InplaceCopyOnReturn = true; return result; } /// /// Pads array to the specified length with a value. /// If the length is negative adds |length| elements at beginning otherwise adds elements at the end. /// Values with integer keys that are contained in the source array are inserted to the resulting one with new /// integer keys counted from zero (or from |length| if length negative). /// /// The source array. /// The length of the resulting array. /// The value to add in array. /// Padded array. /// The argument is a null reference. [ImplementsFunction("array_pad")] [return: PhpDeepCopy] public static PhpArray Pad(PhpArray array, int length, object value) { if (array == null) { PhpException.ArgumentNull("array"); return null; } // number of items to add: int remains = Math.Abs(length) - array.Count; // returns unchanged array (or its deep copy if called from PHP): if (remains <= 0) return array; PhpArray result = new PhpArray(array.IntegerCount + remains, array.StringCount); // prepends items: if (length < 0) { while (remains-- > 0) result.Add(value); } // inserts items from source array // if a key is a string inserts it unchanged otherwise inserts value with max. integer key: foreach (KeyValuePair entry in array) { if (entry.Key.IsString) result.Add(entry.Key.String, entry.Value); else result.Add(entry.Value); } // appends items: if (length > 0) { while (remains-- > 0) result.Add(value); } // the result is inplace deeply copied on return to PHP code: result.InplaceCopyOnReturn = true; return result; } #endregion #region range /// /// Creates an array containing range of integers from the [low;high] interval with arbitrary step. /// /// Lower bound of the interval. /// Upper bound of the interval. /// The step. An absolute value is taken if step is zero. /// The array. public static PhpArray RangeOfInts(int low, int high, int step) { if (step == 0) { PhpException.InvalidArgument("step", LibResources.GetString("arg:zero")); return null; } if (step < 0) step = -step; PhpArray result = new PhpArray(Math.Abs(high - low) / step + 1); if (high >= low) { for (int i = 0; low <= high; i++, low += step) result.Add(i, low); } else { for (int i = 0; low >= high; i++, low -= step) result.Add(i, low); } return result; } /// /// Creates an array containing range of long integers from the [low;high] interval with arbitrary step. /// /// Lower bound of the interval. /// Upper bound of the interval. /// The step. An absolute value is taken if step is zero. /// The array. public static PhpArray RangeOfLongInts(long low, long high, long step) { if (step == 0) { PhpException.InvalidArgument("step", LibResources.GetString("arg:zero")); return null; } if (step < 0) step = -step; PhpArray result = new PhpArray(unchecked((int)(Math.Abs(high - low) / step + 1))); if (high >= low) { for (int i = 0; low <= high; i++, low += step) result.Add(i, low); } else { for (int i = 0; low >= high; i++, low -= step) result.Add(i, low); } return result; } /// /// Creates an array containing range of doubles from the [low;high] interval with arbitrary step. /// /// Lower bound of the interval. /// Upper bound of the interval. /// The step. An absolute value is taken if step is less than zero. /// The array. /// Thrown if the argument is zero. public static PhpArray RangeOfDoubles(double low, double high, double step) { if (step == 0) { PhpException.InvalidArgument("step", LibResources.GetString("arg:zero")); return null; } if (step < 0) step = -step; PhpArray result = new PhpArray(System.Convert.ToInt32(Math.Abs(high - low) / step) + 1); if (high >= low) { for (int i = 0; low <= high; i++, low += step) result.Add(i, low); } else { for (int i = 0; low >= high; i++, low -= step) result.Add(i, low); } return result; } /// /// Creates an array containing range of characters from the [low;high] interval with arbitrary step. /// /// Lower bound of the interval. /// Upper bound of the interval. /// The step. /// The array. /// Thrown if the argument is zero. public static PhpArray RangeOfChars(char low, char high, int step) { if (step == 0) { PhpException.InvalidArgument("step", LibResources.GetString("arg:zero")); step = 1; } if (step < 0) step = -step; PhpArray result = new PhpArray(Math.Abs(high - low) / step + 1, 0); if (high >= low) { for (int i = 0; low <= high; i++, low = unchecked((char)(low + step))) result.Add(i, low.ToString()); } else { for (int i = 0; low >= high; i++, low = unchecked((char)(low - step))) result.Add(i, low.ToString()); } return result; } /// /// Creates an array containing range of elements with step 1. /// /// Lower bound of the interval. /// Upper bound of the interval. /// The array. [ImplementsFunction("range")] public static PhpArray Range(object low, object high) { return Range(low, high, 1); } /// /// Creates an array containing range of elements with arbitrary step. /// /// Lower bound of the interval. /// Upper bound of the interval. /// The step. /// The array. /// /// Implements PHP awful range function. The result depends on types and /// content of parameters under the following rules: /// /// /// /// If at least one parameter (low, high or step) is of type double or is a string wholly representing /// double value (i.e. whole string is converted to a number and no chars remains, /// e.g. "1.5" is wholly representing but the value "1.5x" is not) /// than /// range of double values is generated with a step treated as a double value /// (e.g. range("1x","2.5x","0.5") = array(1.0, 1.5, 2.0, 2.5) etc.) /// otherwise /// /// /// /// /// if at least one bound (i.e. low or high parameter) is of type int or is a string wholly representing /// integer value /// than /// range of integer values is generated with a step treated as integer value /// (e.g. range("1x","2","1.5") = array(1, 2, 3, 4) etc.) /// otherwise /// /// /// /// /// low and high are both non-empty strings (otherwise one of the two previous conditions would be true), /// so the first characters of these strings are taken and a sequence of characters is generated. /// /// /// /// Moreover, if is greater than then descending sequence is generated /// and ascending one otherwise. If is less than zero than an absolute value is used. /// /// Thrown if the argument is zero (or its absolute value less than 1 in the case 2). [ImplementsFunction("range")] public static PhpArray Range(object low, object high, object step) { double d_step, d_low, d_high; int i_step, i_low, i_high; long l_step, l_low, l_high; Core.Convert.NumberInfo info_step, info_low, info_high; bool is_step_double, is_low_double, is_high_double, w_step, w_low, w_high; if (low == null || String.Empty.Equals(low)) low = "0"; if (high == null || String.Empty.Equals(high)) high = "0"; // converts each parameter to a number, determines what type of number it is (int/double) // and whether it wholly represents that number: info_step = Core.Convert.ObjectToNumber(step, out i_step, out l_step, out d_step); info_low = Core.Convert.ObjectToNumber(low, out i_low, out l_low, out d_low); info_high = Core.Convert.ObjectToNumber(high, out i_high, out l_high, out d_high); is_step_double = (info_step & PHP.Core.Convert.NumberInfo.Double) != 0; is_low_double = (info_low & PHP.Core.Convert.NumberInfo.Double) != 0; is_high_double = (info_high & PHP.Core.Convert.NumberInfo.Double) != 0; w_step = (info_step & PHP.Core.Convert.NumberInfo.IsNumber) != 0; w_low = (info_low & PHP.Core.Convert.NumberInfo.IsNumber) != 0; w_high = (info_high & PHP.Core.Convert.NumberInfo.IsNumber) != 0; // at least one parameter is a double or its numeric value is wholly double: if (is_low_double && w_low || is_high_double && w_high || is_step_double && w_step) { return RangeOfDoubles(d_low, d_high, d_step); } // at least one bound is wholly integer (doesn't matter what the step is): if (!is_low_double && w_low || !is_high_double && w_high) { // at least one long integer: if (((info_step | info_low | info_high) & PHP.Core.Convert.NumberInfo.LongInteger) != 0) return RangeOfLongInts(l_low, l_high, l_step); else return RangeOfInts(i_low, i_high, i_step); } // both bounds are strings which are not wholly representing numbers (other types wholly represents a number): string slow = Core.Convert.ObjectToString(low); string shigh = Core.Convert.ObjectToString(high); // because each string doesn't represent a number it isn't empty: Debug.Assert(slow != "" && shigh != ""); return RangeOfChars(slow[0], shigh[0], i_step); } #endregion #region GetComparer /// /// Gets an instance of PHP comparer parametrized by specified method, order, and compared item type. /// /// The . /// The . /// Whether to compare keys (false for value comparer). /// A comparer (either a new instance or existing singleton instance). public static IComparer>/*!*/ GetComparer(ComparisonMethod method, SortingOrder order, bool keyComparer) { if (keyComparer) { switch (method) { case ComparisonMethod.Numeric: return (order == SortingOrder.Descending) ? KeyComparer.ReverseNumeric : KeyComparer.Numeric; case ComparisonMethod.String: return (order == SortingOrder.Descending) ? KeyComparer.ReverseString : KeyComparer.String; case ComparisonMethod.LocaleString: return new KeyComparer(Locale.GetStringComparer(false), order == SortingOrder.Descending); default: return (order == SortingOrder.Descending) ? KeyComparer.Reverse : KeyComparer.Default; } } else { switch (method) { case ComparisonMethod.Numeric: return (order == SortingOrder.Descending) ? ValueComparer.ReverseNumeric : ValueComparer.Numeric; case ComparisonMethod.String: return (order == SortingOrder.Descending) ? ValueComparer.ReverseString : ValueComparer.String; case ComparisonMethod.LocaleString: return new ValueComparer(Locale.GetStringComparer(false), order == SortingOrder.Descending); default: return (order == SortingOrder.Descending) ? ValueComparer.Reverse : ValueComparer.Default; } } } #endregion #region sort,asort,ksort,rsort,arsort,krsort /// /// Sorts an array using regular comparison method for comparing values. /// /// The array to be sorted. /// Resets 's intrinsic enumerator. /// True on success, False on failure. [ImplementsFunction("sort")] public static bool Sort([PhpRw] PhpArray array) { return Sort(array, ComparisonMethod.Regular); } /// /// Sorts an array using specified comparison method for comparing values. /// /// The array to be sorted. /// The method to be used for comparison of values. /// Resets 's intrinsic enumerator. /// True on success, False on failure. [ImplementsFunction("sort")] public static bool Sort([PhpRw] PhpArray array, ComparisonMethod comparisonMethod) { if (array == null) { PhpException.ReferenceNull("array"); return false; } array.Sort(GetComparer(comparisonMethod, SortingOrder.Ascending, false)); array.ReindexAll(); array.RestartIntrinsicEnumerator(); return true; } /// /// Sorts an array using regular comparison method for comparing values preserving key-value associations. /// /// The array to be sorted. /// Resets 's intrinsic enumerator. /// True on success, False on failure. [ImplementsFunction("asort")] public static bool AssocSort([PhpRw] PhpArray array) { return AssocSort(array, ComparisonMethod.Regular); } /// /// Sorts an array using specified comparison method for comparing values preserving key-value associations. /// /// The array to be sorted. /// The method to be used for comparison of values. /// Resets 's intrinsic enumerator. /// True on success, False on failure. [ImplementsFunction("asort")] public static bool AssocSort([PhpRw] PhpArray array, ComparisonMethod comparisonMethod) { if (array == null) { PhpException.ReferenceNull("array"); return false; } array.Sort(GetComparer(comparisonMethod, SortingOrder.Ascending, false)); array.RestartIntrinsicEnumerator(); return true; } /// /// Sorts an array using regular comparison method for comparing keys. /// /// The array to be sorted. /// Resets 's intrinsic enumerator. /// True on success, False on failure. [ImplementsFunction("ksort")] public static bool KeySort([PhpRw] PhpArray array) { return KeySort(array, ComparisonMethod.Regular); } /// /// Sorts an array using specified comparison method for comparing keys. /// /// The array to be sorted. /// The method to be used for comparison of keys. /// Resets 's intrinsic enumerator. /// True on success, False on failure. [ImplementsFunction("ksort")] public static bool KeySort([PhpRw] PhpArray array, ComparisonMethod comparisonMethod) { if (array == null) { PhpException.ReferenceNull("array"); return false; } array.Sort(GetComparer(comparisonMethod, SortingOrder.Ascending, true)); array.RestartIntrinsicEnumerator(); return true; } /// /// Sorts an array using regular comparison method for comparing values in reverse order. /// /// The array to be sorted. /// Resets 's intrinsic enumerator. /// True on success, False on failure. [ImplementsFunction("rsort")] public static bool ReverseSort([PhpRw] PhpArray array) { return ReverseSort(array, ComparisonMethod.Regular); } /// /// Sorts an array using specified comparison method for comparing values in reverse order. /// /// The array to be sorted. /// The method to be used for comparison of keys. /// Resets 's intrinsic enumerator. /// True on success, False on failure. [ImplementsFunction("rsort")] public static bool ReverseSort([PhpRw] PhpArray array, ComparisonMethod comparisonMethod) { if (array == null) { PhpException.ReferenceNull("array"); return false; } array.Sort(GetComparer(comparisonMethod, SortingOrder.Descending, false)); array.ReindexAll(); array.RestartIntrinsicEnumerator(); return true; } /// /// Sorts an array using regular comparison method for comparing values in reverse order /// preserving key-value associations. /// /// The array to be sorted. /// Resets 's intrinsic enumerator. /// True on success, False on failure. [ImplementsFunction("arsort")] public static bool AssocReverseSort([PhpRw] PhpArray array) { return AssocReverseSort(array, ComparisonMethod.Regular); } /// /// Sorts an array using specified comparison method for comparing values in reverse order /// preserving key-value associations. /// /// The array to be sorted. /// The method to be used for comparison of values. /// Resets 's intrinsic enumerator. /// True on success, False on failure. [ImplementsFunction("arsort")] public static bool AssocReverseSort([PhpRw] PhpArray array, ComparisonMethod comparisonMethod) { if (array == null) { PhpException.ReferenceNull("array"); return false; } array.Sort(GetComparer(comparisonMethod, SortingOrder.Descending, false)); array.RestartIntrinsicEnumerator(); return true; } /// /// Sorts an array using regular comparison method for comparing keys in reverse order. /// /// The array to be sorted. /// Resets 's intrinsic enumerator. /// True on success, False on failure. [ImplementsFunction("krsort")] public static bool KeyReverseSort([PhpRw] PhpArray array) { return KeyReverseSort(array, ComparisonMethod.Regular); } /// /// Sorts an array using specified comparison method for comparing keys in reverse order. /// /// The array to be sorted. /// The method to be used for comparison of keys. /// Resets 's intrinsic enumerator. /// True on success, False on failure. [ImplementsFunction("krsort")] public static bool KeyReverseSort([PhpRw] PhpArray array, ComparisonMethod comparisonMethod) { if (array == null) { PhpException.ReferenceNull("array"); return false; } array.Sort(GetComparer(comparisonMethod, SortingOrder.Descending, true)); array.RestartIntrinsicEnumerator(); return true; } #endregion #region usort,uasort,uksort /// /// Sorts an array using user comparison callback for comparing values. /// /// The class context used to bind the callback. /// The array to be sorted. /// The user callback to be used for comparison of values. /// Resets 's intrinsic enumerator. /// True on success, False on failure. [ImplementsFunction("usort", FunctionImplOptions.NeedsClassContext)] public static bool UserSort(PHP.Core.Reflection.DTypeDesc caller, [PhpRw] PhpArray array, PhpCallback compare) { if (array == null) { PhpException.ReferenceNull("array"); return false; } if (!PhpArgument.CheckCallback(compare, caller, "compare", 0, false)) return false; // sorts array using callback for comparisons: array.Sort(new ValueComparer(new PhpUserComparer(compare), false)); array.ReindexAll(); array.RestartIntrinsicEnumerator(); return true; } /// /// Sorts an array user comparison callback method for comparing values preserving key-value associations. /// /// The class context used to bind the callback. /// The array to be sorted. /// The user callback to be used for comparison of values. /// Resets 's intrinsic enumerator. /// True on success, False on failure. [ImplementsFunction("uasort", FunctionImplOptions.NeedsClassContext)] public static bool UserAssocSort(PHP.Core.Reflection.DTypeDesc caller, [PhpRw] PhpArray array, PhpCallback compare) { if (array == null) { PhpException.ReferenceNull("array"); return false; } if (!PhpArgument.CheckCallback(compare, caller, "compare", 0, false)) return false; // sorts array using callback for comparisons: array.Sort(new ValueComparer(new PhpUserComparer(compare), false)); return true; } /// /// Sorts an array using user comparison callback for comparing keys. /// /// The class context used to bind the callback. /// The array to be sorted. /// The user callback to be used for comparison of values. /// Resets 's intrinsic enumerator. /// True on success, False on failure. [ImplementsFunction("uksort", FunctionImplOptions.NeedsClassContext)] public static bool UserKeySort(PHP.Core.Reflection.DTypeDesc caller, [PhpRw] PhpArray array, PhpCallback compare) { if (array == null) { PhpException.ReferenceNull("array"); return false; } if (!PhpArgument.CheckCallback(compare, caller, "compare", 0, false)) return false; array.Sort(new KeyComparer(new PhpUserComparer(compare), false)); return true; } #endregion #region natsort,natcasesort /// /// Sorts an array using case sensitive natural comparison method for comparing /// values preserving key-value association. /// /// The array to be sorted. /// Resets 's intrinsic enumerator. /// True on success, False on failure. [ImplementsFunction("natsort")] public static bool NaturalSort([PhpRw] PhpArray array) { if (array == null) { PhpException.ReferenceNull("array"); return false; } array.Sort(new ValueComparer(PhpNaturalComparer.Default, false)); return true; } /// /// Sorts an array using case insensitive natural comparison method for /// comparing values preserving key-value association. /// /// The array to be sorted. /// Resets 's intrinsic enumerator. /// True on success, False on failure. [ImplementsFunction("natcasesort")] public static bool NaturalCaseInsensitiveSort([PhpRw] PhpArray array) { if (array == null) { PhpException.ReferenceNull("array"); return false; } array.Sort(new ValueComparer(PhpNaturalComparer.CaseInsensitive, false)); return true; } #endregion #region array_multisort /// /// Resolves arguments passed to method according to PHP manual for array_multisort function. /// /// The first argument of . /// The rest of arguments of . /// An array to be filled with arrays passed in all arguments. /// An array to be filled with comparers defined by arguments. /// /// Arrays and comparers can be a null reference. In such a case only number of arrays to be sorted /// is returned. Otherwise, is filled with these arrays and /// with comparers defined by appropriate arguments. /// private static int MultiSortResolveArgs( PhpArray first, object[] args, PhpArray[] arrays, IComparer>[] comparers) { PhpArray array; int col_count = 1; int row_count = first.Count; ComparisonMethod method = ComparisonMethod.Undefined; SortingOrder order = SortingOrder.Undefined; if (arrays != null) { arrays[0] = first; } for (int i = 0; i < args.Length; i++) { if ((array = args[i] as PhpArray) != null) { // checks whether the currently processed array has the same length as the first one: if (array.Count != row_count) { PhpException.Throw(PhpError.Warning, CoreResources.GetString("lengths_are_different", "the first array", String.Format("{0}-th array", col_count))); return 0; } // sets next array: if (arrays != null) arrays[col_count] = array; // sets comparer of the previous array: if (comparers != null) comparers[col_count - 1] = GetComparer(method, order, false); // resets values: method = ComparisonMethod.Undefined; order = SortingOrder.Undefined; col_count++; } else if (args[i] is int) { switch ((int)args[i]) { case (int)ComparisonMethod.Numeric: case (int)ComparisonMethod.Regular: case (int)ComparisonMethod.String: case (int)ComparisonMethod.LocaleString: if (method != ComparisonMethod.Undefined) { PhpException.Throw(PhpError.Warning, LibResources.GetString("sorting_flag_already_specified", i)); return 0; } else { method = (ComparisonMethod)args[i]; } break; case (int)SortingOrder.Ascending: case (int)SortingOrder.Descending: if (order != SortingOrder.Undefined) { PhpException.Throw(PhpError.Warning, LibResources.GetString("sorting_flag_already_specified", i)); return 0; } else { order = (SortingOrder)args[i]; } break; default: PhpException.Throw(PhpError.Warning, LibResources.GetString("argument_not_array_or_sort_flag", i)); return 0; } } else { PhpException.Throw(PhpError.Warning, LibResources.GetString("argument_not_array_or_sort_flag", i)); return 0; } } // sets comparer of the previous array: if (comparers != null) comparers[col_count - 1] = GetComparer(method, order, false); return col_count; } /// /// Sort multiple arrays. /// /// The first array to be sorted. /// Arrays to be sorted along with flags affecting sort order and /// comparison methods to be used. See PHP manual for more details. /// Whether arrays were sorted successfully. /// Reindexes integer keys in the sorted arrays and restarts their intrinsic enumerators. /// is a null reference (Warning). /// Arrays has different lengths (Warning). /// Invalid sorting flags (Warning). /// Multiple sorting flags applied on single array (Warning). [ImplementsFunction("array_multisort")] public static bool MultiSort([PhpRw] PhpArray first, params object[] args) { // some "args" are also [PhpRw] but which ones is compile time unknown // but it is not neccessary to mark them since this attribute has no important effect if (first == null) { PhpException.ArgumentNull("first"); } IComparer>[] comparers; PhpArray[] arrays; int length = MultiSortResolveArgs(first, args, null, null); if (length == 0) { return false; } if (length == 1) { comparers = new IComparer>[1]; MultiSortResolveArgs(first, args, null, comparers); first.Sort(comparers[0]); first.ReindexIntegers(0); first.RestartIntrinsicEnumerator(); return true; } arrays = new PhpArray[length]; comparers = new IComparer>[length]; MultiSortResolveArgs(first, args, arrays, comparers); PhpHashtable.Sort(arrays, comparers); for (int i = 0; i < length; i++) { arrays[i].ReindexIntegers(0); arrays[i].RestartIntrinsicEnumerator(); } return true; } #endregion #region array_u?(diff|intersect)(_u?assoc)?, array_(diff|intersect)_u?key /// /// Internal method common for all functions. /// private static PhpArray SetOperation(SetOperations op, PhpArray array, PhpArray[] arrays, IComparer> comparer) { if (array == null) { PhpException.ArgumentNull("array"); return null; } if (arrays == null || arrays.Length == 0) { PhpException.InvalidArgumentCount(null, null); return null; } Debug.Assert(comparer != null); PhpArray result = new PhpArray(); array.SetOperation(op, arrays, comparer, result); // the result is inplace deeply copied on return to PHP code: result.InplaceCopyOnReturn = true; return result; } /// /// There have to be at least 1 value in . /// The last is converted to callback, the rest to arrays. /// private static bool SplitArraysAndComparers(int comparerCount, PhpArray array, object[] vars, out PhpArray[] arrays, out PhpCallback cmp1, out PhpCallback cmp2) { arrays = null; cmp1 = cmp2 = null; if (vars == null || vars.Length == 0) { PhpException.InvalidArgumentCount(null, null); return false; } // the first callback: cmp1 = Core.Convert.ObjectToCallback(vars[vars.Length - comparerCount]); if (!PhpArgument.CheckCallback(cmp1, PHP.Core.Reflection.UnknownTypeDesc.Singleton/*(J): TBD pass caller from library func when this will be performance issue*/, null, vars.Length - comparerCount + 3, false)) return false; // the second callback: if (comparerCount > 1) { cmp2 = Core.Convert.ObjectToCallback(vars[vars.Length - 1]); if (!PhpArgument.CheckCallback(cmp2, PHP.Core.Reflection.UnknownTypeDesc.Singleton/*(J): TBD pass caller from library func when this will be performance issue*/, null, vars.Length - comparerCount + 3, false)) return false; } // remaining arguments should be arrays: arrays = new PhpArray[vars.Length - comparerCount + 1]; arrays[0] = array; for (int i = 0; i < vars.Length - comparerCount; i++) { arrays[i + 1] = vars[i] as PhpArray; if (arrays[i + 1] == null) { PhpException.Throw(PhpError.Warning, LibResources.GetString("argument_not_array", i + 3)); return false; } } return true; } /// /// Computes the difference of arrays. /// /// The array from which to take items away. /// The arrays to be differentiated. /// The array containing all the entries of that are not present /// in any of the . /// Keys are preserved. Entries are considered to be equal iff values compared by /// by string comparison method are the same (see ). /// is a null reference. /// is a null reference or an empty array. [ImplementsFunction("array_diff")] [return: PhpDeepCopy] public static PhpArray Diff(PhpArray array, params PhpArray[] arrays) { return SetOperation(SetOperations.Difference, array, arrays, ValueComparer.String); } /// /// Computes the intersection of arrays. /// [ImplementsFunction("array_intersect")] [return: PhpDeepCopy] public static PhpArray Intersect(PhpArray array, params PhpArray[] arrays) { return SetOperation(SetOperations.Intersection, array, arrays, ValueComparer.String); } /// /// Computes the difference of arrays. /// /// The array from which to take items away. /// The arrays to be differentiated. /// The array containing all the entries of that are not present /// in any of the . /// Keys are preserved. Entries are considered to be equal iff they has the same keys and values /// according to string method comparison (see and ). /// is a null reference. /// is a null reference or an empty array. [ImplementsFunction("array_diff_assoc")] [return: PhpDeepCopy] public static PhpArray DiffAssoc(PhpArray array, params PhpArray[] arrays) { return SetOperation(SetOperations.Difference, array, arrays, new EntryComparer(PhpStringComparer.Default, false, PhpStringComparer.Default, false)); } /// /// Computes the intersection of arrays. /// [ImplementsFunction("array_intersect_assoc")] [return: PhpDeepCopy] public static PhpArray IntersectAssoc(PhpArray array, params PhpArray[] arrays) { return SetOperation(SetOperations.Intersection, array, arrays, new EntryComparer(PhpStringComparer.Default, false, PhpStringComparer.Default, false)); } /// /// Computes the difference of arrays. /// /// The array from which to take items away. /// The arrays to be differentiated. /// The array containing all the entries of that are not present /// in any of the . /// Entries are considered to be equal iff keys compared by /// by string comparison method are the same (see ). /// is a null reference. /// is a null reference or an empty array. [ImplementsFunction("array_diff_key")] [return: PhpDeepCopy] public static PhpArray DiffKey(PhpArray array, params PhpArray[] arrays) { return SetOperation(SetOperations.Difference, array, arrays, KeyComparer.String); } /// /// Computes the intersection of arrays. /// [ImplementsFunction("array_intersect_key")] [return: PhpDeepCopy] public static PhpArray IntersectKey(PhpArray array, params PhpArray[] arrays) { return SetOperation(SetOperations.Intersection, array, arrays, KeyComparer.String); } /// /// Computes the difference of arrays using a specified key comparer. /// [ImplementsFunction("array_diff_ukey")] [return: PhpDeepCopy] public static PhpArray DiffDiffUser(PhpArray array, PhpArray array0, params object[] arraysAndComparer) { PhpArray[] arrays; PhpCallback key_comparer, cmp; if (!SplitArraysAndComparers(1, array0, arraysAndComparer, out arrays, out key_comparer, out cmp)) return null; return SetOperation(SetOperations.Difference, array, arrays, new KeyComparer(new PhpUserComparer(key_comparer), false)); } /// /// Computes the intersection of arrays using a specified key comparer. /// [ImplementsFunction("array_intersect_ukey")] [return: PhpDeepCopy] public static PhpArray IntersectUserKey(PhpArray array, PhpArray array0, params object[] arraysAndComparer) { PhpArray[] arrays; PhpCallback key_comparer, cmp; if (!SplitArraysAndComparers(1, array0, arraysAndComparer, out arrays, out key_comparer, out cmp)) return null; return SetOperation(SetOperations.Intersection, array, arrays, new KeyComparer(new PhpUserComparer(key_comparer), false)); } /// /// Computes the difference of arrays using a specified comparer. /// [ImplementsFunction("array_udiff")] [return: PhpDeepCopy] public static PhpArray UserDiff(PhpArray array, PhpArray array0, params object[] arraysAndComparer) { PhpArray[] arrays; PhpCallback value_comparer, cmp; if (!SplitArraysAndComparers(1, array0, arraysAndComparer, out arrays, out value_comparer, out cmp)) return null; return SetOperation(SetOperations.Difference, array, arrays, new ValueComparer(new PhpUserComparer(value_comparer), false)); } /// /// Computes the intersection of arrays using a specified comparer. /// [ImplementsFunction("array_uintersect")] [return: PhpDeepCopy] public static PhpArray UserIntersect(PhpArray array, PhpArray array0, params object[] arraysAndComparer) { PhpArray[] arrays; PhpCallback value_comparer, cmp; if (!SplitArraysAndComparers(1, array0, arraysAndComparer, out arrays, out value_comparer, out cmp)) return null; return SetOperation(SetOperations.Intersection, array, arrays, new ValueComparer(new PhpUserComparer(value_comparer), false)); } /// /// Computes the difference of arrays using a specified comparer. /// [ImplementsFunction("array_udiff_assoc")] [return: PhpDeepCopy] public static PhpArray UserDiffAssoc(PhpArray array, PhpArray array0, params object[] arraysAndComparer) { PhpArray[] arrays; PhpCallback value_comparer, cmp; if (!SplitArraysAndComparers(1, array0, arraysAndComparer, out arrays, out value_comparer, out cmp)) return null; return SetOperation(SetOperations.Difference, array, arrays, new EntryComparer(PhpStringComparer.Default, false, new PhpUserComparer(value_comparer), false)); } /// /// Computes the intersection of arrays using a specified comparer. /// [ImplementsFunction("array_uintersect_assoc")] [return: PhpDeepCopy] public static PhpArray UserIntersectAssoc(PhpArray array, PhpArray array0, params object[] arraysAndComparer) { PhpArray[] arrays; PhpCallback value_comparer, cmp; if (!SplitArraysAndComparers(1, array0, arraysAndComparer, out arrays, out value_comparer, out cmp)) return null; return SetOperation(SetOperations.Intersection, array, arrays, new EntryComparer(PhpStringComparer.Default, false, new PhpUserComparer(value_comparer), false)); } /// /// Computes the difference of arrays using a specified comparer. /// [ImplementsFunction("array_diff_uassoc")] [return: PhpDeepCopy] public static PhpArray DiffUserAssoc(PhpArray array, PhpArray array0, params object[] arraysAndComparer) { PhpArray[] arrays; PhpCallback key_comparer, cmp; if (!SplitArraysAndComparers(1, array0, arraysAndComparer, out arrays, out key_comparer, out cmp)) return null; return SetOperation(SetOperations.Difference, array, arrays, new EntryComparer(new PhpUserComparer(key_comparer), false, PhpStringComparer.Default, false)); } /// /// Computes the intersection of arrays using a specified comparer. /// [ImplementsFunction("array_intersect_uassoc")] [return: PhpDeepCopy] public static PhpArray IntersectUserAssoc(PhpArray array, PhpArray array0, params object[] arraysAndComparer) { PhpArray[] arrays; PhpCallback key_comparer, cmp; if (!SplitArraysAndComparers(1, array0, arraysAndComparer, out arrays, out key_comparer, out cmp)) return null; return SetOperation(SetOperations.Intersection, array, arrays, new EntryComparer(new PhpUserComparer(key_comparer), false, PhpStringComparer.Default, false)); } /// /// Computes the difference of arrays using specified comparers. /// [ImplementsFunction("array_udiff_uassoc")] [return: PhpDeepCopy] public static PhpArray UserDiffUserAssoc(PhpArray array, PhpArray array0, params object[] arraysAndComparers) { PhpArray[] arrays; PhpCallback key_comparer, value_comparer; if (!SplitArraysAndComparers(2, array0, arraysAndComparers, out arrays, out value_comparer, out key_comparer)) return null; return SetOperation(SetOperations.Difference, array, arrays, new EntryComparer(new PhpUserComparer(key_comparer), false, new PhpUserComparer(value_comparer), false)); } /// /// Computes the intersection of arrays using specified comparers. /// [ImplementsFunction("array_uintersect_uassoc")] [return: PhpDeepCopy] public static PhpArray UserIntersectUserAssoc(PhpArray array, PhpArray array0, params object[] arraysAndComparers) { PhpArray[] arrays; PhpCallback key_comparer, value_comparer; if (!SplitArraysAndComparers(2, array0, arraysAndComparers, out arrays, out value_comparer, out key_comparer)) return null; return SetOperation(SetOperations.Intersection, array, arrays, new EntryComparer(new PhpUserComparer(key_comparer), false, new PhpUserComparer(value_comparer), false)); } #endregion #region array_merge, array_merge_recursive /// /// Merges one or more arrays. Integer keys are changed to new ones, string keys are preserved. /// Values associated with existing string keys are be overwritten. /// /// Arrays to be merged. /// The containing items from all . [ImplementsFunction("array_merge")] [return: PhpDeepCopy] public static PhpArray Merge(params PhpArray[] arrays) { // "arrays" argument is PhpArray[] => compiler generates code converting any value to PhpArray. // Note, PHP does reject non-array arguments. if (arrays == null || arrays.Length == 0) { PhpException.InvalidArgument("arrays", LibResources.GetString("arg:null_or_empty")); return null; } PhpArray result = new PhpArray(arrays[0].IntegerCount, arrays[0].StringCount); for (int i = 0; i < arrays.Length; i++) { if (arrays[i] != null) { using (var enumerator = arrays[i].GetFastEnumerator()) while (enumerator.MoveNext()) { if (enumerator.CurrentKey.IsString) result[enumerator.CurrentKey] = enumerator.CurrentValue; else result.Add(enumerator.CurrentValue); } } } // results is inplace deeply copied if returned to PHP code: result.InplaceCopyOnReturn = true; return result; } /// /// Merges arrays recursively. /// /// The first array to merge. /// The next arrays to merge. /// An array containing items of all specified arrays. /// /// Integer keys are reset so there cannot be a conflict among them. /// Conflicts among string keys are resolved by merging associated values into arrays. /// Merging is propagated recursively. Merged values are dereferenced. References are /// preserved in non-merged values. /// /// Some array is a null reference (Warning). [ImplementsFunction("array_merge_recursive")] public static PhpArray MergeRecursiveDc(PhpArray array, params PhpArray[] arrays) { if (array == null || arrays == null) { PhpException.ArgumentNull((array == null) ? "array" : "arrays"); return null; } for (int i = 0; i < arrays.Length; i++) { if (arrays[i] == null) { PhpException.Throw(PhpError.Warning, LibResources.GetString("argument_not_array", i + 2)); return null; } } return MergeRecursive(array, true, arrays); } /// /// Merges arrays recursively. /// /// The first array to merge. /// The next arrays to merge. /// Whether to deep copy merged items. /// An array containing items of all specified arrays. public static PhpArray MergeRecursive(PhpArray array, bool deepCopy, params PhpArray[] arrays) { if (array == null) return null; PhpArray result = new PhpArray(); array.AddTo(result, deepCopy); if (arrays != null) { for (int i = 0; i < arrays.Length; i++) { if (arrays[i] != null) { if (!MergeRecursiveInternal(result, arrays[i], deepCopy)) PhpException.Throw(PhpError.Warning, LibResources.GetString("recursion_detected")); } } } return result; } /// /// Adds items of "array" to "result" merging those whose string keys are the same. /// private static bool MergeRecursiveInternal(PhpArray/*!*/ result, PhpArray/*!*/ array, bool deepCopy) { foreach (KeyValuePair entry in array) { if (entry.Key.IsString) { if (result.ContainsKey(entry.Key)) { // the result array already contains the item => merging take place object xv = result[entry.Key]; object yv = entry.Value; // source item: object x = PhpVariable.Dereference(xv); object y = PhpVariable.Dereference(yv); PhpArray ax = x as PhpArray; PhpArray ay = y as PhpArray; // if x is not a reference then we can reuse the ax array for the result // since it has been deeply copied when added to the resulting array: PhpArray item_result = (deepCopy && x == xv && ax != null) ? ax : new PhpArray(); if (ax != null && ay != null) { if (ax != item_result) ax.AddTo(item_result, deepCopy); if (ax.Visited && ay.Visited) return false; ax.Visited = true; ay.Visited = true; // merges ay to the item result (may lead to stack overflow, // but only with both arrays recursively referencing themselves - who cares?): bool finite = MergeRecursiveInternal(item_result, ay, deepCopy); ax.Visited = false; ay.Visited = false; if (!finite) return false; } else { if (ax != null) { if (ax != item_result) ax.AddTo(item_result, deepCopy); } else { /*if (x != null)*/ item_result.Add((deepCopy) ? PhpVariable.DeepCopy(x) : x); } if (ay != null) ay.AddTo(item_result, deepCopy); else /*if (y != null)*/ item_result.Add((deepCopy) ? PhpVariable.DeepCopy(y) : y); } result[entry.Key] = item_result; } else { // PHP does no dereferencing when items are not merged: result.Add(entry.Key, (deepCopy) ? PhpVariable.DeepCopy(entry.Value) : entry.Value); } } else { // PHP does no dereferencing when items are not merged: result.Add((deepCopy) ? PhpVariable.DeepCopy(entry.Value) : entry.Value); } } return true; } #endregion #region array_change_key_case /// /// Converts string keys in to lower case. /// /// The to be converted. /// The copy of with all string keys lower cased. /// Integer keys as well as all values remain unchanged. public static PhpArray StringKeysToLower(PhpArray/*!*/ array) { if (array == null) { PhpException.ArgumentNull("array"); return null; } PhpArray result = new PhpArray(); System.Globalization.TextInfo textInfo = null; // cache current culture to avoid repetitious CurrentCulture.get foreach (KeyValuePair entry in array) { if (entry.Key.IsString) { if (textInfo == null) textInfo = System.Globalization.CultureInfo.CurrentCulture.TextInfo; result[textInfo.ToLower(entry.Key.String)] = entry.Value; } else result[entry.Key] = entry.Value; } return result; } /// /// Converts string keys in to upper case. /// /// The to be converted. /// The copy of with all string keys upper cased. /// Integer keys as well as all values remain unchanged. public static PhpArray StringKeysToUpper(PhpArray/*!*/ array) { if (array == null) { PhpException.ArgumentNull("array"); return null; } PhpArray result = new PhpArray(); foreach (KeyValuePair entry in array) { if (entry.Key.IsString) result[entry.Key.String.ToUpper()] = entry.Value; else result[entry.Key] = entry.Value; } return result; } /// /// Converts string keys in to lower case. /// /// The to be converted. /// The copy of with all string keys lower cased. /// Integer keys as well as all values remain unchanged. [ImplementsFunction("array_change_key_case")] [return: PhpDeepCopy] public static PhpArray ChangeKeyCase(PhpArray/*!*/ array) { PhpArray result = StringKeysToLower(array); result.InplaceCopyOnReturn = true; return result; } /// /// Converts string keys in to specified case. /// /// The to be converted. /// The to convert keys to. /// The copy of with all string keys lower cased. /// Integer keys as well as all values remain unchanged. [ImplementsFunction("array_change_key_case")] [return: PhpDeepCopy] public static PhpArray ChangeKeyCase(PhpArray array, LetterCase keyCase) { PhpArray result; switch (keyCase) { case LetterCase.Lower: result = StringKeysToLower(array); break; case LetterCase.Upper: result = StringKeysToUpper(array); break; default: PhpException.InvalidArgument("keyCase"); goto case LetterCase.Upper; } result.InplaceCopyOnReturn = true; return result; } #endregion #region array_chunk /// /// Splits an array into chunks. /// /// The array to be split. /// The number of items in each chunk (except for the last one where can be lesser items). /// The array containing chunks indexed by integers starting from zero, /// all keys in chunks are reindexed starting from zero. /// Chunks will contain deep copies of items. [ImplementsFunction("array_chunk")] public static PhpArray ChunkDc(PhpArray array, int size) { return ChunkInternal(array, size, false, true); } /// /// Splits an array into chunks. /// /// The array to be split. /// The number of items in each chunk (except for the last one where can be lesser items). /// Whether to preserve keys in chunks. /// The array containing chunks indexed by integers starting from zero. /// Chunks will contain deep copies of items. [ImplementsFunction("array_chunk")] public static PhpArray ChunkDc(PhpArray array, int size, bool preserveKeys) { return ChunkInternal(array, size, preserveKeys, true); } /// /// Splits an array into chunks. /// /// The array to be split. /// The number of items in each chunk (except for the last one where can be lesser items). /// The array containing chunks indexed by integers starting from zero, /// all keys in chunks are reindexed starting from zero. public static PhpArray Chunk(PhpArray array, int size) { return ChunkInternal(array, size, false, false); } /// /// Splits an array into chunks. /// /// The array to be split. /// The number of items in each chunk (except for the last one where can be lesser items). /// Whether to preserve keys in chunks. /// The array containing chunks indexed by integers starting from zero. public static PhpArray Chunk(PhpArray array, int size, bool preserveKeys) { return ChunkInternal(array, size, preserveKeys, false); } /// /// Internal version of with deep-copy option. /// internal static PhpArray ChunkInternal(PhpArray array, int size, bool preserveKeys, bool deepCopy) { if (array == null) { PhpException.ArgumentNull("array"); return null; } if (size <= 0) { PhpException.InvalidArgument("array", LibResources.GetString("arg:negative_or_zero")); return null; } // nothing to do: if (array.Count == 0) return new PhpArray(); // number of chunks: int count = (array.Count - 1) / size + 1; // = ceil(Count/size): PhpArray chunk; PhpArray result = new PhpArray(count, 0); IEnumerator> iterator; // if deep-copies are required, wrapp iterator by enumerator making deep copies: if (deepCopy) iterator = PhpVariable.EnumerateDeepCopies(array).GetEnumerator(); else iterator = array.GetEnumerator(); iterator.MoveNext(); // all chunks except for the last one: for (int i = 0; i < count - 1; i++) { chunk = new PhpArray(size, 0); if (preserveKeys) { for (int j = 0; j < size; j++, iterator.MoveNext()) chunk.Add(iterator.Current.Key, iterator.Current.Value); } else { for (int j = 0; j < size; j++, iterator.MoveNext()) chunk.Add(iterator.Current.Value); } result.Add(chunk); } // the last chunk: chunk = new PhpArray((size <= array.Count) ? size : array.Count, 0); if (preserveKeys) { do { chunk.Add(iterator.Current.Key, iterator.Current.Value); } while (iterator.MoveNext()); } else { do { chunk.Add(iterator.Current.Value); } while (iterator.MoveNext()); } result.Add(chunk); // no deep copy is needed since it has already been done on chunks: return result; } #endregion #region array_count_values, array_unique /// /// Counts frequency of each value in an array. /// /// The array which values to count. /// The array which keys are values of and values are their frequency. /// /// Only and values are counted. /// Note, string numbers (e.g. "10") and their integer equivalents (e.g. 10) are counted separately. /// /// is a null reference. /// A value is neither nor . [ImplementsFunction("array_count_values")] public static PhpArray CountValues(PhpArray array) { if (array == null) { PhpException.ArgumentNull("array"); return null; } string skey; PhpArray result = new PhpArray(); IEnumerator iterator = array.Values.GetEnumerator(); while (iterator.MoveNext()) { // dereferences value: object val = PhpVariable.Dereference(iterator.Current); if (val is int) { int ikey = (int)val; object q = result[ikey]; result[ikey] = (q == null) ? 1 : (int)q + 1; } else if ((skey = PhpVariable.AsString(val)) != null) { object q = result[skey]; result[skey] = (q == null) ? 1 : (int)q + 1; } else { PhpException.Throw(PhpError.Warning, LibResources.GetString("neither_string_nor_integer_value", "count")); } } // no need to deep copy (values are ints): return result; } public enum ArrayUniqueSortFlags { /// /// compare items normally (don't change types) /// [ImplementsConstant("SORT_REGULAR")] Regular = 0, /// /// compare items numerically /// [ImplementsConstant("SORT_NUMERIC")] Numeric = 1, /// /// compare items as strings, default /// [ImplementsConstant("SORT_STRING")] String = 2, /// /// compare items as strings, based on the current locale. /// Added in PHP 4.4.0 and 5.0.2. Before PHP 6, it uses the system locale, /// which can be changed using setlocale(). Since PHP 6, you must use the i18n_loc_set_default() function. /// [ImplementsConstant("SORT_LOCALE_STRING")] LocaleString = 5, } /// /// Removes duplicate values from an array. /// /// The array which duplicate values to remove. /// A copy of without duplicated values. /// /// Values are compared using string comparison method (). /// /// is a null reference. [ImplementsFunction("array_unique")] [return: PhpDeepCopy] public static PhpArray Unique(PhpArray array) { return Unique(array, ArrayUniqueSortFlags.String); } /// /// Removes duplicate values from an array. /// /// The array which duplicate values to remove. /// Specifies how the values are compared to be identical. /// A copy of without duplicated values. /// /// Values are compared using string comparison method (). /// /// is a null reference. [ImplementsFunction("array_unique")] [return: PhpDeepCopy] public static PhpArray Unique(PhpArray array, ArrayUniqueSortFlags sortFlags /*= String*/) { if (array == null) { PhpException.ArgumentNull("array"); return null; } IComparer comparer; switch(sortFlags) { case ArrayUniqueSortFlags.Regular: comparer = PhpComparer.Default; break; case ArrayUniqueSortFlags.Numeric: comparer = PhpNumericComparer.Default; break; case ArrayUniqueSortFlags.String: comparer = PhpStringComparer.Default; break; case ArrayUniqueSortFlags.LocaleString: default: PhpException.ArgumentValueNotSupported("sortFlags", (int)sortFlags); return null; } PhpArray result = new PhpArray(array.Count); HashSet/*!*/identitySet = new HashSet(new ObjectEqualityComparer(comparer)); // get only unique values - first found using (var enumerator = array.GetFastEnumerator()) while (enumerator.MoveNext()) { if (identitySet.Add(PhpVariable.Dereference(enumerator.CurrentValue))) result.Add(enumerator.Current); } result.InplaceCopyOnReturn = true; return result; } #endregion #region array_flip /// /// Swaps all keys and their associated values in an array. /// /// The array. /// An array containing entries which keys are values from the /// and which values are the corresponding keys. /// /// /// Values which are not of type nor are skipped /// and for each such value a warning is reported. If there are more entries with the same /// value in the the last key is considered others are ignored. /// String keys are converted using . /// /// /// Unlike PHP this method doesn't return false on failure but a null reference. /// This is because it fails only if is a null reference. /// /// /// is a null reference (Warning). /// A value is neither nor (Warning). [ImplementsFunction("array_flip")] public static PhpArray Flip(PhpArray array) { if (array == null) { PhpException.ArgumentNull("array"); return null; } string skey; PhpArray result = new PhpArray(); foreach (KeyValuePair entry in array) { // dereferences value: object val = PhpVariable.Dereference(entry.Value); if (val is int) { result[(int)val] = entry.Key.Object; } else if ((skey = PhpVariable.AsString(val)) != null) { result[Core.Convert.StringToArrayKey(skey)] = entry.Key.Object; } else { PhpException.Throw(PhpError.Warning, LibResources.GetString("neither_string_nor_integer_value", "flip")); } } // no need to deep copy because values are ints/strings only (<= keys were int/strings only): return result; } #endregion #region array_keys, array_values, array_combine /// /// Retrieves an array of keys contained in a given array. /// /// An array which keys to get. /// of 's keys. /// Keys in returned array are successive integers starting from zero. /// is a null reference. [ImplementsFunction("array_keys")] public static PhpArray Keys(PhpArray array) { if (array == null) { PhpException.ArgumentNull("array"); return null; } // no need to make a deep copy since keys are immutable objects (strings, ints): var result = new PhpArray(array.Count); using (var enumerator = array.GetFastEnumerator()) while (enumerator.MoveNext()) result.AddToEnd(enumerator.CurrentKey.Object); return result; } /// /// Retrieves an array of some keys contained in a given array. /// /// An array which keys to get. /// Only the keys for this value are returned. /// Values are compared using regular comparison method (). /// An array of keys being associated with specified value. /// Keys in returned array are successive integers starting from zero. /// is a null reference. [ImplementsFunction("array_keys")] public static PhpArray Keys(PhpArray array, object searchValue) { return Keys(array, searchValue, false); } /// /// Retrieves an array of some keys contained in a given array. /// /// An array which keys to get. /// Only the keys for this value are returned. /// Values are compared using regular comparison method (). /// If true, uses strict comparison method (operator "==="). /// An array of keys being associated with specified value. /// Keys in returned array are successive integers starting from zero. /// is a null reference. [ImplementsFunction("array_keys")] public static PhpArray Keys(PhpArray array, object searchValue, bool strict) { if (array == null) { PhpException.ArgumentNull("array"); return null; } PhpArray result = new PhpArray(); if (!strict) { using (var enumerator = array.GetFastEnumerator()) while (enumerator.MoveNext()) { if (PhpComparer.CompareEq(enumerator.CurrentValue, searchValue)) result.AddToEnd(enumerator.CurrentKey.Object); } } else { using (var enumerator = array.GetFastEnumerator()) while (enumerator.MoveNext()) { if (Operators.StrictEquality(enumerator.CurrentValue, searchValue)) result.AddToEnd(enumerator.CurrentKey.Object); } } // no need to make a deep copy since keys are immutable objects (strings, ints): return result; } /// /// Retrieves an array of values contained in a given array. /// /// An array which values to get. /// A copy of with all keys indexed starting from zero. /// is a null reference. /// Doesn't dereference PHP references. [ImplementsFunction("array_values")] [return: PhpDeepCopy] public static PhpArray Values(PhpArray array) { if (array == null) { PhpException.ArgumentNull("array"); return null; } // references are not dereferenced: PhpArray result = new PhpArray(array.Count); using (var enumerator = array.GetFastEnumerator()) while (enumerator.MoveNext()) result.AddToEnd(enumerator.CurrentValue); // result is inplace deeply copied on return to PHP code: result.InplaceCopyOnReturn = true; return result; } /// /// Creates an array using one array for its keys and the second for its values. /// /// The keys of resulting array. /// The values of resulting array. /// An array with keys from values and values /// from values. /// /// and should have the same length (zero is /// adminssible - an empty array is returned). /// Keys are converted using before hashed to resulting array. /// If more keys has the same value after conversion the last one is used. /// If a key is not a legal array key it is skipped. /// /// or is a null reference. /// and has different length. /// Doesn't dereference PHP references. [ImplementsFunction("array_combine")] [return: PhpDeepCopy] public static PhpArray Combine(PhpArray keys, PhpArray values) { if (keys == null) { PhpException.ArgumentNull("keys"); return null; } if (values == null) { PhpException.ArgumentNull("values"); return null; } if (keys.Count != values.Count) { PhpException.Throw(PhpError.Warning, CoreResources.GetString("lengths_are_different", "keys", "values")); return null; } PhpArray result = new PhpArray(); IEnumerator k_iterator = keys.Values.GetEnumerator(); IEnumerator v_iterator = values.Values.GetEnumerator(); while (k_iterator.MoveNext()) { v_iterator.MoveNext(); // invalid keys are skipped, values are not dereferenced: IntStringKey key; if (PHP.Core.Convert.ObjectToArrayKey(k_iterator.Current, out key)) result[key] = v_iterator.Current; } // result is inplace deeply copied on return to PHP code: result.InplaceCopyOnReturn = true; return result; } #endregion #region array_sum, array_product, array_reduce /// /// Sums all values in an array. Each value is converted to a number in the same way it is done by PHP. /// /// Thrown if the argument is null. /// /// An integer, if all items are integers or strings converted to integers and the result is in integer range. /// A double, otherwise. /// [ImplementsFunction("array_sum")] public static object Sum(PhpArray array) { if (array == null) { PhpException.ArgumentNull("array"); return 0.0; } if (array.Count == 0) return 0; double dval; int ival; long lval; double dresult = 0.0; long lresult = 0; bool overflown = false; Core.Convert.NumberInfo info_result = 0; foreach (KeyValuePair entry in array) { Core.Convert.NumberInfo info; info = Core.Convert.ObjectToNumber(entry.Value, out ival, out lval, out dval) & Core.Convert.NumberInfo.TypeMask; try { dresult += dval; if (!overflown) lresult += lval; } catch (OverflowException) { overflown = true; } info_result |= info; } if ((info_result & Core.Convert.NumberInfo.Double) != 0) return dresult; if ((info_result & Core.Convert.NumberInfo.LongInteger) != 0 || lresult < Int32.MinValue || lresult > Int32.MaxValue) { if (overflown) return dresult; else return lresult; } return (int)lresult; } /// /// Computes a product of all values in an array. /// Each value is converted to a number in the same way it is done by PHP. /// /// Thrown if the argument is null. /// /// An integer, if all items are integers or strings converted to integers and the result is in integer range. /// A double, otherwise. /// [ImplementsFunction("array_product")] public static object Product(PhpArray array) { if (array == null) { PhpException.ArgumentNull("array"); return 0; } if (array.Count == 0) return 0; double dval; int ival; long lval; double dresult = 1.0; long lresult = 1; bool overflown = false; Core.Convert.NumberInfo info_result = 0; foreach (KeyValuePair entry in array) { Core.Convert.NumberInfo info; info = Core.Convert.ObjectToNumber(entry.Value, out ival, out lval, out dval) & Core.Convert.NumberInfo.TypeMask; try { dresult *= dval; if (!overflown) lresult *= lval; } catch (OverflowException) { overflown = true; } info_result |= info; } if ((info_result & Core.Convert.NumberInfo.Double) != 0) return dresult; if ((info_result & Core.Convert.NumberInfo.LongInteger) != 0 || lresult < Int32.MinValue || lresult > Int32.MaxValue) { if (overflown) return dresult; else return lresult; } return (int)lresult; } [ImplementsFunction("array_reduce", FunctionImplOptions.NeedsClassContext)] public static object Reduce(PHP.Core.Reflection.DTypeDesc caller, [PhpRw] PhpArray array, PhpCallback function) { return Reduce(caller, array, function, null); } [ImplementsFunction("array_reduce", FunctionImplOptions.NeedsClassContext)] public static object Reduce(PHP.Core.Reflection.DTypeDesc caller, [PhpRw] PhpArray array, PhpCallback function, [PhpDeepCopy] object initialValue) { if (array == null) { PhpException.ReferenceNull("array"); return null; } if (!PhpArgument.CheckCallback(function, caller, "function", 0, false)) return null; if (array.Count == 0) return initialValue; object[] args = new object[] { initialValue, null }; PhpReference holder = new PhpReference(); foreach (KeyValuePair entry in array) { object item = entry.Value; PhpReference ref_item = item as PhpReference; // array item is a reference: if (ref_item != null) { args[1] = item; args[0] = function.Invoke(args); } else { // array item is not a reference: holder.Value = item; args[1] = holder; args[0] = function.Invoke(args); // updates an item if it has been changed: if (item != holder.Value) array[entry.Key] = holder.Value; } } // dereferences the last returned value: return PhpVariable.Dereference(args[0]); } #endregion #region array_walk, array_walk_recursive /// /// Applies a user function or method on each element of a specified array or dictionary. /// /// true. /// See for details. /// or are null references. [ImplementsFunction("array_walk", FunctionImplOptions.NeedsClassContext)] public static bool Walk(PHP.Core.Reflection.DTypeDesc caller, [PhpRw] PhpHashtable array, PhpCallback function) { return Walk(caller, array, function, null); } /// /// Applies a user function or method on each element (value) of a specified dictionary. /// /// Current class context. /// The array (or generic dictionary) to walk through. /// /// The callback called for each element of . /// The callback is assumed to have two or three parameters: /// /// /// /// A value of dictionary entry. Can be specified with & modifier which propagates any changes /// make to the argument back to the entry. The dictionary can be changed in this way. /// /// /// A key of dictionary entry. /// /// Value of parameter if it is not a null reference. /// Otherwise, the callback is assumed to have two parameters only. /// /// /// /// An additional parameter passed to as its third parameter. /// true. /// or are null references. [ImplementsFunction("array_walk", FunctionImplOptions.NeedsClassContext)] public static bool Walk(PHP.Core.Reflection.DTypeDesc caller, [PhpRw] PhpHashtable array, PhpCallback callback, object data) { object[] args = PrepareWalk(array, callback, data); if (args == null) return false; foreach (KeyValuePair entry in array) { VisitEntryOnWalk(caller, entry, array, callback, args); } return true; } /// /// Applies a user function or method on each element of a specified array recursively. /// /// true. /// See for details. /// or are null references. [ImplementsFunction("array_walk_recursive", FunctionImplOptions.NeedsClassContext)] public static bool WalkRecursive(PHP.Core.Reflection.DTypeDesc caller, [PhpRw] PhpHashtable array, PhpCallback callback) { return WalkRecursive(caller, array, callback, null); } /// /// Applies a user function or method on each element (value) of a specified dictionary recursively. /// /// Current class context. /// The array to walk through. /// The callback called for each element of . /// An additional parameter passed to as its third parameter. /// or are null references. /// . [ImplementsFunction("array_walk_recursive", FunctionImplOptions.NeedsClassContext)] public static bool WalkRecursive(PHP.Core.Reflection.DTypeDesc caller, [PhpRw] PhpHashtable array, PhpCallback callback, object data) { object[] args = PrepareWalk(array, callback, data); if (args == null) return false; using (PhpHashtable.RecursiveEnumerator iterator = array.GetRecursiveEnumerator(true,false)) { while (iterator.MoveNext()) { // visits the item unless it is an array or a reference to an array: PhpReference ref_value = iterator.Current.Value as PhpReference; if (!(iterator.Current.Value is PhpHashtable || (ref_value != null && ref_value.Value is PhpHashtable))) VisitEntryOnWalk(caller, iterator.Current, iterator.CurrentTable, callback, args); } } return true; } /// /// Prepares a walk for and methods. /// /// or are null references. private static object[] PrepareWalk(IDictionary array, PhpCallback callback, object data) { if (callback == null) { PhpException.ArgumentNull("callback"); return null; } if (array == null) { PhpException.ArgumentNull("array"); return null; } // prepares an array of callback's arguments (no deep copying needed because it is done so in callback): if (data != null) return new object[3] { new PhpReference(), null, data }; else return new object[2] { new PhpReference(), null }; } /// /// Visits an entyr of array which or is walking through. /// private static void VisitEntryOnWalk(PHP.Core.Reflection.DTypeDesc caller, KeyValuePair entry, IDictionary array, PhpCallback callback, object[] args) { PhpReference ref_item = entry.Value as PhpReference; // fills arguments for the callback: ((PhpReference)args[0]).Value = (ref_item != null) ? ref_item.Value : entry.Value; args[1] = entry.Key.Object; // invoke callback: Core.Convert.ObjectToBoolean(callback.Invoke(caller, args)); // loads a new value from a reference: if (ref_item != null) { ref_item.Value = ((PhpReference)args[0]).Value; } else { array[entry.Key] = ((PhpReference)args[0]).Value; } } #endregion #region array_filter /// /// Retuns the specified array. /// see http://php.net/manual/en/function.array-filter.php /// /// The caller argument is here just because of the second Filter() method. Phalanger shares the function properties over the overloads. [ImplementsFunction("array_filter", FunctionImplOptions.NeedsClassContext)] [return: PhpDeepCopy] public static PhpArray Filter(PHP.Core.Reflection.DTypeDesc _, PhpArray array) { var _result = new PhpArray(); using (var enumerator = array.GetFastEnumerator()) while (enumerator.MoveNext()) if (Core.Convert.ObjectToBoolean(enumerator.CurrentValue)) _result.Add(enumerator.CurrentKey, enumerator.CurrentValue); return _result; } /// /// Filters an array using a specified callback. /// /// Current class context. /// The array to be filtered. /// /// The callback called on each value in the . /// If the callback returns value convertible to true the value is copied to the resulting array. /// Otherwise, it is ignored. /// /// An array of unfiltered items. [ImplementsFunction("array_filter", FunctionImplOptions.NeedsClassContext)] [return: PhpDeepCopy] public static PhpArray Filter(PHP.Core.Reflection.DTypeDesc caller, PhpArray array, PhpCallback callback) { if (callback == null) { PhpException.ArgumentNull("callback"); return null; } if (array == null) { PhpException.ArgumentNull("array"); return null; } PhpArray result = new PhpArray(); object[] args = new object[1]; foreach (KeyValuePair entry in array) { // no deep copying needed because it is done so in callback: args[0] = entry.Value; // adds entry to the resulting array if callback returns true: if (Core.Convert.ObjectToBoolean(callback.Invoke(caller, args))) { result.Add(entry.Key, entry.Value); } } // values should be inplace deeply copied: result.InplaceCopyOnReturn = true; return result; } #endregion #region array_map /// /// Default callback for . /// /// Unused. /// A PHP stack. /// A containing items on the stack (passed as arguments). private static object MapIdentity(object instance, PhpStack stack) { PhpArray result = new PhpArray(stack.ArgCount, 0); for (int i = 1; i <= stack.ArgCount; i++) { result.Add(PhpVariable.Copy(stack.PeekValueUnchecked(i), CopyReason.PassedByCopy)); } stack.RemoveFrame(); return result; } /// /// Applies a callback function on specified tuples one by one storing its results to an array. /// /// The class context used to resolve given callback. /// /// A callback to be called on tuples. The number of arguments should be the same as /// the number of arrays specified by . /// Arguments passed by reference modifies elements of . /// A null means default callback which makes integer indexed arrays from the tuples is used. /// /// Arrays where to load tuples from. /// An array of return values of the callback /// keyed by keys of the if it /// is a single array or by integer keys starting from 0. /// /// /// In the i-th call the j-th parameter of the callback will be /// the i-th value of the j-the array or a null if that array /// has less then i entries. /// /// /// If the callback assigns a value to a parameter passed by reference in the i-the call /// and the respective array contains at least i elements the assigned value is propagated /// to the array. /// /// [ImplementsFunction("array_map", FunctionImplOptions.NeedsClassContext)] public static PhpArray Map(PHP.Core.Reflection.DTypeDesc caller, PhpCallback map, [PhpRw] params PhpArray[] arrays) { if (!PhpArgument.CheckCallback(map, caller, "map", 0, true)) return null; if (arrays == null || arrays.Length == 0) { PhpException.InvalidArgument("arrays", LibResources.GetString("arg:null_or_emtpy")); return null; } // if callback has not been specified uses the default one: if (map == null) map = new PhpCallback(new RoutineDelegate(MapIdentity), ScriptContext.CurrentContext); int count = arrays.Length; bool preserve_keys = count == 1; PhpReference[] args = new PhpReference[count]; IEnumerator>[] iterators = new IEnumerator>[count]; PhpArray result; // initializes iterators and args array, computes length of the longest array: int max_count = 0; for (int i = 0; i < arrays.Length; i++) { var array = arrays[i]; if (array == null) { PhpException.Throw(PhpError.Warning, LibResources.GetString("argument_not_array", i + 2));// +2 (first arg is callback) return null; } args[i] = new PhpReference(); iterators[i] = array.GetEnumerator(); if (array.Count > max_count) max_count = array.Count; } // keys are preserved in a case of a single array and re-indexed otherwise: if (preserve_keys) result = new PhpArray(arrays[0].IntegerCount, arrays[0].StringCount); else result = new PhpArray(max_count, 0); for (; ; ) { // fills args[] with items from arrays: for (int i = 0; i < arrays.Length; i++) { if (iterators[i] != null) { // an element is available: if (iterators[i].MoveNext()) { // note: deep copy is not necessary since a function copies its arguments if needed: object value = iterators[i].Current.Value; PhpReference valueref = (value != null) ? value as PhpReference : null; args[i].Value = (valueref != null) ? valueref.value : value; //args[i].Value = iterators[i].Current.Value; // TODO: throws if the current Value is PhpReference } else { // the i-th iterator has stopped: count--; iterators[i] = null; args[i].Value = null; } } } if (count == 0) break; // invokes callback: object return_value = map.Invoke(args); // return value is not deeply copied: if (preserve_keys) result.Add(iterators[0].Current.Key, return_value); else result.Add(return_value); // loads new values (callback may modify some by ref arguments): for (int i = 0; i < arrays.Length; i++) { if (iterators[i] != null) { object item = iterators[i].Current.Value; PhpReference ref_item = item as PhpReference; if (ref_item != null) { ref_item.Value = args[i].Value; } else { arrays[i][iterators[i].Current.Key] = args[i].Value; } } } } return result; } #endregion #region array_replace, array_replace_recursive /// /// array_replace() replaces the values of the first array with the same values from /// all the following arrays. If a key from the first array exists in the second array, /// its value will be replaced by the value from the second array. If the key exists in /// the second array, and not the first, it will be created in the first array. If a key /// only exists in the first array, it will be left as is. If several arrays are passed /// for replacement, they will be processed in order, the later arrays overwriting the /// previous values. /// /// array_replace() is not recursive : it will replace values in the first array by /// whatever type is in the second array. /// /// The array in which elements are replaced. /// The arrays from which elements will be extracted. /// Deep copy of array with replacements. Returns an array, or NULL if an error occurs. [ImplementsFunction("array_replace")] //[return: PhpDeepCopy] public static PhpArray ArrayReplace([PhpRw] PhpArray array, params PhpArray[] arrays) { return ArrayReplaceImpl(array, arrays, false); } /// /// array_replace_recursive() replaces the values of the first array with the same values /// from all the following arrays. If a key from the first array exists in the second array, /// its value will be replaced by the value from the second array. If the key exists in the /// second array, and not the first, it will be created in the first array. If a key only /// exists in the first array, it will be left as is. If several arrays are passed for /// replacement, they will be processed in order, the later array overwriting the previous /// values. /// /// array_replace_recursive() is recursive : it will recurse into arrays and apply the same /// process to the inner value. /// /// When the value in array is scalar, it will be replaced by the value in array1, may it be /// scalar or array. When the value in array and array1 are both arrays, array_replace_recursive() /// will replace their respective value recursively. /// /// The array in which elements are replaced. /// The arrays from which elements will be extracted. /// Deep copy of array with replacements. Returns an array, or NULL if an error occurs. [ImplementsFunction("array_replace_recursive")] //[return: PhpDeepCopy] public static PhpArray ArrayReplaceRecursive([PhpRw] PhpArray array, params PhpArray[] arrays) { return ArrayReplaceImpl(array, arrays, true); } /// /// /// /// /// /// /// /// Performs deep copy of array, return array with replacements. internal static PhpArray ArrayReplaceImpl(PhpArray array, PhpArray[] arrays, bool recursive) { PhpArray result = (PhpArray)array.DeepCopy(); if (arrays != null) foreach (PhpArray array1 in arrays) ArrayReplaceImpl(result, array1, recursive); //// if called by PHP language then all items in the result should be in place deeply copied: //result.InplaceCopyOnReturn = true; return result; } /// /// Performs replacements on deeply-copied array. Performs deep copies of replace values. /// /// /// /// internal static void ArrayReplaceImpl(PhpArray array, PhpArray replaceWith, bool recursive) { if (array != null && replaceWith != null) foreach (var x in replaceWith) { PhpArray xArrayValue, resultArrayValue; if (recursive && (xArrayValue = x.Value as PhpArray) != null && (resultArrayValue = array[x.Key] as PhpArray) != null) { ArrayReplaceImpl(resultArrayValue, xArrayValue, true); } else { array[x.Key] = PhpVariable.DeepCopy(x.Value); } } } #endregion } } ================================================ FILE: Source/ClassLibrary/AssemblyInfo.cs ================================================ /* Copyright (c) 2004-2006 Tomas Matousek, Ladislav Prosek, Pavel Novak, Jan Benda. The use and distribution terms for this software are contained in the file named License.txt, which can be found in the root of the Phalanger distribution. By using this software in any fashion, you are agreeing to be bound by the terms of this license. You must not remove this notice from this software. */ using System.Reflection; using System.Runtime.CompilerServices; using PHP.Core; using System.Security; #if !SILVERLIGHT [assembly: AssemblyTitle("Phalanger Base Class Library")] [assembly: AssemblyDescription("Phalanger Base Class Library")] //[assembly: AllowPartiallyTrustedCallers] //#if DEBUG [assembly: PhpLibrary( typeof(PHP.Library.LibraryDescriptor), "Base Library", new string[]{"standard","Core","session","ctype","tokenizer","date","pcre","ereg","json","hash","SPL","filter"})] //#else //[assembly: PhpLibrary(typeof(PHP.Library.LibraryDescriptor), "Base Library", false, true)] //#endif #else [assembly: AssemblyTitle("Phalanger Base Class Library (Silverlight)")] [assembly: AssemblyDescription("Phalanger Base Class Library (Silverlight)")] [assembly: AssemblyVersion("4.0.0.0")] [assembly: PhpLibrary(typeof(PHP.Library.LibraryDescriptor), "Base Library")] #endif [assembly: AssemblyConfiguration("")] [assembly: AssemblyDelaySign(false)] [assembly: InternalsVisibleTo("PhpNet.ClassLibrary.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100cdeef915479b86e2633bbd8796635d6114d25cfab4d836c7c57b07af1464b79cd0d9a8c52abe8df4806b83be7372d48a5aa90f32a25f484c5a7c667ab53a542e5261fc9978e0fdf4da339da691733bdf140bd66525dc2714e9cc85eb32e35c80170a188317990622cc3bbf019fb4c57db3414bdc1fc4072d18db33c1b0cc31dd")] ================================================ FILE: Source/ClassLibrary/AssemblyResources.cs ================================================ /* Copyright (c) 2004-2006 Tomas Matousek. The use and distribution terms for this software are contained in the file named License.txt, which can be found in the root of the Phalanger distribution. By using this software in any fashion, you are agreeing to be bound by the terms of this license. You must not remove this notice from this software. */ using System; using System.Resources; using System.Reflection; using PHP.Core; namespace PHP.Library { /// /// Manages resources of the Class Library. /// public class LibResources { /// /// Resource manager of strings. /// static ResourceManager strings; /// /// Initializes the resource manager. /// static LibResources() { strings = PHP.Library.Strings.ResourceManager; } /// /// Retrieves a string resource. /// /// The string identifier. /// The string. public static string GetString(string id) { return strings.GetString(id); } /// /// Retrieves formatted string resource. /// /// The string identifier. /// An array containing zero or more objects to format. /// The formatted string resource. /// The string resource with doesn't exist. /// The string resource is not valid formatting string for specified arguments. public static string GetString(string id, params object[] args) { return String.Format(strings.GetString(id), args); } /// /// Retrieves formatted string resource. /// /// The string identifier. /// An to format. /// The formatted string resource. /// The string resource with doesn't exist. /// The string resource is not valid formatting string for specified arguments. public static string GetString(string id, object arg) { return String.Format(strings.GetString(id), arg); } /// /// Retrieves formatted string resource. /// /// The string identifier. /// An to format. /// An to format. /// The formatted string resource. /// The string resource with doesn't exist. /// The string resource is not valid formatting string for specified arguments. public static string GetString(string id, object arg1, object arg2) { return String.Format(strings.GetString(id), arg1, arg2); } /// /// Retrieves formatted string resource. /// /// The string identifier. /// An to format. /// An to format. /// An to format. /// The formatted string resource. /// The string resource with doesn't exist. /// The string resource is not valid formatting string for specified arguments. public static string GetString(string id, object arg1, object arg2, object arg3) { return String.Format(strings.GetString(id), arg1, arg2, arg3); } } } namespace PHP.Dynamic { // only for documentation purposes internal class Dummy { } } ================================================ FILE: Source/ClassLibrary/BitConverter.cs ================================================ /* Copyright (c) 2004-2006 Tomas Matousek. The use and distribution terms for this software are contained in the file named License.txt, which can be found in the root of the Phalanger distribution. By using this software in any fashion, you are agreeing to be bound by the terms of this license. You must not remove this notice from this software. */ using System; using System.Text; using PHP.Core; using System.Diagnostics; namespace PHP.Library { /// /// Binary data converter (implements pack/unpack PHP functions). /// /// /// /// a0x00-padded string /// A0x20-padded string /// hHex string, low nibble first /// HHex string, high nibble first /// csigned char /// Cunsigned char /// ssigned short - 16 bit, machine byte order /// Sunsigned short - 16 bit, machine byte order /// nunsigned short - 16 bit, big endian byte order /// vunsigned short - 16 bit, little endian byte order /// isigned integer - 32 bit and byte order (PHP: machine dependent size) /// Iunsigned integer - 32 bit and byte order (PHP: machine dependent size) /// lsigned long - 32 bit, machine byte order /// Lunsigned long - 32 bit, machine byte order /// Nunsigned long - 32 bit, big endian byte order /// Vunsigned long - 32 bit, little endian byte order /// ffloat - machine dependent size and representation /// ddouble - machine dependent size and representation /// x0x00 byte /// XBack up one byte /// @0x00-fill to absolute position /// /// public static class PhpBitConverter { /// /// Integer representing '*' repeater. /// private const int InfiniteRepeater = -1; /// /// Formats given integers to a string of bytes according to specified format string. /// /// The string defining the format of the result. See PHP manual for details. /// Integers to be formatted to binary data according to . /// Binary data. [ImplementsFunction("pack")] [PureFunction] public static PhpBytes Pack(string format, params object[] args) { if (format == null) return PhpBytes.Empty; // the number of specifiers is at most length of the format string and usualy close to it: char[] specifiers = new char[format.Length]; int[] repeaters = new int[format.Length]; // parses specifiers and repeaters into the arrays, returns the number of used slots: int count = ParseFormat(format, args, specifiers, repeaters); if (count == 0) return PhpBytes.Empty; // determines the result length (length) and the working buffer size (size): int length, size; GetPackedDataSize(specifiers, repeaters, count, out length, out size); // packs data using buffer: byte[] buffer = new byte[size]; PackInternal(buffer, args, specifiers, repeaters, count); // gets the result as an initial part of the buffer: byte[] result = new byte[length]; Buffer.BlockCopy(buffer, 0, result, 0, length); return new PhpBytes(result); } /// /// Parses pack format. Stores specifiers and repeaters into the respective arrays. /// Repeaters are ensured to be finite and non-negative (infinite repeaters are converted to finite). /// Some arguments are also converted to another form (e.g. to string) because we will need that form later. /// /// Returns the number of parsed specifiers or 0 on error. private static int ParseFormat(string format, object[] args, char[] specifiers, int[] repeaters) { Encoding encoding = Configuration.Application.Globalization.PageEncoding; int i = 0; // current position in format int a = 0; // current argument index int result = 0; // number of parsed specifiers while (i < format.Length) { char specifier = format[i++]; int repeater = ParseRepeater(format, ref i); switch (specifier) { case 'x': // NUL byte case '@': // NUL-fill to absolute position case 'X': // Back up one byte // consumes no arguments => repeater cannot be '*' if (repeater == InfiniteRepeater) { PhpException.Throw(PhpError.Warning, LibResources.GetString("asterisk_ignored", specifier)); repeater = 1; } break; case 'a': // NUL-padded string case 'A': // SPACE-padded string case 'h': // Hex string, low/high nibble first - converts to a string, takes n hex digits: case 'H': { // consumes one argument: if (a == args.Length) { PhpException.Throw(PhpError.Warning, LibResources.GetString("not_enought_arguments", specifier)); return 0; } // converts the current argument to a string and stores it back: string s = Core.Convert.ObjectToString(args[a]); args[a] = s; a++; if (specifier == 'h' || specifier == 'H') { if (repeater > s.Length) { PhpException.Throw(PhpError.Warning, LibResources.GetString("not_enought_characters", specifier)); repeater = s.Length; } } else { if (encoding.GetByteCount(s) != s.Length) { PhpException.Throw(PhpError.Warning, LibResources.GetString("multibyte_chars_unsupported", specifier)); return 0; } } // adjusts infinite repeater to the string length: if (repeater == InfiniteRepeater) repeater = s.Length; break; } case 'c': // signed char case 'C': // unsigned char case 's': // signed short (always 16 bit, machine byte order) case 'S': // unsigned short (always 16 bit, machine byte order) case 'n': // unsigned short (always 16 bit, big endian byte order) case 'v': // unsigned short (always 16 bit, little endian byte order) case 'i': // signed integer (machine dependent size and byte order) case 'I': // unsigned integer (machine dependent size and byte order) case 'l': // signed long (always 32 bit, machine byte order) case 'L': // unsigned long (always 32 bit, machine byte order) case 'N': // unsigned long (always 32 bit, big endian byte order) case 'V': // unsigned long (always 32 bit, little endian byte order) case 'f': // float (machine dependent size and representation) case 'd': // double (machine dependent size and representation) if (repeater == InfiniteRepeater) { // infinite repeater is converted to the number of remaining arguments (can be zero): repeater = args.Length - a; } else if (repeater > args.Length - a) { PhpException.Throw(PhpError.Warning, LibResources.GetString("not_enought_arguments", specifier)); return 0; } // consume arguments: a += repeater; break; default: PhpException.Throw(PhpError.Warning, LibResources.GetString("unknown_format_code", specifier)); return 0; } specifiers[result] = specifier; repeaters[result] = repeater; result++; } // reports unused arguments: if (a < args.Length) PhpException.Throw(PhpError.Warning, LibResources.GetString("unused_arguments", args.Length - a)); return result; } /// /// Parses repeater. /// /// The format string. /// The current position in the format string. /// /// The value of repeater. Either non-negative integer or (asterisk). /// private static int ParseRepeater(string format, ref int i) { // no repeater: if (i == format.Length) return 1; // infinite repeater: if (format[i] == '*') { i++; return InfiniteRepeater; } int j = i; long result = Core.Convert.SubstringToLongInteger(format, format.Length - j, ref j); // invalid repeater or no repeater: if (result < 0 || i == j || unchecked((int)result) != result) // not an int or too big int return 1; // advance index: i = j; return (int)result; } /// /// Computes the total size of binary data according to given specifiers and repeaters. /// Only count of them are valid. /// private static void GetPackedDataSize(char[] specifiers, int[] repeaters, int count, out int resultLength, out int maxLength) { long result = 0; maxLength = 0; for (int i = 0; i < count; i++) { long repeater = repeaters[i]; char specifier = specifiers[i]; switch (specifier) { case 'x': // NUL byte repeated for "repeater" count: result += repeater; break; case '@': // NUL-fill to absolute position; // if it is less then the current position the result is shortened result = repeater; break; case 'X': // shortens the result by "repeater" bytes (underflow has to be checked): if (result < repeater) { PhpException.Throw(PhpError.Warning, LibResources.GetString("outside_string", specifier)); result = 0; } else { result -= repeater; } break; case 'a': // NUL-padded string case 'A': // SPACE-padded string case 'c': // signed char case 'C': // unsigned char result += repeater; break; case 's': // signed short (always 16 bit, machine byte order) case 'S': // unsigned short (always 16 bit, machine byte order) case 'n': // unsigned short (always 16 bit, big endian byte order) case 'v': // unsigned short (always 16 bit, little endian byte order) result += repeater * 2; break; case 'i': // signed integer (machine dependent size and byte order - always 32 bit) case 'I': // unsigned integer (machine dependent size and byte order - always 32 bit) case 'l': // signed long (always 32 bit, machine byte order) case 'L': // unsigned long (always 32 bit, machine byte order) case 'N': // unsigned long (always 32 bit, big endian byte order) case 'V': // unsigned long (always 32 bit, little endian byte order) case 'f': // float (machine dependent size and representation) result += repeater * 4; break; case 'd': // double (machine dependent size and representation) result += repeater * 8; break; case 'h': // Hex string, low/high nibble first - converts to a string, takes n hex digits from it: case 'H': result += (repeater + 1) / 2; break; default: Debug.Fail("Invalid repeater"); break; } // checks for overflow: if (result > Int32.MaxValue) { PhpException.Throw(PhpError.Warning, LibResources.GetString("binary_data_overflown", specifier)); result = Int32.MaxValue; } // expands the max length: if (result > maxLength) maxLength = unchecked((int)result); } resultLength = unchecked((int)result); } /// /// Packs arguments into the buffer according to given specifiers and repeaters. /// Count specifies the number of valid specifiers/repeaters. /// private static void PackInternal(byte[] buffer, object[] args, char[] specifiers, int[] repeaters, int count) { Encoding encoding = Configuration.Application.Globalization.PageEncoding; bool le = BitConverter.IsLittleEndian; int a = 0; // index of the current argument int pos = 0; // the position in the buffer for (int i = 0; i < count; i++) { char specifier = specifiers[i]; int repeater = repeaters[i]; switch (specifier) { case 'x': // NUL byte repeated for "repeater" count: ArrayUtils.Fill(buffer, 0, pos, repeater); pos += repeater; break; case '@': // NUL-fill to absolute position; // if it is less then the current position the result is shortened if (repeater > pos) ArrayUtils.Fill(buffer, 0, pos, repeater - pos); pos = repeater; break; case 'X': pos = Math.Max(0, pos - repeater); break; case 'a': // NUL-padded string case 'A': // SPACE-padded string { // argument has already been converted to string: string s = (string)args[a++]; int length = Math.Min(s.Length, repeater); int byte_count = encoding.GetBytes(s, 0, length, buffer, pos); Debug.Assert(byte_count == length, "Multibyte characters not supported"); // padding: if (repeater > length) ArrayUtils.Fill(buffer, (byte)((specifier == 'a') ? 0x00 : 0x20), pos + length, repeater - length); pos += repeater; break; } case 'h': // Hex string, low/high nibble first - converts to a string, takes n hex digits from string: case 'H': { // argument has already been converted to string: string s = (string)args[a++]; int nibble_shift = (specifier == 'h') ? 0 : 4; for (int j = 0; j < repeater; j++) { int digit = Core.Parsers.Convert.AlphaNumericToDigit(s[j]); if (digit > 15) { PhpException.Throw(PhpError.Warning, LibResources.GetString("illegal_hex_digit", specifier, s[j])); digit = 0; } if (j % 2 == 0) { buffer[pos] = unchecked((byte)(digit << nibble_shift)); } else { buffer[pos] |= unchecked((byte)(digit << (4 - nibble_shift))); pos++; } } // odd number of hex digits (append '0' digit): if (repeater % 2 == 1) pos++; break; } case 'c': // signed char case 'C': // unsigned char while (repeater-- > 0) buffer[pos++] = unchecked((byte)Core.Convert.ObjectToInteger(args[a++])); break; case 's': // signed short (always 16 bit, machine byte order) case 'S': // unsigned short (always 16 bit, machine byte order) while (repeater-- > 0) PackNumber(BitConverter.GetBytes(unchecked((ushort)Core.Convert.ObjectToInteger(args[a++]))), le, buffer, ref pos); break; case 'n': // unsigned short (always 16 bit, big endian byte order) case 'v': // unsigned short (always 16 bit, little endian byte order) while (repeater-- > 0) PackNumber(BitConverter.GetBytes(unchecked((ushort)Core.Convert.ObjectToInteger(args[a++]))), specifier == 'v', buffer, ref pos); break; case 'i': // signed integer (machine dependent size and byte order - always 32 bit) case 'I': // signed integer (machine dependent size and byte order - always 32 bit) case 'l': // signed long (always 32 bit, machine byte order) case 'L': // unsigned long (always 32 bit, machine byte order) while (repeater-- > 0) PackNumber(BitConverter.GetBytes(Core.Convert.ObjectToInteger(args[a++])), le, buffer, ref pos); break; case 'N': // unsigned long (always 32 bit, big endian byte order) case 'V': // unsigned long (always 32 bit, little endian byte order) while (repeater-- > 0) PackNumber(BitConverter.GetBytes(Core.Convert.ObjectToInteger(args[a++])), specifier == 'V', buffer, ref pos); break; case 'f': // float (machine dependent size and representation - size is always 4B) while (repeater-- > 0) PackNumber(BitConverter.GetBytes(unchecked((float)Core.Convert.ObjectToDouble(args[a++]))), le, buffer, ref pos); break; case 'd': // double (machine dependent size and representation - size is always 8B) while (repeater-- > 0) PackNumber(BitConverter.GetBytes(Core.Convert.ObjectToDouble(args[a++])), le, buffer, ref pos); break; default: Debug.Fail("Invalid specifier"); break; } } } /// /// Packs a number (integer or double) into the buffer. /// /// The number converted to bytes by . /// Whether the result should be in little endian encoding. /// The buffer where to copy the covnerted number. /// The position where to start in the buffer. Advanced by the length of bytes. private static void PackNumber(byte[] bytes, bool toLittleEndian, byte[] buffer, ref int pos) { if (BitConverter.IsLittleEndian ^ toLittleEndian) { for (int i = 0; i < bytes.Length; i++) buffer[pos + i] = bytes[bytes.Length - 1 - i]; } else { Buffer.BlockCopy(bytes, 0, buffer, pos, bytes.Length); } pos += bytes.Length; } /// /// Unpacks data from a string of bytes into . /// /// The string defining the items of the result. See PHP manual for details. /// The string of bytes to be unpacked. /// The containing unpacked data. [ImplementsFunction("unpack")] public static PhpArray Unpack(string format, PhpBytes data) { if (format == null) return null; byte[] buffer = (data != null) ? data.ReadonlyData : ArrayUtils.EmptyBytes; Encoding encoding = Configuration.Application.Globalization.PageEncoding; byte[] reversed = new byte[4]; // used for reversing the order of bytes in buffer int i = 0; int pos = 0; PhpArray result = new PhpArray(); while (i < format.Length) { string name; int repeater; char specifier; // parses specifier, repeater, and name from the format string: ParseFormatToken(format, ref i, out specifier, out repeater, out name); int remains = buffer.Length - pos; // the number of bytes remaining in the buffer int size; // a size of data to be extracted corresponding to the specifier // repeater of '@' specifier has a special meaning: if (specifier == '@') { if (repeater > buffer.Length || repeater == InfiniteRepeater) PhpException.Throw(PhpError.Warning, LibResources.GetString("outside_string", specifier)); else pos = repeater; continue; } // number of operations: int op_count; // gets the size of the data to read and adjust repeater: if (!GetSizeToUnpack(specifier, remains, repeater, out op_count, out size)) { PhpException.Throw(PhpError.Warning, LibResources.GetString("unknown_format_code", specifier)); return null; } // repeats operation determined by specifier "op_count" times; // if op_count is infinite then stops when the number of remaining characters is zero: for (int j = 0; j < op_count || op_count == InfiniteRepeater; j++) { if (size > remains) { // infinite means "while data are available": if (op_count == InfiniteRepeater) break; PhpException.Throw(PhpError.Warning, LibResources.GetString("not_enought_input", specifier, size, remains)); return null; } object item; switch (specifier) { case 'X': // decreases position, no value stored: if (pos == 0) PhpException.Throw(PhpError.Warning, LibResources.GetString("outside_string", specifier)); else pos--; continue; case 'x': // advances position, no value stored pos++; continue; case 'a': // NUL-padded string case 'A': // SPACE-padded string { byte pad = (byte)(specifier == 'a' ? 0x00 : 0x20); int last = pos + size - 1; while (last >= pos && buffer[last] == pad) last--; item = encoding.GetString(buffer, pos, last - pos + 1); break; } case 'h': // Hex string, low/high nibble first - converts to a string, takes n hex digits from string: case 'H': { int p = pos; int nibble_shift = (specifier == 'h') ? 0 : 4; StringBuilder sb = new StringBuilder(size); for (int k = 0; k < size; k++) { const string hex_digits = "0123456789ABCDEF"; sb.Append(hex_digits[(buffer[p] >> nibble_shift) & 0x0f]); // beware of odd repeaters! if (repeater == InfiniteRepeater || repeater > sb.Length) { sb.Append(hex_digits[(buffer[p] >> (4 - nibble_shift)) & 0x0f]); } p++; } item = sb.ToString(); break; } case 'c': // signed char item = (int)unchecked((sbyte)buffer[pos]); break; case 'C': // unsigned char item = (int)buffer[pos]; break; case 's': // signed short (always 16 bit, machine byte order) item = (int)BitConverter.ToInt16(buffer, pos); break; case 'S': // unsigned short (always 16 bit, machine byte order) item = (int)BitConverter.ToUInt16(buffer, pos); break; case 'n': // unsigned short (always 16 bit, big endian byte order) if (BitConverter.IsLittleEndian) item = (int)BitConverter.ToUInt16(LoadReverseBuffer(reversed, buffer, pos, 2), 0); else item = (int)BitConverter.ToUInt16(buffer, pos); break; case 'v': // unsigned short (always 16 bit, little endian byte order) if (!BitConverter.IsLittleEndian) item = (int)BitConverter.ToUInt16(LoadReverseBuffer(reversed, buffer, pos, 2), 0); else item = (int)BitConverter.ToUInt16(buffer, pos); break; case 'i': // signed integer (machine dependent size and byte order - always 32 bit) case 'I': // unsigned integer (machine dependent size and byte order - always 32 bit) case 'l': // signed long (always 32 bit, machine byte order) case 'L': // unsigned long (always 32 bit, machine byte order) item = BitConverter.ToInt32(buffer, pos); break; case 'N': // unsigned long (always 32 bit, big endian byte order) item = unchecked(((int)buffer[pos] << 24) + (buffer[pos + 1] << 16) + (buffer[pos + 2] << 8) + buffer[pos + 3]); break; case 'V': // unsigned long (always 32 bit, little endian byte order) item = unchecked(((int)buffer[pos + 3] << 24) + (buffer[pos + 2] << 16) + (buffer[pos + 1] << 8) + buffer[pos + 0]); break; case 'f': // float (machine dependent size and representation - size is always 4B) item = (double)BitConverter.ToSingle(buffer, pos); break; case 'd': // double (machine dependent size and representation - size is always 8B) item = BitConverter.ToDouble(buffer, pos); break; default: Debug.Fail("Invalid specifier."); return null; } AddValue(result, name, item, op_count, j); pos += size; remains -= size; } } return result; } /// /// Gets a size of data to be unpacked according to the specifier. /// static bool GetSizeToUnpack(char specifier, int remains, int repeater, out int op_count, out int size) { switch (specifier) { case '@': Debug.Fail("@ specifier has already been processed"); size = 0; op_count = repeater; break; case 'X': size = -1; op_count = repeater; break; case 'a': // NUL-padded string case 'A': // SPACE-padded string size = (repeater != InfiniteRepeater) ? repeater : remains; op_count = 1; break; case 'h': // Hex string, low/high nibble first - converts to a string, takes n hex digits from string: case 'H': size = (repeater != InfiniteRepeater) ? (repeater + 1) / 2 : remains; op_count = 1; break; case 'x': // NUL case 'c': // signed char case 'C': // unsigned char size = 1; op_count = repeater; break; case 's': // signed short (always 16 bit, machine byte order) case 'S': // unsigned short (always 16 bit, machine byte order) case 'n': // unsigned short (always 16 bit, big endian byte order) case 'v': // unsigned short (always 16 bit, little endian byte order) size = 2; op_count = repeater; break; case 'i': // signed integer (machine dependent size and byte order - always 32 bit) case 'I': // signed integer (machine dependent size and byte order - always 32 bit) case 'l': // signed long (always 32 bit, machine byte order) case 'L': // unsigned long (always 32 bit, machine byte order) case 'N': // unsigned long (always 32 bit, big endian byte order) case 'V': // unsigned long (always 32 bit, little endian byte order) case 'f': // float (machine dependent size and representation - size is always 4B) size = 4; op_count = repeater; break; case 'd': // double (machine dependent size and representation - size is always 8B) size = 8; op_count = repeater; break; default: size = 0; op_count = repeater; return false; } return true; } /// /// Parses format token "{specifier}{repeater}?{name}?/?" /// static private void ParseFormatToken(string format, ref int i, out char specifier, out int repeater, out string name) { Debug.Assert(i < format.Length); specifier = format[i++]; repeater = ParseRepeater(format, ref i); if (i == format.Length) { name = ""; return; } int slash = format.IndexOf('/', i); if (slash >= 0) { name = format.Substring(i, slash - i); i = slash + 1; } else { name = format.Substring(i); i = format.Length; } } /// /// Adds unpacked value to the resulting array. /// static private void AddValue(PhpArray result, string name, object value, int repeater, int index) { if (name != "") { if (repeater > 1 || repeater == InfiniteRepeater) name += (index + 1); result[name] = value; } else { result[index + 1] = value; } } /// /// Loads reversed bytes from buffer to an array. /// static private byte[] LoadReverseBuffer(byte[] reverse, byte[] buffer, int pos, int count) { for (int i = 0; i < count; i++) reverse[i] = buffer[pos + count - i - 1]; return reverse; } #region Unit Testing #if DEBUG public static void Test_Pack() { Pack("ccc", -5, "0001x", "-8").Dump(Console.Out); Pack("c*", -5, "0001x", "-8").Dump(Console.Out); Pack("cCsS", 1, 1, 1, 1).Dump(Console.Out); Pack("nviI", 1, 1, 1, 1).Dump(Console.Out); Pack("lLNV", 1, 1, 1, 1).Dump(Console.Out); Pack("fd", 1, 1).Dump(Console.Out); Pack("H*", "abcde").Dump(Console.Out); Pack("h*", "abcde").Dump(Console.Out); Pack("H*", "abcd").Dump(Console.Out); Pack("h*", "abcd").Dump(Console.Out); Pack("A*", "hello").Dump(Console.Out); Pack("a2", "hello").Dump(Console.Out); Pack("a10", "hello").Dump(Console.Out); Pack("A10", "hello").Dump(Console.Out); Pack("nvc*", 0x1234, 0x5678, 65, 66).Dump(Console.Out); Pack("x10X5x8x1X2x1X2").Dump(Console.Out); Pack("@5s2c3", "+5e10", "007xasd", "-6", "49", ".1").Dump(Console.Out); Pack("@5f2c3", "+5e10", "007xasd", "-6", "49", ".1").Dump(Console.Out); Pack("a*", "").Dump(Console.Out); Pack("a0", "xxx").Dump(Console.Out); } public static void Test_Unpack() { Unpack("@2/a*x", new PhpBytes("1234567812123456781212345678121234567812")).Dump(Console.Out); Unpack("@2/@100/a*x", new PhpBytes("1234567812123456781212345678121234567812")).Dump(Console.Out); Unpack("@2/X3/a*x", new PhpBytes("1234567812123456781212345678121234567812")).Dump(Console.Out); Unpack("a*x/a*y", new PhpBytes("1234567812123456781212345678121234567812")).Dump(Console.Out); Unpack("xx/a*y", new PhpBytes("1234567812123456781212345678121234567812")).Dump(Console.Out); Unpack("ca/Cb", new PhpBytes("\x90\x90")).Dump(Console.Out); Unpack("@5/s2x/c3y", Pack("@5s2c3", "+5e10", "007xasd", "-6", "49", ".1")).Dump(Console.Out); Unpack("na/vb/c*c", Pack("nvc*", 1234, 5678, 65, 66)).Dump(Console.Out); Unpack("h*", Pack("h*", "ABCDEF123456")).Dump(Console.Out); } #endif #endregion } } ================================================ FILE: Source/ClassLibrary/CLR.cs ================================================ /* Copyright (c) 2006 Tomas Matousek. The use and distribution terms for this software are contained in the file named License.txt, which can be found in the root of the Phalanger distribution. By using this software in any fashion, you are agreeing to be bound by the terms of this license. You must not remove this notice from this software. */ using System; using System.IO; using System.Threading; using System.Collections; using PHP.Core; using PHP.Core.Reflection; namespace PHP.Library { public static class Clr { #region Threads private sealed class Worker { private ScriptContext context; private object[] args; public Worker(ScriptContext/*!*/context, object[] args) { this.context = context; this.args = args; } public void Run(object _) { var callback = (PhpCallback)_; callback.SwitchContext(context.Fork()); callback.Invoke(args); } } [ImplementsFunction("clr_create_thread")] public static bool CreateClrThread(ScriptContext/*!*/context, PhpCallback/*!*/ callback, params object[] args) { if (callback == null) PhpException.ArgumentNull("callback"); if (!callback.Bind()) return false; object[] copies = (args != null) ? new object[args.Length] : ArrayUtils.EmptyObjects; for (int i = 0; i < copies.Length; i++) copies[i] = PhpVariable.DeepCopy(args[i]); return ThreadPool.QueueUserWorkItem(new Worker(context, copies).Run, callback); } #endregion #region Types [ImplementsFunction("clr_typeof", FunctionImplOptions.NeedsNamingContext | FunctionImplOptions.NeedsClassContext)] public static DObject GetTypeOf(NamingContext/*!*/ namingContext, DTypeDesc caller, object typeNameOrObject) { ScriptContext context = ScriptContext.CurrentContext; DTypeDesc type = PhpObjects.ClassNameOrObjectToType(context, namingContext, caller, typeNameOrObject, true); if (type == null) return null; return ClrObject.Create(type.RealType); } #endregion } } ================================================ FILE: Source/ClassLibrary/CRC32.cs ================================================ /* Copyright (c) 2006 Ladislav Prosek. The use and distribution terms for this software are contained in the file named License.txt, which can be found in the root of the Phalanger distribution. By using this software in any fashion, you are agreeing to be bound by the terms of this license. You must not remove this notice from this software. */ using System; using System.Security.Cryptography; #if SILVERLIGHT using PHP.CoreCLR; #endif namespace PHP.Library { /// /// An implementation of the CRC32 hash algorithm. /// public class CRC32 : HashAlgorithm { #region Lookup table private static readonly uint[] table = new uint[256] { 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d, }; #endregion /// /// Creates a new instance. /// public CRC32() { this.HashSizeValue = 32; Initialize(); } /// /// Initializes this instance. /// public override void Initialize() { this.State = -1; } /// /// Computes hash from the supplied data. /// protected override void HashCore(byte[] array, int ibStart, int cbSize) { unchecked { uint state = (uint)this.State; int end = ibStart + cbSize; for (int i = ibStart; i < end; i++) { state = (state >> 8) ^ table[array[i] ^ (state & 0x000000ff)]; } this.State = (int)state; } } /// /// Finalizes the hash computation after the last data block is processed. /// protected override byte[] HashFinal() { this.HashValue = BitConverter.GetBytes(~unchecked((uint)this.State)); return this.HashValue; } } } ================================================ FILE: Source/ClassLibrary/CharMap.cs ================================================ /* Copyright (c) 2004-2006 Tomas Matousek. The use and distribution terms for this software are contained in the file named License.txt, which can be found in the root of the Phalanger distribution. By using this software in any fashion, you are agreeing to be bound by the terms of this license. You must not remove this notice from this software. // TODO: // public int AddByUnicodeCategory(UnicodeCategory category) // public int AddByUnicodeCategory(UnicodeCategoryGroup group) */ using System; using System.Text; using System.Globalization; using System.Collections; using PHP.Core; namespace PHP.Library { /// /// Bitmap representig a set of Unicode characters. /// public sealed class CharMap // GENERICS { /// /// The bitmap. /// private uint[] flags; /// /// The index of the last integer in which has at least one bit ever set. /// private int lastDirty; /// /// Creates a new instance of . /// /// The number of characters to be mapped. public CharMap(int size) { this.flags = new uint[size / 32]; this.lastDirty = -1; } /// /// Creates a new instance of based on specified map. /// /// The bits used for character map. public CharMap(uint[] map) { flags = map; int i = map.Length - 1; while (i >= 0 && flags[i] == 0) i--; lastDirty = i; } /// /// Retrieves whether a character belongs to the set. /// /// The character to be tested. /// Whether is element of the set. /// is not mapped by this instance. public bool Contains(char c) { int div = c >> 5; return div <= lastDirty && (flags[div] & (0x80000000U >> (c & 0x1f))) != 0; } /// /// Adds character to the set. /// /// The character to be added. /// is not mapped by this instance. public void Add(char c) { int div = c >> 5; flags[div] |= 0x80000000U >> (c & 0x1f); if (div > lastDirty) lastDirty = div; } /// /// Adds all characters contained in a specified string. /// /// The string which characters to add. Can be a null reference. /// Some character within is not mapped by this instance. public void Add(string str) { if (str == null) return; for (int i = 0; i < str.Length; i++) Add(str[i]); } /// /// Removes character from the set. /// /// The character to be removed. /// is not mapped by this instance. public void Remove(char c) { flags[c >> 5] &= ~(0x80000000U >> (c & 0x1f)); } /// /// Adds a range of characters to the set. /// /// The lower bound of the range. /// The upper bound of the range. /// or are not mapped by this instance. /// The is less than the . public void AddRange(char first, char last) { if (first >= last) throw new ArgumentException(CoreResources.GetString("last_is_less_than_first")); int modf = first & 0x1f; int modl = last & 0x1f; int f = first >> 5; int l = last >> 5; if (l == f) { flags[f] |= (0xffffffffU >> (31 - modl + modf)) << (31 - modl); } else { // the first block: flags[f] |= 0xffffffffU >> modf; // the middle blocks (if any): for (int i = f + 1; i < l; i++) flags[i] = 0xffffffffU; // the last block: if (modl < 31) flags[l] |= ~(0xffffffffU >> (modl + 1)); else flags[l] = 0xffffffffU; } if (l > lastDirty) lastDirty = l; } /// /// Removes a range of characters from the set. /// /// The lower bound of the range. /// The upper bound of the range. /// or are not mapped by this instance. /// The is less than the . public void RemoveRange(char first, char last) { if (first > last) throw new ArgumentException(CoreResources.GetString("last_is_less_than_first")); int modf = first & 0x1f; int modl = last & 0x1f; int f = first >> 5; int l = last >> 5; if (l == f) { flags[f] &= ~((0xffffffffU >> (31 - modl + modf)) << (31 - modl)); } else { // the first block: flags[f] &= ~(0xffffffffU >> modf); // the middle blocks (if any): Array.Clear(flags, f + 1, l - f - 1); // the last block: if (modl < 31) flags[l] &= 0xffffffffU >> (modl + 1); else flags[l] = 0U; } } /// /// Clears all bits in the map. /// /// /// Doesn't necessarily lead to clearing the whole map. Clears the map up to the last bit ever set. /// public void ClearAll() { Array.Clear(flags, 0, lastDirty + 1); } /// /// Adds characters matching given mask. /// /// The mask of characters to be added. Any collection with items convertible to the type. /// /// The may contain single characters as well as intervals "a..b", /// where a, b are characters and a is less than or equal to b. /// There are no characters delimiting elements of the mask. /// If the mask is not valid as a whole its valid parts are processed. /// /// "a..bA..Z0..9" means alphanumeric characters, "a.b..d" means {'a', 'b', 'c', 'd', '.'} etc. /// is not valid mask. /// An item of is not convertible to character. /// Any character of is not mapped by this instance. public void AddUsingMask(string mask) { if (mask == null) return; // implemented by automaton with the following states: const int char_empty = 0; // no character read - initial state and after interval read state const int char_read = 1; // one char read into buffer, no dots read const int dot_read = 2; // one char read into buffer, one dot read const int dot_dot_read = 3; // one char read into buffer, two dots read // the interval constructing character: const char dot = '.'; int state = char_empty; // initial state char first = '\0'; // the first character of an interval being processed char last; // the last character of an interval being processed for (int i = 0; i < mask.Length; i++) { last = mask[i]; switch (state) { case char_empty: first = last; state = char_read; break; case char_read: if (last != dot) { Add(first); first = last; state = char_read; } else state = dot_read; break; case dot_read: if (last != dot) { if (first == dot) //eg: "..x" or "x.y" PhpException.Throw(PhpError.Warning, LibResources.GetString("char_range_no_char_on_left", "..")); else Add(first); // The dot will be added and the last char read may be init char of an interval: Add(dot); first = last; state = char_read; } else state = dot_dot_read; break; case dot_dot_read: if (first > last) //eg: "a..b" or "b..a" { PhpException.Throw(PhpError.Warning, LibResources.GetString("char_range_not_incrementing", "..")); // the first character will be added and the last char read may be init char of an interval: Add(first); Add(dot); first = last; state = char_read; } else { AddRange(first, last); } state = char_empty; break; } //switch } //for // postprocessing: if (state != char_empty) Add(first); if (state == dot_read || state == dot_dot_read) { Add(dot); if (state == dot_dot_read) PhpException.Throw(PhpError.Warning, LibResources.GetString("char_range_no_char_on_right", "..")); } } /// /// Adds characters using a mask with specified interval bounds separator. /// /// The mask. /// The separator. public void AddUsingMask(string mask, string separator) { if (separator == null || separator == "") throw new ArgumentNullException("separator"); int i, k, start; start = i = 0; for (; ; ) { while (i < mask.Length && mask[i] != separator[0]) { Add(mask[i]); i++; } if (i == mask.Length) break; k = 1; while (k < separator.Length && i + k < mask.Length && mask[i + k] == separator[k]) k++; // entire separator read: if (k == separator.Length) { // the end of the mask: if (i + k == mask.Length) { for (int j = 0; j < separator.Length; j++) Add(separator[j]); if (i > start) PhpException.Throw(PhpError.Warning, LibResources.GetString("char_range_no_char_on_right")); return; } // interval has its first point behind the starting point: if (i > start) { if (mask[i - 1] > mask[i + k]) { PhpException.Throw(PhpError.Warning, LibResources.GetString("char_range_not_incrementing")); Add(mask[i - 1]); } else { AddRange(mask[i - 1], mask[i + k]); } // entire interval has been read, starting from beginning: start = i; i += k + 1; } else { PhpException.Throw(PhpError.Warning, LibResources.GetString("char_range_no_char_on_left")); for (int j = 0; j < separator.Length; j++) Add(separator[j]); i += k; } } else if (i + k == mask.Length) { // part of the separator read: for (int j = 0; j < k; j++) Add(separator[j]); return; } else { Add(separator[0]); i++; } } } /// /// Adds character range given a regular-expression like mask. E.g. [a-zA-Z]. /// /// The mask. /// An index of '[' character in the mask where the range starts. /// An index of the last character of the range. Usually the index of ']' character. /// The separator character. Usually '-'. public void AddUsingRegularMask(string mask, int start, int end, char separator) { if (mask == null) throw new ArgumentNullException("mask"); if (start < 0 || start >= mask.Length) throw new ArgumentOutOfRangeException("start"); if (end < 0 || end >= mask.Length || end < start) throw new ArgumentOutOfRangeException("end"); int i = start; while (i < end) { if (mask[i] == separator && i > start && i < end) { // separator in between: if (mask[i - 1] < mask[i + 1]) AddRange(mask[i - 1], mask[i + 1]); else AddRange(mask[i + 1], mask[i - 1]); } else { // adds an ordinary character: Add(mask[i]); } i++; } } /// /// Accumulates all characters contained or not contained in the set to the string in ascending order. /// /// The lower bound. /// The upper bound. /// Whether to return characters not contained in the string. /// /// Depending on the value of the the method returns the string of characters in /// this instance and a complement of this instance, respectively, intersected with the /// [; ] interval. /// /// or are not mapped by this instance. public string ToString(char first, char last, bool complement) { if (first > last) throw new ArgumentException(CoreResources.GetString("last_is_less_than_first")); int modf = first & 0x1f; int modl = last & 0x1f; int f = first >> 5; int l = last >> 5; // an optimization: if (l > lastDirty && !complement) { // sets upper bound to the last bit in the lastDirty block: l = lastDirty; modl = 31; // the whole interval is beyond the last set bit: if (f > l) return String.Empty; } // if complementary set is required, we xor each item of the "flags" array by the "invert_equality" // and so invert the result of comparison with zero in the following if statement: uint invert_inequality = (complement) ? 0xffffffffU : 0U; uint flg; char c = first; StringBuilder result = new StringBuilder(); if (f == l) { // the "first" and the "last" points to the same block: flg = flags[f] ^ invert_inequality; for (uint mask = (0x80000000U >> modf); mask > (0x80000000U >> modl); mask >>= 1) { if ((flg & mask) != 0) result.Append(c); c++; } } else { // the first block: flg = flags[f] ^ invert_inequality; for (uint mask = 0x80000000U >> modf; mask != 0; mask >>= 1) { if ((flg & mask) != 0) result.Append(c); c++; } // middle blocks (if any): for (int i = f + 1; i < l; i++) { flg = flags[i] ^ invert_inequality; for (uint mask = 0x80000000U; mask != 0; mask >>= 1) { if ((flg & mask) != 0) result.Append(c); c++; } } // the last block: flg = flags[l] ^ invert_inequality; for (uint mask = 0x80000000U; mask >= (0x80000000U >> modl); mask >>= 1) { if ((flg & mask) != 0) result.Append(c); c++; } } return result.ToString(); } #region Unit Testing #if DEBUG public void Print() { for (char i = '\u0000'; i < '\u00ff'; i++) if (Contains(i)) Console.Write(i); } public void PrintDeclaration() { for (int i = 0; i <= lastDirty; i++) Console.WriteLine("0x{0},", flags[i].ToString("x")); } public static void Test_AddUsingRegularMask() { CharMap m = new CharMap(0x800); CharMap n = new CharMap(0x800); Console.Write("m: "); m.AddUsingMask("a-d-g", "-"); Console.Write("n: "); n.AddUsingMask("..a"); Console.WriteLine(); m.Print(); Console.WriteLine(); n.Print(); Console.WriteLine(); } #endif #endregion } } ================================================ FILE: Source/ClassLibrary/CharType.cs ================================================ /* Copyright (c) 2005-2006 Tomas Matousek. The use and distribution terms for this software are contained in the file named License.txt, which can be found in the root of the Phalanger distribution. By using this software in any fashion, you are agreeing to be bound by the terms of this license. You must not remove this notice from this software. */ using System; using System.Text; using System.Globalization; using PHP.Core; namespace PHP.Library { /// /// Implements character type functions known as ctype. /// [ImplementsExtension(LibraryDescriptor.ExtCType)] public static class CharType { private static string ArgToString(object var) { string s = var as string; if (s == null) { if (var is int) s = PhpStrings.ChrUnicode((int)var); } return s; } private static bool IsValid(object var, Predicate/*!*/isValid) { string s = ArgToString(var); if (s == null) return false; foreach (char c in s) if (!isValid(c)) return false; return true; } /// /// Check for alphanumeric character(s). /// [ImplementsFunction("ctype_alnum")] [PureFunction] public static bool IsAlphanumeric(object var) { return IsValid(var, Char.IsLetterOrDigit); } /// /// Check for alphabetic character(s). /// [ImplementsFunction("ctype_alpha")] [PureFunction] public static bool IsAlpha(object var) { return IsValid(var, Char.IsLetter); } /// /// Check for control character(s). /// [ImplementsFunction("ctype_cntrl")] [PureFunction] public static bool IsControl(object var) { return IsValid(var, Char.IsControl); } /// /// Check for numeric character(s). /// [ImplementsFunction("ctype_digit")] [PureFunction] public static bool IsDigit(object var) { return IsValid(var, Char.IsDigit); } /// /// Check for lowercase character(s). /// [ImplementsFunction("ctype_lower")] [PureFunction] public static bool IsLower(object var) { return IsValid(var, Char.IsLower); } /// /// Check for any printable character which is not whitespace or an alphanumeric character. /// [ImplementsFunction("ctype_punct")] [PureFunction] public static bool IsPunctuation(object var) { return IsValid(var, Char.IsPunctuation); } /// /// Check for whitespace character(s). /// [ImplementsFunction("ctype_space")] [PureFunction] public static bool IsWhiteSpace(object var) { return IsValid(var, Char.IsWhiteSpace); } /// /// Check for uppercase character(s). /// [ImplementsFunction("ctype_upper")] [PureFunction] public static bool IsUpper(object var) { return IsValid(var, Char.IsUpper); } /// /// Check for character(s) representing a hexadecimal digit. /// [ImplementsFunction("ctype_xdigit")] [PureFunction] public static bool IsHexadigit(object var) { return IsValid(var, c => (c >= '0' && c <= '9' || c >= 'a' && c <= 'f' || c >= 'A' && c <= 'F')); } /// /// Check for any printable character(s) except space. Those are alpha-numeric characters and punctuations. /// [ImplementsFunction("ctype_graph")] [PureFunction] public static bool IsGraph(object var) { return IsValid(var, c => (Char.IsPunctuation(c) || Char.IsLetterOrDigit(c))); } /// /// Check for printable character(s). Those are alpha-numeric characters, punctuations, and space character. /// [ImplementsFunction("ctype_print")] [PureFunction] public static bool IsPrintable(object var) { return IsValid(var, c => (c == ' ' || Char.IsPunctuation(c) || Char.IsLetterOrDigit(c))); } } } ================================================ FILE: Source/ClassLibrary/ClassLibrary.csproj ================================================  Local 9.0.30729 2.0 {D515E8F4-357C-4CAF-87C1-97D64C5F865A} PhpNet.ClassLibrary ClassLibrary.snk false Library PHP.Library true SAK SAK SAK SAK v4.0 System System.Data System.Web System.Windows.Forms System.XML Code Code Code Code Code Code Code Code Code Code Code Code Code Code Code Code Code Code Code Code Code Code Code Code Code Code Code Code Code Code Code Code Code Code Code Code Code Code Code True True Strings.resx Code Code Code Code Designer ResXFileCodeGenerator Strings.Designer.cs False .NET Framework 3.5 SP1 Client Profile false False .NET Framework 3.5 SP1 true False Windows Installer 3.1 true {581f1486-5062-459e-bae6-a41886584f81} Core.Parsers False {9A2867A2-981C-4B5A-A1C5-EACCC80B5148} Core False ================================================ FILE: Source/ClassLibrary/ClassLibrary.nuspec ================================================ $id$ $version$ $description$ $description$ $author$ $author$ https://raw.githubusercontent.com/DEVSENSE/Phalanger/master/LICENSE.txt https://github.com/DEVSENSE/Phalanger http://download-codeplex.sec.s-msft.com/Download?ProjectName=Phalanger&DownloadId=240061 false Bug fixes and performance improvements Copyright 2015 PHP Phalanger ================================================ FILE: Source/ClassLibrary/Configuration.CLR.cs ================================================ /* Copyright (c) 2005-2006 Tomas Matousek. The use and distribution terms for this software are contained in the file named License.txt, which can be found in the root of the Phalanger distribution. By using this software in any fashion, you are agreeing to be bound by the terms of this license. You must not remove this notice from this software. */ using System; using System.IO; using System.Web; using System.Xml; using System.Collections; using System.Configuration; using System.Runtime.Serialization; using PHP; using PHP.Core; using System.Net.Mail; using System.Diagnostics; namespace PHP.Library { [Serializable] public sealed partial class LibraryConfiguration : IPhpConfiguration { #region Highlighting /// /// Highlighting functions options. /// [Serializable] public partial class HighlightingSection : IPhpConfigurationSection { public bool Parse(string name, string value, XmlNode node) { switch (name) { case "String": String = value; break; case "Comment": Comment = value; break; case "Keyword": Keyword = value; break; case "Background": Background = value; break; case "Default": Default = value; break; case "Html": Html = value; break; case "ScriptTags": ScriptTags = value; break; default: return false; } return true; } } #endregion #region Mailer /// /// Mailign funtions options. /// [Serializable] public class MailerSection : IPhpConfigurationSection { /// /// SMTP server name used for sending e-mails. /// public string SmtpServer = null; /// /// SMTP server port used for sending e-mails. /// public int SmtpPort = 25; /// /// The default value of "From" header. /// public string DefaultFromHeader = null; /// /// Whether to add X-PHP-Originating-Script header to sent mails. /// public bool AddXHeader = false; public MailerSection() { } internal MailerSection DeepCopy() { return (MailerSection)this.MemberwiseClone(); } public bool Parse(string name, string value, XmlNode node) { switch (name) { case "DefaultFromHeader": try { // check the mail address: MailAddress address = new MailAddress(value); // remember the value only if the address is valid: DefaultFromHeader = value; } catch { // an invalid mail address provided: throw new ConfigUtils.InvalidAttributeValueException(node, "value"); } break; case "SmtpServer": SmtpServer = value; break; case "SmtpPort": SmtpPort = ConfigUtils.ParseInteger(value, 0, UInt16.MaxValue, node); break; case "AddXHeader": AddXHeader = string.Equals(value, true.ToString(), StringComparison.OrdinalIgnoreCase); break; default: return false; } return true; } } #endregion #region Session /// /// Serialization options. /// [Serializable] public sealed class SessionSection : IPhpConfigurationSection { static SessionSection() { // load configuration into the context every request RequestContext.RequestBegin += () => { var config = LibraryConfiguration.Local; if (config == null) return; RequestContext context = RequestContext.CurrentContext; if (context == null) return; HttpCookie cookie = AspNetSessionHandler.GetCookie(context.HttpContext); if (config.Session.CacheExpire >= 0) context.HttpContext.Session.Timeout = config.Session.CacheExpire; if (config.Session.CacheLimiter != null) PhpSession.CacheLimiter(config.Session.CacheLimiter); if (cookie != null) { if (config.Session.CookieLifetime >= 0) context.SessionCookieLifetime = config.Session.CookieLifetime; if (config.Session.CookiePath != null) cookie.Path = config.Session.CookiePath; if (config.Session.CookieDomain != null) cookie.Domain = config.Session.CookieDomain; cookie.Secure = config.Session.CookieSecure; } }; } /// /// A serializer used for serializing session data. Can't contain a null reference. /// Setting null to the propety will set the default PHP serializer. /// public Serializer Serializer { get { return serializer; } set { serializer = (value != null) ? value : PhpSerializer.Default; } } private Serializer serializer = PhpSerializer.Default; /// /// A probability factor of invocation of old sessions collection. To get the probability, /// the factor is divided by . /// public int GcProbability = 1; /// /// The divisor of probability factor. /// public int GcDivisor = 100; /// /// A maximal session lifetime in seconds. /// public int GcMaxLifetime = 1440; /// /// A directory path relative to the current directory where the session files will be stored in. /// public string SavePath = Path.GetTempPath(); /// /// HttpContext.Session.Timeout if not -1. /// public int CacheExpire = -1; /// /// CacheLimiter if not null. /// public string CacheLimiter = null; /// /// HttpContext.SessionCookieLifetime if not -1. /// public int CookieLifetime = -1; /// /// cookie.Path if not null. /// public string CookiePath = null; /// /// cookie.Domain if not null. /// public string CookieDomain = null; /// /// cookie.Secure. /// public bool CookieSecure = false; /// /// Copies values to the target structure. /// internal SessionSection DeepCopy() { return (SessionSection)this.MemberwiseClone(); } public bool Parse(string name, string value, XmlNode node) { switch (name) { case "Serializer": { Serializer serializer = Serializers.GetSerializer(value); if (serializer == null) throw new ConfigurationErrorsException(LibResources.GetString("unknown_serializer", value) + ".", node); this.serializer = serializer; break; } case "GcProbability": GcProbability = ConfigUtils.ParseInteger(value, 0, Int32.MaxValue, node); break; case "GcDivisor": GcDivisor = ConfigUtils.ParseInteger(value, 1, Int32.MaxValue, node); break; case "GcMaxLifetime": GcMaxLifetime = ConfigUtils.ParseInteger(value, Int32.MinValue, Int32.MaxValue, node); break; case "SavePath": if (value != "") SavePath = value; break; case "CacheExpire": CacheExpire = ConfigUtils.ParseInteger(value, 0, Int32.MaxValue, node); break; case "CacheLimiter": CacheLimiter = value; break; case "CookieLifetime": CookieLifetime = ConfigUtils.ParseInteger(value, 0, Int32.MaxValue, node); break; case "CookiePath": CookiePath = value; break; case "CookieDomain": CookieDomain = value; break; case "CookieSecure": CookieSecure = value == "true"; break; default: return false; } return true; } internal void Validate() { // sets default value if the path is null: if (SavePath == null) SavePath = Path.GetTempPath(); } } #endregion #region Date /// /// Date funtions options. /// [Serializable] public partial class DateSection : IPhpConfigurationSection { public bool Parse(string name, string value, XmlNode node) { switch (name) { case "Latitude": Latitude = ConfigUtils.ParseDouble(value, node); break; case "Longitude": Longitude = ConfigUtils.ParseDouble(value, node); break; case "SunsetZenith": SunsetZenith = ConfigUtils.ParseDouble(value, node); break; case "SunriseZenith": SunriseZenith = ConfigUtils.ParseDouble(value, node); break; case "TimeZone": if (!string.IsNullOrEmpty(value)) { TimeZone = PhpTimeZone.GetTimeZone(value); if (TimeZone == null) throw new ConfigurationErrorsException(LibResources.GetString("unknown_timezone", value) + ".", node); } break; default: return false; } return true; } } #endregion #region Serialization /// /// Serialization functions options. /// [Serializable] public sealed class SerializationSection : IPhpConfigurationSection { /// /// A serializer used for serializing data. Can't contain a null reference. /// Setting null to the property will set the default PHP serializer. /// public Serializer DefaultSerializer { get { return defaultSerializer; } set { defaultSerializer = (value != null) ? value : PhpSerializer.Default; } } private Serializer defaultSerializer = PhpSerializer.Default; public bool Parse(string name, string value, XmlNode node) { switch (name) { case "DefaultSerializer": { Serializer serializer = Serializers.GetSerializer(value); if (serializer == null) throw new ConfigurationErrorsException(LibResources.GetString("unknown_serializer", value) + ".", node); this.defaultSerializer = serializer; break; } default: return false; } return true; } internal SerializationSection DeepCopy() { return (SerializationSection)this.MemberwiseClone(); } } #endregion #region Legacy Configuration /// /// Gets, sets, or restores a value of a legacy configuration option. /// private static object GetSetRestore(LocalConfiguration config, string option, object value, IniAction action) { LibraryConfiguration local = (LibraryConfiguration)config.GetLibraryConfig(LibraryDescriptor.Singleton); LibraryConfiguration @default = DefaultLocal; switch (option) { case "sendmail_from": return PhpIni.GSR(ref local.Mailer.DefaultFromHeader, @default.Mailer.DefaultFromHeader, value, action); case "SMTP": return PhpIni.GSR(ref local.Mailer.SmtpServer, @default.Mailer.SmtpServer, value, action); case "smtp_port": return PhpIni.GSR(ref local.Mailer.SmtpPort, @default.Mailer.SmtpPort, value, action); case "mail.add_x_header": return PhpIni.GSR(ref local.Mailer.AddXHeader, @default.Mailer.AddXHeader, value, action); case "highlight.bg": return PhpIni.GSR(ref local.Highlighting.Background, @default.Highlighting.Background, value, action); case "highlight.comment": return PhpIni.GSR(ref local.Highlighting.Comment, @default.Highlighting.Comment, value, action); case "highlight.default": return PhpIni.GSR(ref local.Highlighting.Default, @default.Highlighting.Default, value, action); case "highlight.html": return PhpIni.GSR(ref local.Highlighting.Html, @default.Highlighting.Html, value, action); case "highlight.keyword": return PhpIni.GSR(ref local.Highlighting.Keyword, @default.Highlighting.Keyword, value, action); case "highlight.string": return PhpIni.GSR(ref local.Highlighting.String, @default.Highlighting.String, value, action); case "session.serialize_handler": return PhpSession.GsrSerializer(local, @default, value, action); case "session.cache_expire": return PhpSession.GsrCacheExpire(value, action); case "session.cache_limiter": return PhpSession.GsrCacheLimiter(value, action); case "session.save_path": return PhpIni.GSR(ref local.Session.SavePath, @default.Session.SavePath, value, action); case "session.gc_maxlifetime": return PhpIni.GSR(ref local.Session.GcMaxLifetime, @default.Session.GcMaxLifetime, value, action); case "session.gc_probability": return PhpIni.GSR(ref local.Session.GcProbability, @default.Session.GcProbability, value, action); case "session.gc_divisor": return PhpIni.GSR(ref local.Session.GcDivisor, @default.Session.GcDivisor, value, action); case "session.cookie_lifetime": return PhpSession.GsrCookieLifetime(value, action); case "session.cookie_path": return PhpSession.GsrCookiePath(value, action); case "session.cookie_domain": return PhpSession.GsrCookieDomain(value, action); case "session.cookie_secure": return PhpSession.GsrCookieSecure(value, action); case "date.default_latitude": return PhpIni.GSR(ref local.Date.Latitude, @default.Date.Latitude, value, action); case "date.default_longitude": return PhpIni.GSR(ref local.Date.Longitude, @default.Date.Longitude, value, action); case "date.sunrise_zenith": return PhpIni.GSR(ref local.Date.SunriseZenith, @default.Date.SunriseZenith, value, action); case "date.sunset_zenith": return PhpIni.GSR(ref local.Date.SunsetZenith, @default.Date.SunsetZenith, value, action); case "date.timezone": return PhpTimeZone.GsrTimeZone(local, @default, value, action); } Debug.Fail("Option '" + option + "' is supported but not implemented."); return null; } /// /// Writes Phalanger BCL legacy options and their values to XML text stream. /// Skips options whose values are the same as default values of Phalanger. /// /// XML writer. /// A hashtable containing PHP names and option values. Consumed options are removed from the table. /// Whether to add "phpName" attribute to option nodes. public static void LegacyOptionsToXml(XmlTextWriter writer, Hashtable options, bool writePhpNames) // GENERICS: { if (writer == null) throw new ArgumentNullException("writer"); if (options == null) throw new ArgumentNullException("options"); LibraryConfiguration local = new LibraryConfiguration(); PhpIniXmlWriter ow = new PhpIniXmlWriter(writer, options, writePhpNames); ow.StartSection("session"); ow.WriteOption("session.cache_limiter", "CacheLimiter", "no-cache", PhpSession.DefaultCacheLimiter); ow.WriteOption("session.cache_expire", "CacheExpire", 180, PhpSession.DefaultCacheExpire); ow.WriteOption("session.serialize_handler", "Serializer", "php", local.Session.Serializer.Name); ow.WriteOption("session.gc_probability", "GcProbability", 1, local.Session.GcProbability); ow.WriteOption("session.gc_divisor", "GcDivisor", 100, local.Session.GcDivisor); ow.WriteOption("session.gc_maxlifetime", "GcMaxLifetime", 1440, local.Session.GcMaxLifetime); ow.WriteOption("session.save_path", "SavePath", "", local.Session.SavePath); ow.WriteOption("session.cookie_lifetime", "CookieLifetime", 0, PhpSession.DefaultCookieLifetime); ow.WriteOption("session.cookie_path", "CookiePath", "/", PhpSession.DefaultCookiePath); ow.WriteOption("session.cookie_domain", "CookieDomain", "", PhpSession.DefaultCookieDomain); ow.WriteOption("session.cookie_secure", "CookieSecure", false, PhpSession.DefaultCookieSecure); ow.StartSection("mailer"); ow.WriteOption("SMTP", "SmtpServer", "localhost", local.Mailer.SmtpServer); ow.WriteOption("smtp_port", "SmtpPort", 25, local.Mailer.SmtpPort); ow.WriteOption("sendmail_from", "DefaultFromHeader", null, local.Mailer.DefaultFromHeader); ow.StartSection("highlighting"); ow.WriteOption("highlight.bg", "Background", "#FFFFFF", local.Highlighting.Background); ow.WriteOption("highlight.string", "String", "#DD0000", local.Highlighting.String); ow.WriteOption("highlight.comment", "Comment", "#FF8000", local.Highlighting.Comment); ow.WriteOption("highlight.keyword", "Keyword", "#007700", local.Highlighting.Keyword); ow.WriteOption("highlight.html", "Html", "#000000", local.Highlighting.Html); ow.WriteOption("highlight.default", "Default", "#0000BB", local.Highlighting.Default); ow.StartSection("date"); ow.WriteOption("date.default_latitude", "Latitude", 31.7667, local.Date.Latitude); ow.WriteOption("date.default_longitude", "Longitude", 35.2333, local.Date.Longitude); ow.WriteOption("date.sunrise_zenith", "SunriseZenith", 90.83, local.Date.SunriseZenith); ow.WriteOption("date.sunset_zenith", "SunsetZenith", 90.83, local.Date.SunsetZenith); ow.WriteOption("date.timezone", "TimeZone", null, local.Date.TimeZone.StandardName); ow.WriteEnd(); } /// /// Registers legacy ini-options. /// internal static void RegisterLegacyOptions() { const string s = "standard"; GetSetRestoreDelegate d = new GetSetRestoreDelegate(GetSetRestore); // highlighting: IniOptions.Register("highlight.bg", IniFlags.Supported | IniFlags.Local, d, s); IniOptions.Register("highlight.comment", IniFlags.Supported | IniFlags.Local, d, s); IniOptions.Register("highlight.default", IniFlags.Supported | IniFlags.Local, d, s); IniOptions.Register("highlight.html", IniFlags.Supported | IniFlags.Local, d, s); IniOptions.Register("highlight.keyword", IniFlags.Supported | IniFlags.Local, d, s); IniOptions.Register("highlight.string", IniFlags.Supported | IniFlags.Local, d, s); // e-mail: IniOptions.Register("SMTP", IniFlags.Supported | IniFlags.Local, d, s); IniOptions.Register("smtp_port", IniFlags.Supported | IniFlags.Local, d, s); IniOptions.Register("sendmail_from", IniFlags.Supported | IniFlags.Local, d, s); IniOptions.Register("sendmail_path", IniFlags.Unsupported | IniFlags.Global, d, s); IniOptions.Register("mail.add_x_header", IniFlags.Supported | IniFlags.Local, d, s); // session: IniOptions.Register("session.cache_expire", IniFlags.Supported | IniFlags.Local | IniFlags.Http, d, s); IniOptions.Register("session.cache_limiter", IniFlags.Supported | IniFlags.Local | IniFlags.Http, d, s); IniOptions.Register("session.serialize_handler", IniFlags.Supported | IniFlags.Local | IniFlags.Http, d, s); IniOptions.Register("session.save_path", IniFlags.Supported | IniFlags.Local | IniFlags.Http, d, s); IniOptions.Register("session.gc_maxlifetime", IniFlags.Supported | IniFlags.Local | IniFlags.Http, d, s); IniOptions.Register("session.gc_probability", IniFlags.Supported | IniFlags.Local | IniFlags.Http, d, s); IniOptions.Register("session.gc_divisor", IniFlags.Supported | IniFlags.Local | IniFlags.Http, d, s); IniOptions.Register("session.cookie_domain", IniFlags.Supported | IniFlags.Local | IniFlags.Http, d, s); IniOptions.Register("session.cookie_lifetime", IniFlags.Supported | IniFlags.Local | IniFlags.Http, d, s); IniOptions.Register("session.cookie_path", IniFlags.Supported | IniFlags.Local | IniFlags.Http, d, s); IniOptions.Register("session.cookie_secure", IniFlags.Supported | IniFlags.Local | IniFlags.Http, d, s); IniOptions.Register("session.use_cookies", IniFlags.Unsupported | IniFlags.Local | IniFlags.Http, d, s); IniOptions.Register("session.use_only_cookies", IniFlags.Unsupported | IniFlags.Local | IniFlags.Http, d, s); IniOptions.Register("session.encode_sources", IniFlags.Unsupported | IniFlags.Local | IniFlags.Http, d, s); IniOptions.Register("session.entropy_file", IniFlags.Unsupported | IniFlags.Local | IniFlags.Http, d, s); IniOptions.Register("session.entropy_length", IniFlags.Unsupported | IniFlags.Local | IniFlags.Http, d, s); IniOptions.Register("session.referer_check", IniFlags.Unsupported | IniFlags.Local | IniFlags.Http, d, s); IniOptions.Register("session.use_trans_sid", IniFlags.Unsupported | IniFlags.Global | IniFlags.Http, d, s); // date: IniOptions.Register("date.default_latitude", IniFlags.Supported | IniFlags.Local, d, s); IniOptions.Register("date.default_longitude", IniFlags.Supported | IniFlags.Local, d, s); IniOptions.Register("date.sunrise_zenith", IniFlags.Supported | IniFlags.Local, d, s); IniOptions.Register("date.sunset_zenith", IniFlags.Supported | IniFlags.Local, d, s); IniOptions.Register("date.timezone", IniFlags.Supported | IniFlags.Local, d, s); } #endregion } } ================================================ FILE: Source/ClassLibrary/Configuration.cs ================================================ /* Copyright (c) 2005-2006 Tomas Matousek. The use and distribution terms for this software are contained in the file named License.txt, which can be found in the root of the Phalanger distribution. By using this software in any fashion, you are agreeing to be bound by the terms of this license. You must not remove this notice from this software. */ using System; using System.IO; using System.Xml; using System.Collections; using System.Configuration; using System.Runtime.Serialization; using PHP; using PHP.Core; #if SILVERLIGHT using PHP.CoreCLR; #endif namespace PHP.Library { public sealed partial class LibraryConfiguration : IPhpConfiguration { #region Highlighting /// /// Highlighting functions options. /// public partial class HighlightingSection : IPhpConfigurationSection { /// String color. public string String = "navy"; /// Comment color. public string Comment = "green"; /// Keyword color. public string Keyword = "blue"; /// Background color. public string Background = "white"; /// HTML color. public string Html = "gray"; /// Script tags color (<?, ?>, <%, ?>%, ...). public string ScriptTags = "red"; /// Default foreground color. public string Default = "black"; internal HighlightingSection DeepCopy() { return (HighlightingSection)this.MemberwiseClone(); } } #endregion #region Date /// /// Date funtions options. /// public partial class DateSection : IPhpConfigurationSection { /// /// Default latitude (used for calculating sunrise and sunset times). /// public double Latitude = 31.7667; /// /// Default longitude (used for calculating sunrise and sunset times). /// public double Longitude = 35.2333; /// /// Default longitude (used for calculating sunrise and sunset times). /// public double SunsetZenith = 90.83; /// /// Default longitude (used for calculating sunrise and sunset times). /// public double SunriseZenith = 90.83; /// /// Default timezone used by time-zone functions. /// public TimeZoneInfo TimeZone = null; internal DateSection DeepCopy() { return (DateSection)this.MemberwiseClone(); } } #endregion #region Construction, Copying public readonly HighlightingSection Highlighting; public readonly DateSection Date; #if !SILVERLIGHT public readonly MailerSection Mailer; public readonly SessionSection Session; public readonly SerializationSection Serialization; #endif public LibraryConfiguration() { this.Highlighting = new HighlightingSection(); this.Date = new DateSection(); #if !SILVERLIGHT this.Mailer = new MailerSection(); this.Session = new SessionSection(); this.Serialization = new SerializationSection(); #endif } private LibraryConfiguration(LibraryConfiguration source) { this.Highlighting = source.Highlighting.DeepCopy(); this.Date = source.Date.DeepCopy(); #if !SILVERLIGHT this.Mailer = source.Mailer.DeepCopy(); this.Session = source.Session.DeepCopy(); this.Serialization = source.Serialization.DeepCopy(); #endif } /// /// Creates a deep copy of the configuration record. /// /// The copy. public IPhpConfiguration DeepCopy() { return new LibraryConfiguration(this); } #endregion #region Configuration Getters /// /// Gets the library configuration associated with the current script context. /// public static LibraryConfiguration Local { get { return (LibraryConfiguration)Core.Configuration.Local.GetLibraryConfig(LibraryDescriptor.Singleton); } } /// /// Gets the default library configuration. /// public static LibraryConfiguration DefaultLocal { get { return (LibraryConfiguration)Core.Configuration.DefaultLocal.GetLibraryConfig(LibraryDescriptor.Singleton); } } /// /// Gets local configuration associated with a specified script context. /// /// Scritp context. /// Local library configuration. public static LibraryConfiguration GetLocal(ScriptContext/*!*/ context) { if (context == null) throw new ArgumentNullException("context"); return (LibraryConfiguration)context.Config.GetLibraryConfig(LibraryDescriptor.Singleton); } #endregion } } ================================================ FILE: Source/ClassLibrary/Constants.cs ================================================ /* Copyright (c) 2004-2006 Tomas Matousek. The use and distribution terms for this software are contained in the file named License.txt, which can be found in the root of the Phalanger distribution. By using this software in any fashion, you are agreeing to be bound by the terms of this license. You must not remove this notice from this software. */ using System; using PHP.Core; using System.Diagnostics; namespace PHP.Library { /// /// Implementation of constants handling functions. /// /// public static class PhpConstants { /// /// Defines a constant. /// /// The name of the constant. Can be arbitrary string. /// The value of the constant. Can be null reference or a scalar . /// Whether the new constant has been defined. [ImplementsFunction("define")] public static bool Define(string name, object value) { return ScriptContext.CurrentContext.DefineConstant(name, value, false); } /// /// Defines a constant. /// /// The name of the constant. Can be arbitrary string. /// The value of the constant. Can be null reference or a scalar . /// Whether the name is case insensitive. /// Whether the new constant has been defined. [ImplementsFunction("define")] public static bool Define(string name, object value, bool caseInsensitive) { return ScriptContext.CurrentContext.DefineConstant(name, value, caseInsensitive); } /// /// Determines whether a constant is defined. /// /// Current . /// The name of the constant. /// Whether the constant is defined. [ImplementsFunction("defined")] [PureFunction(typeof(PhpConstants), "Defined_Analyze")] public static bool Defined(ScriptContext context, string name) { return context.IsConstantDefined(name); } #region analyzer of: defined(), constant() /// /// Try to find constant by given in compile time. /// /// Actual . /// Constant name, including class constants. /// Outputs true or false if the existance of the constant was determined. /// Constant descriptor. private static PHP.Core.Reflection.DConstant EvaluateConstant(Analyzer analyzer, string name, out bool? exists) { if (name == null) name = string.Empty; // try global constant: QualifiedName? alias; var constant = analyzer.SourceUnit.ResolveConstantName(new QualifiedName(new Name(name)), analyzer.CurrentScope, out alias, null, PHP.Core.Text.Span.Invalid, false); if (constant != null) { exists = true; // we surely know, the constant is defined. return constant; } // try class constant: string typename, constname; if (Name.IsClassMemberSyntax(name, out typename, out constname)) { var type = analyzer.SourceUnit.ResolveTypeName(new QualifiedName(new Name(typename)), analyzer.CurrentScope, out alias, null, PHP.Core.Text.Span.Invalid, false); if (type != null && !type.IsUnknown) { Core.Reflection.ClassConstant classconst; type.GetConstant(new VariableName(constname), null /* class constants are global only */, out classconst); Debug.Assert(classconst == null || classconst.IsPublic, "Class constant are expected to be public only."); exists = (classconst != null); // we surely know, wheter the constant is or is not defined. return classconst; } } // special constants defined in runtime, but definitely defined: if (name == "PHALANGER") { exists = true; return null; } // do not evaluate in compile time exists = null; // we are not sure about existance of this constant. return null; } public static PHP.Core.Compiler.AST.FunctionCallEvaluateInfo Defined_Analyze(Analyzer analyzer, string name) { bool? exists; var constant = EvaluateConstant(analyzer, name, out exists); if (exists != null) return new Core.Compiler.AST.FunctionCallEvaluateInfo() { value = exists.Value // constant existance is known in compile time }; // check in run time: return null; } public static PHP.Core.Compiler.AST.FunctionCallEvaluateInfo Constant_Analyze(Analyzer analyzer, string name) { bool? exists; var constant = EvaluateConstant(analyzer, name, out exists); if (constant != null && constant.HasValue) return new Core.Compiler.AST.FunctionCallEvaluateInfo() { value = constant.Value // evaluated value in compile time }; // check in run time: return null; } #endregion /// /// Retrieves a value of a constant. /// /// The name of the constant. /// The value. [ImplementsFunction("constant")] [PureFunction(typeof(PhpConstants), "Constant_Analyze")] public static object Constant(string name) { return ScriptContext.CurrentContext.GetConstantValue(name, false, false); } /// /// Retrieves defined constants. /// /// The array which contains pairs (constant name,constant value). [ImplementsFunction("get_defined_constants")] public static PhpArray GetDefinedConstants() { ScriptContext context = ScriptContext.CurrentContext; PhpArray result = new PhpArray(0, context.GetDefinedConstantCount()); context.GetDefinedConstants(result); return result; } /// /// Retrieves defined constants. /// /// Returns a multi-dimensional array with categories in the keys of the first dimension and constants and their values in the second dimension. /// Retrives the names and values of all the constants currently defined. [ImplementsFunction("get_defined_constants")] public static PhpArray GetDefinedConstants(bool categorize) { if (categorize == false) return GetDefinedConstants(); ScriptContext context = ScriptContext.CurrentContext; PhpArray resultArray = new PhpArray(); PhpArray internalArray = null; //Core constants first internalArray = new PhpArray(); context.GetDefinedExtensionConstants(internalArray, "Core"); if (internalArray.Count > 0) resultArray.Add("Core", internalArray); // Loaded extensions constants foreach (string extensionName in ScriptContext.CurrentContext.ApplicationContext.GetLoadedExtensions())//TODO: sort alphabeticaly { if (extensionName == "Core") continue; // skip core, it's already defined ( Class library has few core classes ) internalArray = new PhpArray(); context.GetDefinedExtensionConstants(internalArray, extensionName); if (internalArray.Count > 0) resultArray.Add(extensionName, internalArray); } //User constants internalArray = new PhpArray(0, context.GetDefinedUserConstantCount()); context.GetDefinedUserConstants(internalArray); resultArray.Add("user", internalArray); return resultArray; } } } ================================================ FILE: Source/ClassLibrary/Data.CLR/Connection.cs ================================================ /* Copyright (c) 2005-2006 Tomas Matousek and Martin Maly. The use and distribution terms for this software are contained in the file named License.txt, which can be found in the root of the Phalanger distribution. By using this software in any fashion, you are agreeing to be bound by the terms of this license. You must not remove this notice from this software. */ using System; using System.Text; using System.Data; using System.Collections; using System.Collections.Generic; using PHP.Core; using System.Diagnostics; namespace PHP.Library.Data { /// /// Abstract class implementing common functionality of PHP connection resources. /// public abstract class PhpDbConnection : PhpResource { #region Fields & Properties /// /// Connection string. /// public string/*!*/ ConnectionString { get { return connectionString; } } private string/*!*/ connectionString; /// /// Underlying database connection. /// public IDbConnection/*!*/Connection { get { return this.connection; } } protected IDbConnection/*!*/ connection; /// /// A result associated with this connection that possibly has not been closed yet. /// protected IDataReader pendingReader; /// /// Last result resource. /// public PhpDbResult LastResult { get { return lastResult; } } private PhpDbResult lastResult; /// /// Gets an exception thrown by last performed operation or a null reference /// if that operation succeeded. /// public Exception LastException { get { return lastException; } } private Exception lastException; /// /// Gets the number of rows affected by the last query executed on this connection. /// public int LastAffectedRows { get { if (lastResult == null) return -1; // SELECT gives -1, UPDATE/INSERT gives the number: return (lastResult.RecordsAffected >= 0) ? lastResult.RecordsAffected : lastResult.RowCount; } } #endregion /// /// Creates a new instance of with a specified connection. /// /// Connection string. /// Database connection. /// Connection resource name. /// is a null reference. protected PhpDbConnection(string/*!*/ connectionString, IDbConnection/*!*/ connection, string/*!*/ name) : base(name) { if (connection == null) throw new ArgumentNullException("connection"); if (connectionString == null) throw new ArgumentNullException("connectionString"); this.connection = connection; this.connectionString = connectionString; } /// /// Gets a query result resource. /// /// Database connection. /// Data reader to be used for result resource population. /// Whether to convert data types to PHP ones. /// Result resource holding all resulting data of the query. protected abstract PhpDbResult GetResult(PhpDbConnection/*!*/ connection, IDataReader/*!*/ reader, bool convertTypes); /// /// Creates a command instance. /// /// Instance of command specific for the database provider. protected abstract IDbCommand/*!*/ CreateCommand(); /// /// Builds a connection string. /// public static string/*!*/ BuildConnectionString(string server, string user, string password, string additionalSettings) { StringBuilder result = new StringBuilder(8); result.Append("server="); result.Append(server); // result.Append(";database="); // result.Append(database); result.Append(";user id="); result.Append(user); result.Append(";password="); result.Append(password); if (!String.IsNullOrEmpty(additionalSettings)) { result.Append(';'); result.AppendFormat(additionalSettings); } return result.ToString(); } /// /// Opens a database connection if it has not been opened yet. /// /// true if successful. /// Attempt to connect the database failed (Warning). /// /// Sets to null (on success) or to the exception object (on failure). /// public bool Connect() { Debug.Assert(connection != null); if (connection.State == ConnectionState.Open) return true; connection.ConnectionString = this.ConnectionString; try { connection.Open(); lastException = null; } catch (Exception e) { lastException = e; PhpException.Throw(PhpError.Warning, LibResources.GetString("cannot_open_connection", GetExceptionMessage(e))); return false; } return true; } /// /// Closes connection and releases the resource. /// protected override void FreeManaged() { base.FreeManaged(); ClosePendingReader(); try { if (connection != null) { connection.Close(); } lastException = null; } catch (Exception e) { lastException = e; PhpException.Throw(PhpError.Warning, LibResources.GetString("error_closing_connection", GetExceptionMessage(e))); } connection = null; } /// /// Closes pending reader. /// public void ClosePendingReader() { if (pendingReader != null) { if (!pendingReader.IsClosed) pendingReader.Close(); pendingReader = null; } } /// /// Executes a query on the connection. /// /// The query. /// Whether to convert data types to PHP ones. /// PhpDbResult class representing the data read from database. /// is a null reference. /// Query execution failed (Warning). public PhpDbResult ExecuteQuery(string/*!*/ query, bool convertTypes) { if (query == null) throw new ArgumentNullException("query"); return ExecuteCommand(query, CommandType.Text, convertTypes, null, false); } /// /// Executes a stored procedure on the connection. /// /// Procedure name. /// Parameters. /// Whether to load results. /// PhpDbResult class representing the data read from database. /// is a null reference. /// Procedure execution failed (Warning). public PhpDbResult ExecuteProcedure(string/*!*/ procedureName, IEnumerable parameters, bool skipResults) { if (procedureName == null) throw new ArgumentNullException("procedureName"); return ExecuteCommand(procedureName, CommandType.StoredProcedure, true, parameters, skipResults); } /// /// Executes a command on the connection. /// /// Command text. /// Whether to convert data types to PHP ones. /// Command type. /// Parameters. /// Whether to load results. /// PhpDbResult class representing the data read from database. /// is a null reference. /// Command execution failed (Warning). public PhpDbResult ExecuteCommand(string/*!*/ commandText, CommandType commandType, bool convertTypes, IEnumerable parameters, bool skipResults) { if (commandText == null) throw new ArgumentNullException("commandText"); return (Connect()) ? ExecuteCommandInternal(commandText, commandType, convertTypes, parameters, skipResults) : null; } protected virtual PhpDbResult ExecuteCommandInternal(string/*!*/ commandText, CommandType commandType, bool convertTypes, IEnumerable parameters, bool skipResults) { ClosePendingReader(); // IDbCommand IDbCommand command = CreateCommand(); command.Connection = connection; command.CommandText = commandText; command.CommandType = commandType; if (parameters != null) { command.Parameters.Clear(); foreach (IDataParameter parameter in parameters) command.Parameters.Add(parameter); } // ExecuteReader PhpDbResult result = null; try { var/*!*/reader = this.pendingReader = command.ExecuteReader(); if (skipResults) { // reads all data: do { while (reader.Read()); } while (reader.NextResult()); } else { lastResult = null; // read all data into PhpDbResult: result = GetResult(this, reader, convertTypes); result.command = command; lastResult = result; } lastException = null; } catch (Exception e) { lastException = e; PhpException.Throw(PhpError.Warning, LibResources.GetString("command_execution_failed", GetExceptionMessage(e))); } // return result; } /// /// Reexecutes a command associated with a specified result resource to get schema of the command result. /// /// The result resource. internal void ReexecuteSchemaQuery(PhpDbResult/*!*/ result) { if (!Connect() || result.Command == null) return; ClosePendingReader(); try { result.Reader = pendingReader = result.Command.ExecuteReader(CommandBehavior.KeyInfo | CommandBehavior.SchemaOnly); } catch (Exception e) { lastException = e; PhpException.Throw(PhpError.Warning, LibResources.GetString("command_execution_failed", GetExceptionMessage(e))); } } /// /// Changes the active database on opened connection. /// /// /// true if databse was changed; otherwise returns false public bool SelectDb(string databaseName) { ClosePendingReader(); try { if (this.connection.State == ConnectionState.Open) { connection.ChangeDatabase(databaseName); lastException = null; return true; } } catch (Exception e) { lastException = e; PhpException.Throw(PhpError.Warning, LibResources.GetString("database_selection_failed", GetExceptionMessage(e))); } return false; } /// /// Gets a message from an exception raised by the connector. /// Removes the ending dot. /// /// Exception. /// The message. /// is a null reference. public virtual string GetExceptionMessage(Exception/*!*/ e) { if (e == null) throw new ArgumentNullException("e"); return PhpException.ToErrorMessage(e.Message); } /// /// Gets the last error message. /// /// The message or an empty string if no error occured. public virtual string GetLastErrorMessage() { return (LastException != null) ? LastException.Message : String.Empty; } /// /// Gets the last error number. /// /// -1 on error, zero otherwise. /// Should be implemented by the subclass if the respective provider supports error numbers. public virtual int GetLastErrorNumber() { return (LastException != null) ? -1 : 0; } } } ================================================ FILE: Source/ClassLibrary/Data.CLR/ConnectionManager.cs ================================================ /* Copyright (c) 2005-2006 Tomas Matousek. The use and distribution terms for this software are contained in the file named License.txt, which can be found in the root of the Phalanger distribution. By using this software in any fashion, you are agreeing to be bound by the terms of this license. You must not remove this notice from this software. */ using System; using System.Text; using System.Collections; using System.Threading; using PHP.Core; namespace PHP.Library.Data { /// /// Abstract base class for database connection managers. /// public abstract class ConnectionManager { /// /// Connection factory. /// /// Connection string. /// Connection. protected abstract PhpDbConnection CreateConnection(string/*!*/ connectionString); /// /// List of connections established by the manager. /// private ArrayList connections = new ArrayList(); /// /// Number of all connections established by the application. /// private static int AppConnectionCount = 0; /// /// Establishes a connection if a connection with the same connection string doesn't exist yet. /// /// Connection string. /// Whether to create a new connection even if there exists one with same string. /// Maximal number of connections. Negative value means no limit. /// true on success, false on failure. /// The connection (opened or not) or a null reference on failure. public PhpDbConnection OpenConnection(string/*!*/ connectionString, bool newConnection, int limit, out bool success) { if (connectionString == null) throw new ArgumentNullException("connectionString"); PhpDbConnection connection; if (!newConnection) { connection = GetConnectionByString(connectionString); if (connection != null) { success = true; return connection; } } int count = Interlocked.Increment(ref AppConnectionCount); if (limit >= 0 && count > limit) { Interlocked.Decrement(ref AppConnectionCount); PhpException.Throw(PhpError.Warning, LibResources.GetString("connection_limit_reached", limit)); success = false; return null; } connection = CreateConnection(connectionString); if (!connection.Connect()) { success = false; return connection; } connections.Add(connection); success = true; return connection; } private PhpDbConnection GetConnectionByString(string connectionString) { foreach (PhpDbConnection connection in connections) { if (connection.ConnectionString == connectionString) return connection; } return null; } /// /// Removes last used connection from the list of active Connections. /// public void RemoveConnection() { if (connections.Count > 0) { connections.RemoveAt(connections.Count - 1); Interlocked.Decrement(ref AppConnectionCount); } } /// /// Removes specified connection from the list of active connections. /// /// The connection to be removed. public void RemoveConnection(PhpDbConnection/*!*/ connection) { if (connection == null) throw new ArgumentNullException("connection"); if (connections.Count > 0) { connections.Remove(connection); Interlocked.Decrement(ref AppConnectionCount); } } /// /// Returns last opened connection. /// /// public PhpDbConnection GetLastConnection() { if (connections.Count == 0) return null; return (PhpDbConnection)connections[connections.Count - 1]; } } } ================================================ FILE: Source/ClassLibrary/Data.CLR/Result.cs ================================================ /* Copyright (c) 2005-2006 Tomas Matousek and Martin Maly. The use and distribution terms for this software are contained in the file named License.txt, which can be found in the root of the Phalanger distribution. By using this software in any fashion, you are agreeing to be bound by the terms of this license. You must not remove this notice from this software. */ using System; using System.Runtime.Serialization; using System.Data; using System.Data.SqlClient; using System.Collections; using System.Collections.Generic; using PHP.Core; using PHP.Core.Reflection; using System.Diagnostics; namespace PHP.Library.Data { /// /// Holds a result of a query. /// public abstract class PhpDbResult : PhpResource { /// /// Represents a single result set returned by query. /// protected sealed class ResultSet { /// /// Rows. /// public ArrayList Rows; /// /// Names of columns in query. /// public string[] Names; /// /// Names of SQL types of columns in query. /// public string[] DataTypes; /// /// Number of records affected by the query. /// public int RecordsAffected = -1; /// /// Custom data obtained from the row by callback function of specific PhpDbResult implementation. /// public object CustomData; } /// /// Source data reader. /// internal protected IDataReader Reader { get { return reader; } set { reader = value; } } private IDataReader reader; private PhpDbConnection connection; private List resultSets; #region Fields and Properties /// /// Command whose result is represented by this instance. /// public IDbCommand Command { get { return command; } } internal IDbCommand command; // GENERICS: internal set /// /// Gets the index of the current result set. Initialized to 0. /// public int CurrentSetIndex { get { return currentSetIndex; } } private int currentSetIndex; /// /// Gets the index of the current row or -1 if no row has been fetched yet. /// public int CurrentRowIndex { get { return currentRowIndex; } } private int currentRowIndex; /// /// Gets the index of the current field. Initialized to 0. /// public int CurrentFieldIndex { get { return currentFieldIndex; } } private int currentFieldIndex; /// /// Gets the index of the last fetched field. Initialized to -1. /// public int LastFetchedField { get { return lastFetchedField; } } private int lastFetchedField = -1; /// /// Gets the number of rows of the result. /// public int RowCount { get { Debug.Assert(CurrentSet.Rows != null); return CurrentSet.Rows.Count; } } /// /// Gets the number of fields of the result. Returns 0 if data are not loaded. /// public int FieldCount { get { Debug.Assert(CurrentSet.Names != null); return CurrentSet.Names.Length; } } /// /// Gets the number of records affected by the query that generates this result. /// Contains minus one for select queries. /// public int RecordsAffected { get { return CurrentSet.RecordsAffected; } } #endregion #region Result Sets /// /// Gets the current result set. /// protected ResultSet/*!*/ CurrentSet { get { return (ResultSet)resultSets[currentSetIndex]; } } /// /// Gets the number of results sets. /// public int ResultSetCount { get { return resultSets.Count; } } /// /// Advances the current result set index. /// /// Whether the index has been advanced. public bool NextResultSet() { if (currentSetIndex < resultSets.Count - 1) { currentSetIndex++; currentRowIndex = -1; currentFieldIndex = 0; return true; } return false; } #endregion #region Constructors, Population, Release /// /// Creates an instance of a result resource. /// /// Database connection. /// Data reader from which to load results. /// Resource name. /// Whether to convert resulting values to PHP types. /// Argument is a null reference. protected PhpDbResult(PhpDbConnection/*!*/ connection, IDataReader/*!*/ reader, string/*!*/ name, bool convertTypes) : base(name) { if (connection == null) throw new ArgumentNullException("connection"); if (reader == null) throw new ArgumentNullException("reader"); this.reader = reader; this.connection = connection; LoadData(convertTypes); } /// /// Loads all data from the reader to arrays. /// /// This method should be called before any other method. private void LoadData(bool convertTypes) { this.resultSets = new List(16); var reader = this.reader; do { ResultSet result_set = new ResultSet() { Rows = new ArrayList(), Names = GetNames(), DataTypes = GetDataTypes(), RecordsAffected = reader.RecordsAffected, CustomData = GetCustomData() }; while (reader.Read()) { result_set.Rows.Add(this.GetValues(result_set.DataTypes, convertTypes)); } resultSets.Add(result_set); } while (reader.NextResult()); this.currentSetIndex = 0; this.currentRowIndex = -1; this.currentFieldIndex = 0; } /// /// Disposes the resource. /// protected override void FreeManaged() { base.FreeManaged(); if (this.reader != null) reader.Close(); } internal void ReleaseConnection() { this.connection = null; } #endregion #region Virtual Methods /// /// Retrieves column names from the reader. /// /// An array of column names. protected virtual string[]/*!*/ GetNames() { string[] names = new string[reader.FieldCount]; for (int i = 0; i < reader.FieldCount; i++) names[i] = reader.GetName(i); return names; } /// /// Retrieves column type names from the reader. /// /// An array of column type names. protected virtual string[]/*!*/ GetDataTypes() { string[] names = new string[reader.FieldCount]; for (int i = 0; i < reader.FieldCount; i++) names[i] = reader.GetDataTypeName(i); return names; } /// /// Get custom data of current row of . Used when loading data from database. /// /// Custom object associated with current row. protected virtual object GetCustomData() { return null; } /// /// Gets values of the current row from the reader. /// /// Column type names. /// Whether to convert types of values to PHP types. /// An array of values of cells in the current row. protected abstract object[]/*!*/ GetValues(string[] dataTypes, bool convertTypes); /// /// Maps SQL type name to PHP type name. /// /// SQL type name. /// PHP type name. protected abstract string/*!*/ MapFieldTypeName(string typeName); #endregion #region SeekRow, SeekField, FetchNextField, FetchArray, FetchObject /// /// Moves the internal cursor to the specified row. /// /// Whether the cursor moved and there are data available. public bool SeekRow(int rowIndex) { if (!CheckRowIndex(rowIndex)) return false; currentRowIndex = rowIndex - 1; currentFieldIndex = 0; return true; } /// /// Seeks to a specified field. /// /// An index of the field. /// Whether the index is in the range. public bool SeekField(int fieldIndex) { CheckFieldIndex(fieldIndex); currentFieldIndex = fieldIndex; return true; } /// /// Advances counter and gets its value. /// /// Index of field to be fetched. public int FetchNextField() { if (lastFetchedField < FieldCount - 1) lastFetchedField++; return lastFetchedField; } /// /// Moves cursor in internal cache one ahead. Reads data from IDataReader if necessary. /// /// Whether the cursor moved and there are data available. private bool ReadRow() { if (currentRowIndex < RowCount - 1) { currentRowIndex++; currentFieldIndex = 0; return true; } return false; } /// /// Returns a PhpArray containing data from collumns in the row and move to the next row. /// Returns false if there are no more rows. /// /// Whether to add integer keys. /// Whether to add string keys. /// A PHP array containing the data. public PhpArray FetchArray(bool intKeys, bool stringKeys) { // no more data if (!this.ReadRow()) return null; Debug.Assert(currentRowIndex >= 0 && currentRowIndex < RowCount); ScriptContext context = ScriptContext.CurrentContext; object[] oa = (object[])CurrentSet.Rows[currentRowIndex]; PhpArray row = new PhpArray((intKeys) ? FieldCount : 0, (stringKeys) ? FieldCount : 0); for (int i = 0; i < FieldCount; i++) { object quoted = Core.Convert.Quote(oa[i], context); if (intKeys) row.Add(i, quoted); if (stringKeys) row[CurrentSet.Names[i]] = quoted; } return row; } /// /// A with properties that correspond to the fetched row, /// or false if there are no more rows. /// /// /// /// Works like FetchArray but instead of storing data to associative array, /// FetchObject use object fields. Note, that field names are case sensitive. /// public PhpObject FetchObject() { // no more data if (!this.ReadRow()) return null; Debug.Assert(currentRowIndex >= 0 && currentRowIndex < RowCount); object[] oa = (object[])CurrentSet.Rows[currentRowIndex]; var runtimeFields = new PhpArray(FieldCount); for (int i = 0; i < FieldCount; i++) { runtimeFields[CurrentSet.Names[i]] = oa[i]; //php_object.SetProperty(CurrentSet.Names[i], oa[i], null); } return new stdClass() { RuntimeFields = runtimeFields }; } #endregion #region GetSchemaTable, GetSchemaRowInfo, GetFieldName, GetFieldType, GetFieldLength, GetFieldValue private ArrayList schemaTables = null; // GENERICS: List /// /// Gets information about schema of the current result set. /// /// Schema table. public DataTable GetSchemaTable() { // loads schema if not loaded yet: if (schemaTables == null) { connection.ReexecuteSchemaQuery(this); if (reader.IsClosed) { PhpException.Throw(PhpError.Warning, LibResources.GetString("cannot_retrieve_schema")); return null; } schemaTables = new ArrayList(); do { schemaTables.Add(reader.GetSchemaTable()); } while (reader.NextResult()); } return (DataTable)schemaTables[currentSetIndex]; } /// /// Gets schema information for a specified field. /// /// Field index. /// Data row containing column schema. public DataRow GetSchemaRowInfo(int fieldIndex) { if (!CheckFieldIndex(fieldIndex)) return null; return GetSchemaTable().Rows[fieldIndex]; } /// /// Gets a name of the current field. /// /// The field name. public string GetFieldName() { return GetFieldName(currentFieldIndex); } /// /// Gets a name of a specified field. /// /// An index of the field. /// The field name or a null reference if index is out of range. public string GetFieldName(int fieldIndex) { if (!CheckFieldIndex(fieldIndex)) return null; return CurrentSet.Names[fieldIndex]; } /// /// Gets a type of the current field. /// /// The type name. public string GetFieldType() { return GetFieldType(currentFieldIndex); } /// /// Gets a PHP name of the current field type. /// /// PHP type name. public string GetPhpFieldType() { return MapFieldTypeName(GetFieldType()); } /// /// Gets a PHP name of a specified field type. /// /// Field index. /// PHP type name. public string GetPhpFieldType(int fieldIndex) { return MapFieldTypeName(GetFieldType(fieldIndex)); } /// /// Gets a type of specified field. /// /// An index of the field. /// The type name. public string GetFieldType(int fieldIndex) { if (!CheckFieldIndex(fieldIndex)) return null; return CurrentSet.DataTypes[fieldIndex]; } /// /// Gets length of the current field. /// /// The field length. public virtual int GetFieldLength() { return GetFieldLength(currentFieldIndex); } /// /// Gets length of a specified field. /// /// An index of the field. /// The field length or 0. public virtual int GetFieldLength(int fieldIndex) { DataRow info = GetSchemaRowInfo(fieldIndex); return (info != null) ? (int)info["ColumnSize"] : 0; } /// /// Gets a value of a specified field of the result. /// /// Row index. /// Name of the field. /// The value or a null reference if row or index are out of range. public object GetFieldValue(int rowIndex, string fieldName) { if (!CheckRowIndex(rowIndex)) return false; for (int i = 0; i < CurrentSet.Names.Length; i++) { if (String.Compare(CurrentSet.Names[i], fieldName, true) == 0) return ((object[])CurrentSet.Rows[rowIndex])[i]; } PhpException.Throw(PhpError.Notice, LibResources.GetString("field_not_exists", fieldName)); return null; } /// /// Gets a value of a specified field of the result. /// /// Row index. /// Index of the field. /// The value or a null reference if row or index are out of range. public object GetFieldValue(int rowIndex, int fieldIndex) { if (!CheckRowIndex(rowIndex) || !CheckFieldIndex(fieldIndex)) return null; return ((object[])CurrentSet.Rows[rowIndex])[fieldIndex]; } /// /// Get custom data associated with current set. /// /// public object GetRowCustomData() { return CurrentSet.CustomData; } #endregion #region Checks /// /// Checks whether a field index is valid for the current result set. /// /// Field index to check. /// Whether the index is in the range [0, ). /// Invalid field index (Warning). public bool CheckFieldIndex(int fieldIndex) { if (fieldIndex < 0 || fieldIndex >= FieldCount) { PhpException.Throw(PhpError.Warning, LibResources.GetString("invalid_data_result_field_index", fieldIndex, this.TypeName, this.Id)); return false; } return true; } /// /// Checks whether a row index is valid for the current result set. /// /// Row index to check. /// Whether the index is in the range [0, ). /// Invalid row index (Warning). public bool CheckRowIndex(int rowIndex) { if (rowIndex < 0 || rowIndex >= RowCount) { PhpException.Throw(PhpError.Warning, LibResources.GetString("invalid_data_result_row_index", rowIndex, this.TypeName, this.Id)); return false; } return true; } #endregion } } ================================================ FILE: Source/ClassLibrary/Data.CLR/Statement.cs ================================================ /* Copyright (c) 2005-2006 Tomas Matousek. The use and distribution terms for this software are contained in the file named License.txt, which can be found in the root of the Phalanger distribution. By using this software in any fashion, you are agreeing to be bound by the terms of this license. You must not remove this notice from this software. */ using System; using System.Data; using System.Collections; using System.Collections.Specialized; using PHP.Core; using System.Diagnostics; namespace PHP.Library.Data { /// /// Represents a parameterized SQL statement. /// public abstract class PhpDbStatement : PhpResource { #region Enum: ParameterType /// /// PHP type of the parameter. Parameter value will be converted accordign to this value. /// public enum ParameterType { Invalid = 0, String = 1, Double = 2, Integer = 3, Null = 4, Infer = 5 } #endregion #region Bindings private class Binding // GENERICS: struct { public PhpReference/*!*/ Variable; public IDataParameter/*!*/ Parameter; public ParameterType Type; public Binding(PhpReference/*!*/ variable, IDataParameter/*!*/ parameter, ParameterType type) { Debug.Assert(variable != null && parameter != null && type != ParameterType.Invalid); this.Variable = variable; this.Parameter = parameter; this.Type = type; } } private Hashtable Bindings { get { if (_bindings == null) _bindings = CollectionsUtil.CreateCaseInsensitiveHashtable(); return _bindings; } } private Hashtable _bindings; // GENERICS: private bool BindingsDefined { get { return _bindings != null; } } #endregion /// /// Connection resource associated with the statement. /// public PhpDbConnection/*!*/ Connection { get { return connection; } } protected PhpDbConnection/*!*/ connection; /// /// Creates an instance of parameterized statement. /// /// Name of the resource. /// Database connection resource. public PhpDbStatement(string/*!*/ resourceName, PhpDbConnection/*!*/ connection) : base(resourceName) { if (connection == null) throw new ArgumentNullException("connection"); this.connection = connection; } /// /// Adds a parameter to variable binding. /// /// SQL parameter. /// PHP variable passed by reference. /// Parameter type specified by user. /// true if the binding succeeded. public bool AddBinding(IDataParameter/*!*/ parameter, PhpReference/*!*/ variable, ParameterType type) { if (parameter == null) throw new ArgumentNullException("parameter"); if (variable == null) throw new ArgumentNullException("variable"); if (type < ParameterType.String || type > ParameterType.Infer) throw new ArgumentOutOfRangeException("type"); if (Bindings.ContainsKey(parameter.ParameterName)) return false; Bindings.Add(parameter.ParameterName, new Binding(variable, parameter, type)); return true; } /// /// Loads data from bound variables to the respective parameters. /// /// An array of parameters with loaded values. public IDataParameter[] PrepareParameters() { if (!BindingsDefined) return new IDataParameter[0]; IDataParameter[] parameters = new IDataParameter[Bindings.Count]; int i = 0; foreach (Binding binding in Bindings.Values) { if (binding.Parameter.Direction == ParameterDirection.InputOutput || binding.Parameter.Direction == ParameterDirection.Input) { switch (binding.Type) { case ParameterType.Double: binding.Parameter.Value = Core.Convert.ObjectToDouble(binding.Variable.Value); break; case ParameterType.String: binding.Parameter.Value = Core.Convert.ObjectToString(binding.Variable.Value); break; case ParameterType.Integer: binding.Parameter.Value = Core.Convert.ObjectToInteger(binding.Variable.Value); break; case ParameterType.Null: binding.Parameter.Value = DBNull.Value; break; case ParameterType.Infer: binding.Parameter.Value = binding.Variable.Value; break; default: Debug.Fail(null); break; } } parameters[i++] = binding.Parameter; } return parameters; } /// /// Writes parameter values back to the bound variables. /// public void WriteParametersBack() { if (!BindingsDefined) return; foreach (Binding binding in Bindings.Values) { if (binding.Parameter.Direction != ParameterDirection.Input) { switch (binding.Type) { case ParameterType.Double: binding.Variable.Value = Core.Convert.ObjectToDouble(binding.Parameter.Value); break; case ParameterType.String: binding.Variable.Value = Core.Convert.ObjectToString(binding.Parameter.Value); break; case ParameterType.Integer: binding.Variable.Value = Core.Convert.ObjectToInteger(binding.Parameter.Value); break; case ParameterType.Null: binding.Variable.Value = binding.Parameter.Value; break; case ParameterType.Infer: binding.Variable.Value = binding.Parameter.Value; break; default: Debug.Fail(null); break; } } } } } } ================================================ FILE: Source/ClassLibrary/DateTime.CLR/DateTime.cs ================================================ /* Copyright (c) 2004-2006 Tomas Matousek and Pavel Novak. The use and distribution terms for this software are contained in the file named License.txt, which can be found in the root of the Phalanger distribution. By using this software in any fashion, you are agreeing to be bound by the terms of this license. You must not remove this notice from this software. TODO: - sunset/sunrise calculations changed (PHP 5.1.2) - Added support for exif date format in strtotime(). (PHP 5.1.3) */ using System; using System.IO; using System.Text; using System.Globalization; using System.Text.RegularExpressions; using PHP.Core; using PHP.Core.Reflection; using System.ComponentModel; using System.Runtime.Serialization; using System.Runtime.InteropServices; using System.Diagnostics; #if SILVERLIGHT using PHP.CoreCLR; #endif namespace PHP.Library { #region DateTime /// /// Representation of date and time. /// #if !SILVERLIGHT [Serializable] #endif [ImplementsType("DateTime")] public class __PHP__DateTime : PhpObject { #region Constants public const string ATOM = PhpDateTime.FormatAtom;// @"Y-m-d\TH:i:sP"; public const string COOKIE = PhpDateTime.FormatCookie;// @"l, d-M-y H:i:s T"; public const string ISO8601 = PhpDateTime.FormatISO8601;// @"Y-m-d\TH:i:sO"; public const string RFC822 = PhpDateTime.FormatRFC822;// @"D, d M y H:i:s O"; public const string RFC850 = PhpDateTime.FormatRFC850;// @"l, d-M-y H:i:s T"; public const string RFC1036 = PhpDateTime.FormatRFC1036;// @"D, d M y H:i:s O"; public const string RFC1123 = PhpDateTime.FormatRFC1123;// @"D, d M Y H:i:s O"; public const string RFC2822 = PhpDateTime.FormatRFC2822;// @"D, d M Y H:i:s O"; public const string RFC3339 = PhpDateTime.FormatRFC3339;// @"Y-m-d\TH:i:sP"; public const string RSS = PhpDateTime.FormatRSS;// @"D, d M Y H:i:s O"; public const string W3C = PhpDateTime.FormatW3C;// @"Y-m-d\TH:i:sP"; #endregion #region Fields // dont see what these are for, no fields/props on php DateTime obj? //public PhpReference date = new PhpSmartReference(); //public PhpReference timezone_type = new PhpSmartReference(); //public PhpReference timezone = new PhpSmartReference(); /// /// Get the date-time value, stored in UTC /// internal DateTime Time { get; private set; } /// /// Get the time zone for this DateTime object /// internal TimeZoneInfo TimeZone { get; private set; } #endregion #region Construction /// /// For internal purposes only. /// [EditorBrowsable(EditorBrowsableState.Never)] public __PHP__DateTime(ScriptContext context, bool newInstance) : base(context, newInstance) { } /// /// For internal purposes only. /// [EditorBrowsable(EditorBrowsableState.Never)] public __PHP__DateTime(ScriptContext context, DTypeDesc caller) : base(context, caller) { } #if !SILVERLIGHT /// Deserializing constructor. protected __PHP__DateTime(SerializationInfo info, StreamingContext context) : base(info, context) { } #endif #endregion #region Methods private static DateTime StrToTime(string timestr, DateTime time) { if (string.IsNullOrEmpty(timestr) || timestr.EqualsOrdinalIgnoreCase("now")) { return DateTime.UtcNow; } var result = PhpDateTime.StringToTime(timestr, DateTimeUtils.UtcToUnixTimeStamp(time)); return result is int ? DateTimeUtils.UnixTimeStampToUtc((int) result) : DateTime.UtcNow; } // public __construct ([ string $time = "now" [, DateTimeZone $timezone = NULL ]] ) [ImplementsMethod] public virtual object __construct(ScriptContext/*!*/context, [Optional]object time, [Optional]object timezone) { if (timezone == Arg.Default || timezone == null) { TimeZone = PhpTimeZone.CurrentTimeZone; } else { var datetimezone = timezone as DateTimeZone; if (datetimezone == null) { PhpException.InvalidArgumentType("timezone", "DateTimeZone"); TimeZone = PhpTimeZone.CurrentTimeZone; } else { TimeZone = datetimezone.timezone; } } if (TimeZone == null) { PhpException.InvalidArgument("timezone"); return null; } var timestr = (time == Arg.Default) ? "now" : PHP.Core.Convert.ObjectToString(time); this.Time = StrToTime(timestr, DateTime.UtcNow); //this.date.Value = this.Time.ToString("yyyy-mm-dd HH:mm:ss"); //this.timezone_type.Value = 3; //this.timezone.Value = TimeZone.Id; return null; } [EditorBrowsable(EditorBrowsableState.Never)] public static object __construct(object instance, PhpStack stack) { var arg1 = stack.PeekValueOptional(1); var arg2 = stack.PeekValueOptional(2); stack.RemoveFrame(); return ((__PHP__DateTime)instance).__construct(stack.Context, arg1, arg2); } [ImplementsMethod] public virtual object setTimeZone(ScriptContext/*!*/context, object timezone) { if (timezone == null) { PhpException.ArgumentNull("timezone"); return false; } var tz = timezone as DateTimeZone; if (tz == null) { PhpException.InvalidArgumentType("timezone", "DateTimeZone"); return false; } this.TimeZone = tz.timezone; return this; } [EditorBrowsable(EditorBrowsableState.Never)] public static object setTimeZone(object instance, PhpStack stack) { var tz = stack.PeekValue(1); stack.RemoveFrame(); return ((__PHP__DateTime)instance).setTimeZone(stack.Context, tz); } [ImplementsMethod] public virtual object format(ScriptContext/*!*/context, object format) { if (format == null) { PhpException.ArgumentNull("format"); return false; } string fm = format.ToString(); if (string.IsNullOrEmpty(fm)) { return false; } return PhpDateTime.FormatDate(fm, this.Time, this.TimeZone); } [EditorBrowsable(EditorBrowsableState.Never)] public static object format(object instance, PhpStack stack) { var format = stack.PeekValue(1); stack.RemoveFrame(); return ((__PHP__DateTime)instance).format(stack.Context, format); } [ImplementsMethod] public virtual object getOffset(ScriptContext/*!*/context) { if (this.TimeZone == null) return false; return (int)this.TimeZone.BaseUtcOffset.TotalSeconds; } [EditorBrowsable(EditorBrowsableState.Never)] public static object getOffset(object instance, PhpStack stack) { stack.RemoveFrame(); return ((__PHP__DateTime)instance).getOffset(stack.Context); } [ImplementsMethod] public virtual object modify(ScriptContext/*!*/context, object modify) { if (modify == null) { PhpException.ArgumentNull("modify"); return false; } string strtime = PHP.Core.Convert.ObjectToString(modify); this.Time = StrToTime(strtime, Time); return this; } [EditorBrowsable(EditorBrowsableState.Never)] public static object modify(object instance, PhpStack stack) { var modify = stack.PeekValue(1); stack.RemoveFrame(); return ((__PHP__DateTime)instance).modify(stack.Context, modify); } [ImplementsMethod] public static object createFromFormat(ScriptContext/*!*/context, object format, object time, [Optional]object timezone) { // arguments var tz = (timezone is DateTimeZone) ? ((DateTimeZone)timezone).timezone : PhpTimeZone.CurrentTimeZone; string formatstr = PhpVariable.AsString(format); string timestr = PhpVariable.AsString(time); if (formatstr == null) { PhpException.InvalidArgument("format"); return false; } if (timestr == null) { PhpException.InvalidArgument("time"); return false; } // create DateTime from format+time int i = 0; // position in foreach (var c in formatstr) { switch (c) { //case 'd': //case 'j': // var day = PHP.Library.StrToTime.DateInfo.ParseUnsignedInt(timestr, ref i, 2); // // ... use day // break; //case 'F': //case 'M': // // parse ... // break; default: if (i < timestr.Length && timestr[i] == c) { // match i++; } else { // not match PhpException.InvalidArgument("time"); // time not matching format return false; } break; } } if (i < timestr.Length) { PhpException.InvalidArgument("time"); // time not matching format return false; } //// //return new __PHP__DateTime(context, true) //{ // //Time = new DateTime(year, month, day, hour, minute, second, millisecond), // TimeZone = tz, //}; throw new NotImplementedException(); } [EditorBrowsable(EditorBrowsableState.Never)] public static object createFromFormat(object instance, PhpStack stack) { var format = stack.PeekValue(1); var time = stack.PeekValue(2); var timezone = stack.PeekValueOptional(3); stack.RemoveFrame(); return createFromFormat(stack.Context, format, time, timezone); } [ImplementsMethod] public virtual object setDate(ScriptContext/*!*/context, object year, object month, object day) { var y = PHP.Core.Convert.ObjectToInteger(year); var m = PHP.Core.Convert.ObjectToInteger(month); var d = PHP.Core.Convert.ObjectToInteger(day); try { var time = TimeZoneInfo.ConvertTimeFromUtc(Time, TimeZone); this.Time = TimeZoneInfo.ConvertTimeToUtc( new DateTime( y, m, d, time.Hour, time.Minute, time.Second, time.Millisecond ), TimeZone ); } catch (ArgumentOutOfRangeException e) { throw new ArgumentOutOfRangeException(string.Format("The date {0}-{1}-{2} is not valid.", y, m, d), e); } return this; } [EditorBrowsable(EditorBrowsableState.Never)] public static object setDate(object instance, PhpStack stack) { var arg1 = stack.PeekValue(1); var arg2 = stack.PeekValue(2); var arg3 = stack.PeekValue(3); stack.RemoveFrame(); return ((__PHP__DateTime)instance).setDate(stack.Context, arg1, arg2, arg3); } [ImplementsMethod] public virtual object setTime(ScriptContext/*!*/context, object hour, object minute, object second) { var h = PHP.Core.Convert.ObjectToInteger(hour); var m = PHP.Core.Convert.ObjectToInteger(minute); var s = PHP.Core.Convert.ObjectToInteger(second); try { var time = TimeZoneInfo.ConvertTimeFromUtc(Time, TimeZone); this.Time = TimeZoneInfo.ConvertTimeToUtc( new DateTime(time.Year, time.Month, time.Day, h, m, s), TimeZone ); } catch (ArgumentOutOfRangeException e) { throw new ArgumentOutOfRangeException(string.Format("The time {0}:{1}:{2} is not valid.", h, m, s), e); } return this; } [EditorBrowsable(EditorBrowsableState.Never)] public static object setTime(object instance, PhpStack stack) { var arg1 = stack.PeekValue(1); var arg2 = stack.PeekValue(2); var arg3 = stack.PeekValue(3); stack.RemoveFrame(); return ((__PHP__DateTime)instance).setTime(stack.Context, arg1, arg2, arg3); } [ImplementsMethod] public virtual object getTimestamp(ScriptContext/*!*/context) { return DateTimeUtils.UtcToUnixTimeStamp(Time); } [EditorBrowsable(EditorBrowsableState.Never)] public static object getTimestamp(object instance, PhpStack stack) { stack.RemoveFrame(); return ((__PHP__DateTime)instance).getTimestamp(stack.Context); } public override int CompareTo(object obj, System.Collections.IComparer comparer) { var other = obj as __PHP__DateTime; return other != null ? Time.CompareTo(other.Time) : base.CompareTo(obj, comparer); } #endregion } #endregion /// /// Functions for date and time manipulation. /// /// [ImplementsExtension(LibraryDescriptor.ExtDate)] public static class PhpDateTime { /// /// Gets the current local time with respect to the current PHP time zone. /// public static DateTime Now { get { return TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, PhpTimeZone.CurrentTimeZone); } } #region Constants [ImplementsConstant("DATE_ATOM")] public const string FormatAtom = @"Y-m-d\TH:i:sP"; [ImplementsConstant("DATE_COOKIE")] public const string FormatCookie = @"D, d M Y H:i:s T"; [ImplementsConstant("DATE_ISO8601")] public const string FormatISO8601 = @"Y-m-d\TH:i:sO"; [ImplementsConstant("DATE_RFC822")] public const string FormatRFC822 = @"D, d M y H:i:s O"; [ImplementsConstant("DATE_RFC850")] public const string FormatRFC850 = @"l, d-M-y H:i:s T"; [ImplementsConstant("DATE_RFC1123")] public const string FormatRFC1123 = @"D, d M Y H:i:s T"; [ImplementsConstant("DATE_RFC1036")] public const string FormatRFC1036 = @"l, d-M-y H:i:s T"; [ImplementsConstant("DATE_RFC2822")] public const string FormatRFC2822 = @"D, d M Y H:i:s T"; [ImplementsConstant("DATE_RFC3339")] public const string FormatRFC3339 = @"Y-m-d\TH:i:sP"; [ImplementsConstant("DATE_RSS")] public const string FormatRSS = @"D, d M Y H:i:s T"; [ImplementsConstant("DATE_W3C")] public const string FormatW3C = @"Y-m-d\TH:i:sO"; #endregion #region date_format, date_create, date_offset_get, date_modify [ImplementsFunction("date_format")] [return: CastToFalse] public static object DateFormat(__PHP__DateTime datetime, string format) { // TODO: format it properly return FormatDate(format, datetime.Time, datetime.TimeZone); } /// /// Alias of new /// [ImplementsFunction("date_create")] [return: CastToFalse] public static object DateCreate(ScriptContext/*!*/context) { return DateCreate(context, null, null); } /// /// Alias of new /// [ImplementsFunction("date_create")] [return: CastToFalse] public static object DateCreate(ScriptContext/*!*/context, string time) { return DateCreate(context, time, null); } /// /// Alias of new /// [ImplementsFunction("date_create")] [return: CastToFalse] public static object DateCreate(ScriptContext/*!*/context, string time, DateTimeZone timezone) { var dt = new __PHP__DateTime(context, true); dt.__construct(context, time, timezone); return dt; } /// /// Returns new DateTime object formatted according to the specified format. /// /// reference. /// The format that the passed in string should be in. /// String representing the time. /// [ImplementsFunction("date_create_from_format")] [return: CastToFalse] public static __PHP__DateTime DateCreateFromFormat(ScriptContext/*!*/context, string format, string time) { return __PHP__DateTime.createFromFormat(context, format, time, Arg.Default) as __PHP__DateTime; } /// /// Returns new DateTime object formatted according to the specified format. /// /// reference. /// The format that the passed in string should be in. /// String representing the time. /// A DateTimeZone object representing the desired time zone. /// [ImplementsFunction("date_create_from_format")] [return:CastToFalse] public static __PHP__DateTime DateCreateFromFormat(ScriptContext/*!*/context, string format, string time, DateTimeZone timezone) { return __PHP__DateTime.createFromFormat(context, format, time, timezone) as __PHP__DateTime; } /// /// Alias of DateTime::getOffset(). /// [ImplementsFunction("date_offset_get")] [return: CastToFalse] public static int DateOffsetGet(__PHP__DateTime datetime) { if (datetime == null) { PhpException.ArgumentNull("datetime"); return -1; } if (datetime.TimeZone == null) return -1; return (int)datetime.TimeZone.BaseUtcOffset.TotalSeconds; } /// /// Alias of DateTime::modify(). /// [ImplementsFunction("date_modify")] [return: CastToFalse] public static __PHP__DateTime DateModify(ScriptContext/*!*/context, __PHP__DateTime datetime, string modify) { return datetime.modify(context, modify) as __PHP__DateTime; } #endregion #region date, idate, gmdate /// /// Returns a string formatted according to the given format string using the current local time. /// /// Format definition for output. /// Formatted string. [ImplementsFunction("date")] public static string FormatDate(string format) { return FormatDate(format, DateTime.UtcNow, PhpTimeZone.CurrentTimeZone); } /// /// Returns a string formatted according to the given format string using the given integer timestamp. /// /// Format definition for output. /// Nuber of seconds since 1970 specifying a date. /// Formatted string. [ImplementsFunction("date")] public static string FormatDate(string format, int timestamp) { return FormatDate(format, DateTimeUtils.UnixTimeStampToUtc(timestamp), PhpTimeZone.CurrentTimeZone); } /// /// Identical to the date() function except that the time returned is Greenwich Mean Time (GMT) /// /// Format definition for output. /// Formatted string. [ImplementsFunction("gmdate")] public static string FormatUtcDate(string format) { return FormatDate(format, DateTime.UtcNow, DateTimeUtils.UtcTimeZone); } /// /// Identical to the date() function except that the time returned is Greenwich Mean Time (GMT) /// /// Format definition for output. /// Nuber of seconds since 1970 specifying a date. /// Formatted string. [ImplementsFunction("gmdate")] public static string FormatUtcDate(string format, int timestamp) { return FormatDate(format, DateTimeUtils.UnixTimeStampToUtc(timestamp), DateTimeUtils.UtcTimeZone); } /// /// Returns a part of current time. /// /// Format definition for output. /// Part of the date, e.g. month or hours. [ImplementsFunction("idate")] public static int GetDatePart(string format) { if (format == null || format.Length != 1) PhpException.InvalidArgument("format"); return GetDatePart(format[0], DateTime.UtcNow, PhpTimeZone.CurrentTimeZone); } /// /// Returns a part of a specified timestamp. /// /// Format definition for output. /// Nuber of seconds since 1970 specifying a date. /// Part of the date, e.g. month or hours. [ImplementsFunction("idate")] public static int GetDatePart(string format, int timestamp) { if (format == null || format.Length != 1) PhpException.InvalidArgument("format"); return GetDatePart(format[0], DateTimeUtils.UnixTimeStampToUtc(timestamp), PhpTimeZone.CurrentTimeZone); } private static int GetDatePart(char format, DateTime utc, TimeZoneInfo/*!*/ zone) { DateTime local = TimeZoneInfo.ConvertTimeFromUtc(utc, zone);// zone.ToLocalTime(utc); switch (format) { case 'B': // Swatch Beat (Internet Time) - 000 through 999 return GetSwatchBeat(utc); case 'd': // Day of the month return local.Day; case 'g': case 'h': // 12-hour format: return (local.Hour == 12) ? 12 : local.Hour % 12; case 'G': case 'H': // 24-hour format: return local.Hour; case 'i': return local.Minute; case 'I': return zone.IsDaylightSavingTime(local) ? 1 : 0; case 'j': goto case 'd'; case 'L': return DateTime.IsLeapYear(local.Year) ? 1 : 0; case 'm': return local.Month; case 'n': goto case 'm'; case 's': return local.Second; case 't': return DateTime.DaysInMonth(local.Year, local.Month); case 'U': return DateTimeUtils.UtcToUnixTimeStamp(utc); case 'w': // day of the week - 0 (for Sunday) through 6 (for Saturday) return (int)local.DayOfWeek; case 'W': { // ISO-8601 week number of year, weeks starting on Monday: int week, year; GetIsoWeekAndYear(local, out week, out year); return week; } case 'y': return local.Year % 100; case 'Y': return local.Year; case 'z': return local.DayOfYear - 1; case 'Z': return (int)zone.GetUtcOffset(local).TotalSeconds; default: PhpException.InvalidArgument("format"); return 0; } } internal static string FormatDate(string format, DateTime utc, TimeZoneInfo zone) { Debug.Assert(zone != null); if (format == null) return string.Empty; DateTime local = TimeZoneInfo.ConvertTimeFromUtc(utc, zone); // here we are creating output string StringBuilder result = new StringBuilder(); bool escape = false; foreach (char ch in format) { if (escape) { result.Append(ch); escape = false; continue; } switch (ch) { case 'a': // Lowercase Ante meridiem and Post meridiem - am or pm result.Append(local.ToString("tt", DateTimeFormatInfo.InvariantInfo).ToLowerInvariant()); break; case 'A': // Uppercase Ante meridiem and Post meridiem - AM or PM result.Append(local.ToString("tt", DateTimeFormatInfo.InvariantInfo)); break; case 'B': // Swatch Beat (Internet Time) - 000 through 999 result.AppendFormat("{0:000}", GetSwatchBeat(utc)); break; case 'c': { // ISO 8601 date (added in PHP 5) 2004-02-12T15:19:21+00:00 result.Append(local.ToString("yyyy-MM-dd'T'HH:mm:ss", DateTimeFormatInfo.InvariantInfo)); TimeSpan offset = zone.GetUtcOffset(local); result.AppendFormat("{0}{1:00}:{2:00}", (offset.Ticks < 0) ? ""/*offset.Hours already < 0*/ : "+", offset.Hours, offset.Minutes); break; } case 'd': // Day of the month, 2 digits with leading zeros - 01 to 31 result.Append(local.ToString("dd", DateTimeFormatInfo.InvariantInfo)); break; case 'e': // Timezone identifier (added in PHP 5.1.0) result.Append(zone.Id); break; case 'D': // A textual representation of a day, three letters - Mon through Sun result.Append(local.ToString("ddd", DateTimeFormatInfo.InvariantInfo)); break; case 'F': // A full textual representation of a month, such as January or March - January through December result.Append(local.ToString("MMMM", DateTimeFormatInfo.InvariantInfo)); break; case 'g': // 12-hour format of an hour without leading zeros - 1 through 12 result.Append(local.ToString("%h", DateTimeFormatInfo.InvariantInfo)); break; case 'G': // 24-hour format of an hour without leading zeros - 0 through 23 result.Append(local.ToString("%H", DateTimeFormatInfo.InvariantInfo)); break; case 'h': // 12-hour format of an hour with leading zeros - 01 through 12 result.Append(local.ToString("hh", DateTimeFormatInfo.InvariantInfo)); break; case 'H': // 24-hour format of an hour with leading zeros - 00 through 23 result.Append(local.ToString("HH", DateTimeFormatInfo.InvariantInfo)); break; case 'i': // Minutes with leading zeros - 00 to 59 result.Append(local.ToString("mm", DateTimeFormatInfo.InvariantInfo)); break; case 'I': // Whether or not the date is in daylights savings time - 1 if Daylight Savings Time, 0 otherwise. result.Append(zone.IsDaylightSavingTime(local) ? "1" : "0"); break; case 'j': // Day of the month without leading zeros - 1 to 31 result.Append(local.ToString("%d", DateTimeFormatInfo.InvariantInfo)); break; case 'l': // A full textual representation of the day of the week - Sunday through Saturday result.Append(local.ToString("dddd", DateTimeFormatInfo.InvariantInfo)); break; case 'L': // Whether it's a leap year - 1 if it is a leap year, 0 otherwise. result.Append(DateTime.IsLeapYear(local.Year) ? "1" : "0"); break; case 'm': // Numeric representation of a month, with leading zeros - 01 through 12 result.Append(local.ToString("MM", DateTimeFormatInfo.InvariantInfo)); break; case 'M': // A short textual representation of a month, three letters - Jan through Dec result.Append(local.ToString("MMM", DateTimeFormatInfo.InvariantInfo)); break; case 'n': // Numeric representation of a month, without leading zeros - 1 through 12 result.Append(local.ToString("%M", DateTimeFormatInfo.InvariantInfo)); break; case 'N': // ISO-8601 numeric representation of the day of the week (added in PHP 5.1.0) int day_of_week = (int)local.DayOfWeek; result.Append(day_of_week == 0 ? 7 : day_of_week); break; case 'o': { // ISO-8601 year number. This has the same value as Y, except that if the ISO // week number (W) belongs to the previous or next year, that year is used instead. // (added in PHP 5.1.0) int week, year; GetIsoWeekAndYear(local, out week, out year); result.Append(year); break; } case 'O': { // Difference to Greenwich time (GMT) in hours Example: +0200 TimeSpan offset = zone.GetUtcOffset(local); string sign = (offset.Ticks < 0) ? ((offset.Hours < 0) ? string.Empty : "-") : "+"; result.AppendFormat("{0}{1:00}{2:00}", sign, offset.Hours, offset.Minutes); break; } case 'P': { // same as 'O' but with the extra colon between hours and minutes // Difference to Greenwich time (GMT) in hours Example: +02:00 TimeSpan offset = zone.GetUtcOffset(local); string sign = (offset.Ticks < 0) ? ((offset.Hours < 0) ? string.Empty : "-") : "+"; result.AppendFormat("{0}{1:00}:{2:00}", sign, offset.Hours, offset.Minutes); break; } case 'r': // RFC 822 formatted date Example: Thu, 21 Dec 2000 16:01:07 +0200 result.Append(local.ToString("ddd, dd MMM yyyy H:mm:ss ", DateTimeFormatInfo.InvariantInfo)); goto case 'O'; case 's': // Seconds, with leading zeros - 00 through 59 result.Append(local.ToString("ss", DateTimeFormatInfo.InvariantInfo)); break; case 'S': result.Append(GetDayNumberSuffix(local.Day)); break; case 't': // Number of days in the given month 28 through 31 result.Append(DateTime.DaysInMonth(local.Year, local.Month)); break; case 'T': // Timezone setting of this machine Examples: EST, MDT ... result.Append(zone.IsDaylightSavingTime(local) ? zone.DaylightName : zone.StandardName); break; case 'U': // Seconds since the Unix Epoch (January 1 1970 00:00:00 GMT) result.Append(DateTimeUtils.UtcToUnixTimeStamp(utc)); break; case 'u': // Microseconds (added in PHP 5.2.2) result.Append((utc.Millisecond / 1000).ToString("D6")); break; case 'w': // Numeric representation of the day of the week - 0 (for Sunday) through 6 (for Saturday) result.Append((int)local.DayOfWeek); break; case 'W': { // ISO-8601 week number of year, weeks starting on Monday (added in PHP 4.1.0) Example: 42 (the 42nd week in the year) int week, year; GetIsoWeekAndYear(local, out week, out year); result.Append(week); break; } case 'y': // A two digit representation of a year Examples: 99 or 03 result.Append(local.ToString("yy", DateTimeFormatInfo.InvariantInfo)); break; case 'Y': // A full numeric representation of a year, 4 digits Examples: 1999 or 2003 result.Append(local.ToString("yyyy", DateTimeFormatInfo.InvariantInfo)); break; case 'z': // The day of the year starting from 0 result.Append(local.DayOfYear - 1); break; case 'Z': // TimeZone offset in seconds: result.Append((int)zone.GetUtcOffset(local).TotalSeconds); break; case '\\': // Escape char. Output next character directly to the result. escape = true; break; default: // unrecognized character, print it as-is. result.Append(ch); break; } } if (escape) result.Append('\\'); return result.ToString(); } /// /// Converts a given to the ISO week of year number and ISO year number. /// /// The . /// The ISO week of year number. /// The ISO year number. private static void GetIsoWeekAndYear(DateTime dt, out int week, out int year) { int weekDay = (int)dt.DayOfWeek - 1; // Day of week (0 for Monday .. 6 for Sunday) int yearDay = dt.DayOfYear; // Days since January 1st (1 .. 367) int firstDay = (7 + weekDay - yearDay % 7 + 1) % 7; // Weekday of 1st January if ((yearDay <= 7 - firstDay) && firstDay > 3) { // Week is a last year week (52 or 53) week = (firstDay == 4 || (firstDay == 5 && DateTime.IsLeapYear(dt.Year - 1))) ? 53 : 52; year = dt.Year - 1; } else if ((DateTime.IsLeapYear(dt.Year) ? 366 : 365) - yearDay < 3 - weekDay) { // Week is a next year week (1) week = 1; year = dt.Year + 1; } else { // Normal week week = (yearDay + 6 - weekDay + firstDay) / 7; if (firstDay > 3) week--; year = dt.Year; } } private static int GetSwatchBeat(DateTime utc) { int seconds = DateTimeUtils.UtcToUnixTimeStamp(utc); int beat = (int)(((seconds - (seconds - ((seconds % 86400) + 3600))) * 10) / 864) % 1000; return (beat < 0) ? beat + 1000 : beat; } /// /// English ordinal suffix for the day of the month, 2 characters - st, nd, rd or th. /// /// Number of the day. In [1..31]. /// st, nd, rd or th private static string GetDayNumberSuffix(int DayNumber /* = 1..31 */) { Debug.Assert(DayNumber >= 1 && DayNumber <= 31); int DayNumber10 = DayNumber % 10; if (DayNumber10 == 1) { if (DayNumber/*%100*/ != 11) return "st"; } else if (DayNumber10 == 2) { if (DayNumber/*%100*/ != 12) return "nd"; } else if (DayNumber10 == 3) { if (DayNumber/*%100*/ != 13) return "rd"; } return "th"; } #endregion #region strftime, gmstrftime /// /// Returns a string formatted according to the given format string using the current local time. /// /// Format of the string. /// Formatted string representing date and time. [ImplementsFunction("strftime")] public static string FormatTime(string format) { return FormatTime(format, DateTime.UtcNow, PhpTimeZone.CurrentTimeZone); } /// /// Returns a string formatted according to the given format string using the given timestamp. /// /// Format of the string. /// Number of seconds since 1970 representing the time to format. /// Formatted string representing date and time. [ImplementsFunction("strftime")] public static string FormatTime(string format, int timestamp) { return FormatTime(format, DateTimeUtils.UnixTimeStampToUtc(timestamp), PhpTimeZone.CurrentTimeZone); } /// /// Behaves the same as strftime except that the time returned is Greenwich Mean Time (GMT). /// /// Format of the string. /// Formatted string representing date and time. [ImplementsFunction("gmstrftime")] public static string FormatUtcTime(string format) { return FormatTime(format, DateTime.UtcNow, DateTimeUtils.UtcTimeZone); } /// /// Behaves the same as strftime except that the time returned is Greenwich Mean Time (GMT). /// /// Format of the string. /// Number of seconds since 1970 representing the time to format. /// Formatted string representing date and time. [ImplementsFunction("gmstrftime")] public static string FormatUtcTime(string format, int timestamp) { return FormatTime(format, DateTimeUtils.UnixTimeStampToUtc(timestamp), DateTimeUtils.UtcTimeZone); } /// /// Implementation of function. /// private static string FormatTime(string format, DateTime utc, TimeZoneInfo/*!*/ zone) { // Possibly bug in framework? "h" and "hh" just after midnight shows 12, not 0 if (format == null) return ""; DateTime local = TimeZoneInfo.ConvertTimeFromUtc(utc, zone);// zone.ToLocalTime(utc); DateTimeFormatInfo info = Locale.GetCulture(Locale.Category.Time).DateTimeFormat; StringBuilder result = new StringBuilder(); bool specialChar = false; foreach (char ch in format) { if (!specialChar) { if (ch == '%') specialChar = true; else result.Append(ch); continue; } // we have special character switch (ch) { case 'a': // abbreviated weekday name according to the current locale result.Append(local.ToString("ddd", info)); break; case 'A': // full weekday name according to the current locale result.Append(local.ToString("dddd", info)); break; case 'b': // abbreviated month name according to the current locale result.Append(local.ToString("MMM", info)); break; case 'B': // full month name according to the current locale result.Append(local.ToString("MMMM", info)); break; case 'c': // preferred date and time representation for the current locale result.Append(local.ToString(info)); break; case 'C': // century number (the year divided by 100 and truncated to an integer, range 00 to 99) result.Append(local.Year / 100); break; case 'd': // day of the month as a decimal number (range 01 to 31) result.Append(local.ToString("dd", info)); break; case 'D': // same as %m/%d/%y result.Append(local.ToString("MM\\/dd\\/yy", info)); break; case 'e': // day of the month as a decimal number, a single digit is preceded by a space (range ' 1' to '31') result.AppendFormat("{0,2}", local.Day); break; case 'g': { // like %G, but without the century. int week, year; GetIsoWeekAndYear(local, out week, out year); result.AppendFormat("{0:00}", year % 100); break; } case 'G': // The 4-digit year corresponding to the ISO week number. { int week, year; GetIsoWeekAndYear(local, out week, out year); result.AppendFormat("{0:0000}", year); break; } case 'h': // same as %b goto case 'b'; case 'H': // hour as a decimal number using a 24-hour clock (range 00 to 23) result.Append(local.ToString("HH", info)); break; case 'I': // hour as a decimal number using a 12-hour clock (range 01 to 12) result.Append(local.ToString("hh", info)); break; case 'j': // day of the year as a decimal number (range 001 to 366) result.AppendFormat("{0:000}", local.DayOfYear); break; case 'm': // month as a decimal number (range 01 to 12) result.Append(local.ToString("MM", info)); break; case 'M': // minute as a decimal number result.Append(local.ToString("mm", info)); break; case 'n': // newline character result.Append('\n'); break; case 'p': // either `am' or `pm' according to the given time value, // or the corresponding strings for the current locale result.Append(local.ToString("tt", info)); break; case 'r': // time in a.m. and p.m. notation result.Append(local.ToString("hh:mm:ss tt", info)); break; case 'R': // time in 24 hour notation result.Append(local.ToString("H:mm:ss", info)); break; case 'S': // second as a decimal number result.Append(local.ToString("ss", info)); break; case 't': // tab character result.Append('\t'); break; case 'T': // current time, equal to %H:%M:%S result.Append(local.ToString("HH:mm:ss", info)); break; case 'u': // weekday as a decimal number [1,7], with 1 representing Monday result.Append(((int)local.DayOfWeek + 5) % 7 + 1); break; case 'U': // week number of the current year as a decimal number, starting with the first // Sunday as the first day of the first week (formula taken from GlibC 2.3.5): result.AppendFormat("{0:00}", (local.DayOfYear - 1 - (int)local.DayOfWeek + 7) / 7); break; case 'V': { // The ISO 8601:1988 week number of the current year int week, year; GetIsoWeekAndYear(local, out week, out year); result.AppendFormat("{0:00}", week); break; } case 'w': // day of the week as a decimal, Sunday being 0 result.Append((int)local.DayOfWeek); break; case 'W': // week number of the current year as a decimal number, starting with the first // Monday as the first day of the first week (formula taken from GlibC 2.3.5): result.AppendFormat("{0:00}", (local.DayOfYear - 1 - ((int)local.DayOfWeek - 1 + 7) % 7 + 7) / 7); break; case 'x': // preferred date representation for the current locale without the time result.Append(local.ToString("d", info)); break; case 'X': // preferred time representation for the current locale without the date result.Append(local.ToString("T", info)); break; case 'y': // year as a decimal number without a century (range 00 to 99) result.Append(local.ToString("yy", info)); break; case 'Y': // year as a decimal number including the century result.Append(local.ToString("yyyy", info)); break; case 'z': case 'Z': result.Append(zone.IsDaylightSavingTime(local) ? zone.DaylightName : zone.StandardName); break; case '%': result.Append('%'); break; } specialChar = false; } if (specialChar) result.Append('%'); return result.ToString(); } #endregion #region NS: strptime // [ImplementsFunction("strptime")] // public static PhpArray StringToTime(string datetime,string format) // { // // } #endregion #region gmmktime [ImplementsFunction("gmmktime")] public static int MakeUtcTime() { DateTime utc_now = DateTime.UtcNow; return MakeUtcTime(utc_now.Hour, utc_now.Minute, utc_now.Second, utc_now.Month, utc_now.Day, utc_now.Year); } [ImplementsFunction("gmmktime")] public static int MakeUtcTime(int hour) { DateTime utc_now = DateTime.UtcNow; return MakeUtcTime(hour, utc_now.Minute, utc_now.Second, utc_now.Month, utc_now.Day, utc_now.Year); } [ImplementsFunction("gmmktime")] public static int MakeUtcTime(int hour, int minute) { DateTime utc_now = DateTime.UtcNow; return MakeUtcTime(hour, minute, utc_now.Second, utc_now.Month, utc_now.Day, utc_now.Year); } [ImplementsFunction("gmmktime")] public static int MakeUtcTime(int hour, int minute, int second) { DateTime utc_now = DateTime.UtcNow; return MakeUtcTime(hour, minute, second, utc_now.Month, utc_now.Day, utc_now.Year); } [ImplementsFunction("gmmktime")] public static int MakeUtcTime(int hour, int minute, int second, int month) { DateTime utc_now = DateTime.UtcNow; return MakeUtcTime(hour, minute, second, month, utc_now.Day, utc_now.Year); } [ImplementsFunction("gmmktime")] public static int MakeUtcTime(int hour, int minute, int second, int month, int day) { DateTime utc_now = DateTime.UtcNow; return MakeUtcTime(hour, minute, second, month, day, utc_now.Year); } [ImplementsFunction("gmmktime")] public static int MakeUtcTime(int hour, int minute, int second, int month, int day, int year, int dummy) { // According to PHP manual daylight savings time parameter ignored return MakeUtcTime(hour, minute, second, month, day, year); } [ImplementsFunction("gmmktime")] public static int MakeUtcTime(int hour, int minute, int second, int month, int day, int year) { return DateTimeUtils.UtcToUnixTimeStamp(MakeDateTime(hour, minute, second, month, day, year)); } #endregion #region mktime /// /// Returns the Unix timestamp for current time. /// /// Unix timestamp. [ImplementsFunction("mktime")] public static int MakeTime() { DateTime now = Now; return MakeTime(now.Hour, now.Minute, now.Second, now.Month, now.Day, now.Year, -1); } /// /// Returns the Unix timestamp for a time compound of an hour which is specified and a minute, a second, /// a month, a day and a year which are taken from the current date values. /// /// The hour. /// Unix timestamp. [ImplementsFunction("mktime")] public static int MakeTime(int hour) { DateTime now = Now; return MakeTime(hour, now.Minute, now.Second, now.Month, now.Day, now.Year, -1); } /// /// Returns the Unix timestamp for a time compound of an hour and a minute which are specified and a second, /// a month, a day and a year which are taken from the current date values. /// /// The hour. /// The minute. /// Unix timestamp. [ImplementsFunction("mktime")] public static int MakeTime(int hour, int minute) { DateTime now = Now; return MakeTime(hour, minute, now.Second, now.Month, now.Day, now.Year, -1); } /// /// Returns the Unix timestamp for a time compound of an hour, a minute and a second which are specified and /// a month, a day and a year which are taken from the current date values. /// /// The hour. /// The minute. /// The second. /// Unix timestamp. [ImplementsFunction("mktime")] public static int MakeTime(int hour, int minute, int second) { DateTime now = Now; return MakeTime(hour, minute, second, now.Month, now.Day, now.Year, -1); } /// /// Returns the Unix timestamp for a time compound of an hour, a minute, a second and a month which are specified and /// a day and a year which are taken from the current date values. /// /// The hour. /// The minute. /// The second. /// The month. /// Unix timestamp. [ImplementsFunction("mktime")] public static int MakeTime(int hour, int minute, int second, int month) { DateTime now = Now; return MakeTime(hour, minute, second, month, now.Day, now.Year, -1); } /// /// Returns the Unix timestamp for a time compound of an hour, a minute, a second, a month and a day /// which are specified and a year which is taken from the current date values. /// /// The hour. /// The minute. /// The second. /// The month. /// The day. /// Unix timestamp. [ImplementsFunction("mktime")] public static int MakeTime(int hour, int minute, int second, int month, int day) { DateTime now = Now; return MakeTime(hour, minute, second, month, day, now.Year, -1); } /// /// Returns the Unix timestamp for a time compound of an hour, a minute, a second, a month, a day and a year. /// /// The hour. /// The minute. /// The second. /// The month. /// The day. /// The year. /// Unix timestamp. [ImplementsFunction("mktime")] public static int MakeTime(int hour, int minute, int second, int month, int day, int year) { return MakeTime(hour, minute, second, month, day, year, -1); } /// /// Returns the Unix timestamp for a time compound of an hour, a minute, a second, a month, a day and a year. /// /// The hour. /// The minute. /// The second. /// The month. /// The day. /// The year. /// Daylight savings time. /// Unix timestamp. [ImplementsFunction("mktime")] public static int MakeTime(int hour, int minute, int second, int month, int day, int year, int daylightSaving) { var zone = PhpTimeZone.CurrentTimeZone; DateTime local = MakeDateTime(hour, minute, second, month, day, year); switch (daylightSaving) { case -1: // detect, whether the date is during DST: if (zone.IsDaylightSavingTime(local)) local.AddHours(-1); break; case 0: // not dst break; case 1: // dst local.AddHours(-1); break; default: PhpException.ArgumentValueNotSupported("daylightSaving", daylightSaving); break; } return DateTimeUtils.UtcToUnixTimeStamp(TimeZoneInfo.ConvertTimeToUtc(local, zone)); } #endregion #region MakeDateTime internal static DateTime MakeDateTime(int hour, int minute, int second, int month, int day, int year) { if (year >= 0 && year < 70) year += 2000; else if (year >= 70 && year <= 110) year += 1900; // TODO (better) DateTime dt = new DateTime(0); int i = 0; try { // first add positive values, than negative to not throw exception // if there will be negative values first. // This works bad for upper limit, if there are big positive values that // exceeds DateTime.MaxValue and big negative that will substract it to // less value, this returns simply MaxValue - it is big enough, so it // should not occur in real life. Algorithm handling this correctly will // be much more complicated. for (i = 1; i <= 2; i++) { if (i == 1 && year >= 0) dt = dt.AddYears(year - 1); else if (i == 2 && year < 0) dt = dt.AddYears(year - 1); if (i == 1 && month >= 0) dt = dt.AddMonths(month - 1); else if (i == 2 && month < 0) dt = dt.AddMonths(month - 1); if (i == 1 && day >= 0) dt = dt.AddDays(day - 1); else if (i == 2 && day < 0) dt = dt.AddDays(day - 1); if (i == 1 && hour >= 0) dt = dt.AddHours(hour); else if (i == 2 && hour < 0) dt = dt.AddHours(hour); if (i == 1 && minute >= 0) dt = dt.AddMinutes(minute); else if (i == 2 && minute < 0) dt = dt.AddMinutes(minute); if (i == 1 && second >= 0) dt = dt.AddSeconds(second); else if (i == 2 && second < 0) dt = dt.AddSeconds(second); } } catch (ArgumentOutOfRangeException) { if (i == 1) // exception while adding positive values dt = DateTime.MaxValue; else // exception while substracting dt = DateTime.MinValue; } return dt; } #endregion #region checkdate /// /// Returns TRUE if the date given is valid; otherwise returns FALSE. /// Checks the validity of the date formed by the arguments. /// /// /// A date is considered valid if: /// /// year is between 1 and 32767 inclusive /// month is between 1 and 12 inclusive /// day is within the allowed number of days for the given month. Leap years are taken into consideration. /// /// /// Month /// Day /// Year /// True if the date is valid, false otherwise. [ImplementsFunction("checkdate")] public static bool CheckDate(int month, int day, int year) { return month >= 1 && month <= 12 && year >= 1 && year <= 32767 && day >= 1 && day <= DateTime.DaysInMonth(year, month); // this works also with leap years } #endregion #region getdate /// /// Returns an associative array containing the date information of the current local time. /// /// Associative array with date information. [ImplementsFunction("getdate")] public static PhpArray GetDate() { return GetDate(DateTime.UtcNow); } /// /// Returns an associative array containing the date information of the timestamp. /// /// Number of seconds since 1970. /// Associative array with date information. [ImplementsFunction("getdate")] public static PhpArray GetDate(int timestamp) { return GetDate(DateTimeUtils.UnixTimeStampToUtc(timestamp)); } /// /// Returns an associative array containing the date information. /// /// UTC date time. /// Associative array with date information. public static PhpArray GetDate(DateTime utc) { PhpArray result = new PhpArray(1, 10); var zone = PhpTimeZone.CurrentTimeZone; DateTime local = TimeZoneInfo.ConvertTimeFromUtc(utc, zone); result.Add("seconds", local.Second); result.Add("minutes", local.Minute); result.Add("hours", local.Hour); result.Add("mday", local.Day); result.Add("wday", (int)local.DayOfWeek); result.Add("mon", local.Month); result.Add("year", local.Year); result.Add("yday", local.DayOfYear - 1); // PHP: zero based day count result.Add("weekday", local.DayOfWeek.ToString()); result.Add("month", local.ToString("MMMM", DateTimeFormatInfo.InvariantInfo)); result.Add(0, DateTimeUtils.UtcToUnixTimeStamp(utc)); return result; } #endregion #region gettimeofday /// /// Gets time information. /// /// /// It returns containing the following 4 entries: /// /// "sec"Unix timestamp (seconds since the Unix Epoch) /// "usec"microseconds /// "minuteswest"minutes west of Greenwich (doesn't take daylight savings time in consideration) /// "dsttime"type of DST correction (+1 or 0, determined only by the current time zone not by the time) /// /// /// Associative array [ImplementsFunction("gettimeofday")] public static PhpArray GetTimeOfDay() { return GetTimeOfDay(DateTime.UtcNow, PhpTimeZone.CurrentTimeZone); } [ImplementsFunction("gettimeofday")] public static object GetTimeOfDay(bool returnDouble) { if (returnDouble) { return (Now - DateTimeUtils.UtcStartOfUnixEpoch).TotalSeconds; } else { return GetTimeOfDay(); } } internal static PhpArray GetTimeOfDay(DateTime utc, TimeZoneInfo/*!*/ zone) { PhpArray result = new PhpArray(0, 4); DateTime local = TimeZoneInfo.ConvertTimeFromUtc(utc, zone); int current_dst = 0; if (zone.IsDaylightSavingTime(local)) { var rules = zone.GetAdjustmentRules(); for (int i = 0; i < rules.Length; i++) { if (rules[i].DateStart <= local && rules[i].DateEnd >= local) { current_dst = (int)rules[i].DaylightDelta.TotalHours; break; } } } const int ticks_per_microsecond = (int)TimeSpan.TicksPerMillisecond / 1000; result["sec"] = DateTimeUtils.UtcToUnixTimeStamp(utc); result["usec"] = (int)(local.Ticks % TimeSpan.TicksPerSecond) / ticks_per_microsecond; result["minuteswest"] = (int)(utc - local).TotalMinutes; result["dsttime"] = current_dst; return result; } #endregion #region localtime /// /// The localtime() function returns an array identical to that of the structure returned by the C function call. /// Current time is used, regular numericaly indexed array is returned. /// /// Array containing values specifying the date and time. [ImplementsFunction("localtime")] public static PhpArray GetLocalTime() { return GetLocalTime(DateTime.UtcNow, false); } /// /// The localtime() function returns an array identical to that of the structure returned by the C function call. /// Time specified by the parameter timestamp is used, regular numericaly indexed array is returned. /// /// Number of seconds since 1970. /// Array containing values specifying the date and time. [ImplementsFunction("localtime")] public static PhpArray GetLocalTime(int timestamp) { return GetLocalTime(DateTimeUtils.UnixTimeStampToUtc(timestamp), false); } /// /// The localtime() function returns an array identical to that of the structure returned by the C function call. /// The first argument to localtime() is the timestamp. The second argument to the localtime() is /// the isAssociative, if this is set to false than the array is returned as a regular, numerically indexed array. /// If the argument is set to true then localtime() is an associative array containing all the different /// elements of the structure returned by the C function call to localtime. /// /// /// Returned array contains these elements if isAssociative is set to true: /// /// "tm_sec"seconds /// "tm_min"minutes /// "tm_hour"hour /// "tm_mday"day of the month /// "tm_mon"month of the year, starting with 0 for January /// "tm_year"Years since 1900 /// "tm_wday"Day of the week /// "tm_yday"Day of the year /// "tm_isdst"Is daylight savings time in effect /// /// /// /// /// [ImplementsFunction("localtime")] public static PhpArray GetLocalTime(int timestamp, bool returnAssociative) { return GetLocalTime(DateTimeUtils.UnixTimeStampToUtc(timestamp), returnAssociative); } internal static PhpArray GetLocalTime(DateTime utc, bool returnAssociative) { PhpArray result; DateTime local = TimeZoneInfo.ConvertTimeFromUtc(utc, PhpTimeZone.CurrentTimeZone); if (returnAssociative) { result = new PhpArray(0, 9); result["tm_sec"] = local.Second; result["tm_min"] = local.Minute; result["tm_hour"] = local.Hour; result["tm_mday"] = local.Day; result["tm_mon"] = local.Month - 1; result["tm_year"] = local.Year - 1900; result["tm_wday"] = (int)local.DayOfWeek; result["tm_yday"] = local.DayOfYear - 1; result["tm_isdst"] = PhpTimeZone.CurrentTimeZone.IsDaylightSavingTime(local) ? 1 : 0; } else { result = new PhpArray(9, 0); result[0] = local.Second; result[1] = local.Minute; result[2] = local.Hour; result[3] = local.Day; result[4] = local.Month - 1; result[5] = local.Year - 1900; result[6] = (int)local.DayOfWeek; result[7] = local.DayOfYear - 1; result[8] = PhpTimeZone.CurrentTimeZone.IsDaylightSavingTime(local) ? 1 : 0; } return result; } #endregion #region microtime /// /// Returns the string "msec sec" where sec is the current time measured in the number of seconds /// since the Unix Epoch (0:00:00 January 1, 1970 GMT), and msec is the microseconds part. /// /// String containing number of miliseconds, space and number of seconds. [ImplementsFunction("microtime")] public static string MicroTime() { // time from 1970 TimeSpan fromUnixEpoch = DateTime.UtcNow - DateTimeUtils.UtcStartOfUnixEpoch; // seconds part to return long seconds = (long)fromUnixEpoch.TotalSeconds; // only remaining time less than one second TimeSpan mSec = fromUnixEpoch.Subtract(new TimeSpan(seconds * 10000000)); // convert seconds to 100 ns double remaining = ((double)mSec.Ticks) / 10000000; // convert from 100ns to seconds return String.Format("{0} {1}", remaining, seconds); } /// /// Returns the fractional time in seconds from the start of the UNIX epoch. /// /// true to return the double, false to return string. /// containing number of miliseconds, space and number of seconds /// if is false and /// containing the fractional count of seconds otherwise. [ImplementsFunction("microtime")] public static object MicroTime(bool returnDouble) { if (returnDouble) return (DateTime.UtcNow - DateTimeUtils.UtcStartOfUnixEpoch).TotalSeconds; else return MicroTime(); } #endregion #region strtotime /// /// Parses a string containing an English date format into a UNIX timestamp relative to the current time. /// /// String containing time definition /// Number of seconds since 1/1/1970 or -1 on failure. [ImplementsFunction("strtotime")] public static object StringToTime(string time) { return StringToTime(time, DateTime.UtcNow); } /// /// Parses a string containing an English date format into a UNIX timestamp relative to a specified time. /// /// String containing time definition. /// Timestamp (seconds from 1970) to which is the new timestamp counted. /// Number of seconds since 1/1/1970 or -1 on failure. [ImplementsFunction("strtotime")] public static object StringToTime(string time, int start) { return StringToTime(time, DateTimeUtils.UnixTimeStampToUtc(start)); } /// /// Implementation of function. /// private static object StringToTime(string time, DateTime startUtc) { if (time == null) return false; time = time.Trim(); if (time.Length == 0) return false; string error = null; int result = StrToTime.DateInfo.Parse(time, startUtc, out error); if (error != null) { PhpException.Throw(PhpError.Warning, error); return false; } return result; } #endregion #region time /// /// Returns the current time measured in the number of seconds since the Unix Epoch (January 1 1970 00:00:00 GMT). /// /// Number of seconds since 1970. [ImplementsFunction("time")] public static int Time() { return DateTimeUtils.UtcToUnixTimeStamp(DateTime.UtcNow); } #endregion #region date_sunrise, date_sunset public enum TimeFormats { [ImplementsConstant("SUNFUNCS_RET_TIMESTAMP")] Integer = 0, [ImplementsConstant("SUNFUNCS_RET_STRING")] String = 1, [ImplementsConstant("SUNFUNCS_RET_DOUBLE")] Double = 2 } [ImplementsFunction("date_sunrise")] public static object GetSunriseTime(int timestamp) { return GetSunTime(timestamp, TimeFormats.String, Double.NaN, Double.NaN, Double.NaN, Double.NaN, true); } [ImplementsFunction("date_sunrise")] public static object GetSunriseTime(int timestamp, TimeFormats format) { return GetSunTime(timestamp, format, Double.NaN, Double.NaN, Double.NaN, Double.NaN, true); } [ImplementsFunction("date_sunrise")] public static object GetSunriseTime(int timestamp, TimeFormats format, double latitude) { return GetSunTime(timestamp, format, latitude, Double.NaN, Double.NaN, Double.NaN, true); } [ImplementsFunction("date_sunrise")] public static object GetSunriseTime(int timestamp, TimeFormats format, double latitude, double longitude) { return GetSunTime(timestamp, format, latitude, longitude, Double.NaN, Double.NaN, true); } [ImplementsFunction("date_sunrise")] public static object GetSunriseTime(int timestamp, TimeFormats format, double latitude, double longitude, double zenith) { return GetSunTime(timestamp, format, latitude, longitude, zenith, Double.NaN, true); } [ImplementsFunction("date_sunrise")] public static object GetSunriseTime(int timestamp, TimeFormats format, double latitude, double longitude, double zenith, double offset) { return GetSunTime(timestamp, format, latitude, longitude, zenith, offset, true); } [ImplementsFunction("date_sunset")] public static object GetSunsetTime(int timestamp) { return GetSunTime(timestamp, TimeFormats.String, Double.NaN, Double.NaN, Double.NaN, Double.NaN, false); } [ImplementsFunction("date_sunset")] public static object GetSunsetTime(int timestamp, TimeFormats format) { return GetSunTime(timestamp, format, Double.NaN, Double.NaN, Double.NaN, Double.NaN, false); } [ImplementsFunction("date_sunset")] public static object GetSunsetTime(int timestamp, TimeFormats format, double latitude) { return GetSunTime(timestamp, format, latitude, Double.NaN, Double.NaN, Double.NaN, false); } [ImplementsFunction("date_sunset")] public static object GetSunsetTime(int timestamp, TimeFormats format, double latitude, double longitude) { return GetSunTime(timestamp, format, latitude, longitude, Double.NaN, Double.NaN, false); } [ImplementsFunction("date_sunset")] public static object GetSunsetTime(int timestamp, TimeFormats format, double latitude, double longitude, double zenith) { return GetSunTime(timestamp, format, latitude, longitude, zenith, Double.NaN, false); } [ImplementsFunction("date_sunset")] public static object GetSunsetTime(int timestamp, TimeFormats format, double latitude, double longitude, double zenith, double offset) { return GetSunTime(timestamp, format, latitude, longitude, zenith, offset, false); } public static object GetSunTime(int timestamp, TimeFormats format, double latitude, double longitude, double zenith, double offset, bool getSunrise) { var zone = PhpTimeZone.CurrentTimeZone; DateTime utc = DateTimeUtils.UnixTimeStampToUtc(timestamp); DateTime local = TimeZoneInfo.ConvertTimeFromUtc(utc, zone); if (Double.IsNaN(latitude) || Double.IsNaN(longitude) || Double.IsNaN(zenith)) { LibraryConfiguration config = LibraryConfiguration.GetLocal(ScriptContext.CurrentContext); if (Double.IsNaN(latitude)) latitude = config.Date.Latitude; if (Double.IsNaN(longitude)) longitude = config.Date.Longitude; if (Double.IsNaN(zenith)) zenith = (getSunrise) ? config.Date.SunriseZenith : config.Date.SunsetZenith; } if (Double.IsNaN(offset)) offset = zone.GetUtcOffset(local).TotalHours; double result_utc = CalculateSunTime(local.DayOfYear, latitude, longitude, zenith, getSunrise); double result = result_utc + offset; switch (format) { case TimeFormats.Integer: return (timestamp - (timestamp % (24 * 3600))) + (int)(3600 * result); case TimeFormats.String: return String.Format("{0:00}:{1:00}", (int)result, (int)(60 * (result - (double)(int)result))); case TimeFormats.Double: return result; default: PhpException.InvalidArgument("format"); return null; } } private static double ToRadians(double degrees) { return degrees * Math.PI / 180; } private static double ToDegrees(double radians) { return radians * 180 / Math.PI; } /// /// Calculates sunrise or sunset. Adopted PHP implementation by Moshe Doron (mosdoron@netvision.net.il). /// Returns UTC time. /// private static double CalculateSunTime(int day, double latitude, double longitude, double zenith, bool getSunrise) { double lngHour, t, M, L, Lx, RA, RAx, Lquadrant, RAquadrant, sinDec, cosDec, cosH, H, T, UT, UTx; // convert the longitude to hour value and calculate an approximate time lngHour = longitude / 15; if (getSunrise) t = (double)day + ((6 - lngHour) / 24); else t = (double)day + ((18 - lngHour) / 24); // calculate the sun's mean anomaly: M = (0.9856 * t) - 3.289; // step 4: calculate the sun's true longitude: L = M + (1.916 * Math.Sin(ToRadians(M))) + (0.020 * Math.Sin(ToRadians(2 * M))) + 282.634; while (L < 0) { Lx = L + 360; Debug.Assert(Lx != L); L = Lx; } while (L >= 360) { Lx = L - 360; Debug.Assert(Lx != L); L = Lx; } // calculate the sun's right ascension: RA = ToDegrees(Math.Atan(0.91764 * Math.Tan(ToRadians(L)))); while (RA < 0) { RAx = RA + 360; Debug.Assert(RAx != RA); RA = RAx; } while (RA >= 360) { RAx = RA - 360; Debug.Assert(RAx != RA); RA = RAx; } // right ascension value needs to be in the same quadrant as L: Lquadrant = Math.Floor(L / 90) * 90; RAquadrant = Math.Floor(RA / 90) * 90; RA = RA + (Lquadrant - RAquadrant); // right ascension value needs to be converted into hours: RA /= 15; // calculate the sun's declination: sinDec = 0.39782 * Math.Sin(ToRadians(L)); cosDec = Math.Cos(Math.Asin(sinDec)); // calculate the sun's local hour angle: cosH = (Math.Cos(ToRadians(zenith)) - (sinDec * Math.Sin(ToRadians(latitude)))) / (cosDec * Math.Cos(ToRadians(latitude))); // finish calculating H and convert into hours: if (getSunrise) H = 360 - ToDegrees(Math.Acos(cosH)); else H = ToDegrees(Math.Acos(cosH)); H = H / 15; // calculate local mean time: T = H + RA - (0.06571 * t) - 6.622; // convert to UTC: UT = T - lngHour; while (UT < 0) { UTx = UT + 24; Debug.Assert(UTx != UT); UT = UTx; } while (UT >= 24) { UTx = UT - 24; Debug.Assert(UTx != UT); UT = UTx; } return UT; } #endregion } } ================================================ FILE: Source/ClassLibrary/DateTime.CLR/DateTimeParsing.cs ================================================ /* Copyright (c) 2005-2006 Tomas Matousek. Based on PHP5 implementation by Derick Rethans . The use and distribution terms for this software are contained in the file named License.txt, which can be found in the root of the Phalanger distribution. By using this software in any fashion, you are agreeing to be bound by the terms of this license. You must not remove this notice from this software. */ // TODO: Prior to PHP 5.3.0, 24:00 was not a valid format and strtotime() returned FALSE. // TODO: strtotime("0000-00-00 00:00:00 +0000") should return FALSE using System; using System.IO; using PHP.Core; using System.Diagnostics; #if SILVERLIGHT using PHP.CoreCLR; #endif namespace PHP.Library.StrToTime { #region Enums internal enum Tokens { EOF, ERROR, XMLRPC_SOAP, TIME12, TIME24, GNU_NOCOLON, GNU_NOCOLON_TZ, ISO_NOCOLON, AMERICAN, ISO_DATE, DATE_FULL, DATE_TEXT, DATE_NOCOLON, PG_YEARDAY, PG_TEXT, PG_REVERSE, CLF, DATE_NO_DAY, SHORTDATE_WITH_TIME, DATE_FULL_POINTED, TIME24_WITH_ZONE, ISO_WEEK, TIMEZONE, AGO, RELATIVE, WEEKDAY } #endregion internal sealed class DateInfo { #region Fields public struct Relative { /// /// Number of years/months/days. /// public int y, m, d; /// /// Number of hours/minutes/seconds. /// public int h, i, s; /// /// Weekday (e.g. "next monday"). /// public int weekday; public int weekday_behavior; } /// /// Date and time specified relatively. /// public Relative relative; /// /// Absolute year/month/day. /// public int y = -1, m = -1, d = -1; /// /// Absolute hour/minute/second. /// public int h = -1, i = -1, s = -1; /// /// Fraction of second. /// public double f = -1; /// /// Number of time/date/zone/relative time/weekday components specified. /// public int have_time, have_date, have_zone, have_relative, have_weekday_relative; /// /// GMT offset in minutes. /// public int z = 0; #endregion #region Parse public static int Parse(string/*!*/ str, DateTime utcStart, out string error) { Debug.Assert(str != null); var scanner = new Scanner(new StringReader(str.ToLowerInvariant())); while (true) { Tokens token = scanner.GetNextToken(); if (token == Tokens.ERROR || scanner.Errors > 0) { error = LibResources.GetString("parse_error", scanner.Position, str.Substring(scanner.Position)); return 0; } if (token == Tokens.EOF) { return scanner.Time.GetUnixTimeStamp(utcStart, out error); } } } #endregion #region GetUnixTimeStamp private int GetUnixTimeStamp(DateTime utcStart, out string error) { var zone = PhpTimeZone.CurrentTimeZone; DateTime start = TimeZoneInfo.ConvertTimeFromUtc(utcStart, zone);// zone.ToLocalTime(utcStart); // following operates on local time defined by the parsed info or by the current time zone // if (have_date > 0 && have_time == 0) { h = 0; i = 0; s = 0; } else { if (h == -1) h = start.Hour; if (i == -1) i = start.Minute; if (s == -1) s = start.Second; } if (y == -1) y = start.Year; if (m == -1) m = start.Month; else if (m == 0) { m = 1; --relative.m;} if (d == -1) d = start.Day; else if (d == 0) { d = 1; --relative.d; } int days_overflow; CheckOverflows(y, m, ref d, ref h, out days_overflow); var result = new DateTime(y, m, d, h, i, s, DateTimeKind.Unspecified); result = result.AddDays(relative.d + days_overflow); result = result.AddMonths(relative.m); result = result.AddYears(relative.y); result = result.AddHours(relative.h); result = result.AddMinutes(relative.i); result = result.AddSeconds(relative.s); // adds relative weekday: if (have_weekday_relative > 0) { int dow = (int)result.DayOfWeek; int difference = relative.weekday - dow; if ((relative.d < 0 && difference < 0) || (relative.d >= 0 && difference <= -relative.weekday_behavior)) difference += 7; if (relative.weekday >= 0) result = result.AddDays(difference); else result = result.AddDays(dow - relative.weekday - 7); } // convert to UTC: if (have_zone > 0) { result = result.AddMinutes(-z); } else { if (zone.IsInvalidTime(result)) { // We ended up in an invalid time. This time was skipped because of day-light saving change. // Figure out the direction we were moving, and step in the direction until the next valid time. int secondsStep = ((result - utcStart).Ticks >= 0) ? 1 : -1; do { result = result.AddSeconds(secondsStep); } while (zone.IsInvalidTime(result)); } result = TimeZoneInfo.ConvertTimeToUtc(result, zone);// zone.ToUniversalTime(result); } error = null; return DateTimeUtils.UtcToUnixTimeStamp(result); } #endregion #region Helper Methods public void HAVE_TIME() { have_time = 1; h = 0; i = 0; s = 0; f = 0; } public void UNHAVE_TIME() { have_time = 0; h = 0; i = 0; s = 0; f = 0; } public void HAVE_DATE() { have_date = 1; } public void UNHAVE_DATE() { have_date = 0; d = 0; m = 0; y = 0; } public void HAVE_RELATIVE() { have_relative = 1; relative.weekday_behavior = 0; } public void HAVE_WEEKDAY_RELATIVE() { have_weekday_relative = 1; } public void HAVE_TZ() { have_zone = 1; } public static int ProcessYear(int year) { if (year == -1) return -1; if (year < 100) return (year < 70) ? year + 2000 : year + 1900; return year; } /// /// Checks how many days given year/month/day/hour overflows (as it is possible in PHP format). /// /// parsed year /// parsed month /// parsed day /// parsed hour (24 is problem) /// resulting amount of overflowing days (will be added to the resulting DateTime). private static void CheckOverflows(int y, int m, ref int d, ref int h, out int days_overflow) { days_overflow = 0; int daysinmonth_overflow = d - DateTime.DaysInMonth(y, m); if (daysinmonth_overflow > 0) { d -= daysinmonth_overflow; days_overflow += daysinmonth_overflow; } else if (d == 0) { d = 1; --days_overflow; } if (h==24) { h = 0; ++days_overflow; } } /// /// Parse integer with possible sign of a specified maximal number of digits. /// public static int ParseSignedInt(string str, ref int pos, int maxDigits) { int sign = +1; // skip non-digit, non-sign chars: while (pos < str.Length && !Char.IsDigit(str, pos) && str[pos] != '+' && str[pos] != '-') { pos++; } if (pos == str.Length) return -1; // set sign: if (str[pos] == '+') { pos++; } else if (str[pos] == '-') { sign = -1; pos++; } return sign * ParseUnsignedInt(str, ref pos, maxDigits); } /// /// Parse unsigned integer of a specified maximal length. /// public static int ParseUnsignedInt(string str, ref int pos, int maxDigits) // PHP: timelib_get_nr { int len = 0; // skips non-digits: while (pos < str.Length && !Char.IsDigit(str, pos)) { pos++; } if (pos == str.Length) return -1; int begin = pos; while (pos < str.Length && Char.IsDigit(str, pos) && len < maxDigits) { pos++; len++; } return Int32.Parse(str.Substring(begin, len)); } /// /// Parses real fraction ".[0-9]{1,maxDigits}". /// public static double ParseFraction(string str, ref int pos, int maxDigits) // PHP: timelib_get_frac_nr { Debug.Assert(pos < str.Length && str[pos] == '.'); int begin = pos; // dot: pos++; int len = 1; // get substring of digits: while (pos < str.Length && Char.IsDigit(str, pos) && len < maxDigits) { pos++; len++; } string number = str.Substring(begin, len); return Double.Parse(number, System.Globalization.NumberFormatInfo.InvariantInfo); } /// /// Parses meridian "[ap][.]?m[.]?" and adjusts hours accordingly. /// public bool SetMeridian(string str, ref int pos) { while (pos < str.Length && str[pos] != 'a' && str[pos] != 'p') { pos++; } if (pos == str.Length) return false; if (str[pos] == 'a') { if (h == 12) h = 0; } else if (h != 12) { h += 12; } pos++; // dot after "a"/"p", move after "m": pos += (str[pos] == '.') ? 2 : 1; // dot after "m": if (pos < str.Length && str[pos] == '.') pos++; return true; } /// /// Moves string position index behind "nd", "rd", "st", "th" if applicable. /// public static void SkipDaySuffix(string str, ref int pos) // PHP: timelib_skip_day_suffix { if (pos + 1 >= str.Length || Char.IsWhiteSpace(str[pos])) return; if ( str[pos] == 'n' && str[pos + 1] == 'd' || str[pos] == 'r' && str[pos + 1] == 'd' || str[pos] == 's' && str[pos + 1] == 't' || str[pos] == 't' && str[pos + 1] == 'h' ) { pos += 2; } } /// /// Parses month string and returns the month number 1..12, zero on error. /// public static int ParseMonth(string str, ref int pos) { while (pos < str.Length && (str[pos] == ' ' || str[pos] == '-' || str[pos] == '.' || str[pos] == '/')) { pos++; } int begin = pos; while (pos < str.Length && Char.IsLetter(str, pos)) { pos++; } switch (str.Substring(begin, pos - begin)) { case "jan": return 1; case "feb": return 2; case "mar": return 3; case "apr": return 4; case "may": return 5; case "jun": return 6; case "jul": return 7; case "aug": return 8; case "sep": return 9; case "sept": return 9; case "oct": return 10; case "nov": return 11; case "dec": return 12; case "i": return 1; case "ii": return 2; case "iii": return 3; case "iv": return 4; case "v": return 5; case "vi": return 6; case "vii": return 7; case "viii": return 8; case "ix": return 9; case "x": return 10; case "xi": return 11; case "xii": return 12; case "january": return 1; case "february": return 2; case "march": return 3; case "april": return 4; case "june": return 6; case "july": return 7; case "august": return 8; case "september": return 9; case "october": return 10; case "november": return 11; case "december": return 12; } return 0; } /// /// Parses text defining ordinal number. /// public static int ParseRelativeText(string str, ref int pos, out int behavior) { while (pos < str.Length && (str[pos] == ' ' || str[pos] == '-' || str[pos] == '/')) { pos++; } int begin = pos; while (pos < str.Length && Char.IsLetter(str, pos)) { pos++; } behavior = 0; switch (str.Substring(begin, pos - begin)) { case "last": return -1; case "previous": return -1; case "this": behavior = 1; return 0; case "first": return 1; case "next": return 1; case "second": return 2; case "third": return 3; case "fourth": return 4; case "fifth": return 5; case "sixth": return 6; case "seventh": return 7; case "eight": return 8; case "ninth": return 9; case "tenth": return 10; case "eleventh": return 11; case "twelfth": return 12; } return 0; } /// /// Reads characters up to the first space. /// public static string ReadToSpace(string str, ref int pos) { int begin = pos; while (pos < str.Length && str[pos] != ' ') pos++; return str.Substring(begin, pos - begin); } /// /// Sets relative time and date information according to the parsed text. /// public void SetRelative(string str, int amount, int behavior) { switch (str) { case "sec": case "secs": case "second": case "seconds": relative.s += amount; return; case "min": case "mins": case "minute": case "minutes": relative.i += amount; return; case "hour": case "hours": relative.h += amount; return; case "day": case "days": relative.d += amount; return; case "month": case "months": relative.m += amount; return; case "week": case "weeks": relative.d += 7 * amount; return; case "fortnight": case "fortnights": case "forthnight": case "forthnights": relative.d += 14 * amount; return; case "year": case "years": relative.y += amount; return; } if (SetWeekDay(str)) { relative.d += (amount > 0 ? amount - 1 : amount) * 7; // TIMELIB_HAVE_WEEKDAY_RELATIVE have_weekday_relative = 1; relative.weekday_behavior = behavior; // TIMELIB_UNHAVE_TIME have_time = 0; h = 0; i = 0; s = 0; f = 0; } } /// /// Sets relative week day according to a specified text. /// public bool SetWeekDay(string str) { switch (str) { case "mon": case "monday": relative.weekday = 1; break; case "tue": case "tuesday": relative.weekday = 2; break; case "wed": case "wednesday": relative.weekday = 3; break; case "thu": case "thursday": relative.weekday = 4; break; case "fri": case "friday": relative.weekday = 5; break; case "sat": case "saturday": relative.weekday = 6; break; case "sun": case "sunday": relative.weekday = 0; break; default: return false; } return true; } /// /// Converts week number to day number. /// public static int WeekToDay(int year, int week, int day) { int dow = (int)new DateTime(year, 1, 1).DayOfWeek; // the offset for day 1 of week 1: int offset = 0 - (dow > 4 ? dow - 7 : dow); // add weeks and days: return offset + ((week - 1) * 7) + day; } /// /// Parses and sets time zone information. /// public bool SetTimeZone(string str, ref int pos) // PHP: timelib_get_zone { if (have_zone > 0) return false; while (pos < str.Length && (str[pos] == ' ' || str[pos] == '(')) pos++; bool result; if (pos < str.Length && str[pos] == '+') { pos++; z = ParseTimeZone(str, ref pos); result = true; } else if (pos < str.Length && str[pos] == '-') { pos++; z = -ParseTimeZone(str, ref pos); result = true; } else { result = SetZoneOffset(str.Substring(pos, str.Length - pos)); pos = str.Length; } while (pos < str.Length && str[pos] == ')') pos++; if (result) HAVE_TZ(); return result; } /// /// Parses numeric timezones. Returns offset in minutes. /// static int ParseTimeZone(string str, ref int pos) // PHP: timelib_parse_tz_cor { int result = 0; int length = str.Length - pos; switch (length) { case 1: // 0 case 2: // 00 result = Int32.Parse(str.Substring(pos, length)) * 60; break; case 3: // 000, 0:0 case 4: // 0000, 0:00, 00:0 if (str[pos + 1] == ':') // 0:0, 0:00 { result = (str[pos] - '0') * 60 + Int32.Parse(str.Substring(pos + 2, length - 2)); } else if (str[pos + 2] == ':') // 00:0 { result = ((str[pos] - '0') * 10 + (str[pos + 1] - '0')) * 60 + (str[pos + 3] - '0'); } else // 000, 0000 { result = Int32.Parse(str.Substring(pos, length)); result = (result / 100) * 60 + result % 100; } break; case 5: // 00:00 result = Int32.Parse(str.Substring(pos, 2)) * 60 + Int32.Parse(str.Substring(pos + 3, 2)); break; } return result; } /// /// Sets zone offset by zone abbreviation. /// private bool SetZoneOffset(string/*!*/ abbreviation) // PHP: timelib_lookup_zone, zone_search { // source http://www.worldtimezone.com/wtz-names/timezonenames.html switch (abbreviation) { case "z": case "utc": case "gmt": case "wet": case "wez": case "gt": case "wz": case "hg": case "gz": case "cut": case "tuc": z = 0; break; case "a": case "cet": case "met": case "mez": case "wat": case "fwt": case "hfh": case "wut": case "set": case "swt": case "nor": case "hoe": case "dnt": z = 60; break; case "b": case "eet": case "oez": case "usz1": case "hfe": z = +2 * 60; break; case "c": case "msk": case "usz2": case "r2t": case "tst": case "eat": case "bat": case "bt": z = +3 * 60; break; case "it": case "irt": z = +3 * 60 + 30; break; case "d": case "usz3": case "ret": case "mut": case "sct": case "azt": case "amst": z = +4 * 60; break; case "aft": z = +4 * 60 + 30; break; case "e": case "usz4": case "iot": case "tft": case "mvt": case "tmt": case "kgt": case "tjt": case "pkt": case "uzt": case "yekt": z = +5 * 60; break; case "npt": z = +5 * 60 + 45; break; case "f": case "usz5": case "almt": case "bdt": case "btt": case "lkt": case "novt": case "omst": case "mawt": z = +6 * 60; break; case "mmt": case "nst": case "nsut": z = +6 * 60 + 30; break; case "g": case "usz6": case "jt": case "javt": case "tha": case "ict": case "cxt": case "krat": case "davt": z = +7 * 60; break; case "h": case "awst": case "usz7": case "bnt": case "hkt": case "myt": case "pht": case "bort": case "ulat": z = +8 * 60; break; case "i": case "usz8": case "jst": case "kst": case "pwt": case "jayt": case "yakt": z = +9 * 60; break; case "acst": case "cast": z = +9 * 60 + 30; break; case "k": case "aest": case "usz9": case "yapt": case "mpt": case "pgt": case "trut": case "vlat": case "ddut": z = +10 * 60; break; case "lhst": z = +10 * 60 + 30; break; case "l": case "uz10": case "vut": case "sbt": case "nct": case "pont": case "magt": z = +11 * 60; break; case "nft": z = +11 * 60 + 30; break; case "m": case "uz11": case "nzt": case "fjt": case "tvt": case "kost": case "mht": case "nrt": case "gilt": case "wakt": case "wft": case "pett": case "idle": z = +12 * 60; break; case "chast": z = +12 * 60 + 45; break; case "phot": case "tot": z = +13 * 60; break; case "lint": z = +14 * 60; break; case "y": case "idlw": z = -12 * 60; break; case "x": case "best": case "nut": z = -11 * 60; break; case "w": case "hst": case "hast": case "tkt": case "ckt": case "that": case "ahst": z = -10 * 60; break; case "v": case "akst": case "yst": case "gamt": z = -9 * 60; break; case "mart": z = -9 * 60 - 30; break; case "u": case "pst": case "hnp": z = -8 * 60; break; case "t": case "mst": z = -7 * 60; break; case "s": case "cst": case "mex": case "east": case "galt": z = -6 * 60; break; case "r": case "est": case "cot": case "pet": case "ect": z = -5 * 60; break; case "q": case "clt": case "bot": case "gyt": case "vet": case "pyt": case "fkt": z = -4 * 60; break; case "p": case "bst": case "bzt2": case "art": case "uyt": case "srt": case "gft": case "pmt": case "utz": case "wgt": z = -3 * 60; break; case "o": case "fst": case "vtz": z = -2 * 60; break; case "n": case "at": case "azot": case "cvt": case "egt": z = -1 * 60; break; case "acdt": z = 60 * 10 + 30; break; case "adt": z = -60 * 3; break; // Atlantic Daylight Time case "aedt": z = 60 * 11; break; case "akdt": z = -60 * 8; break; case "ast": z = 60 * 3; break; // Arabia Standard Time case "cadt": z = 60 * 10 + 30; break; case "cat": z = -60 * 10; break; case "cct": z = 60 * 8; break; case "cdt": z = -60 * 5; break; // Central Daylight Time (USA) case "cedt": z = 60 * 2; break; case "cest": z = 60 * 2; break; case "eadt": z = 60 * 11; break; case "edt": z = -60 * 4; break; case "eedt": z = 60 * 3; break; case "eest": z = 60 * 3; break; case "gst": z = 60 * 4; break; // Gulf Standard Time case "haa": z = -60 * 3; break; case "hac": z = -60 * 5; break; case "hadt": z = -60 * 9; break; case "hae": z = -60 * 4; break; case "hap": z = -60 * 7; break; case "har": z = -60 * 6; break; case "hat": z = -60 * 2 - 30; break; case "hay": z = -60 * 8; break; case "hdt": z = -60 * 9 - 30; break; case "hna": z = -60 * 4; break; case "hnc": z = -60 * 6; break; case "hne": z = -60 * 5; break; case "hnr": z = -60 * 7; break; case "hnt": z = -60 * 3 - 30; break; case "hny": z = -60 * 9; break; case "ist": z = 60 * 1; break; case "mdt": z = -60 * 6; break; case "mest": z = 60 * 2; break; case "mesz": z = 60 * 2; break; case "mewt": z = 60 * 1; break; case "ndt": z = -60 * 2 - 30; break; case "nzdt": z = 60 * 13; break; case "nzst": z = 60 * 12; break; case "pdt": z = -60 * 7; break; case "rok": z = 60 * 9; break; case "sst": z = -11 * 60; break; // Samoa Standard Time case "ut": z = 0; break; case "wedt": z = 60 * 1; break; case "west": z = 60 * 1; break; case "wst": z = 60 * 8; break; case "ydt": z = -60 * 8; break; case "zp4": z = 60 * 4; break; case "zp5": z = 60 * 5; break; case "zp6": z = 60 * 6; break; default: return false; } return true; } #endregion } } ================================================ FILE: Source/ClassLibrary/DateTime.CLR/TimeZones.cs ================================================ /* Copyright (c) 2005-2006 Tomas Matousek. The use and distribution terms for this software are contained in the file named License.txt, which can be found in the root of the Phalanger distribution. By using this software in any fashion, you are agreeing to be bound by the terms of this license. You must not remove this notice from this software. */ using System; using System.Globalization; using System.Collections; using System.Collections.Generic; using System.Linq; using Microsoft.Win32; using System.Xml; using System.ComponentModel; using System.Runtime.Serialization; using System.Runtime.InteropServices; using PHP.Core; using PHP.Core.Reflection; using System.Diagnostics; #if SILVERLIGHT using PHP.CoreCLR; #endif namespace PHP.Library { #region DateTimeZone /// /// Representation of time zone. /// #if !SILVERLIGHT [Serializable] #endif [ImplementsType] public class DateTimeZone : PhpObject { internal TimeZoneInfo timezone; #region Construction public DateTimeZone(ScriptContext/*!*/context, TimeZoneInfo/*!*/resolvedTimeZone) : this(context, true) { Debug.Assert(context != null); Debug.Assert(resolvedTimeZone != null); this.timezone = resolvedTimeZone; } /// /// For internal purposes only. /// [EditorBrowsable(EditorBrowsableState.Never)] public DateTimeZone(ScriptContext context, bool newInstance) : base(context, newInstance) { } /// /// For internal purposes only. /// [EditorBrowsable(EditorBrowsableState.Never)] public DateTimeZone(ScriptContext context, DTypeDesc caller) : base(context, caller) { } #if !SILVERLIGHT /// Deserializing constructor. protected DateTimeZone(SerializationInfo info, StreamingContext context) : base(info, context) { } #endif #endregion #region Methods // public __construct ( string $timezone ) [ImplementsMethod] public object __construct(ScriptContext/*!*/context, object timezone_name) { if (timezone_name != null) { var zoneName = PHP.Core.Convert.ObjectToString(timezone_name); this.timezone = PhpTimeZone.GetTimeZone(zoneName); if (this.timezone == null) PhpException.Throw(PhpError.Notice, LibResources.GetString("unknown_timezone", zoneName)); } else { this.timezone = PhpTimeZone.CurrentTimeZone; } return null; } [EditorBrowsable(EditorBrowsableState.Never)] public static object __construct(object instance, PhpStack stack) { var arg1 = stack.PeekValue(1); stack.RemoveFrame(); return ((DateTimeZone)instance).__construct(stack.Context, arg1); } //public array getLocation ( void ) [ImplementsMethod] public object getLocation(ScriptContext/*!*/context) { throw new NotImplementedException(); } [EditorBrowsable(EditorBrowsableState.Never)] public static object getLocation(object instance, PhpStack stack) { stack.RemoveFrame(); return ((DateTimeZone)instance).getLocation(stack.Context); } //public string getName ( void ) [ImplementsMethod] public object getName(ScriptContext/*!*/context) { return (timezone != null) ? timezone.Id : null; } [EditorBrowsable(EditorBrowsableState.Never)] public static object getName(object instance, PhpStack stack) { stack.RemoveFrame(); return ((DateTimeZone)instance).getName(stack.Context); } //public int getOffset ( DateTime $datetime ) [ImplementsMethod] public object getOffset(ScriptContext/*!*/context, object datetime) { if (this.timezone == null) return false; if (datetime == null) { PhpException.ArgumentNull("datetime"); return false; } var dt = datetime as __PHP__DateTime; if (dt == null) { PhpException.InvalidArgumentType("datetime", "DateTime"); return false; } return (int)this.timezone.BaseUtcOffset.TotalSeconds + (this.timezone.IsDaylightSavingTime(dt.Time) ? 3600 : 0); } [EditorBrowsable(EditorBrowsableState.Never)] public static object getOffset(object instance, PhpStack stack) { var arg1 = stack.PeekValue(1); stack.RemoveFrame(); return ((DateTimeZone)instance).getOffset(stack.Context, arg1); } //public array getTransitions ([ int $timestamp_begin [, int $timestamp_end ]] ) [ImplementsMethod] public object getTransitions(ScriptContext/*!*/context, [Optional]object timestamp_begin, [Optional]object timestamp_end) { // TODO: timestamp_begin, timestamp_end var rules = this.timezone.GetAdjustmentRules(); var array = new PhpArray(rules.Length); //var now = DateTime.UtcNow; for (int i = 0; i < rules.Length; i++) { var rule = rules[i]; // TODO: timezone transitions //if (rule.DateStart > now || rule.DateEnd < now) continue; //var transition = new PhpArray(5); //transition["ts"] = (int)(new DateTime(now.Year, rule.DaylightTransitionStart.Month, rule.DaylightTransitionStart.Day) - DateTimeUtils.UtcStartOfUnixEpoch).TotalSeconds; ////transition["time"] = ; ////transition["offset"] = ; //transition["isdst"] = 1; ////transition["abbr"] = ; //array.Add(transition); } return array; } [EditorBrowsable(EditorBrowsableState.Never)] public static object getTransitions(object instance, PhpStack stack) { var arg1 = stack.PeekValueOptional(1); var arg2 = stack.PeekValueOptional(2); stack.RemoveFrame(); return ((DateTimeZone)instance).getTransitions(stack.Context, arg1, arg2); } //public static array listAbbreviations ( void ) [ImplementsMethod] public object listAbbreviations(ScriptContext/*!*/context) { throw new NotImplementedException(); } [EditorBrowsable(EditorBrowsableState.Never)] public static object listAbbreviations(object instance, PhpStack stack) { stack.RemoveFrame(); return ((DateTimeZone)instance).listAbbreviations(stack.Context); } //public static array listIdentifiers ([ int $what = DateTimeZone::ALL [, string $country = NULL ]] ) [ImplementsMethod] public static object listIdentifiers(ScriptContext/*!*/context, [Optional]object what, [Optional]object country) { throw new NotImplementedException(); } [EditorBrowsable(EditorBrowsableState.Never)] public static object listIdentifiers(object instance, PhpStack stack) { var arg1 = stack.PeekValueOptional(1); var arg2 = stack.PeekValueOptional(2); stack.RemoveFrame(); return listIdentifiers(stack.Context, arg1, arg2); } #endregion } #endregion /// /// Provides timezone information for PHP functions. /// [ImplementsExtension(LibraryDescriptor.ExtDate)] public static class PhpTimeZone { private const string EnvVariableName = "TZ"; private struct TimeZoneInfoItem { /// /// Comparer of , comparing its . /// public class Comparer : IComparer { public int Compare(TimeZoneInfoItem x, TimeZoneInfoItem y) { return StringComparer.OrdinalIgnoreCase.Compare(x.PhpName, y.PhpName); } } /// /// PHP time zone name. /// public readonly string PhpName; /// /// Actual from .NET. /// public readonly TimeZoneInfo Info; /// /// An abbrevation, not supported. /// public readonly string Abbrevation; /// /// Not listed item used only as an alias for another time zone. /// public readonly bool IsAlias; internal TimeZoneInfoItem(string/*!*/phpName, TimeZoneInfo/*!*/info, string abbrevation, bool isAlias) { // alter the ID with php-like name if (!phpName.EqualsOrdinalIgnoreCase(info.Id)) info = TimeZoneInfo.CreateCustomTimeZone(phpName, info.BaseUtcOffset, info.DisplayName, info.StandardName, info.DaylightName, info.GetAdjustmentRules()); // this.PhpName = phpName; this.Info = info; this.Abbrevation = abbrevation; this.IsAlias = isAlias; } } /// /// Initializes list of time zones. /// static PhpTimeZone() { // initialize tz database (from system time zone database) timezones = InitializeTimeZones(); } #region timezones /// /// PHP time zone database. /// private readonly static TimeZoneInfoItem[]/*!!*/timezones; private static TimeZoneInfoItem[]/*!!*/InitializeTimeZones() { // read list of initial timezones var sortedTZ = new SortedSet( EnvironmentUtils.IsWindows ? InitialTimeZones_Windows() : InitialTimeZones_Mono(), new TimeZoneInfoItem.Comparer()); // add additional time zones: sortedTZ.Add(new TimeZoneInfoItem("UTC", TimeZoneInfo.Utc, null, false)); sortedTZ.Add(new TimeZoneInfoItem("Etc/UTC", TimeZoneInfo.Utc, null, true)); sortedTZ.Add(new TimeZoneInfoItem("Etc/GMT-0", TimeZoneInfo.Utc, null, true)); sortedTZ.Add(new TimeZoneInfoItem("GMT", TimeZoneInfo.Utc, null, true)); sortedTZ.Add(new TimeZoneInfoItem("GMT0", TimeZoneInfo.Utc, null, true)); sortedTZ.Add(new TimeZoneInfoItem("UCT", TimeZoneInfo.Utc, null, true)); sortedTZ.Add(new TimeZoneInfoItem("Universal", TimeZoneInfo.Utc, null, true)); sortedTZ.Add(new TimeZoneInfoItem("Zulu", TimeZoneInfo.Utc, null, true)); sortedTZ.Add(new TimeZoneInfoItem("MET", sortedTZ.First(t => t.PhpName == "Europe/Rome").Info, null, true)); sortedTZ.Add(new TimeZoneInfoItem("WET", sortedTZ.First(t => t.PhpName == "Europe/Berlin").Info, null, true)); //{ "PRC" //{ "ROC" //{ "ROK" // W-SU = //{ "Poland" //{ "Portugal" //{ "PRC" //{ "ROC" //{ "ROK" //{ "Singapore" = Asia/Singapore //{ "Turkey" // return sortedTZ.ToArray(); } private static IEnumerable/*!!*/InitialTimeZones_Windows() { Debug.Assert(EnvironmentUtils.IsWindows); // time zone cache: var tzcache = new Dictionary(128, StringComparer.OrdinalIgnoreCase); Func cachelookup = (id) => { TimeZoneInfo tz; if (!tzcache.TryGetValue(id, out tz)) { TimeZoneInfo winTZ = null; try { winTZ = TimeZoneInfo.FindSystemTimeZoneById(id); } catch { } tzcache[id] = tz = winTZ; // null in case "id" is not defined in Windows registry (probably missing Windows Update) } return tz; }; // collect php time zone names and match them with Windows TZ IDs: var tzdoc = new XmlDocument(); tzdoc.LoadXml(Strings.WindowsTZ); foreach (XmlNode tz in tzdoc.DocumentElement.SelectNodes(@"//windowsZones/mapTimezones/mapZone")) { // // @other = Windows TZ ID // @type = PHP TZ names, separated by space var windowsId = tz.Attributes["other"].Value; var phpIds = tz.Attributes["type"].Value; var windowsTZ = cachelookup(windowsId); if (windowsTZ != null) // TZ not defined in Windows registry, ignore such time zone // TODO: show a warning foreach (var phpTzName in phpIds.Split(' ')) { Debug.Assert(!string.IsNullOrWhiteSpace(phpTzName)); bool isAlias = !phpTzName.Contains('/') || phpTzName.Contains("GMT"); // whether to display such tz within timezone_identifiers_list() yield return new TimeZoneInfoItem(phpTzName, windowsTZ, null, isAlias); } } // //{ "US/Alaska" //{ "US/Aleutian" //{ "US/Arizona" yield return new TimeZoneInfoItem("US/Central", cachelookup("Central Standard Time"), null, true); //{ "US/East-Indiana" //{ "US/Eastern" yield return new TimeZoneInfoItem("US/Hawaii", cachelookup("Hawaiian Standard Time"), null, true); //{ "US/Indiana-Starke" //{ "US/Michigan" //{ "US/Mountain" //{ "US/Pacific" //{ "US/Pacific-New" //{ "US/Samoa" } private static IEnumerable/*!!*/InitialTimeZones_Mono() { Debug.Assert(!EnvironmentUtils.IsDotNetFramework); var tzns = TimeZoneInfo.GetSystemTimeZones(); if (tzns == null) yield break; foreach (var x in tzns) { bool isAlias = !x.Id.Contains('/') || x.Id.Contains("GMT"); // whether to display such tz within timezone_identifiers_list() yield return new TimeZoneInfoItem(x.Id, x, null, isAlias); } } #endregion /// /// Gets the current time zone for PHP date-time library functions. Associated with the current thread. /// /// It returns the time zone set by date_default_timezone_set PHP function. /// If no time zone was set, the time zone is determined in following order: /// 1. the time zone set in configuration /// 2. the time zone of the current system /// 3. default UTC time zone public static TimeZoneInfo CurrentTimeZone { get { TimeZoneInfo info; var ctx = ScriptContext.CurrentContext; // timezone is set by date_default_timezone_set(), return this one if (ctx.Properties.TryGetProperty(out info) == false || info == null) { // default timezone was not set, use & cache the current timezone info = ctx.Properties .GetOrCreateProperty(() => new CurrentTimeZoneCache()) .TimeZone; } // return info; } #if DEBUG // for unit tests only internal set { ScriptContext.CurrentContext.Properties.SetProperty(value); } #endif } #region CurrentTimeZoneCache /// /// Cache of current TimeZone with auto-update ability. /// private class CurrentTimeZoneCache { public CurrentTimeZoneCache() { } #if DEBUG internal CurrentTimeZoneCache(TimeZoneInfo timezone) { this._timeZone = timezone; this._changedFunc = (_) => false; } #endif /// /// Get the TimeZone set by the current process. Depends on environment variable, or local configuration, or system time zone. /// public TimeZoneInfo TimeZone { get { if (_timeZone == null || _changedFunc == null || _changedFunc(_timeZone) == true) _timeZone = DetermineTimeZone(out _changedFunc); // get the current timezone, update the function that determines, if the timezone has to be rechecked. return _timeZone; } } private TimeZoneInfo _timeZone; /// /// Function that determines if the current timezone should be rechecked. /// private Func _changedFunc; /// /// Finds out the time zone in the way how PHP does. /// private static TimeZoneInfo DetermineTimeZone(out Func changedFunc) { TimeZoneInfo result; // check environment variable: #if !SILVERLIGHT string env_tz = Environment.GetEnvironmentVariable(EnvVariableName); if (!String.IsNullOrEmpty(env_tz)) { result = GetTimeZone(env_tz); if (result != null) { // recheck the timezone only if the environment variable changes changedFunc = (timezone) => !String.Equals(timezone.StandardName, Environment.GetEnvironmentVariable(EnvVariableName), StringComparison.OrdinalIgnoreCase); // return the timezone set in environment return result; } PhpException.Throw(PhpError.Notice, LibResources.GetString("unknown_timezone_env", env_tz)); } #endif // check configuration: LibraryConfiguration config = LibraryConfiguration.Local; if (config.Date.TimeZone != null) { // recheck the timezone only if the local configuration changes, ignore the environment variable from this point at all changedFunc = (timezone) => LibraryConfiguration.Local.Date.TimeZone != timezone; return config.Date.TimeZone; } // convert current system time zone to PHP zone: result = SystemToPhpTimeZone(TimeZoneInfo.Local); // UTC: if (result == null) result = DateTimeUtils.UtcTimeZone;// GetTimeZone("UTC"); PhpException.Throw(PhpError.Strict, LibResources.GetString("using_implicit_timezone", result.Id)); // recheck the timezone when the TimeZone in local configuration is set changedFunc = (timezone) => LibraryConfiguration.Local.Date.TimeZone != null; return result; } } #endregion #if !SILVERLIGHT /// /// Gets/sets/resets legacy configuration setting "date.timezone". /// internal static object GsrTimeZone(LibraryConfiguration/*!*/ local, LibraryConfiguration/*!*/ @default, object value, IniAction action) { string result = (local.Date.TimeZone != null) ? local.Date.TimeZone.StandardName : null; switch (action) { case IniAction.Set: { string name = Core.Convert.ObjectToString(value); TimeZoneInfo zone = GetTimeZone(name); if (zone == null) { PhpException.Throw(PhpError.Warning, LibResources.GetString("unknown_timezone", name)); } else { local.Date.TimeZone = zone; } break; } case IniAction.Restore: local.Date.TimeZone = @default.Date.TimeZone; break; } return result; } #endif /// /// Gets an instance of corresponding to specified PHP name for time zone. /// /// PHP time zone name. /// The time zone or a null reference. public static TimeZoneInfo GetTimeZone(string/*!*/ phpName) { if (string.IsNullOrEmpty(phpName)) return null; // simple binary search (not the Array.BinarySearch) var timezones = PhpTimeZone.timezones; int a = 0, b = timezones.Length - 1; while (a <= b) { int x = (a + b) >> 1; int comparison = StringComparer.OrdinalIgnoreCase.Compare(timezones[x].PhpName, phpName); if (comparison == 0) return timezones[x].Info; if (comparison < 0) a = x + 1; else //if (comparison > 0) b = x - 1; } return null; } /// /// Tries to match given to our fixed . /// private static TimeZoneInfo SystemToPhpTimeZone(TimeZoneInfo systemTimeZone) { if (systemTimeZone == null) return null; var tzns = timezones; for (int i = 0; i < tzns.Length; i++) { var tz = tzns[i].Info; if (tz != null && tz.DisplayName.EqualsOrdinalIgnoreCase(systemTimeZone.DisplayName) && tz.HasSameRules(systemTimeZone)) return tz; } return null; } #region date_default_timezone_get, date_default_timezone_set [ImplementsFunction("date_default_timezone_set")] public static bool SetCurrentTimeZone(string zoneName) { var zone = GetTimeZone(zoneName); if (zone == null) { PhpException.Throw(PhpError.Notice, LibResources.GetString("unknown_timezone", zoneName)); return false; } ScriptContext.CurrentContext.Properties.SetProperty(zone); return true; } [ImplementsFunction("date_default_timezone_get")] public static string GetCurrentTimeZone() { var timezone = CurrentTimeZone; return (timezone != null) ? timezone.Id : null; } #endregion #region timezone_identifiers_list, timezone_version_get [ImplementsFunction("timezone_identifiers_list")] public static PhpArray IdentifierList() { var timezones = PhpTimeZone.timezones; // copy names to PHP array: var array = new PhpArray(timezones.Length); for (int i = 0; i < timezones.Length; i++) if (!timezones[i].IsAlias) array.AddToEnd(timezones[i].PhpName); // return array; } /// /// Gets the version of used the time zone database. /// [ImplementsFunction("timezone_version_get")] public static string GetTZVersion() { try { using (var reg = Microsoft.Win32.Registry.LocalMachine.CreateSubKey(@"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones")) return reg.GetValue("TzVersion", 0).ToString() + ".system"; } catch { } // no windows update installed return "0.system"; } #endregion #region timezone_open, timezone_offset_get /// /// Alias of new /// [ImplementsFunction("timezone_open")] [return: CastToFalse] public static object TimeZoneOpen(ScriptContext/*!*/context, string timezone) { var tz = GetTimeZone(timezone); if (tz == null) return null; return new DateTimeZone(context, tz); } /// /// Alias of /// [ImplementsFunction("timezone_offset_get")] [return: CastToFalse] public static int TimeZoneOffsetGet(ScriptContext context, DateTimeZone timezone, __PHP__DateTime datetime) { if (timezone == null) return -1; var result = timezone.getOffset(context, datetime); if (result == null) return -1; return PHP.Core.Convert.ObjectToInteger(timezone.getOffset(context, datetime)); } [ImplementsFunction("timezone_transitions_get")] [return: CastToFalse] public static PhpArray TimeZoneGetTransitions(ScriptContext context, DateTimeZone timezone) { if (timezone == null) return null; return (PhpArray)timezone.getTransitions(context, Arg.Default, Arg.Default); } #endregion } } ================================================ FILE: Source/ClassLibrary/DebugTests.CLR.cs ================================================ /* Copyright (c) 2004-2006 Tomas Matousek. The use and distribution terms for this software are contained in the file named License.txt, which can be found in the root of the Phalanger distribution. By using this software in any fashion, you are agreeing to be bound by the terms of this license. You must not remove this notice from this software. */ using System; using System.Text; using System.IO; using System.Threading; using System.Diagnostics.SymbolStore; using System.Collections.Specialized; using System.Collections.Generic; using System.Reflection; using System.Collections; using System.Windows.Forms; using System.Diagnostics; using PHP.Core; using PHP.Core.Reflection; using System.Web; using System.Web.SessionState; namespace PHP.Library { #if DEBUG /// public static class PhpDocumentation { private static bool FunctionsCallback(MethodInfo method, ImplementsFunctionAttribute ifa, object result) { if ((ifa.Options & FunctionImplOptions.Internal) == 0 && (ifa.Options & FunctionImplOptions.NotSupported) == 0) { PhpArray array = (PhpArray)result; ((PhpArray)array["name"]).Add(ifa.Name); ((PhpArray)array["type"]).Add(method.DeclaringType.FullName); ((PhpArray)array["method"]).Add(method.Name); } return true; } private static bool TypesCallback(Type type, object result) { PhpArray array = (PhpArray)result; ((PhpArray)array["name"]).Add(type.FullName); ((PhpArray)array["interface"]).Add(type.IsInterface); return true; } private static bool ConstantsCallback(FieldInfo field, ImplementsConstantAttribute ica, object result) { PhpArray array = (PhpArray)result; ((PhpArray)array["name"]).Add(ica.Name); ((PhpArray)array["type"]).Add(field.DeclaringType.FullName); ((PhpArray)array["field"]).Add(field.Name); ((PhpArray)array["insensitive"]).Add(ica.CaseInsensitive); return true; } /// /// Prints documentation table for classes. /// [ImplementsFunction("phpnet_doc_functions", FunctionImplOptions.Internal)] public static PhpArray PrintFunctions() { PhpArray result = new PhpArray(); result.Add("name", new PhpArray()); result.Add("type", new PhpArray()); result.Add("method", new PhpArray()); Assembly assembly = typeof(PhpDocumentation).Assembly; //PhpLibraryModule.EnumerateFunctions(assembly, new PhpLibraryModule.FunctionsEnumCallback(FunctionsCallback), result); return result; } /// /// Prints documentation table for classes. /// [ImplementsFunction("phpnet_doc_types", FunctionImplOptions.Internal)] public static PhpArray PrintTypes() { PhpArray result = new PhpArray(); result.Add("name", new PhpArray()); result.Add("interface", new PhpArray()); Assembly assembly = typeof(PhpDocumentation).Assembly; //PhpLibraryModule.EnumerateTypes(assembly, new PhpLibraryModule.TypeEnumCallback(TypesCallback), result); return result; } /// /// Prints documentation table for classes. /// [ImplementsFunction("phpnet_doc_constants", FunctionImplOptions.Internal)] public static PhpArray PrintConstants() { PhpArray result = new PhpArray(); result.Add("name", new PhpArray()); result.Add("type", new PhpArray()); result.Add("field", new PhpArray()); result.Add("insensitive", new PhpArray()); Assembly assembly = typeof(PhpDocumentation).Assembly; //PhpLibraryModule.EnumerateConstants(assembly, new PhpLibraryModule.ConstantsEnumCallback(ConstantsCallback), result); return result; } } /// /// Functions used for debugging class library. /// /// public sealed class DebugTests { private DebugTests() { } [ImplementsFunction("__break", FunctionImplOptions.Internal)] public static void Break() { Debugger.Break(); } [ImplementsFunction("__ddump", FunctionImplOptions.Internal)] public static void DebugDump(object var) { StringWriter s = new StringWriter(); PhpVariable.Dump(s, var); Debug.WriteLine("DEBUG", s.ToString()); } [ImplementsFunction("__0", FunctionImplOptions.Internal)] public static void f0(PhpReference arg) { PhpVariable.Dump(arg.value); arg.value = "hello"; } [ImplementsFunction("__1", FunctionImplOptions.Internal)] public static void f1(params PhpReference[] args) { foreach (PhpReference arg in args) { PhpVariable.Dump(arg.value); arg.value = "hello"; } } [ImplementsFunction("__2", FunctionImplOptions.Internal)] public static void f2(params int[] args) { foreach (int arg in args) PhpVariable.Dump(arg); } [ImplementsFunction("__3", FunctionImplOptions.Internal)] public static void f3(params object[] args) { foreach (object arg in args) PhpVariable.Dump(arg); } [ImplementsFunction("__4", FunctionImplOptions.Internal)] public static void f4(params PhpArray[] args) { foreach (PhpArray arg in args) PhpVariable.Dump(arg); } [ImplementsFunction("__5", FunctionImplOptions.Internal)] public static void f5(params double[] args) { foreach (double arg in args) PhpVariable.Dump(arg); } [ImplementsFunction("__6", FunctionImplOptions.Internal)] public static void f6(ref PhpArray arg) { PhpVariable.Dump(arg); } [ImplementsFunction("__7", FunctionImplOptions.Internal)] public static void f7(params PhpArray[] args) { foreach (PhpArray arg in args) PhpVariable.Dump(arg); } [ImplementsFunction("__8", FunctionImplOptions.Internal)] [return: CastToFalse] public static string f8(PhpResource a, PhpResource b, PhpResource c) { return null; } [ImplementsFunction("__9", FunctionImplOptions.Internal)] [return: CastToFalse] public static int f9(PhpResource a) { return -1; } [ImplementsFunction("__readline", FunctionImplOptions.Internal)] public static string ReadLine() { return Console.ReadLine(); } [ImplementsFunction("__stacktrace", FunctionImplOptions.Internal)] public static string ClrStackTrace() { StackTrace trace = new StackTrace(true); StringBuilder sb = new StringBuilder(); for (int i = 0; i < trace.FrameCount; i++) { StackFrame frame = trace.GetFrame(i); MethodBase method = frame.GetMethod(); sb.AppendFormat("{0} {1} {2} {3} {4} {5}\n", (method != null) ? method.DeclaringType + "." + method.Name : "NULL", frame.GetFileName(), frame.GetFileLineNumber(), frame.GetFileColumnNumber(), frame.GetNativeOffset(), frame.GetILOffset()); } return sb.ToString(); } /// /// Gets an array of headers of the current HTTP request. /// [ImplementsFunction("__headers", FunctionImplOptions.Internal)] public static PhpArray GetHeaders() { PhpArray result = new PhpArray(); NameValueCollection headers = HttpContext.Current.Request.Headers; string[] keys = headers.AllKeys; for (int i = 0; i < keys.Length; i++) { string[] values = headers.GetValues(keys[i]); if (values.Length > 1) { PhpArray keys_array = new PhpArray(); for (int j = 0; j < values.Length; j++) { keys_array.Add(values[j]); } result.Add(keys[i], keys_array); } else { result.Add(keys[i], values[0]); } } return result; } [ImplementsFunction("__request_enc", FunctionImplOptions.Internal)] public static string GetRequestEncoding() { return HttpContext.Current.Request.ContentEncoding.EncodingName; } [ImplementsFunction("__response_enc", FunctionImplOptions.Internal)] public static string GetResponseEncoding() { return HttpContext.Current.Response.ContentEncoding.EncodingName; } [ImplementsFunction("__upper", FunctionImplOptions.Internal)] public static PhpBytes GetUpperBytes() { byte[] result = new byte[30]; for (int i = 0; i < result.Length; i++) result[i] = (byte)(i + 128); return new PhpBytes(result); } [ImplementsFunction("__throw", FunctionImplOptions.Internal)] public static PhpBytes __throw() { throw new ArgumentNullException("XXX", "Fake exception"); } [ImplementsFunction("__dump_transient", FunctionImplOptions.Internal)] public static void __dump_transient() { DynamicCode.Dump(ScriptContext.CurrentContext, ScriptContext.CurrentContext.Output); } [ImplementsFunction("__evalinfo", FunctionImplOptions.CaptureEvalInfo | FunctionImplOptions.Internal)] public static PhpArray __evalinfo() { ScriptContext context = ScriptContext.CurrentContext; return PhpArray.Keyed( "file", context.EvalRelativeSourcePath, "line", context.EvalLine, "column", context.EvalColumn); } [ImplementsFunction("__dump_session", FunctionImplOptions.Internal)] public static void __dump_session() { TextWriter o = ScriptContext.CurrentContext.Output; HttpContext context = HttpContext.Current; if (context == null) { o.WriteLine("HTTP CONTEXT NULL"); return; } HttpSessionState state = context.Session; if (context == null) { o.WriteLine("SESSION NULL"); return; } PhpArray a = new PhpArray(); foreach (string name in state) { a[name] = state[name]; } PhpVariable.Dump(o, a); } [ImplementsFunction("__dump_fdecls", FunctionImplOptions.Internal)] public static PhpArray __dump_fdecls() { PhpArray result = new PhpArray(); foreach (KeyValuePair entry in ScriptContext.CurrentContext.DeclaredFunctions) { result.Add(entry.Key, entry.Value.MakeFullName()); } return result; } [ImplementsFunction("__type", FunctionImplOptions.Internal)] public static string PhpNetType(object o) { return o == null ? "null" : o.GetType().FullName; } [ImplementsFunction("__assemblies", FunctionImplOptions.Internal)] public static PhpArray GetAssemblies() { PhpArray result = new PhpArray(); foreach (PhpLibraryAssembly a in ScriptContext.CurrentContext.ApplicationContext.GetLoadedLibraries()) result.Add(a.RealAssembly.FullName); return result; } [ImplementsFunction("__descriptors", FunctionImplOptions.Internal)] public static PhpArray GetDescriptors() { PhpArray result = new PhpArray(); foreach (PhpLibraryAssembly a in ScriptContext.CurrentContext.ApplicationContext.GetLoadedLibraries()) result.Add(a.Descriptor.GetType().FullName); return result; } public sealed class Remoter : MarshalByRefObject { public string[] GetLoadedAssemblies() { Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies(); string[] result = new string[assemblies.Length]; for (int i = 0; i < assemblies.Length; i++) result[i] = assemblies[i].FullName; return result; } public static Remoter CreateRemoteInstance(AppDomain domain) { Type t = typeof(Remoter); return (Remoter)domain.CreateInstanceAndUnwrap(t.Assembly.FullName, t.FullName); } } private static void AppDomainInfo(AppDomain domain, TextWriter output) { if (domain == null) return; output.WriteLine("

AppDomain info

");

			output.WriteLine("FriendlyName = {0}", domain.FriendlyName);
			output.WriteLine("ApplicationBase = {0}", domain.SetupInformation.ApplicationBase);
			output.WriteLine("ConfigurationFile = {0}", domain.SetupInformation.ConfigurationFile);
			output.WriteLine("DynamicBase = {0}", domain.SetupInformation.DynamicBase);
			output.WriteLine("PrivateBinPath = {0}", domain.SetupInformation.PrivateBinPath);
			output.WriteLine("CachePath = {0}", domain.SetupInformation.CachePath);
			output.WriteLine("ShadowCopyDirectories = {0}", domain.SetupInformation.ShadowCopyDirectories);
			output.WriteLine("ShadowCopyFiles = {0}", domain.SetupInformation.ShadowCopyFiles);

			if (domain == AppDomain.CurrentDomain)
			{
				foreach (Assembly assembly in domain.GetAssemblies())
					output.WriteLine("  Assembly: {0}", assembly.FullName);
			}
			else
			{
				foreach (string name in Remoter.CreateRemoteInstance(domain).GetLoadedAssemblies())
					output.WriteLine("  Assembly: {0}", name);
			}
		}

        [ImplementsFunction("__info", FunctionImplOptions.Internal)]
		public static void Info()
		{
			Info(ScriptContext.CurrentContext);
		}

		public static void Info(ScriptContext/*!*/ scriptContext)
		{
			TextWriter output = scriptContext.Output;
			HttpContext ctx = HttpContext.Current;

			output.WriteLine("

Phalanger debug info:

");

			output.WriteLine("

HttpRuntime

");

			output.WriteLine("AppDomainAppId = {0}", HttpRuntime.AppDomainAppId);
			output.WriteLine("AppDomainAppPath = {0}", HttpRuntime.AppDomainAppPath);
			output.WriteLine("AppDomainAppVirtualPath = {0}", HttpRuntime.AppDomainAppVirtualPath);
			output.WriteLine("AppDomainId = {0}", HttpRuntime.AppDomainId);
			output.WriteLine("AspInstallDirectory = {0}", HttpRuntime.AspInstallDirectory);
			output.WriteLine("BinDirectory = {0}", HttpRuntime.BinDirectory);
			output.WriteLine("ClrInstallDirectory = {0}", HttpRuntime.ClrInstallDirectory);
			try
			{
				output.WriteLine("CodegenDir = {0}", HttpRuntime.CodegenDir);
			}
			catch (Exception)
			{
				output.WriteLine("CodegenDir = N/A");
			}
			output.WriteLine("MachineConfigurationDirectory = {0}", HttpRuntime.MachineConfigurationDirectory);

			output.WriteLine("

Worker Process

");

			output.Write("Worker processes: ");
			if (ctx != null)
			{
				foreach (ProcessInfo pi in ProcessModelInfo.GetHistory(20))
					output.Write(pi.ProcessID + ";");
				output.WriteLine();

				output.WriteLine("Current Worker Process start time: {0}", ProcessModelInfo.GetCurrentProcessInfo().StartTime);
			}
			else
			{
				output.WriteLine("N/A");
			}

			Process proc = Process.GetCurrentProcess();
			output.WriteLine("Current process: Id = {0}", proc.Id);
			output.WriteLine("Current PrivateMemorySize: {0} MB", proc.PrivateMemorySize64 / (1024 * 1024));
			output.WriteLine("Current WorkingSet: {0} MB", proc.WorkingSet64 / (1024 * 1024));
			output.WriteLine("Current VirtualMemorySize: {0} MB", proc.VirtualMemorySize64 / (1024 * 1024));
			output.WriteLine("Current thread: HashCode = {0}", Thread.CurrentThread.GetHashCode());
			output.WriteLine("Current domain: {0}", Thread.GetDomain().FriendlyName);

			AppDomainInfo(AppDomain.CurrentDomain, output);
			if (ctx != null) AppDomainInfo(AppDomain.CurrentDomain, output);

			output.WriteLine("

Libraries

");

			foreach (PhpLibraryAssembly a in scriptContext.ApplicationContext.GetLoadedLibraries())
				a.Descriptor.Dump(output);

			//output.WriteLine("

Invalidated Precompiled Scripts

");
			//foreach (string item in WebServerManagersDebug.GetInvalidatedScripts())
			//  output.WriteLine(item);

			output.WriteLine("

Cache

");
			foreach (DictionaryEntry item in HttpRuntime.Cache)
				if (item.Value is string)
					output.WriteLine("{0} => '{1}'", item.Key, item.Value);
				else
					output.WriteLine("{0} => instance of {1}", item.Key, item.Value.GetType().FullName);

			if (ctx != null)
			{
				output.WriteLine("

Query Variables

");
				String[] keys;
				keys = ctx.Request.QueryString.AllKeys;
				for (int i = 0; i < keys.Length; i++)
					output.WriteLine("{0} = \"{1}\"", keys[i], ctx.Request.QueryString.GetValues(keys[i])[0]);

				if (ctx.Session != null)
				{
					output.WriteLine("

Session Variables

");

					output.WriteLine("IsCookieless = {0}", ctx.Session.IsCookieless);
					output.WriteLine("IsNewSession = {0}", ctx.Session.IsNewSession);
					output.WriteLine("SessionID = {0}", ctx.Session.SessionID);

					foreach (string name in ctx.Session)
					{
						output.Write("{0} = ", name);
						PhpVariable.Dump(ctx.Session[name]);
					}
				}

				output.WriteLine("

Cookies

");
				foreach (string cookie_name in ctx.Request.Cookies)
				{
					HttpCookie cookie = ctx.Request.Cookies[cookie_name];
					Console.WriteLine("{0} = {1}", cookie.Name, cookie.Value);
				}

				output.WriteLine("

Server Variables

");

				keys = ctx.Request.ServerVariables.AllKeys;
				for (int i = 0; i < keys.Length; i++)
					output.WriteLine("{0} = \"{1}\"", keys[i], ctx.Request.ServerVariables.GetValues(keys[i])[0]);
			}
			else
			{
				output.WriteLine("

Missing HttpContext

");
			}

			output.WriteLine("
"); } } #endif } ================================================ FILE: Source/ClassLibrary/Doc/Arrays.xml ================================================ If the enumerator has been moved behind the last (or before the first) item of array it is blocked until or is called or a new item is added to the array. ================================================ FILE: Source/ClassLibrary/Doc/RootPage.html ================================================ Phalanger Class Library Reference
Phalanger Class Library Reference

Phalanger Class Library Reference

This section contains reference documentation of the public classes that constitute the Phalanger Class Library.

================================================ FILE: Source/ClassLibrary/Doc/Streams.xml ================================================  Processes the (either of type or ) data through this filter and returns the filtered data in one of these formats or null. A filter may hold data in its own buffers when it's unable to process whole the input. However, when closing is true, it should pass as much data as possible because it is the last call to Filter. A or containing the data to be filtered. true if this is the last call to this filter. A or containing the filtered data or null if no output is available yet. Appends a filter to the chain of stream-filters of the . The filter is attached to the read filter chain if the file was opened for reading (i.e. File Mode: r, and/or +); attached to the write filter chain if the file was opened for writing (i.e. File Mode: w, a, and/or +). The name of the filter - either built-in or previously defined using . The stream which filter-chain is to be extended with the . True if successful. Prepends a filter to the chain of stream-filters of the . The filter is attached to the read filter chain if the file was opened for reading (i.e. File Mode: r, and/or +); attached to the write filter chain if the file was opened for writing (i.e. File Mode: w, a, and/or +). The name of the filter - either built-in or previously defined using . The stream which filter-chain is to be extended with the . True if successful. ================================================ FILE: Source/ClassLibrary/Doc/Strings.xml ================================================ Adds backslashes before specified characters. The string to be processed. The list of characters to backslash. May contain intervals "a..b" where a, b are characters and a is less than or equal to b. The string in which all characters contained in list are backslashed and each backslashed character which isn't between '\u0032' and '\u007f' is converted in its octal representation (e.g. "\\123") except of '\a', '\b', '\f', '\n', '\r', '\t', '\v' characters which are converted into their string form (e.g. '\n' -> "\\n", '\t' -> "\\t" etc.). Converts a string from one Cyrillic character set to another. The string to convert. The source character set. Can be one of 'k', 'w', 'i', 'a', 'd', 'm'. The destination character set. Can be one of 'k', 'w', 'i', 'a', 'd', 'm'. The converted string. ================================================ FILE: Source/ClassLibrary/Doc/Variables.xml ================================================  A variable name can be used as it is or prefixed by according to (see the following table). Regardless which name is used (prefixed or not) it is always tested by method before the extraction is made. Value of the & The action taken If a variable doesn't exist yet it is created otherwise its value is overwritten. If a variable already exists it is skipped (its value is left untouched). Otherwise, a new variable is created. If a variable already exists its value is overwritten. Otherwise, the variable is skipped (i.e. no new variables are created). A variable name is prefixed and if a variable with that name doesn't exists it is created and, otherwise its value is overwritten. If a variable already exists its name is prefixed and a new variable with that name is created. Otherwise, the variable's value is overwritten. If a variable already exists its name is prefixed and a new variable with that name is created. Otherwise, the variable is skipped. Moreover, can be OR'ed by which causes that refereces preserved - if there is a reference in the target variable will be referencing the same thing. ================================================ FILE: Source/ClassLibrary/Errors.cs ================================================ /* Copyright (c) 2004-2006 Tomas Matousek. The use and distribution terms for this software are contained in the file named License.txt, which can be found in the root of the Phalanger distribution. By using this software in any fashion, you are agreeing to be bound by the terms of this license. You must not remove this notice from this software. */ using System; using System.Reflection; using System.Collections; using System.Text; using System.ComponentModel; using PHP.Core; using System.Diagnostics; #if SILVERLIGHT using PHP.CoreCLR; #endif namespace PHP.Library { /// /// Implementation of PHP error control functions. /// /// [ImplementsExtension(LibraryDescriptor.ExtCore)] public static class Errors { #region Enumerations /// /// Set of error types. /// [Flags, EditorBrowsable(EditorBrowsableState.Never)] public enum _PhpErrorSet { /// Error. [ImplementsConstant("E_ERROR")] E_ERROR = PhpError.Error, /// Warning. [ImplementsConstant("E_WARNING")] E_WARNING = PhpError.Warning, /// Parse error. [ImplementsConstant("E_PARSE")] E_PARSE = PhpError.ParseError, /// Notice. [ImplementsConstant("E_NOTICE")] E_NOTICE = PhpError.Notice, /// Core error. [ImplementsConstant("E_CORE_ERROR")] E_CORE_ERROR = PhpError.CoreError, /// Core warning. [ImplementsConstant("E_CORE_WARNING")] E_CORE_WARNING = PhpError.CoreWarning, /// Compile error. [ImplementsConstant("E_COMPILE_ERROR")] E_COMPILE_ERROR = PhpError.CompileError, /// Compile warning. [ImplementsConstant("E_COMPILE_WARNING")] E_COMPILE_WARNING = PhpError.CompileWarning, /// User error. [ImplementsConstant("E_USER_ERROR")] E_USER_ERROR = PhpError.UserError, /// User warning. [ImplementsConstant("E_USER_WARNING")] E_USER_WARNING = PhpError.UserWarning, /// User notice. [ImplementsConstant("E_USER_NOTICE")] E_USER_NOTICE = PhpError.UserNotice, /// All errors but strict. [ImplementsConstant("E_ALL")] E_ALL = PhpErrorSet.AllButStrict, /// Strict error. [ImplementsConstant("E_STRICT")] E_STRICT = PhpError.Strict, /// E_RECOVERABLE_ERROR error. [ImplementsConstant("E_RECOVERABLE_ERROR")] E_RECOVERABLE_ERROR = PhpError.RecoverableError, /// Deprecated error. [ImplementsConstant("E_DEPRECATED")] E_DEPRECATED = PhpError.Deprecated, /// Deprecated error. [ImplementsConstant("E_USER_DEPRECATED")] E_USER_DEPRECATED = PhpError.UserDeprecated, } /// /// An action performed by the method. /// public enum LogAction { /// /// A message to be logged is appended to log file or sent to system log depending on the /// current value of . /// Default, /// /// A message is sent by an e-mail. /// SendByEmail, /// /// Not supported. /// ToDebuggingConnection, /// /// A message is appended to a specified file. /// AppendToFile } #endregion #region error_log (CLR only) #if !SILVERLIGHT /// /// Logs a message to a log file or the system event log. /// /// The message to be logged. /// Whether the message has been logged successfully. [ImplementsFunction("error_log")] public static bool Log(string message) { return Log(message, 0); } /// /// Performs specific with a given message and default options. /// /// The message to be logged. /// The to be performed. /// Whether the message has been logged successfully. [ImplementsFunction("error_log")] public static bool Log(string message, LogAction action) { return Log(message, action, null, null); } /// /// Performs specific with a given message and name of the log file. /// /// The message to be logged. /// The name of the log file. /// The to be performed. /// Whether the message has been logged successfully. [ImplementsFunction("error_log")] public static bool Log(string message, LogAction action, string destination) { return Log(message, action, destination, null); } /// /// Performs specific with a given message, name of the log file and additional headers. /// /// The message to be logged. /// The name of the log file. /// Additional headers which are sent along the e-mail. /// The to be performed. /// Whether the message has been logged successfully. [ImplementsFunction("error_log")] public static bool Log(string message, LogAction action, string destination, string extraHeaders) { switch (action) { case LogAction.Default: bool result = true; LocalConfiguration config = Configuration.Local; // adds a message to the default log file: if (config.ErrorControl.LogFile != null) try { Logger.AppendLine(config.ErrorControl.LogFile, message); } catch (System.Exception) { result = false; } // adds a message to an event log: if (config.ErrorControl.SysLog) try { Logger.AddToEventLog(message); } catch (System.Exception) { result = false; } return result; case LogAction.SendByEmail: Mailer.Mail(destination, LibResources.GetString("error_report"), message, extraHeaders); return true; case LogAction.ToDebuggingConnection: PhpException.ArgumentValueNotSupported("action", (int)action); return false; case LogAction.AppendToFile: try { PHP.Core.Logger.AppendLine(destination, message); } catch (System.Exception) { return false; } return true; default: PhpException.InvalidArgument("action"); return false; } } #endif #endregion #region error_get_last [ImplementsFunction("error_get_last")] public static PhpArray GetLastError(ScriptContext/*!*/context) { Debug.Assert(context != null); if (context.LastErrorType != 0) { PhpArray result = new PhpArray(0, 5); result.Add("type", (int)context.LastErrorType); result.Add("message", context.LastErrorMessage); result.Add("file", context.LastErrorFile); result.Add("line", context.LastErrorLine); //result.Add("column", context.LastErrorColumn); return result; } return null; } #endregion #region trigger_error, user_error /// /// Triggers user notice with a specified message. /// /// The message. [ImplementsFunction("trigger_error")] public static bool TriggerError(string message) { PhpException.Throw(PhpError.UserNotice, message); return true; } /// /// Triggers user error of an arbitrary type and specified message. /// /// The message. /// The type of an error. The type should be one of the user error types. /// User specified error. /// The argument has an invalid value. [ImplementsFunction("trigger_error")] public static bool TriggerError(string message, PhpError error) { if (((PhpErrorSet)error & PhpErrorSet.User) == 0) return false;// PhpException.InvalidArgument("error"); PhpException.Throw(error, message); return true; } /// /// Alias of trigger_error(). /// /// The message. [ImplementsFunction("user_error")] public static bool UserError(string message) { PhpException.Throw(PhpError.UserNotice, message); return true; } /// /// Alias of trigger_error(). /// /// The message. /// The type of an error. The type should be one of the user error types. /// User specified error. /// The argument has an invalid value. [ImplementsFunction("user_error")] public static bool UserError(string message, PhpError error) { if (((PhpErrorSet)error & PhpErrorSet.User) == 0) return false;// PhpException.InvalidArgument("error"); return TriggerError(message, error); } #endregion #region debug_backtrace, debug_print_backtrace /// /// Returns array containing current stack state. Each item is an array representing one stack frame. /// /// The stack trace. /// /// The resulting array contains the following items (their keys are stated): /// /// "file" - a source file where the function/method has been called /// "line" - a line in a source code where the function/method has been called /// "column" - a column in a source code where the function/method has been called /// "function" - a name of the function/method /// "class" - a name of a class where the method is declared (if any) /// "object" - an object which metod has been called /// "type" - either "::" for static methods or "->" for instance methods /// /// PHP adds one more item - "args" containing values of arguments and object which metod has been called. This is not supported. /// [ImplementsFunction("debug_backtrace")] public static PhpArray Backtrace() { return new PhpStackTrace(ScriptContext.CurrentContext, 1).GetUserTrace(); } /// /// Returns array containing current stack state. Each item is an array representing one stack frame. /// /// The stack trace. /// /// The resulting array contains the following items (their keys are stated): /// /// "file" - a source file where the function/method has been called /// "line" - a line in a source code where the function/method has been called /// "column" - a column in a source code where the function/method has been called /// "function" - a name of the function/method /// "class" - a name of a class where the method is declared (if any) /// "object" - an object which metod has been called /// "type" - either "::" for static methods or "->" for instance methods /// /// PHP adds two more item - "args" containing values of arguments and object which metod has been called. This is not supported. /// /// Recipient e-mail address. /// has an invalid or unsupported value. (Warning) [ImplementsFunction("debug_backtrace")] public static PhpArray Backtrace(bool provideObject) { if (provideObject == true) PhpException.ArgumentValueNotSupported("provideObject", provideObject); return Backtrace(); } /// /// Prints string representation of the stack trace. /// No value is returned. /// [ImplementsFunction("debug_print_backtrace")] public static void PrintBacktrace() { ScriptContext context = ScriptContext.CurrentContext; context.Output.Write(new PhpStackTrace(context, 1).FormatUserTrace()); } /// /// Prints string representation of the stack trace. /// No value is returned. /// [ImplementsFunction("debug_print_backtrace")] public static void PrintBacktrace(bool provideObject) { if (provideObject == true) PhpException.ArgumentValueNotSupported("provideObject", provideObject); ScriptContext context = ScriptContext.CurrentContext; context.Output.Write(new PhpStackTrace(context, 1).FormatUserTrace()); } #endregion } #region NS: PhpLogger /* /// /// Not supported. /// /// [EditorBrowsable(EditorBrowsableState.Never)] public sealed class PhpLogger { /// Prevents from creating instances of this class. private PhpLogger() { } /// /// Not supported. /// public enum Facility { [ImplementsConstant("LOG_KERN")] Kern = 0, [ImplementsConstant("LOG_USER")] User = 8, [ImplementsConstant("LOG_MAIL")] Mail = 16, [ImplementsConstant("LOG_DAEMON")] Daemon = 24, [ImplementsConstant("LOG_AUTH")] Auth = 32, [ImplementsConstant("LOG_SYSLOG")] SysLog = 40, [ImplementsConstant("LOG_LPR")] Lpr = 48, [ImplementsConstant("LOG_NEWS")] News = 56, [ImplementsConstant("LOG_UUCP")] Uucp = 64, [ImplementsConstant("LOG_CRON")] Cron = 72, [ImplementsConstant("LOG_AUTHPRIV")] AuthPriv = 80 } /// /// Not supported. /// public enum Options { [ImplementsConstant("LOG_PID")] PID = 1, [ImplementsConstant("LOG_CONS")] Console = 2, [ImplementsConstant("LOG_ODELAY")] Delay = 4, [ImplementsConstant("LOG_NDELAY")] NoDelay = 8, [ImplementsConstant("LOG_NOWAIT")] NoWait = 16, [ImplementsConstant("LOG_PERROR")] PrintError = 32, } /// /// Not supported. /// public enum Priority { [ImplementsConstant("LOG_EMERG")] Emergency = 1, [ImplementsConstant("LOG_ALERT")] Alert = 1, [ImplementsConstant("LOG_CRIT")] Critical = 1, [ImplementsConstant("LOG_ERR")] Error = 4, [ImplementsConstant("LOG_WARNING")] Warning = 5, [ImplementsConstant("LOG_NOTICE")] Notice = 6, [ImplementsConstant("LOG_INFO")] Info = 6, [ImplementsConstant("LOG_DEBUG")] Debug = 6 } /// /// Not supported. /// [ImplementsFunction("closelog")] public static int CloseLog() { return 0; } /// /// Not supported. /// [ImplementsFunction("define_syslog_variables",FunctionImplOptions.NotSupported)] [EditorBrowsable(EditorBrowsableState.Never)] public static void DefineSyslogVariables() { PhpException.FunctionNotSupported(); } /// /// Not supported. /// [ImplementsFunction("openlog",FunctionImplOptions.NotSupported)] [EditorBrowsable(EditorBrowsableState.Never)] public static int OpenLog(string prefix,Options option,Facility facility) { PhpException.FunctionNotSupported(); return 0; } /// /// Not supported. /// [ImplementsFunction("syslog",FunctionImplOptions.NotSupported)] [EditorBrowsable(EditorBrowsableState.Never)] public static int SysLog(Priority priority,string message) { PhpException.FunctionNotSupported(); return 0; } } */ #endregion } ================================================ FILE: Source/ClassLibrary/FileSystem.CLR.cs ================================================ /* Copyright (c) 2004-2006 Jan Benda and Tomas Matousek. The use and distribution terms for this software are contained in the file named License.txt, which can be found in the root of the Phalanger distribution. By using this software in any fashion, you are agreeing to be bound by the terms of this license. You must not remove this notice from this software. TODO: - Added support for LOCK_EX flag for file_put_contents(). (PHP 5.1.0) - Added lchown() and lchgrp() to change user/group ownership of symlinks. (PHP 5.1.3) - Fixed safe_mode check for source argument of the copy() function. (PHP 5.1.3) */ using System; using System.IO; using System.Text; using System.Threading; using System.Collections; using System.ComponentModel; using System.Runtime.Serialization; using System.Runtime.CompilerServices; using PHP.Core; using System.Security.AccessControl; using System.Security.Principal; #if SILVERLIGHT using PHP.CoreCLR; #endif namespace PHP.Library { /// /// Provides PHP I/O operations using the set of StreamWrappers. /// /// public static partial class PhpFile { #region Constructors and Thread Static Stuff /// The most recent stat() result (stat() of the file). [ThreadStatic] private static StatStruct statCache; /// The absolute path of the last stat() operation. [ThreadStatic] private static string statCacheUrl = null; private static void Clear() { statCache = new StatStruct(); statCacheUrl = null; } #endregion #region Stat Basics (BuildStatArray, StatInternal, lstat, stat, fstat, clearstatcache; exists, touch) /// /// Creates a from the /// copying the structure members into the array. /// /// /// The resulting PhpArray has following associative keys in the given order /// (each has a corresponding numeric index starting from zero). /// As of ordering, first come all the numeric indexes and then come all the associative indexes. /// /// devDrive number of the disk containing the file (same as st_rdev). /// inoNumber of the information node (the inode) for the file (UNIX-specific). On UNIX file systems, the inode describes the file date and time stamps, permissions, and content. When files are hard-linked to one another, they share the same inode. The inode, and therefore st_ino, has no meaning in the FAT, HPFS, or NTFS file systems. /// modeBit mask for file-mode information. The _S_IFDIR bit is set if path specifies a directory; the _S_IFREG bit is set if path specifies an ordinary file or a device. User read/write bits are set according to the file's permission mode; user execute bits are set according to the path extension. /// nlinkAlways 1 on non-NTFS file systems. /// uidNumeric identifier of user who owns file (UNIX-specific). This field will always be zero on Windows NT systems. A redirected file is classified as a Windows NT file. /// gidNumeric identifier of group that owns file (UNIX-specific) This field will always be zero on Windows NT systems. A redirected file is classified as a Windows NT file. /// rdevDrive number of the disk containing the file (same as st_dev). /// sizeSize of the file in bytes; a 64-bit integer for _stati64 and _wstati64 /// atimeTime of last access of file. Valid on NTFS but not on FAT formatted disk drives. Gives the same /// mtimeTime of last modification of file. /// ctimeTime of creation of file. Valid on NTFS but not on FAT formatted disk drives. /// blksizeAlways -1 on non-NTFS file systems. /// blocksAlways -1 on non-NTFS file systems. /// /// /// A returned by a stream wrapper. /// A in the format of the stat() PHP function. internal static PhpArray BuildStatArray(StatStruct stat) { // An unitialized StatStruct means an error. if (stat.st_ctime == 0) return null; PhpArray result = new PhpArray(13, 13); result.Add(0, (int)stat.st_dev); // device number result.Add(1, (int)stat.st_ino); // inode number result.Add(2, (int)stat.st_mode); // inode protection mode result.Add(3, (int)stat.st_nlink); // number of links result.Add(4, (int)stat.st_uid); // userid of owner result.Add(5, (int)stat.st_gid); // groupid of owner result.Add(6, (int)stat.st_rdev); // device type, if inode device -1 result.Add(7, (int)stat.st_size); // size in bytes (reset by caller) result.Add(8, unchecked((int)stat.st_atime)); // time of last access (unix timestamp) result.Add(9, unchecked((int)stat.st_mtime)); // time of last modification (unix timestamp) result.Add(10, unchecked((int)stat.st_ctime)); // time of last change (unix timestamp) result.Add(11, (int)-1); // blocksize of filesystem IO (-1) result.Add(12, (int)-1); // number of blocks allocated (-1) result.Add("dev", (int)stat.st_dev); // device number result.Add("ino", (int)stat.st_ino); // inode number result.Add("mode", (int)stat.st_mode); // inode protection mode result.Add("nlink", (int)stat.st_nlink); // number of links result.Add("uid", (int)stat.st_uid); // userid of owner result.Add("gid", (int)stat.st_gid); // groupid of owner result.Add("rdev", (int)stat.st_rdev); // device type, if inode device -1 result.Add("size", (int)stat.st_size); // size in bytes (reset by caller) result.Add("atime", unchecked((int)stat.st_atime)); // time of last access (unix timestamp) result.Add("mtime", unchecked((int)stat.st_mtime)); // time of last modification (unix timestamp) result.Add("ctime", unchecked((int)stat.st_ctime)); // time of last change (unix timestamp) result.Add("blksize", (int)-1); // blocksize of filesystem IO (-1) result.Add("blocks", (int)-1); // number of blocks allocated (-1) return result; } /// /// Check StatInternal input parameters. /// /// The path passed to stat(). /// Wheter to suppress warning message if argument is empty. /// If passed, it will contain valid StremWrapper to the given . /// True if check passed. private static bool StatInternalCheck(ref string path, bool quiet, out StreamWrapper wrapper) { wrapper = null; if (String.IsNullOrEmpty(path)) { PhpException.Throw(PhpError.Warning, LibResources.GetString("arg:empty", "path")); return false; } CheckAccessOptions options = CheckAccessOptions.Empty; if (quiet) options |= CheckAccessOptions.Quiet; if (!PhpStream.ResolvePath(ref path, out wrapper, CheckAccessMode.FileOrDirectory, options)) return false; // check passed return true; } /// /// Check the cache for given . /// /// Path to lookup in the cache. /// Url of . /// True if given is in the cache currently. private static bool StatInternalTryCache(string path, out string url) { // Try to hit the cache first url = PhpPath.GetUrl(path); return (url == statCacheUrl); } /// /// Stat the path coming from ResolvePath (file:// wrapper expects path w/o the scheme). /// /// /// /// /// /// True if stat was successfuly added into cache. private static bool StatInternalStat(string path, string url, StreamWrapper wrapper, bool quiet) { StatStruct stat = wrapper.Stat(path, quiet ? StreamStatOptions.Quiet : StreamStatOptions.Empty, StreamContext.Default, false); if (stat.st_size >= 0) { statCacheUrl = url; statCache = stat; return true; } else return false; } /// /// Stat the given file or directory using stream-wrappers and return the stat structure /// using the stat-cache for repetitive calls. /// /// The path (absolute or relative or an URL) to the file or directory to stat. /// true to suppress the display of error messages (for example for exists()). /// true if the contains a valid /// stat structure for the given URL, false on an error. internal static bool StatInternal(string path, bool quiet) { StreamWrapper wrapper; if (StatInternalCheck(ref path, quiet, out wrapper)) { string url; if (StatInternalTryCache(path, out url)) return true; return StatInternalStat(path, url, wrapper, quiet); } return false; } /// /// Gives information about a file or symbolic link. /// /// /// Behaves just like a since there are no symbolic links on Windows. /// /// Path to a file to stat. /// A containing the stat information. [ImplementsFunction("lstat")] [return: CastToFalse] public static PhpArray LinkStat(string path) { return Stat(path); } /// /// Gives information about a file. /// /// Path to a file to stat. /// A containing the stat information. [ImplementsFunction("stat")] [return: CastToFalse] public static PhpArray Stat(string path) { if (StatInternal(path, false)) { return BuildStatArray(statCache); } return null; } /// /// Gets information about a file using an open file pointer. /// /// /// [ImplementsFunction("fstat")] public static PhpArray Stat(PhpResource handle) { // Note: no cache here. PhpStream stream = PhpStream.GetValid(handle); if (stream == null) return null; return BuildStatArray(stream.Stat()); } /// /// Remove all the cached stat() entries. /// Function has no return value. /// /// /// The intermediary used in the last stat-related function call /// is cached together with the absolute path or URL to the resource. /// The next call to one of the following functions will use the cached /// structure unless is called. /// /// The affected functions are: /// stat(), lstat(), file_exists(), is_writable(), is_readable(), /// is_executable(), is_file(), is_dir(), is_link(), filectime(), /// fileatime(), filemtime(), fileinode(), filegroup(), fileowner(), /// filesize(), filetype() and fileperms(). /// /// [ImplementsFunction("clearstatcache")] public static void ClearStatCache() { Clear(); } [ImplementsFunction("clearstatcache")] public static void ClearStatCache( bool clear_realpath_cache ) { Clear(); // note: arguments ignored, Phalanger does not cache a lot, caches of .NET and OS are used transparently } [ImplementsFunction("clearstatcache")] public static void ClearStatCache(bool clear_realpath_cache, string filename ) { if (!string.IsNullOrEmpty(filename) && !clear_realpath_cache) { // TODO: throw warning } Clear(); // note: arguments ignored, Phalanger does not cache a lot, caches of .NET and OS are used transparently } /// /// Checks whether a file exists /// /// The file to be checked. /// True if the file exists. [ImplementsFunction("file_exists")] public static bool Exists(string path) { if (String.IsNullOrEmpty(path)) return false; StreamWrapper wrapper; if (StatInternalCheck(ref path, true, out wrapper)) { string url; if (StatInternalTryCache(path, out url)) return true; // we can't just call {Directory|File}.Exists since we have to throw warnings // also we are not calling full stat(), it is slow return FileStreamWrapper.HandleNewFileSystemInfo(false, path, (p) => new FileInfo(p).Exists || new DirectoryInfo(p).Exists); } return false; } /// /// Sets access and modification time of file. /// /// The file to touch. /// true on success, false on failure. [ImplementsFunction("touch")] public static bool Touch(string path) { return Touch(path, 0, 0); } /// /// Sets access and modification time of file. /// /// The file to touch. /// The new modification time. /// true on success, false on failure. [ImplementsFunction("touch")] public static bool Touch(string path, int mtime) { return Touch(path, mtime, 0); } /// /// Sets access and modification time of file. /// /// /// Attempts to set the access and modification time of the file named by /// path to the value given by time. If the option time is not given, /// uses the present time. If the third option atime is present, the access /// time of the given path is set to the value of atime. Note that /// the access time is always modified, regardless of the number of parameters. /// If the file does not exist, it is created. /// /// The file to touch. /// The new modification time. /// The desired access time. /// true on success, false on failure. [ImplementsFunction("touch")] public static bool Touch(string path, int mtime, int atime) { // Create the file if it does not already exist (performs all checks). //PhpStream file = (PhpStream)Open(path, "ab"); //if (file == null) return false; StreamWrapper wrapper; if (!PhpStream.ResolvePath(ref path, out wrapper, CheckAccessMode.FileMayExist, CheckAccessOptions.Quiet)) return false; if (!Exists(path)) { // Open and close => create new. Close(wrapper.Open(ref path, "wb", StreamOpenOptions.Empty, StreamContext.Default)); } DateTime access_time = (atime > 0) ? DateTimeUtils.UnixTimeStampToUtc(atime) : DateTime.UtcNow; DateTime modification_time = (mtime > 0) ? DateTimeUtils.UnixTimeStampToUtc(mtime) : DateTime.UtcNow; access_time -= DateTimeUtils.GetDaylightTimeDifference(access_time, DateTime.UtcNow); modification_time -= DateTimeUtils.GetDaylightTimeDifference(modification_time, DateTime.UtcNow); try { File.SetLastWriteTimeUtc(path, modification_time); File.SetLastAccessTimeUtc(path, access_time); // Clear the cached stat values ClearStatCache(); return true; } catch (UnauthorizedAccessException) { PhpException.Throw(PhpError.Warning, CoreResources.GetString("stream_file_access_denied", FileSystemUtils.StripPassword(path))); } catch (System.Exception e) { PhpException.Throw(PhpError.Warning, CoreResources.GetString("stream_error", FileSystemUtils.StripPassword(path), e.Message)); } return false; } #endregion #region Disk Stats (disk_free_space/diskfreespace, disk_total_space) /// /// Given a string containing a directory, this function will return /// the number of free bytes on the corresponding filesystem or disk partition. /// /// The directory specifying the filesystem or disk partition to be examined. /// Nuber of free bytes available or FALSE on an error. [ImplementsFunction("disk_free_space")] public static object GetDiskFreeSpace(string directory) { return GetDiskFreeSpaceInternal(directory, false); } /// /// Given a string containing a directory, this function will return /// the number of free bytes on the corresponding filesystem or disk partition. /// /// The directory specifying the filesystem or disk partition to be examined. /// Nuber of free bytes available or FALSE on an error. [ImplementsFunction("diskfreespace")] [EditorBrowsable(EditorBrowsableState.Never)] public static object GetFreeSpace(string directory) { return GetDiskFreeSpaceInternal(directory, false); } /// /// Given a string containing a directory, this function will return /// the number of total bytes on the corresponding filesystem or disk partition. /// /// The directory specifying the filesystem or disk partition to be examined. /// Total nuber of bytes on the specified filesystem or disk partition or FALSE on an error. [ImplementsFunction("disk_total_space")] public static object GetDiskTotalSpace(string directory) { return GetDiskFreeSpaceInternal(directory, true); } /// /// Given a string containing a directory, this function will return /// the number of bytes (total or free depending on /// on the corresponding filesystem or disk partition. /// /// The directory specifying the filesystem or disk partition to be examined. /// true to return total space available, false to return free space only. /// Nuber of bytes available or FALSE on an error. internal static object GetDiskFreeSpaceInternal(string directory, bool total) { long user_free_bytes, total_bytes, total_free_bytes; if (!FileSystemUtils.GetDiskFreeSpace(directory, out user_free_bytes, out total_bytes, out total_free_bytes)) { // TODO: Warning: disk_free_space(): Systm neme nalzt uvedenou cestu.\n on line.... return false; } else { return total ? (double)total_bytes : (double)user_free_bytes; } } #endregion #region Stat Values (file* functions) /// /// Gets file type. /// /// /// Returns the type of the file. Possible values are fifo, char, /// dir, block, link, file, and unknown. /// Returns null if an error occurs. /// /// /// [ImplementsFunction("filetype")] [return: CastToFalse] public static string GetType(string path) { bool ok = StatInternal(path, false); if (!ok) return null; FileModeFlags mode = (FileModeFlags)statCache.st_mode & FileModeFlags.FileTypeMask; switch (mode) { case FileModeFlags.Directory: return "dir"; case FileModeFlags.File: return "file"; default: PhpException.Throw(PhpError.Notice, LibResources.GetString("unknown_file_type")); return "unknown"; } } /// /// Returns the time the file was last accessed, or false in case /// of an error. The time is returned as a Unix timestamp. /// /// /// The results of this call are cached. /// See for more details. /// /// The file to be probed. /// The file access time or -1 in case of failure. [ImplementsFunction("fileatime")] [return: CastToFalse] public static int GetAccessTime(string path) { bool ok = StatInternal(path, false); if (!ok) return -1; return unchecked((int)statCache.st_atime); } /// /// Returns the time the file was created, or false in case /// of an error. The time is returned as a Unix timestamp. /// /// /// The results of this call are cached. /// See for more details. /// /// On UNIX systems the filectime value represents /// the last change of the I-node. /// /// /// The file to be stat()ed. /// The file size or -1 in case of failure. [ImplementsFunction("filectime")] [return: CastToFalse] public static int GetCreationTime(string path) { bool ok = StatInternal(path, false); if (!ok) return -1; return unchecked((int)statCache.st_ctime); } /// /// Gets file group. /// /// /// Always returns 0 for Windows filesystem files. /// /// The file to be stat()ed. /// The file size or false in case of failure. [ImplementsFunction("filegroup")] [return: CastToFalse] public static int GetGroup(string path) { bool ok = StatInternal(path, false); if (!ok) return -1; return (int)statCache.st_gid; } /// /// Gets file inode. /// /// /// Always returns 0 for Windows filesystem files. /// /// The file to be stat()ed. /// The file size or false in case of failure. [ImplementsFunction("fileinode")] [return: CastToFalse] public static int GetINode(string path) { bool ok = StatInternal(path, false); if (!ok) return -1; return (int)statCache.st_ino; } /// /// Returns the time the file was last modified, or false in case /// of an error. The time is returned as a Unix timestamp. /// /// /// The results of this call are cached. /// See for more details. /// /// The file to be stat()ed. /// The file modification time or false in case of failure. [ImplementsFunction("filemtime")] [return: CastToFalse] public static int GetModificationTime(string path) { bool ok = StatInternal(path, false); if (!ok) return -1; return unchecked((int)statCache.st_mtime); } /// /// Gets file owner. /// /// The file to be stat()ed. /// The user ID of the owner of the file, or false in case of an error. [ImplementsFunction("fileowner")] [return: CastToFalse] public static int GetOwner(string path) { bool ok = StatInternal(path, false); if (!ok) return -1; return (int)statCache.st_uid; } /// /// Gets file permissions. /// /// The file to be stat()ed. /// Returns the permissions on the file, or false in case of an error. [ImplementsFunction("fileperms")] [return: CastToFalse] public static int GetPermissions(string path) { bool ok = StatInternal(path, false); if (!ok) return -1; return (int)statCache.st_mode; } /// /// Gets the file size. /// /// /// The results of this call are cached. /// See for more details. /// /// The file to be probed. /// The file size or false in case of failure. [ImplementsFunction("filesize")] [return: CastToFalse] public static int GetSize(string path) { StreamWrapper wrapper; if (StatInternalCheck(ref path, false, out wrapper)) { string url; if (StatInternalTryCache(path, out url)) return statCache.st_size; // we are not calling full stat(), it is slow return FileStreamWrapper.HandleNewFileSystemInfo(-1, path, (p) => FileSystemUtils.FileSize(new FileInfo(p))); } return -1; //bool ok = StatInternal(path, false); //if (!ok) return -1; //return statCache.st_size; } #endregion #region Stat Flags (is_* functions) /// /// Tells whether the path is a directory. /// /// /// [ImplementsFunction("is_dir")] public static bool IsDirectory(string path) { StreamWrapper wrapper; if (!string.IsNullOrEmpty(path) && StatInternalCheck(ref path, false, out wrapper)) // do not throw warning if path is null or empty { string url; if (StatInternalTryCache(path, out url)) return ((FileModeFlags)statCache.st_mode & FileModeFlags.Directory) != 0; // we can't just call Directory.Exists since we have to throw warnings // also we are not calling full stat(), it is slow return FileStreamWrapper.HandleNewFileSystemInfo(false, path, (p) => new DirectoryInfo(p).Exists); } return false; //bool ok = !string.IsNullOrEmpty(path) && StatInternal(path, false); // do not throw warning if path is null or empty //if (!ok) return false; //return ((FileModeFlags)statCache.st_mode & FileModeFlags.Directory) > 0; } /// /// Tells whether the path is executable. /// /// /// [ImplementsFunction("is_executable")] public static bool IsExecutable(string path) { bool ok = StatInternal(path, false); if (!ok) return false; return ((FileModeFlags)statCache.st_mode & FileModeFlags.Execute) > 0; } /// /// Tells whether the path is a regular file and if it exists. /// /// /// [ImplementsFunction("is_file")] public static bool IsFile(string path) { StreamWrapper wrapper; if (StatInternalCheck(ref path, false, out wrapper)) { string url; if (StatInternalTryCache(path, out url)) return ((FileModeFlags)statCache.st_mode & FileModeFlags.File) != 0; // we can't just call File.Exists since we have to throw warnings // also we are not calling full stat(), it is slow return FileStreamWrapper.HandleNewFileSystemInfo(false, path, (p) => new FileInfo(p).Exists); } return false; } /// /// Tells whether the path is a symbolic link. /// /// /// Returns always false. /// /// /// Always false [ImplementsFunction("is_link")] public static bool IsLink(string path) { return false; // OK } /// /// Tells whether the path is readable. /// /// /// [ImplementsFunction("is_readable")] public static bool IsReadable(string path) { bool ok = StatInternal(path, false); if (!ok) return false; return ((FileModeFlags)statCache.st_mode & FileModeFlags.Read) > 0; } /// /// Tells whether the path is writable. /// /// The path argument may be a directory name allowing you to check if a directory is writeable. /// Returns TRUE if the path exists and is writable. [ImplementsFunction("is_writeable")] [EditorBrowsable(EditorBrowsableState.Never)] public static bool IsWriteable(string path) { return IsWritable(path); } /// /// Tells whether the path is writable. /// /// The path argument may be a directory name allowing you to check if a directory is writeable. /// Returns TRUE if the path exists and is writable. [ImplementsFunction("is_writable")] public static bool IsWritable(string path) { bool ok = StatInternal(path, false); if (!ok) return false; return ((FileModeFlags)statCache.st_mode & FileModeFlags.Write) > 0; } #endregion } #region NS: Unix Functions /// /// Unix-specific PHP functions. Not supported. Implementations are empty. /// /// public static class UnixFile { #region Owners, Mode (chgrp, chmod, chown, umask) /// /// Changes a group. Not supported. /// /// Path to the file to change group. /// A or /// identifier of the target group. /// Always false. [ImplementsFunction("chgrp")] public static bool ChangeFileGroup(string path, object group) { PhpException.FunctionNotSupported(PhpError.Warning); return false; } #region chmod helpers /// /// Add or revoke specified permission for a given role /// /// an equivalent to UNIX's owner, group or public /// ~ read, write, search /// static FileSystemAccessRule GetAccessRule( WellKnownSidType role, FileSystemRights permission, bool add) { //http://social.msdn.microsoft.com/Forums/en-US/vbgeneral/thread/dc841874-b71b-4e1c-9052-06eb4a87d08f IdentityReference identity = new SecurityIdentifier(role, null).Translate(typeof(NTAccount)) as IdentityReference; return new FileSystemAccessRule( identity, permission, add ? AccessControlType.Allow : AccessControlType.Deny); } /// /// Attempt to populate a set of Windows access rules, calculated from a UNIX mode flags /// /// /// static FileSystemAccessRule[] ResolveAccessRules(int mode) { //http://support.microsoft.com/kb/243330 WellKnownSidType[] roles = new WellKnownSidType[] { WellKnownSidType.WorldSid, WellKnownSidType.CreatorGroupSid, WellKnownSidType.CreatorOwnerSid }; //http://en.wikipedia.org/wiki/File_system_permissions#Octal_notation FileSystemRights[] permissions = new FileSystemRights[] { FileSystemRights.ReadAndExecute, FileSystemRights.Write, FileSystemRights.Read }; var rules = new System.Collections.Generic.List(); //Walk all combinations of roles and permissions for (int r = 0; r < roles.Length; r++) { WellKnownSidType role = roles[r]; for (int p = 0; p < permissions.Length; p++) { rules.Add(GetAccessRule(role, permissions[p], ((mode >> (r * 3)) & (1 << p)) != 0)); } } return rules.ToArray(); } #endregion chmod helpers /// /// Changes file permissions. /// /// /// On Windows platform this function supports only the /// _S_IREAD (0400) and _S_IWRITE (0200) /// options (set read / write permissions for the file owner). /// Note that the constants are octal numbers. /// /// Path to the file to change group. /// New file permissions (see remarks). /// true on success, false on failure. [ImplementsFunction("chmod")] public static bool ChangeFileMode(string path, int mode) { StreamWrapper wrapper; if (!PhpStream.ResolvePath(ref path, out wrapper, CheckAccessMode.FileOrDirectory, CheckAccessOptions.Empty)) return false; bool isDir = PhpFile.IsDirectory(path); FileSystemInfo fInfo = isDir ? (FileSystemInfo)new DirectoryInfo(path) : new FileInfo(path); if (!fInfo.Exists) { PhpException.Throw(PhpError.Warning, CoreResources.GetString("invalid_path", path)); return false; } //Directories has no equivalent of a readonly flag, //instead, their content permission should be adjusted accordingly //[http://msdn.microsoft.com/en-us/library/system.security.accesscontrol.directorysecurity.aspx] if (isDir) { //DirectoryInfo dInfo = (DirectoryInfo)fInfo; //DirectorySecurity dSecurity = dInfo.GetAccessControl(); //foreach(FileSystemAccessRule rule in ResolveAccessRules(mode)) // dSecurity.AddAccessRule(rule); //try //{ // dInfo.SetAccessControl(dSecurity); //} //catch { return false; } } else { // according to and from C libraries in Visual Studio 2008 // and PHP 5.3 source codes, which are using standard _chmod() function in C // on Windows it only changes the ReadOnly flag of the file // // see for more details /* #define _S_IREAD 0x0100 // read permission, owner #define _S_IWRITE 0x0080 // write permission, owner #define _S_IEXEC 0x0040 // execute/search permission, owner */ ((FileInfo)fInfo).IsReadOnly = ((mode & 0x0080) == 0); } return true; } /// /// Unix-specific function. Not supported. /// /// Path to the file to change owner. /// A or /// identifier of the target group. /// Always false. [ImplementsFunction("chown")] public static bool ChangeFileOwner(string path, object user) { PhpException.FunctionNotSupported(PhpError.Warning); return false; } /// /// Unix-specific function. Not supported. /// /// /// [ImplementsFunction("umask")] public static int UMask(int mask) { return UMask(); } /// /// Unix-specific function. Not supported. /// /// [ImplementsFunction("umask")] public static int UMask() { return 0; } #endregion #region Links (link, symlink, readlink, linkinfo) /// /// Unix-specific function. Not supported. /// /// /// /// [ImplementsFunction("link")] public static bool MakeHardLink(string target, string link) { // Creates a hard link. PhpException.FunctionNotSupported(PhpError.Warning); return false; } /// /// Unix-specific function. Not supported. /// /// /// /// [ImplementsFunction("symlink")] public static bool MakeSymbolicLink(string target, string link) { // Creates a symbolic link. PhpException.FunctionNotSupported(PhpError.Warning); return false; } /// /// Unix-specific function. Not supported. /// /// /// [ImplementsFunction("readlink", FunctionImplOptions.NotSupported)] public static string ReadLink(string path) { // Returns the target of a symbolic link. PhpException.FunctionNotSupported(PhpError.Warning); return null; } /// /// Unix-specific function. Not supported. /// /// /// [ImplementsFunction("linkinfo")] public static int GetLinkInfo(string path) { // Gets information about a link. PhpException.FunctionNotSupported(PhpError.Warning); return 0; } #endregion } #endregion } ================================================ FILE: Source/ClassLibrary/FileSystem.Directory.cs ================================================ /* Copyright (c) 2004-2006 Jan Benda and Tomas Matousek. The use and distribution terms for this software are contained in the file named License.txt, which can be found in the root of the Phalanger distribution. By using this software in any fashion, you are agreeing to be bound by the terms of this license. You must not remove this notice from this software. */ using System; using System.IO; using System.Text; using System.Threading; using System.Collections; using System.ComponentModel; using System.Runtime.Serialization; using System.Runtime.InteropServices; using System.Runtime.CompilerServices; using PHP.Core; using PHP.Core.Reflection; #if SILVERLIGHT using PHP.CoreCLR; #endif namespace PHP.Library { #region Directory user-class /// /// User-like class encapsulating enumeration of a Directory. /// Uses the PhpDiretory implementation upon PhpWrapper streams. /// #if !SILVERLIGHT [Serializable] #endif [ImplementsType] public class Directory : PhpObject { #region Fields /// /// Reference to the directory listing resource. /// public PhpReference handle = new PhpSmartReference(); /// /// The opened path (accessible from the PHP script). /// public PhpReference path = new PhpSmartReference(); #endregion #region Construction /// /// Start listing of a directory (intended to be used from C#). /// /// The path to the directory. public Directory(string directory) : this(ScriptContext.CurrentContext, true) { this.path = new PhpReference(directory); this.handle = new PhpReference(PhpDirectory.Open(directory)); } /// /// For internal purposes only. /// [EditorBrowsable(EditorBrowsableState.Never)] public Directory(ScriptContext context, bool newInstance) : base(context, newInstance) { } /// /// For internal purposes only. /// [EditorBrowsable(EditorBrowsableState.Never)] public Directory(ScriptContext context, DTypeDesc caller) : base(context, caller) { } #if !SILVERLIGHT /// Deserializing constructor. protected Directory(SerializationInfo info, StreamingContext context) : base(info, context) { } #endif #endregion #region read /// /// Read next directory entry. /// /// Filename of a contained file (including . and ..). [ImplementsMethod] [return:CastToFalse] public object read(ScriptContext context, [Optional]object handle) { PhpResource res = (handle == Arg.Default ? this.handle.Value : handle) as PhpResource; if (res == null) { PhpException.InvalidImplicitCast("handle", PhpResource.PhpTypeName, "read"); return null; } return PhpDirectory.Read(res); } #endregion #region rewind /// /// Restart the directory listing. /// [ImplementsMethod] public object rewind(ScriptContext context, [Optional]object handle) { PhpResource res = (handle == Arg.Default ? this.handle.Value : handle) as PhpResource; if (res == null) { PhpException.InvalidImplicitCast("handle", PhpResource.PhpTypeName, "rewind"); return null; } PhpDirectory.Rewind(res); return null; } #endregion #region close /// /// Finish the directory listing. /// [ImplementsMethod] public object close(ScriptContext context, [Optional]object handle) { PhpResource res = (handle == Arg.Default ? this.handle.Value : handle) as PhpResource; if (res == null) { PhpException.InvalidImplicitCast("handle", PhpResource.PhpTypeName, "close"); return null; } PhpDirectory.Close(res); return null; } #endregion #region Implementation Details /// /// Populates the provided with this class's methods and properties. /// /// The type desc to populate. private static void __PopulateTypeDesc(PhpTypeDesc typeDesc) { typeDesc.AddMethod("read", PhpMemberAttributes.Public, read); typeDesc.AddMethod("rewind", PhpMemberAttributes.Public, rewind); typeDesc.AddMethod("close", PhpMemberAttributes.Public, close); typeDesc.AddProperty("handle", PhpMemberAttributes.Public, (instance) => ((Directory)instance).handle, (instance, value) => ((Directory)instance).handle = (PhpReference)value); typeDesc.AddProperty("path", PhpMemberAttributes.Public, (instance) => ((Directory)instance).path, (instance, value) => ((Directory)instance).path = (PhpReference)value); } /// Arg-less overload. [EditorBrowsable(EditorBrowsableState.Never)] public static object read(object instance, PhpStack stack) { switch (stack.ArgCount) { case 0: { stack.RemoveFrame(); return ((Directory)instance).read(stack.Context, Arg.Default) ?? false; } case 1: { stack.CalleeName = "read"; object arg = stack.PeekValue(1); stack.RemoveFrame(); return ((Directory)instance).read(stack.Context, arg) ?? false; } default: { stack.RemoveFrame(); PhpException.InvalidArgumentCount(null, "read"); return null; } } } /// Arg-less overload. [EditorBrowsable(EditorBrowsableState.Never)] public static object rewind(object instance, PhpStack stack) { switch (stack.ArgCount) { case 0: { stack.RemoveFrame(); ((Directory)instance).rewind(stack.Context, Arg.Default); break; } case 1: { stack.CalleeName = "rewind"; object arg = stack.PeekValue(1); stack.RemoveFrame(); ((Directory)instance).rewind(stack.Context, arg); break; } default: { stack.RemoveFrame(); PhpException.InvalidArgumentCount(null, "rewind"); break; } } return null; } /// Arg-less overload. [EditorBrowsable(EditorBrowsableState.Never)] public static object close(object instance, PhpStack stack) { switch (stack.ArgCount) { case 0: { stack.RemoveFrame(); ((Directory)instance).close(stack.Context, Arg.Default); break; } case 1: { stack.CalleeName = "close"; object arg = stack.PeekValue(1); stack.RemoveFrame(); ((Directory)instance).close(stack.Context, arg); break; } default: { stack.RemoveFrame(); PhpException.InvalidArgumentCount(null, "close"); break; } } return null; } #endregion } #endregion #region DirectoryListing /// /// Enumeration class used for PhpDirectory listings - serves as a PhpResource. /// Uses the PhpWrapper stream wrappers only to generate the list of contained files. /// No actual resources to be released explicitly. /// internal sealed class DirectoryListing : PhpResource { public DirectoryListing(string[] listing) : base(DirectoryListingName) { this.Listing = listing; if (listing != null) { this.Enumerator = listing.GetEnumerator(); this.Enumerator.Reset(); } else { this.Close(); // Invalid resource } } protected override void FreeManaged() { if (object.ReferenceEquals(this, PhpDirectory.lastDirHandle)) PhpDirectory.lastDirHandle = null; } public readonly string[] Listing; public readonly System.Collections.IEnumerator Enumerator; private const string DirectoryListingName = "stream"; //private static int DirectoryListingType = PhpResource.RegisterType(DirectoryListingName); // Note: PHP uses the stream mechanism listings (opendir etc.) // this is the same but a) faster, b) more memory expensive for large directories // (and unfinished listings in script) } #endregion /// /// Gives access to the directory manipulation and itereation. /// /// public static class PhpDirectory { #region Browsing (getcwd, chdir, NS: chroot) /// Gets the virtual working directory of the current script. /// /// Absolute path to the current directory. [ImplementsFunction("getcwd")] public static string GetWorking() { string result = ScriptContext.CurrentContext.WorkingDirectory; return (result != null) ? result : ""; } /// Changes the virtual working directory for the current script. /// Absolute or relative path to the new working directory. /// Returns true on success or false on failure. /// If the specified directory does not exist. [ImplementsFunction("chdir")] public static bool SetWorking(string directory) { if (directory != null) { string newPath = PhpPath.AbsolutePath(directory); if (System.IO.Directory.Exists(newPath)) { // Note: open_basedir not applied here, URL will not pass through ScriptContext.CurrentContext.WorkingDirectory = newPath; return true; } } PhpException.Throw(PhpError.Warning, LibResources.GetString("directory_not_found", directory)); return false; } /// /// Changes the root directory of the current process to . /// Not supported. /// /// /// This function is only available if your system supports it /// and you're using the CLI, CGI or Embed SAPI. /// Note: This function is not implemented on Windows platforms. /// /// The new value of the root directory. /// Returns TRUE on success or FALSE on failure. [ImplementsFunction("chroot", FunctionImplOptions.NotSupported)] [EditorBrowsable(EditorBrowsableState.Never)] public static bool SetRoot(string directory) { PhpException.FunctionNotSupported(); return false; } #endregion #region Iterating (dir, opendir, readdir, rewinddir, closedir, scandir) /// Returns an object encapsulating the directory listing mechanism on a given /// . /// A pseudo-object oriented mechanism for reading a directory. The given directory is opened. /// Two properties are available once the directory has been opened. The handle property /// can be used with other directory functions such as readdir(), rewinddir() and closedir(). /// The path property is set to path the directory that was opened. /// Three methods are available: , /// and . /// The path to open for listing. /// An instance of . [ImplementsFunction("dir")] public static Directory GetIterator(string directory) { return new Directory(directory); } /// /// Last handle opened by opendir. /// [ThreadStatic] internal static PhpResource lastDirHandle; /// Returns a directory handle to be used in subsequent /// readdir(), rewinddir() and closedir() calls. /// /// /// If path is not a valid directory or the directory can not /// be opened due to permission restrictions or filesystem errors, /// opendir() returns false and generates a PHP error of level E_WARNING. /// /// /// As of PHP 4.3.0 path can also be any URL which supports directory listing, /// however only the file:// url wrapper supports this in PHP 4.3. /// As of PHP 5.0.0, support for the ftp:// url wrapper is included as well. /// /// /// The path of the directory to be listed. /// A resource containing the listing. /// In case the specified stream wrapper can not be found /// or the desired directory can not be opened. [ImplementsFunction("opendir")] [return: CastToFalse] public static PhpResource Open(string directory) { lastDirHandle = null; StreamWrapper wrapper; if (!PhpStream.ResolvePath(ref directory, out wrapper, CheckAccessMode.Directory, CheckAccessOptions.Empty)) return null; string[] listing = wrapper.Listing(directory, 0, null); return (listing != null) ? (lastDirHandle = new DirectoryListing(listing)) : null; } /// /// Reads an entry from a directory handle. Uses last handle opened by opendir. /// [ImplementsFunction("readdir")] [return: CastToFalse] public static string Read() { return Read(PhpDirectory.lastDirHandle); } /// /// Reads an entry from a directory handle. /// /// A returned by . /// /// Returns the path of the next file from the directory. /// The filenames (including . and ..) are returned in the order /// in which they are stored by the filesystem. /// [ImplementsFunction("readdir")] [return: CastToFalse] public static string Read(PhpResource dirHandle) { IEnumerator enumerator = ValidListing(dirHandle); if (enumerator != null && enumerator.MoveNext()) return enumerator.Current.ToString(); else return null; } /// /// Rewinds a directory handle. Uses last handle opened by opendir. /// [ImplementsFunction("rewinddir")] public static void Rewind() { Rewind(PhpDirectory.lastDirHandle); } /// /// Rewinds a directory handle. /// Function has no return value. /// /// A returned by . /// /// Resets the directory stream indicated by to the /// beginning of the directory. /// [ImplementsFunction("rewinddir")] public static void Rewind(PhpResource dirHandle) { IEnumerator enumerator = ValidListing(dirHandle); if (enumerator == null) return; enumerator.Reset(); } /// /// Closes a directory handle. Uses last handle opened by opendir. /// [ImplementsFunction("closedir")] public static void Close() { Close(PhpDirectory.lastDirHandle); } /// /// Closes a directory handle. /// Function has no return value. /// /// A returned by . /// /// Closes the directory stream indicated by . /// The stream must have previously been opened by by . /// [ImplementsFunction("closedir")] public static void Close(PhpResource dirHandle) { // Note: PHP allows other all stream resources to be closed with closedir(). IEnumerator enumerator = ValidListing(dirHandle); if (enumerator == null) return; dirHandle.Close(); // releases the DirectoryListing and sets to invalid. } /// Lists files and directories inside the specified . /// /// Returns an array of files and directories from the . /// If is not a directory, then boolean false is returned, /// and an error of level E_WARNING is generated. /// /// The directory to be listed. /// A of filenames or false in case of failure. [ImplementsFunction("scandir")] [return: CastToFalse] public static PhpArray Scan(string directory) { return Scan(directory, 0); } /// Lists files and directories inside the specified path. /// /// Returns an array of files and directories from the . /// If is not a directory, then boolean false is returned, /// and an error of level E_WARNING is generated. /// /// The directory to be listed. /// /// By default, the listing is sorted in ascending alphabetical order. /// If the optional sorting_order is used (set to 1), /// then sort order is alphabetical in descending order. /// A of filenames or false in case of failure. /// In case the specified stream wrapper can not be found /// or the desired directory can not be opened. [ImplementsFunction("scandir")] [return: CastToFalse] public static PhpArray Scan(string directory, int sorting_order) { StreamWrapper wrapper; if (!PhpStream.ResolvePath(ref directory, out wrapper, CheckAccessMode.Directory, CheckAccessOptions.Empty)) return null; string[] listing = wrapper.Listing(directory, 0, null); if (listing != null) { PhpArray ret = new PhpArray(listing); // create the array from the system one if (sorting_order == 1) { PhpArrays.ReverseSort(ret, ComparisonMethod.String); } else { PhpArrays.Sort(ret, ComparisonMethod.String); } return ret; } return null; // false } /// /// Casts the given resource handle to the enumerator. /// Throw an exception when a wrong argument is supplied. /// /// The handle passed to a PHP function. /// The enumerator over the files in the DirectoryListing. /// When the supplied argument is not a valid resource. private static System.Collections.IEnumerator ValidListing(PhpResource dir_handle) { DirectoryListing listing = dir_handle as DirectoryListing; if (listing != null) return listing.Enumerator; PhpException.Throw(PhpError.Warning, LibResources.GetString("invalid_directory_resource")); return null; } #endregion #region Manipulating (mkdir, rmdir) /// /// Makes a new directory. /// /// The directory to create. /// true if successful, false otherwise. [ImplementsFunction("mkdir")] public static bool MakeDirectory(string pathname) { return MakeDirectory(pathname, (int)FileModeFlags.ReadWriteExecute, false, StreamContext.Default); } /// /// Makes a directory or a branch of directories using the specified wrapper. /// /// The path to create. /// A combination of . /// true if successful, false otherwise. [ImplementsFunction("mkdir")] public static bool MakeDirectory(string pathname, int mode) { return MakeDirectory(pathname, mode, false, StreamContext.Default); } /// /// /// /// /// /// /// [ImplementsFunction("mkdir")] public static bool MakeDirectory(string pathname, int mode, bool recursive) { return MakeDirectory(pathname, mode, recursive, StreamContext.Default); } /// /// /// /// /// /// /// /// [ImplementsFunction("mkdir")] public static bool MakeDirectory(string pathname, int mode, bool recursive, PhpResource context) { StreamWrapper wrapper; if (!PhpStream.ResolvePath(ref pathname, out wrapper, CheckAccessMode.Directory, CheckAccessOptions.Empty)) return false; return wrapper.MakeDirectory(pathname, mode, recursive ? StreamMakeDirectoryOptions.Recursive : StreamMakeDirectoryOptions.Empty, StreamContext.Default); } /// /// Removes a directory. /// /// /// true if successful, false otherwise. [ImplementsFunction("rmdir")] public static bool RemoveDirectory(string dirname) { return RemoveDirectory(dirname, StreamContext.Default); } /// /// Removes a directory. /// /// /// /// true if successful, false otherwise. [ImplementsFunction("rmdir")] public static bool RemoveDirectory(string dirname, StreamContext context) { StreamWrapper wrapper; if (!PhpStream.ResolvePath(ref dirname, out wrapper, CheckAccessMode.Directory, CheckAccessOptions.Empty)) return false; return wrapper.RemoveDirectory(dirname, StreamRemoveDirectoryOptions.Empty, StreamContext.Default); } #endregion } } ================================================ FILE: Source/ClassLibrary/FileSystem.Glob.cs ================================================ /* Copyright (c) 2012 DEVSENSE The use and distribution terms for this software are contained in the file named License.txt, which can be found in the root of the Phalanger distribution. By using this software in any fashion, you are agreeing to be bound by the terms of this license. You must not remove this notice from this software. */ using System; using System.Collections.Generic; using System.Linq; using System.Text; using PHP.Core; using System.IO; using System.Text.RegularExpressions; using System.Diagnostics; namespace PHP.Library { //TODO: try to output slashes in a not uniform and ugly way as PHP does public static class PhpGlob { #region Enums: GlobOptions, FnMatchOptions /// /// Flags used in call to glob(). /// [Flags] public enum GlobOptions { /// /// No flags. /// None = 0, /// /// Append system directory separator (slash) to matching directories. /// [ImplementsConstant("GLOB_MARK")] Mark = 0x0008, /// /// Return pattern itself if nothing matches. /// [ImplementsConstant("GLOB_NOCHECK")] NoCheck = 0x0010, /// /// Don't sort. /// [ImplementsConstant("GLOB_NOSORT")] NoSort = 0x0020,//TODO: support this somehow /// /// Expand braces ala csh. /// [ImplementsConstant("GLOB_BRACE")] Brace = 0x0080, /// /// Disable backslash escaping. /// [ImplementsConstant("GLOB_NOESCAPE")] NoEscape = 0x1000, /// /// List directories only. /// [ImplementsConstant("GLOB_ONLYDIR")] OnlyDir = 0x40000000, /// /// List directories only. /// [ImplementsConstant("GLOB_ERR")] StopOnError = 0x4 } /// /// Flags used in call to fnmatch(). /// public enum FnMatchOptions { /// /// No flags. /// None = 0, /// /// Caseless match. Part of the GNU extension. /// [ImplementsConstant("FNM_CASEFOLD")] CaseFold = 0x0010, /// /// Leading period in string must be exactly matched by period in the given pattern. /// [ImplementsConstant("FNM_PERIOD")] Period = 0x0004, /// /// Disable backslash escaping. /// [ImplementsConstant("FNM_NOESCAPE")] NoEscape = 0x0001, /// /// Slash in string only matches slash in the given pattern. /// [ImplementsConstant("FNM_PATHNAME")] PathName = 0x0002 } #endregion private class CharClass { private readonly StringBuilder/*!*/ _chars = new StringBuilder(); internal void Add(char c) { if (c == ']' || c == '\\') { _chars.Append('\\'); } _chars.Append(c); } internal string MakeString() { if (_chars.Length == 0) { return null; } if (_chars.Length == 1 && _chars[0] == '^') { _chars.Insert(0, "\\"); } _chars.Insert(0, "["); _chars.Append(']'); return _chars.ToString(); } } /// /// Replaces all slashes with /. /// /// Path pattern. /// Canonized pattern. private static string CanonizePattern(string/*!*/pattern) { Debug.Assert(pattern != null); return pattern.Replace('\\', '/'); } private static void AppendExplicitRegexChar(StringBuilder/*!*/ builder, char c) { builder.Append('['); if (c == '^' || c == '\\') { builder.Append('\\'); } builder.Append(c); builder.Append(']'); } internal static string/*!*/ PatternToRegex(string/*!*/ pattern, bool pathName, bool noEscape) { StringBuilder result = new StringBuilder(pattern.Length); result.Append("\\G"); bool inEscape = false; CharClass charClass = null; foreach (char c in pattern) { if (inEscape) { if (charClass != null) { charClass.Add(c); } else { AppendExplicitRegexChar(result, c); } inEscape = false; continue; } else if (c == '\\' && !noEscape) { inEscape = true; continue; } if (charClass != null) { if (c == ']') { string set = charClass.MakeString(); if (set == null) { // PHP regex "[]" matches nothing // CLR regex "[]" throws exception return String.Empty; } result.Append(set); charClass = null; } else { charClass.Add(c); } continue; } switch (c) { case '*': result.Append(pathName ? "[^/]*" : ".*"); break; case '?': result.Append('.'); break; case '[': charClass = new CharClass(); break; default: AppendExplicitRegexChar(result, c); break; } } return (charClass == null) ? result.ToString() : String.Empty; } private sealed class GlobMatcher { private readonly string/*!*/ _pattern; private readonly GlobOptions _flags; private readonly List/*!*/ _result; private readonly bool _dirOnly; private bool _stripTwo; private bool _relative; private FnMatchOptions _fnMatchFlags; private bool NoEscapes { get { return ((_flags & GlobOptions.NoEscape) != 0); } } private bool StopOnError { get { return ((_flags & GlobOptions.StopOnError) != 0); } } private bool Mark { get { return ((_flags & GlobOptions.Mark) != 0); } } public GlobMatcher(string/*!*/ pattern, GlobOptions flags) { _pattern = CanonizePattern(pattern); _flags = flags; _result = new List(); _dirOnly = _pattern.LastCharacter() == '/' || (flags & GlobOptions.OnlyDir) != 0; _fnMatchFlags = NoEscapes ? FnMatchOptions.NoEscape : FnMatchOptions.None; } private static string/*!*/ Unescape(string/*!*/ path, int start) { StringBuilder unescaped = new StringBuilder(); bool inEscape = false; for (int i = start; i < path.Length; i++) { char c = path[i]; if (inEscape) { inEscape = false; } else if (c == '\\') { inEscape = true; continue; } unescaped.Append(c); } if (inEscape) { unescaped.Append('\\'); } return unescaped.ToString(); } private void TestPath(string path, int patternEnd, bool isLastPathSegment) { if (!isLastPathSegment) { DoGlob(path, patternEnd); return; } if (!NoEscapes) { path = Unescape(path, _stripTwo ? 2 : 0); } else if (_stripTwo) { path = path.Substring(2); } string resultPath = path; if (_relative)//we have to remove CWD before adding to results list { resultPath = path.Substring(ScriptContext.CurrentContext.WorkingDirectory.Length + 1); } if (System.IO.Directory.Exists(path)) { if (Mark) _result.Add(resultPath + FullPath.DirectorySeparatorString); else _result.Add(resultPath); } else if (!_dirOnly && File.Exists(path)) { _result.Add(resultPath); } } internal IList/*!*/ DoGlob() { if (_pattern.Length == 0) { return ArrayUtils.EmptyStrings; } int pos = 0; string baseDirectory = "."; if (_pattern[0] == '/' || (_pattern.Length >= 2 && _pattern[1] == ':'))//is pattern rooted? { bool containsWildcard; pos = FindNextSeparator(0, false, out containsWildcard); if (pos == _pattern.Length) { TestPath(_pattern, pos, true); return _result; } if (pos > 0 || _pattern[0] == '/') { baseDirectory = _pattern.Substring(0, pos); } } else { _relative = true; baseDirectory = CanonizePattern(ScriptContext.CurrentContext.WorkingDirectory); } _stripTwo = (baseDirectory == "."); try { DoGlob(baseDirectory, pos); } catch (ArgumentNullException) { throw; } catch (Exception) { } return _result; } private void DoGlob(string/*!*/ baseDirectory, int position) { if (!System.IO.Directory.Exists(baseDirectory)) { return; } bool containsWildcard; int patternEnd = FindNextSeparator(position, true, out containsWildcard); bool isLastPathSegment = (patternEnd == _pattern.Length); string dirSegment = _pattern.Substring(position, patternEnd - position); if (!isLastPathSegment) { patternEnd++; } if (!containsWildcard) { string path = baseDirectory + "/" + dirSegment; TestPath(path, patternEnd, isLastPathSegment); return; } try { foreach (string file in FileSystemUtils.GetFileSystemEntries(baseDirectory, "*")) { string objectName = Path.GetFileName(file); if (FnMatch(dirSegment, objectName, _fnMatchFlags)) { TestPath(CanonizePattern(file), patternEnd, isLastPathSegment); } } } catch (ArgumentNullException) { throw; } catch(Exception) { if (StopOnError) throw; } if (isLastPathSegment && dirSegment[0] == '.') { if (FnMatch(dirSegment, ".", _fnMatchFlags)) { string directory = baseDirectory + "/."; if (_dirOnly) { directory += '/'; } TestPath(directory, patternEnd, true); } if (FnMatch(dirSegment, "..", _fnMatchFlags)) { string directory = baseDirectory + "/.."; if (_dirOnly) { directory += '/'; } TestPath(directory, patternEnd, true); } } } private int FindNextSeparator(int position, bool allowWildcard, out bool containsWildcard) { int lastSlash = -1; bool inEscape = false; containsWildcard = false; for (int i = position; i < _pattern.Length; i++) { if (inEscape) { inEscape = false; continue; } char c = _pattern[i]; if (c == '\\') { inEscape = true; continue; } else if (c == '*' || c == '?' || c == '[') { if (!allowWildcard) { return lastSlash + 1; } else if (lastSlash >= 0) { return lastSlash; } containsWildcard = true; } else if (c == '/' || c == ':') { if (containsWildcard) { return i; } lastSlash = i; } } return _pattern.Length; } } private class GlobUngrouper { internal abstract class GlobNode { internal readonly GlobNode/*!*/ _parent; protected GlobNode(GlobNode parentNode) { _parent = parentNode ?? this; } abstract internal GlobNode/*!*/ AddChar(char c); abstract internal GlobNode/*!*/ StartLevel(); abstract internal GlobNode/*!*/ AddGroup(); abstract internal GlobNode/*!*/ FinishLevel(); abstract internal List/*!*/ Flatten(); } internal class TextNode : GlobNode { private readonly StringBuilder/*!*/ _builder; internal TextNode(GlobNode/*!*/ parentNode) : base(parentNode) { _builder = new StringBuilder(); } internal override GlobNode/*!*/ AddChar(char c) { if (c != 0) { _builder.Append(c); } return this; } internal override GlobNode/*!*/ StartLevel() { return _parent.StartLevel(); } internal override GlobNode/*!*/ AddGroup() { return _parent.AddGroup(); } internal override GlobNode/*!*/ FinishLevel() { return _parent.FinishLevel(); } internal override List/*!*/ Flatten() { List result = new List(1); result.Add(_builder); return result; } } internal class ChoiceNode : GlobNode { private readonly List/*!*/ _nodes; internal ChoiceNode(GlobNode/*!*/ parentNode) : base(parentNode) { _nodes = new List(); } internal override GlobNode/*!*/ AddChar(char c) { SequenceNode node = new SequenceNode(this); _nodes.Add(node); return node.AddChar(c); } internal override GlobNode/*!*/ StartLevel() { SequenceNode node = new SequenceNode(this); _nodes.Add(node); return node.StartLevel(); } internal override GlobNode/*!*/ AddGroup() { AddChar('\0'); return this; } internal override GlobNode/*!*/ FinishLevel() { AddChar('\0'); return _parent; } internal override List/*!*/ Flatten() { List result = new List(); foreach (GlobNode node in _nodes) { foreach (StringBuilder builder in node.Flatten()) { result.Add(builder); } } return result; } } internal class SequenceNode : GlobNode { private readonly List/*!*/ _nodes; internal SequenceNode(GlobNode parentNode) : base(parentNode) { _nodes = new List(); } internal override GlobNode/*!*/ AddChar(char c) { TextNode node = new TextNode(this); _nodes.Add(node); return node.AddChar(c); } internal override GlobNode/*!*/ StartLevel() { ChoiceNode node = new ChoiceNode(this); _nodes.Add(node); return node; } internal override GlobNode/*!*/ AddGroup() { return _parent; } internal override GlobNode/*!*/ FinishLevel() { return _parent._parent; } internal override List/*!*/ Flatten() { List result = new List(); result.Add(new StringBuilder()); foreach (GlobNode node in _nodes) { List tmp = new List(); foreach (StringBuilder builder in node.Flatten()) { foreach (StringBuilder sb in result) { StringBuilder newsb = new StringBuilder(sb.ToString()); newsb.Append(builder.ToString()); tmp.Add(newsb); } } result = tmp; } return result; } } private readonly SequenceNode/*!*/ _rootNode; private GlobNode/*!*/ _currentNode; private int _level; internal GlobUngrouper(int patternLength) { _rootNode = new SequenceNode(null); _currentNode = _rootNode; _level = 0; } internal void AddChar(char c) { _currentNode = _currentNode.AddChar(c); } internal void StartLevel() { _currentNode = _currentNode.StartLevel(); _level++; } internal void AddGroup() { _currentNode = _currentNode.AddGroup(); } internal void FinishLevel() { _currentNode = _currentNode.FinishLevel(); _level--; } internal int Level { get { return _level; } } internal string[]/*!*/ Flatten() { if (_level != 0) { return ArrayUtils.EmptyStrings; } List list = _rootNode.Flatten(); string[] result = new string[list.Count]; for (int i = 0; i < list.Count; i++) { result[i] = list[i].ToString(); } return result; } } private static string[] UngroupGlobs(string/*!*/ pattern, bool noEscape, bool brace) { GlobUngrouper ungrouper = new GlobUngrouper(pattern.Length); bool inEscape = false; foreach (char c in pattern) { if (inEscape) { if (c != ',' && c != '{' && c != '}') { ungrouper.AddChar('\\'); } ungrouper.AddChar(c); inEscape = false; continue; } else if (c == '\\' && !noEscape) { inEscape = true; continue; } switch (c) { case '{': if (!brace) return ArrayUtils.EmptyStrings; ungrouper.StartLevel(); break; case ',': if (ungrouper.Level < 1) { ungrouper.AddChar(c); } else { ungrouper.AddGroup(); } break; case '}': if (ungrouper.Level < 1) { // Unbalanced closing bracket matches nothing return ArrayUtils.EmptyStrings; } ungrouper.FinishLevel(); break; default: ungrouper.AddChar(c); break; } } return ungrouper.Flatten(); } internal static IEnumerable/*!*/ GetMatches(string/*!*/ pattern, GlobOptions flags) { if (pattern.Length == 0) { yield break; } bool noEscape = ((flags & GlobOptions.NoEscape) != 0); bool brace = ((flags & GlobOptions.Brace) != 0); string[] groups = UngroupGlobs(pattern, noEscape, brace); if (groups.Length == 0) { yield break; } foreach (string group in groups) { GlobMatcher matcher = new GlobMatcher(group, flags); foreach (string filename in matcher.DoGlob()) { yield return filename.Replace(Path.AltDirectorySeparatorChar, Path.DirectorySeparatorChar); } } } #region fnmatch, glob /// /// Matches the given path against a pattern. /// /// A containing a wildcard. /// The to be matched. /// Additional flags. /// true if the matches with the given /// wildcard . [ImplementsFunction("fnmatch")] public static bool FnMatch(string/*!*/ pattern, string/*!*/ path, FnMatchOptions flags) { if (pattern.Length == 0) { return path.Length == 0; } bool pathName = ((flags & FnMatchOptions.PathName) != 0); bool noEscape = ((flags & FnMatchOptions.NoEscape) != 0); string regexPattern = PatternToRegex(pattern, pathName, noEscape); if (regexPattern.Length == 0) { return false; } if (((flags & FnMatchOptions.Period) == 0) && path.Length > 0 && path[0] == '.') { // Starting dot requires an explicit dot in the pattern if (regexPattern.Length < 4 || regexPattern[2] != '[' || regexPattern[3] != '.') { return false; } } RegexOptions options = RegexOptions.None; if ((flags & FnMatchOptions.CaseFold) != 0) { options |= RegexOptions.IgnoreCase; } Match match = Regex.Match(path, regexPattern, options); return match != null && match.Success && (match.Length == path.Length); } /// /// Matches the given path against a pattern. /// /// A containing a wildcard. /// The to be matched. /// true if the matches with the given /// wildcard . [ImplementsFunction("fnmatch")] public static bool Match(string pattern, string path) { return FnMatch(pattern, path, 0); } /// /// Find pathnames matching a pattern. /// [ImplementsFunction("glob")] public static PhpArray Glob(string pattern) { return Glob(pattern, GlobOptions.None); } /// /// Find pathnames matching a pattern. /// [ImplementsFunction("glob")] public static PhpArray Glob(string pattern, GlobOptions flags) { if (pattern == null) return new PhpArray(0, 0); PhpArray result = new PhpArray(); foreach (var fileName in GetMatches(pattern, flags)) { result.Add(fileName); } if (result.Count == 0 && (flags & GlobOptions.NoCheck) != 0) result.Add(pattern); return result; } #endregion } } ================================================ FILE: Source/ClassLibrary/FileSystem.Path.cs ================================================ /* Copyright (c) 2004-2006 Jan Benda and Tomas Matousek. The use and distribution terms for this software are contained in the file named License.txt, which can be found in the root of the Phalanger distribution. By using this software in any fashion, you are agreeing to be bound by the terms of this license. You must not remove this notice from this software. TODO: - Fixed tempnam() 2nd parameter to be checked against path components. (PHP 5.1.3) */ using System; using System.IO; using System.Text; using System.Collections; using System.Threading; using System.ComponentModel; using PHP.Core; using System.Collections.Generic; using System.Text.RegularExpressions; #if SILVERLIGHT using DirectoryEx = PHP.CoreCLR.DirectoryEx; #else using DirectoryEx = System.IO.Directory; using System.Diagnostics; #endif namespace PHP.Library { /// /// Provides path strings manipulation. /// /// public static class PhpPath { #region Scheme, Url, Absolute Path /// /// Wrapper-safe method of getting the schema portion from an URL. /// /// A containing an URL or a local filesystem path. /// /// The schema portion of the given or "file" /// for a local filesystem path. /// /// Invalid path. internal static string GetScheme(string/*!*/ path) { int colon_index = path.IndexOf(':'); // When there is not scheme present (or it's a local path) return "file". if (colon_index == -1 || Path.IsPathRooted(path)) return "file"; // Otherwise assume that it's the string before first ':'. return path.Substring(0, colon_index); } /// /// Concatenates a scheme with the given absolute path if necessary. /// /// Absolute path. /// The given url or absolute path preceded by a file://. /// Invalid path. internal static string GetUrl(string/*!*/ absolutePath) { // Assert that the path is absolute Debug.Assert( !string.IsNullOrEmpty(absolutePath) && (absolutePath.IndexOf(':') > 0 || // there is a protocol (http://) or path is rooted (c:\) (Path.VolumeSeparatorChar != ':' && // or on linux, if there is no protocol, file path is rooted (absolutePath[0] == Path.DirectorySeparatorChar || absolutePath[0] == Path.AltDirectorySeparatorChar))) ); if (Path.IsPathRooted(absolutePath)) return String.Concat("file://", absolutePath); // Otherwise assume that it's the string before first ':'. return absolutePath; } /// /// Returns the given filesystem url without the scheme. /// /// A path or url of a local filesystem file. /// The filesystem path or null if the is not a local file. /// Invalid path. internal static string GetFilename(string/*!*/ path) { if (path.IndexOf(':') == -1 || Path.IsPathRooted(path)) return path; if (path.IndexOf("file://") == 0) return path.Substring("file://".Length); return null; } /// /// Check if the given path is a path to a local file. /// /// The path to test. /// true if it's not a fully qualified name of a remote resource. /// Invalid path. internal static bool IsLocalFile(string/*!*/ url) { return GetScheme(url) == "file"; } /// /// Check if the given path is a remote url. /// /// The path to test. /// true if it's a fully qualified name of a remote resource. /// Invalid path. internal static bool IsRemoteFile(string/*!*/ url) { return GetScheme(url) != "file"; } /// /// Merges the path with the current working directory /// to get a canonicalized absolute pathname representing the same path /// (local files only). If the provided /// is absolute (rooted local path or an URL) it is returned unchanged. /// /// An absolute or relative path to a directory or an URL. /// Canonicalized absolute path in case of a local directory or the original /// in case of an URL. internal static string AbsolutePath(string path) { // Don't combine remote file paths with CWD. try { if (IsRemoteFile(path)) return path; // Remove the file:// schema if any. path = GetFilename(path); // Combine the path and simplify it. string combinedPath = Path.Combine(PhpDirectory.GetWorking(), path); // Note: GetFullPath handles "C:" incorrectly if (combinedPath[combinedPath.Length - 1] == ':') combinedPath += '\\'; return Path.GetFullPath(combinedPath); } catch (Exception) { PhpException.Throw(PhpError.Notice, LibResources.GetString("invalid_path", FileSystemUtils.StripPassword(path))); return null; } } #endregion #region basename, dirname, pathinfo /// /// Returns path component of path. /// /// A containing a path to a file. /// The path conponent of the given . /// Invalid path. [ImplementsFunction("basename")] [PureFunction] public static string GetBase(string path) { return GetBase(path, null); } /// /// Returns path component of path. /// /// /// Given a containing a path to a file, this function will return the base name of the file. /// If the path ends in this will also be cut off. /// On Windows, both slash (/) and backslash (\) are used as path separator character. /// In other environments, it is the forward slash (/). /// /// A containing a path to a file. /// A containing suffix to be cut off the path if present. /// The path conponent of the given . [ImplementsFunction("basename")] [PureFunction] public static string GetBase(string path, string suffix) { if (String.IsNullOrEmpty(path)) return string.Empty; int end = path.Length - 1; while (end >= 0 && IsDirectorySeparator(path[end])) end--; int start = end; while (start >= 0 && !IsDirectorySeparator(path[start])) start--; start++; int name_length = end - start + 1; if (!string.IsNullOrEmpty(suffix) && suffix.Length < name_length && String.Compare(path, end - suffix.Length + 1, suffix, 0, suffix.Length, StringComparison.CurrentCultureIgnoreCase) == 0) { name_length -= suffix.Length; } return path.Substring(start, name_length); } private static bool IsDirectorySeparator(char c) { return c == Path.DirectorySeparatorChar || c == Path.AltDirectorySeparatorChar; } /// /// Returns directory name component of path. /// /// The full path. /// The directory portion of the given path. [ImplementsFunction("dirname")] [PureFunction] public static string GetDirectory(string path) { if (String.IsNullOrEmpty(path)) return null; int start = 0; int end = path.Length - 1; // advance start position beyond drive specifier: if (path.Length >= 2 && path[1] == ':' && (path[0] >= 'a' && path[0] <= 'z' || path[0] >= 'A' && path[0] <= 'Z')) { start = 2; if (path.Length == 2) return path; } // strip slashes from the end: while (end >= start && IsDirectorySeparator(path[end])) end--; if (end < start) return path.Substring(0, end + 1) + Path.DirectorySeparatorChar; // strip file name: while (end >= start && !IsDirectorySeparator(path[end])) end--; if (end < start) return path.Substring(0, end + 1) + '.'; // strip slashes from the end: while (end >= start && IsDirectorySeparator(path[end])) end--; if (end < start) return path.Substring(0, end + 1) + Path.DirectorySeparatorChar; return path.Substring(0, end + 1); } /// /// Extracts parts from a specified path. /// /// The path to be parsed. /// Array keyed by "dirname", "basename", and "extension". /// [ImplementsFunction("pathinfo")] public static object GetInfo(string path) { return GetInfo(path, PathInfoOptions.All); } /// /// Extracts part(s) from a specified path. /// /// The path to be parsed. /// Flags determining the result. /// /// If is then returns array /// keyed by "dirname", "basename", and "extension". Otherwise, /// it returns string value containing a single part of the path. /// [ImplementsFunction("pathinfo")] public static object GetInfo(string path, PathInfoOptions options) { // collect strings string dirname = null, basename = null, extension = null, filename = null; if ((options & PathInfoOptions.BaseName) != 0 || (options & PathInfoOptions.Extension) != 0 || (options & PathInfoOptions.FileName) != 0 ) basename = GetBase(path); if ((options & PathInfoOptions.DirName) != 0) dirname = GetDirectory(path); if ((options & PathInfoOptions.Extension) != 0) { int last_dot = basename.LastIndexOf('.'); if (last_dot >= 0) extension = basename.Substring(last_dot + 1); } if ((options & PathInfoOptions.FileName) != 0) { int last_dot = basename.LastIndexOf('.'); if (last_dot >= 0) filename = basename.Substring(0, last_dot); else filename = basename; } // return requested value or all of them in an associative array if (options == PathInfoOptions.All) { PhpArray result = new PhpArray(0, 4); result.Add("dirname", dirname); result.Add("basename", basename); result.Add("extension", extension); result.Add("filename", filename); return result; } if ((options & PathInfoOptions.DirName) != 0) return dirname; if ((options & PathInfoOptions.BaseName) != 0) return basename; if ((options & PathInfoOptions.Extension) != 0) return extension; if ((options & PathInfoOptions.FileName) != 0) return filename; return null; } #endregion #region tempnam, realpath, sys_get_temp_dir /// /// Creates a file with a unique path in the specified directory. /// If the directory does not exist, tempnam() may generate /// a file in the system's temporary directory, and return the name of that. /// /// The directory where the temporary file should be created. /// The prefix of the unique path. /// A unique path for a temporary file /// in the given . [ImplementsFunction("tempnam")] public static string GetTemporaryFilename(string dir, string prefix) { // makes "dir" a valid directory: if (string.IsNullOrEmpty(dir) || !System.IO.Directory.Exists(dir)) dir = Path.GetTempPath(); // makes "prefix" a valid file prefix: if (prefix == null || prefix.Length == 0 || prefix.IndexOfAny(Path.GetInvalidPathChars()) >= 0) prefix = "tmp_"; string path = Path.Combine(dir, prefix); string result; for (; ; ) { result = String.Concat(path, Interlocked.Increment(ref tempCounter), ".tmp"); if (!File.Exists(result)) { try { File.Open(result, FileMode.CreateNew).Close(); break; } catch (UnauthorizedAccessException) { // try system temp directory: dir = Path.GetTempPath(); path = Path.Combine(dir, prefix); } catch (PathTooLongException e) { PhpException.Throw(PhpError.Notice, PhpException.ToErrorMessage(e.Message)); return Path.GetTempFileName(); } catch (Exception) { } } } return result; } /// /// Returns the path of the directory PHP stores temporary files in by default. /// /// Returns the path of the temporary directory. /// Path ends with "\" [ImplementsFunction("sys_get_temp_dir")] public static string GetTempDirectoryName() { return Path.GetTempPath(); } /// /// A counter used to generate unique filenames for . /// private static int tempCounter = 0; /// /// Returns canonicalized absolute path name. /// /// Arbitrary path. /// /// The given combined with the current working directory or /// null (false in PHP) if the path is invalid or doesn't exists. /// [ImplementsFunction("realpath")] [return: CastToFalse] public static string RealPath(string path) { if (String.IsNullOrEmpty(path)) return null; // string ending slash if (IsDirectorySeparator(path[path.Length - 1])) path = path.Substring(0, path.Length - 1); string realpath = PhpPath.AbsolutePath(path); if (!File.Exists(realpath) && !System.IO.Directory.Exists(realpath)) { return null; } return realpath; } #endregion } } ================================================ FILE: Source/ClassLibrary/FileSystem.cs ================================================ /* Copyright (c) 2004-2006 Jan Benda and Tomas Matousek. The use and distribution terms for this software are contained in the file named License.txt, which can be found in the root of the Phalanger distribution. By using this software in any fashion, you are agreeing to be bound by the terms of this license. You must not remove this notice from this software. TODO: - Added support for LOCK_EX flag for file_put_contents(). (PHP 5.1.0) - Added lchown() and lchgrp() to change user/group ownership of symlinks. (PHP 5.1.3) - Fixed safe_mode check for source argument of the copy() function. (PHP 5.1.3) */ using System; using System.IO; using System.Text; using System.Text.RegularExpressions; using System.Threading; using System.Collections; using System.ComponentModel; using System.Runtime.Serialization; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using Microsoft.Win32.SafeHandles; using PHP.Core; using System.Diagnostics; #if SILVERLIGHT using PHP.CoreCLR; #endif namespace PHP.Library { #region Enums (FileOptions, WriteContentsOptions, ...) /// /// Options used in the flags argument of the 'fopen' function. /// [Flags] public enum FileOpenOptions { /// Default option for the flags argument. Empty = 0, /// Search for the file in the include_path too (1). [ImplementsConstant("FILE_USE_INCLUDE_PATH")] UseIncludePath = 0x1 // UNUSED /// Do not create a default context if none is provided (16). // UNUSED [ImplementsConstant("FILE_NO_DEFAULT_CONTEXT")] NoDefaultContext = 0x10 } /// /// Options used in the flags argument of PHP Filesystem functions. /// [Flags] public enum FileOptions { /// /// Default. /// Empty = 0, /// /// Search for the file in the include_path too (1). /// UseIncludePath = FileOpenOptions.UseIncludePath, /// /// Do not include the line break characters to the result in file() (2). /// [ImplementsConstant("FILE_IGNORE_NEW_LINES")] TrimLineEndings = 2, /// /// Do not include empty lines to the resulting in file() (4). /// [ImplementsConstant("FILE_SKIP_EMPTY_LINES")] SkipEmptyLines = 4 } /// /// The options used as the flag argument of . /// [Flags] public enum WriteContentsOptions { /// /// Empty option (default). /// Empty = 0, /// /// Search for the file in the include_path too (1). /// UseIncludePath = FileOptions.UseIncludePath, /// /// Append the given data at the end of the file in file_put_contents (8). /// [ImplementsConstant("FILE_APPEND")] AppendContents = 8, /// /// Acquire an exclusive lock on the file. /// LockExclusive = StreamLockOptions.Exclusive } /// /// The flags indicating which fields the /// method should fill in the result array. /// [Flags] public enum PathInfoOptions { /// /// Fill the "dirname" field in results. /// [ImplementsConstant("PATHINFO_DIRNAME")] DirName = 1, /// /// Fill the "basename" field in results. /// [ImplementsConstant("PATHINFO_BASENAME")] BaseName = 2, /// /// Fill the "extension" field in results. /// [ImplementsConstant("PATHINFO_EXTENSION")] Extension = 4, /// /// Fill the "filename" field in results. Since PHP 5.2.0. /// [ImplementsConstant("PATHINFO_FILENAME")] FileName = 8, /// /// All the four options result in an array returned by . /// All = DirName | BaseName | Extension | FileName } #endregion /// /// Provides PHP I/O operations using the set of StreamWrappers. /// /// public static partial class PhpFile { /// /// Name of variable that is filled with response headers in case of file_get_contents and http protocol. /// internal const string HttpResponseHeaderName = "http_response_header"; #region Constructors /// /// Registers the ClassLibrary filters for the Core streams API. /// static PhpFile() { #if !SILVERLIGHT RequestContext.RequestEnd += new Action(Clear); #endif PhpFilter.AddSystemFilter(new StringFilterFactory()); PhpFilter.AddSystemFilter(new EncodingFilterFactory()); PhpFilter.AddSystemFilter(new DecodingFilterFactory()); } #endregion #region make_absolute (Silverlight utility) #if SILVERLIGHT [ImplementsFunction("sl_mkabsolute")] public static string MakeAbsoluteUrl(string relative) { return HttpPathUtils.Combine(System.Windows.Browser.HtmlPage.Document.DocumentUri.AbsoluteUri, "../" + relative); } #endif #endregion #region fopen, tmpfile, fclose, feof, fflush /// /// Opens filename or URL using a registered StreamWrapper. /// /// The file to be opened. The schema part of the URL specifies the wrapper to be used. /// The read/write and text/binary file open mode. /// The file resource or false in case of failure. [ImplementsFunction("fopen")] [return: CastToFalse] public static PhpResource Open(string path, string mode) { return Open(path, mode, FileOpenOptions.Empty, StreamContext.Default); } /// /// Opens filename or URL using a registered StreamWrapper. /// /// The file to be opened. The schema part of the URL specifies the wrapper to be used. /// The read/write and text/binary file open mode. /// If set to true, then the include path is searched for relative filenames too. /// The file resource or false in case of failure. [ImplementsFunction("fopen")] [return: CastToFalse] public static PhpResource Open(string path, string mode, FileOpenOptions flags) { return Open(path, mode, flags, StreamContext.Default); } /// /// Opens filename or URL using a registered StreamWrapper. /// /// The file to be opened. The schema part of the URL specifies the wrapper to be used. /// The read/write and text/binary file open mode. /// If set to true, then the include path is searched for relative filenames too. /// A script context to be provided to the StreamWrapper. /// The file resource or false in case of failure. [ImplementsFunction("fopen")] [return: CastToFalse] public static PhpResource Open(string path, string mode, FileOpenOptions flags, PhpResource context) { StreamContext sc = StreamContext.GetValid(context); if (sc == null) return null; if (String.IsNullOrEmpty(path)) { PhpException.Throw(PhpError.Warning, LibResources.GetString("arg:empty", "path")); return null; } if (String.IsNullOrEmpty(mode)) { PhpException.Throw(PhpError.Warning, LibResources.GetString("arg:empty", "mode")); return null; } return PhpStream.Open(path, mode, ProcessOptions(flags), sc); } /// /// Prevents invalid options from the the options argument for StreamWrapper.Open(). /// /// Flags passed to stream opening functions. /// The StreamOpenFlags combination for the given arguments. internal static StreamOpenOptions ProcessOptions(FileOpenOptions flags) { StreamOpenOptions options = 0; if ((flags & FileOpenOptions.UseIncludePath) > 0) options |= StreamOpenOptions.UseIncludePath; if (!ScriptContext.CurrentContext.ErrorReportingDisabled) options |= StreamOpenOptions.ReportErrors; return options; } /// /// Creates a temporary file. /// /// /// Creates a temporary file with an unique name in write mode, /// returning a file handle similar to the one returned by fopen(). /// The file is automatically removed when closed (using fclose()), /// or when the script ends. /// /// [ImplementsFunction("tmpfile")] public static PhpResource OpenTemporary() { string path = PhpPath.GetTemporaryFilename(string.Empty, "php"); StreamWrapper wrapper; if (!PhpStream.ResolvePath(ref path, out wrapper, CheckAccessMode.FileMayExist, CheckAccessOptions.Empty)) return null; return wrapper.Open(ref path, "w+b", StreamOpenOptions.Temporary, StreamContext.Default); } /// /// Close an open file pointer. /// /// A PhpResource passed to the PHP function. /// True if successful. [ImplementsFunction("fclose")] public static bool Close(PhpResource handle) { PhpStream stream = PhpStream.GetValid(handle); if (stream == null) return false; if (stream.IsPersistent) { // Do not close persisten streams (incl. for example STDOUT). stream.Flush(); return true; } stream.Close(); return true; } /// /// Tests for end-of-file on a file pointer. /// /// A PhpResource passed to the PHP function. /// True if successful. [ImplementsFunction("feof")] public static bool Eof(PhpResource handle) { PhpStream stream = PhpStream.GetValid(handle); if (stream == null) return false; return stream.Eof; } /// /// Flushes the output to a file. /// /// A PhpResource passed to the PHP function. /// True if successful. [ImplementsFunction("fflush")] public static bool Flush(PhpResource handle) { PhpStream stream = PhpStream.GetValid(handle); if (stream == null) return false; return stream.Flush(); } #endregion #region fprintf, fscanf /// /// Writes the string formatted using sprintf to the given stream. /// /// A stream opened for writing. /// The format string. For details, see PHP manual. /// The arguments. /// See PHP manual for details. /// Besides, a type specifier "%C" is applicable. It converts an integer value to Unicode character. /// Number of characters written of false in case of an error. [ImplementsFunction("fprintf")] [return: CastToFalse] public static int WriteFormatted(PhpResource handle, string format, params object[] arguments) { string formatted = PhpStrings.Format(format, arguments); if (formatted == String.Empty) return 0; return WriteInternal(handle, formatted, -1); } /// /// Parses input from a file according to a format. /// /// /// /// A containing the parsed values. [ImplementsFunction("fscanf")] [return: CastToFalse] public static PhpArray ReadLineFormat(PhpResource handle, string format) { PhpStream stream = PhpStream.GetValid(handle); if (stream == null) return null; string line = stream.ReadLine(-1, null); return PhpStrings.ScanFormat(line, format); } /// /// Parses input from a file according to a format. /// /// /// /// /// /// The number of assigned values. [ImplementsFunction("fscanf")] [return: CastToFalse] public static int ReadLineFormat(PhpResource handle, string format, PhpReference arg, params PhpReference[] arguments) { PhpStream stream = PhpStream.GetValid(handle); if (stream == null) return -1; string line = stream.ReadLine(-1, null); return PhpStrings.ScanFormat(line, format, arg, arguments); } #endregion #region fgetcsv, fputcsv, str_getcsv private const char DefaultCsvDelimiter = ','; private const char DefaultCsvEnclosure = '"'; private const char DefaultCsvEscape = '\\'; [ImplementsFunction("str_getcsv")] public static PhpArray ReadStrLineCsv( string input ) { return ReadStrLineCsv(input, DefaultCsvDelimiter, DefaultCsvEnclosure, DefaultCsvEscape); } [ImplementsFunction("str_getcsv")] public static PhpArray ReadStrLineCsv(string input, char delimiter) { return ReadStrLineCsv(input, delimiter, DefaultCsvEnclosure, DefaultCsvEscape); } [ImplementsFunction("str_getcsv")] public static PhpArray ReadStrLineCsv(string input, char delimiter, char enclosure) { return ReadStrLineCsv(input, delimiter, enclosure, DefaultCsvEscape); } [ImplementsFunction("str_getcsv")] public static PhpArray ReadStrLineCsv(string input, char delimiter, char enclosure, char escape) { bool firstLine = true; return ReadLineCsv(delegate() { if (!firstLine) return null; firstLine = false; return input; }, delimiter, enclosure, escape); } [ImplementsFunction("fgetcsv")] public static object ReadLineCsv(PhpResource handle) { return ReadLineCsv(handle, 0, DefaultCsvDelimiter, DefaultCsvEnclosure, DefaultCsvEscape); } [ImplementsFunction("fgetcsv")] public static object ReadLineCsv(PhpResource handle, int length) { return ReadLineCsv(handle, length, DefaultCsvDelimiter, DefaultCsvEnclosure, DefaultCsvEscape); } [ImplementsFunction("fgetcsv")] public static object ReadLineCsv(PhpResource handle, int length, char delimiter) { return ReadLineCsv(handle, length, delimiter, DefaultCsvEnclosure, DefaultCsvEscape); } [ImplementsFunction("fgetcsv")] public static object ReadLineCsv(PhpResource handle, int length, char delimiter, char enclosure) { return ReadLineCsv(handle, length, delimiter, enclosure, DefaultCsvEscape); } /// /// /// /// /// /// /// /// The escape character used in the CSV string. /// Returns an indexed array containing the fields read. /// fgetcsv() returns NULL if an invalid handle is supplied or FALSE on other errors, including end of file. [ImplementsFunction("fgetcsv")] public static object ReadLineCsv(PhpResource handle, int length, char delimiter/*=','*/, char enclosure/*='"'*/, char escape_char /*= '\\'*/ ) { // check arguments PhpStream stream = PhpStream.GetValid(handle, FileAccess.Read); if (stream == null) return null; if (length < 0) PhpException.InvalidArgument("length", LibResources.GetString("arg:negative")); if (length <= 0) length = -1; // no length limit if (stream.Eof) return false; return ReadLineCsv(() => (stream.Eof ? null : stream.ReadLine(length, null)), delimiter, enclosure, escape_char); } /// /// CSV data line reader. /// In case of stream, it returns stream.GetLine() or null in case of EOF. /// In case of string input, it returns string for the first time, then null. /// ... /// /// Next line of CSV data or NULL in case of EOF. private delegate string CsvLineReader(); private static PhpArray ReadLineCsv( CsvLineReader reader, char delimiter/*=','*/, char enclosure/*='"'*/, char escape_char /*= '\\'*/ ) { // collect results PhpArray result = new PhpArray(); int i = 0; // index of currently scanned char string line = reader(); // currently scanned string bool eof = false; if (line == null) { result.Add(null); return result; } for (; ; ) { Debug.Assert(i - 1 < line.Length); bool previous_field_delimited = (i == 0 || line[i - 1] == delimiter); // skip initial whitespace: while (i < line.Length && Char.IsWhiteSpace(line[i]) && line[i] != delimiter) ++i; if (i >= line.Length) { if (result.Count == 0) result.Add(null); else if (previous_field_delimited) result.Add(string.Empty); break; } else if (line[i] == delimiter) { if (previous_field_delimited) result.Add(string.Empty); ++i; } else if (line[i] == enclosure) { // enclosed string follows: int start = ++i; StringBuilder field_builder = new StringBuilder(); for (; ; ) { // read until enclosure character found: while (i < line.Length && line[i] != enclosure) { if (i + 1 < line.Length && line[i] == escape_char) ++i;// skip escape char ++i; // skip following char } // end of line: if (i == line.Length) { // append including eoln: field_builder.Append(line, start, line.Length - start); // field continues on the next line: string nextLine = reader(); if (nextLine == null) { eof = true; break; } line = nextLine; start = i = 0; } else { Debug.Assert(line[i] == enclosure); i++; if (i < line.Length && line[i] == enclosure) { // escaped enclosure; add previous text including enclosure: field_builder.Append(line, start, i - start); start = ++i; } else { // end of enclosure: field_builder.Append(line, start, i - 1 - start); start = i; break; } } } if (!eof)//if (!stream.Eof) { Debug.Assert(start == i && line.Length > 0); int end = GetCsvDisclosedTextEnd(line, delimiter, ref i, escape_char); field_builder.Append(line, start, end - start); } //result.Add(Core.Convert.Quote(field_builder.ToString(), context)); //result.Add(StringUtils.EscapeStringCustom(field_builder.ToString(), charsToEscape, escape)); result.Add(field_builder.ToString()); } else { // disclosed text: int start = i; int end = GetCsvDisclosedTextEnd(line, delimiter, ref i, escape_char); //result.Add( Core.Convert.Quote(line.Substring(start, end - start), context)); //result.Add(StringUtils.EscapeStringCustom(line.Substring(start, end - start), charsToEscape, escape)); result.Add(line.Substring(start, end - start)); } } return result; } private static int GetCsvDisclosedTextEnd(string line, char delimiter, ref int i, char escape_char) { // disclosed text follows enclosed one: while (i < line.Length && line[i] != delimiter) { i++; } // field ended by eoln or delimiter: if (i == line.Length) { // do not add eoln to the field: int dec = 0; if (line[i - 1] == '\n') { dec++; if (i > 1 && line[i - 2] == '\r') dec++; } return i - dec; } else { Debug.Assert(line[i] == delimiter); // skip delimiter: return i++; } } [ImplementsFunction("fputcsv")] public static int WriteLineCsv(PhpResource handle, PhpArray fields) { return WriteLineCsv(handle, fields, DefaultCsvDelimiter, DefaultCsvEnclosure); } [ImplementsFunction("fputcsv")] public static int WriteLineCsv(PhpResource handle, PhpArray fields, char delimiter) { return WriteLineCsv(handle, fields, delimiter, DefaultCsvEnclosure); } /// /// Affected by run-time quoting (data are unqouted before written) /// (). /// [ImplementsFunction("fputcsv")] public static int WriteLineCsv(PhpResource handle, PhpArray fields, char delimiter, char enclosure) { PhpStream stream = PhpStream.GetValid(handle, FileAccess.Write); if (stream == null || !stream.CanWrite) return -1; ScriptContext context = ScriptContext.CurrentContext; char[] special_chars = { delimiter, ' ', '\\', '\t', '\r', '\n' }; string str_enclosure = enclosure.ToString(); string str_delimiter = delimiter.ToString(); int initial_position = stream.WritePosition; foreach (object field in fields.Values) { string str_field = Core.Convert.Unquote(Core.Convert.ObjectToString(field), context); if (stream.WritePosition > initial_position) stream.WriteString(str_delimiter); int special_char_index = str_field.IndexOfAny(special_chars); int enclosure_index = str_field.IndexOf(enclosure); if (special_char_index >= 0 || enclosure_index >= 0) { stream.WriteString(str_enclosure); if (enclosure_index >= 0) { // escapes enclosure characters: int start = 0; for (; ; ) { // writes string starting after the last enclosure and ending by the next one: stream.WriteString(str_field.Substring(start, enclosure_index - start + 1)); stream.WriteString(str_enclosure); start = enclosure_index + 1; if (start >= str_field.Length) break; enclosure_index = str_field.IndexOf(enclosure, start); if (enclosure_index < 0) { // remaining substring: stream.WriteString(str_field.Substring(start)); break; } } } else { stream.WriteString(str_field); } stream.WriteString(str_enclosure); } else { stream.WriteString(str_field); } } stream.WriteString("\n"); return (initial_position == -1) ? stream.WritePosition : stream.WritePosition - initial_position; } #endregion #region fread, fgetc, fwrite, fputs, fpassthru, readfile /// /// Binary-safe file read. /// /// A file stream opened for reading. /// Number of bytes to be read. /// /// The or /// of the specified length depending on file access mode. /// /// /// Result is affected by run-time quoting /// (). /// [ImplementsFunction("fread")] public static object Read(PhpResource handle, int length) { // returns an object (string or PhpBytes depending on fopen mode) PhpStream stream = PhpStream.GetValid(handle); if (stream == null) return null; if (stream.IsText) return Core.Convert.Quote(stream.ReadString(length), ScriptContext.CurrentContext); else return Core.Convert.Quote(stream.ReadBytes(length), ScriptContext.CurrentContext); } /// /// Gets character from file pointer. /// /// A file stream opened for reading. /// A or containing one character from the /// given stream or false on EOF. [ImplementsFunction("fgetc")] [return: CastToFalse] public static object ReadChar(PhpResource handle) { if (Eof(handle)) return null; return Read(handle, 1); } /// /// Binary-safe file write. /// /// The file stream (opened for writing). /// The data to be written. /// Returns the number of bytes written, or FALSE on error. /// /// Affected by run-time quoting (data are unqouted before written) /// (). /// [ImplementsFunction("fwrite")] [return: CastToFalse] public static int Write(PhpResource handle, object data) { return Write(handle, data, -1); } /// /// Binary-safe file write. /// /// The file stream (opened for writing). /// The data to be written. /// /// If the length argument is given, writing will stop after length bytes /// have been written or the end of string is reached, whichever comes first. /// /// Returns the number of bytes written, or FALSE on error. /// /// Affected by run-time quoting (data are unqouted before written) /// (). /// [ImplementsFunction("fwrite")] [return: CastToFalse] public static int Write(PhpResource handle, object data, int length) { data = Core.Convert.Unquote(data, ScriptContext.CurrentContext); return WriteInternal(handle, data, length); } /// /// Binary-safe file write. Alias for . /// /// The file stream (opened for writing). /// The data to be written. /// Returns the number of bytes written, or FALSE on error. [ImplementsFunction("fputs")] [return: CastToFalse] public static int Write2(PhpResource handle, object data) { return Write(handle, data); } /// /// Binary-safe file write. Alias for . /// /// The file stream (opened for writing). /// The data to be written. /// If the length argument is given, writing will stop after length bytes /// have been written or the end of string is reached, whichever comes first. /// Returns the number of bytes written, or FALSE on error. [ImplementsFunction("fputs")] [return: CastToFalse] public static int Write2(PhpResource handle, object data, int length) { return Write(handle, data, length); } /// /// Binary-safe file write implementation. /// /// The file stream (opened for writing). /// The data to be written. /// The number of characters to write or -1 to use the whole . /// Returns the number of bytes written, or FALSE on error. internal static int WriteInternal(PhpResource handle, object data, int length) { PhpStream stream = PhpStream.GetValid(handle); if (stream == null) return -1; if (data == null) return 0; // Note: Any data type is converted using implicit conversion in AsText/AsBinary. if (stream.IsText) { // If file OpenMode is text then use string access methods. string sub; if (length > 0) sub = PhpStream.AsText(data, length); else sub = PhpStream.AsText(data); return stream.WriteString(sub); } else { // File OpenMode is binary. PhpBytes sub; if (length > 0) sub = PhpStream.AsBinary(data, length); else sub = PhpStream.AsBinary(data); return stream.WriteBytes(sub); } } /// /// Outputs all remaining data on a file pointer. /// /// The file stream (opened for reading). /// Number of bytes written. [ImplementsFunction("fpassthru")] [return: CastToFalse] public static int PassThrough(PhpResource handle) { PhpStream stream = PhpStream.GetValid(handle); if (stream == null) return -1; if (stream.IsText) { // Use the text output buffers. int rv = 0; while (!stream.Eof) { string str = stream.ReadMaximumString(); ScriptContext.CurrentContext.Output.Write(str); rv += str.Length; } return rv; } else { // Write directly to the binary output buffers. return PhpStreams.Copy(stream, InputOutputStreamWrapper.ScriptOutput); } } /// /// Reads a file and writes it to the output buffer. /// /// The file to open. /// Returns the number of bytes read from the file. If an error occurs, false is returned. [ImplementsFunction("readfile")] [return: CastToFalse] public static int ReadFile(string path) { return ReadFile(path, FileOpenOptions.Empty, StreamContext.Default); } /// /// Reads a file and writes it to the output buffer. /// /// The file to open. /// Searches for the file in the include_path if set to true. /// Returns the number of bytes read from the file. If an error occurs, false is returned. [ImplementsFunction("readfile")] [return: CastToFalse] public static int ReadFile(string path, FileOpenOptions flags) { return ReadFile(path, flags, StreamContext.Default); } /// /// Reads a file and writes it to the output buffer. /// /// The file to open. /// Searches for the file in the include_path if set to 1. /// A resource with additional information for the stream. /// Returns the number of bytes read from the file. If an error occurs, false is returned. [ImplementsFunction("readfile")] [return: CastToFalse] public static int ReadFile(string path, FileOpenOptions flags, PhpResource context) { StreamContext sc = StreamContext.GetValid(context, true); if (sc == null) return -1; using (PhpStream res = PhpStream.Open(path, "rb", ProcessOptions(flags), sc)) { if (res == null) return -1; // Note: binary file access is the most efficient (no superfluous filtering // and no conversions - PassThrough will write directly to the OutputStream). return PassThrough(res); } } #endregion #region fgets, fgetss /// /// Gets one line of text from file pointer including the end-of-line character. /// /// The file stream opened for reading. /// A or containing the line of text or false in case of an error. /// /// /// Result is affected by run-time quoting /// (). /// /// [ImplementsFunction("fgets")] [return: CastToFalse] public static object ReadLine(PhpResource handle) { PhpStream stream = PhpStream.GetValid(handle); if (stream == null) return null; // Use the default accessor to the stream breaking at \n, no superfluous conversion. return Core.Convert.Quote(stream.ReadData(-1, true), ScriptContext.CurrentContext); } /// /// Gets one line of text from file pointer including the end-of-line character. /// /// Maximum length of the returned text. /// The file stream opened for reading. /// A or containing the line of text or false in case of an error. /// /// /// Returns a string of up to - 1 bytes read from /// the file pointed to by . /// /// /// The parameter became optional in PHP 4.2.0, if omitted, it would /// assume 1024 as the line length. As of PHP 4.3, omitting will keep /// reading from the stream until it reaches the end of the line. /// If the majority of the lines in the file are all larger than 8KB, /// it is more resource efficient for your script to specify the maximum line length. /// /// /// Result is affected by run-time quoting /// (). /// /// [ImplementsFunction("fgets")] [return: CastToFalse] public static object ReadLine(PhpResource handle, int length) { if (length <= 0) { PhpException.Throw(PhpError.Warning, LibResources.GetString("arg:negative", "Length")); return null; } PhpStream stream = PhpStream.GetValid(handle); if (stream == null) return null; // Use the default accessor to the stream breaking at \n, no superfluous conversion. return Core.Convert.Quote(stream.ReadData(length, true), ScriptContext.CurrentContext); } /// /// Gets a whole line from file pointer and strips HTML tags. /// [ImplementsFunction("fgetss")] [return: CastToFalse] public static string ReadLineStripTags(PhpResource handle) { return ReadLineStripTagsInternal(handle, -1, null); } /// /// Gets a line from file pointer and strips HTML tags. /// [ImplementsFunction("fgetss")] [return: CastToFalse] public static string ReadLineStripTags(PhpResource handle, int length) { return ReadLineStripTags(handle, length, null); } /// /// Gets one line from file pointer and strips HTML tags. /// /// /// /// /// [ImplementsFunction("fgetss")] [return: CastToFalse] public static string ReadLineStripTags(PhpResource handle, int length, string allowableTags) { if (length <= 0) { PhpException.Throw(PhpError.Warning, LibResources.GetString("arg:negative", "Length")); return null; } return ReadLineStripTagsInternal(handle, length, allowableTags); } internal static string ReadLineStripTagsInternal(PhpResource handle, int length, string allowableTags) { PhpStream stream = PhpStream.GetValid(handle); if (stream == null) return null; string line = PhpStream.AsText(stream.ReadLine(length, null)); if (line != null) { int state = stream.StripTagsState; line = PhpStrings.StripTags(line, allowableTags, ref state); stream.StripTagsState = state; } return line; } #endregion #region file, file_get_contents, file_put_contents /// /// Reads entire file into an array. /// /// /// [ImplementsFunction("file")] [return: CastToFalse] public static PhpArray ReadArray(string path) { return ReadArray(path, 0, StreamContext.Default); } /// /// Reads entire file into an array. /// /// /// /// [ImplementsFunction("file")] [return: CastToFalse] public static PhpArray ReadArray(string path, FileOptions flags) { return ReadArray(path, flags, StreamContext.Default); } /// /// Reads entire file into an array. /// /// /// /// /// The input file is split at '\n' and the separator is included in every line. /// /// /// Result is affected by run-time quoting /// (). /// [ImplementsFunction("file")] [return: CastToFalse] public static PhpArray ReadArray(string path, FileOptions flags, PhpResource context) { StreamContext sc = StreamContext.GetValid(context, true); if (sc == null) return null; ScriptContext script_context = ScriptContext.CurrentContext; using (PhpStream stream = PhpStream.Open(path, "rt", ProcessOptions((FileOpenOptions)flags), sc)) { if (stream == null) return null; PhpArray rv = new PhpArray(); while (!stream.Eof) { // Note: The last line does not contain the \n delimiter, but may be empty string line = PhpStream.AsText(stream.ReadData(-1, true)); if ((flags & FileOptions.TrimLineEndings) > 0) { int len = line.Length; if ((len > 0) && (line[len - 1] == '\n')) line = line.Substring(0, len - 1); } if ((flags & FileOptions.SkipEmptyLines) > 0) { if (line.Length == 0) continue; } rv.Add(Core.Convert.Quote(line, script_context)); } return rv; } } /// /// Reads entire file into a string. /// [ImplementsFunction("file_get_contents", FunctionImplOptions.NeedsVariables)] [return: CastToFalse] public static object ReadContents(ScriptContext scriptcontext, System.Collections.Generic.Dictionary definedVariables, string path) { return ReadContents(scriptcontext, definedVariables, path, FileOpenOptions.Empty, StreamContext.Default, -1, -1); } /// /// Reads entire file into a string. /// [ImplementsFunction("file_get_contents", FunctionImplOptions.NeedsVariables)] [return: CastToFalse] public static object ReadContents(ScriptContext scriptcontext, System.Collections.Generic.Dictionary definedVariables, string path, FileOpenOptions flags) { return ReadContents(scriptcontext, definedVariables, path, flags, StreamContext.Default, -1, -1); } /// /// Reads entire file into a string. /// [ImplementsFunction("file_get_contents", FunctionImplOptions.NeedsVariables)] [return: CastToFalse] public static object ReadContents(ScriptContext scriptcontext, System.Collections.Generic.Dictionary definedVariables, string path, FileOpenOptions flags, PhpResource context) { return ReadContents(scriptcontext, definedVariables, path, flags, context, -1, -1); } /// /// Reads entire file into a string. /// [ImplementsFunction("file_get_contents", FunctionImplOptions.NeedsVariables)] [return: CastToFalse] public static object ReadContents(ScriptContext scriptcontext, System.Collections.Generic.Dictionary definedVariables, string path, FileOpenOptions flags, PhpResource context, int offset) { return ReadContents(scriptcontext, definedVariables, path, flags, context, offset, -1); } /// /// Reads entire file into a string. /// /// /// Result is affected by run-time quoting /// (). /// [ImplementsFunction("file_get_contents", FunctionImplOptions.NeedsVariables)] [return: CastToFalse] public static object ReadContents(ScriptContext scriptcontext, System.Collections.Generic.Dictionary definedVariables, string path, FileOpenOptions flags, PhpResource context, int offset, int maxLength) { StreamContext sc = StreamContext.GetValid(context, true); if (sc == null) return null; using (PhpStream stream = PhpStream.Open(path, "rb", ProcessOptions(flags), sc)) { if (stream == null) return null; // when HTTP protocol requested, store responded headers into local variable $http_response_header: // NOTE: (J) this should be applied by HTTP wrapper itself, not only by this function. if (string.Compare(stream.Wrapper.Scheme, "http", StringComparison.OrdinalIgnoreCase) == 0) { var headers = stream.WrapperSpecificData as PhpArray; Operators.SetVariable(scriptcontext, definedVariables, HttpResponseHeaderName, headers); } // return Core.Convert.Quote(stream.ReadContents(maxLength, offset), ScriptContext.CurrentContext); } } [ImplementsFunction("file_put_contents")] [return: CastToFalse] public static int WriteContents(string path, object data) { return WriteContents(path, data, 0, StreamContext.Default); } [ImplementsFunction("file_put_contents")] [return: CastToFalse] public static int WriteContents(string path, object data, WriteContentsOptions flags) { return WriteContents(path, data, flags, StreamContext.Default); } [ImplementsFunction("file_put_contents")] [return: CastToFalse] public static int WriteContents(string path, object data, WriteContentsOptions flags, PhpResource context) { StreamContext sc = StreamContext.GetValid(context, true); if (sc == null) return -1; string mode = (flags & WriteContentsOptions.AppendContents) > 0 ? "ab" : "wb"; using (PhpStream to = PhpStream.Open(path, mode, ProcessOptions((FileOpenOptions)flags), sc)) { if (to == null) return -1; // passing array is equivalent to file_put_contents($filename, join('', $array)) PhpArray array = data as PhpArray; if (array != null) { int total = 0; foreach (object o in array.Values) { int written = to.WriteBytes(Core.Convert.ObjectToPhpBytes(o)); if (written == -1) return total; total += written; } return total; } // as of PHP 5.1.0, you may also pass a stream resource to the data parameter PhpResource resource = data as PhpResource; if (resource != null) { PhpStream from = PhpStream.GetValid(resource); if (from == null) return -1; return PhpStreams.Copy(from, to); } return to.WriteBytes(Core.Convert.ObjectToPhpBytes(data)); } } #endregion #region Seek (fseek, rewind, ftell, ftruncate) /// /// Seeks on a file pointer. /// /// The file stream resource. /// The number of bytes to seek. /// Upon success, returns 0; otherwise, returns -1. /// Note that seeking past EOF is not considered an error. [ImplementsFunction("fseek")] public static int Seek(PhpResource handle, int offset) { return Seek(handle, offset, (int)SeekOptions.Set); } /// /// Seeks on a file pointer. /// /// A file stream resource. /// The number of bytes to seek. /// The position in stream to seek from. /// May be one of the SeekOptions flags. /// Upon success, returns 0; otherwise, returns -1. /// Note that seeking past EOF is not considered an error. [ImplementsFunction("fseek")] public static int Seek(PhpResource handle, int offset, int whence) { PhpStream stream = PhpStream.GetValid(handle); if (stream == null) return -1; return stream.Seek(offset, (SeekOrigin)whence) ? 0 : -1; } /// /// Rewind the position of a file pointer. /// /// /// [ImplementsFunction("rewind")] public static bool Rewind(PhpResource handle) { PhpStream stream = PhpStream.GetValid(handle); if (stream == null) return false; return stream.Seek(0, SeekOrigin.Begin); } /// /// Tells file pointer read/write position. /// /// A file stream resource. /// [ImplementsFunction("ftell")] [return: CastToFalse] public static int Tell(PhpResource handle) { PhpStream stream = PhpStream.GetValid(handle); if (stream == null) return -1; return stream.Tell(); } /// /// Truncates a file to a given length. /// /// /// /// [ImplementsFunction("ftruncate")] public static bool Truncate(PhpResource handle, int size) { PhpStream stream = PhpStream.GetValid(handle); if (stream == null) return false; if (stream.RawStream != null && stream.RawStream.CanWrite && stream.RawStream.CanSeek) { stream.RawStream.SetLength(size); return true; } return false; } #endregion #region FileSystem Access (copy, rename, unlink, mkdir, rmdir, flock) /// /// Copies a file (even accross different stream wrappers). /// /// /// If the destination file already exists, it will be overwritten. /// /// Note: As of PHP 4.3.0, both source and dest may be URLs if the /// "fopen wrappers" have been enabled. See fopen() for more details. /// If dest is an URL, the copy operation may fail if the wrapper does /// not support overwriting of existing files. /// /// /// Source URL. /// Destination URL. /// true on success or false on failure. [ImplementsFunction("copy")] public static bool Copy(string source, string dest) { StreamWrapper reader, writer; if ((!PhpStream.ResolvePath(ref source, out reader, CheckAccessMode.FileExists, CheckAccessOptions.Empty)) || (!PhpStream.ResolvePath(ref dest, out writer, CheckAccessMode.FileExists, CheckAccessOptions.Empty))) return false; if ((reader.Scheme == "file") && (writer.Scheme == "file")) { // Copy the file. try { File.Copy(source, dest, true); return true; } catch (System.Exception) { return false; } } else { // Copy the two files using the appropriate stream wrappers. using (PhpResource from = reader.Open(ref source, "rb", StreamOpenOptions.Empty, StreamContext.Default)) { if (from == null) return false; using (PhpResource to = writer.Open(ref dest, "wb", StreamOpenOptions.Empty, StreamContext.Default)) { if (to == null) return false; int copied = PhpStreams.Copy(from, to); return copied >= 0; } } } } /// /// Renames a file. /// /// /// Both the and the /// must be handled by the same wrapper. /// /// /// /// [ImplementsFunction("rename")] public static bool Rename(string oldpath, string newpath) { StreamWrapper oldwrapper, newwrapper; if ((!PhpStream.ResolvePath(ref oldpath, out oldwrapper, CheckAccessMode.FileExists, CheckAccessOptions.Empty)) || (!PhpStream.ResolvePath(ref newpath, out newwrapper, CheckAccessMode.FileMayExist, CheckAccessOptions.Empty))) return false; if (oldwrapper != newwrapper) { PhpException.Throw(PhpError.Warning, LibResources.GetString("wrappers_must_match")); } return oldwrapper.Rename(oldpath, newpath, StreamRenameOptions.Empty, StreamContext.Default); } /// /// Deletes a file using a StreamWrapper corresponding to the given URL. /// /// An URL of a file to be deleted. /// True in case of success. [ImplementsFunction("unlink")] public static bool Delete(string path) { return Delete(path, null); } /// /// Deletes a file using a StreamWrapper corresponding to the given URL. /// /// An URL of a file to be deleted. /// StreamContext. /// True in case of success. [ImplementsFunction("unlink")] public static bool Delete(string path, PhpResource context) { if (String.IsNullOrEmpty(path)) { PhpException.Throw(PhpError.Warning, LibResources.GetString("arg:empty", "path")); return false; } StreamContext sc = StreamContext.GetValid(context, true); if (sc == null) // PHP warning is thrown by StreamContext.GetValid return false; StreamWrapper wrapper; if (!PhpStream.ResolvePath(ref path, out wrapper, CheckAccessMode.FileExists, CheckAccessOptions.Empty)) return false; // Clear the cache (the currently deleted file may have been cached) #if !SILVERLIGHT ClearStatCache(); #endif return wrapper.Unlink(path, 0, sc); } /// /// /// /// /// /// [ImplementsFunction("flock")] public static bool Lock(PhpResource handle, int operation) { int dummy = 0; return Lock(handle, operation, ref dummy); } /// /// Portable advisory file locking. /// /// A file system pointer resource that is typically created using fopen(). /// Operation is one of the following: /// LOCK_SH to acquire a shared lock (reader). /// LOCK_EX to acquire an exclusive lock (writer). /// LOCK_UN to release a lock (shared or exclusive). /// /// It is also possible to add LOCK_NB as a bitmask to one of the above operations if you don't want flock() to block while locking. (not supported on Windows) /// /// The optional third argument is set to TRUE if the lock would block (EWOULDBLOCK errno condition). (not supported on Windows) /// Returns true on success or false on failure. [ImplementsFunction("flock")] public static bool Lock(PhpResource handle, int operation, ref int wouldblock) { // Get the native file handle for the PHP resource var phpStream = PhpStream.GetValid(handle); if (phpStream == null) return false; var fileStream = phpStream.RawStream as FileStream; if (fileStream == null) return false; // if (EnvironmentUtils.IsDotNetFramework) { return Lock_dotNET(fileStream, (StreamLockOptions)operation); } else { PhpException.FunctionNotSupported(); return false; } } #region flock (Windows) // Constants passed to LockFileEx for the flags private const uint LOCKFILE_FAIL_IMMEDIATELY = 0x00000001; private const uint LOCKFILE_EXCLUSIVE_LOCK = 0x00000002; [DllImport("kernel32.dll")] static extern bool LockFileEx(SafeFileHandle hFile, uint dwFlags, uint dwReserved, uint nNumberOfBytesToLockLow, uint nNumberOfBytesToLockHigh, [In] ref NativeOverlapped lpOverlapped); [DllImport("kernel32.dll")] static extern bool UnlockFileEx(SafeFileHandle hFile, uint dwReserved, uint nNumberOfBytesToUnlockLow, uint nNumberOfBytesToUnlockHigh, [In] ref NativeOverlapped lpOverlapped); private static bool Lock_dotNET(FileStream/*!*/fileStream, StreamLockOptions op) { Debug.Assert(fileStream != null); var hFile = fileStream.SafeFileHandle; // Set up some parameters uint low = 1, high = 0; var offset = new NativeOverlapped(); bool noBlocking = (op & StreamLockOptions.NoBlocking) != 0; // bug for bug compatible with Unix UnlockFileEx(hFile, 0, low, high, ref offset); // switch (op & ~StreamLockOptions.NoBlocking) { case StreamLockOptions.Exclusive: // Exclusive lock return LockFileEx(hFile, LOCKFILE_EXCLUSIVE_LOCK + (noBlocking ? LOCKFILE_FAIL_IMMEDIATELY : 0), 0, low, high, ref offset); case StreamLockOptions.Shared: // Shared lock return LockFileEx(hFile, (noBlocking ? LOCKFILE_FAIL_IMMEDIATELY : 0), 0, low, high, ref offset); case StreamLockOptions.Unlock: // Unlock always succeeds return true; } // Bad call return false; } #endregion #endregion } } ================================================ FILE: Source/ClassLibrary/Filter.cs ================================================ /* Copyright (c) 2012 Jakub Misek The use and distribution terms for this software are contained in the file named License.txt, which can be found in the root of the Phalanger distribution. By using this software in any fashion, you are agreeing to be bound by the terms of this license. You must not remove this notice from this software. */ using System; using PHP.Core; using System.Text; using System.Collections; using System.Collections.Generic; using System.Text.RegularExpressions; using System.ComponentModel; #if SILVERLIGHT using PHP.CoreCLR; using System.Windows.Browser; #else using System.Web; using System.Diagnostics; #endif namespace PHP.Library { #region Constants public enum FilterInput : int { [ImplementsConstant("INPUT_POST")] Post = 0, [ImplementsConstant("INPUT_GET")] Get = 1, [ImplementsConstant("INPUT_COOKIE")] Cookie = 2, [ImplementsConstant("INPUT_ENV")] Env = 4, [ImplementsConstant("INPUT_SERVER")] Server = 5, [ImplementsConstant("INPUT_SESSION")] Session = 6, [ImplementsConstant("INPUT_REQUEST")] Request = 99 } /// /// Other filter ids. /// public enum FilterIds : int { /// /// Flag used to require scalar as input /// [ImplementsConstant("FILTER_REQUIRE_SCALAR")] FILTER_REQUIRE_SCALAR = 33554432, /// /// Require an array as input. /// [ImplementsConstant("FILTER_REQUIRE_ARRAY")] FILTER_REQUIRE_ARRAY = 16777216, /// /// Always returns an array. /// [ImplementsConstant("FILTER_FORCE_ARRAY")] FILTER_FORCE_ARRAY = 67108864, /// /// Use NULL instead of FALSE on failure. /// [ImplementsConstant("FILTER_NULL_ON_FAILURE")] FILTER_NULL_ON_FAILURE = 134217728, /// /// ID of "callback" filter. /// [ImplementsConstant("FILTER_CALLBACK")] FILTER_CALLBACK = 1024, } /// /// Validation filters. /// public enum FilterValidate : int { /// /// ID of "int" filter. /// [ImplementsConstant("FILTER_VALIDATE_INT")] INT = 257, /// /// ID of "boolean" filter. /// [ImplementsConstant("FILTER_VALIDATE_BOOLEAN")] BOOLEAN = 258, /// /// ID of "float" filter. /// [ImplementsConstant("FILTER_VALIDATE_FLOAT")] FLOAT = 259, /// /// ID of "validate_regexp" filter. /// [ImplementsConstant("FILTER_VALIDATE_REGEXP")] REGEXP = 272, /// /// ID of "validate_url" filter. /// [ImplementsConstant("FILTER_VALIDATE_URL")] URL = 273, /// /// ID of "validate_email" filter. /// [ImplementsConstant("FILTER_VALIDATE_EMAIL")] EMAIL = 274, /// /// ID of "validate_ip" filter. /// [ImplementsConstant("FILTER_VALIDATE_IP")] IP = 275, } /// /// Sanitize filters. /// public enum FilterSanitize : int { /// /// ID of "string" filter. /// [ImplementsConstant("FILTER_SANITIZE_STRING")] STRING = 513, /// /// ID of "stripped" filter. /// [ImplementsConstant("FILTER_SANITIZE_STRIPPED")] STRIPPED = STRING, // alias of FILTER_SANITIZE_STRING /// /// ID of "encoded" filter. /// [ImplementsConstant("FILTER_SANITIZE_ENCODED")] ENCODED = 514, /// /// ID of "special_chars" filter. /// [ImplementsConstant("FILTER_SANITIZE_SPECIAL_CHARS")] SPECIAL_CHARS = 515, /// /// ID of "unsafe_raw" filter. /// [ImplementsConstant("FILTER_UNSAFE_RAW")] FILTER_UNSAFE_RAW = 516, /// /// ID of default ("string") filter. /// [ImplementsConstant("FILTER_DEFAULT")] FILTER_DEFAULT = FILTER_UNSAFE_RAW, // alias of FILTER_UNSAFE_RAW /// /// ID of "email" filter. /// Remove all characters except letters, digits and !#$%&'*+-/=?^_`{|}~@.[]. /// [ImplementsConstant("FILTER_SANITIZE_EMAIL")] EMAIL = 517, /// /// ID of "url" filter. /// [ImplementsConstant("FILTER_SANITIZE_URL")] URL = 518, /// /// ID of "number_int" filter. /// [ImplementsConstant("FILTER_SANITIZE_NUMBER_INT")] NUMBER_INT = 519, /// /// ID of "number_float" filter. /// [ImplementsConstant("FILTER_SANITIZE_NUMBER_FLOAT")] NUMBER_FLOAT = 520, /// /// ID of "magic_quotes" filter. /// [ImplementsConstant("FILTER_SANITIZE_MAGIC_QUOTES")] MAGIC_QUOTES = 521, } [Flags] public enum FilterFlag : int { /// /// No flags. /// [ImplementsConstant("FILTER_FLAG_NONE")] NONE = 0, /// /// Allow octal notation (0[0-7]+) in "int" filter. /// [ImplementsConstant("FILTER_FLAG_ALLOW_OCTAL")] ALLOW_OCTAL = 1, /// /// Allow hex notation (0x[0-9a-fA-F]+) in "int" filter. /// [ImplementsConstant("FILTER_FLAG_ALLOW_HEX")] ALLOW_HEX = 2, /// /// Strip characters with ASCII value less than 32. /// [ImplementsConstant("FILTER_FLAG_STRIP_LOW")] STRIP_LOW = 4, /// /// Strip characters with ASCII value greater than 127. /// [ImplementsConstant("FILTER_FLAG_STRIP_HIGH")] STRIP_HIGH = 8, /// /// Encode characters with ASCII value less than 32. /// [ImplementsConstant("FILTER_FLAG_ENCODE_LOW")] ENCODE_LOW = 16, /// /// Encode characters with ASCII value greater than 127. /// [ImplementsConstant("FILTER_FLAG_ENCODE_HIGH")] ENCODE_HIGH = 32, /// /// Encode &. /// [ImplementsConstant("FILTER_FLAG_ENCODE_AMP")] ENCODE_AMP = 64, /// /// Don't encode ' and ". /// [ImplementsConstant("FILTER_FLAG_NO_ENCODE_QUOTES")] NO_ENCODE_QUOTES = 128, /// /// ? /// [ImplementsConstant("FILTER_FLAG_EMPTY_STRING_NULL")] EMPTY_STRING_NULL = 256, /// /// Allow fractional part in "number_float" filter. /// [ImplementsConstant("FILTER_FLAG_ALLOW_FRACTION")] ALLOW_FRACTION = 4096, /// /// Allow thousand separator (,) in "number_float" filter. /// [ImplementsConstant("FILTER_FLAG_ALLOW_THOUSAND")] ALLOW_THOUSAND = 8192, /// /// Allow scientific notation (e, E) in "number_float" filter. /// [ImplementsConstant("FILTER_FLAG_ALLOW_SCIENTIFIC")] ALLOW_SCIENTIFIC = 16384, /// /// Require path in "validate_url" filter. /// [ImplementsConstant("FILTER_FLAG_PATH_REQUIRED")] PATH_REQUIRED = 262144, /// /// Require query in "validate_url" filter. /// [ImplementsConstant("FILTER_FLAG_QUERY_REQUIRED")] QUERY_REQUIRED = 524288, /// /// Allow only IPv4 address in "validate_ip" filter. /// [ImplementsConstant("FILTER_FLAG_IPV4")] IPV4 = 1048576, /// /// Allow only IPv6 address in "validate_ip" filter. /// [ImplementsConstant("FILTER_FLAG_IPV6")] IPV6 = 2097152, /// /// Deny reserved addresses in "validate_ip" filter. /// [ImplementsConstant("FILTER_FLAG_NO_RES_RANGE")] NO_RES_RANGE = 4194304, /// /// Deny private addresses in "validate_ip" filter. /// [ImplementsConstant("FILTER_FLAG_NO_PRIV_RANGE")] NO_PRIV_RANGE = 8388608 } #endregion [ImplementsExtension("filter")] public static class PhpFiltering { #region (NS) filter_input_array, filter_var_array, filter_id, filter_list [ImplementsFunction("filter_input_array", FunctionImplOptions.NotSupported)] public static object filter_input_array(int type) { return filter_input_array(type, null); } /// /// Gets external variables and optionally filters them. /// [ImplementsFunction("filter_input_array", FunctionImplOptions.NotSupported)] public static object filter_input_array(int type, object definition) { return false; } /// /// Returns the filter ID belonging to a named filter. /// [ImplementsFunction("filter_id", FunctionImplOptions.NotSupported)] [return: CastToFalse] public static int filter_id(string filtername) { return -1; } /// /// Returns a list of all supported filters. /// [ImplementsFunction("filter_list", FunctionImplOptions.NotSupported)] public static PhpArray/*!*/filter_list() { return new PhpArray(); } [ImplementsFunction("filter_var_array", FunctionImplOptions.NotSupported)] public static object filter_var_array(PhpArray data) { return filter_var_array(data, null); } /// /// Gets multiple variables and optionally filters them. /// /// [ImplementsFunction("filter_var_array", FunctionImplOptions.NotSupported)] public static object filter_var_array(PhpArray data, object definition) { return null; } #endregion #region filter_input [ImplementsFunction("filter_input")] public static object filter_input(ScriptContext/*!*/context, FilterInput type, string variable_name) { return filter_input(context, type, variable_name, (int)FilterSanitize.FILTER_DEFAULT, null); } [ImplementsFunction("filter_input")] public static object filter_input(ScriptContext/*!*/context, FilterInput type, string variable_name, int filter) { return filter_input(context, type, variable_name, filter, null); } /// /// Gets a specific external variable by name and optionally filters it. /// [ImplementsFunction("filter_input")] public static object filter_input(ScriptContext/*!*/context, FilterInput type, string variable_name, int filter /*= FILTER_DEFAULT*/ , object options) { var arrayobj = GetArrayByInput(context, type); object value; if (arrayobj == null || !arrayobj.TryGetValue(variable_name, out value)) return null; return filter_var(value, filter, options); } #endregion #region filter_var, filter_has_var /// /// Checks if variable of specified type exists /// [ImplementsFunction("filter_has_var")] public static bool filter_has_var(ScriptContext/*!*/context, FilterInput type, string variable_name) { var arrayobj = GetArrayByInput(context, type); if (arrayobj != null) return arrayobj.ContainsKey(variable_name); else return false; } /// /// Returns containing required input. /// /// CUrrent . /// value. /// An instance of or null if there is no such input. private static PhpArray GetArrayByInput(ScriptContext/*!*/context, FilterInput type) { object arrayobj = null; switch (type) { case FilterInput.Get: arrayobj = context.AutoGlobals.Get.Value; break; case FilterInput.Post: arrayobj = context.AutoGlobals.Post.Value; break; case FilterInput.Server: arrayobj = context.AutoGlobals.Server.Value; break; case FilterInput.Request: arrayobj = context.AutoGlobals.Request.Value; break; case FilterInput.Env: arrayobj = context.AutoGlobals.Env.Value; break; case FilterInput.Cookie: arrayobj = context.AutoGlobals.Cookie.Value; break; case FilterInput.Session: arrayobj = context.AutoGlobals.Session.Value; break; default: return null; } // cast arrayobj to PhpArray if possible: return PhpArray.AsPhpArray(arrayobj); } [ImplementsFunction("filter_var")] public static object filter_var(object variable) { return filter_var(variable, (int)FilterSanitize.FILTER_DEFAULT, null); } [ImplementsFunction("filter_var")] public static object filter_var(object variable, int filter) { return filter_var(variable, filter, null); } /// /// Filters a variable with a specified filter. /// /// Value to filter. /// The ID of the filter to apply. /// Associative array of options or bitwise disjunction of flags. If filter accepts options, flags can be provided in "flags" field of array. For the "callback" filter, callback type should be passed. The callback must accept one argument, the value to be filtered, and return the value after filtering/sanitizing it. /// Returns the filtered data, or false if the filter fails. [ImplementsFunction("filter_var")] public static object filter_var(object variable, int filter /*= FILTER_DEFAULT*/ , object options) { switch (filter) { // // SANITIZE // case (int)FilterSanitize.FILTER_DEFAULT: return Core.Convert.ObjectToString(variable); case (int)FilterSanitize.EMAIL: // Remove all characters except letters, digits and !#$%&'*+-/=?^_`{|}~@.[]. return FilterSanitizeString(PHP.Core.Convert.ObjectToString(variable), (c) => (int)c <= 0x7f && (Char.IsLetterOrDigit(c) || c == '!' || c == '#' || c == '$' || c == '%' || c == '&' || c == '\'' || c == '*' || c == '+' || c == '-' || c == '/' || c == '=' || c == '!' || c == '?' || c == '^' || c == '_' || c == '`' || c == '{' || c == '|' || c == '}' || c == '~' || c == '@' || c == '.' || c == '[' || c == ']')); // // VALIDATE // case (int)FilterValidate.EMAIL: { var str = PHP.Core.Convert.ObjectToString(variable); return RegexUtilities.IsValidEmail(str) ? str : (object)false; } case (int)FilterValidate.INT: { int result; if (int.TryParse((PhpVariable.AsString(variable) ?? string.Empty).Trim(), out result)) { if (options != null) PhpException.ArgumentValueNotSupported("options", "!null"); return result; // TODO: options: min_range, max_range } else return false; } case (int)FilterValidate.REGEXP: { PhpArray optarray; // options = options['options']['regexp'] if ((optarray = PhpArray.AsPhpArray(options)) != null && optarray.TryGetValue("options", out options) && (optarray = PhpArray.AsPhpArray(options)) != null && optarray.TryGetValue("regexp", out options)) { if (PerlRegExp.Match(options, variable) > 0) return variable; } else PhpException.InvalidArgument("options", LibResources.GetString("option_missing", "regexp")); return false; } default: PhpException.ArgumentValueNotSupported("filter", filter); break; } return false; } #endregion #region Helper filter methods private static class RegexUtilities { private static readonly Regex ValidEmailRegex = new Regex( @"^(?("")(""[^""]+?""@)|(([0-9a-z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9a-z])@))" + @"(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9a-z][-\w]*[0-9a-z]*\.)+[a-z0-9]{2,17}))$", RegexOptions.IgnoreCase | RegexOptions.Compiled); public static bool IsValidEmail(string strIn) { if (String.IsNullOrEmpty(strIn) || strIn.Length > 320) return false; // Use IdnMapping class to convert Unicode domain names. try { strIn = Regex.Replace(strIn, @"(@)(.+)$", DomainMapper); } catch (ArgumentException) { return false; } // Return true if strIn is in valid e-mail format. return ValidEmailRegex.IsMatch(strIn); } private static string DomainMapper(Match match) { // IdnMapping class with default property values. var idn = new System.Globalization.IdnMapping(); string domainName = match.Groups[2].Value; //try //{ domainName = idn.GetAscii(domainName); //} //catch (ArgumentException) //{ // invalid = true; //} return match.Groups[1].Value + domainName; } } /// /// Remove all characters not valid by given . /// private static string FilterSanitizeString(string str, Predicate/*!*/predicate) { Debug.Assert(predicate != null); // nothing to sanitize: if (string.IsNullOrEmpty(str)) return string.Empty; // check if all the characters are valid first: bool allvalid = true; foreach (var c in str) if (!predicate(c)) { allvalid = false; break; } if (allvalid) { return str; } else { // remove not allowed characters: StringBuilder newstr = new StringBuilder(str.Length); foreach (char c in str) if (predicate(c)) newstr.Append(c); return newstr.ToString(); } } #endregion } } ================================================ FILE: Source/ClassLibrary/Functions.cs ================================================ /* Copyright (c) 2004-2006 Tomas Matousek. The use and distribution terms for this software are contained in the file named License.txt, which can be found in the root of the Phalanger distribution. By using this software in any fashion, you are agreeing to be bound by the terms of this license. You must not remove this notice from this software. */ using System; using System.Reflection; using System.ComponentModel; using System.Collections.Generic; using PHP.Core; using PHP.Core.Reflection; using System.Diagnostics; #if SILVERLIGHT using PHP.CoreCLR; #endif namespace PHP.Library { /// /// Provides means for PHP functions handling. /// /// public static class PhpFunctions { #region call_user_func, call_user_func_array, create_function /// /// Calls a function or a method defined by callback with given arguments. /// /// DTypeDesc of the caller's class context. Can be UnknownTypeDesc. /// The function or metod designation. /// The arguments. /// The return value. [ImplementsFunction("call_user_func", FunctionImplOptions.NeedsClassContext)] public static object CallUserFunction(DTypeDesc caller, PhpCallback function, params object[] args) { if (function == null) { PhpException.ArgumentNull("function"); return null; } if (function.IsInvalid) return null; // invoke the callback: return PhpVariable.Dereference(function.Invoke(caller, args)); } /// /// Calls a function or a method defined by callback with arguments stored in an array. /// /// DTypeDesc of the caller's class context. Can be UnknownTypeDesc. /// The function or method designation. /// The arguments. Can be null. /// The returned value. [ImplementsFunction("call_user_func_array", FunctionImplOptions.NeedsClassContext)] public static object CallUserFunctionArray(DTypeDesc caller, PhpCallback function, PhpArray args) { object[] args_array; if (args != null) { args_array = new object[args.Count]; args.CopyValuesTo(args_array, 0); } else { args_array = ArrayUtils.EmptyObjects; } return CallUserFunction(caller, function, args_array); } /// /// Creates a new lambda function given its arguments and body. /// /// A source code defining function signature, e.g. "$a,MyClass $b,$c = null". /// A source code defining function body, e.g. "return $a + $b->x + $c;" /// A name of the created function. [ImplementsFunction("create_function", FunctionImplOptions.CaptureEvalInfo /*| FunctionImplOptions.Special*/)] [PureFunction(typeof(PhpFunctions), "CreateFunction_Analyze")] public static string CreateFunction(string args, string body) { var context = ScriptContext.CurrentContext; return DynamicCode.CreateLambdaFunction(args, body, context, context.GetCapturedSourceCodeDescriptor()); } #region analyzer of create_function public static PHP.Core.Compiler.AST.FunctionCallEvaluateInfo CreateFunction_Analyze( Analyzer analyzer, PHP.Core.AST.CallSignature callSignature, string args, string body) { if (analyzer.IsInsideIncompleteClass()) return null; // in this case, the DirectFnCall will not be Emitted. Therefore the lambda routine will not be declared and compilation will fail when emitting not fully declared lambda FunctionDecl. // has to be a valid identifier: // actually this name is never used then string function_name = "__" + Guid.NewGuid().ToString().Replace('-', '_'); //DynamicCode.GenerateLambdaName(args, body); string prefix1, prefix2; DynamicCode.GetLamdaFunctionCodePrefixes(function_name, args, out prefix1, out prefix2); var pos_args = new PHP.Core.Text.TextSpan(analyzer.SourceUnit.LineBreaks, callSignature.Parameters[0].Span); var pos_body = new PHP.Core.Text.TextSpan(analyzer.SourceUnit.LineBreaks, callSignature.Parameters[1].Span); // function __XXXXXX(){} string fill = GetInlinedLambdaCodeFill(pos_args, pos_body); string code = String.Concat(prefix2, fill, body, "}"); // parses function source code: // the position of the first character of the parsed code: // (note that escaped characters distort position a little bit, which cannot be eliminated so easily) var counter = new PHP.Core.Parsers.Parser.ReductionsCounter(); var ast = analyzer.BuildAst(pos_args.Start.Position - prefix1.Length + 1, code, counter); if (ast == null || ast.Statements == null) return null; // the function cannot be parsed Debug.Assert(counter.FunctionCount == 1); var decl_node = (PHP.Core.AST.FunctionDecl)ast.Statements[0]; // adds declaration to the end of the global code statement list: analyzer.AddLambdaFcnDeclaration(decl_node); // return new PHP.Core.Compiler.AST.FunctionCallEvaluateInfo() { //.inlined = InlinedFunction.CreateFunction; emitDeclareLamdaFunction = true, // modify declaration: newRoutine = Core.Compiler.AST.FunctionDeclCompilerHelper.ConvertToLambda(decl_node, analyzer), }; } /// /// Gets a string which is used as a fill in the code to be parsed in order to maintain /// correct token positioning. /// /// A position of string literal holding source code for lambda function arguments. /// A position of string literal holding source code for the body. /// A string containing spaces and end-of-line characters '\n'. private static string GetInlinedLambdaCodeFill(PHP.Core.Text.TextSpan args, PHP.Core.Text.TextSpan body) { int delta_lines = body.FirstLine - args.LastLine; if (delta_lines == 0) { // ....args.......'_____,_______________'.......body..... // ...............)_________fill________{................ return new String(' ', body.FirstColumn - args.LastColumn - 1); } else { // source: // .....args.....'_____\r\n // _________,_____\r\n // ____________'......body..... // code to parse: // .....args....'\n // \n // ____fill____{.....body...... // the same number of lines as it is in the source file + leading columns: return new System.Text.StringBuilder(delta_lines + body.FirstColumn). Append('\n', delta_lines).Append(' ', body.FirstColumn).ToString(); } } #endregion #endregion #region assert, assert_options /// /// Assertion options. /// public enum AssertOption : int { [ImplementsConstant("ASSERT_ACTIVE")] ASSERT_ACTIVE, [ImplementsConstant("ASSERT_WARNING")] ASSERT_WARNING, [ImplementsConstant("ASSERT_BAIL")] ASSERT_BAIL, [ImplementsConstant("ASSERT_QUIET_EVAL")] ASSERT_QUIET_EVAL, [ImplementsConstant("ASSERT_CALLBACK")] ASSERT_CALLBACK, } [ImplementsFunction("assert", FunctionImplOptions.CaptureEvalInfo /*| FunctionImplOptions.Special*/)] public static bool Assert(object assertion) { return Assert(assertion, null); } [ImplementsFunction("assert", FunctionImplOptions.CaptureEvalInfo /*| FunctionImplOptions.Special*/)] public static bool Assert(object assertion, string description) { ScriptContext context = ScriptContext.CurrentContext; var descriptor = context.GetCapturedSourceCodeDescriptor(); return DynamicCode.CheckAssertion(assertion, null, context, descriptor.ContainingSourcePath, descriptor.Line, descriptor.Column, null); } [ImplementsFunction("assert_options", FunctionImplOptions.NotSupported)] public static object AssertOptions(int what, object value) { return value; } #endregion #region func_num_args, func_get_arg, func_get_args /// /// Retrieves the number of arguments passed to the current user-function. /// /// [ImplementsFunction("func_num_args", FunctionImplOptions.NeedsFunctionArguments)] public static int GetArgsNumber() { int arg_count, type_arg_count; return ScriptContext.CurrentContext.Stack.GetArgCount(out arg_count, out type_arg_count) ? arg_count : -1; } /// /// Retrieves an argument passed to the current user-function. /// /// [ImplementsFunction("func_get_arg", FunctionImplOptions.NeedsFunctionArguments)] [return: PhpDeepCopy] public static object GetArg(int index) { return ScriptContext.CurrentContext.Stack.GetArgument(index); } /// /// Returns an array of arguments of the current user-defined function. /// /// /// Also throws warning if called from global scope. [ImplementsFunction("func_get_args", FunctionImplOptions.NeedsFunctionArguments)] [return: PhpDeepCopy] [return: CastToFalse] public static PhpArray GetArgs() { PhpArray result = ScriptContext.CurrentContext.Stack.GetArguments(); if (result != null) { result.InplaceCopyOnReturn = true; } return result; } #endregion #region func_num_generic_args, func_get_generic_arg, func_get_generic_args (PHP/CLR) /// /// Retrieves the number of generic type arguments passed to the current user-function. /// [ImplementsFunction("func_num_generic_args", FunctionImplOptions.NeedsFunctionArguments)] public static int GetGenericArgsNumber() { int arg_count, type_arg_count; return ScriptContext.CurrentContext.Stack.GetArgCount(out arg_count, out type_arg_count) ? type_arg_count : -1; } /// /// Retrieves a fully qualified name of the generic type argument passed to the current user-function. /// [ImplementsFunction("func_get_generic_arg", FunctionImplOptions.NeedsFunctionArguments)] [return: PhpDeepCopy] public static string GetGenericArg(int index) { DTypeDesc type_desc = ScriptContext.CurrentContext.Stack.GetTypeArgument(index); return (type_desc != null) ? type_desc.MakeFullName() : null; } /// /// Returns an array of names of generic type arguments of the current user-defined function. /// [ImplementsFunction("func_get_generic_args", FunctionImplOptions.NeedsFunctionArguments)] [return: PhpDeepCopy] public static PhpArray GetGenericArgs() { DTypeDesc[] type_descs = ScriptContext.CurrentContext.Stack.GetTypeArguments(); if (type_descs == null) return null; PhpArray result = new PhpArray(type_descs.Length, 0); foreach (DTypeDesc type_desc in type_descs) result.Add(type_desc.MakeFullName()); result.InplaceCopyOnReturn = true; return result; } #endregion #region function_exists, get_defined_functions /// /// Determines whether a function with a specified name exists. /// /// The name of the function. /// Wheter the function exists. /// User functions which are declared conditionally and was not declared yet is considered as not existent. [ImplementsFunction("function_exists"/*, FunctionImplOptions.Special*/)] [PureFunction(typeof(PhpFunctions), "Exists_Analyze")] public static bool Exists(string name) { return ScriptContext.CurrentContext.ResolveFunction(name, null, true) != null; } #region analyzer of function_exists public static PHP.Core.Compiler.AST.FunctionCallEvaluateInfo Exists_Analyze(Analyzer analyzer, string name) { QualifiedName? alias; DRoutine routine = analyzer.SourceUnit.ResolveFunctionName( new QualifiedName(new Name(name)), analyzer.CurrentScope, out alias, null, Core.Text.Span.Invalid, false); if (routine == null || routine.IsUnknown) return null; // function is not known at the compilation time. However it can be defined at the runtime (dynamic include, script library, etc). return new PHP.Core.Compiler.AST.FunctionCallEvaluateInfo() { value = true // function is definitely known the the compilation time }; } #endregion /// /// Retrieves defined functions. /// /// /// The containing two entries with keys "internal" and "user". /// The former's value is a containing PHP library functions as values. /// The latter's value is a containing user defined functions as values. /// Keys of both these arrays are integers starting from 0. /// /// User functions which are declared conditionally and was not declared yet is considered as not existent. [ImplementsFunction("get_defined_functions")] public static PhpArray GetDefinedFunctions() { PhpArray result = new PhpArray(0, 2); PhpArray library = new PhpArray(0, 500); PhpArray user = new PhpArray(); ScriptContext.CurrentContext.GetDeclaredFunctions(user, library); result["internal"] = library; result["user"] = user; return result; } #endregion #region register_shutdown_function /// /// Registers callback which will be called when script processing is complete but before the request /// has been complete. /// Function has no return value. /// /// The function which is called after main code of the script is finishes execution. /// Parameters for the function. /// /// Although, there is explicitly written in the PHP manual that it is not possible /// to send an output to a browser via echo or another output handling functions you can actually do so. /// There is no such limitation with Phalanger. /// [ImplementsFunction("register_shutdown_function")] public static void RegisterShutdownFunction(PhpCallback/*!*/ function, params object[] parameters) { if (function == null) { PhpException.ArgumentNull("function"); return; } ScriptContext.CurrentContext.RegisterShutdownCallback(function, parameters); } #endregion #region NS: register_tick_function, unregister_tick_function /// /// Not supported. /// [ImplementsFunction("register_tick_function", FunctionImplOptions.NotSupported)] [EditorBrowsable(EditorBrowsableState.Never)] public static void RegisterTickFunction(PhpCallback function) { PhpException.FunctionNotSupported(); } /// /// Not supported. /// [ImplementsFunction("register_tick_function", FunctionImplOptions.NotSupported)] [EditorBrowsable(EditorBrowsableState.Never)] public static void RegisterTickFunction(PhpCallback function, object arg) { PhpException.FunctionNotSupported(); } /// /// Not supported. /// [ImplementsFunction("unregister_tick_function", FunctionImplOptions.NotSupported)] [EditorBrowsable(EditorBrowsableState.Never)] public static void UnregisterTickFunction(PhpCallback function) { PhpException.FunctionNotSupported(); } #endregion } } ================================================ FILE: Source/ClassLibrary/Generated/StrToTimeScanner.cs ================================================ namespace PHP.Library.StrToTime { #region User Code using System; using System.Collections.Generic; /* Copyright (c) 2005-2006 Tomas Matousek. Based on PHP5 implementation by Derick Rethans . The use and distribution terms for this software are contained in the file named License.txt, which can be found in the root of the Phalanger distribution. By using this software in any fashion, you are agreeing to be bound by the terms of this license. You must not remove this notice from this software. */ #endregion internal class Scanner { public enum LexicalStates { YYINITIAL = 0, } [Flags] private enum AcceptConditions : byte { NotAccept = 0, AcceptOnStart = 1, AcceptOnEnd = 2, Accept = 4 } private const int NoState = -1; private const char BOL = (char)128; private const char EOF = (char)129; private Tokens yyreturn; internal DateInfo Time { get { return time; } } private DateInfo time = new DateInfo(); internal int Errors { get { return errors; } } private int errors = 0; internal int Position { get { return pos; } } private int pos = 0; private string str; void INIT() { str = new string(buffer, token_start, token_end - token_start); pos = 0; } void DEINIT() { } private System.IO.TextReader reader; private char[] buffer = new char[512]; // whether the currently parsed token is being expanded (yymore has been called): private bool expanding_token; // offset in buffer where the currently parsed token starts: private int token_start; // offset in buffer where the currently parsed token chunk starts: private int token_chunk_start; // offset in buffer one char behind the currently parsed token (chunk) ending character: private int token_end; // offset of the lookahead character (number of characters parsed): private int lookahead_index; // number of characters read into the buffer: private int chars_read; private bool yy_at_bol = false; public LexicalStates CurrentLexicalState { get { return current_lexical_state; } set { current_lexical_state = value; } } private LexicalStates current_lexical_state; public Scanner(System.IO.TextReader reader) { Initialize(reader, LexicalStates.YYINITIAL); } public void Initialize(System.IO.TextReader reader, LexicalStates lexicalState, bool atBol) { this.expanding_token = false; this.token_start = 0; this.chars_read = 0; this.lookahead_index = 0; this.token_chunk_start = 0; this.token_end = 0; this.reader = reader; this.yy_at_bol = atBol; this.current_lexical_state = lexicalState; } public void Initialize(System.IO.TextReader reader, LexicalStates lexicalState) { Initialize(reader, lexicalState, false); } #region Accept #pragma warning disable 162 Tokens Accept0(int state,out bool accepted) { accepted = true; switch(state) { case 1: // #line 698 { break; } break; case 2: // #line 702 { return Tokens.ERROR; } break; case 3: // #line 644 { INIT(); errors += time.SetTimeZone(str, ref pos) ? 0 : 1; DEINIT(); return Tokens.TIMEZONE; } break; case 4: // #line 435 { INIT(); if (time.have_date!=0) { return Tokens.ERROR; } time.HAVE_DATE(); time.d = DateInfo.ParseUnsignedInt(str, ref pos, 2); DateInfo.SkipDaySuffix(str, ref pos); time.m = DateInfo.ParseMonth(str, ref pos); DEINIT(); return Tokens.DATE_TEXT; } break; case 5: // #line 198 { INIT(); time.HAVE_RELATIVE(); time.UNHAVE_DATE(); time.UNHAVE_TIME(); int i = DateInfo.ParseSignedInt(str, ref pos, 24); time.y = 1970; time.m = 1; time.d = 1; time.h = time.i = time.s = 0; time.f = 0.0; time.relative.s += i; time.z = 0; time.HAVE_TZ(); DEINIT(); return Tokens.RELATIVE; } break; case 6: // #line 421 { INIT(); if (time.have_date!=0) { return Tokens.ERROR; } time.HAVE_DATE(); time.m = DateInfo.ParseMonth(str, ref pos); time.d = DateInfo.ParseUnsignedInt(str, ref pos, 2); time.y = DateInfo.ParseUnsignedInt(str, ref pos, 4); time.y = DateInfo.ProcessYear(time.y); DEINIT(); return Tokens.DATE_TEXT; } break; case 7: // #line 243 { INIT(); if (time.have_time!=0) { return Tokens.ERROR; } time.HAVE_TIME(); time.h = DateInfo.ParseUnsignedInt(str, ref pos, 2); time.i = DateInfo.ParseUnsignedInt(str, ref pos, 2); if (pos < str.Length && (str[pos] == ':' || str[pos] == '.')) { time.s = DateInfo.ParseUnsignedInt(str, ref pos, 2); if (pos < str.Length && str[pos] == '.') time.f = DateInfo.ParseFraction(str, ref pos, 8); } if (pos < str.Length) errors += time.SetTimeZone(str, ref pos) ? 0 : 1; DEINIT(); return Tokens.TIME24_WITH_ZONE; } break; case 8: // #line 306 { INIT(); if (time.have_date!=0) { return Tokens.ERROR; } time.HAVE_DATE(); time.m = DateInfo.ParseUnsignedInt(str, ref pos, 2); time.d = DateInfo.ParseUnsignedInt(str, ref pos, 2); if (pos < str.Length && str[pos] == '/') { time.y = DateInfo.ParseUnsignedInt(str, ref pos, 4); time.y = DateInfo.ProcessYear(time.y); } DEINIT(); return Tokens.AMERICAN; } break; case 9: // #line 336 { INIT(); if (time.have_date!=0) { return Tokens.ERROR;} time.HAVE_DATE(); time.d = DateInfo.ParseUnsignedInt(str, ref pos, 2); DateInfo.SkipDaySuffix(str, ref pos); time.m = DateInfo.ParseMonth(str, ref pos); time.y = DateInfo.ParseUnsignedInt(str, ref pos, 4); time.y = DateInfo.ProcessYear(time.y); DEINIT(); return Tokens.DATE_FULL; } break; case 10: // #line 219 { INIT(); if (time.have_time!=0) { return Tokens.ERROR; } time.HAVE_TIME(); time.h = DateInfo.ParseUnsignedInt(str, ref pos, 2); if (pos < str.Length && (str[pos] == ':' || str[pos] == '.')) { time.i = DateInfo.ParseUnsignedInt(str, ref pos, 2); if (pos < str.Length && (str[pos] == ':' || str[pos] == '.')) { time.s = DateInfo.ParseUnsignedInt(str, ref pos, 2); } } if (!time.SetMeridian(str, ref pos)) { return Tokens.ERROR; } DEINIT(); return Tokens.TIME12; } break; case 11: // #line 597 { INIT(); time.relative.y = -time.relative.y; time.relative.m = -time.relative.m; time.relative.d = -time.relative.d; time.relative.h = -time.relative.h; time.relative.i = -time.relative.i; time.relative.s = -time.relative.s; time.relative.weekday = -time.relative.weekday; DEINIT(); return Tokens.AGO; } break; case 12: // #line 630 { INIT(); time.HAVE_RELATIVE(); time.HAVE_WEEKDAY_RELATIVE(); time.UNHAVE_TIME(); time.SetWeekDay(DateInfo.ReadToSpace(str,ref pos)); time.relative.weekday_behavior = 1; DEINIT(); return Tokens.WEEKDAY; } break; case 13: // #line 163 { INIT(); DEINIT(); return Tokens.RELATIVE; } break; case 14: // #line 266 { INIT(); switch (time.have_time) { case 0: time.h = DateInfo.ParseUnsignedInt(str, ref pos, 2); time.i = DateInfo.ParseUnsignedInt(str, ref pos, 2); time.s = 0; break; case 1: time.y = DateInfo.ParseUnsignedInt(str, ref pos, 4); break; default: DEINIT(); return Tokens.ERROR; } time.have_time++; DEINIT(); return Tokens.GNU_NOCOLON; } break; case 15: // #line 588 { INIT(); time.y = DateInfo.ParseUnsignedInt(str, ref pos, 4); DEINIT(); return Tokens.CLF; } break; case 16: // #line 682 { INIT(); time.HAVE_RELATIVE(); while(pos < str.Length) { int amount = DateInfo.ParseSignedInt(str, ref pos, 24); while (pos < str.Length && str[pos] == ' ') pos++; time.SetRelative(DateInfo.ReadToSpace(str, ref pos), amount, 0); } DEINIT(); return Tokens.RELATIVE; } break; case 17: // #line 170 { INIT(); time.UNHAVE_TIME(); time.HAVE_TIME(); time.h = 12; DEINIT(); return Tokens.RELATIVE; } break; case 18: // #line 351 { INIT(); if (time.have_date!=0) { return Tokens.ERROR; } time.HAVE_DATE(); time.y = DateInfo.ParseUnsignedInt(str, ref pos, 4); time.m = DateInfo.ParseUnsignedInt(str, ref pos, 2); time.d = DateInfo.ParseUnsignedInt(str, ref pos, 2); time.y = DateInfo.ProcessYear(time.y); DEINIT(); return Tokens.ISO_DATE; } break; case 19: // #line 406 { INIT(); if (time.have_date!=0) { return Tokens.ERROR; } time.HAVE_DATE(); time.y = DateInfo.ParseUnsignedInt(str, ref pos, 4); time.m = DateInfo.ParseMonth(str, ref pos); time.d = 1; time.y = DateInfo.ProcessYear(time.y); DEINIT(); return Tokens.DATE_NO_DAY; } break; case 20: // #line 392 { INIT(); if (time.have_date!=0) { return Tokens.ERROR; } time.HAVE_DATE(); time.m = DateInfo.ParseMonth(str, ref pos); time.y = DateInfo.ParseUnsignedInt(str, ref pos, 4); time.d = 1; time.y = DateInfo.ProcessYear(time.y); DEINIT(); return Tokens.DATE_NO_DAY; } break; case 21: // #line 653 { INIT(); if (time.have_date!=0) { return Tokens.ERROR; } time.HAVE_DATE(); time.m = DateInfo.ParseMonth(str, ref pos); time.d = DateInfo.ParseUnsignedInt(str, ref pos, 2); if (time.have_time!=0) { return Tokens.ERROR; } time.HAVE_TIME(); time.h = DateInfo.ParseUnsignedInt(str, ref pos, 2); time.i = DateInfo.ParseUnsignedInt(str, ref pos, 2); if (pos < str.Length && str[pos] == ':') { time.s = DateInfo.ParseUnsignedInt(str, ref pos, 2); if (pos < str.Length && str[pos] == '.') time.f = DateInfo.ParseFraction(str, ref pos, 8); } if (pos < str.Length) errors += time.SetTimeZone(str, ref pos) ? 0 : 1; DEINIT(); return Tokens.SHORTDATE_WITH_TIME; } break; case 22: // #line 180 { INIT(); time.UNHAVE_TIME(); DEINIT(); return Tokens.RELATIVE; } break; case 23: // #line 378 { INIT(); if (time.have_date!=0) { return Tokens.ERROR;} time.HAVE_DATE(); time.d = DateInfo.ParseUnsignedInt(str, ref pos, 2); time.m = DateInfo.ParseUnsignedInt(str, ref pos, 2); time.y = DateInfo.ParseUnsignedInt(str, ref pos, 2); time.y = DateInfo.ProcessYear(time.y); DEINIT(); return Tokens.DATE_FULL_POINTED; } break; case 24: // #line 290 { INIT(); if (time.have_time!=0) { return Tokens.ERROR; } time.HAVE_TIME(); time.h = DateInfo.ParseUnsignedInt(str, ref pos, 2); time.i = DateInfo.ParseUnsignedInt(str, ref pos, 2); time.s = DateInfo.ParseUnsignedInt(str, ref pos, 2); if (pos < str.Length) errors += time.SetTimeZone(str, ref pos) ? 0 : 1; DEINIT(); return Tokens.ISO_NOCOLON; } break; case 25: // #line 486 { INIT(); if (time.have_date!=0) { return Tokens.ERROR; } time.HAVE_DATE(); time.y = DateInfo.ParseUnsignedInt(str, ref pos, 4); time.d = DateInfo.ParseUnsignedInt(str, ref pos, 3); time.m = 1; time.y = DateInfo.ProcessYear(time.y); DEINIT(); return Tokens.PG_YEARDAY; } break; case 26: // #line 519 { { int w, d; INIT(); if (time.have_date!=0) { return Tokens.ERROR; } time.HAVE_DATE(); time.HAVE_RELATIVE(); time.y = DateInfo.ParseUnsignedInt(str, ref pos, 4); w = DateInfo.ParseUnsignedInt(str, ref pos, 2); d = 1; time.m = 1; time.d = 1; time.relative.d = DateInfo.WeekToDay(time.y, w, d); DEINIT(); return Tokens.ISO_WEEK; } } break; case 27: // #line 612 { INIT(); time.HAVE_RELATIVE(); while (pos < str.Length) { int behavior; int amount = DateInfo.ParseRelativeText(str, ref pos, out behavior); while (pos < str.Length && str[pos] == ' ') pos++; time.SetRelative(DateInfo.ReadToSpace(str,ref pos), amount, behavior); } DEINIT(); return Tokens.RELATIVE; } break; case 28: // #line 365 { INIT(); if (time.have_date!=0) { return Tokens.ERROR;} time.HAVE_DATE(); time.d = DateInfo.ParseUnsignedInt(str, ref pos, 2); time.m = DateInfo.ParseUnsignedInt(str, ref pos, 2); time.y = DateInfo.ParseUnsignedInt(str, ref pos, 4); DEINIT(); return Tokens.DATE_FULL_POINTED; } break; case 29: // #line 448 { INIT(); if (time.have_date!=0) { return Tokens.ERROR; } time.HAVE_DATE(); time.y = DateInfo.ParseUnsignedInt(str, ref pos, 4); time.m = DateInfo.ParseUnsignedInt(str, ref pos, 2); time.d = DateInfo.ParseUnsignedInt(str, ref pos, 2); DEINIT(); return Tokens.DATE_NOCOLON; } break; case 30: // #line 500 { int week, day; INIT(); if (time.have_date!=0) { return Tokens.ERROR; } time.HAVE_DATE(); time.HAVE_RELATIVE(); time.y = DateInfo.ParseUnsignedInt(str, ref pos, 4); week = DateInfo.ParseUnsignedInt(str, ref pos, 2); day = DateInfo.ParseUnsignedInt(str, ref pos, 1); time.m = 1; time.d = 1; time.relative.d = DateInfo.WeekToDay(time.y, week, day); DEINIT(); return Tokens.ISO_WEEK; } break; case 31: // #line 540 { INIT(); if (time.have_date!=0) { return Tokens.ERROR; } time.HAVE_DATE(); time.m = DateInfo.ParseMonth(str, ref pos); time.d = DateInfo.ParseUnsignedInt(str, ref pos, 2); time.y = DateInfo.ParseUnsignedInt(str, ref pos, 4); time.y = DateInfo.ProcessYear(time.y); DEINIT(); return Tokens.PG_TEXT; } break; case 32: // #line 188 { INIT(); time.HAVE_RELATIVE(); time.UNHAVE_TIME(); time.relative.d = 1; DEINIT(); return Tokens.RELATIVE; } break; case 33: // #line 554 { INIT(); if (time.have_date!=0) { return Tokens.ERROR; } time.HAVE_DATE(); time.y = DateInfo.ParseUnsignedInt(str, ref pos, 4); time.m = DateInfo.ParseMonth(str, ref pos); time.d = DateInfo.ParseUnsignedInt(str, ref pos, 2); time.y = DateInfo.ProcessYear(time.y); DEINIT(); return Tokens.PG_TEXT; } break; case 34: // #line 153 { INIT(); time.HAVE_RELATIVE(); time.UNHAVE_TIME(); time.relative.d = -1; DEINIT(); return Tokens.RELATIVE; } break; case 35: // #line 323 { INIT(); if (time.have_date!=0) { return Tokens.ERROR; } time.HAVE_DATE(); time.y = DateInfo.ParseUnsignedInt(str, ref pos, 4); time.m = DateInfo.ParseUnsignedInt(str, ref pos, 2); time.d = DateInfo.ParseUnsignedInt(str, ref pos, 2); DEINIT(); return Tokens.ISO_DATE; } break; case 36: // #line 461 { INIT(); if (time.have_time!=0) { return Tokens.ERROR; } time.HAVE_TIME(); if (time.have_date!=0) { return Tokens.ERROR; } time.HAVE_DATE(); time.y = DateInfo.ParseUnsignedInt(str, ref pos, 4); time.m = DateInfo.ParseUnsignedInt(str, ref pos, 2); time.d = DateInfo.ParseUnsignedInt(str, ref pos, 2); time.h = DateInfo.ParseUnsignedInt(str, ref pos, 2); time.i = DateInfo.ParseUnsignedInt(str, ref pos, 2); time.s = DateInfo.ParseUnsignedInt(str, ref pos, 2); if (pos < str.Length && str[pos] == '.') { time.f = DateInfo.ParseFraction(str, ref pos, 9); if (pos < str.Length) errors += time.SetTimeZone(str, ref pos) ? 0 : 1; } DEINIT(); return Tokens.XMLRPC_SOAP; } break; case 37: // #line 568 { INIT(); if (time.have_time!=0) { return Tokens.ERROR; } time.HAVE_TIME(); if (time.have_date!=0) { return Tokens.ERROR; } time.HAVE_DATE(); time.d = DateInfo.ParseUnsignedInt(str, ref pos, 2); time.m = DateInfo.ParseMonth(str, ref pos); time.y = DateInfo.ParseUnsignedInt(str, ref pos, 4); time.h = DateInfo.ParseUnsignedInt(str, ref pos, 2); time.i = DateInfo.ParseUnsignedInt(str, ref pos, 2); time.s = DateInfo.ParseUnsignedInt(str, ref pos, 2); errors += time.SetTimeZone(str, ref pos) ? 0 : 1; DEINIT(); return Tokens.CLF; } break; case 39: goto case 1; case 40: goto case 2; case 41: goto case 3; case 42: goto case 4; case 43: goto case 6; case 44: goto case 7; case 45: goto case 8; case 46: goto case 9; case 47: goto case 10; case 48: goto case 12; case 49: goto case 16; case 50: goto case 18; case 51: goto case 19; case 52: goto case 20; case 53: goto case 21; case 54: goto case 24; case 55: goto case 25; case 56: goto case 27; case 57: goto case 31; case 58: goto case 35; case 59: goto case 36; case 60: goto case 37; case 62: goto case 2; case 63: goto case 3; case 64: goto case 4; case 65: goto case 6; case 66: goto case 7; case 67: goto case 8; case 68: goto case 10; case 69: goto case 16; case 70: goto case 18; case 71: goto case 19; case 72: goto case 21; case 73: goto case 24; case 74: goto case 25; case 75: goto case 27; case 76: goto case 35; case 77: goto case 36; case 78: goto case 37; case 80: goto case 2; case 81: goto case 3; case 82: goto case 4; case 83: goto case 6; case 84: goto case 7; case 85: goto case 8; case 86: goto case 10; case 87: goto case 16; case 88: goto case 18; case 89: goto case 19; case 90: goto case 21; case 91: goto case 24; case 92: goto case 25; case 93: goto case 27; case 94: goto case 36; case 96: goto case 2; case 97: goto case 3; case 98: goto case 4; case 99: goto case 6; case 100: goto case 7; case 101: goto case 8; case 102: goto case 16; case 103: goto case 18; case 104: goto case 19; case 105: goto case 21; case 106: goto case 24; case 107: goto case 25; case 108: goto case 27; case 109: goto case 36; case 111: goto case 2; case 112: goto case 3; case 113: goto case 4; case 114: goto case 6; case 115: goto case 7; case 116: goto case 8; case 117: goto case 16; case 118: goto case 18; case 119: goto case 19; case 120: goto case 21; case 121: goto case 27; case 122: goto case 36; case 124: goto case 3; case 125: goto case 4; case 126: goto case 6; case 127: goto case 7; case 128: goto case 16; case 129: goto case 18; case 130: goto case 19; case 131: goto case 21; case 132: goto case 27; case 133: goto case 36; case 135: goto case 3; case 136: goto case 4; case 137: goto case 6; case 138: goto case 7; case 139: goto case 16; case 140: goto case 18; case 141: goto case 19; case 142: goto case 21; case 143: goto case 27; case 144: goto case 36; case 146: goto case 3; case 147: goto case 4; case 148: goto case 6; case 149: goto case 7; case 150: goto case 16; case 151: goto case 18; case 152: goto case 19; case 153: goto case 21; case 154: goto case 27; case 155: goto case 36; case 157: goto case 3; case 158: goto case 4; case 159: goto case 6; case 160: goto case 7; case 161: goto case 16; case 162: goto case 18; case 163: goto case 19; case 164: goto case 21; case 165: goto case 27; case 166: goto case 36; case 168: goto case 3; case 169: goto case 4; case 170: goto case 6; case 171: goto case 7; case 172: goto case 18; case 173: goto case 19; case 174: goto case 21; case 175: goto case 27; case 176: goto case 36; case 178: goto case 3; case 179: goto case 4; case 180: goto case 6; case 181: goto case 7; case 182: goto case 18; case 183: goto case 19; case 184: goto case 21; case 185: goto case 27; case 186: goto case 36; case 188: goto case 3; case 189: goto case 6; case 190: goto case 7; case 191: goto case 18; case 192: goto case 19; case 193: goto case 21; case 195: goto case 3; case 196: goto case 6; case 197: goto case 7; case 198: goto case 19; case 199: goto case 21; case 201: goto case 3; case 202: goto case 6; case 203: goto case 7; case 204: goto case 19; case 205: goto case 21; case 207: goto case 3; case 208: goto case 6; case 209: goto case 7; case 210: goto case 19; case 211: goto case 21; case 213: goto case 3; case 214: goto case 6; case 215: goto case 7; case 216: goto case 19; case 217: goto case 21; case 219: goto case 3; case 220: goto case 6; case 221: goto case 7; case 222: goto case 19; case 223: goto case 21; case 225: goto case 3; case 226: goto case 6; case 227: goto case 7; case 228: goto case 19; case 229: goto case 21; case 231: goto case 3; case 232: goto case 6; case 233: goto case 7; case 234: goto case 19; case 235: goto case 21; case 237: goto case 3; case 238: goto case 6; case 239: goto case 7; case 240: goto case 19; case 241: goto case 21; case 243: goto case 3; case 244: goto case 7; case 245: goto case 19; case 246: goto case 21; case 248: goto case 3; case 249: goto case 7; case 250: goto case 21; case 252: goto case 3; case 253: goto case 7; case 254: goto case 21; case 256: goto case 3; case 257: goto case 7; case 258: goto case 21; case 260: goto case 3; case 261: goto case 7; case 262: goto case 21; case 264: goto case 3; case 265: goto case 7; case 267: goto case 3; case 268: goto case 7; case 270: goto case 7; case 272: goto case 7; case 274: goto case 7; case 276: goto case 7; case 278: goto case 7; case 280: goto case 7; case 282: goto case 7; case 284: goto case 7; case 623: goto case 3; case 624: goto case 6; case 625: goto case 9; case 626: goto case 31; case 627: goto case 37; case 628: goto case 3; case 629: goto case 4; case 630: goto case 7; case 631: goto case 19; case 632: goto case 20; case 633: goto case 27; case 634: goto case 37; case 636: goto case 3; case 637: goto case 10; case 638: goto case 18; case 639: goto case 21; case 640: goto case 7; case 641: goto case 8; case 642: goto case 2; case 643: goto case 3; case 644: goto case 4; case 645: goto case 7; case 646: goto case 19; case 647: goto case 4; case 648: goto case 6; case 649: goto case 7; case 650: goto case 18; case 651: goto case 19; case 652: goto case 21; case 653: goto case 7; case 654: goto case 21; case 655: goto case 7; case 656: goto case 21; case 657: goto case 6; case 658: goto case 7; case 660: goto case 7; case 661: goto case 21; case 663: goto case 7; case 664: goto case 19; case 665: goto case 21; case 667: goto case 7; case 668: goto case 19; case 669: goto case 3; case 670: goto case 6; case 671: goto case 21; case 673: goto case 7; case 674: goto case 6; case 675: goto case 3; case 676: goto case 21; case 679: goto case 3; case 680: goto case 3; case 681: goto case 21; case 682: goto case 7; case 683: goto case 7; case 731: goto case 3; case 732: goto case 6; case 733: goto case 9; case 734: goto case 37; case 735: goto case 7; case 737: goto case 3; case 738: goto case 2; case 739: goto case 3; case 740: goto case 6; case 741: goto case 7; case 742: goto case 21; case 743: goto case 21; case 744: goto case 7; case 746: goto case 7; case 747: goto case 21; case 748: goto case 7; case 749: goto case 6; case 750: goto case 3; case 752: goto case 3; case 765: goto case 3; case 766: goto case 6; case 768: goto case 2; case 769: goto case 3; case 770: goto case 6; case 771: goto case 7; case 772: goto case 21; case 773: goto case 21; case 774: goto case 7; case 775: goto case 7; case 776: goto case 21; case 777: goto case 7; case 778: goto case 3; case 780: goto case 3; case 785: goto case 3; case 787: goto case 3; case 788: goto case 6; case 789: goto case 21; case 790: goto case 7; case 791: goto case 7; case 792: goto case 3; case 794: goto case 3; case 798: goto case 3; case 799: goto case 3; case 800: goto case 6; case 801: goto case 7; case 802: goto case 3; case 804: goto case 3; case 808: goto case 3; case 809: goto case 3; case 810: goto case 7; case 812: goto case 3; case 815: goto case 3; case 816: goto case 3; case 820: goto case 3; case 821: goto case 3; case 824: goto case 3; case 825: goto case 3; case 828: goto case 3; case 829: goto case 3; case 832: goto case 3; case 833: goto case 3; case 836: goto case 3; case 839: goto case 3; case 841: goto case 3; case 843: goto case 3; case 845: goto case 3; case 853: goto case 7; case 854: goto case 9; case 855: goto case 12; case 856: goto case 27; case 857: goto case 31; case 858: goto case 4; case 859: goto case 7; case 860: goto case 19; case 861: goto case 27; case 862: goto case 7; case 863: goto case 8; case 864: goto case 3; case 865: goto case 3; case 866: goto case 7; case 867: goto case 21; case 868: goto case 21; case 869: goto case 7; case 870: goto case 6; case 871: goto case 7; case 872: goto case 3; case 873: goto case 3; case 879: goto case 3; case 880: goto case 3; case 881: goto case 4; case 882: goto case 4; case 883: goto case 3; case 884: goto case 7; case 885: goto case 9; case 886: goto case 12; case 887: goto case 27; case 888: goto case 27; case 889: goto case 7; case 890: goto case 3; case 891: goto case 6; case 892: goto case 3; case 893: goto case 3; case 896: goto case 3; case 897: goto case 3; case 898: goto case 9; case 899: goto case 3; case 900: goto case 3; case 901: goto case 3; case 904: goto case 9; case 905: goto case 3; case 906: goto case 3; case 908: goto case 3; case 910: goto case 3; case 912: goto case 3; case 919: goto case 4; case 920: goto case 4; case 921: goto case 3; case 922: goto case 4; case 923: goto case 4; case 924: goto case 4; case 925: goto case 4; case 926: goto case 4; case 927: goto case 4; case 928: goto case 4; case 929: goto case 4; case 930: goto case 3; case 947: goto case 3; case 948: goto case 12; case 949: goto case 27; case 950: goto case 3; case 952: goto case 3; case 954: goto case 3; case 955: goto case 12; case 956: goto case 27; case 957: goto case 3; case 958: goto case 3; case 960: goto case 3; case 961: goto case 3; case 963: goto case 3; case 964: goto case 3; case 966: goto case 3; case 968: goto case 3; case 970: goto case 3; case 973: goto case 3; case 977: goto case 3; case 979: goto case 3; case 980: goto case 3; case 981: goto case 27; case 982: goto case 3; case 983: goto case 3; case 985: goto case 3; case 986: goto case 3; case 987: goto case 3; case 989: goto case 3; case 991: goto case 3; case 992: goto case 3; case 993: goto case 3; case 995: goto case 3; case 996: goto case 3; case 997: goto case 3; case 998: goto case 3; case 999: goto case 3; } accepted = false; return yyreturn; } #pragma warning restore 162 #endregion private void BEGIN(LexicalStates state) { current_lexical_state = state; } private char Advance() { if (lookahead_index >= chars_read) { if (token_start > 0) { // shift buffer left: int length = chars_read - token_start; System.Buffer.BlockCopy(buffer, token_start << 1, buffer, 0, length << 1); token_end -= token_start; token_chunk_start -= token_start; token_start = 0; chars_read = lookahead_index = length; // populate the remaining bytes: int count = reader.Read(buffer, chars_read, buffer.Length - chars_read); if (count <= 0) return EOF; chars_read += count; } while (lookahead_index >= chars_read) { if (lookahead_index >= buffer.Length) buffer = ResizeBuffer(buffer); int count = reader.Read(buffer, chars_read, buffer.Length - chars_read); if (count <= 0) return EOF; chars_read += count; } } return buffer[lookahead_index++]; } private char[] ResizeBuffer(char[] buf) { char[] result = new char[buf.Length << 1]; System.Buffer.BlockCopy(buf, 0, result, 0, buf.Length << 1); return result; } protected static bool IsNewLineCharacter(char ch) { return ch == '\r' || ch == '\n' || ch == (char)0x2028 || ch == (char)0x2029; } private void TrimTokenEnd() { if (token_end > token_chunk_start && buffer[token_end - 1] == '\n') token_end--; if (token_end > token_chunk_start && buffer[token_end - 1] == '\r') token_end--; } private void MarkTokenChunkStart() { token_chunk_start = lookahead_index; } private void MarkTokenEnd() { token_end = lookahead_index; } private void MoveToTokenEnd() { lookahead_index = token_end; yy_at_bol = (token_end > token_chunk_start) && (buffer[token_end - 1] == '\r' || buffer[token_end - 1] == '\n'); } public int TokenLength { get { return token_end - token_start; } } public int TokenChunkLength { get { return token_end - token_chunk_start; } } private void yymore() { if (!expanding_token) { token_start = token_chunk_start; expanding_token = true; } } private void yyless(int count) { lookahead_index = token_end = token_chunk_start + count; } private Stack stateStack = new Stack(20); private void yy_push_state(LexicalStates state) { stateStack.Push(current_lexical_state); current_lexical_state = state; } private bool yy_pop_state() { if (stateStack.Count == 0) return false; current_lexical_state = stateStack.Pop(); return true; } private LexicalStates yy_top_state() { return stateStack.Peek(); } #region Tables private static AcceptConditions[] acceptCondition = new AcceptConditions[] { AcceptConditions.NotAccept, // 0 AcceptConditions.Accept, // 1 AcceptConditions.Accept, // 2 AcceptConditions.Accept, // 3 AcceptConditions.Accept, // 4 AcceptConditions.Accept, // 5 AcceptConditions.Accept, // 6 AcceptConditions.Accept, // 7 AcceptConditions.Accept, // 8 AcceptConditions.Accept, // 9 AcceptConditions.Accept, // 10 AcceptConditions.Accept, // 11 AcceptConditions.Accept, // 12 AcceptConditions.Accept, // 13 AcceptConditions.Accept, // 14 AcceptConditions.Accept, // 15 AcceptConditions.Accept, // 16 AcceptConditions.Accept, // 17 AcceptConditions.Accept, // 18 AcceptConditions.Accept, // 19 AcceptConditions.Accept, // 20 AcceptConditions.Accept, // 21 AcceptConditions.Accept, // 22 AcceptConditions.Accept, // 23 AcceptConditions.Accept, // 24 AcceptConditions.Accept, // 25 AcceptConditions.Accept, // 26 AcceptConditions.Accept, // 27 AcceptConditions.Accept, // 28 AcceptConditions.Accept, // 29 AcceptConditions.Accept, // 30 AcceptConditions.Accept, // 31 AcceptConditions.Accept, // 32 AcceptConditions.Accept, // 33 AcceptConditions.Accept, // 34 AcceptConditions.Accept, // 35 AcceptConditions.Accept, // 36 AcceptConditions.Accept, // 37 AcceptConditions.NotAccept, // 38 AcceptConditions.Accept, // 39 AcceptConditions.Accept, // 40 AcceptConditions.Accept, // 41 AcceptConditions.Accept, // 42 AcceptConditions.Accept, // 43 AcceptConditions.Accept, // 44 AcceptConditions.Accept, // 45 AcceptConditions.Accept, // 46 AcceptConditions.Accept, // 47 AcceptConditions.Accept, // 48 AcceptConditions.Accept, // 49 AcceptConditions.Accept, // 50 AcceptConditions.Accept, // 51 AcceptConditions.Accept, // 52 AcceptConditions.Accept, // 53 AcceptConditions.Accept, // 54 AcceptConditions.Accept, // 55 AcceptConditions.Accept, // 56 AcceptConditions.Accept, // 57 AcceptConditions.Accept, // 58 AcceptConditions.Accept, // 59 AcceptConditions.Accept, // 60 AcceptConditions.NotAccept, // 61 AcceptConditions.Accept, // 62 AcceptConditions.Accept, // 63 AcceptConditions.Accept, // 64 AcceptConditions.Accept, // 65 AcceptConditions.Accept, // 66 AcceptConditions.Accept, // 67 AcceptConditions.Accept, // 68 AcceptConditions.Accept, // 69 AcceptConditions.Accept, // 70 AcceptConditions.Accept, // 71 AcceptConditions.Accept, // 72 AcceptConditions.Accept, // 73 AcceptConditions.Accept, // 74 AcceptConditions.Accept, // 75 AcceptConditions.Accept, // 76 AcceptConditions.Accept, // 77 AcceptConditions.Accept, // 78 AcceptConditions.NotAccept, // 79 AcceptConditions.Accept, // 80 AcceptConditions.Accept, // 81 AcceptConditions.Accept, // 82 AcceptConditions.Accept, // 83 AcceptConditions.Accept, // 84 AcceptConditions.Accept, // 85 AcceptConditions.Accept, // 86 AcceptConditions.Accept, // 87 AcceptConditions.Accept, // 88 AcceptConditions.Accept, // 89 AcceptConditions.Accept, // 90 AcceptConditions.Accept, // 91 AcceptConditions.Accept, // 92 AcceptConditions.Accept, // 93 AcceptConditions.Accept, // 94 AcceptConditions.NotAccept, // 95 AcceptConditions.Accept, // 96 AcceptConditions.Accept, // 97 AcceptConditions.Accept, // 98 AcceptConditions.Accept, // 99 AcceptConditions.Accept, // 100 AcceptConditions.Accept, // 101 AcceptConditions.Accept, // 102 AcceptConditions.Accept, // 103 AcceptConditions.Accept, // 104 AcceptConditions.Accept, // 105 AcceptConditions.Accept, // 106 AcceptConditions.Accept, // 107 AcceptConditions.Accept, // 108 AcceptConditions.Accept, // 109 AcceptConditions.NotAccept, // 110 AcceptConditions.Accept, // 111 AcceptConditions.Accept, // 112 AcceptConditions.Accept, // 113 AcceptConditions.Accept, // 114 AcceptConditions.Accept, // 115 AcceptConditions.Accept, // 116 AcceptConditions.Accept, // 117 AcceptConditions.Accept, // 118 AcceptConditions.Accept, // 119 AcceptConditions.Accept, // 120 AcceptConditions.Accept, // 121 AcceptConditions.Accept, // 122 AcceptConditions.NotAccept, // 123 AcceptConditions.Accept, // 124 AcceptConditions.Accept, // 125 AcceptConditions.Accept, // 126 AcceptConditions.Accept, // 127 AcceptConditions.Accept, // 128 AcceptConditions.Accept, // 129 AcceptConditions.Accept, // 130 AcceptConditions.Accept, // 131 AcceptConditions.Accept, // 132 AcceptConditions.Accept, // 133 AcceptConditions.NotAccept, // 134 AcceptConditions.Accept, // 135 AcceptConditions.Accept, // 136 AcceptConditions.Accept, // 137 AcceptConditions.Accept, // 138 AcceptConditions.Accept, // 139 AcceptConditions.Accept, // 140 AcceptConditions.Accept, // 141 AcceptConditions.Accept, // 142 AcceptConditions.Accept, // 143 AcceptConditions.Accept, // 144 AcceptConditions.NotAccept, // 145 AcceptConditions.Accept, // 146 AcceptConditions.Accept, // 147 AcceptConditions.Accept, // 148 AcceptConditions.Accept, // 149 AcceptConditions.Accept, // 150 AcceptConditions.Accept, // 151 AcceptConditions.Accept, // 152 AcceptConditions.Accept, // 153 AcceptConditions.Accept, // 154 AcceptConditions.Accept, // 155 AcceptConditions.NotAccept, // 156 AcceptConditions.Accept, // 157 AcceptConditions.Accept, // 158 AcceptConditions.Accept, // 159 AcceptConditions.Accept, // 160 AcceptConditions.Accept, // 161 AcceptConditions.Accept, // 162 AcceptConditions.Accept, // 163 AcceptConditions.Accept, // 164 AcceptConditions.Accept, // 165 AcceptConditions.Accept, // 166 AcceptConditions.NotAccept, // 167 AcceptConditions.Accept, // 168 AcceptConditions.Accept, // 169 AcceptConditions.Accept, // 170 AcceptConditions.Accept, // 171 AcceptConditions.Accept, // 172 AcceptConditions.Accept, // 173 AcceptConditions.Accept, // 174 AcceptConditions.Accept, // 175 AcceptConditions.Accept, // 176 AcceptConditions.NotAccept, // 177 AcceptConditions.Accept, // 178 AcceptConditions.Accept, // 179 AcceptConditions.Accept, // 180 AcceptConditions.Accept, // 181 AcceptConditions.Accept, // 182 AcceptConditions.Accept, // 183 AcceptConditions.Accept, // 184 AcceptConditions.Accept, // 185 AcceptConditions.Accept, // 186 AcceptConditions.NotAccept, // 187 AcceptConditions.Accept, // 188 AcceptConditions.Accept, // 189 AcceptConditions.Accept, // 190 AcceptConditions.Accept, // 191 AcceptConditions.Accept, // 192 AcceptConditions.Accept, // 193 AcceptConditions.NotAccept, // 194 AcceptConditions.Accept, // 195 AcceptConditions.Accept, // 196 AcceptConditions.Accept, // 197 AcceptConditions.Accept, // 198 AcceptConditions.Accept, // 199 AcceptConditions.NotAccept, // 200 AcceptConditions.Accept, // 201 AcceptConditions.Accept, // 202 AcceptConditions.Accept, // 203 AcceptConditions.Accept, // 204 AcceptConditions.Accept, // 205 AcceptConditions.NotAccept, // 206 AcceptConditions.Accept, // 207 AcceptConditions.Accept, // 208 AcceptConditions.Accept, // 209 AcceptConditions.Accept, // 210 AcceptConditions.Accept, // 211 AcceptConditions.NotAccept, // 212 AcceptConditions.Accept, // 213 AcceptConditions.Accept, // 214 AcceptConditions.Accept, // 215 AcceptConditions.Accept, // 216 AcceptConditions.Accept, // 217 AcceptConditions.NotAccept, // 218 AcceptConditions.Accept, // 219 AcceptConditions.Accept, // 220 AcceptConditions.Accept, // 221 AcceptConditions.Accept, // 222 AcceptConditions.Accept, // 223 AcceptConditions.NotAccept, // 224 AcceptConditions.Accept, // 225 AcceptConditions.Accept, // 226 AcceptConditions.Accept, // 227 AcceptConditions.Accept, // 228 AcceptConditions.Accept, // 229 AcceptConditions.NotAccept, // 230 AcceptConditions.Accept, // 231 AcceptConditions.Accept, // 232 AcceptConditions.Accept, // 233 AcceptConditions.Accept, // 234 AcceptConditions.Accept, // 235 AcceptConditions.NotAccept, // 236 AcceptConditions.Accept, // 237 AcceptConditions.Accept, // 238 AcceptConditions.Accept, // 239 AcceptConditions.Accept, // 240 AcceptConditions.Accept, // 241 AcceptConditions.NotAccept, // 242 AcceptConditions.Accept, // 243 AcceptConditions.Accept, // 244 AcceptConditions.Accept, // 245 AcceptConditions.Accept, // 246 AcceptConditions.NotAccept, // 247 AcceptConditions.Accept, // 248 AcceptConditions.Accept, // 249 AcceptConditions.Accept, // 250 AcceptConditions.NotAccept, // 251 AcceptConditions.Accept, // 252 AcceptConditions.Accept, // 253 AcceptConditions.Accept, // 254 AcceptConditions.NotAccept, // 255 AcceptConditions.Accept, // 256 AcceptConditions.Accept, // 257 AcceptConditions.Accept, // 258 AcceptConditions.NotAccept, // 259 AcceptConditions.Accept, // 260 AcceptConditions.Accept, // 261 AcceptConditions.Accept, // 262 AcceptConditions.NotAccept, // 263 AcceptConditions.Accept, // 264 AcceptConditions.Accept, // 265 AcceptConditions.NotAccept, // 266 AcceptConditions.Accept, // 267 AcceptConditions.Accept, // 268 AcceptConditions.NotAccept, // 269 AcceptConditions.Accept, // 270 AcceptConditions.NotAccept, // 271 AcceptConditions.Accept, // 272 AcceptConditions.NotAccept, // 273 AcceptConditions.Accept, // 274 AcceptConditions.NotAccept, // 275 AcceptConditions.Accept, // 276 AcceptConditions.NotAccept, // 277 AcceptConditions.Accept, // 278 AcceptConditions.NotAccept, // 279 AcceptConditions.Accept, // 280 AcceptConditions.NotAccept, // 281 AcceptConditions.Accept, // 282 AcceptConditions.NotAccept, // 283 AcceptConditions.Accept, // 284 AcceptConditions.NotAccept, // 285 AcceptConditions.NotAccept, // 286 AcceptConditions.NotAccept, // 287 AcceptConditions.NotAccept, // 288 AcceptConditions.NotAccept, // 289 AcceptConditions.NotAccept, // 290 AcceptConditions.NotAccept, // 291 AcceptConditions.NotAccept, // 292 AcceptConditions.NotAccept, // 293 AcceptConditions.NotAccept, // 294 AcceptConditions.NotAccept, // 295 AcceptConditions.NotAccept, // 296 AcceptConditions.NotAccept, // 297 AcceptConditions.NotAccept, // 298 AcceptConditions.NotAccept, // 299 AcceptConditions.NotAccept, // 300 AcceptConditions.NotAccept, // 301 AcceptConditions.NotAccept, // 302 AcceptConditions.NotAccept, // 303 AcceptConditions.NotAccept, // 304 AcceptConditions.NotAccept, // 305 AcceptConditions.NotAccept, // 306 AcceptConditions.NotAccept, // 307 AcceptConditions.NotAccept, // 308 AcceptConditions.NotAccept, // 309 AcceptConditions.NotAccept, // 310 AcceptConditions.NotAccept, // 311 AcceptConditions.NotAccept, // 312 AcceptConditions.NotAccept, // 313 AcceptConditions.NotAccept, // 314 AcceptConditions.NotAccept, // 315 AcceptConditions.NotAccept, // 316 AcceptConditions.NotAccept, // 317 AcceptConditions.NotAccept, // 318 AcceptConditions.NotAccept, // 319 AcceptConditions.NotAccept, // 320 AcceptConditions.NotAccept, // 321 AcceptConditions.NotAccept, // 322 AcceptConditions.NotAccept, // 323 AcceptConditions.NotAccept, // 324 AcceptConditions.NotAccept, // 325 AcceptConditions.NotAccept, // 326 AcceptConditions.NotAccept, // 327 AcceptConditions.NotAccept, // 328 AcceptConditions.NotAccept, // 329 AcceptConditions.NotAccept, // 330 AcceptConditions.NotAccept, // 331 AcceptConditions.NotAccept, // 332 AcceptConditions.NotAccept, // 333 AcceptConditions.NotAccept, // 334 AcceptConditions.NotAccept, // 335 AcceptConditions.NotAccept, // 336 AcceptConditions.NotAccept, // 337 AcceptConditions.NotAccept, // 338 AcceptConditions.NotAccept, // 339 AcceptConditions.NotAccept, // 340 AcceptConditions.NotAccept, // 341 AcceptConditions.NotAccept, // 342 AcceptConditions.NotAccept, // 343 AcceptConditions.NotAccept, // 344 AcceptConditions.NotAccept, // 345 AcceptConditions.NotAccept, // 346 AcceptConditions.NotAccept, // 347 AcceptConditions.NotAccept, // 348 AcceptConditions.NotAccept, // 349 AcceptConditions.NotAccept, // 350 AcceptConditions.NotAccept, // 351 AcceptConditions.NotAccept, // 352 AcceptConditions.NotAccept, // 353 AcceptConditions.NotAccept, // 354 AcceptConditions.NotAccept, // 355 AcceptConditions.NotAccept, // 356 AcceptConditions.NotAccept, // 357 AcceptConditions.NotAccept, // 358 AcceptConditions.NotAccept, // 359 AcceptConditions.NotAccept, // 360 AcceptConditions.NotAccept, // 361 AcceptConditions.NotAccept, // 362 AcceptConditions.NotAccept, // 363 AcceptConditions.NotAccept, // 364 AcceptConditions.NotAccept, // 365 AcceptConditions.NotAccept, // 366 AcceptConditions.NotAccept, // 367 AcceptConditions.NotAccept, // 368 AcceptConditions.NotAccept, // 369 AcceptConditions.NotAccept, // 370 AcceptConditions.NotAccept, // 371 AcceptConditions.NotAccept, // 372 AcceptConditions.NotAccept, // 373 AcceptConditions.NotAccept, // 374 AcceptConditions.NotAccept, // 375 AcceptConditions.NotAccept, // 376 AcceptConditions.NotAccept, // 377 AcceptConditions.NotAccept, // 378 AcceptConditions.NotAccept, // 379 AcceptConditions.NotAccept, // 380 AcceptConditions.NotAccept, // 381 AcceptConditions.NotAccept, // 382 AcceptConditions.NotAccept, // 383 AcceptConditions.NotAccept, // 384 AcceptConditions.NotAccept, // 385 AcceptConditions.NotAccept, // 386 AcceptConditions.NotAccept, // 387 AcceptConditions.NotAccept, // 388 AcceptConditions.NotAccept, // 389 AcceptConditions.NotAccept, // 390 AcceptConditions.NotAccept, // 391 AcceptConditions.NotAccept, // 392 AcceptConditions.NotAccept, // 393 AcceptConditions.NotAccept, // 394 AcceptConditions.NotAccept, // 395 AcceptConditions.NotAccept, // 396 AcceptConditions.NotAccept, // 397 AcceptConditions.NotAccept, // 398 AcceptConditions.NotAccept, // 399 AcceptConditions.NotAccept, // 400 AcceptConditions.NotAccept, // 401 AcceptConditions.NotAccept, // 402 AcceptConditions.NotAccept, // 403 AcceptConditions.NotAccept, // 404 AcceptConditions.NotAccept, // 405 AcceptConditions.NotAccept, // 406 AcceptConditions.NotAccept, // 407 AcceptConditions.NotAccept, // 408 AcceptConditions.NotAccept, // 409 AcceptConditions.NotAccept, // 410 AcceptConditions.NotAccept, // 411 AcceptConditions.NotAccept, // 412 AcceptConditions.NotAccept, // 413 AcceptConditions.NotAccept, // 414 AcceptConditions.NotAccept, // 415 AcceptConditions.NotAccept, // 416 AcceptConditions.NotAccept, // 417 AcceptConditions.NotAccept, // 418 AcceptConditions.NotAccept, // 419 AcceptConditions.NotAccept, // 420 AcceptConditions.NotAccept, // 421 AcceptConditions.NotAccept, // 422 AcceptConditions.NotAccept, // 423 AcceptConditions.NotAccept, // 424 AcceptConditions.NotAccept, // 425 AcceptConditions.NotAccept, // 426 AcceptConditions.NotAccept, // 427 AcceptConditions.NotAccept, // 428 AcceptConditions.NotAccept, // 429 AcceptConditions.NotAccept, // 430 AcceptConditions.NotAccept, // 431 AcceptConditions.NotAccept, // 432 AcceptConditions.NotAccept, // 433 AcceptConditions.NotAccept, // 434 AcceptConditions.NotAccept, // 435 AcceptConditions.NotAccept, // 436 AcceptConditions.NotAccept, // 437 AcceptConditions.NotAccept, // 438 AcceptConditions.NotAccept, // 439 AcceptConditions.NotAccept, // 440 AcceptConditions.NotAccept, // 441 AcceptConditions.NotAccept, // 442 AcceptConditions.NotAccept, // 443 AcceptConditions.NotAccept, // 444 AcceptConditions.NotAccept, // 445 AcceptConditions.NotAccept, // 446 AcceptConditions.NotAccept, // 447 AcceptConditions.NotAccept, // 448 AcceptConditions.NotAccept, // 449 AcceptConditions.NotAccept, // 450 AcceptConditions.NotAccept, // 451 AcceptConditions.NotAccept, // 452 AcceptConditions.NotAccept, // 453 AcceptConditions.NotAccept, // 454 AcceptConditions.NotAccept, // 455 AcceptConditions.NotAccept, // 456 AcceptConditions.NotAccept, // 457 AcceptConditions.NotAccept, // 458 AcceptConditions.NotAccept, // 459 AcceptConditions.NotAccept, // 460 AcceptConditions.NotAccept, // 461 AcceptConditions.NotAccept, // 462 AcceptConditions.NotAccept, // 463 AcceptConditions.NotAccept, // 464 AcceptConditions.NotAccept, // 465 AcceptConditions.NotAccept, // 466 AcceptConditions.NotAccept, // 467 AcceptConditions.NotAccept, // 468 AcceptConditions.NotAccept, // 469 AcceptConditions.NotAccept, // 470 AcceptConditions.NotAccept, // 471 AcceptConditions.NotAccept, // 472 AcceptConditions.NotAccept, // 473 AcceptConditions.NotAccept, // 474 AcceptConditions.NotAccept, // 475 AcceptConditions.NotAccept, // 476 AcceptConditions.NotAccept, // 477 AcceptConditions.NotAccept, // 478 AcceptConditions.NotAccept, // 479 AcceptConditions.NotAccept, // 480 AcceptConditions.NotAccept, // 481 AcceptConditions.NotAccept, // 482 AcceptConditions.NotAccept, // 483 AcceptConditions.NotAccept, // 484 AcceptConditions.NotAccept, // 485 AcceptConditions.NotAccept, // 486 AcceptConditions.NotAccept, // 487 AcceptConditions.NotAccept, // 488 AcceptConditions.NotAccept, // 489 AcceptConditions.NotAccept, // 490 AcceptConditions.NotAccept, // 491 AcceptConditions.NotAccept, // 492 AcceptConditions.NotAccept, // 493 AcceptConditions.NotAccept, // 494 AcceptConditions.NotAccept, // 495 AcceptConditions.NotAccept, // 496 AcceptConditions.NotAccept, // 497 AcceptConditions.NotAccept, // 498 AcceptConditions.NotAccept, // 499 AcceptConditions.NotAccept, // 500 AcceptConditions.NotAccept, // 501 AcceptConditions.NotAccept, // 502 AcceptConditions.NotAccept, // 503 AcceptConditions.NotAccept, // 504 AcceptConditions.NotAccept, // 505 AcceptConditions.NotAccept, // 506 AcceptConditions.NotAccept, // 507 AcceptConditions.NotAccept, // 508 AcceptConditions.NotAccept, // 509 AcceptConditions.NotAccept, // 510 AcceptConditions.NotAccept, // 511 AcceptConditions.NotAccept, // 512 AcceptConditions.NotAccept, // 513 AcceptConditions.NotAccept, // 514 AcceptConditions.NotAccept, // 515 AcceptConditions.NotAccept, // 516 AcceptConditions.NotAccept, // 517 AcceptConditions.NotAccept, // 518 AcceptConditions.NotAccept, // 519 AcceptConditions.NotAccept, // 520 AcceptConditions.NotAccept, // 521 AcceptConditions.NotAccept, // 522 AcceptConditions.NotAccept, // 523 AcceptConditions.NotAccept, // 524 AcceptConditions.NotAccept, // 525 AcceptConditions.NotAccept, // 526 AcceptConditions.NotAccept, // 527 AcceptConditions.NotAccept, // 528 AcceptConditions.NotAccept, // 529 AcceptConditions.NotAccept, // 530 AcceptConditions.NotAccept, // 531 AcceptConditions.NotAccept, // 532 AcceptConditions.NotAccept, // 533 AcceptConditions.NotAccept, // 534 AcceptConditions.NotAccept, // 535 AcceptConditions.NotAccept, // 536 AcceptConditions.NotAccept, // 537 AcceptConditions.NotAccept, // 538 AcceptConditions.NotAccept, // 539 AcceptConditions.NotAccept, // 540 AcceptConditions.NotAccept, // 541 AcceptConditions.NotAccept, // 542 AcceptConditions.NotAccept, // 543 AcceptConditions.NotAccept, // 544 AcceptConditions.NotAccept, // 545 AcceptConditions.NotAccept, // 546 AcceptConditions.NotAccept, // 547 AcceptConditions.NotAccept, // 548 AcceptConditions.NotAccept, // 549 AcceptConditions.NotAccept, // 550 AcceptConditions.NotAccept, // 551 AcceptConditions.NotAccept, // 552 AcceptConditions.NotAccept, // 553 AcceptConditions.NotAccept, // 554 AcceptConditions.NotAccept, // 555 AcceptConditions.NotAccept, // 556 AcceptConditions.NotAccept, // 557 AcceptConditions.NotAccept, // 558 AcceptConditions.NotAccept, // 559 AcceptConditions.NotAccept, // 560 AcceptConditions.NotAccept, // 561 AcceptConditions.NotAccept, // 562 AcceptConditions.NotAccept, // 563 AcceptConditions.NotAccept, // 564 AcceptConditions.NotAccept, // 565 AcceptConditions.NotAccept, // 566 AcceptConditions.NotAccept, // 567 AcceptConditions.NotAccept, // 568 AcceptConditions.NotAccept, // 569 AcceptConditions.NotAccept, // 570 AcceptConditions.NotAccept, // 571 AcceptConditions.NotAccept, // 572 AcceptConditions.NotAccept, // 573 AcceptConditions.NotAccept, // 574 AcceptConditions.NotAccept, // 575 AcceptConditions.NotAccept, // 576 AcceptConditions.NotAccept, // 577 AcceptConditions.NotAccept, // 578 AcceptConditions.NotAccept, // 579 AcceptConditions.NotAccept, // 580 AcceptConditions.NotAccept, // 581 AcceptConditions.NotAccept, // 582 AcceptConditions.NotAccept, // 583 AcceptConditions.NotAccept, // 584 AcceptConditions.NotAccept, // 585 AcceptConditions.NotAccept, // 586 AcceptConditions.NotAccept, // 587 AcceptConditions.NotAccept, // 588 AcceptConditions.NotAccept, // 589 AcceptConditions.NotAccept, // 590 AcceptConditions.NotAccept, // 591 AcceptConditions.NotAccept, // 592 AcceptConditions.NotAccept, // 593 AcceptConditions.NotAccept, // 594 AcceptConditions.NotAccept, // 595 AcceptConditions.NotAccept, // 596 AcceptConditions.NotAccept, // 597 AcceptConditions.NotAccept, // 598 AcceptConditions.NotAccept, // 599 AcceptConditions.NotAccept, // 600 AcceptConditions.NotAccept, // 601 AcceptConditions.NotAccept, // 602 AcceptConditions.NotAccept, // 603 AcceptConditions.NotAccept, // 604 AcceptConditions.NotAccept, // 605 AcceptConditions.NotAccept, // 606 AcceptConditions.NotAccept, // 607 AcceptConditions.NotAccept, // 608 AcceptConditions.NotAccept, // 609 AcceptConditions.NotAccept, // 610 AcceptConditions.NotAccept, // 611 AcceptConditions.NotAccept, // 612 AcceptConditions.NotAccept, // 613 AcceptConditions.NotAccept, // 614 AcceptConditions.NotAccept, // 615 AcceptConditions.NotAccept, // 616 AcceptConditions.NotAccept, // 617 AcceptConditions.NotAccept, // 618 AcceptConditions.NotAccept, // 619 AcceptConditions.NotAccept, // 620 AcceptConditions.NotAccept, // 621 AcceptConditions.NotAccept, // 622 AcceptConditions.Accept, // 623 AcceptConditions.Accept, // 624 AcceptConditions.Accept, // 625 AcceptConditions.Accept, // 626 AcceptConditions.Accept, // 627 AcceptConditions.Accept, // 628 AcceptConditions.Accept, // 629 AcceptConditions.Accept, // 630 AcceptConditions.Accept, // 631 AcceptConditions.Accept, // 632 AcceptConditions.Accept, // 633 AcceptConditions.Accept, // 634 AcceptConditions.NotAccept, // 635 AcceptConditions.Accept, // 636 AcceptConditions.Accept, // 637 AcceptConditions.Accept, // 638 AcceptConditions.Accept, // 639 AcceptConditions.Accept, // 640 AcceptConditions.Accept, // 641 AcceptConditions.Accept, // 642 AcceptConditions.Accept, // 643 AcceptConditions.Accept, // 644 AcceptConditions.Accept, // 645 AcceptConditions.Accept, // 646 AcceptConditions.Accept, // 647 AcceptConditions.Accept, // 648 AcceptConditions.Accept, // 649 AcceptConditions.Accept, // 650 AcceptConditions.Accept, // 651 AcceptConditions.Accept, // 652 AcceptConditions.Accept, // 653 AcceptConditions.Accept, // 654 AcceptConditions.Accept, // 655 AcceptConditions.Accept, // 656 AcceptConditions.Accept, // 657 AcceptConditions.Accept, // 658 AcceptConditions.NotAccept, // 659 AcceptConditions.Accept, // 660 AcceptConditions.Accept, // 661 AcceptConditions.NotAccept, // 662 AcceptConditions.Accept, // 663 AcceptConditions.Accept, // 664 AcceptConditions.Accept, // 665 AcceptConditions.NotAccept, // 666 AcceptConditions.Accept, // 667 AcceptConditions.Accept, // 668 AcceptConditions.Accept, // 669 AcceptConditions.Accept, // 670 AcceptConditions.Accept, // 671 AcceptConditions.NotAccept, // 672 AcceptConditions.Accept, // 673 AcceptConditions.Accept, // 674 AcceptConditions.Accept, // 675 AcceptConditions.Accept, // 676 AcceptConditions.NotAccept, // 677 AcceptConditions.NotAccept, // 678 AcceptConditions.Accept, // 679 AcceptConditions.Accept, // 680 AcceptConditions.Accept, // 681 AcceptConditions.Accept, // 682 AcceptConditions.Accept, // 683 AcceptConditions.NotAccept, // 684 AcceptConditions.NotAccept, // 685 AcceptConditions.NotAccept, // 686 AcceptConditions.NotAccept, // 687 AcceptConditions.NotAccept, // 688 AcceptConditions.NotAccept, // 689 AcceptConditions.NotAccept, // 690 AcceptConditions.NotAccept, // 691 AcceptConditions.NotAccept, // 692 AcceptConditions.NotAccept, // 693 AcceptConditions.NotAccept, // 694 AcceptConditions.NotAccept, // 695 AcceptConditions.NotAccept, // 696 AcceptConditions.NotAccept, // 697 AcceptConditions.NotAccept, // 698 AcceptConditions.NotAccept, // 699 AcceptConditions.NotAccept, // 700 AcceptConditions.NotAccept, // 701 AcceptConditions.NotAccept, // 702 AcceptConditions.NotAccept, // 703 AcceptConditions.NotAccept, // 704 AcceptConditions.NotAccept, // 705 AcceptConditions.NotAccept, // 706 AcceptConditions.NotAccept, // 707 AcceptConditions.NotAccept, // 708 AcceptConditions.NotAccept, // 709 AcceptConditions.NotAccept, // 710 AcceptConditions.NotAccept, // 711 AcceptConditions.NotAccept, // 712 AcceptConditions.NotAccept, // 713 AcceptConditions.NotAccept, // 714 AcceptConditions.NotAccept, // 715 AcceptConditions.NotAccept, // 716 AcceptConditions.NotAccept, // 717 AcceptConditions.NotAccept, // 718 AcceptConditions.NotAccept, // 719 AcceptConditions.NotAccept, // 720 AcceptConditions.NotAccept, // 721 AcceptConditions.NotAccept, // 722 AcceptConditions.NotAccept, // 723 AcceptConditions.NotAccept, // 724 AcceptConditions.NotAccept, // 725 AcceptConditions.NotAccept, // 726 AcceptConditions.NotAccept, // 727 AcceptConditions.NotAccept, // 728 AcceptConditions.NotAccept, // 729 AcceptConditions.NotAccept, // 730 AcceptConditions.Accept, // 731 AcceptConditions.Accept, // 732 AcceptConditions.Accept, // 733 AcceptConditions.Accept, // 734 AcceptConditions.Accept, // 735 AcceptConditions.NotAccept, // 736 AcceptConditions.Accept, // 737 AcceptConditions.Accept, // 738 AcceptConditions.Accept, // 739 AcceptConditions.Accept, // 740 AcceptConditions.Accept, // 741 AcceptConditions.Accept, // 742 AcceptConditions.Accept, // 743 AcceptConditions.Accept, // 744 AcceptConditions.NotAccept, // 745 AcceptConditions.Accept, // 746 AcceptConditions.Accept, // 747 AcceptConditions.Accept, // 748 AcceptConditions.Accept, // 749 AcceptConditions.Accept, // 750 AcceptConditions.NotAccept, // 751 AcceptConditions.Accept, // 752 AcceptConditions.NotAccept, // 753 AcceptConditions.NotAccept, // 754 AcceptConditions.NotAccept, // 755 AcceptConditions.NotAccept, // 756 AcceptConditions.NotAccept, // 757 AcceptConditions.NotAccept, // 758 AcceptConditions.NotAccept, // 759 AcceptConditions.NotAccept, // 760 AcceptConditions.NotAccept, // 761 AcceptConditions.NotAccept, // 762 AcceptConditions.NotAccept, // 763 AcceptConditions.NotAccept, // 764 AcceptConditions.Accept, // 765 AcceptConditions.Accept, // 766 AcceptConditions.NotAccept, // 767 AcceptConditions.Accept, // 768 AcceptConditions.Accept, // 769 AcceptConditions.Accept, // 770 AcceptConditions.Accept, // 771 AcceptConditions.Accept, // 772 AcceptConditions.Accept, // 773 AcceptConditions.Accept, // 774 AcceptConditions.Accept, // 775 AcceptConditions.Accept, // 776 AcceptConditions.Accept, // 777 AcceptConditions.Accept, // 778 AcceptConditions.NotAccept, // 779 AcceptConditions.Accept, // 780 AcceptConditions.NotAccept, // 781 AcceptConditions.NotAccept, // 782 AcceptConditions.NotAccept, // 783 AcceptConditions.NotAccept, // 784 AcceptConditions.Accept, // 785 AcceptConditions.NotAccept, // 786 AcceptConditions.Accept, // 787 AcceptConditions.Accept, // 788 AcceptConditions.Accept, // 789 AcceptConditions.Accept, // 790 AcceptConditions.Accept, // 791 AcceptConditions.Accept, // 792 AcceptConditions.NotAccept, // 793 AcceptConditions.Accept, // 794 AcceptConditions.NotAccept, // 795 AcceptConditions.NotAccept, // 796 AcceptConditions.NotAccept, // 797 AcceptConditions.Accept, // 798 AcceptConditions.Accept, // 799 AcceptConditions.Accept, // 800 AcceptConditions.Accept, // 801 AcceptConditions.Accept, // 802 AcceptConditions.NotAccept, // 803 AcceptConditions.Accept, // 804 AcceptConditions.NotAccept, // 805 AcceptConditions.NotAccept, // 806 AcceptConditions.NotAccept, // 807 AcceptConditions.Accept, // 808 AcceptConditions.Accept, // 809 AcceptConditions.Accept, // 810 AcceptConditions.NotAccept, // 811 AcceptConditions.Accept, // 812 AcceptConditions.NotAccept, // 813 AcceptConditions.NotAccept, // 814 AcceptConditions.Accept, // 815 AcceptConditions.Accept, // 816 AcceptConditions.NotAccept, // 817 AcceptConditions.NotAccept, // 818 AcceptConditions.NotAccept, // 819 AcceptConditions.Accept, // 820 AcceptConditions.Accept, // 821 AcceptConditions.NotAccept, // 822 AcceptConditions.NotAccept, // 823 AcceptConditions.Accept, // 824 AcceptConditions.Accept, // 825 AcceptConditions.NotAccept, // 826 AcceptConditions.NotAccept, // 827 AcceptConditions.Accept, // 828 AcceptConditions.Accept, // 829 AcceptConditions.NotAccept, // 830 AcceptConditions.NotAccept, // 831 AcceptConditions.Accept, // 832 AcceptConditions.Accept, // 833 AcceptConditions.NotAccept, // 834 AcceptConditions.NotAccept, // 835 AcceptConditions.Accept, // 836 AcceptConditions.NotAccept, // 837 AcceptConditions.NotAccept, // 838 AcceptConditions.Accept, // 839 AcceptConditions.NotAccept, // 840 AcceptConditions.Accept, // 841 AcceptConditions.NotAccept, // 842 AcceptConditions.Accept, // 843 AcceptConditions.NotAccept, // 844 AcceptConditions.Accept, // 845 AcceptConditions.NotAccept, // 846 AcceptConditions.NotAccept, // 847 AcceptConditions.NotAccept, // 848 AcceptConditions.NotAccept, // 849 AcceptConditions.NotAccept, // 850 AcceptConditions.NotAccept, // 851 AcceptConditions.NotAccept, // 852 AcceptConditions.Accept, // 853 AcceptConditions.Accept, // 854 AcceptConditions.Accept, // 855 AcceptConditions.Accept, // 856 AcceptConditions.Accept, // 857 AcceptConditions.Accept, // 858 AcceptConditions.Accept, // 859 AcceptConditions.Accept, // 860 AcceptConditions.Accept, // 861 AcceptConditions.Accept, // 862 AcceptConditions.Accept, // 863 AcceptConditions.Accept, // 864 AcceptConditions.Accept, // 865 AcceptConditions.Accept, // 866 AcceptConditions.Accept, // 867 AcceptConditions.Accept, // 868 AcceptConditions.Accept, // 869 AcceptConditions.Accept, // 870 AcceptConditions.Accept, // 871 AcceptConditions.Accept, // 872 AcceptConditions.Accept, // 873 AcceptConditions.NotAccept, // 874 AcceptConditions.NotAccept, // 875 AcceptConditions.NotAccept, // 876 AcceptConditions.NotAccept, // 877 AcceptConditions.NotAccept, // 878 AcceptConditions.Accept, // 879 AcceptConditions.Accept, // 880 AcceptConditions.Accept, // 881 AcceptConditions.Accept, // 882 AcceptConditions.Accept, // 883 AcceptConditions.Accept, // 884 AcceptConditions.Accept, // 885 AcceptConditions.Accept, // 886 AcceptConditions.Accept, // 887 AcceptConditions.Accept, // 888 AcceptConditions.Accept, // 889 AcceptConditions.Accept, // 890 AcceptConditions.Accept, // 891 AcceptConditions.Accept, // 892 AcceptConditions.Accept, // 893 AcceptConditions.NotAccept, // 894 AcceptConditions.NotAccept, // 895 AcceptConditions.Accept, // 896 AcceptConditions.Accept, // 897 AcceptConditions.Accept, // 898 AcceptConditions.Accept, // 899 AcceptConditions.Accept, // 900 AcceptConditions.Accept, // 901 AcceptConditions.NotAccept, // 902 AcceptConditions.NotAccept, // 903 AcceptConditions.Accept, // 904 AcceptConditions.Accept, // 905 AcceptConditions.Accept, // 906 AcceptConditions.NotAccept, // 907 AcceptConditions.Accept, // 908 AcceptConditions.NotAccept, // 909 AcceptConditions.Accept, // 910 AcceptConditions.NotAccept, // 911 AcceptConditions.Accept, // 912 AcceptConditions.NotAccept, // 913 AcceptConditions.NotAccept, // 914 AcceptConditions.NotAccept, // 915 AcceptConditions.NotAccept, // 916 AcceptConditions.NotAccept, // 917 AcceptConditions.NotAccept, // 918 AcceptConditions.Accept, // 919 AcceptConditions.Accept, // 920 AcceptConditions.Accept, // 921 AcceptConditions.Accept, // 922 AcceptConditions.Accept, // 923 AcceptConditions.Accept, // 924 AcceptConditions.Accept, // 925 AcceptConditions.Accept, // 926 AcceptConditions.Accept, // 927 AcceptConditions.Accept, // 928 AcceptConditions.Accept, // 929 AcceptConditions.Accept, // 930 AcceptConditions.NotAccept, // 931 AcceptConditions.NotAccept, // 932 AcceptConditions.NotAccept, // 933 AcceptConditions.NotAccept, // 934 AcceptConditions.NotAccept, // 935 AcceptConditions.NotAccept, // 936 AcceptConditions.NotAccept, // 937 AcceptConditions.NotAccept, // 938 AcceptConditions.NotAccept, // 939 AcceptConditions.NotAccept, // 940 AcceptConditions.NotAccept, // 941 AcceptConditions.NotAccept, // 942 AcceptConditions.NotAccept, // 943 AcceptConditions.NotAccept, // 944 AcceptConditions.NotAccept, // 945 AcceptConditions.NotAccept, // 946 AcceptConditions.Accept, // 947 AcceptConditions.Accept, // 948 AcceptConditions.Accept, // 949 AcceptConditions.Accept, // 950 AcceptConditions.NotAccept, // 951 AcceptConditions.Accept, // 952 AcceptConditions.NotAccept, // 953 AcceptConditions.Accept, // 954 AcceptConditions.Accept, // 955 AcceptConditions.Accept, // 956 AcceptConditions.Accept, // 957 AcceptConditions.Accept, // 958 AcceptConditions.NotAccept, // 959 AcceptConditions.Accept, // 960 AcceptConditions.Accept, // 961 AcceptConditions.NotAccept, // 962 AcceptConditions.Accept, // 963 AcceptConditions.Accept, // 964 AcceptConditions.NotAccept, // 965 AcceptConditions.Accept, // 966 AcceptConditions.NotAccept, // 967 AcceptConditions.Accept, // 968 AcceptConditions.NotAccept, // 969 AcceptConditions.Accept, // 970 AcceptConditions.NotAccept, // 971 AcceptConditions.NotAccept, // 972 AcceptConditions.Accept, // 973 AcceptConditions.NotAccept, // 974 AcceptConditions.NotAccept, // 975 AcceptConditions.NotAccept, // 976 AcceptConditions.Accept, // 977 AcceptConditions.NotAccept, // 978 AcceptConditions.Accept, // 979 AcceptConditions.Accept, // 980 AcceptConditions.Accept, // 981 AcceptConditions.Accept, // 982 AcceptConditions.Accept, // 983 AcceptConditions.NotAccept, // 984 AcceptConditions.Accept, // 985 AcceptConditions.Accept, // 986 AcceptConditions.Accept, // 987 AcceptConditions.NotAccept, // 988 AcceptConditions.Accept, // 989 AcceptConditions.NotAccept, // 990 AcceptConditions.Accept, // 991 AcceptConditions.Accept, // 992 AcceptConditions.Accept, // 993 AcceptConditions.NotAccept, // 994 AcceptConditions.Accept, // 995 AcceptConditions.Accept, // 996 AcceptConditions.Accept, // 997 AcceptConditions.Accept, // 998 AcceptConditions.Accept, // 999 AcceptConditions.NotAccept, // 1000 }; private static int[] colMap = new int[] { 4, 5, 5, 5, 5, 5, 5, 5, 5, 4, 4, 5, 5, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 1, 5, 5, 5, 5, 5, 5, 5, 6, 7, 5, 8, 3, 9, 2, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 19, 20, 5, 5, 5, 5, 5, 21, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 22, 5, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 39, 5, 5, 5, 5, 5, 5, 5 }; private static int[] rowMap = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 11, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 2, 27, 2, 28, 21, 2, 21, 29, 30, 31, 1, 2, 32, 33, 34, 35, 36, 37, 2, 2, 21, 38, 39, 40, 41, 42, 43, 44, 45, 2, 46, 47, 48, 24, 49, 50, 51, 52, 53, 54, 55, 56, 57, 2, 58, 59, 60, 61, 2, 2, 2, 62, 63, 2, 64, 65, 66, 67, 10, 68, 69, 70, 71, 72, 73, 74, 30, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 24, 2, 86, 87, 88, 89, 90, 91, 92, 93, 2, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 2, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 2, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 2, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 2, 159, 160, 161, 162, 2, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 19, 180, 181, 182, 183, 184, 41, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 24, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 2, 207, 208, 177, 209, 210, 22, 211, 212, 213, 16, 214, 193, 215, 216, 217, 198, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 196, 237, 238, 239, 240, 241, 242, 243, 228, 244, 231, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 51, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 21, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 23, 43, 59, 72, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 233, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 400, 479, 480, 481, 482, 483, 484, 485, 158, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 139, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 117, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 502, 540, 513, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 30, 47, 555, 556, 546, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 507, 605, 606, 607, 608, 609, 610, 611, 612, 576, 212, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 203, 635, 636, 637, 447, 638, 639, 640, 641, 642, 643, 644, 449, 645, 646, 647, 648, 203, 649, 447, 650, 651, 652, 653, 499, 654, 655, 500, 656, 657, 533, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 191, 681, 682, 683, 684, 685, 308, 22, 686, 687, 688, 443, 689, 690, 691, 692, 693, 694, 144, 695, 696, 697, 698, 699, 198, 700, 701, 702, 171, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 676, 715, 679, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 231, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 11, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 666, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 680, 789, 790, 703, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 45, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 807, 889, 890, 891, 892, 893, 894, 895, 896, 897, 21, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916 }; private static int[,] nextState = new int[,] { { -1, 1, 39, 39, 39, 2, 40, 2, 62, 62, 2, 80, 96, 642, 738, 768, 768, 768, 768, 768, 2, 111, 2, 3, 623, 623, 731, 879, 765, 623, 623, 41, 785, 623, 896, 798, 808, 815, 995, 623, 623, 820, 824, 623, 628, 828, 880, 998 }, { -1, 38, -1, -1, -1, -1, -1, -1, -1, -1, -1, 61, 61, 61, 61, 61, 61, 61, 61, 61, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 97, 97, 97, 97, 97, 97, 112, 97, 97, 97, 97, 97, 97, 97, 97, 643, 97, 97, 97, 97, 739, 97, 97, 97, 97 }, { -1, 300, 300, -1, -1, -1, -1, -1, -1, 300, -1, 9, 9, 9, 9, 9, 9, 9, 9, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 629, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 64, -1, 64, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5, 5, 5, 5, 5, 5, 5, 5, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, 766, 766, 766, -1, -1, -1, -1, -1, -1, -1, 43, 43, 43, 43, 43, 43, 43, 43, 43, -1, -1, -1, -1, -1, -1, 766, -1, -1, -1, 766, -1, -1, -1, -1, -1, 65, -1, -1, -1, 65, 83, 99, -1, -1, -1, -1, -1 }, { -1, 323, 324, -1, -1, -1, 325, -1, 326, 875, -1, 44, 44, 44, 44, 44, 44, 44, 44, 44, 327, -1, -1, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 331, 67, 67, 67, 67, 67, 67, 67, 67, 67, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 332, -1, -1, -1, 332, 333, 334, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 854, 854, 854, 854, 854, 854, 854, 854, 854, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, 47, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 248, 248, 248, 794, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248 }, { -1, 363, 364, -1, -1, -1, -1, -1, -1, 365, 366, 367, 368, 369, 370, 371, 371, 372, 61, 61, -1, -1, -1, 695, -1, -1, 373, -1, 374, -1, 194, 19, 697, -1, -1, 375, 699, 376, -1, -1, -1, 377, 677, -1, 51, 378, 860, 678 }, { -1, 363, 364, -1, -1, -1, -1, -1, -1, 365, 366, 635, 736, 767, 786, 61, 61, 61, 61, 61, -1, -1, -1, 695, -1, -1, 373, -1, 374, -1, 194, 19, 697, -1, -1, 375, 699, 376, -1, -1, -1, 377, 677, -1, 51, 378, 860, 678 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 161, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 638, 638, 638, 638, 638, 638, 638, 638, 638, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 409, -1, -1, -1, 409, 410, 411, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 631, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 71, -1, 71, -1 }, { -1, -1, 360, -1, -1, -1, -1, -1, -1, -1, -1, 670, 670, 670, 670, 670, 670, 670, 670, 670, 360, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, 453, 457, -1, -1, -1, 455, -1, 456, 456, -1, 53, 53, 53, 53, 53, 53, 53, 53, 53, 457, -1, -1, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 471, 471, 471, 471, 471, 471, 471, 471, 471, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, 277, -1, -1, -1, -1, -1, -1, -1, -1, -1, 61, 25, 25, 25, 25, 25, 25, 25, 25, -1, -1, -1, -1, -1, -1, 279, -1, 281, -1, 194, -1, -1, -1, -1, 283, -1, -1, -1, -1, -1, 285, 677, -1, -1, 242, -1, 678 }, { -1, 277, -1, -1, -1, -1, -1, -1, -1, -1, -1, 61, 61, 61, 61, 61, 61, 61, 61, 61, -1, -1, -1, -1, -1, -1, 279, -1, 281, -1, 194, -1, -1, -1, -1, 283, -1, -1, -1, -1, -1, 285, 677, -1, -1, 242, -1, 678 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 30, 30, 30, 30, 30, 30, 30, 30, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 981, 399, 399, 399, 399, 399, 399 }, { -1, 277, -1, -1, -1, -1, -1, -1, -1, -1, -1, 61, 61, 61, 61, 61, 61, 61, 61, 61, -1, -1, -1, -1, -1, -1, 279, -1, 281, -1, 194, -1, -1, -1, -1, 283, -1, -1, -1, -1, -1, 285, 546, -1, -1, 242, -1, 678 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 857, 857, 857, 857, 857, 857, 857, 857, 857, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 540, -1, -1, -1, 540, 541, 588, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 77, 77, 77, 77, 77, 77, 77, 77, 77, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 734, 734, 734, 734, 734, 734, 734, 734, 734, 60, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832 }, { -1, 275, 275, -1, -1, -1, -1, 81, -1, 275, -1, 6, 6, 6, 624, 732, 732, 732, 732, 732, -1, -1, -1, 97, 97, 97, 97, 97, 97, 97, 97, 135, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 146, 97, 146, 97 }, { -1, 300, 300, -1, -1, -1, -1, -1, -1, 300, -1, 9, 9, 9, 9, 9, 9, 9, 9, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 858, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, 766, 126, 766, -1, -1, -1, -1, -1, -1, -1, 137, 137, 148, 159, 159, 159, 159, 159, 159, 360, -1, -1, -1, -1, -1, 766, -1, -1, -1, 766, -1, -1, -1, -1, -1, 65, -1, -1, -1, 65, 83, 99, -1, -1, -1, -1, -1 }, { -1, 323, 324, -1, -1, -1, 325, -1, 326, 875, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 327, -1, -1, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 331, 67, 67, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 332, -1, -1, -1, 332, 333, 334, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 698, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 638, 638, 755, 755, 755, 755, 755, 755, 755, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 409, -1, -1, -1, 409, 410, 411, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 860, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 670, 670, 670, 670, 670, 670, 670, 670, 670, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, 453, 457, -1, -1, -1, 455, -1, 456, 456, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 457, -1, -1, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72 }, { -1, 277, -1, -1, -1, -1, -1, -1, -1, -1, -1, 55, 74, 74, 92, 25, 25, 25, 25, 25, -1, -1, -1, -1, -1, -1, 279, -1, 281, -1, 194, -1, -1, -1, -1, 283, -1, -1, -1, -1, -1, 285, 677, -1, -1, 242, -1, 678 }, { -1, 277, -1, -1, -1, -1, -1, -1, -1, -1, -1, 61, 29, 29, 29, 29, 29, 29, 29, 29, -1, -1, -1, -1, -1, -1, 279, -1, 281, -1, 194, -1, -1, -1, -1, 283, -1, -1, -1, -1, -1, 285, 677, -1, -1, 242, -1, 678 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 849, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 76, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 77, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 634, 634, 634, 634, 634, 634, 78, 78, 78, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, 38, -1, -1, -1, -1, -1, -1, -1, -1, -1, 63, 63, 636, 737, 737, 737, 737, 737, 737, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, 277, -1, -1, -1, -1, -1, -1, -1, -1, -1, 737, 737, 737, 737, 737, 737, 737, 737, 737, 213, -1, -1, -1, -1, -1, 279, -1, 281, -1, 194, -1, -1, -1, -1, 283, -1, -1, -1, -1, -1, 285, 677, -1, -1, 242, -1, 678 }, { -1, 300, 300, -1, -1, -1, -1, -1, -1, 300, -1, 9, 9, 9, 9, 9, 9, 9, 9, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, 766, 766, 766, -1, -1, -1, -1, -1, -1, -1, 770, 770, 788, 800, 800, 800, 800, 800, 800, -1, -1, -1, -1, -1, -1, 170, -1, -1, -1, 766, -1, -1, -1, -1, -1, 766, -1, -1, -1, 766, 766, 766, -1, -1, -1, -1, -1 }, { -1, 323, 327, -1, -1, -1, 325, -1, 326, 326, -1, 630, 630, 630, 630, 630, 630, 630, 630, 630, 327, -1, -1, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 331, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 332, -1, -1, -1, 332, 333, 334, -1, -1, -1, -1, -1 }, { -1, -1, 47, -1, -1, -1, -1, 190, -1, -1, 408, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 408, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 161, -1, 385, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 755, 755, 755, 755, 755, 755, 755, 755, 755, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 409, -1, -1, -1, 409, 410, 411, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, 142, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153 }, { -1, 277, -1, -1, -1, -1, -1, -1, -1, -1, -1, 25, 25, 25, 25, 25, 25, 25, 25, 25, -1, -1, -1, -1, -1, -1, 279, -1, 281, -1, 194, -1, -1, -1, -1, 283, -1, -1, -1, -1, -1, 285, 677, -1, -1, 242, -1, 678 }, { -1, 277, -1, -1, -1, -1, -1, -1, -1, -1, -1, 29, 29, 29, 29, 29, 29, 29, 29, 29, -1, -1, -1, -1, -1, -1, 279, -1, 281, -1, 194, -1, -1, -1, -1, 283, -1, -1, -1, -1, -1, 285, 677, -1, -1, 242, -1, 678 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 185, -1, -1, -1, -1, -1, -1 }, { -1, 79, 286, -1, -1, -1, -1, -1, -1, 286, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 167, -1, -1, 177, -1, 187, -1, 194, 4, 200, -1, -1, 206, 662, 218, -1, -1, -1, 685, 677, -1, 42, 242, 858, 678 }, { -1, 79, 95, -1, -1, -1, -1, -1, -1, 110, 123, 134, 145, 145, 145, 145, 145, 145, 145, 145, 156, -1, -1, 167, -1, -1, 177, -1, 187, -1, 194, 4, 200, -1, -1, 206, 212, 218, -1, -1, 224, 230, 236, -1, 42, 242, 858, 678 }, { -1, 300, 300, -1, -1, -1, -1, -1, -1, 300, -1, 9, 9, 9, 9, 9, 9, 9, 9, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 379, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, 766, 766, 766, -1, -1, -1, -1, -1, -1, -1, 770, 770, 788, 800, 800, 800, 800, 800, 800, -1, -1, -1, -1, -1, -1, 766, -1, -1, -1, 766, -1, -1, -1, -1, -1, 766, -1, -1, -1, 766, 766, 170, -1, -1, -1, -1, -1 }, { -1, 323, 688, -1, -1, -1, 325, -1, 326, 875, -1, 115, 115, 115, 115, 115, 115, 115, 115, 115, 689, -1, -1, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 863, 863, 863, 863, 863, 863, 863, 863, 863, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 698, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 386, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 118, 118, 118, 118, 118, 118, 118, 118, 118, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 409, -1, -1, -1, 409, 410, 411, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 521, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, 530, 457, -1, -1, -1, 531, -1, 532, 532, -1, 652, 652, 652, 652, 652, 652, 652, 652, 652, 457, -1, -1, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193 }, { -1, 277, -1, -1, -1, -1, -1, -1, -1, -1, -1, 25, 25, 25, 25, 25, 25, 25, 61, 61, -1, -1, -1, -1, -1, -1, 279, -1, 281, -1, 194, -1, -1, -1, -1, 283, -1, -1, -1, -1, -1, 285, 677, -1, -1, 242, -1, 678 }, { -1, 277, -1, -1, -1, -1, -1, -1, -1, -1, -1, 29, 29, 61, 61, 61, 61, 61, 61, 61, -1, -1, -1, -1, -1, -1, 279, -1, 281, -1, 194, -1, -1, -1, -1, 283, -1, -1, -1, -1, -1, 285, 677, -1, -1, 242, -1, 678 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 724, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, 286, 286, -1, -1, -1, -1, -1, -1, 286, -1, 7, 853, 884, 884, 884, 884, 44, 44, 44, -1, -1, -1, 167, -1, -1, 751, -1, 779, -1, -1, 4, 200, -1, -1, 684, 662, 218, -1, -1, -1, 793, -1, -1, 42, -1, 858, -1 }, { -1, 247, 251, -1, -1, -1, -1, -1, -1, 110, 123, 145, 145, 145, 255, 255, 255, 255, 255, 255, 259, -1, -1, 263, -1, -1, 177, -1, 187, -1, 194, 4, 200, -1, -1, 206, 212, 218, 266, -1, 224, 230, 236, -1, 42, 242, 858, 678 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829 }, { -1, 300, 300, -1, -1, -1, -1, -1, -1, 300, -1, 9, 9, 9, 9, 9, 9, 9, 9, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 380, -1, -1, -1, -1 }, { -1, 766, 766, 766, -1, -1, -1, -1, -1, -1, -1, 770, 770, 788, 800, 800, 800, 800, 800, 800, -1, -1, -1, -1, -1, -1, 766, -1, -1, -1, 170, -1, -1, -1, -1, -1, 766, -1, -1, -1, 766, 766, 766, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, 190, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 331, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 389, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 118, 118, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 409, -1, -1, -1, 409, 410, 411, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 522, -1, -1, -1, -1 }, { -1, 530, 457, -1, -1, -1, 531, -1, 532, 532, -1, 661, -1, -1, -1, -1, -1, -1, -1, -1, 457, -1, -1, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 185, -1, 559, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 133, 133, 133, 133, 133, 133, 133, 133, 133, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, 286, 286, -1, -1, -1, -1, -1, -1, 286, -1, 287, 288, 289, 289, 289, 289, 289, 289, 289, -1, -1, -1, 974, -1, -1, 944, -1, 945, -1, -1, 4, 975, -1, -1, 943, 942, 976, -1, -1, -1, 946, -1, -1, 42, -1, 858, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, 273, -1, -1, 5, 5, 5, 5, 5, 5, 5, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 11, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829 }, { -1, 300, 300, -1, -1, -1, -1, -1, -1, 300, -1, 9, 9, 9, 9, 9, 9, 9, 9, 9, -1, -1, -1, -1, -1, -1, -1, 381, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, 360, -1, -1, -1, -1, -1, -1, -1, -1, 657, 657, 657, 657, 657, 180, 180, 180, 180, 360, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, 392, 688, -1, -1, -1, 325, -1, 326, 875, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 689, -1, -1, 203, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 203, 100, 100, 100, 100, 100, 100, 100, 100, 100 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 390, -1, -1, -1, 161, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 409, -1, -1, -1, 409, 410, 411, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 523, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, 530, 457, -1, -1, -1, 531, -1, 532, 532, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 457, -1, -1, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 724, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 560, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 133, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 8, 8, 8, 45, 67, 67, 67, 67, 67, -1, -1, -1, 659, -1, -1, 803, -1, 811, -1, -1, -1, 666, -1, -1, 753, 745, 672, -1, -1, -1, 817, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 829, 829, 829, 829, 829, 829, 829, 829, 12, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829 }, { -1, 300, 300, -1, -1, -1, -1, -1, -1, 300, -1, 9, 9, 9, 9, 9, 9, 9, 9, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 382, -1, -1, -1, -1, -1, -1, -1 }, { -1, 766, 766, 766, -1, -1, -1, -1, -1, -1, -1, 220, 220, 870, 891, 891, 891, 226, 226, 226, -1, -1, -1, -1, -1, -1, 766, -1, -1, -1, 766, -1, -1, -1, -1, -1, 766, -1, -1, -1, 766, 766, 766, -1, -1, -1, -1, -1 }, { -1, 404, 405, -1, -1, -1, 406, -1, 407, 407, -1, 209, 209, 209, 209, 209, 209, 209, 209, 209, -1, -1, -1, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 701, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 720, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 742, 742, 742, 742, 742, 742, 742, 742, 742, 205, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 725, -1, -1, -1, -1 }, { -1, -1, 620, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, 79, 95, -1, -1, -1, -1, -1, -1, 110, 123, 290, 290, 290, 290, 290, 290, 291, 291, 291, 156, -1, -1, 167, -1, -1, 177, -1, 187, -1, 194, 4, 200, -1, -1, 206, 212, 218, -1, -1, 224, 230, 236, -1, 42, 242, 858, 678 }, { -1, 275, 275, -1, -1, -1, -1, 81, -1, 275, 320, 6, 6, 6, 624, 732, 732, 732, 732, 732, -1, -1, 320, 829, 829, 829, 829, 829, 829, 829, 829, 675, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829 }, { -1, 300, 300, -1, -1, -1, -1, -1, -1, 300, -1, 9, 9, 9, 9, 9, 9, 9, 9, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 64 }, { -1, -1, 360, -1, -1, -1, -1, -1, -1, -1, -1, 20, 20, 20, 20, 20, 20, 20, 20, 20, 360, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, 404, 405, -1, -1, -1, 406, -1, 407, 407, -1, 209, 23, 23, 23, 23, 23, 23, 23, 23, -1, -1, -1, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 391, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 650, 650, 650, 650, 650, 650, 650, 650, 650, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 540, -1, -1, -1, 540, 541, 542, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 71 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 561, -1, -1, -1, 185, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, 622, 622, -1, 144, 144, 144, 144, 144, 144, 144, 144, 144, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, 247, 251, -1, -1, -1, -1, -1, -1, 110, 123, 290, 290, 290, 290, 290, 290, 291, 291, 291, 259, -1, -1, 263, -1, -1, 177, -1, 187, -1, 194, 4, 200, -1, -1, 206, 212, 218, 266, -1, 224, 230, 236, -1, 42, 242, 858, 678 }, { -1, 275, 275, -1, -1, -1, -1, 81, -1, 275, 320, 6, 6, 6, 624, 732, 732, 732, 732, 732, -1, -1, 320, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829 }, { -1, 300, 300, -1, -1, -1, -1, -1, -1, 300, -1, 9, 9, 9, 9, 9, 9, 9, 9, 9, -1, -1, -1, -1, -1, -1, -1, 64, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, 360, -1, -1, -1, -1, -1, -1, -1, -1, 20, 20, 20, 20, 20, 52, 52, 52, 52, 360, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, 404, 405, -1, -1, -1, 406, -1, 407, 407, -1, 23, 23, 23, 23, 23, 23, 23, 23, 23, -1, -1, -1, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 782, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 650, 650, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 540, -1, -1, -1, 540, 541, 542, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 71, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, 142, -1, -1, 533, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 533, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 562, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 176, 176, 176, 176, 176, 176, 176, 176, 176, 186, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 66, 66, 66, 66, 66, 66, 630, 630, 630, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 12, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829 }, { -1, 300, 300, -1, -1, -1, -1, -1, -1, 300, -1, 9, 9, 9, 9, 9, 9, 9, 9, 9, -1, -1, -1, -1, -1, 384, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, 360, -1, -1, -1, -1, -1, -1, -1, -1, 52, 52, 52, 52, 52, 52, 52, 52, 52, 360, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 744, 744, 744, 744, 744, 744, 744, 744, 744, 227, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 650, 35, 35, 35, 35, 35, 35, 35, 35, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 540, -1, -1, -1, 540, 541, 542, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 524, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, 534, -1, -1, -1, -1, 722, -1, 723, 723, -1, 661, 661, 661, 661, 661, 661, 661, 661, 661, -1, -1, -1, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 563, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 176, 176, 176, 176, 176, 94, 77, 77, 77, 186, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 292, -1, -1, -1, -1, 293, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 237, 829, 829, 829, 829, 829, 829, 892, 13, 829, 829 }, { -1, 300, 300, -1, -1, -1, -1, -1, -1, 300, -1, 9, 9, 9, 9, 9, 9, 9, 9, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 388, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, 766, 766, 766, -1, -1, -1, -1, -1, -1, -1, 770, 770, 788, 800, 800, 800, 800, 800, 800, -1, -1, -1, -1, -1, -1, 766, -1, -1, -1, 766, -1, -1, -1, -1, -1, 766, -1, -1, -1, 766, 766, 766, -1, -1, -1, -1, -1 }, { -1, 404, 405, -1, -1, -1, 406, -1, 407, 407, -1, 181, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 35, 35, 35, 35, 35, 35, 35, 35, 35, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 540, -1, -1, -1, 540, 541, 542, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 718, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, 534, -1, -1, -1, -1, 722, -1, 723, 723, -1, 661, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 726, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 94, 94, 94, 94, 94, 94, 77, 77, 77, 186, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 294, -1, -1, -1, 295, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 855, 829, 829, 829, 829, 829 }, { -1, 300, 300, -1, -1, -1, -1, -1, -1, 300, -1, 9, 9, 9, 9, 9, 9, 9, 9, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 647, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 632, 632, 632, 632, 632, 632, 632, 632, 632, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, 404, 405, -1, -1, -1, 406, -1, 407, 407, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 35, 35, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 540, -1, -1, -1, 540, 541, 542, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 651, -1, -1, -1, -1, -1 }, { -1, 534, -1, -1, -1, -1, 722, -1, 723, 723, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 94, 94, 94, 94, 94, 94, 77, 77, 77, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 296, -1, -1, -1, -1, -1, -1, -1, -1, -1, 297, -1, -1, 298, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 829, 829, 829, 829, 829, 829, 829, 829, 843, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 948, 829, 829, 829, 829 }, { -1, 766, 766, 766, -1, -1, -1, -1, -1, -1, -1, 43, 232, 232, 232, 232, 232, 232, 232, 232, -1, -1, -1, -1, -1, -1, 766, -1, -1, -1, 766, -1, -1, -1, -1, -1, 65, -1, -1, -1, 65, 83, 99, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 587, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, 498, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 521, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, 142, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 299, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 829, 829, 829, 829, 886, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829 }, { -1, 766, 766, 766, -1, -1, -1, -1, -1, -1, -1, 232, 232, 232, 232, 232, 232, 232, 232, 232, -1, -1, -1, -1, -1, -1, 766, -1, -1, -1, 766, -1, -1, -1, -1, -1, 65, -1, -1, -1, 65, 83, 99, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, 190, -1, -1, 408, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 408, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, 498, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 522, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, 142, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 301, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 302, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 829, 829, 829, 955, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829 }, { -1, 766, 766, 766, -1, -1, -1, -1, -1, -1, -1, 232, 232, 114, 648, 648, 648, 648, 648, 648, -1, -1, -1, -1, -1, -1, 766, -1, -1, -1, 766, -1, -1, -1, -1, -1, 65, -1, -1, -1, 65, 83, 99, -1, -1, -1, -1, -1 }, { -1, -1, 450, -1, -1, -1, -1, 190, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 68, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, 498, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 523, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 211, 211, 211, 211, 211, 211, 142, 142, 142, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 303, -1, -1, -1, -1, -1, -1, -1, 304, -1, -1, -1, -1, -1, 305, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669 }, { -1, 404, 405, -1, -1, -1, 406, -1, 407, 407, -1, 471, 471, 471, 471, 471, 471, 471, 471, 471, -1, -1, -1, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, 498, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 720, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 142, 142, 142, 142, 142, 142, 142, 142, 142, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 306, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 307, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 243, 243, 243, 243, 243, 243, 81, 81, 81, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, 190, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, 498, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 71 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 229, 229, 229, 229, 229, 229, 229, 229, 229, 241, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 308, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, 277, -1, -1, -1, -1, -1, -1, -1, -1, -1, 225, 225, 225, 225, 225, 225, 225, 225, 225, -1, -1, -1, -1, -1, -1, 279, -1, 281, -1, 194, -1, -1, -1, -1, 283, -1, -1, -1, -1, -1, 285, 677, -1, -1, 242, -1, 678 }, { -1, 453, 454, -1, -1, -1, 455, -1, 456, 456, -1, 674, 674, 674, 674, 674, 674, 674, 674, 674, 454, -1, -1, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72 }, { -1, -1, -1, -1, -1, -1, -1, 190, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, 498, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 71, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 772, 772, 772, 772, 772, 211, 142, 142, 142, 241, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 306, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, 453, 454, -1, -1, -1, 455, -1, 456, 456, -1, 214, 214, 214, 214, 214, 214, 214, 214, 214, 454, -1, -1, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 233, 233, 233, 233, 233, 233, 190, 190, 190, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, 498, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 524, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 211, 211, 211, 211, 211, 211, 142, 142, 142, 241, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 309, -1, -1, -1, 310, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 306, 311, -1, -1, -1, -1 }, { -1, 275, 275, -1, -1, -1, -1, 81, -1, 359, 320, 6, 6, 6, 624, 732, 732, 732, 732, 732, -1, -1, 320, 248, 248, 248, 248, 248, 248, 248, 248, 679, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248 }, { -1, 766, 126, 766, -1, -1, -1, -1, -1, 499, -1, 137, 137, 148, 159, 159, 159, 159, 159, 159, 360, -1, -1, -1, -1, -1, 766, -1, -1, -1, 766, -1, -1, -1, -1, -1, 65, -1, -1, -1, 65, 83, 99, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 190, 190, 190, 190, 190, 190, 190, 190, 190, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, 498, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, 142, -1, -1, 533, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 533, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 312, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 313, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 17, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 270, 270, 270, 270, 270, 270, 270, 270, 270, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, 498, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 718, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 314, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 81, 81, 81, 81, 81, 81, 81, 81, 81, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, 498, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 668, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 254, 254, 254, 254, 254, 254, 254, 254, 254, 241, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, 247, 286, -1, -1, -1, -1, -1, -1, 286, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 263, -1, -1, 177, -1, 187, -1, 194, 4, 200, -1, -1, 206, 662, 218, 266, -1, -1, 685, 677, -1, 42, 242, 858, 678 }, { -1, 497, 405, -1, -1, -1, 406, -1, 407, 407, -1, 471, 471, 471, 471, 471, 471, 471, 471, 471, -1, -1, -1, 667, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 667, 215, 215, 215, 215, 215, 215, 215, 215, 215 }, { -1, 286, 286, -1, -1, -1, -1, -1, -1, 286, -1, 84, 862, 889, 889, 889, 889, 859, 859, 859, -1, -1, -1, 167, -1, -1, 751, -1, 779, -1, -1, 4, 200, -1, -1, 684, 662, 218, -1, -1, -1, 793, -1, -1, 42, -1, 858, -1 }, { -1, 275, 275, -1, -1, -1, -1, 81, -1, 275, 320, 6, 6, 6, 624, 732, 732, 732, 732, 732, -1, -1, 320, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399 }, { -1, 497, 405, -1, -1, -1, 406, -1, 407, 407, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 667, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 667, 215, 215, 215, 215, 215, 215, 215, 215, 215 }, { -1, 79, 95, -1, -1, -1, -1, -1, -1, 110, 316, 290, 290, 290, 290, 290, 290, 291, 291, 291, 156, -1, -1, 167, -1, -1, 177, -1, 187, -1, 194, 4, 200, -1, -1, 206, 212, 218, -1, -1, 224, 230, 236, -1, 42, 242, 858, 678 }, { -1, 403, -1, -1, -1, -1, -1, 81, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 783, 399, 796, 399, 895, 399, 399, 399, 399, 806, 399, 399, 399, 399, 399, 814, 819, 399, 399, 823, 399, 903 }, { -1, 516, -1, -1, -1, -1, 708, -1, 517, 517, -1, 257, 257, 257, 257, 257, 257, 257, 257, 257, -1, -1, -1, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869 }, { -1, -1, -1, -1, -1, -1, -1, 142, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 640, 640, 640, 640, 640, 640, 735, 735, 735, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 22 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 268, 268, 268, 268, 268, 268, 268, 268, 268, 274, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 533, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 533, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262 }, { -1, -1, 317, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 10, -1, -1, 292, -1, -1, -1, -1, 293, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 810, 810, 810, 810, 810, 233, 190, 190, 190, 274, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, 317, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 233, 233, 233, 233, 233, 233, 190, 190, 190, 274, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, 79, 318, -1, -1, -1, -1, -1, -1, 110, 316, 291, 291, 291, 291, 291, 291, 291, 291, 291, -1, -1, -1, 167, -1, -1, 177, -1, 187, -1, 194, 4, 200, -1, -1, 206, 212, 218, -1, -1, 224, 230, 236, -1, 42, 242, 858, 678 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 28, 28, 28, 28, 28, 28, 28, 28, 28, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, 277, -1, -1, -1, -1, -1, -1, -1, 319, -1, 291, 291, 291, 291, 291, 291, 291, 291, 291, -1, -1, -1, -1, -1, -1, 279, -1, 281, -1, 194, -1, -1, -1, -1, 283, -1, -1, -1, -1, -1, 285, 677, -1, -1, 242, -1, 678 }, { -1, -1, -1, -1, -1, -1, -1, 190, -1, -1, 408, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 408, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5, 5, 5, 5, 5, 5, 5, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, 275, 275, -1, -1, -1, -1, -1, -1, 275, -1, 6, 6, 6, 624, 732, 732, 732, 732, 732, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, 190, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, 277, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 279, -1, 281, -1, 194, -1, -1, -1, -1, 283, -1, -1, -1, -1, -1, 285, 677, -1, -1, 242, -1, 678 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 408, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 408, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 294, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 284, 284, 284, 284, 284, 284, 284, 284, 284, 274, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 297, -1, -1, 298, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 304, -1, -1, -1, -1, -1, 305, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 309, -1, -1, -1, 321, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 311, -1, -1, -1, -1 }, { -1, 286, 286, -1, -1, -1, -1, -1, -1, 286, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 167, -1, -1, 751, -1, 779, -1, -1, 4, 200, -1, -1, 684, 662, 218, -1, -1, -1, 793, -1, -1, 42, -1, 858, -1 }, { -1, -1, 329, -1, -1, -1, -1, -1, -1, 330, -1, 289, 289, 289, 289, 289, 289, 289, 289, 289, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, 329, -1, -1, -1, -1, -1, -1, 330, -1, 289, 289, 289, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, 329, -1, -1, -1, -1, -1, -1, 330, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, 277, -1, -1, -1, -1, -1, -1, -1, 319, -1, 14, 14, 14, 14, 14, 14, 14, 14, 14, -1, -1, -1, -1, -1, -1, 279, -1, 281, -1, 194, -1, -1, -1, -1, 283, -1, -1, -1, -1, -1, 285, 677, -1, -1, 242, -1, 678 }, { -1, 277, -1, -1, -1, -1, -1, -1, -1, 319, -1, 15, 15, 15, 15, 15, 15, 15, 15, 15, -1, -1, -1, -1, -1, -1, 279, -1, 281, -1, 194, -1, -1, -1, -1, 283, -1, -1, -1, -1, -1, 285, 677, -1, -1, 242, -1, 678 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 82, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 98, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 113, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 125, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 692, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 49, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 344, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 644, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 136, -1, 147, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 158, -1, -1, -1, -1, -1, -1, 64 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 69, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 87, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, 286, 318, -1, -1, -1, -1, -1, -1, 345, 316, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 167, -1, -1, 751, -1, 779, -1, -1, 4, 200, -1, -1, 684, 662, 218, -1, -1, -1, 793, -1, -1, 42, -1, 858, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 113, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 169, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 102, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 117, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 179, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 49, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, 286, 318, -1, -1, -1, -1, -1, -1, 345, 316, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 167, -1, -1, 751, -1, 779, -1, -1, 4, 200, -1, -1, 684, 662, 218, -1, -1, -1, 793, -1, 128, 42, -1, 858, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 139, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 150, 346, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 344, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 659, -1, -1, 803, -1, 811, -1, -1, -1, 666, -1, -1, 753, 745, 672, -1, -1, -1, 817, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, 286, 286, -1, -1, -1, -1, -1, -1, 286, -1, 347, 348, 349, 349, 349, 349, 349, 349, 349, -1, -1, -1, 167, -1, -1, 751, -1, 779, -1, -1, 4, 200, -1, -1, 684, 662, 218, -1, -1, -1, 793, -1, -1, 42, -1, 858, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 350, 351, 352, 352, 352, 352, 352, 352, 352, -1, -1, -1, 353, -1, -1, 354, -1, 696, -1, -1, -1, 355, -1, -1, 356, 357, 691, -1, -1, -1, 756, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 117, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 128, -1, -1, -1, -1 }, { -1, 323, -1, -1, -1, -1, 325, -1, 326, 326, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 127, 127, 127, 127, 127, 127, 138, 149, 149, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 160, 160, 658, 744, 744, 744, 744, 744, 744, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 653, 653, 653, 653, 653, 653, 171, 181, 181, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 179, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 18, 18, 18, 50, 70, 70, 70, 70, 70, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 85, 85, 85, 85, 85, 85, 85, 85, 85, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 101, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 101, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 101, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 361, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 361, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 361, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 361, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 361, -1, 361, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 361, -1, -1, -1, -1, -1, -1, 361 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 361, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 361, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 362, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16, -1, -1, -1, -1, -1, -1, -1 }, { -1, 286, 286, -1, -1, -1, -1, -1, -1, 286, -1, 387, 693, 686, 686, 686, 686, 686, 686, 686, -1, -1, -1, 167, -1, -1, 751, -1, 779, -1, -1, 4, 200, -1, -1, 684, 662, 218, -1, -1, -1, 793, -1, -1, 42, -1, 858, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, 690, -1, -1, -1, -1, -1, -1, 329, -1, 349, 349, 349, 349, 349, 349, 349, 349, 349, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, 690, -1, -1, -1, -1, -1, -1, 329, -1, 754, 754, 754, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, 690, -1, -1, -1, -1, -1, -1, 329, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, 393, -1, 352, 352, 352, 352, 352, 352, 352, 352, 352, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, 393, -1, 352, 352, 352, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, 393, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 704, -1, -1, -1, -1, 394, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 700, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 705, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 395, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 396, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 397, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267 }, { -1, 275, 275, -1, -1, -1, -1, -1, -1, 275, -1, 189, 196, 196, 202, 732, 732, 732, 732, 732, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 21, 21, 21, 21, 21, 21, 53, 53, 53, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 894, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 894, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 361, -1, -1, -1, -1, -1 }, { -1, 363, 412, -1, -1, -1, -1, -1, -1, 412, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 695, -1, -1, 373, -1, 374, -1, 194, 19, 697, -1, -1, 375, 699, 376, -1, -1, -1, 377, 677, -1, 51, 242, 860, 678 }, { -1, 412, 412, -1, -1, -1, -1, -1, -1, 412, -1, 781, 795, 795, 413, -1, -1, -1, -1, -1, -1, -1, -1, 695, -1, -1, 414, -1, 709, -1, -1, 19, 697, -1, -1, 415, 699, 376, -1, -1, -1, 762, -1, -1, 51, -1, 860, -1 }, { -1, 412, 412, -1, -1, -1, -1, -1, -1, 412, -1, 416, 417, 418, 418, 418, 418, 418, 418, 418, -1, -1, -1, 419, -1, -1, 784, -1, 797, -1, -1, 19, 420, -1, -1, 710, 421, 758, -1, -1, -1, 807, -1, -1, 51, -1, 860, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 422, 423, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, 277, -1, -1, -1, -1, -1, -1, -1, -1, -1, 24, 54, 54, 54, 54, 54, 54, 54, 54, -1, -1, -1, -1, -1, -1, 279, -1, 281, -1, 194, -1, -1, -1, -1, 283, -1, -1, -1, -1, -1, 285, 677, -1, -1, 242, -1, 678 }, { -1, 277, -1, -1, -1, -1, -1, -1, -1, -1, -1, 54, 54, 54, 73, 73, 73, 73, 73, 73, -1, -1, -1, -1, -1, -1, 279, -1, 281, -1, 194, -1, -1, -1, -1, 283, -1, -1, -1, -1, -1, 285, 677, -1, -1, 242, -1, 678 }, { -1, 277, -1, -1, -1, -1, -1, -1, -1, -1, -1, 73, 73, 73, 73, 73, 73, 73, 73, 73, -1, -1, -1, -1, -1, -1, 279, -1, 281, -1, 194, -1, -1, -1, -1, 283, -1, -1, -1, -1, -1, 285, 677, -1, -1, 242, -1, 678 }, { -1, 277, -1, -1, -1, -1, -1, -1, -1, -1, -1, 73, 73, 73, 73, 73, 73, 91, 106, 106, -1, -1, -1, -1, -1, -1, 279, -1, 281, -1, 194, -1, -1, -1, -1, 283, -1, -1, -1, -1, -1, 285, 677, -1, -1, 242, -1, 678 }, { -1, 277, -1, -1, -1, -1, -1, -1, -1, -1, -1, 106, 106, 106, 106, 106, 106, 106, 106, 106, -1, -1, -1, -1, -1, -1, 279, -1, 281, -1, 194, -1, -1, -1, -1, 283, -1, -1, -1, -1, -1, 285, 677, -1, -1, 242, -1, 678 }, { -1, 277, -1, -1, -1, -1, -1, -1, -1, -1, -1, 106, 61, 61, 61, 61, 61, 61, 61, 61, -1, -1, -1, -1, -1, -1, 279, -1, 281, -1, 194, -1, -1, -1, -1, 283, -1, -1, -1, -1, -1, 285, 677, -1, -1, 242, -1, 678 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 294, -1, -1, -1, 426, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 427, -1, -1, -1, -1, -1, -1, -1, -1, -1, 297, -1, -1, 298, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 430, -1, -1, -1, -1, -1, -1, -1, 304, -1, -1, -1, -1, -1, 305, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 432, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 309, -1, -1, -1, 433, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 311, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 434, 435, 435, 435, 435, 436, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 314, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 64, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 441, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 388, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 442, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 760, -1, -1, -1, -1, -1, 443, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 64, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 445, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, 329, -1, -1, -1, -1, -1, -1, 329, -1, 686, 686, 686, 686, 686, 686, 686, 686, 686, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 446, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 706, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 447, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 713, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, 392, -1, -1, -1, -1, 325, -1, 326, 326, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 203, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 203, 100, 100, 100, 100, 100, 100, 100, 100, 100 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 88, 88, 88, 103, 118, 118, 118, 118, 118, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 711, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 711, -1, 711, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 711, -1, -1, -1, -1, -1, -1, 711 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 711, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 452, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, 275, 275, -1, -1, -1, -1, -1, -1, 275, 320, 6, 6, 6, 624, 732, 732, 732, 732, 732, -1, -1, 320, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399 }, { -1, 403, -1, -1, -1, -1, -1, -1, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 783, 399, 796, 399, 895, 399, 399, 399, 399, 806, 399, 399, 399, 399, 399, 814, 819, 399, 399, 823, 399, 903 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 48 }, { -1, 403, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 763, -1, 458, -1, 712, -1, -1, -1, -1, 459, -1, -1, -1, -1, -1, 460, 461, -1, -1, 714, -1, 764 }, { -1, 404, -1, -1, -1, -1, 406, -1, 407, 407, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 257, 257, 257, 257, 257, 257, 257, 257, 257, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 261, 261, 265, 268, 268, 268, 268, 268, 268, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 129, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 129, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 129, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, 412, 412, -1, -1, -1, -1, -1, -1, 412, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 695, -1, -1, 414, -1, 709, -1, -1, 19, 697, -1, -1, 415, 699, 376, -1, -1, -1, 762, -1, -1, 51, -1, 860, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 474, 474, 474, 474, 474, 474, 475, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 426, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 430, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, 477, -1, 418, 478, 478, 478, 478, 478, 478, 478, 478, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, 477, -1, 478, 478, 478, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, 477, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 479, -1, -1, -1, -1, 480, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 483, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 484, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 486, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 489, 489, 489, 489, 489, 489, 489, 489, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 489, 489, 489, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 89, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 104, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 119, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 130, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 646, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 141, -1, 152, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 163, -1, -1, -1, -1, -1, -1, 71 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 119, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 173, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 117, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 183, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 26, 26, 26, 26, 26, 26, 26, 26, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 26, 26, 26, 26, 26, 26, 26, 26, 26, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 26, 26, 26, 26, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 64, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 490, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 491, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 161 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 493, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 495, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 496, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 86, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 23, 23, 23, 23, 23, 23, 23, 23, 23, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, 498, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 694, -1, -1, -1, -1, -1 }, { -1, 453, -1, -1, -1, -1, 455, -1, 456, 456, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 90, 90, 90, 90, 90, 90, 105, 120, 120, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 131, 131, 654, 742, 742, 742, 742, 742, 742, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 164, 164, 164, 164, 164, 164, 174, 184, 184, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 717, -1, -1, 501, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 503, -1, -1, -1, -1, -1, 504, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 505, -1, -1, -1, 506, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 507, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 508, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 509, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 27 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 399, 399, 399, 399, 399, 56, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 856, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 633, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 861, 399, 399, 399, 399, 399 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 887, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 949, 399, 399, 399, 399 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 399, 888, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 956, 513, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 107, 107, 107, 107, 107, 107, 107, 107, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 107, 107, 107, 107, 107, 107, 107, 107, 107, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 107, 107, 107, 107, 107, 107, 107, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 183, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 140, 140, 140, 151, 650, 650, 650, 650, 650, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, 520, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 192, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 198, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 204, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 210, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 664, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 216, -1, 222, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 228, -1, -1, -1, -1, -1, -1, 234 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 204, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 240, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 245, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 719, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 492, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 525, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 64 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 64, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 444, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 526, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 494, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, 497, -1, -1, -1, -1, 406, -1, 407, 407, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 667, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 667, 215, 215, 215, 215, 215, 215, 215, 215, 215 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 527, 528, 528, 529, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 31, 31, 31, 31, 31, 31, 31, 31, 31, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 75 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 93, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 536, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 108, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 121, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 132, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 143, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 93, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 154, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 165, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 175, 537, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 536, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 27, 399, 399, 399, 399, 399, 399, 399 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 27, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 22, 399, 399, 399, 399, 399 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 32, 399, 399 }, { -1, 516, -1, -1, -1, -1, 708, -1, 517, 517, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 280, 280, 282, 284, 284, 284, 284, 284, 284, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 408, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 408, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 162, 172, 172, 182, 650, 650, 650, 650, 650, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 71, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 547, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 548, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 71, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 553, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 33, 33, 33, 33, 33, 33, 33, 33, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 33, 33, 33, 33, 33, 33, 33, 33, 33, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 33, 33, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, 530, -1, -1, -1, -1, 531, -1, 532, 532, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 217, 217, 223, 229, 229, 229, 229, 229, 229, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 558, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 75, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 75, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 399, 399, 399, 399, 27, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 34 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 191, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 191, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 569, 569, 570, 571, 571, 571, 571, 571, 571, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 191, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 58, 58, 58, 58, 58, 58, 58, 58, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 58, 58, 58, 58, 58, 58, 58, 58, 58, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 58, 58, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 572, 572, 573, 574, 574, 574, 574, 574, 574, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 322, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 313, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 71, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 551, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 550, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 575, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 576, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 577, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16, -1, -1, -1, -1, -1 }, { -1, 554, -1, -1, -1, -1, 722, -1, 555, 555, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 246, 246, 250, 254, 254, 254, 254, 254, 254, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, 556, -1, -1, -1, -1, 722, -1, 555, 555, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 728, -1, -1, -1, -1, -1, 580, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 582, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 75, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 583, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 584, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 981 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 399, 27, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 27, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 518, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 518, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 586, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 571, 571, 571, 571, 571, 571, 571, 571, 571, 813, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 571, 571, 571, 571, 571, -1, -1, -1, -1, 813, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 813, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 589, 589, 589, 589, 589, 589, 574, 574, 574, 590, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 589, 589, 589, 589, 589, 818, -1, -1, -1, 590, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 818, 818, 818, 818, 818, 818, -1, -1, -1, 590, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 71, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 591, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 533, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 533, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 592, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 185 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 75, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 75, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 581, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 593, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 822, 822, 594, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 569, 569, 570, 571, 571, 571, 571, 571, 571, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 597, 597, 598, 571, 571, 571, 571, 571, 571, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 191, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 826, 826, 826, 826, 826, 826, 599, 599, 599, 590, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 830, 830, 830, 830, 830, 830, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 601, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 603, 603, 603, 603, 603, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 596, 596, 596, 596, 596, 596, 596, 596, 596, 604, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 604, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 605, 605, 605, 605, 605, 605, 605, 605, 605, 813, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 605, 605, 605, 605, 605, -1, -1, -1, -1, 813, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 608, 608, 608, 608, 608, 608, 609, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 578, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 578, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 610, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 27, 399, 399, 399, 399, 399 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 878, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 36, 36, 36, 36, 36, 36, 59, 77, 77, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 611, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 94, 94, 94, 94, 94, 94, 59, 77, 77, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 36, 608, 608, 608, 608, 608, 609, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 75, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 613, 613, 613, 613, 613, 613, 596, 596, 596, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 730, 730, 730, 730, 730, 730, 730, 730, 730, 604, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 615, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 837, 837, 837, 837, 837, 837, 617, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 109, 109, 109, 109, 109, 109, 122, 77, 77, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 618, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, 619, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, 619, -1, -1, -1, -1, -1, -1, 621, 621, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 144, 144, 144, 144, 144, 144, 144, 144, 144, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 37, 37, 627, 734, 734, 734, 734, 734, 734, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 155, 155, 166, 176, 176, 176, 176, 176, 176, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97 }, { -1, 766, 766, 766, -1, -1, -1, -1, -1, -1, -1, 43, 43, 114, 648, 648, 648, 648, 648, 648, -1, -1, -1, -1, -1, -1, 766, -1, -1, -1, 766, -1, -1, -1, -1, -1, 65, -1, -1, -1, 65, 83, 99, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 46, 46, 46, 46, 46, 46, 46, 46, 46, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 57, 57, 57, 57, 57, 57, 57, 57, 57, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 734, 734, 734, 734, 734, 634, 78, 78, 78, 60, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, 275, 275, -1, -1, -1, -1, 81, -1, 275, -1, 6, 6, 6, 624, 732, 732, 732, 732, 732, -1, -1, -1, 97, 97, 97, 97, 97, 97, 97, 97, 865, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97 }, { -1, 300, 300, -1, -1, -1, -1, -1, -1, 300, -1, 9, 9, 9, 9, 9, 9, 9, 9, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 64, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, 323, 327, -1, -1, -1, 325, -1, 326, 326, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 327, -1, -1, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 71, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 238, 238, 238, 238, 238, 238, 238, 238, 238, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 849, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 538, 399, 399, 399, 399, 399 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 78, 78, 78, 78, 78, 78, 78, 78, 78, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, 277, -1, -1, -1, -1, -1, -1, -1, -1, -1, 437, 438, 438, 438, 438, 438, 438, 438, 438, -1, -1, -1, -1, -1, -1, 279, -1, 281, -1, 194, -1, -1, -1, -1, 283, -1, -1, -1, -1, -1, 285, 677, -1, -1, 242, -1, 678 }, { -1, 277, -1, -1, -1, -1, -1, -1, -1, -1, -1, 737, 737, 737, 737, 737, 219, 225, 225, 225, 213, -1, -1, -1, -1, -1, 279, -1, 281, -1, 194, -1, -1, -1, -1, 283, -1, -1, -1, -1, -1, 285, 677, -1, -1, 242, -1, 678 }, { -1, -1, 47, -1, -1, -1, -1, 190, -1, -1, 518, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 518, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 471, 471, 471, 471, 471, 471, 471, 471, 471, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 409, -1, -1, -1, 409, 410, 411, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, 142, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199 }, { -1, 323, 689, -1, -1, -1, 325, -1, 326, 326, -1, 649, 649, 649, 649, 649, 649, 649, 649, 649, 689, -1, -1, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 116, 116, 116, 116, 116, 116, 116, 116, 116, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, 247, 251, -1, -1, -1, -1, -1, -1, 110, 123, 255, 255, 255, 255, 255, 269, 269, 269, 269, 259, -1, -1, 263, -1, -1, 177, -1, 187, -1, 194, 4, 200, -1, -1, 206, 212, 218, 266, -1, 224, 230, 236, -1, 42, 242, 858, 678 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 231, 829, 829, 829, 829, 829, 829, 829 }, { -1, 300, 300, -1, -1, -1, -1, -1, -1, 300, -1, 9, 9, 9, 9, 9, 9, 9, 9, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 757, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, 190, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 721, -1, -1, -1, -1 }, { -1, 300, 300, -1, -1, -1, -1, -1, -1, 300, -1, 9, 9, 9, 9, 9, 9, 9, 9, 9, -1, -1, -1, -1, -1, -1, -1, 448, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, 360, -1, -1, -1, -1, -1, -1, -1, -1, 180, 180, 180, 180, 180, 180, 180, 180, 180, 360, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, 392, 689, -1, -1, -1, 325, -1, 326, 326, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 689, -1, -1, 203, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 203, 100, 100, 100, 100, 100, 100, 100, 100, 100 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 540, -1, -1, -1, 540, 541, 542, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 552, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, 554, 457, -1, -1, -1, 722, -1, 555, 555, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 457, -1, -1, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193 }, { -1, 404, 405, -1, -1, -1, 406, -1, 407, 407, -1, 181, 181, 181, 181, 181, 181, 181, 181, 181, -1, -1, -1, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 742, 742, 742, 742, 742, 211, 142, 142, 142, 205, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, 404, 405, -1, -1, -1, 406, -1, 407, 407, -1, 249, 23, 23, 23, 23, 23, 23, 23, 23, -1, -1, -1, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215 }, { -1, -1, -1, -1, -1, -1, -1, 142, -1, -1, 533, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 533, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235 }, { -1, -1, 360, -1, -1, -1, -1, -1, -1, -1, -1, 632, 632, 632, 632, 632, 632, 632, 632, 632, 360, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 744, 744, 744, 744, 744, 233, 190, 190, 190, 227, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 687, -1, -1, -1, -1, 335, -1, -1, -1, -1 }, { -1, 404, 405, -1, -1, -1, 406, -1, 407, 407, -1, 253, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 307, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, 190, -1, -1, 408, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 408, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, 498, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 721, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, 142, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 338, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 339, -1, -1, -1, -1 }, { -1, -1, 450, -1, -1, -1, -1, 190, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 637, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, 498, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 552, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 342, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, 190, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276 }, { -1, 453, 454, -1, -1, -1, 455, -1, 456, 456, -1, 670, 670, 670, 670, 670, 670, 670, 670, 670, 454, -1, -1, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72 }, { -1, 275, 275, -1, -1, -1, -1, 81, -1, 275, 320, 6, 6, 6, 624, 732, 732, 732, 732, 732, -1, -1, 320, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248 }, { -1, -1, -1, -1, -1, -1, -1, 142, -1, -1, 578, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 578, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 322, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 313, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 315, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 400, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399 }, { -1, 275, 275, -1, -1, -1, -1, 81, -1, 359, 320, 6, 6, 6, 624, 732, 732, 732, 732, 732, -1, -1, 320, 399, 399, 399, 399, 978, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 578, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 578, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681 }, { -1, -1, -1, -1, -1, -1, -1, 190, -1, -1, 518, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 518, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 518, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 518, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 303, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 309, -1, -1, -1, 310, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 311, -1, -1, -1, -1 }, { -1, -1, 329, -1, -1, -1, -1, -1, -1, 329, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 361, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 741, 741, 741, 741, 741, 741, 655, 149, 149, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 771, 771, 771, 771, 771, 771, 660, 181, 181, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 451, 451, 451, 451, 451, 451, 451, 451, 451, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 702, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 383, -1, -1, -1, -1, -1 }, { -1, -1, 329, -1, -1, -1, -1, -1, -1, 329, -1, 686, 686, 686, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 424, -1, -1, -1, -1, 425, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 703, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 428, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 429, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 431, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 711, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 706, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 711, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 711, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 711, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 711, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 400, 399, 399, 399, 399, 399 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 427, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 485, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 502, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 510, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 56, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 535, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 543, 544, 544, 545, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 549, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 671, 671, 223, 229, 229, 229, 229, 229, 229, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 563, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 585, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 580, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 612, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 616, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 97, 97, 97, 97, 769, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97 }, { -1, 766, 766, 766, -1, -1, -1, -1, -1, -1, -1, 740, 740, 114, 648, 648, 648, 648, 648, 648, -1, -1, -1, -1, -1, -1, 766, -1, -1, -1, 766, -1, -1, -1, -1, -1, 65, -1, -1, -1, 65, 83, 99, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 625, 625, 625, 625, 625, 625, 625, 625, 625, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 634, 634, 634, 634, 634, 634, 78, 78, 78, 60, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, 323, 689, -1, -1, -1, 325, -1, 326, 326, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 689, -1, -1, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100 }, { -1, 277, -1, -1, -1, -1, -1, -1, -1, -1, -1, 438, 438, 438, 439, 439, 439, 439, 439, 439, -1, -1, -1, -1, -1, -1, 279, -1, 281, -1, 194, -1, -1, -1, -1, 283, -1, -1, -1, -1, -1, 285, 677, -1, -1, 242, -1, 678 }, { -1, 277, -1, -1, -1, -1, -1, -1, -1, -1, -1, 219, 219, 219, 219, 219, 219, 225, 225, 225, 213, -1, -1, -1, -1, -1, 279, -1, 281, -1, 194, -1, -1, -1, -1, 283, -1, -1, -1, -1, -1, 285, 677, -1, -1, 242, -1, 678 }, { -1, 247, 251, -1, -1, -1, -1, -1, -1, 110, 123, 269, 269, 271, 271, 271, 271, 271, 271, 271, 259, -1, -1, 263, -1, -1, 177, -1, 187, -1, 194, 4, 200, -1, -1, 206, 212, 218, 266, -1, 224, 230, 236, -1, 42, 242, 858, 678 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 829, 829, 829, 829, 829, 829, 872, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829 }, { -1, -1, 360, -1, -1, -1, -1, -1, -1, -1, -1, 657, 657, 657, 657, 657, 657, 657, 657, 657, 360, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, 404, 405, -1, -1, -1, 406, -1, 407, 407, -1, 249, 249, 249, 249, 249, 249, 249, 249, 249, -1, -1, -1, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 211, 211, 211, 211, 211, 211, 142, 142, 142, 205, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, 142, -1, -1, 578, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 578, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 233, 233, 233, 233, 233, 233, 190, 190, 190, 227, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 341, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, 190, -1, -1, 518, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 518, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775 }, { -1, -1, -1, -1, -1, -1, -1, 142, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776 }, { -1, 453, 457, -1, -1, -1, 455, -1, 456, 456, -1, 670, 670, 670, 670, 670, 670, 670, 670, 670, 457, -1, -1, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72 }, { -1, 275, 275, -1, -1, -1, -1, 81, -1, 359, 320, 6, 6, 6, 624, 732, 732, 732, 732, 732, -1, -1, 320, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 252 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 295, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 401, 399, 399, 399, 399, 399 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 340, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 398, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 759, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 487, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 443, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 399, 399, 399, 399, 401, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 476, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 500, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 511, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 97, 97, 97, 97, 787, 97, 97, 97, 890, 97, 97, 97, 97, 97, 921, 97, 97, 124, 97, 97, 97, 97, 97, 97, 97 }, { -1, 277, -1, -1, -1, -1, -1, -1, -1, -1, -1, 439, 439, 439, 439, 439, 439, 439, 439, 439, -1, -1, -1, -1, -1, -1, 279, -1, 281, -1, 194, -1, -1, -1, -1, 283, -1, -1, -1, -1, -1, 285, 677, -1, -1, 242, -1, 678 }, { -1, 247, 251, -1, -1, -1, -1, -1, -1, 110, 123, 271, 271, 271, 271, 271, 271, 271, 271, 271, 259, -1, -1, 263, -1, -1, 177, -1, 187, -1, 194, 4, 200, -1, -1, 206, 212, 218, 266, -1, 224, 230, 236, -1, 42, 242, 858, 678 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 829, 829, 892, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829 }, { -1, -1, 360, -1, -1, -1, -1, -1, -1, -1, -1, 208, 208, 208, 208, 208, 208, 208, 208, 208, 360, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, 404, 405, -1, -1, -1, 406, -1, 407, 407, -1, 253, 253, 253, 253, 253, 253, 253, 253, 253, -1, -1, -1, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215 }, { -1, -1, -1, -1, -1, -1, -1, 142, -1, -1, 578, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 578, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 801, 801, 801, 801, 801, 239, 244, 244, 244, 227, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, 190, -1, -1, 518, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 518, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682 }, { -1, -1, -1, -1, -1, -1, -1, 190, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748 }, { -1, 275, 275, -1, -1, -1, -1, 81, -1, 359, 320, 6, 6, 6, 624, 732, 732, 732, 732, 732, -1, -1, 320, 248, 248, 248, 248, 252, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 296, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 399, 399, 399, 399, 401, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 473, 474, 474, 474, 474, 474, 474, 474, 474, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 449, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 462, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 481, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 799, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 809, 97, 97, 97, 97 }, { -1, 277, -1, -1, -1, -1, -1, -1, -1, -1, -1, 439, 439, 439, 439, 439, 439, 440, 61, 61, -1, -1, -1, -1, -1, -1, 279, -1, 281, -1, 194, -1, -1, -1, -1, 283, -1, -1, -1, -1, -1, 285, 677, -1, -1, 242, -1, 678 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 829, 980, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829 }, { -1, -1, 360, -1, -1, -1, -1, -1, -1, -1, -1, 208, 208, 208, 208, 208, 214, 214, 214, 214, 360, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 239, 239, 239, 239, 239, 239, 244, 244, 244, 227, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, 275, 275, -1, -1, -1, -1, 81, -1, 359, 320, 6, 6, 6, 624, 732, 732, 732, 732, 732, -1, -1, 320, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 680, 248, 248, 248, 248, 248 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 328, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 402, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 474, 474, 474, 474, 474, 474, 474, 474, 474, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 1000, 399, 399, 463, 399, 399, 399, 399, 399, 399, 399 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 482, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 816, 97, 97, 97, 97, 97, 97, 97, 973, 97, 97, 97, 97, 97, 157, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 950, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829 }, { -1, -1, 360, -1, -1, -1, -1, -1, -1, -1, -1, 214, 214, 214, 214, 214, 214, 214, 214, 214, 360, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 233, 233, 233, 233, 233, 233, 270, 270, 270, 227, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, 275, 275, -1, -1, -1, -1, 81, -1, 275, 320, 6, 6, 6, 624, 732, 732, 732, 732, 732, -1, -1, 320, 248, 248, 248, 248, 248, 248, 248, 248, 252, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 336, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 399, 399, 399, 399, 400, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 568, 568, 568, 568, 568, 568, 568, 568, 568, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 399, 399, 399, 399, 399, 464, 399, 399, 399, 399, 399, 465, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 488, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 97, 97, 97, 97, 905, 97, 97, 97, 908, 97, 97, 97, 97, 97, 168, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 750, 829, 778, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 337, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 401, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 595, 595, 595, 595, 595, 595, 596, 596, 596, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 466, 399, 399, 399, 467, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 715, 399, 399, 399, 399 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 97, 97, 821, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 900, 829, 829, 829, 829, 829, 829, 986 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 343, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 599, 599, 599, 599, 599, 599, 599, 599, 599, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 399, 399, 399, 399, 468, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 469, 399, 399, 399, 399 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 178, 97, 97, 97, 825, 97, 97, 97, 910, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 157, 97, 97, 97, 97 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 957, 829, 829, 829, 829, 829 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 603, 603, 603, 603, 603, 603, 603, 603, 603, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 399, 470, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 97, 97, 97, 97, 908, 97, 97, 188, 97, 97, 97, 97, 97, 97, 912, 97, 97, 97, 97, 97, 195, 97, 982, 97, 97 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 829, 829, 897, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 792, 829, 829, 829, 829, 829, 954, 829, 829, 829 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 606, 606, 606, 606, 606, 606, 607, 599, 599, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 401, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 97, 97, 97, 97, 201, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 729, 729, 729, 729, 729, 729, 729, 729, 729, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 402, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 248, 248, 248, 248, 248, 248, 248, 752, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 614, 614, 614, 614, 614, 614, 614, 614, 614, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 400 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 780, 248, 248, 248, 248, 248 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 618, 618, 618, 618, 618, 618, 618, 618, 618, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 512, 399, 399, 399, 399 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 752, 248, 248, 248, 248, 248, 248 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 512, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 256, 248, 248, 248, 248, 248 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 399, 399, 399, 399, 514, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 812, 256, 248, 248, 248, 248, 248, 248 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 400, 399, 399, 399, 399, 399, 399, 399 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 260, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 515, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 401, 399, 399, 399, 399, 399, 399 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 539, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 564, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 565, 399, 399, 399, 399, 399 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 566, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 399, 399, 399, 399, 602, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399 }, { -1, 323, 324, -1, -1, -1, 325, -1, 326, 875, -1, 44, 44, 44, 630, 630, 630, 630, 630, 630, 327, -1, -1, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 961, 248, 248, 248, 248 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 981, 399, 850, 399, 399, 399, 399 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 626, 626, 626, 626, 626, 626, 626, 626, 626, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, 300, 300, -1, -1, -1, -1, -1, -1, 300, -1, 9, 9, 9, 9, 9, 9, 9, 9, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 629, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, 323, 688, -1, -1, -1, 325, -1, 326, 875, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 689, -1, -1, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 631, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 969, 399, 399, 399, 399 }, { -1, 323, 688, -1, -1, -1, 325, -1, 326, 875, -1, 115, 115, 115, 649, 649, 649, 649, 649, 649, 689, -1, -1, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 641, 641, 641, 641, 641, 641, 641, 641, 641, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 829, 829, 829, 829, 829, 829, 833, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829 }, { -1, 275, 275, -1, -1, -1, -1, 81, -1, 275, 320, 6, 6, 6, 624, 732, 732, 732, 732, 732, -1, -1, 320, 829, 829, 829, 829, 829, 829, 829, 829, 802, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 801, 801, 801, 801, 801, 801, 801, 801, 801, 227, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, 142, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789 }, { -1, -1, -1, -1, -1, -1, -1, 190, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791 }, { -1, 453, 454, -1, -1, -1, 455, -1, 456, 456, -1, 674, 674, 674, 674, 674, 749, 749, 749, 749, 454, -1, -1, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72 }, { -1, 275, 275, -1, -1, -1, -1, 81, -1, 359, 320, 6, 6, 6, 624, 732, 732, 732, 732, 732, -1, -1, 320, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 873, 248, 248, 248, 248 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 707, 399, 399, 399, 399, 399, 399 }, { -1, 300, 300, -1, -1, -1, -1, -1, -1, 300, -1, 885, 898, 898, 904, 9, 9, 9, 9, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 866, 866, 774, 790, 790, 790, 790, 790, 790, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 755, 755, 755, 755, 755, 755, 755, 755, 755, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 835, 399, 399, 399, 399, 399, 399, 399 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 834, 834, 834, 834, 834, 834, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 97, 97, 97, 97, 97, 97, 97, 97, 864, 97, 97, 993, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97 }, { -1, 275, 275, -1, -1, -1, -1, 81, -1, 275, -1, 6, 6, 6, 624, 732, 732, 732, 732, 732, -1, -1, -1, 97, 97, 97, 97, 97, 97, 97, 97, 135, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97 }, { -1, 300, 300, -1, -1, -1, -1, -1, -1, 874, -1, 9, 9, 9, 9, 9, 9, 9, 9, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 757, -1, -1, -1, -1 }, { -1, 300, 300, -1, -1, -1, -1, -1, -1, 874, -1, 9, 9, 9, 9, 9, 9, 9, 9, 9, -1, -1, -1, -1, -1, -1, -1, 448, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 893, 248, 248, 248, 248, 248, 248, 248 }, { -1, 323, 324, -1, -1, -1, 325, -1, 326, 875, -1, 630, 630, 630, 630, 630, 630, 630, 630, 630, 327, -1, -1, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 854, 733, 733, 733, 733, 733, 733, 733, 733, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 906, 248, 248, 248, 248, 248, 248 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 851, 399, 399, 399, 981, 399, 399, 399, 399, 399, 399 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 917, 399, 399, 399, 399, 399, 399 }, { -1, 323, 688, -1, -1, -1, 325, -1, 326, 875, -1, 649, 649, 649, 649, 649, 649, 649, 649, 649, 689, -1, -1, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 829, 829, 829, 829, 829, 836, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 839, 829, 829, 829, 829, 829, 829, 829 }, { -1, 453, 454, -1, -1, -1, 455, -1, 456, 456, -1, 749, 749, 749, 749, 749, 749, 749, 749, 749, 454, -1, -1, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72 }, { -1, 275, 275, -1, -1, -1, -1, 81, -1, 359, 320, 6, 6, 6, 624, 732, 732, 732, 732, 732, -1, -1, 320, 248, 248, 248, 248, 977, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 761, 399, 399, 399, 399, 399 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 951, 951, 951, 951, 951, 951, 951, 951, 951, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 838, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 899, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 901, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 733, 733, 733, 733, 733, 733, 733, 733, 733, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 841, 829, 829, 829, 829, 829, 829 }, { -1, 275, 275, -1, -1, -1, -1, 81, -1, 359, 320, 6, 6, 6, 624, 732, 732, 732, 732, 732, -1, -1, 320, 248, 248, 804, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 827, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 805, 805, 805, 805, 805, 805, 805, 805, 805, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 399, 840, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 733, 733, 854, 854, 854, 854, 854, 854, 854, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 841, 829 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 831, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 399, 399, 399, 842, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 836, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 399, 844, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 836, 829 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 831, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 829, 829, 829, 845, 829, 829, 829, 829, 829, 829, 829, 829, 960, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 761, 399, 399, 399, 399, 399 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 846, 399, 399, 399, 399, 399, 399, 399 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 847, 399, 399, 399, 399 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 848, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 399, 399, 399, 852, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399 }, { -1, 300, 300, -1, -1, -1, -1, -1, -1, 874, -1, 9, 9, 9, 9, 9, 9, 9, 9, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, 300, 300, -1, -1, -1, -1, -1, -1, 874, -1, 9, 9, 9, 9, 9, 9, 9, 9, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 379, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 883, 829, 829, 829, 829 }, { -1, 300, 300, -1, -1, -1, -1, -1, -1, 874, -1, 9, 9, 9, 9, 9, 9, 9, 9, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 380, -1, -1, -1, -1 }, { -1, 300, 300, -1, -1, -1, -1, -1, -1, 874, -1, 9, 9, 9, 9, 9, 9, 9, 9, 9, -1, -1, -1, -1, -1, -1, -1, 381, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, 300, 300, -1, -1, -1, -1, -1, -1, 874, -1, 9, 9, 9, 9, 9, 9, 9, 9, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 382, -1, -1, -1, -1, -1, -1, -1 }, { -1, 300, 300, -1, -1, -1, -1, -1, -1, 874, -1, 9, 9, 9, 9, 9, 9, 9, 9, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 64 }, { -1, 300, 300, -1, -1, -1, -1, -1, -1, 874, -1, 9, 9, 9, 9, 9, 9, 9, 9, 9, -1, -1, -1, -1, -1, -1, -1, 64, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, 300, 300, -1, -1, -1, -1, -1, -1, 874, -1, 9, 9, 9, 9, 9, 9, 9, 9, 9, -1, -1, -1, -1, -1, 384, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, 300, 300, -1, -1, -1, -1, -1, -1, 874, -1, 9, 9, 9, 9, 9, 9, 9, 9, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 388, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, 300, 300, -1, -1, -1, -1, -1, -1, 874, -1, 9, 9, 9, 9, 9, 9, 9, 9, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 882, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 877, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 920, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 922, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 923, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 924, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 881, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 925, -1, 926, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 927, -1, -1, -1, -1, -1, -1, 919 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 923, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 928, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 929, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 909, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 938, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 937, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 933, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 934, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 940, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 952, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 966, 248, 248, 248, 248, 248, 248, 248 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 971, 399, 399, 399, 399, 399, 399, 399 }, { -1, 275, 275, -1, -1, -1, -1, 81, -1, 359, 320, 6, 6, 6, 624, 732, 732, 732, 732, 732, -1, -1, 320, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 930, 248, 248, 248, 248 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 902, 902, 902, 902, 902, 902, 902, 902, 902, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 399, 399, 399, 399, 399, 907, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 913, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 248, 248, 248, 248, 964, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 991, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 988, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399 }, { -1, 275, 275, -1, -1, -1, -1, 81, -1, 359, 320, 6, 6, 6, 624, 732, 732, 732, 732, 732, -1, -1, 320, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 958, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 909, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 877, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 968, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 911, 399, 399, 399, 399, 399, 399, 399 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 915, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 970, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 913, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 911, 399, 399, 399, 399, 399, 399 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 911, 399, 399, 399, 399, 399, 399 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 916, 399, 399, 399, 399, 399, 399, 399 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 914, 399, 399, 399, 399, 399, 399, 399 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 917, 399, 399, 399, 399, 399, 399, 399 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 399, 399, 913, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 399, 399, 399, 399, 399, 918, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 829, 829, 829, 947, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 931, -1, -1, -1, -1, 932, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 935, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 936, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 939, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 941, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 941, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 983, 248, 248, 248 }, { -1, 275, 275, -1, -1, -1, -1, 81, -1, 359, 320, 6, 6, 6, 624, 732, 732, 732, 732, 732, -1, -1, 320, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 987, 248, 248, 248, 248, 248, 248, 248 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 829, 829, 829, 829, 963, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 399, 953, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 399, 399, 399, 399, 990, 399, 399, 399, 399, 399, 972, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 992, 248, 248, 248, 248, 248 }, { -1, 275, 275, -1, -1, -1, -1, 81, -1, 359, 320, 6, 6, 6, 624, 732, 732, 732, 732, 732, -1, -1, 320, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 959, 399, 399, 399, 399 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 399, 971, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 399, 399, 399, 399, 399, 962, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 972, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 399, 965, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 399, 967, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 829, 829, 829, 829, 979, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 984, 399, 399, 399, 399, 399 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 997, 97, 97, 97, 97, 97, 97, 97 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 989, 248, 248, 248 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 829, 829, 829, 829, 996, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 97, 97, 97, 97, 999, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97 }, { -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 985, 829, 829, 829, 829, 829, 829 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 994, 399, 399, 399, 399, 399, 399, 399 } }; private static int[] yy_state_dtrans = new int[] { 0 }; #endregion public Tokens GetNextToken() { int current_state = yy_state_dtrans[(int)current_lexical_state]; int last_accept_state = NoState; bool is_initial_state = true; MarkTokenChunkStart(); token_start = token_chunk_start; expanding_token = false; if (acceptCondition[current_state] != AcceptConditions.NotAccept) { last_accept_state = current_state; MarkTokenEnd(); } while (true) { char lookahead = (is_initial_state && yy_at_bol) ? BOL : Advance(); int next_state = nextState[rowMap[current_state], colMap[lookahead]]; if (lookahead == EOF && is_initial_state) { return Tokens.EOF; } if (next_state != -1) { current_state = next_state; is_initial_state = false; if (acceptCondition[current_state] != AcceptConditions.NotAccept) { last_accept_state = current_state; MarkTokenEnd(); } } else { if (last_accept_state == NoState) { return Tokens.ERROR; } else { if ((acceptCondition[last_accept_state] & AcceptConditions.AcceptOnEnd) != 0) TrimTokenEnd(); MoveToTokenEnd(); if (last_accept_state < 0) { System.Diagnostics.Debug.Assert(last_accept_state >= 1001); } else { bool accepted = false; yyreturn = Accept0(last_accept_state, out accepted); if (accepted) { return yyreturn; } } // token ignored: is_initial_state = true; current_state = yy_state_dtrans[(int)current_lexical_state]; last_accept_state = NoState; MarkTokenChunkStart(); if (acceptCondition[current_state] != AcceptConditions.NotAccept) { last_accept_state = current_state; MarkTokenEnd(); } } } } } // end of GetNextToken } } ================================================ FILE: Source/ClassLibrary/Generated/jsonLexer.cs ================================================ namespace PHP.Library.Json { #region User Code using System; using System.Text; using System.Collections.Generic; #endregion public partial class Lexer { public enum LexicalStates { INITIAL = 0, IN_STRING = 1, } [Flags] private enum AcceptConditions : byte { NotAccept = 0, AcceptOnStart = 1, AcceptOnEnd = 2, Accept = 4 } private const int NoState = -1; private const char BOL = (char)128; private const char EOF = (char)129; private Tokens yyreturn; // content of the STRING literal text protected string yytext() { return new String(buffer, token_start, token_end - token_start); } private StringBuilder str = null; protected string QuotedStringContent{get{return str.ToString();}} private System.IO.TextReader reader; private char[] buffer = new char[512]; // whether the currently parsed token is being expanded (yymore has been called): private bool expanding_token; // offset in buffer where the currently parsed token starts: private int token_start; // offset in buffer where the currently parsed token chunk starts: private int token_chunk_start; // offset in buffer one char behind the currently parsed token (chunk) ending character: private int token_end; // offset of the lookahead character (number of characters parsed): private int lookahead_index; // number of characters read into the buffer: private int chars_read; private bool yy_at_bol = false; public LexicalStates CurrentLexicalState { get { return current_lexical_state; } set { current_lexical_state = value; } } private LexicalStates current_lexical_state; public Lexer(System.IO.TextReader reader) { Initialize(reader, LexicalStates.INITIAL); } public void Initialize(System.IO.TextReader reader, LexicalStates lexicalState, bool atBol) { this.expanding_token = false; this.token_start = 0; this.chars_read = 0; this.lookahead_index = 0; this.token_chunk_start = 0; this.token_end = 0; this.reader = reader; this.yy_at_bol = atBol; this.current_lexical_state = lexicalState; } public void Initialize(System.IO.TextReader reader, LexicalStates lexicalState) { Initialize(reader, lexicalState, false); } #region Accept #pragma warning disable 162 Tokens Accept0(int state,out bool accepted) { accepted = true; switch(state) { case 2: // #line 54 {return Tokens.ARRAY_OPEN;} break; case 3: // #line 55 {return Tokens.ARRAY_CLOSE;} break; case 4: // #line 56 {return Tokens.ITEMS_SEPARATOR;} break; case 5: // #line 57 {return Tokens.NAMEVALUE_SEPARATOR;} break; case 6: // #line 58 {return Tokens.OBJECT_OPEN;} break; case 7: // #line 59 {return Tokens.OBJECT_CLOSE;} break; case 8: // #line 64 {return Tokens.INTEGER;} break; case 9: // #line 65 {} break; case 10: // #line 67 {BEGIN(LexicalStates.IN_STRING); str = new StringBuilder(); return Tokens.STRING_BEGIN;} break; case 11: // #line 63 {return Tokens.DOUBLE;} break; case 12: // #line 60 {return Tokens.TRUE;} break; case 13: // #line 62 {return Tokens.NULL;} break; case 14: // #line 61 {return Tokens.FALSE;} break; case 15: // #line 68 {str.Append(yytext()); return Tokens.CHARS;} break; case 16: // #line 78 {BEGIN(LexicalStates.INITIAL); return Tokens.STRING_END;} break; case 17: // #line 74 {str.Append('\t'); return Tokens.ESCAPEDCHAR;} break; case 18: // #line 72 {str.Append('\r'); return Tokens.ESCAPEDCHAR;} break; case 19: // #line 70 {str.Append('\f'); return Tokens.ESCAPEDCHAR;} break; case 20: // #line 73 {str.Append('\n'); return Tokens.ESCAPEDCHAR;} break; case 21: // #line 77 {str.Append('"'); return Tokens.ESCAPEDCHAR;} break; case 22: // #line 75 {str.Append('\\'); return Tokens.ESCAPEDCHAR;} break; case 23: // #line 71 {str.Append('\b'); return Tokens.ESCAPEDCHAR;} break; case 24: // #line 76 {str.Append('/'); return Tokens.ESCAPEDCHAR;} break; case 25: // #line 69 {str.Append((char)int.Parse(yytext().Substring(2), System.Globalization.NumberStyles.HexNumber)); return Tokens.UNICODECHAR;} break; case 27: goto case 11; } accepted = false; return yyreturn; } #pragma warning restore 162 #endregion private void BEGIN(LexicalStates state) { current_lexical_state = state; } private char Advance() { if (lookahead_index >= chars_read) { if (token_start > 0) { // shift buffer left: int length = chars_read - token_start; System.Buffer.BlockCopy(buffer, token_start << 1, buffer, 0, length << 1); token_end -= token_start; token_chunk_start -= token_start; token_start = 0; chars_read = lookahead_index = length; // populate the remaining bytes: int count = reader.Read(buffer, chars_read, buffer.Length - chars_read); if (count <= 0) return EOF; chars_read += count; } while (lookahead_index >= chars_read) { if (lookahead_index >= buffer.Length) buffer = ResizeBuffer(buffer); int count = reader.Read(buffer, chars_read, buffer.Length - chars_read); if (count <= 0) return EOF; chars_read += count; } } return Map(buffer[lookahead_index++]); } private char[] ResizeBuffer(char[] buf) { char[] result = new char[buf.Length << 1]; System.Buffer.BlockCopy(buf, 0, result, 0, buf.Length << 1); return result; } private void TrimTokenEnd() { if (token_end > token_chunk_start && buffer[token_end - 1] == '\n') token_end--; if (token_end > token_chunk_start && buffer[token_end - 1] == '\r') token_end--; } private void MarkTokenChunkStart() { token_chunk_start = lookahead_index; } private void MarkTokenEnd() { token_end = lookahead_index; } private void MoveToTokenEnd() { lookahead_index = token_end; yy_at_bol = (token_end > token_chunk_start) && (buffer[token_end - 1] == '\r' || buffer[token_end - 1] == '\n'); } public int TokenLength { get { return token_end - token_start; } } public int TokenChunkLength { get { return token_end - token_chunk_start; } } private void yymore() { if (!expanding_token) { token_start = token_chunk_start; expanding_token = true; } } private void yyless(int count) { lookahead_index = token_end = token_chunk_start + count; } private Stack stateStack = new Stack(20); private void yy_push_state(LexicalStates state) { stateStack.Push(current_lexical_state); current_lexical_state = state; } private bool yy_pop_state() { if (stateStack.Count == 0) return false; current_lexical_state = stateStack.Pop(); return true; } private LexicalStates yy_top_state() { return stateStack.Peek(); } #region Tables private static AcceptConditions[] acceptCondition = new AcceptConditions[] { AcceptConditions.NotAccept, // 0 AcceptConditions.Accept, // 1 AcceptConditions.Accept, // 2 AcceptConditions.Accept, // 3 AcceptConditions.Accept, // 4 AcceptConditions.Accept, // 5 AcceptConditions.Accept, // 6 AcceptConditions.Accept, // 7 AcceptConditions.Accept, // 8 AcceptConditions.Accept, // 9 AcceptConditions.Accept, // 10 AcceptConditions.Accept, // 11 AcceptConditions.Accept, // 12 AcceptConditions.Accept, // 13 AcceptConditions.Accept, // 14 AcceptConditions.Accept, // 15 AcceptConditions.Accept, // 16 AcceptConditions.Accept, // 17 AcceptConditions.Accept, // 18 AcceptConditions.Accept, // 19 AcceptConditions.Accept, // 20 AcceptConditions.Accept, // 21 AcceptConditions.Accept, // 22 AcceptConditions.Accept, // 23 AcceptConditions.Accept, // 24 AcceptConditions.Accept, // 25 AcceptConditions.NotAccept, // 26 AcceptConditions.Accept, // 27 AcceptConditions.NotAccept, // 28 AcceptConditions.NotAccept, // 29 AcceptConditions.NotAccept, // 30 AcceptConditions.NotAccept, // 31 AcceptConditions.NotAccept, // 32 AcceptConditions.NotAccept, // 33 AcceptConditions.NotAccept, // 34 AcceptConditions.NotAccept, // 35 AcceptConditions.NotAccept, // 36 AcceptConditions.NotAccept, // 37 AcceptConditions.NotAccept, // 38 AcceptConditions.NotAccept, // 39 AcceptConditions.NotAccept, // 40 AcceptConditions.NotAccept, // 41 AcceptConditions.NotAccept, // 42 AcceptConditions.NotAccept, // 43 AcceptConditions.NotAccept, // 44 AcceptConditions.NotAccept, // 45 AcceptConditions.NotAccept, // 46 AcceptConditions.NotAccept, // 47 }; private static int[] colMap = new int[] { 23, 23, 23, 23, 23, 23, 23, 23, 23, 20, 20, 23, 23, 20, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 20, 23, 22, 23, 23, 23, 23, 23, 23, 23, 23, 19, 3, 16, 18, 27, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 4, 23, 23, 23, 23, 23, 23, 12, 26, 25, 25, 10, 11, 23, 23, 23, 23, 23, 13, 23, 15, 23, 23, 23, 8, 14, 7, 9, 23, 23, 23, 23, 23, 1, 24, 2, 23, 23, 23, 12, 26, 25, 25, 10, 11, 23, 23, 23, 23, 23, 13, 23, 15, 23, 23, 23, 8, 14, 7, 9, 23, 23, 23, 23, 23, 5, 21, 6, 23, 23, 0, 0 }; private static int[] rowMap = new int[] { 0, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 3, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 3, 16, 11, 17, 18, 19, 20, 21, 22, 23, 24 }; private static int[,] nextState = new int[,] { { 1, 2, 3, 4, 5, 6, 7, 26, -1, -1, -1, 28, -1, -1, -1, 29, 30, 8, -1, -1, 9, 9, 10, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 32, -1, -1, -1, -1, -1, -1, 8, 33, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, -1, 15, -1, 15, 15, 15 }, { -1, -1, -1, -1, -1, -1, -1, -1, 44, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 39, -1, -1, -1, -1, -1, -1, 27, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 31, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, 45, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 35, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 37, 11, -1, 37, -1, 37, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 27, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 12, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 38, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 13, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 14, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 1, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 16, 15, 41, 15, 15, 15 }, { -1, -1, -1, -1, -1, -1, -1, 17, 18, 42, -1, 19, -1, -1, -1, 20, -1, -1, -1, -1, -1, -1, 21, -1, 22, -1, 23, 24 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 47, 47, 47, -1, -1, -1, -1, 47, -1, -1, -1, -1, -1, -1, -1, 47, 47, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 25, 25, 25, -1, -1, -1, -1, 25, -1, -1, -1, -1, -1, -1, -1, 25, 25, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, 34, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 36, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 43, 43, 43, -1, -1, -1, -1, 43, -1, -1, -1, -1, -1, -1, -1, 43, 43, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 46, 46, 46, -1, -1, -1, -1, 46, -1, -1, -1, -1, -1, -1, -1, 46, 46, -1 } }; private static int[] yy_state_dtrans = new int[] { 0, 40 }; #endregion public Tokens GetNextToken() { int current_state = yy_state_dtrans[(int)current_lexical_state]; int last_accept_state = NoState; bool is_initial_state = true; MarkTokenChunkStart(); token_start = token_chunk_start; expanding_token = false; if (acceptCondition[current_state] != AcceptConditions.NotAccept) { last_accept_state = current_state; MarkTokenEnd(); } while (true) { char lookahead = (is_initial_state && yy_at_bol) ? BOL : Advance(); int next_state = nextState[rowMap[current_state], colMap[lookahead]]; if (lookahead == EOF && is_initial_state) { return Tokens.EOF; } if (next_state != -1) { current_state = next_state; is_initial_state = false; if (acceptCondition[current_state] != AcceptConditions.NotAccept) { last_accept_state = current_state; MarkTokenEnd(); } } else { if (last_accept_state == NoState) { return Tokens.ERROR; } else { if ((acceptCondition[last_accept_state] & AcceptConditions.AcceptOnEnd) != 0) TrimTokenEnd(); MoveToTokenEnd(); if (last_accept_state < 0) { System.Diagnostics.Debug.Assert(last_accept_state >= 48); } else { bool accepted = false; yyreturn = Accept0(last_accept_state, out accepted); if (accepted) { return yyreturn; } } // token ignored: is_initial_state = true; current_state = yy_state_dtrans[(int)current_lexical_state]; last_accept_state = NoState; MarkTokenChunkStart(); if (acceptCondition[current_state] != AcceptConditions.NotAccept) { last_accept_state = current_state; MarkTokenEnd(); } } } } } // end of GetNextToken } } ================================================ FILE: Source/ClassLibrary/Generated/jsonParser.cs ================================================ // This code was generated by the Gardens Point Parser Generator // Copyright (c) Wayne Kelly, QUT 2005 // (see accompanying GPPGcopyright.rtf) using System; using System.Text; using System.Collections.Generic; using PHP.Core; using PHP.Core.Parsers.GPPG; using System.Diagnostics; namespace PHP.Library.Json { public enum Tokens {ERROR=1,EOF=2,ARRAY_OPEN=3,ARRAY_CLOSE=4,ITEMS_SEPARATOR=5,NAMEVALUE_SEPARATOR=6,OBJECT_OPEN=7,OBJECT_CLOSE=8,TRUE=9,FALSE=10,NULL=11,INTEGER=12,DOUBLE=13,STRING=14,STRING_BEGIN=15,CHARS=16,UNICODECHAR=17,ESCAPEDCHAR=18,STRING_END=19}; public partial struct SemanticValueType { public object obj; } public partial struct Position { public int FirstLine; public int FirstColumn; public int FirstOffset; public int LastLine; public int LastColumn; public int LastOffset; public Position(int firstLine, int firstColumn, int firstOffset, int lastLine, int lastColumn, int lastOffset) { this.FirstLine = firstLine; this.FirstColumn = firstColumn; this.FirstOffset = firstOffset; this.LastLine = lastLine; this.LastColumn = lastColumn; this.LastOffset = lastOffset; } } public partial class Parser: ShiftReduceParser { protected override string[] NonTerminals { get { return nonTerminals; } } private static string[] nonTerminals; protected override State[] States { get { return states; } } private static State[] states; protected override Rule[] Rules { get { return rules; } } private static Rule[] rules; protected sealed override Position CombinePositions(Position first, Position last) { return new Position(first.FirstLine, first.FirstColumn, first.FirstOffset, last.LastLine, last.LastColumn, last.LastOffset); } #region Construction static Parser() { states = new State[] { new State(0, new int[] {14,4,12,5,13,6,7,8,3,19,9,26,10,27,11,28}, new int[] {-1,1,-3,3,-4,7,-7,18}), new State(1, new int[] {2,2}), new State(2, -1), new State(3, -2), new State(4, -12), new State(5, -13), new State(6, -14), new State(7, -15), new State(8, new int[] {8,11,14,15}, new int[] {-5,9,-6,12}), new State(9, new int[] {8,10}), new State(10, -3), new State(11, -4), new State(12, new int[] {5,13,8,-6}), new State(13, new int[] {14,15}, new int[] {-5,14,-6,12}), new State(14, -5), new State(15, new int[] {6,16}), new State(16, new int[] {14,4,12,5,13,6,7,8,3,19,9,26,10,27,11,28}, new int[] {-3,17,-4,7,-7,18}), new State(17, -7), new State(18, -16), new State(19, new int[] {4,22,14,4,12,5,13,6,7,8,3,19,9,26,10,27,11,28}, new int[] {-8,20,-3,23,-4,7,-7,18}), new State(20, new int[] {4,21}), new State(21, -8), new State(22, -9), new State(23, new int[] {5,24,4,-11}), new State(24, new int[] {14,4,12,5,13,6,7,8,3,19,9,26,10,27,11,28}, new int[] {-8,25,-3,23,-4,7,-7,18}), new State(25, -10), new State(26, -17), new State(27, -18), new State(28, -19), }; rules = new Rule[20]; rules[1]=new Rule(-2, new int[]{-1,2}); rules[2]=new Rule(-1, new int[]{-3}); rules[3]=new Rule(-4, new int[]{7,-5,8}); rules[4]=new Rule(-4, new int[]{7,8}); rules[5]=new Rule(-5, new int[]{-6,5,-5}); rules[6]=new Rule(-5, new int[]{-6}); rules[7]=new Rule(-6, new int[]{14,6,-3}); rules[8]=new Rule(-7, new int[]{3,-8,4}); rules[9]=new Rule(-7, new int[]{3,4}); rules[10]=new Rule(-8, new int[]{-3,5,-8}); rules[11]=new Rule(-8, new int[]{-3}); rules[12]=new Rule(-3, new int[]{14}); rules[13]=new Rule(-3, new int[]{12}); rules[14]=new Rule(-3, new int[]{13}); rules[15]=new Rule(-3, new int[]{-4}); rules[16]=new Rule(-3, new int[]{-7}); rules[17]=new Rule(-3, new int[]{9}); rules[18]=new Rule(-3, new int[]{10}); rules[19]=new Rule(-3, new int[]{11}); nonTerminals = new string[] {"", "start", "$accept", "value", "object", "members", "pair", "array", "elements", }; } #endregion protected override void DoAction(int action) { switch (action) { case 2: // start -> value { Result = value_stack.array[value_stack.top-1].yyval.obj; } return; case 3: // object -> OBJECT_OPEN members OBJECT_CLOSE { var elements = (List>)value_stack.array[value_stack.top-2].yyval.obj; if (decodeOptions.Assoc) { var arr = new PhpArray( elements.Count ); foreach (var item in elements) arr.Add( PHP.Core.Convert.StringToArrayKey(item.Key), item.Value ); yyval.obj = arr; } else { var std = new stdClass(context, true); std.AddRange( elements ); yyval.obj = std; } } return; case 4: // object -> OBJECT_OPEN OBJECT_CLOSE { yyval.obj = new stdClass(context, true); } return; case 5: // members -> pair ITEMS_SEPARATOR members { var elements = (List>)value_stack.array[value_stack.top-1].yyval.obj; var result = new List>( elements.Count + 1 ){ (KeyValuePair)value_stack.array[value_stack.top-3].yyval.obj }; result.AddRange(elements); yyval.obj = result; } return; case 6: // members -> pair { yyval.obj = new List>(){ (KeyValuePair)value_stack.array[value_stack.top-1].yyval.obj }; } return; case 7: // pair -> STRING NAMEVALUE_SEPARATOR value { yyval.obj = new KeyValuePair((string)value_stack.array[value_stack.top-3].yyval.obj, value_stack.array[value_stack.top-1].yyval.obj); } return; case 8: // array -> ARRAY_OPEN elements ARRAY_CLOSE { var elements = (List)value_stack.array[value_stack.top-2].yyval.obj; var arr = new PhpArray( elements.Count ); foreach (var item in elements) arr.Add( item ); yyval.obj = arr; } return; case 9: // array -> ARRAY_OPEN ARRAY_CLOSE { yyval.obj = new PhpArray(); } return; case 10: // elements -> value ITEMS_SEPARATOR elements { var elements = (List)value_stack.array[value_stack.top-1].yyval.obj; var result = new List( elements.Count + 1 ){ value_stack.array[value_stack.top-3].yyval.obj }; result.AddRange(elements); yyval.obj = result; } return; case 11: // elements -> value { yyval.obj = new List(){ value_stack.array[value_stack.top-1].yyval.obj }; } return; case 12: // value -> STRING {yyval.obj = value_stack.array[value_stack.top-1].yyval.obj;} return; case 13: // value -> INTEGER {yyval.obj = value_stack.array[value_stack.top-1].yyval.obj;} return; case 14: // value -> DOUBLE {yyval.obj = value_stack.array[value_stack.top-1].yyval.obj;} return; case 15: // value -> object {yyval.obj = value_stack.array[value_stack.top-1].yyval.obj;} return; case 16: // value -> array {yyval.obj = value_stack.array[value_stack.top-1].yyval.obj;} return; case 17: // value -> TRUE {yyval.obj = true;} return; case 18: // value -> FALSE {yyval.obj = false;} return; case 19: // value -> NULL {yyval.obj = null;} return; } } protected override string TerminalToString(int terminal) { if (((Tokens)terminal).ToString() != terminal.ToString()) return ((Tokens)terminal).ToString(); else return CharToString((char)terminal); } protected override int EofToken { get { return (int)Tokens.EOF; } } protected override int ErrorToken { get { return (int)Tokens.ERROR; } } private readonly ScriptContext/*!*/context; private readonly PHP.Library.JsonFormatter.DecodeOptions/*!*/decodeOptions; public Parser(ScriptContext/*!*/context, PHP.Library.JsonFormatter.DecodeOptions/*!*/decodeOptions) { System.Diagnostics.Debug.Assert(context != null && decodeOptions != null); this.context = context; this.decodeOptions = decodeOptions; } public object Result{get;private set;} } } ================================================ FILE: Source/ClassLibrary/Generators/Generate.cmd ================================================ "..\..\..\Tools\cslex" "StrToTime.lex" "..\Generated\StrToTimeScanner.cs" /v:2 "..\..\..\Tools\cslex" "json.lex" "..\Generated\jsonLexer.cs" /v:2 "..\..\..\Tools\gppg" /l /r "json.y" "..\Generated\jsonParser.cs" "..\Generated\json.log" pause ================================================ FILE: Source/ClassLibrary/Generators/StrToTime.lex ================================================ using System; using System.Collections.Generic; /* Copyright (c) 2005-2006 Tomas Matousek. Based on PHP5 implementation by Derick Rethans . The use and distribution terms for this software are contained in the file named License.txt, which can be found in the root of the Phalanger distribution. By using this software in any fashion, you are agreeing to be bound by the terms of this license. You must not remove this notice from this software. */ %% %namespace PHP.Library.StrToTime %type Tokens %eofval Tokens.EOF %errorval Tokens.ERROR %attributes internal %class Scanner %function GetNextToken %{ internal DateInfo Time { get { return time; } } private DateInfo time = new DateInfo(); internal int Errors { get { return errors; } } private int errors = 0; internal int Position { get { return pos; } } private int pos = 0; private string str; void INIT() { str = new string(buffer, token_start, token_end - token_start); pos = 0; } void DEINIT() { } %} any [\000-\377] frac "."[0-9]+ az14 [a-z]|[a-z][a-z]|[a-z][a-z][a-z]|[a-z][a-z][a-z][a-z] ago "ago" hour24 [01]?[0-9]|"2"[0-4] hour24lz [01][0-9]|"2"[0-4] hour12 "0"?[1-9]|"1"[0-2] minute [0-5]?[0-9] minutelz [0-5][0-9] second {minute}|"60" secondlz {minutelz}|"60" meridian [ap]"."?m"."? daysuf "st"|"nd"|"rd"|"th" tz "("?{az14}")"?|[a-z][a-z]+([_/][a-z][a-z]+)+ tzcorrection [+-]{hour24}":"?{minute}? zone {tzcorrection}|{tz} month "0"?[0-9]|"1"[0-2] day ([0-2]?[0-9]|"3"[01]){daysuf}? year [0-9]|[0-9][0-9]|[0-9][0-9][0-9]|[0-9][0-9][0-9][0-9] year2 [0-9][0-9] year4 [0-9][0-9][0-9][0-9] dayofyear "00"[1-9]|"0"[1-9][0-9]|[1-2][0-9][0-9]|"3"[0-5][0-9]|"36"[0-6] weekofyear "0"[1-9]|[1-4][0-9]|"5"[0-3] monthlz "0"[1-9]|"1"[0-2] daylz "0"[1-9]|[1-2][0-9]|"3"[01] dayfull "sunday"|"monday"|"tuesday"|"wednesday"|"thursday"|"friday"|"saturday" dayabbr "sun"|"mon"|"tue"|"wed"|"thu"|"fri"|"sat"|"sun" daytext {dayfull}|{dayabbr} monthfull "january"|"february"|"march"|"april"|"may"|"june"|"july"|"august"|"september"|"october"|"november"|"december" monthabbr "jan"|"feb"|"mar"|"apr"|"may"|"jun"|"jul"|"aug"|"sep"|"sept"|"oct"|"nov"|"dec" monthroman "i"|"ii"|"iii"|"iv"|"v"|"vi"|"vii"|"viii"|"ix"|"x"|"xi"|"xii" monthtext {monthfull}|{monthabbr}|{monthroman} timetiny12 {hour12}[ ]*{meridian} timeshort12 {hour12}[:.]{minutelz}[ ]*{meridian} timelong12 {hour12}[:.]{minute}[:.]{secondlz}[ ]*{meridian} timeshort24 {hour24}[:.]{minute}([ ]*{zone})? timelong24 {hour24}[:.]{minute}[:.]{second}([ ]*{zone})? iso8601long {hour24}[:.]{minute}[:.]{second}{frac}([ ]*{zone})? iso8601normtz {hour24}[:.]{minute}[:.]{secondlz}[ ]*{zone} gnunocolon {hour24lz}{minutelz} iso8601nocolon {hour24lz}{minutelz}{secondlz} americanshort {month}"/"{day} american {month}"/"{day}"/"{year} iso8601dateslash {year4}"/"{monthlz}"/"{daylz}"/"? pointeddate4 {day}[-.]{month}[-.]{year4} gnudateshort {year}"-"{month}"-"{day} iso8601date {year4}"-"{monthlz}"-"{daylz} pointeddate2 {day}"."{month}"."{year2} datefull {day}([-. ])*{monthtext}([-. ])*{year} datenoday {monthtext}([-. ])*{year4} datenodayrev {year4}([-. ])*{monthtext} datetextual {monthtext}([-. ])*{day}[,.stndrh ]*{year} datenoyear {monthtext}([-. ])*{day}[,.stndrh ]* datenoyearrev {day}([-. ])*{monthtext} datenocolon {year4}{monthlz}{daylz} soap {year4}"-"{monthlz}"-"{daylz}"t"{hour24lz}":"{minutelz}":"{secondlz}{frac}{tzcorrection}? xmlrpc {year4}{monthlz}{daylz}"t"{hour24}":"{minutelz}":"{secondlz} xmlrpcnocolon {year4}{monthlz}{daylz}"t"{hour24}{minutelz}{secondlz} wddx {year4}"-"{month}"-"{day}"t"{hour24}":"{minute}":"{second} pgydotd {year4}"."?{dayofyear} pgtextshort {monthabbr}"-"{daylz}"-"{year} pgtextreverse {year}"-"{monthabbr}"-"{daylz} isoweekday {year4}"w"{weekofyear}[0-7] isoweek {year4}"w"{weekofyear} clf {day}"/"{monthabbr}"/"{year4}":"{hour24lz}":"{minutelz}":"{secondlz}[ ]+{tzcorrection} timestamp "@""-"?[1-9][0-9]* dateshortwithtimeshort {datenoyear}{timeshort24} dateshortwithtimelong {datenoyear}{timelong24} dateshortwithtimelongtz {datenoyear}{iso8601normtz} reltextnumber "first"|"next"|"second"|"third"|"fourth"|"fifth"|"sixth"|"seventh"|"eight"|"ninth"|"tenth"|"eleventh"|"twelfth"|"last"|"previous"|"this" reltextunit (("sec"|"second"|"min"|"minute"|"hour"|"day"|"week"|"fortnight"|"forthnight"|"month"|"year")"s"?)|{daytext} relnumber ([+-]?[ ]*[0-9]+) relative {relnumber}[ ]*{reltextunit} relativetext {reltextnumber}[ ]*{reltextunit} %% "yesterday" { INIT(); time.HAVE_RELATIVE(); time.UNHAVE_TIME(); time.relative.d = -1; DEINIT(); return Tokens.RELATIVE; } "now" { INIT(); DEINIT(); return Tokens.RELATIVE; } "noon" { INIT(); time.UNHAVE_TIME(); time.HAVE_TIME(); time.h = 12; DEINIT(); return Tokens.RELATIVE; } "midnight"|"today" { INIT(); time.UNHAVE_TIME(); DEINIT(); return Tokens.RELATIVE; } "tomorrow" { INIT(); time.HAVE_RELATIVE(); time.UNHAVE_TIME(); time.relative.d = 1; DEINIT(); return Tokens.RELATIVE; } {timestamp} { INIT(); time.HAVE_RELATIVE(); time.UNHAVE_DATE(); time.UNHAVE_TIME(); int i = DateInfo.ParseSignedInt(str, ref pos, 24); time.y = 1970; time.m = 1; time.d = 1; time.h = time.i = time.s = 0; time.f = 0.0; time.relative.s += i; time.z = 0; time.HAVE_TZ(); DEINIT(); return Tokens.RELATIVE; } {timetiny12}|{timeshort12}|{timelong12} { INIT(); if (time.have_time!=0) { return Tokens.ERROR; } time.HAVE_TIME(); time.h = DateInfo.ParseUnsignedInt(str, ref pos, 2); if (pos < str.Length && (str[pos] == ':' || str[pos] == '.')) { time.i = DateInfo.ParseUnsignedInt(str, ref pos, 2); if (pos < str.Length && (str[pos] == ':' || str[pos] == '.')) { time.s = DateInfo.ParseUnsignedInt(str, ref pos, 2); } } if (!time.SetMeridian(str, ref pos)) { return Tokens.ERROR; } DEINIT(); return Tokens.TIME12; } {timeshort24}|{timelong24}|{iso8601long} { INIT(); if (time.have_time!=0) { return Tokens.ERROR; } time.HAVE_TIME(); time.h = DateInfo.ParseUnsignedInt(str, ref pos, 2); time.i = DateInfo.ParseUnsignedInt(str, ref pos, 2); if (pos < str.Length && (str[pos] == ':' || str[pos] == '.')) { time.s = DateInfo.ParseUnsignedInt(str, ref pos, 2); if (pos < str.Length && str[pos] == '.') time.f = DateInfo.ParseFraction(str, ref pos, 8); } if (pos < str.Length) errors += time.SetTimeZone(str, ref pos) ? 0 : 1; DEINIT(); return Tokens.TIME24_WITH_ZONE; } {gnunocolon} { INIT(); switch (time.have_time) { case 0: time.h = DateInfo.ParseUnsignedInt(str, ref pos, 2); time.i = DateInfo.ParseUnsignedInt(str, ref pos, 2); time.s = 0; break; case 1: time.y = DateInfo.ParseUnsignedInt(str, ref pos, 4); break; default: DEINIT(); return Tokens.ERROR; } time.have_time++; DEINIT(); return Tokens.GNU_NOCOLON; } {iso8601nocolon} { INIT(); if (time.have_time!=0) { return Tokens.ERROR; } time.HAVE_TIME(); time.h = DateInfo.ParseUnsignedInt(str, ref pos, 2); time.i = DateInfo.ParseUnsignedInt(str, ref pos, 2); time.s = DateInfo.ParseUnsignedInt(str, ref pos, 2); if (pos < str.Length) errors += time.SetTimeZone(str, ref pos) ? 0 : 1; DEINIT(); return Tokens.ISO_NOCOLON; } {americanshort}|{american} { INIT(); if (time.have_date!=0) { return Tokens.ERROR; } time.HAVE_DATE(); time.m = DateInfo.ParseUnsignedInt(str, ref pos, 2); time.d = DateInfo.ParseUnsignedInt(str, ref pos, 2); if (pos < str.Length && str[pos] == '/') { time.y = DateInfo.ParseUnsignedInt(str, ref pos, 4); time.y = DateInfo.ProcessYear(time.y); } DEINIT(); return Tokens.AMERICAN; } {iso8601date}|{iso8601dateslash} { INIT(); if (time.have_date!=0) { return Tokens.ERROR; } time.HAVE_DATE(); time.y = DateInfo.ParseUnsignedInt(str, ref pos, 4); time.m = DateInfo.ParseUnsignedInt(str, ref pos, 2); time.d = DateInfo.ParseUnsignedInt(str, ref pos, 2); DEINIT(); return Tokens.ISO_DATE; } {datefull} { INIT(); if (time.have_date!=0) { return Tokens.ERROR;} time.HAVE_DATE(); time.d = DateInfo.ParseUnsignedInt(str, ref pos, 2); DateInfo.SkipDaySuffix(str, ref pos); time.m = DateInfo.ParseMonth(str, ref pos); time.y = DateInfo.ParseUnsignedInt(str, ref pos, 4); time.y = DateInfo.ProcessYear(time.y); DEINIT(); return Tokens.DATE_FULL; } {gnudateshort} { INIT(); if (time.have_date!=0) { return Tokens.ERROR; } time.HAVE_DATE(); time.y = DateInfo.ParseUnsignedInt(str, ref pos, 4); time.m = DateInfo.ParseUnsignedInt(str, ref pos, 2); time.d = DateInfo.ParseUnsignedInt(str, ref pos, 2); time.y = DateInfo.ProcessYear(time.y); DEINIT(); return Tokens.ISO_DATE; } {pointeddate4} { INIT(); if (time.have_date!=0) { return Tokens.ERROR;} time.HAVE_DATE(); time.d = DateInfo.ParseUnsignedInt(str, ref pos, 2); time.m = DateInfo.ParseUnsignedInt(str, ref pos, 2); time.y = DateInfo.ParseUnsignedInt(str, ref pos, 4); DEINIT(); return Tokens.DATE_FULL_POINTED; } {pointeddate2} { INIT(); if (time.have_date!=0) { return Tokens.ERROR;} time.HAVE_DATE(); time.d = DateInfo.ParseUnsignedInt(str, ref pos, 2); time.m = DateInfo.ParseUnsignedInt(str, ref pos, 2); time.y = DateInfo.ParseUnsignedInt(str, ref pos, 2); time.y = DateInfo.ProcessYear(time.y); DEINIT(); return Tokens.DATE_FULL_POINTED; } {datenoday} { INIT(); if (time.have_date!=0) { return Tokens.ERROR; } time.HAVE_DATE(); time.m = DateInfo.ParseMonth(str, ref pos); time.y = DateInfo.ParseUnsignedInt(str, ref pos, 4); time.d = 1; time.y = DateInfo.ProcessYear(time.y); DEINIT(); return Tokens.DATE_NO_DAY; } {datenodayrev} { INIT(); if (time.have_date!=0) { return Tokens.ERROR; } time.HAVE_DATE(); time.y = DateInfo.ParseUnsignedInt(str, ref pos, 4); time.m = DateInfo.ParseMonth(str, ref pos); time.d = 1; time.y = DateInfo.ProcessYear(time.y); DEINIT(); return Tokens.DATE_NO_DAY; } {datetextual}|{datenoyear} { INIT(); if (time.have_date!=0) { return Tokens.ERROR; } time.HAVE_DATE(); time.m = DateInfo.ParseMonth(str, ref pos); time.d = DateInfo.ParseUnsignedInt(str, ref pos, 2); time.y = DateInfo.ParseUnsignedInt(str, ref pos, 4); time.y = DateInfo.ProcessYear(time.y); DEINIT(); return Tokens.DATE_TEXT; } {datenoyearrev} { INIT(); if (time.have_date!=0) { return Tokens.ERROR; } time.HAVE_DATE(); time.d = DateInfo.ParseUnsignedInt(str, ref pos, 2); DateInfo.SkipDaySuffix(str, ref pos); time.m = DateInfo.ParseMonth(str, ref pos); DEINIT(); return Tokens.DATE_TEXT; } {datenocolon} { INIT(); if (time.have_date!=0) { return Tokens.ERROR; } time.HAVE_DATE(); time.y = DateInfo.ParseUnsignedInt(str, ref pos, 4); time.m = DateInfo.ParseUnsignedInt(str, ref pos, 2); time.d = DateInfo.ParseUnsignedInt(str, ref pos, 2); DEINIT(); return Tokens.DATE_NOCOLON; } {xmlrpc}|{xmlrpcnocolon}|{soap}|{wddx} { INIT(); if (time.have_time!=0) { return Tokens.ERROR; } time.HAVE_TIME(); if (time.have_date!=0) { return Tokens.ERROR; } time.HAVE_DATE(); time.y = DateInfo.ParseUnsignedInt(str, ref pos, 4); time.m = DateInfo.ParseUnsignedInt(str, ref pos, 2); time.d = DateInfo.ParseUnsignedInt(str, ref pos, 2); time.h = DateInfo.ParseUnsignedInt(str, ref pos, 2); time.i = DateInfo.ParseUnsignedInt(str, ref pos, 2); time.s = DateInfo.ParseUnsignedInt(str, ref pos, 2); if (pos < str.Length && str[pos] == '.') { time.f = DateInfo.ParseFraction(str, ref pos, 9); if (pos < str.Length) errors += time.SetTimeZone(str, ref pos) ? 0 : 1; } DEINIT(); return Tokens.XMLRPC_SOAP; } {pgydotd} { INIT(); if (time.have_date!=0) { return Tokens.ERROR; } time.HAVE_DATE(); time.y = DateInfo.ParseUnsignedInt(str, ref pos, 4); time.d = DateInfo.ParseUnsignedInt(str, ref pos, 3); time.m = 1; time.y = DateInfo.ProcessYear(time.y); DEINIT(); return Tokens.PG_YEARDAY; } {isoweekday} { int week, day; INIT(); if (time.have_date!=0) { return Tokens.ERROR; } time.HAVE_DATE(); time.HAVE_RELATIVE(); time.y = DateInfo.ParseUnsignedInt(str, ref pos, 4); week = DateInfo.ParseUnsignedInt(str, ref pos, 2); day = DateInfo.ParseUnsignedInt(str, ref pos, 1); time.m = 1; time.d = 1; time.relative.d = DateInfo.WeekToDay(time.y, week, day); DEINIT(); return Tokens.ISO_WEEK; } {isoweek} { { int w, d; INIT(); if (time.have_date!=0) { return Tokens.ERROR; } time.HAVE_DATE(); time.HAVE_RELATIVE(); time.y = DateInfo.ParseUnsignedInt(str, ref pos, 4); w = DateInfo.ParseUnsignedInt(str, ref pos, 2); d = 1; time.m = 1; time.d = 1; time.relative.d = DateInfo.WeekToDay(time.y, w, d); DEINIT(); return Tokens.ISO_WEEK; } } {pgtextshort} { INIT(); if (time.have_date!=0) { return Tokens.ERROR; } time.HAVE_DATE(); time.m = DateInfo.ParseMonth(str, ref pos); time.d = DateInfo.ParseUnsignedInt(str, ref pos, 2); time.y = DateInfo.ParseUnsignedInt(str, ref pos, 4); time.y = DateInfo.ProcessYear(time.y); DEINIT(); return Tokens.PG_TEXT; } {pgtextreverse} { INIT(); if (time.have_date!=0) { return Tokens.ERROR; } time.HAVE_DATE(); time.y = DateInfo.ParseUnsignedInt(str, ref pos, 4); time.m = DateInfo.ParseMonth(str, ref pos); time.d = DateInfo.ParseUnsignedInt(str, ref pos, 2); time.y = DateInfo.ProcessYear(time.y); DEINIT(); return Tokens.PG_TEXT; } {clf} { INIT(); if (time.have_time!=0) { return Tokens.ERROR; } time.HAVE_TIME(); if (time.have_date!=0) { return Tokens.ERROR; } time.HAVE_DATE(); time.d = DateInfo.ParseUnsignedInt(str, ref pos, 2); time.m = DateInfo.ParseMonth(str, ref pos); time.y = DateInfo.ParseUnsignedInt(str, ref pos, 4); time.h = DateInfo.ParseUnsignedInt(str, ref pos, 2); time.i = DateInfo.ParseUnsignedInt(str, ref pos, 2); time.s = DateInfo.ParseUnsignedInt(str, ref pos, 2); errors += time.SetTimeZone(str, ref pos) ? 0 : 1; DEINIT(); return Tokens.CLF; } {year4} { INIT(); time.y = DateInfo.ParseUnsignedInt(str, ref pos, 4); DEINIT(); return Tokens.CLF; } {ago} { INIT(); time.relative.y = -time.relative.y; time.relative.m = -time.relative.m; time.relative.d = -time.relative.d; time.relative.h = -time.relative.h; time.relative.i = -time.relative.i; time.relative.s = -time.relative.s; time.relative.weekday = -time.relative.weekday; DEINIT(); return Tokens.AGO; } {relativetext} { INIT(); time.HAVE_RELATIVE(); while (pos < str.Length) { int behavior; int amount = DateInfo.ParseRelativeText(str, ref pos, out behavior); while (pos < str.Length && str[pos] == ' ') pos++; time.SetRelative(DateInfo.ReadToSpace(str,ref pos), amount, behavior); } DEINIT(); return Tokens.RELATIVE; } {daytext} { INIT(); time.HAVE_RELATIVE(); time.HAVE_WEEKDAY_RELATIVE(); time.UNHAVE_TIME(); time.SetWeekDay(DateInfo.ReadToSpace(str,ref pos)); time.relative.weekday_behavior = 1; DEINIT(); return Tokens.WEEKDAY; } {tzcorrection}|{tz} { INIT(); errors += time.SetTimeZone(str, ref pos) ? 0 : 1; DEINIT(); return Tokens.TIMEZONE; } {dateshortwithtimeshort}|{dateshortwithtimelong}|{dateshortwithtimelongtz} { INIT(); if (time.have_date!=0) { return Tokens.ERROR; } time.HAVE_DATE(); time.m = DateInfo.ParseMonth(str, ref pos); time.d = DateInfo.ParseUnsignedInt(str, ref pos, 2); if (time.have_time!=0) { return Tokens.ERROR; } time.HAVE_TIME(); time.h = DateInfo.ParseUnsignedInt(str, ref pos, 2); time.i = DateInfo.ParseUnsignedInt(str, ref pos, 2); if (pos < str.Length && str[pos] == ':') { time.s = DateInfo.ParseUnsignedInt(str, ref pos, 2); if (pos < str.Length && str[pos] == '.') time.f = DateInfo.ParseFraction(str, ref pos, 8); } if (pos < str.Length) errors += time.SetTimeZone(str, ref pos) ? 0 : 1; DEINIT(); return Tokens.SHORTDATE_WITH_TIME; } {relative} { INIT(); time.HAVE_RELATIVE(); while(pos < str.Length) { int amount = DateInfo.ParseSignedInt(str, ref pos, 24); while (pos < str.Length && str[pos] == ' ') pos++; time.SetRelative(DateInfo.ReadToSpace(str, ref pos), amount, 0); } DEINIT(); return Tokens.RELATIVE; } [ .,\0\n\r\t] { break; } {any} { return Tokens.ERROR; } ================================================ FILE: Source/ClassLibrary/Generators/json.lex ================================================ using System; using System.Text; using System.Collections.Generic; %% %namespace PHP.Library.Json %type Tokens %class Lexer %eofval Tokens.EOF %errorval Tokens.ERROR %attributes public partial %charmap Map %function GetNextToken %ignorecase %{ // content of the STRING literal text protected string yytext() { return new String(buffer, token_start, token_end - token_start); } private StringBuilder str = null; protected string QuotedStringContent{get{return str.ToString();}} %} e e[\+|\-]? hex [0-9a-fA-F] digit [0-9] digit1 [1-9] digits {digit}+ exp {e}{digits} frac "."{digits} int -?{digits} double {int}({frac}{exp}|{frac}|{exp}) integer {int} quote \" charUnicode \\u{hex}{hex}{hex}{hex} charNormal [^\"\\] charEscaped [\\f|\\b|\\r|\\n|\\t|\\\\|\\/|\\\"] whitespace [\r|\n|\t| ] // whitespaces allowed between tokens %x INITIAL %x IN_STRING %% "[" {return Tokens.ARRAY_OPEN;} "]" {return Tokens.ARRAY_CLOSE;} "," {return Tokens.ITEMS_SEPARATOR;} ":" {return Tokens.NAMEVALUE_SEPARATOR;} "{" {return Tokens.OBJECT_OPEN;} "}" {return Tokens.OBJECT_CLOSE;} "true" {return Tokens.TRUE;} "false" {return Tokens.FALSE;} "null" {return Tokens.NULL;} {double} {return Tokens.DOUBLE;} {integer} {return Tokens.INTEGER;} {whitespace} {} {quote} {BEGIN(LexicalStates.IN_STRING); str = new StringBuilder(); return Tokens.STRING_BEGIN;} {charNormal}+ {str.Append(yytext()); return Tokens.CHARS;} {charUnicode} {str.Append((char)int.Parse(yytext().Substring(2), System.Globalization.NumberStyles.HexNumber)); return Tokens.UNICODECHAR;} "\\f" {str.Append('\f'); return Tokens.ESCAPEDCHAR;} "\\b" {str.Append('\b'); return Tokens.ESCAPEDCHAR;} "\\r" {str.Append('\r'); return Tokens.ESCAPEDCHAR;} "\\n" {str.Append('\n'); return Tokens.ESCAPEDCHAR;} "\\t" {str.Append('\t'); return Tokens.ESCAPEDCHAR;} "\\\\" {str.Append('\\'); return Tokens.ESCAPEDCHAR;} "\\/" {str.Append('/'); return Tokens.ESCAPEDCHAR;} "\\\"" {str.Append('"'); return Tokens.ESCAPEDCHAR;} {quote} {BEGIN(LexicalStates.INITIAL); return Tokens.STRING_END;} ================================================ FILE: Source/ClassLibrary/Generators/json.y ================================================ using PHP.Core; using PHP.Core.Parsers.GPPG; using System.Diagnostics; %% %namespace PHP.Library.Json %valuetype SemanticValueType %positiontype Position %tokentype Tokens %visibility public %union { public object obj; } %token ARRAY_OPEN %token ARRAY_CLOSE %token ITEMS_SEPARATOR %token NAMEVALUE_SEPARATOR %token OBJECT_OPEN %token OBJECT_CLOSE %token TRUE %token FALSE %token NULL %token INTEGER %token DOUBLE %token STRING %token STRING_BEGIN %token CHARS %token UNICODECHAR %token ESCAPEDCHAR %token STRING_END %% /* Productions */ start: value { Result = $1.obj; } ; object: OBJECT_OPEN members OBJECT_CLOSE { var elements = (List>)$2.obj; if (decodeOptions.Assoc) { var arr = new PhpArray( elements.Count ); foreach (var item in elements) arr.Add( PHP.Core.Convert.StringToArrayKey(item.Key), item.Value ); $$.obj = arr; } else { var std = new stdClass(context, true); std.AddRange( elements ); $$.obj = std; } } | OBJECT_OPEN OBJECT_CLOSE { $$.obj = new stdClass(context, true); } ; members: pair ITEMS_SEPARATOR members { var elements = (List>)$3.obj; var result = new List>( elements.Count + 1 ){ (KeyValuePair)$1.obj }; result.AddRange(elements); $$.obj = result; } | pair { $$.obj = new List>(){ (KeyValuePair)$1.obj }; } ; pair: STRING NAMEVALUE_SEPARATOR value { $$.obj = new KeyValuePair((string)$1.obj, $3.obj); } ; array: ARRAY_OPEN elements ARRAY_CLOSE { var elements = (List)$2.obj; var arr = new PhpArray( elements.Count ); foreach (var item in elements) arr.Add( item ); $$.obj = arr; } | ARRAY_OPEN ARRAY_CLOSE { $$.obj = new PhpArray(); } ; elements: value ITEMS_SEPARATOR elements { var elements = (List)$3.obj; var result = new List( elements.Count + 1 ){ $1.obj }; result.AddRange(elements); $$.obj = result; } | value { $$.obj = new List(){ $1.obj }; } ; value: STRING {$$.obj = $1.obj;} | INTEGER {$$.obj = $1.obj;} | DOUBLE {$$.obj = $1.obj;} | object {$$.obj = $1.obj;} | array {$$.obj = $1.obj;} | TRUE {$$.obj = true;} | FALSE {$$.obj = false;} | NULL {$$.obj = null;} ; %% protected override int EofToken { get { return (int)Tokens.EOF; } } protected override int ErrorToken { get { return (int)Tokens.ERROR; } } private readonly ScriptContext/*!*/context; private readonly PHP.Library.JsonFormatter.DecodeOptions/*!*/decodeOptions; public Parser(ScriptContext/*!*/context, PHP.Library.JsonFormatter.DecodeOptions/*!*/decodeOptions) { System.Diagnostics.Debug.Assert(context != null && decodeOptions != null); this.context = context; this.decodeOptions = decodeOptions; } public object Result{get;private set;} ================================================ FILE: Source/ClassLibrary/Hash.cs ================================================ /* Copyright (c) 2004-2006 Tomas Matousek and Ladislav Prosek. Copyright (c) 2010 Jakub Misek The use and distribution terms for this software are contained in the file named License.txt, which can be found in the root of the Phalanger distribution. By using this software in any fashion, you are agreeing to be bound by the terms of this license. You must not remove this notice from this software. */ /* TODO: (PHP 5.2 hash functions) * hash_algos — Return a list of registered hashing algorithms * hash_copy — Copy hashing context * hash_file — Generate a hash value using the contents of a given file * hash_final — Finalize an incremental hash and return resulting digest * hash_hmac_file — Generate a keyed hash value using the HMAC method and the contents of a given file * hash_hmac — Generate a keyed hash value using the HMAC method * hash_init — Initialize an incremental hashing context * hash_update_file — Pump data into an active hashing context from a file * hash_update_stream — Pump data into an active hashing context from an open stream * hash_update — Pump data into an active hashing context * hash — Generate a hash value (message digest) */ using System; using PHP.Core; using System.IO; using System.Text; using System.Collections; using System.Collections.Generic; using System.Text.RegularExpressions; using System.ComponentModel; using CRYPT = System.Security.Cryptography; #if SILVERLIGHT using PHP.CoreCLR; using System.Windows.Browser; #else using System.Web; using System.Diagnostics; #endif namespace PHP.Library { /// /// PHP hash functions support. /// [ImplementsExtension(LibraryDescriptor.ExtHash)] public static class PhpHash { #region crc32, (Only CLR:) md5, md5_file, sha1, sha1_file, sha256, sha256_file /// /// Calculates the crc32 polynomial of a string of bytes. /// /// The string of bytes to compute crc32 of. /// The CRC32 of . [ImplementsFunction("crc32")] [PureFunction] public static int CRC32(PhpBytes bytes) { return BitConverter.ToInt32(new CRC32().ComputeHash(bytes.ReadonlyData), 0); } #if !SILVERLIGHT /// /// Calculate the md5 hash of a string of bytes. /// /// The string of bytes to compute md5 of. /// MD5 of as a sequence of hexadecimal numbers. [ImplementsFunction("md5")] [PureFunction] public static string MD5(PhpBytes bytes) { return (string)MD5(bytes, false); } /// /// Calculate the md5 hash of a string of bytes. /// /// The string of bytes to compute md5 of. /// If true, returns raw binary hash, otherwise returns hash as /// a sequence of hexadecimal numbers. /// md5 of . [ImplementsFunction("md5")] [PureFunction] public static object MD5(PhpBytes bytes, bool rawOutput) { return Hash(new CRYPT.MD5CryptoServiceProvider(), bytes, rawOutput); } /// /// Calculates the md5 hash of a given file. /// /// The file name. /// MD5 of given content. [ImplementsFunction("md5_file")] public static string MD5FromFile(string fileName) { return (string)MD5FromFile(fileName, false); } /// /// Calculates the md5 hash of a given file. /// /// The file name. /// If true, returns raw binary hash, otherwise returns hash as /// a sequence of hexadecimal numbers. /// MD5 of given content. [ImplementsFunction("md5_file")] public static object MD5FromFile(string fileName, bool rawOutput) { return HashFromFile(new CRYPT.MD5CryptoServiceProvider(), fileName, rawOutput); } /// /// Calculate the sha1 hash of a string of bytes. /// /// The string of bytes to compute SHA1 of. /// SHA1 of as a sequence of hexadecimal numbers. [ImplementsFunction("sha1")] [PureFunction] public static string SHA1(PhpBytes bytes) { return (string)SHA1(bytes, false); } /// /// Calculate the SHA1 hash of a string of bytes. /// /// The string of bytes to compute SHA1 of. /// If true, returns raw binary hash, otherwise returns hash as /// a sequence of hexadecimal numbers. /// md5 of . [ImplementsFunction("sha1")] [PureFunction] public static object SHA1(PhpBytes bytes, bool rawOutput) { return Hash(new CRYPT.SHA1CryptoServiceProvider(), bytes, rawOutput); } /// /// Calculates the SHA1 hash of a given file. /// /// The file name. /// SHA1 of given content. [ImplementsFunction("sha1_file")] public static string SHA1FromFile(string fileName) { return (string)SHA1FromFile(fileName, false); } /// /// Calculates the SHA1 hash of a given file. /// /// The file name. /// If true, returns raw binary hash, otherwise returns hash as /// a sequence of hexadecimal numbers. /// SHA1 of content. [ImplementsFunction("sha1_file")] public static object SHA1FromFile(string fileName, bool rawOutput) { return HashFromFile(new CRYPT.SHA1CryptoServiceProvider(), fileName, rawOutput); } #endif #region not implemented in PHP ///// ///// Calculate the sha256 hash of a string of bytes. ///// ///// The string of bytes to compute SHA256 of. ///// SHA256 of as a sequence of hexadecimal numbers. //[ImplementsFunction("sha256")] //public static string SHA256(PhpBytes bytes) //{ // return (string)SHA256(bytes, false); //} ///// ///// Calculate the SHA256 hash of a string of bytes. ///// ///// The string of bytes to compute SHA256 of. ///// If true, returns raw binary hash, otherwise returns hash as ///// a sequence of hexadecimal numbers. ///// md5 of . //[ImplementsFunction("sha256")] //public static object SHA256(PhpBytes bytes, bool rawOutput) //{ // return Hash(new CRYPT.SHA256Managed(), bytes, rawOutput); //} ///// ///// Calculates the SHA256 hash of a given file. ///// ///// The file name. ///// SHA256 of as a sequence of hexadecimal numbers. //[ImplementsFunction("sha256_file")] //public static string SHA256FromFile(string fileName) //{ // return (string)SHA256FromFile(fileName, false); //} ///// ///// Calculates the SHA256 hash of a given file. ///// ///// The file name. ///// If true, returns raw binary hash, otherwise returns hash as ///// a sequence of hexadecimal numbers. ///// SHA256 of . //[ImplementsFunction("sha256_file")] //public static object SHA256FromFile(string fileName, bool rawOutput) //{ // return HashFromFile(new CRYPT.SHA256Managed(), fileName, rawOutput); //} #endregion /// /// Computes a hash of a string of bytes using specified algorithm. /// private static object Hash(CRYPT.HashAlgorithm/*!*/ algorithm, PhpBytes bytes, bool rawOutput) { if (bytes == null) return null; byte[] hash = algorithm.ComputeHash(bytes.ReadonlyData); if (rawOutput) return new PhpBytes(hash); else return StringUtils.BinToHex(hash, null); } /// /// Computes a hash of a file using specified algorithm. /// private static object HashFromFile(CRYPT.HashAlgorithm/*!*/ algorithm, string fileName, bool rawOutput) { byte[] hash; try { using (PhpStream stream = PhpStream.Open(fileName, "rb", StreamOpenOptions.Empty, StreamContext.Default)) //using (FileStream file = new FileStream(fileName, FileMode.Open, FileAccess.Read)) { if (stream == null) return null; object data = stream.ReadContents(); if (data == null) return null; PhpBytes bytes = PhpStream.AsBinary(data); if (bytes == null) return null; hash = algorithm.ComputeHash(bytes.ReadonlyData); } } catch (SystemException) { return null; } if (rawOutput) return new PhpBytes(hash); else return StringUtils.BinToHex(hash, null); } #endregion #region HashPhpResource /// /// The Hashing Context PHP Resource. /// public abstract class HashPhpResource : PhpResource { #region HashPhpResource base ctor /// /// hash_init /// protected HashPhpResource() : base("Hash Context") { Init(); } #endregion #region HashPhpResource interface /// /// hash_copy /// /// public abstract HashPhpResource Clone(); /// /// hash_init /// Restart the hashing algorithm. /// public abstract void Init(); /// /// hash_update /// Push more data into the algorithm, incremental hashing. /// /// /// public abstract bool Update(byte[] data); /// /// hash_final /// Finalize the algorithm. Get the result. /// /// public abstract byte[] Final(); /// /// HMAC key max size. /// public abstract int BlockSize { get; } #endregion #region hash_init state internal HashInitOptions options = HashInitOptions.HASH_DEFAULT; internal byte[] HMACkey = null; protected void CloneHashState(HashPhpResource clone) { clone.options = this.options; clone.HMACkey = (this.HMACkey != null) ? (byte[])this.HMACkey.Clone() : null; } #endregion #region Helper methods #region Buffering for blocks of input data private byte[] buffer = null; private int bufferUsage = 0; /// /// Returns blocks of data, using buffered data stored before. /// Provided data can be too small to fit the block, so they are buffered and processed when more data comes. /// /// New pack of data to be appended to the buffered ones. /// Block size, when buffered data fits this, they are returned. /// Packs of block, as a pair of byte array and index of first element. internal IEnumerable> ProcessBlocked(byte[]/*!*/newData, int blockSize) { Debug.Assert(newData != null); Debug.Assert(blockSize > 0); int index = 0; // index of first byte in the newData to be used as a block start // fill the buffer / used buffered data if it fits the block size if (bufferUsage > 0) { Debug.Assert(buffer != null); Debug.Assert(buffer.Length == blockSize); int bytesToFitBuffer = blockSize - bufferUsage; // bytes needed to fill the whole buffer if (newData.Length < bytesToFitBuffer) { Array.Copy(newData, 0, buffer, bufferUsage, newData.Length); bufferUsage += newData.Length; yield break; } Array.Copy(newData, 0, buffer, bufferUsage, bytesToFitBuffer); yield return new Tuple(buffer, 0); // use the data from buffer bufferUsage = 0; // buffer is empty now index += bytesToFitBuffer; // part of newData was used } // returns blocks from the newData while (index + blockSize <= newData.Length) { yield return new Tuple(newData, index); index += blockSize; } // put the rest of newData into the buffer int remainingBytes = newData.Length - index; if (remainingBytes > 0) { if (buffer == null) buffer = new byte[blockSize]; Debug.Assert(remainingBytes < blockSize); Debug.Assert(buffer.Length == blockSize); Array.Copy(newData, index, buffer, 0, remainingBytes); bufferUsage = remainingBytes; } } /// /// Returns the buffered bytes not processed yet. /// /// Amount of used bytes in the buffer. /// Buffer, can be null. internal byte[] GetBufferedBlock(out int length) { length = bufferUsage; return buffer; } internal void ClearBufferedBlock() { bufferUsage = 0; buffer = null; } /// /// Copies the buffered information from this instance into the clone. /// /// Copy buffered info here. internal void CloneBufferedBlock(HashPhpResource clone) { if (bufferUsage > 0) { clone.bufferUsage = this.bufferUsage; clone.buffer = new byte[this.buffer.Length]; this.buffer.CopyTo(clone.buffer, 0); } else { clone.bufferUsage = 0; clone.buffer = null; } } #endregion #region Conversion protected static void DWORDToBigEndian(byte[] block, uint[] x, int digits) { int index = 0; for (int i = 0; index < digits; i += 4) { block[i] = (byte)((x[index] >> 0x18) & 0xff); block[i + 1] = (byte)((x[index] >> 0x10) & 0xff); block[i + 2] = (byte)((x[index] >> 8) & 0xff); block[i + 3] = (byte)(x[index] & 0xff); index++; } } protected static void DWORDFromBigEndian(uint[] x, int digits, byte[] block) { int index = 0; for (int i = 0; index < digits; i += 4) { x[index] = ((((uint)block[i] << 0x18) | (uint)(block[i + 1] << 0x10)) | (uint)(block[i + 2] << 8)) | (uint)block[i + 3]; index++; } } #endregion /// /// Simply compute hash on existing HashPhpResource instance. /// No HMAC. /// The algorithm is reinitialized. /// /// /// public byte[] ComputeHash(byte[] data) { this.Init(); if (!this.Update(data)) return null; return this.Final(); } #endregion #region hash algorithms implementation #region list of available algorithms internal delegate HashPhpResource HashAlgFactory(); internal static Dictionary _HashAlgorithms = null; internal static Dictionary HashAlgorithms { get { if (_HashAlgorithms == null) { var algs = new Dictionary(25, StringComparer.OrdinalIgnoreCase); // // note: use lower case as algorithms name // algs["crc32"] = () => new CRC32(); algs["crc32b"] = () => new CRC32B(); algs["md2"] = () => new MD2(); algs["md4"] = () => new MD4(); algs["md5"] = () => new MD5(); //algs["haval256,3"] = () => new HAVAL256(); //algs["haval224,3"] = () => new HAVAL224(); //algs["haval192,3"] = () => new HAVAL192(); //algs["haval160,3"] = () => new HAVAL160(); //algs["haval128,3"] = () => new HAVAL128(); //algs["tiger192,3"] = () => new TIGER(); //algs["tiger128,3"] = () => new TIGER128(); //algs["tiger160,3"] = () => new TIGER160(); //algs["gost"] = () => new GOST(); algs["adler32"] = () => new ADLER32(); algs["sha1"] = () => new SHA1(); //algs["sha224"] = () => new SHA224(); algs["sha256"] = () => new SHA256(); //algs["sha384"] = () => new SHA384(); //algs["sha512"] = () => new SHA512(); //algs["whirlpool"] = () => new WHIRLPOOL(); //algs["ripemd160"] = () => new RIPEMD160(); //algs["ripemd128"] = () => new RIPEMD128(); //algs["ripemd256"] = () => new RIPEMD256(); //algs["ripemd320"] = () => new RIPEMD320(); //algs["snefru256"] = () => new SNEFRU256(); _HashAlgorithms = algs; } return _HashAlgorithms; } } #endregion public sealed class ADLER32 : HashPhpResource { private uint state; public override HashPhpResource Clone() { var clone = new ADLER32() { state = this.state }; CloneHashState(clone); return clone; } public override void Init() { state = 1; } public override bool Update(byte[] data) { uint s0, s1; s0 = state & 0xffff; s1 = (state >> 16) & 0xffff; foreach (byte b in data) { s0 = (s0 + b) % 65521; s1 = (s1 + s0) % 65521; } state = s0 + (s1 << 16); return true; } public override byte[] Final() { byte[] bytes = BitConverter.GetBytes((uint)state); Array.Reverse(bytes); state = 0; return bytes; } public override int BlockSize { get { return 4; } } } public sealed class CRC32 : HashPhpResource { private uint state; private static uint[] crc32_table = { 0x0, 0x04c11db7, 0x09823b6e, 0x0d4326d9, 0x130476dc, 0x17c56b6b, 0x1a864db2, 0x1e475005, 0x2608edb8, 0x22c9f00f, 0x2f8ad6d6, 0x2b4bcb61, 0x350c9b64, 0x31cd86d3, 0x3c8ea00a, 0x384fbdbd, 0x4c11db70, 0x48d0c6c7, 0x4593e01e, 0x4152fda9, 0x5f15adac, 0x5bd4b01b, 0x569796c2, 0x52568b75, 0x6a1936c8, 0x6ed82b7f, 0x639b0da6, 0x675a1011, 0x791d4014, 0x7ddc5da3, 0x709f7b7a, 0x745e66cd, 0x9823b6e0, 0x9ce2ab57, 0x91a18d8e, 0x95609039, 0x8b27c03c, 0x8fe6dd8b, 0x82a5fb52, 0x8664e6e5, 0xbe2b5b58, 0xbaea46ef, 0xb7a96036, 0xb3687d81, 0xad2f2d84, 0xa9ee3033, 0xa4ad16ea, 0xa06c0b5d, 0xd4326d90, 0xd0f37027, 0xddb056fe, 0xd9714b49, 0xc7361b4c, 0xc3f706fb, 0xceb42022, 0xca753d95, 0xf23a8028, 0xf6fb9d9f, 0xfbb8bb46, 0xff79a6f1, 0xe13ef6f4, 0xe5ffeb43, 0xe8bccd9a, 0xec7dd02d, 0x34867077, 0x30476dc0, 0x3d044b19, 0x39c556ae, 0x278206ab, 0x23431b1c, 0x2e003dc5, 0x2ac12072, 0x128e9dcf, 0x164f8078, 0x1b0ca6a1, 0x1fcdbb16, 0x018aeb13, 0x054bf6a4, 0x0808d07d, 0x0cc9cdca, 0x7897ab07, 0x7c56b6b0, 0x71159069, 0x75d48dde, 0x6b93dddb, 0x6f52c06c, 0x6211e6b5, 0x66d0fb02, 0x5e9f46bf, 0x5a5e5b08, 0x571d7dd1, 0x53dc6066, 0x4d9b3063, 0x495a2dd4, 0x44190b0d, 0x40d816ba, 0xaca5c697, 0xa864db20, 0xa527fdf9, 0xa1e6e04e, 0xbfa1b04b, 0xbb60adfc, 0xb6238b25, 0xb2e29692, 0x8aad2b2f, 0x8e6c3698, 0x832f1041, 0x87ee0df6, 0x99a95df3, 0x9d684044, 0x902b669d, 0x94ea7b2a, 0xe0b41de7, 0xe4750050, 0xe9362689, 0xedf73b3e, 0xf3b06b3b, 0xf771768c, 0xfa325055, 0xfef34de2, 0xc6bcf05f, 0xc27dede8, 0xcf3ecb31, 0xcbffd686, 0xd5b88683, 0xd1799b34, 0xdc3abded, 0xd8fba05a, 0x690ce0ee, 0x6dcdfd59, 0x608edb80, 0x644fc637, 0x7a089632, 0x7ec98b85, 0x738aad5c, 0x774bb0eb, 0x4f040d56, 0x4bc510e1, 0x46863638, 0x42472b8f, 0x5c007b8a, 0x58c1663d, 0x558240e4, 0x51435d53, 0x251d3b9e, 0x21dc2629, 0x2c9f00f0, 0x285e1d47, 0x36194d42, 0x32d850f5, 0x3f9b762c, 0x3b5a6b9b, 0x0315d626, 0x07d4cb91, 0x0a97ed48, 0x0e56f0ff, 0x1011a0fa, 0x14d0bd4d, 0x19939b94, 0x1d528623, 0xf12f560e, 0xf5ee4bb9, 0xf8ad6d60, 0xfc6c70d7, 0xe22b20d2, 0xe6ea3d65, 0xeba91bbc, 0xef68060b, 0xd727bbb6, 0xd3e6a601, 0xdea580d8, 0xda649d6f, 0xc423cd6a, 0xc0e2d0dd, 0xcda1f604, 0xc960ebb3, 0xbd3e8d7e, 0xb9ff90c9, 0xb4bcb610, 0xb07daba7, 0xae3afba2, 0xaafbe615, 0xa7b8c0cc, 0xa379dd7b, 0x9b3660c6, 0x9ff77d71, 0x92b45ba8, 0x9675461f, 0x8832161a, 0x8cf30bad, 0x81b02d74, 0x857130c3, 0x5d8a9099, 0x594b8d2e, 0x5408abf7, 0x50c9b640, 0x4e8ee645, 0x4a4ffbf2, 0x470cdd2b, 0x43cdc09c, 0x7b827d21, 0x7f436096, 0x7200464f, 0x76c15bf8, 0x68860bfd, 0x6c47164a, 0x61043093, 0x65c52d24, 0x119b4be9, 0x155a565e, 0x18197087, 0x1cd86d30, 0x029f3d35, 0x065e2082, 0x0b1d065b, 0x0fdc1bec, 0x3793a651, 0x3352bbe6, 0x3e119d3f, 0x3ad08088, 0x2497d08d, 0x2056cd3a, 0x2d15ebe3, 0x29d4f654, 0xc5a92679, 0xc1683bce, 0xcc2b1d17, 0xc8ea00a0, 0xd6ad50a5, 0xd26c4d12, 0xdf2f6bcb, 0xdbee767c, 0xe3a1cbc1, 0xe760d676, 0xea23f0af, 0xeee2ed18, 0xf0a5bd1d, 0xf464a0aa, 0xf9278673, 0xfde69bc4, 0x89b8fd09, 0x8d79e0be, 0x803ac667, 0x84fbdbd0, 0x9abc8bd5, 0x9e7d9662, 0x933eb0bb, 0x97ffad0c, 0xafb010b1, 0xab710d06, 0xa6322bdf, 0xa2f33668, 0xbcb4666d, 0xb8757bda, 0xb5365d03, 0xb1f740b4 }; public override HashPhpResource Clone() { var clone = new CRC32() { state = this.state }; CloneHashState(clone); return clone; } public override void Init() { state = ~(uint)0; } public override bool Update(byte[] data) { foreach (byte b in data) { state = (state << 8) ^ crc32_table[(state >> 24) ^ (b & 0xff)]; } return true; } public override byte[] Final() { state = ~state; var h = BitConverter.GetBytes((uint)state); state = 0; return h; } public override int BlockSize { get { return 4; } } } public sealed class CRC32B : HashPhpResource { private uint state; private static uint[] crc32b_table = { 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d, }; public override HashPhpResource Clone() { var clone = new CRC32B() { state = this.state }; CloneHashState(clone); return clone; } public override void Init() { state = ~(uint)0; } public override bool Update(byte[] data) { foreach (byte b in data) { state = (state >> 8) ^ crc32b_table[(state ^ b) & 0xff]; } return true; } public override byte[] Final() { state = ~state; byte[] bytes = BitConverter.GetBytes((uint)state); Array.Reverse(bytes); state = 0; return bytes; } public override int BlockSize { get { return 4; } } } public sealed class MD2 : HashPhpResource { private static byte[] MD2_S = { 41, 46, 67, 201, 162, 216, 124, 1, 61, 54, 84, 161, 236, 240, 6, 19, 98, 167, 5, 243, 192, 199, 115, 140, 152, 147, 43, 217, 188, 76, 130, 202, 30, 155, 87, 60, 253, 212, 224, 22, 103, 66, 111, 24, 138, 23, 229, 18, 190, 78, 196, 214, 218, 158, 222, 73, 160, 251, 245, 142, 187, 47, 238, 122, 169, 104, 121, 145, 21, 178, 7, 63, 148, 194, 16, 137, 11, 34, 95, 33, 128, 127, 93, 154, 90, 144, 50, 39, 53, 62, 204, 231, 191, 247, 151, 3, 255, 25, 48, 179, 72, 165, 181, 209, 215, 94, 146, 42, 172, 86, 170, 198, 79, 184, 56, 210, 150, 164, 125, 182, 118, 252, 107, 226, 156, 116, 4, 241, 69, 157, 112, 89, 100, 113, 135, 32, 134, 91, 207, 101, 230, 45, 168, 2, 27, 96, 37, 173, 174, 176, 185, 246, 28, 70, 97, 105, 52, 64, 126, 15, 85, 71, 163, 35, 221, 81, 175, 58, 195, 92, 249, 206, 186, 197, 234, 38, 44, 83, 13, 110, 133, 40, 132, 9, 211, 223, 205, 244, 65, 129, 77, 82, 106, 220, 55, 200, 108, 193, 171, 250, 36, 225, 123, 8, 12, 189, 177, 74, 120, 136, 149, 139, 227, 99, 232, 109, 233, 203, 213, 254, 59, 0, 29, 57, 242, 239, 183, 14, 102, 88, 208, 228, 166, 119, 114, 248, 235, 117, 75, 10, 49, 68, 80, 180, 143, 237, 31, 26, 219, 153, 141, 51, 159, 17, 131, 20 }; #region state private readonly byte[] state = new byte[48]; private readonly byte[] checksum = new byte[16]; #endregion public override HashPhpResource Clone() { var clone = new MD2(); this.CloneHashState(clone); this.CloneBufferedBlock(clone); this.state.CopyTo(clone.state, 0); this.checksum.CopyTo(clone.checksum, 0); return clone; } public override void Init() { this.ClearBufferedBlock(); Array.Clear(this.state, 0, this.state.Length); Array.Clear(this.checksum, 0, this.checksum.Length); } private void TransformBlock(byte[]/*!*//*byte[16+startIndex]*/block, int startIndex) { Debug.Assert(block != null); Debug.Assert(block.Length >= 16 + startIndex); byte i, j, t = 0; for (i = 0; i < 16; i++) { state[16 + i] = block[i + startIndex]; state[32 + i] = (byte)(state[16 + i] ^ state[i]); } for (i = 0; i < 18; i++) { for (j = 0; j < 48; j++) { t = state[j] = (byte)(state[j] ^ MD2_S[t]); } unchecked { t += i; } } /* Update checksum -- must be after transform to avoid fouling up last message block */ t = checksum[15]; for (i = 0; i < 16; i++) { t = checksum[i] ^= MD2_S[block[i + startIndex] ^ t]; } } public override bool Update(byte[] data) { foreach (var block in ProcessBlocked(data, 16)) TransformBlock(block.Item1, block.Item2); return true; } public override byte[] Final() { // take the remaining buffer // fill the rest up to 16 bytes with "remainingBytes" value int bufferUsage; byte[] buffer = GetBufferedBlock(out bufferUsage); if (buffer == null) buffer = new byte[16]; Debug.Assert(buffer.Length == 16); Debug.Assert(bufferUsage < 16); byte remainingBytes = (byte)(16 - bufferUsage); for (int i = bufferUsage; i < 16; ++i) buffer[i] = remainingBytes; // TransformBlock(buffer, 0); TransformBlock(checksum, 0); // byte[] hash = new byte[16]; Array.Copy(this.state, 0, hash, 0, 16); return hash; } public override int BlockSize { get { return 16; } } } public sealed class MD4 : HashPhpResource { #region state private uint[] state = new uint[4]; private uint[] count = new uint[2]; #endregion #region MD4 transformation private static uint MD4_F(uint x, uint y, uint z) { return ((z) ^ ((x) & ((y) ^ (z)))); } private static uint MD4_G(uint x, uint y, uint z) { return (((x) & ((y) | (z))) | ((y) & (z))); } private static uint MD4_H(uint x, uint y, uint z) { return ((x) ^ (y) ^ (z)); } private static uint ROTL32(byte s, uint v) { return (((v) << (s)) | ((v) >> (32 - (s)))); } private static void MD4_R1(ref uint a, uint b, uint c, uint d, uint xk, byte s) { unchecked { a = ROTL32(s, a + MD4_F(b, c, d) + xk); } } private static void MD4_R2(ref uint a, uint b, uint c, uint d, uint xk, byte s) { unchecked { a = ROTL32(s, a + MD4_G(b, c, d) + xk + 0x5A827999); } } private static void MD4_R3(ref uint a, uint b, uint c, uint d, uint xk, byte s) { unchecked { a = ROTL32(s, a + MD4_H(b, c, d) + xk + 0x6ED9EBA1); } } private static uint[] Decode(byte[] block, int startIndex, int bytesCount) { Debug.Assert(bytesCount > 0); Debug.Assert((bytesCount % 4) == 0); uint[] result = new uint[bytesCount / 4]; int index = 0; while (bytesCount > 0) { result[index++] = BitConverter.ToUInt32(block, startIndex); startIndex += 4; bytesCount -= 4; } return result; } private static byte[] Encode(uint[] nums, int startIndex, int bytesCount) { Debug.Assert(bytesCount > 0); Debug.Assert((bytesCount % 4) == 0); byte[] result = new byte[bytesCount]; int index = 0; while (index < bytesCount) { Array.Copy(BitConverter.GetBytes(nums[startIndex++]), 0, result, index, 4); index += 4; } return result; } private void MD4Transform(byte[] block, int startIndex) { uint a = state[0], b = state[1], c = state[2], d = state[3]; uint[] x = Decode(block, startIndex, 64); /* Round 1 */ MD4_R1(ref a, b, c, d, x[0], 3); MD4_R1(ref d, a, b, c, x[1], 7); MD4_R1(ref c, d, a, b, x[2], 11); MD4_R1(ref b, c, d, a, x[3], 19); MD4_R1(ref a, b, c, d, x[4], 3); MD4_R1(ref d, a, b, c, x[5], 7); MD4_R1(ref c, d, a, b, x[6], 11); MD4_R1(ref b, c, d, a, x[7], 19); MD4_R1(ref a, b, c, d, x[8], 3); MD4_R1(ref d, a, b, c, x[9], 7); MD4_R1(ref c, d, a, b, x[10], 11); MD4_R1(ref b, c, d, a, x[11], 19); MD4_R1(ref a, b, c, d, x[12], 3); MD4_R1(ref d, a, b, c, x[13], 7); MD4_R1(ref c, d, a, b, x[14], 11); MD4_R1(ref b, c, d, a, x[15], 19); /* Round 2 */ MD4_R2(ref a, b, c, d, x[0], 3); MD4_R2(ref d, a, b, c, x[4], 5); MD4_R2(ref c, d, a, b, x[8], 9); MD4_R2(ref b, c, d, a, x[12], 13); MD4_R2(ref a, b, c, d, x[1], 3); MD4_R2(ref d, a, b, c, x[5], 5); MD4_R2(ref c, d, a, b, x[9], 9); MD4_R2(ref b, c, d, a, x[13], 13); MD4_R2(ref a, b, c, d, x[2], 3); MD4_R2(ref d, a, b, c, x[6], 5); MD4_R2(ref c, d, a, b, x[10], 9); MD4_R2(ref b, c, d, a, x[14], 13); MD4_R2(ref a, b, c, d, x[3], 3); MD4_R2(ref d, a, b, c, x[7], 5); MD4_R2(ref c, d, a, b, x[11], 9); MD4_R2(ref b, c, d, a, x[15], 13); /* Round 3 */ MD4_R3(ref a, b, c, d, x[0], 3); MD4_R3(ref d, a, b, c, x[8], 9); MD4_R3(ref c, d, a, b, x[4], 11); MD4_R3(ref b, c, d, a, x[12], 15); MD4_R3(ref a, b, c, d, x[2], 3); MD4_R3(ref d, a, b, c, x[10], 9); MD4_R3(ref c, d, a, b, x[6], 11); MD4_R3(ref b, c, d, a, x[14], 15); MD4_R3(ref a, b, c, d, x[1], 3); MD4_R3(ref d, a, b, c, x[9], 9); MD4_R3(ref c, d, a, b, x[5], 11); MD4_R3(ref b, c, d, a, x[13], 15); MD4_R3(ref a, b, c, d, x[3], 3); MD4_R3(ref d, a, b, c, x[11], 9); MD4_R3(ref c, d, a, b, x[7], 11); MD4_R3(ref b, c, d, a, x[15], 15); unchecked { state[0] += a; state[1] += b; state[2] += c; state[3] += d; } } #endregion #region HashPhpResource public override HashPhpResource Clone() { var clone = new MD4(); this.CloneHashState(clone); this.CloneBufferedBlock(clone); this.state.CopyTo(clone.state, 0); this.count.CopyTo(clone.count, 0); return clone; } public override void Init() { this.ClearBufferedBlock(); count[0] = count[1] = 0; /* Load magic initialization constants. */ state[0] = 0x67452301; state[1] = 0xefcdab89; state[2] = 0x98badcfe; state[3] = 0x10325476; } public override bool Update(byte[] data) { /* Update number of bits */ if ((count[0] += ((uint)data.Length << 3)) < ((uint)data.Length << 3)) ++count[1]; count[1] += ((uint)data.Length >> 29); foreach (var block in ProcessBlocked(data, 64)) MD4Transform(block.Item1, block.Item2); return true; } public override byte[] Final() { // save length byte[] bits = Encode(count, 0, 8); // padd to 56 mod 64 int bufferUsage; byte[] buffer = GetBufferedBlock(out bufferUsage); if (buffer == null) buffer = new byte[64]; Debug.Assert(buffer.Length == 64); int padLen = (bufferUsage < 56) ? (56 - bufferUsage) : (120 - bufferUsage); if (padLen > 0) { byte[] padding = new byte[padLen]; padding[0] = 0x80; Update(padding); } Update(bits); byte[] result = Encode(state, 0, 16); // cleanup sensitive data Array.Clear(state, 0, state.Length); Array.Clear(count, 0, count.Length); // done return result; } public override int BlockSize { get { return 64; } } #endregion } public sealed class MD5 : HashPhpResource { #region state private uint[] state = new uint[4]; private uint[] count = new uint[2]; #endregion #region MD5 transformation /// /// MD5 Transformation constants. /// enum MD5Consts : byte { S11 = 7, S12 = 12, S13 = 17, S14 = 22, S21 = 5, S22 = 9, S23 = 14, S24 = 20, S31 = 4, S32 = 11, S33 = 16, S34 = 23, S41 = 6, S42 = 10, S43 = 15, S44 = 21, } /// F, G, H and I are basic MD5 functions. private static uint F(uint x, uint y, uint z) { return (((x) & (y)) | ((~x) & (z))); } private static uint G(uint x, uint y, uint z) { return (((x) & (z)) | ((y) & (~z))); } private static uint H(uint x, uint y, uint z) { return ((x) ^ (y) ^ (z)); } private static uint I(uint x, uint y, uint z) { return ((y) ^ ((x) | (~z))); } /// /// ROTATE_LEFT rotates x left n bits. /// /// /// /// private static uint ROTATE_LEFT(uint x, byte n) { return (((x) << (n)) | ((x) >> (32 - (n)))); } /// FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4. /// Rotation is separate from addition to prevent re-computation. private static void FF(ref uint a, uint b, uint c, uint d, uint x, byte s, uint ac) { unchecked { (a) += F((b), (c), (d)) + (x) + (ac); (a) = ROTATE_LEFT((a), (s)); (a) += (b); } } private static void GG(ref uint a, uint b, uint c, uint d, uint x, byte s, uint ac) { unchecked { (a) += G((b), (c), (d)) + (x) + (ac); (a) = ROTATE_LEFT((a), (s)); (a) += (b); } } private static void HH(ref uint a, uint b, uint c, uint d, uint x, byte s, uint ac) { unchecked { (a) += H((b), (c), (d)) + (x) + (ac); (a) = ROTATE_LEFT((a), (s)); (a) += (b); } } private static void II(ref uint a, uint b, uint c, uint d, uint x, byte s, uint ac) { unchecked { (a) += I((b), (c), (d)) + (x) + (ac); (a) = ROTATE_LEFT((a), (s)); (a) += (b); } } private static uint[] Decode(byte[] block, int startIndex, int bytesCount) { Debug.Assert(bytesCount > 0); Debug.Assert((bytesCount % 4) == 0); uint[] result = new uint[bytesCount / 4]; int index = 0; while (bytesCount > 0) { result[index++] = BitConverter.ToUInt32(block, startIndex); startIndex += 4; bytesCount -= 4; } return result; } private static byte[] Encode(uint[] nums, int startIndex, int bytesCount) { Debug.Assert(bytesCount > 0); Debug.Assert((bytesCount % 4) == 0); byte[] result = new byte[bytesCount]; int index = 0; while (index < bytesCount) { Array.Copy(BitConverter.GetBytes(nums[startIndex++]), 0, result, index, 4); index += 4; } return result; } /// /// MD5 basic transformation. Transforms state based on block. /// /// /// private void MD5Transform(byte[]/*[64]*/block, int startIndex) { uint a = state[0], b = state[1], c = state[2], d = state[3]; uint[] x = Decode(block, startIndex, 64); // [16] Debug.Assert(x.Length == 16); /* Round 1 */ FF(ref a, b, c, d, x[0], (byte)MD5Consts.S11, 0xd76aa478); /* 1 */ FF(ref d, a, b, c, x[1], (byte)MD5Consts.S12, 0xe8c7b756); /* 2 */ FF(ref c, d, a, b, x[2], (byte)MD5Consts.S13, 0x242070db); /* 3 */ FF(ref b, c, d, a, x[3], (byte)MD5Consts.S14, 0xc1bdceee); /* 4 */ FF(ref a, b, c, d, x[4], (byte)MD5Consts.S11, 0xf57c0faf); /* 5 */ FF(ref d, a, b, c, x[5], (byte)MD5Consts.S12, 0x4787c62a); /* 6 */ FF(ref c, d, a, b, x[6], (byte)MD5Consts.S13, 0xa8304613); /* 7 */ FF(ref b, c, d, a, x[7], (byte)MD5Consts.S14, 0xfd469501); /* 8 */ FF(ref a, b, c, d, x[8], (byte)MD5Consts.S11, 0x698098d8); /* 9 */ FF(ref d, a, b, c, x[9], (byte)MD5Consts.S12, 0x8b44f7af); /* 10 */ FF(ref c, d, a, b, x[10], (byte)MD5Consts.S13, 0xffff5bb1); /* 11 */ FF(ref b, c, d, a, x[11], (byte)MD5Consts.S14, 0x895cd7be); /* 12 */ FF(ref a, b, c, d, x[12], (byte)MD5Consts.S11, 0x6b901122); /* 13 */ FF(ref d, a, b, c, x[13], (byte)MD5Consts.S12, 0xfd987193); /* 14 */ FF(ref c, d, a, b, x[14], (byte)MD5Consts.S13, 0xa679438e); /* 15 */ FF(ref b, c, d, a, x[15], (byte)MD5Consts.S14, 0x49b40821); /* 16 */ /* Round 2 */ GG(ref a, b, c, d, x[1], (byte)MD5Consts.S21, 0xf61e2562); /* 17 */ GG(ref d, a, b, c, x[6], (byte)MD5Consts.S22, 0xc040b340); /* 18 */ GG(ref c, d, a, b, x[11], (byte)MD5Consts.S23, 0x265e5a51); /* 19 */ GG(ref b, c, d, a, x[0], (byte)MD5Consts.S24, 0xe9b6c7aa); /* 20 */ GG(ref a, b, c, d, x[5], (byte)MD5Consts.S21, 0xd62f105d); /* 21 */ GG(ref d, a, b, c, x[10], (byte)MD5Consts.S22, 0x2441453); /* 22 */ GG(ref c, d, a, b, x[15], (byte)MD5Consts.S23, 0xd8a1e681); /* 23 */ GG(ref b, c, d, a, x[4], (byte)MD5Consts.S24, 0xe7d3fbc8); /* 24 */ GG(ref a, b, c, d, x[9], (byte)MD5Consts.S21, 0x21e1cde6); /* 25 */ GG(ref d, a, b, c, x[14], (byte)MD5Consts.S22, 0xc33707d6); /* 26 */ GG(ref c, d, a, b, x[3], (byte)MD5Consts.S23, 0xf4d50d87); /* 27 */ GG(ref b, c, d, a, x[8], (byte)MD5Consts.S24, 0x455a14ed); /* 28 */ GG(ref a, b, c, d, x[13], (byte)MD5Consts.S21, 0xa9e3e905); /* 29 */ GG(ref d, a, b, c, x[2], (byte)MD5Consts.S22, 0xfcefa3f8); /* 30 */ GG(ref c, d, a, b, x[7], (byte)MD5Consts.S23, 0x676f02d9); /* 31 */ GG(ref b, c, d, a, x[12], (byte)MD5Consts.S24, 0x8d2a4c8a); /* 32 */ /* Round 3 */ HH(ref a, b, c, d, x[5], (byte)MD5Consts.S31, 0xfffa3942); /* 33 */ HH(ref d, a, b, c, x[8], (byte)MD5Consts.S32, 0x8771f681); /* 34 */ HH(ref c, d, a, b, x[11], (byte)MD5Consts.S33, 0x6d9d6122); /* 35 */ HH(ref b, c, d, a, x[14], (byte)MD5Consts.S34, 0xfde5380c); /* 36 */ HH(ref a, b, c, d, x[1], (byte)MD5Consts.S31, 0xa4beea44); /* 37 */ HH(ref d, a, b, c, x[4], (byte)MD5Consts.S32, 0x4bdecfa9); /* 38 */ HH(ref c, d, a, b, x[7], (byte)MD5Consts.S33, 0xf6bb4b60); /* 39 */ HH(ref b, c, d, a, x[10], (byte)MD5Consts.S34, 0xbebfbc70); /* 40 */ HH(ref a, b, c, d, x[13], (byte)MD5Consts.S31, 0x289b7ec6); /* 41 */ HH(ref d, a, b, c, x[0], (byte)MD5Consts.S32, 0xeaa127fa); /* 42 */ HH(ref c, d, a, b, x[3], (byte)MD5Consts.S33, 0xd4ef3085); /* 43 */ HH(ref b, c, d, a, x[6], (byte)MD5Consts.S34, 0x4881d05); /* 44 */ HH(ref a, b, c, d, x[9], (byte)MD5Consts.S31, 0xd9d4d039); /* 45 */ HH(ref d, a, b, c, x[12], (byte)MD5Consts.S32, 0xe6db99e5); /* 46 */ HH(ref c, d, a, b, x[15], (byte)MD5Consts.S33, 0x1fa27cf8); /* 47 */ HH(ref b, c, d, a, x[2], (byte)MD5Consts.S34, 0xc4ac5665); /* 48 */ /* Round 4 */ II(ref a, b, c, d, x[0], (byte)MD5Consts.S41, 0xf4292244); /* 49 */ II(ref d, a, b, c, x[7], (byte)MD5Consts.S42, 0x432aff97); /* 50 */ II(ref c, d, a, b, x[14], (byte)MD5Consts.S43, 0xab9423a7); /* 51 */ II(ref b, c, d, a, x[5], (byte)MD5Consts.S44, 0xfc93a039); /* 52 */ II(ref a, b, c, d, x[12], (byte)MD5Consts.S41, 0x655b59c3); /* 53 */ II(ref d, a, b, c, x[3], (byte)MD5Consts.S42, 0x8f0ccc92); /* 54 */ II(ref c, d, a, b, x[10], (byte)MD5Consts.S43, 0xffeff47d); /* 55 */ II(ref b, c, d, a, x[1], (byte)MD5Consts.S44, 0x85845dd1); /* 56 */ II(ref a, b, c, d, x[8], (byte)MD5Consts.S41, 0x6fa87e4f); /* 57 */ II(ref d, a, b, c, x[15], (byte)MD5Consts.S42, 0xfe2ce6e0); /* 58 */ II(ref c, d, a, b, x[6], (byte)MD5Consts.S43, 0xa3014314); /* 59 */ II(ref b, c, d, a, x[13], (byte)MD5Consts.S44, 0x4e0811a1); /* 60 */ II(ref a, b, c, d, x[4], (byte)MD5Consts.S41, 0xf7537e82); /* 61 */ II(ref d, a, b, c, x[11], (byte)MD5Consts.S42, 0xbd3af235); /* 62 */ II(ref c, d, a, b, x[2], (byte)MD5Consts.S43, 0x2ad7d2bb); /* 63 */ II(ref b, c, d, a, x[9], (byte)MD5Consts.S44, 0xeb86d391); /* 64 */ unchecked { state[0] += a; state[1] += b; state[2] += c; state[3] += d; } Array.Clear(x, 0, 16); } #endregion #region HashPhpResource public override HashPhpResource Clone() { var clone = new MD5(); this.CloneHashState(clone); this.CloneBufferedBlock(clone); this.state.CopyTo(clone.state, 0); this.count.CopyTo(clone.count, 0); return clone; } public override void Init() { count[0] = count[1] = 0; /* Load magic initialization constants. */ state[0] = 0x67452301; state[1] = 0xefcdab89; state[2] = 0x98badcfe; state[3] = 0x10325476; } public override bool Update(byte[]/*!*/data) { Debug.Assert(data != null); // Update number of bits if ((count[0] += ((uint)data.Length << 3)) < ((uint)data.Length << 3)) count[1]++; count[1] += ((uint)data.Length >> 29); // Transform blocks of 64 bytes foreach (var block in ProcessBlocked(data, 64)) MD5Transform(block.Item1, block.Item2); return true; } public override byte[] Final() { // save length byte[] bits = Encode(count, 0, 8); // padd to 56 mod 64 int bufferUsage; byte[] buffer = GetBufferedBlock(out bufferUsage); if (buffer == null) buffer = new byte[64]; Debug.Assert(buffer.Length == 64); int padLen = (bufferUsage < 56) ? (56 - bufferUsage) : (120 - bufferUsage); if (padLen > 0) { byte[] padding = new byte[padLen]; padding[0] = 0x80; Update(padding); } Update(bits); byte[] result = Encode(state, 0, 16); // cleanup sensitive data Array.Clear(state, 0, state.Length); Array.Clear(count, 0, count.Length); // done return result; } public override int BlockSize { get { return 64; } } #endregion } /// /// Base class for SHA based hashing algorithms. /// /// Actual type of SHA class. Used to instantiate new one in method. public abstract class SHA : HashPhpResource where T: SHA, new() { #region state /// /// Internal buffer holding SHA results. /// protected readonly byte[]/*!*/_buffer; /// /// Amount of chars encoded. /// protected long _count; /// /// Temporary buffer used internally by method. /// protected readonly uint[]/*!*/_tmp; /// /// Current hash state. /// protected readonly uint[]/*!*/_state; #endregion #region Constructor public SHA(int bufferSize, int tmpSize, int stateSize) { Debug.Assert(bufferSize > 0); Debug.Assert(tmpSize > 0); Debug.Assert(stateSize > 0); this._buffer = new byte[bufferSize]; this._tmp = new uint[tmpSize]; this._state = new uint[stateSize]; // initialize the state: this.InitializeState(); } #endregion #region SHA (to be implemented in derived class) /// /// Set and to their initial state. /// protected abstract void InitializeState(); /// /// Finalize the hash. /// /// Resulting hash. protected abstract byte[] _EndHash(); /// /// Pump more data into the hashing algorithm. /// /// Array of data to be hashed. /// Index where to start reading from . /// Amount of bytes to read from . /// true if hashing succeeded. protected abstract bool _HashData(byte[] partIn, int ibStart, int cbSize); #endregion #region HashPhpResource public override void Init() { if (_state != null /*&& _buffer != null && _tmp != null*/) // iff we are initialized already (base .ctor which calls Init is called before this .ctor, so these arrays may not be initialized yet) { this.InitializeState(); Array.Clear(this._buffer, 0, this._buffer.Length); Array.Clear(this._tmp, 0, this._tmp.Length); } } public override bool Update(byte[]/*!*/data) { Debug.Assert(data != null); return _HashData(data, 0, data.Length); } public override byte[] Final() { try { return _EndHash(); } finally { InitializeState(); // clear the state } } public override HashPhpResource Clone() { var clone = new T() { _count = this._count }; this.CloneHashState(clone); this._buffer.CopyTo(clone._buffer, 0); this._tmp.CopyTo(clone._tmp, 0); this._state.CopyTo(clone._state, 0); return clone; } public override int BlockSize { get { return _buffer.Length; } } #endregion } public sealed class SHA1 : SHA { #region SHA1 hashing internals public SHA1() :base(64,80,5) { } protected override void InitializeState() { this._count = 0L; this._state[0] = 0x67452301; this._state[1] = 0xefcdab89; this._state[2] = 0x98badcfe; this._state[3] = 0x10325476; this._state[4] = 0xc3d2e1f0; } /// /// Finalize the hash. /// /// Hashed bytes. protected override byte[] _EndHash() { byte[] block = new byte[20]; int num = 0x40 - ((int)(this._count & 0x3fL)); if (num <= 8) num += 0x40; byte[] partIn = new byte[num]; partIn[0] = 0x80; long num2 = this._count * 8L; partIn[num - 8] = (byte)((num2 >> 0x38) & 0xffL); partIn[num - 7] = (byte)((num2 >> 0x30) & 0xffL); partIn[num - 6] = (byte)((num2 >> 40) & 0xffL); partIn[num - 5] = (byte)((num2 >> 0x20) & 0xffL); partIn[num - 4] = (byte)((num2 >> 0x18) & 0xffL); partIn[num - 3] = (byte)((num2 >> 0x10) & 0xffL); partIn[num - 2] = (byte)((num2 >> 8) & 0xffL); partIn[num - 1] = (byte)(num2 & 0xffL); this._HashData(partIn, 0, partIn.Length); DWORDToBigEndian(block, this._state, 5); //base.HashValue = block; return block; } protected override bool _HashData(byte[] partIn, int ibStart, int cbSize) { unchecked { int byteCount = cbSize; int srcOffsetBytes = ibStart; int dstOffsetBytes = (int)(this._count & 0x3fL); this._count += byteCount; if ((dstOffsetBytes > 0) && ((dstOffsetBytes + byteCount) >= 0x40)) { Buffer.BlockCopy(partIn, srcOffsetBytes, this._buffer, dstOffsetBytes, 0x40 - dstOffsetBytes); srcOffsetBytes += 0x40 - dstOffsetBytes; byteCount -= 0x40 - dstOffsetBytes; SHATransform(_tmp, _state, _buffer); dstOffsetBytes = 0; } while (byteCount >= 0x40) { Buffer.BlockCopy(partIn, srcOffsetBytes, this._buffer, 0, 0x40); srcOffsetBytes += 0x40; byteCount -= 0x40; SHATransform(_tmp, _state, _buffer); } if (byteCount > 0) { Buffer.BlockCopy(partIn, srcOffsetBytes, this._buffer, dstOffsetBytes, byteCount); } } return true; } private static void SHAExpand(uint[] x) { unchecked { for (int i = 0x10; i < 80; i++) { uint num2 = ((x[i - 3] ^ x[i - 8]) ^ x[i - 14]) ^ x[i - 0x10]; x[i] = (num2 << 1) | (num2 >> 0x1f); } } } private static void SHATransform(uint[] tmp, uint[] state, byte[] block) { Debug.Assert(tmp != null && tmp.Length == 80); uint num = state[0]; uint num2 = state[1]; uint num3 = state[2]; uint num4 = state[3]; uint num5 = state[4]; DWORDFromBigEndian(tmp, 0x10, block); SHAExpand(tmp); int index = 0; unchecked { while (index < 20) { num5 += ((((num << 5) | (num >> 0x1b)) + (num4 ^ (num2 & (num3 ^ num4)))) + tmp[index]) + 0x5a827999; num2 = (num2 << 30) | (num2 >> 2); num4 += ((((num5 << 5) | (num5 >> 0x1b)) + (num3 ^ (num & (num2 ^ num3)))) + tmp[index + 1]) + 0x5a827999; num = (num << 30) | (num >> 2); num3 += ((((num4 << 5) | (num4 >> 0x1b)) + (num2 ^ (num5 & (num ^ num2)))) + tmp[index + 2]) + 0x5a827999; num5 = (num5 << 30) | (num5 >> 2); num2 += ((((num3 << 5) | (num3 >> 0x1b)) + (num ^ (num4 & (num5 ^ num)))) + tmp[index + 3]) + 0x5a827999; num4 = (num4 << 30) | (num4 >> 2); num += ((((num2 << 5) | (num2 >> 0x1b)) + (num5 ^ (num3 & (num4 ^ num5)))) + tmp[index + 4]) + 0x5a827999; num3 = (num3 << 30) | (num3 >> 2); index += 5; } while (index < 40) { num5 += ((((num << 5) | (num >> 0x1b)) + ((num2 ^ num3) ^ num4)) + tmp[index]) + 0x6ed9eba1; num2 = (num2 << 30) | (num2 >> 2); num4 += ((((num5 << 5) | (num5 >> 0x1b)) + ((num ^ num2) ^ num3)) + tmp[index + 1]) + 0x6ed9eba1; num = (num << 30) | (num >> 2); num3 += ((((num4 << 5) | (num4 >> 0x1b)) + ((num5 ^ num) ^ num2)) + tmp[index + 2]) + 0x6ed9eba1; num5 = (num5 << 30) | (num5 >> 2); num2 += ((((num3 << 5) | (num3 >> 0x1b)) + ((num4 ^ num5) ^ num)) + tmp[index + 3]) + 0x6ed9eba1; num4 = (num4 << 30) | (num4 >> 2); num += ((((num2 << 5) | (num2 >> 0x1b)) + ((num3 ^ num4) ^ num5)) + tmp[index + 4]) + 0x6ed9eba1; num3 = (num3 << 30) | (num3 >> 2); index += 5; } while (index < 60) { num5 += ((((num << 5) | (num >> 0x1b)) + ((num2 & num3) | (num4 & (num2 | num3)))) + tmp[index]) + 0x8f1bbcdc; num2 = (num2 << 30) | (num2 >> 2); num4 += ((((num5 << 5) | (num5 >> 0x1b)) + ((num & num2) | (num3 & (num | num2)))) + tmp[index + 1]) + 0x8f1bbcdc; num = (num << 30) | (num >> 2); num3 += ((((num4 << 5) | (num4 >> 0x1b)) + ((num5 & num) | (num2 & (num5 | num)))) + tmp[index + 2]) + 0x8f1bbcdc; num5 = (num5 << 30) | (num5 >> 2); num2 += ((((num3 << 5) | (num3 >> 0x1b)) + ((num4 & num5) | (num & (num4 | num5)))) + tmp[index + 3]) + 0x8f1bbcdc; num4 = (num4 << 30) | (num4 >> 2); num += ((((num2 << 5) | (num2 >> 0x1b)) + ((num3 & num4) | (num5 & (num3 | num4)))) + tmp[index + 4]) + 0x8f1bbcdc; num3 = (num3 << 30) | (num3 >> 2); index += 5; } while (index < 80) { num5 += ((((num << 5) | (num >> 0x1b)) + ((num2 ^ num3) ^ num4)) + tmp[index]) + 0xca62c1d6; num2 = (num2 << 30) | (num2 >> 2); num4 += ((((num5 << 5) | (num5 >> 0x1b)) + ((num ^ num2) ^ num3)) + tmp[index + 1]) + 0xca62c1d6; num = (num << 30) | (num >> 2); num3 += ((((num4 << 5) | (num4 >> 0x1b)) + ((num5 ^ num) ^ num2)) + tmp[index + 2]) + 0xca62c1d6; num5 = (num5 << 30) | (num5 >> 2); num2 += ((((num3 << 5) | (num3 >> 0x1b)) + ((num4 ^ num5) ^ num)) + tmp[index + 3]) + 0xca62c1d6; num4 = (num4 << 30) | (num4 >> 2); num += ((((num2 << 5) | (num2 >> 0x1b)) + ((num3 ^ num4) ^ num5)) + tmp[index + 4]) + 0xca62c1d6; num3 = (num3 << 30) | (num3 >> 2); index += 5; } state[0] += num; state[1] += num2; state[2] += num3; state[3] += num4; state[4] += num5; } } #endregion } public sealed class SHA256 : SHA { #region SHA256 hashing internals public SHA256() :base(64,64,8) { } protected override void InitializeState() { this._count = 0L; // initialize the state: this._state[0] = 0x6a09e667; this._state[1] = 0xbb67ae85; this._state[2] = 0x3c6ef372; this._state[3] = 0xa54ff53a; this._state[4] = 0x510e527f; this._state[5] = 0x9b05688c; this._state[6] = 0x1f83d9ab; this._state[7] = 0x5be0cd19; } /// /// Finalize the hash. /// /// Hashed bytes. protected override byte[] _EndHash() { byte[] block = new byte[32]; int num = 0x40 - ((int)(this._count & 0x3fL)); if (num <= 8) num += 0x40; byte[] partIn = new byte[num]; partIn[0] = 0x80; long num2 = this._count * 8L; partIn[num - 8] = (byte)((num2 >> 0x38) & 0xffL); partIn[num - 7] = (byte)((num2 >> 0x30) & 0xffL); partIn[num - 6] = (byte)((num2 >> 40) & 0xffL); partIn[num - 5] = (byte)((num2 >> 0x20) & 0xffL); partIn[num - 4] = (byte)((num2 >> 0x18) & 0xffL); partIn[num - 3] = (byte)((num2 >> 0x10) & 0xffL); partIn[num - 2] = (byte)((num2 >> 8) & 0xffL); partIn[num - 1] = (byte)(num2 & 0xffL); this._HashData(partIn, 0, partIn.Length); DWORDToBigEndian(block, this._state, 8); //base.HashValue = block; return block; } protected override bool _HashData(byte[] partIn, int ibStart, int cbSize) { unchecked { int byteCount = cbSize; int srcOffsetBytes = ibStart; int dstOffsetBytes = (int)(this._count & 0x3fL); this._count += byteCount; if ((dstOffsetBytes > 0) && ((dstOffsetBytes + byteCount) >= 0x40)) { Buffer.BlockCopy(partIn, srcOffsetBytes, this._buffer, dstOffsetBytes, 0x40 - dstOffsetBytes); srcOffsetBytes += 0x40 - dstOffsetBytes; byteCount -= 0x40 - dstOffsetBytes; SHATransform(_tmp, _state, _buffer); dstOffsetBytes = 0; } while (byteCount >= 0x40) { Buffer.BlockCopy(partIn, srcOffsetBytes, this._buffer, 0, 0x40); srcOffsetBytes += 0x40; byteCount -= 0x40; SHATransform(_tmp, _state, _buffer); } if (byteCount > 0) { Buffer.BlockCopy(partIn, srcOffsetBytes, this._buffer, dstOffsetBytes, byteCount); } } return true; } #region SHA256 internals private static uint ROTR32(int b, uint x) { return unchecked((x >> b) | (x << (32 - b))); } private static uint SHR(int b, uint x) { return unchecked(x >> b); } private static uint SHA256_F0(uint x, uint y, uint z) { return unchecked(((x) & (y)) ^ ((~(x)) & (z))); } private static uint SHA256_F1(uint x, uint y, uint z) { return unchecked(((x) & (y)) ^ ((x) & (z)) ^ ((y) & (z))); } private static uint SHA256_F2(uint x) { return unchecked(ROTR32(2, (x)) ^ ROTR32(13, (x)) ^ ROTR32(22, (x))); } private static uint SHA256_F3(uint x) { return unchecked(ROTR32(6, (x)) ^ ROTR32(11, (x)) ^ ROTR32(25, (x))); } private static uint SHA256_F4(uint x) { return unchecked(ROTR32(7, (x)) ^ ROTR32(18, (x)) ^ SHR(3, (x))); } private static uint SHA256_F5(uint x) { return unchecked(ROTR32(17, (x)) ^ ROTR32(19, (x)) ^ SHR(10, (x))); } static readonly uint[] SHA256_K = new uint[]{ 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2 }; #endregion private static void SHATransform(uint[] tmp, uint[] state, byte[] block) { Debug.Assert(tmp != null && tmp.Length == 64); unchecked { uint a = state[0], b = state[1], c = state[2], d = state[3], e = state[4], f = state[5], g = state[6], h = state[7]; DWORDFromBigEndian(tmp, 0x10, block); for (int i = 16; i < 64; i++) tmp[i] = SHA256_F5(tmp[i - 2]) + tmp[i - 7] + SHA256_F4(tmp[i - 15]) + tmp[i - 16]; for (int i = 0; i < 64; i++) { uint T1 = h + SHA256_F3(e) + SHA256_F0(e, f, g) + SHA256_K[i] + tmp[i]; uint T2 = SHA256_F2(a) + SHA256_F1(a, b, c); h = g; g = f; f = e; e = d + T1; d = c; c = b; b = a; a = T1 + T2; } state[0] += a; state[1] += b; state[2] += c; state[3] += d; state[4] += e; state[5] += f; state[6] += g; state[7] += h; } } #endregion } #endregion } #endregion #region hash_algos /// /// Get an array of available hashing algorithms. These names can be used in hash* functions, as the "algo" argument. /// /// Zero-based indexed array of names of hashing algorithms. [ImplementsFunction("hash_algos")] public static PhpArray GetHashAlgorithms() { var algos = HashPhpResource.HashAlgorithms; var result = new PhpArray(algos.Count, 0); foreach (var x in algos) result.Add(x.Key); return result; } #endregion #region options /// /// hash_init() options /// [Flags] public enum HashInitOptions { /// /// No options. /// Default. /// [ImplementsConstant("HASH_DEFAULT")] HASH_DEFAULT = 0, /// /// Use HMAC. The key must be provided. /// [ImplementsConstant("HASH_HMAC")] HASH_HMAC = 1, } #endregion #region hash_copy, hash_init, hash_update, hash_final, hash_update_file, hash_update_stream [ImplementsFunction("hash_copy")] public static PhpResource HashCopy(PhpResource context) { HashPhpResource h = context as HashPhpResource; if (h == null) { PhpException.InvalidArgumentType("context", PhpResource.PhpTypeName); return null; } return h.Clone(); } [ImplementsFunction("hash_init")] public static PhpResource HashInit(string algo) { return HashInit(algo, HashInitOptions.HASH_DEFAULT, null); } [ImplementsFunction("hash_init")] public static PhpResource HashInit(string algo, HashInitOptions options) { return HashInit(algo, options, null); } [ImplementsFunction("hash_init")] public static PhpResource HashInit(string algo, HashInitOptions options, PhpBytes key) { bool hmac = (options & HashInitOptions.HASH_HMAC) != 0; if (hmac && (key == null || key.Length == 0)) { PhpException.Throw(PhpError.Warning, "HMAC requested without a key"); // TODO: to resources return null; } HashPhpResource.HashAlgFactory algFactory; if (!HashPhpResource.HashAlgorithms.TryGetValue(algo, out algFactory)) { PhpException.Throw(PhpError.Warning, "Unknown hashing algorithm: " + algo); // TODO: to resources return null; } // // create the hashing algorithm context // HashPhpResource h = algFactory(); h.options = options; // // HMAC // if (hmac) { // Take the given key and hash it in the context of newly created hashing context. Debug.Assert(h.BlockSize > 0); byte[] K = key.ReadonlyData; if (K.Length > h.BlockSize) { // provided key is too long, hash it to obtain shorter key h.Update(K); K = h.Final(); h.Init();// restart the algorithm } else { K = (byte[])K.Clone(); } if (K.Length != h.BlockSize) { Debug.Assert(K.Length < h.BlockSize); byte[] KAligned = new byte[h.BlockSize]; K.CopyTo(KAligned, 0); K = KAligned; } for (int i = 0; i < K.Length; ++i) K[i] ^= 0x36; h.Update(K); h.HMACkey = K; } return h; } [ImplementsFunction("hash_update")] public static bool HashUpdate(PhpResource context, PhpBytes data) { HashPhpResource h = context as HashPhpResource; if (h == null) { PhpException.InvalidArgumentType("context", PhpResource.PhpTypeName); return false; } h.Update(data.ReadonlyData); return true; } [ImplementsFunction("hash_final")] public static object HashFinal(PhpResource context) { return HashFinal(context, false); } [ImplementsFunction("hash_final")] public static object HashFinal(PhpResource context, bool raw_output) { HashPhpResource h = context as HashPhpResource; if (h == null) { PhpException.InvalidArgumentType("context", PhpResource.PhpTypeName); return null; } byte[] hash = h.Final(); // // HMAC // if (/*(h.options & HashInitOptions.HASH_HMAC) != 0 &&*/ h.HMACkey != null) { /* Convert K to opad -- 0x6A = 0x36 ^ 0x5C */ byte[] K = h.HMACkey; for (int i = 0; i < K.Length; ++i) K[i] ^= 0x6A; /* Feed this result into the outter hash */ h.Init(); h.Update(K); h.Update(hash); hash = h.Final(); /* Zero the key */ //Array.Clear(K, 0, K.Length); h.HMACkey = null; } // // output // if (raw_output) return new PhpBytes(hash); else return StringUtils.BinToHex(hash, null); } [ImplementsFunction("hash_update_file")] public static bool HashUpdateFromFile(PhpResource context, string filename) { return HashUpdateFromFile(context, filename, StreamContext.Default); } [ImplementsFunction("hash_update_file")] public static bool HashUpdateFromFile(PhpResource context, string filename, PhpResource stream_context) { // hashing context HashPhpResource h = context as HashPhpResource; if (h == null) { PhpException.InvalidArgumentType("context", PhpResource.PhpTypeName); return false; } // stream context StreamContext sc = StreamContext.GetValid(stream_context); if (sc == null) return false; // read data from file (or URL) using (PhpStream stream = PhpStream.Open(filename, "rb", StreamOpenOptions.Empty, sc)) { if (stream == null) return false; if (HashUpdateFromStream(h, stream, -1) < 0) return false; } // return true; } [ImplementsFunction("hash_update_stream")] [return: CastToFalse] public static int HashUpdateFromStream(PhpResource context, PhpResource handle) { return HashUpdateFromStream(context, handle, -1); } [ImplementsFunction("hash_update_stream")] [return: CastToFalse] public static int HashUpdateFromStream(PhpResource context, PhpResource handle, int length/*=-1*/) { // hashing context HashPhpResource h = context as HashPhpResource; if (h == null) { PhpException.InvalidArgumentType("context", PhpResource.PhpTypeName); return -1; } PhpStream stream = PhpStream.GetValid(handle); if (stream == null) return -1; // read data from stream, return number of used bytes return HashUpdateFromStream(h, stream, length); } /// /// Pump data from valid PHP stream into the hashing incremental algorithm. /// /// Hash resource to be updated from given . Cannot be null. /// The to read from. Cannot be null. /// Maximum number of bytes to read from . Or -1 to read entire stream. /// Number of bytes read from given . private static int HashUpdateFromStream(HashPhpResource/*!*/context, PhpStream/*!*/stream, int length/*=-1*/) { Debug.Assert(context != null); Debug.Assert(stream != null); int n = 0; bool done = false; const int buffsize = 4096; do { // read data from stream sub-sequentially to lower memory consumption int bytestoread = (length < 0) ? buffsize : Math.Min(length - n, buffsize); // read bytes, or up to bytes if (bytestoread == 0) break; PhpBytes bytes = stream.ReadBytes(bytestoread); if (bytes == null) break; // update the incremental hash context.Update(bytes.ReadonlyData); n += bytes.Length; done = (bytes.Length < bytestoread); } while (!done); return n; } #endregion #region hash, hash_file [ImplementsFunction("hash")] [PureFunction] public static object DoHash(string algo, PhpBytes data) { return DoHash(algo, data, false); } [ImplementsFunction("hash")] [PureFunction] public static object DoHash(string algo, PhpBytes data, bool raw_output) { var h = HashInit(algo); if (h == null) return false; if (!HashUpdate(h, data)) return false; return HashFinal(h, raw_output); } [ImplementsFunction("hash_file")] public static object DoHashFile(string algo, string filename) { return DoHashFile(algo, filename, false); } [ImplementsFunction("hash_file")] public static object DoHashFile(string algo, string filename, bool raw_output) { var h = HashInit(algo); if (h == null) return false; if (!HashUpdateFromFile(h, filename)) return false; return HashFinal(h, raw_output); } #endregion #region hash_hmac, hash_hmac_file [ImplementsFunction("hash_hmac")] [PureFunction] public static object DoHashHMAC(string algo, PhpBytes data, PhpBytes key) { return DoHashHMAC(algo, data, key, false); } [ImplementsFunction("hash_hmac")] [PureFunction] public static object DoHashHMAC(string algo, PhpBytes data, PhpBytes key, bool raw_output) { var h = HashInit(algo, HashInitOptions.HASH_HMAC, key); if (h == null) return false; if (!HashUpdate(h, data)) return false; return HashFinal(h, raw_output); } [ImplementsFunction("hash_hmac_file")] public static object DoHashHMACFile(string algo, string filename, PhpBytes key) { return DoHashHMACFile(algo, filename, key, false); } [ImplementsFunction("hash_hmac_file")] public static object DoHashHMACFile(string algo, string filename, PhpBytes key, bool raw_output) { var h = HashInit(algo, HashInitOptions.HASH_HMAC, key); if (h == null) return false; if (!HashUpdateFromFile(h, filename)) return false; return HashFinal(h, raw_output); } #endregion } } ================================================ FILE: Source/ClassLibrary/Highlighting.cs ================================================ /* Copyright (c) 2005-2006 Tomas Matousek. The use and distribution terms for this software are contained in the file named License.txt, which can be found in the root of the Phalanger distribution. By using this software in any fashion, you are agreeing to be bound by the terms of this license. You must not remove this notice from this software. */ using System; using System.Collections; using System.Text; using System.Text.RegularExpressions; using System.IO; using PHP; using PHP.Core; using PHP.Core.Parsers; #if SILVERLIGHT using System.Windows.Browser; #else using System.Web; using System.Diagnostics; #endif namespace PHP.Library { /// /// Functions for highlighting PHP source code written as HTML. /// public static class Highlighting { #region highlight_file, highlight_string, show_source /// /// Writes PHP source code from file highlighted to output. /// /// PHP source file to highlight. /// True if the source code was succesfuly highlighted. [ImplementsFunction("highlight_file")] public static object HighlightFile(string fileName) { return HighlightFile(fileName, false); } /// /// Writes PHP source code from file highlighted to output or returns this code as string /// according to second parameter. /// /// PHP source file to highlight. /// True if highlighted code should be returned, /// false if it should be printed out. /// Highlighted source code or - if it is printed out - true if the code was /// highlighted succesfuly, false otherwise. [ImplementsFunction("highlight_file")] public static object HighlightFile(string fileName, bool returnHighlighted) { using (PhpStream stream = PhpStream.Open(fileName, "rt")) { if (stream == null) return false; string source = stream.ReadStringContents(-1); Debug.Assert(source != null); return HighlightString(source, returnHighlighted); } } /// /// Writes highlighted PHP source code passed as string to output. /// /// PHP source code to highlight /// True if the source code was successfully highlighted. [ImplementsFunction("highlight_string")] public static object HighlightString(string str) { return HighlightString(str, false); } /// /// Writes PHP source code highlighted to output or returns this code as string /// according to second parameter. /// /// PHP source code /// True if highlighted code should be returned, /// false if it should be printed out. /// Highlighted source code or - if it is printed out - true if the code was /// highlighted succesfuly, false otherwise. [ImplementsFunction("highlight_string")] public static object HighlightString(string str, bool returnHighlighted) { if (str == null) str = ""; ScriptContext context = ScriptContext.CurrentContext; LibraryConfiguration config = LibraryConfiguration.GetLocal(context); TextWriter output = returnHighlighted ? new StringWriter() : context.Output; bool success = Highlight(str, output, config); if (returnHighlighted) return output.ToString(); else return success; } /// /// Alias for . /// [ImplementsFunction("show_source")] public static object ShowSource(string fileName) { return HighlightFile(fileName, false); } /// /// Alias for . /// [ImplementsFunction("show_source")] public static object ShowSource(string fileName, bool returnHighlighted) { return HighlightFile(fileName, returnHighlighted); } #endregion public static bool Highlight(string/*!*/ code, TextWriter/*!*/ output, LibraryConfiguration/*!*/ config) { if (code == null) throw new ArgumentNullException("code"); if (output == null) throw new ArgumentNullException("output"); if (config == null) throw new ArgumentNullException("config"); Tokenizer.Features features = Tokenizer.Features.Default | Tokenizer.Features.ContextKeywords; Tokenizer tokenizer = new Tokenizer(new StringReader(code), features); Tokens token; output.Write("
");
			output.Write("");

			for (; ; )
			{
				token = tokenizer.GetNextToken();

				if (token == Tokens.ERROR || token == Tokens.EOF) break;

				string fcolor = config.Highlighting.Default;
				bool is_bold = false;

				switch (tokenizer.TokenCategory)
				{
					case TokenCategory.Unknown:
					case TokenCategory.Text:
					case TokenCategory.Delimiter:
					case TokenCategory.Number:
					case TokenCategory.Identifier:
					case TokenCategory.Operator:
					case TokenCategory.WhiteSpace:
						break;

					case TokenCategory.Html:
						fcolor = config.Highlighting.Html;
						break;

					case TokenCategory.Comment:
					case TokenCategory.LineComment:
						fcolor = config.Highlighting.Comment;
						break;

					case TokenCategory.ScriptTags:
						fcolor = config.Highlighting.ScriptTags;
						break;

					case TokenCategory.Keyword:
						fcolor = config.Highlighting.Keyword;
						break;

					case TokenCategory.StringCode:
						is_bold = true;
						fcolor = config.Highlighting.String;
						break;

					case TokenCategory.String:
						fcolor = config.Highlighting.String;
						break;
				}

				output.Write("");
				if (is_bold) output.Write("");

				output.Write(HttpUtility.HtmlEncode(tokenizer.TokenText));

				if (is_bold) output.Write("");
				output.Write("");
			}

			output.Write("
"); return token != Tokens.ERROR; } } } ================================================ FILE: Source/ClassLibrary/LibraryDescriptor.cs ================================================ /* Copyright (c) 2005-2006 Tomas Matousek. The use and distribution terms for this software are contained in the file named License.txt, which can be found in the root of the Phalanger distribution. By using this software in any fashion, you are agreeing to be bound by the terms of this license. You must not remove this notice from this software. */ using System; using System.Xml; using System.IO; using System.Configuration; using System.Runtime.Serialization; using PHP.Core; #if !SILVERLIGHT using System.Web; using System.Runtime.Serialization.Formatters.Binary; #endif namespace PHP.Library { /// /// Describes the class library assembly content and configuration. /// public sealed class LibraryDescriptor : PhpLibraryDescriptor { // default extension: public const string ExtStandard = "standard"; // other extensions: //public const string ExtCalendar = "calendar";//There isn't managed calender in class library public const string ExtCore = "Core";//Class Library defines some functions/constants that in PHP belongs to Core public const string ExtSession = "session"; public const string ExtCType = "ctype"; public const string ExtTokenizer = "tokenizer"; public const string ExtDate = "date"; public const string ExtPcre = "pcre"; public const string ExtEreg = "ereg"; public const string ExtJson = "json"; public const string ExtHash = "hash"; public const string ExtSpl = "SPL"; /// /// Stores one and only instance of the class that is created when the assembly is loaded. /// internal static LibraryDescriptor Singleton { get { return singleton; } } private static LibraryDescriptor singleton; ///// ///// Gets a list of implemented extensions. ///// //public override string[] ImplementedExtensions //{ // get { return new string[] { ExtStandard, ExtCore,/* ExtCalendar,*/ ExtCType, ExtSession, ExtTokenizer, ExtDate, ExtPcre, ExtEreg, ExtJson, ExtHash, ExtSpl }; } //} /// /// Called by the Core after the library is loaded. /// protected override void Loaded(PhpLibraryAttribute assemblyAttribute, LibraryConfigStore config) { base.Loaded(assemblyAttribute, config); singleton = this; #if !SILVERLIGHT LibraryConfiguration.RegisterLegacyOptions(); // registers session handlers: SessionHandlers.RegisterHandler(PhpSessionHandler.Default); SessionHandlers.RegisterHandler(PhpUserSessionHandler.Default); SessionHandlers.RegisterHandler(AspNetThruSessionHandler.Default); // registers serializers: Serializers.RegisterSerializer(PhpSerializer.Default); //Serializers.RegisterSerializer(PhalangerSerializer.Default); Serializers.RegisterSerializer(new ContextualSerializer("dotnet", delegate(PHP.Core.Reflection.DTypeDesc caller/*ignored*/) { return new BinaryFormatter( null, new StreamingContext(StreamingContextStates.Persistence, new SerializationContext())); })); #endif } #if !SILVERLIGHT /// /// Creates empty library configuration context. /// /// An initialized configuration context. Should not be a null reference. protected override ConfigContextBase CreateConfigContext() { return new ConfigContextBase(new LibraryConfiguration(), null); } /// /// Parses a configuration section belonging to the library. /// /// A library configuration context. /// The context of the configuration created by Phalanger Core. /// A XML node containing the configuration or its part. /// Updated library configuration context. protected override ConfigContextBase ParseConfig(ConfigContextBase result, PhpConfigurationContext context, XmlNode section) { LibraryConfiguration local = (LibraryConfiguration)result.Local; // parses XML tree: foreach (XmlNode node in section.ChildNodes) { if (node.NodeType == XmlNodeType.Element) { switch (node.Name) { case "mailer": ConfigUtils.ParseNameValueList(node, context, local.Mailer); break; case "highlighting": ConfigUtils.ParseNameValueList(node, context, local.Highlighting); break; case "session": // allowed only in web application configuration: if (HttpContext.Current == null) throw new ConfigurationErrorsException(CoreResources.GetString("web_only_option"), node); ConfigUtils.ParseNameValueList(node, context, local.Session); break; case "date": ConfigUtils.ParseNameValueList(node, context, local.Date); break; case "serialization": ConfigUtils.ParseNameValueList(node, context, local.Serialization); break; default: throw new ConfigUtils.InvalidNodeException(node); } } } return result; } #endif } } ================================================ FILE: Source/ClassLibrary/Locale.cs ================================================ /* Copyright (c) 2004-2006 Tomas Matousek. The use and distribution terms for this software are contained in the file named License.txt, which can be found in the root of the Phalanger distribution. By using this software in any fashion, you are agreeing to be bound by the terms of this license. You must not remove this notice from this software. */ using System; using System.Threading; using System.Globalization; using System.Collections; using System.ComponentModel; using PHP.Core; using System.Diagnostics; #if SILVERLIGHT using PHP.CoreCLR; #endif namespace PHP.Library { /// /// This class manages locale information for PHP and interacts .NET Framework. /// /// public static class Locale { [ImplementsConstant("CHAR_MAX")] public const int CHAR_MAX = 127; private static readonly char[] CultureNameSeparators = new char[] { '-', '_' }; #region Categorized Cultures /// /// A locale categories. /// /// public enum Category { /// /// Assigning a culture to this category is equivalent to assigning it to all other categories. /// [ImplementsConstant("LC_ALL")] All, /// /// Influences function strcoll. /// [ImplementsConstant("LC_COLLATE")] Collate, /// /// Influences functions strtolower, strtoupper /// [ImplementsConstant("LC_CTYPE")] CType, /// /// Influences functions money_format, localeconv /// [ImplementsConstant("LC_MONETARY")] Monetary, /// /// Influences function localeconv and formatting of all floating-point numbers. /// [ImplementsConstant("LC_NUMERIC")] Numeric, /// /// Influences function strftime. /// [ImplementsConstant("LC_TIME")] Time } /// /// Cultures associated with cathegories. /// private static CultureInfo[] cultures { get { if (_cultures == null) _cultures = new CultureInfo[(int)Category.Time + 1]; return _cultures; } } #if !SILVERLIGHT [ThreadStatic] #endif private static CultureInfo[] _cultures; static Locale() { RequestContext.RequestEnd += new Action(Clear); } private static void Clear() { _cultures = null; } /// /// Gets a culture specific for the given category. /// /// The category. /// Non-null culture info. public static CultureInfo GetCulture(Category category) { if ((int)category < 0 || (int)category >= cultures.Length) throw new ArgumentOutOfRangeException("category"); return cultures[(int)category] ?? CultureInfo.CurrentCulture; } /// /// Sets a culture specific for the given category. /// /// The category. /// The culture. public static void SetCulture(Category category, CultureInfo culture) { if ((int)category < 0 || (int)category >= cultures.Length) throw new ArgumentOutOfRangeException("category"); // sets specific culture: if (category == Category.All) { for (int i = 0; i < cultures.Length; i++) cultures[i] = culture; } else { cultures[(int)category] = culture; } // sets global culture used in many places: if (category == Category.All || category == Category.Numeric) Thread.CurrentThread.CurrentCulture = culture; } /// /// Creates a new comparing according to the current collate. /// /// Whether to create a case-insensitive comparer. /// The comparer. public static PhpLocaleStringComparer GetStringComparer(bool ignoreCase) { return new PhpLocaleStringComparer(GetCulture(Category.Collate), ignoreCase); } #endregion #region localeconv /// /// Converts .NET groups information to PHP array. /// private static PhpArray GetGroupingArray(int[] groups) { Debug.Assert(groups != null); int length = groups.Length; PhpArray result = new PhpArray(length, 0); for (int i = 0; i < length; i++) if (groups[i] == 0) result.Add(i, CHAR_MAX); else result.Add(i, groups[i]); return result; } /// /// Gets information about the current thread culture. /// /// The associative array of number and currency information. [ImplementsFunction("localeconv")] public static PhpArray localeconv() { PhpArray result = new PhpArray(0, 18); NumberFormatInfo number; number = GetCulture(Category.Numeric).NumberFormat; result.Add("decimal_point", number.NumberDecimalSeparator); result.Add("thousands_sep", number.NumberGroupSeparator); result.Add("grouping", GetGroupingArray(number.CurrencyGroupSizes)); result.Add("positive_sign", number.PositiveSign); result.Add("negative_sign", number.NegativeSign); result.Add("frac_digits", number.CurrencyDecimalDigits); number = GetCulture(Category.Monetary).NumberFormat; result.Add("currency_symbol", number.CurrencySymbol); result.Add("mon_decimal_point", number.CurrencyDecimalSeparator); result.Add("mon_thousands_sep", number.CurrencyGroupSeparator); result.Add("mon_grouping", GetGroupingArray(number.CurrencyGroupSizes)); // currency patterns: 0 -> $n, 1 -> n$, 2 -> $ n, 3 -> n $ result.Add("p_cs_precedes", number.CurrencyPositivePattern == 0 || number.CurrencyPositivePattern == 2); result.Add("p_sep_by_space", number.CurrencyPositivePattern == 2 || number.CurrencyPositivePattern == 3); result.Add("n_cs_precedes", number.CurrencyNegativePattern == 0 || number.CurrencyNegativePattern == 2); result.Add("n_sep_by_space", number.CurrencyNegativePattern == 2 || number.CurrencyNegativePattern == 3); result.Add("p_sign_posn", 1); result.Add("n_sign_posn", 1); return result; } #endregion #region setlocale, strcoll, nl_langinfo (NS) #if !SILVERLIGHT /// /// Sets or gets the current thread culture settings. /// /// /// A category to be modified. The only supported value in this version is . /// /// Either an instance of containing locales or a locale. /// If is not of type contains locales, ignored otherwise. /// The culture string (e.g. "en-US"). /// /// /// Values specified in and are converted to strings. /// Each value should have format "{language}-{region}" or "{language}_{region}" or "{language}" or special values "C" or empty string /// which represents the invariant culture or special values null or "0" which means no changes is made /// by the method rather the current culture name is returned. /// The first value containing am existing culture string is used. /// /// /// has an invalid or unsupported value. (Warning) [ImplementsFunction("setlocale")] [return: CastToFalse] public static string SetLocale(Category category, object locale, params object[] moreLocales) { CultureInfo new_culture; if (GetFirstExistingCulture(locale, moreLocales, out new_culture)) { if ((int)category < 0 || (int)category > cultures.Length) { PhpException.InvalidArgument("category", LibResources.GetString("arg:invalid_value")); return null; } // sets specific culture: SetCulture(category, new_culture); } else { new_culture = CultureInfo.CurrentCulture; } if (new_culture == CultureInfo.InvariantCulture) return "C"; return String.Format("{0}.{1}", new_culture.EnglishName.Replace(" (", "_").Replace(")", ""), new_culture.TextInfo.ANSICodePage); } /// /// Searches in given objects for a locale string describing an existing culture. /// /// Contains either an instance of containing locales or a locale. /// If is not of type contains locales, ignored otherwise. /// The resulting culture. A null reference means no culture has been found. /// Whether a culture settings should be changed. private static bool GetFirstExistingCulture(object locale, object[] moreLocales, out CultureInfo culture) { PhpArray array; IEnumerator locales; culture = null; if ((array = locale as PhpArray) != null) { // locales are stored in the "locale" array: locales = array.GetEnumerator(); locales.MoveNext(); locale = locales.Current; } else if (moreLocales != null) { // locales are stored in the "locale" and "moreLocales": locales = moreLocales.GetEnumerator(); } else { throw new ArgumentNullException("moreLocales"); } // enumerates locales and finds out the first which is valid: for (; ; ) { string name = (locale != null) ? Core.Convert.ObjectToString(locale) : null; culture = GetCultureByName(name); // name is "empty" then the current culture is not changed: if (name == null || name == "0") return false; // if culture exists and is specific then finish searching: if (culture != null) return true; // the next locale: if (!locales.MoveNext()) return false; locale = locales.Current; } } /// /// Gets a culture of a specified name. /// Tries "{language}-{country}", "{country}-{language}". /// Recognizes "C", "", "0" and null as invariant culture. /// Note, PHP swaps language and country codes. /// private static CultureInfo GetCultureByName(string name) { // invariant culture: if (name == null || name == "0" || name == String.Empty || name == "C") return CultureInfo.InvariantCulture; int separator = name.IndexOfAny(CultureNameSeparators); if (separator < 0) { try { return CultureInfo.CreateSpecificCulture(name); } catch (ArgumentException) { } } else { string part1 = name.Substring(0, separator); string part2 = name.Substring(separator + 1); try { return CultureInfo.CreateSpecificCulture(String.Concat(part1, "-", part2)); } catch (ArgumentException) { try { return CultureInfo.CreateSpecificCulture(String.Concat(part2, "-", part1)); } catch (ArgumentException) { } } } return null; } /// /// Compares two specified strings, honoring their case, using culture specific comparison. /// /// A string. /// A string. /// /// Returns -1 if is less than ; +1 if is greater than , /// and 0 if they are equal. /// [ImplementsFunction("strcoll")] public static int StringCollate(string str1, string str2) { return String.Compare(str1, str2, false, GetCulture(Category.Collate)); } /// /// Not supported. /// [ImplementsFunction("nl_langinfo", FunctionImplOptions.NotSupported)] [EditorBrowsable(EditorBrowsableState.Never)] public static string nl_langinfo(int item) { PhpException.FunctionNotSupported(); return null; } #endif #endregion } } ================================================ FILE: Source/ClassLibrary/Mailer.CLR.cs ================================================ /* Copyright (c) 2004-2012 Pavel Novak, Tomas Matousek, DEVSENSE. The use and distribution terms for this software are contained in the file named License.txt, which can be found in the root of the Phalanger distribution. By using this software in any fashion, you are agreeing to be bound by the terms of this license. You must not remove this notice from this software. TODO: .NET 2.0 */ using System; using PHP.Core; using System.Net.Mail; using System.Text; using System.Text.RegularExpressions; using System.ComponentModel; using System.Net.Sockets; using System.Net; using System.IO; using System.Collections.Generic; using System.Globalization; using System.Diagnostics; namespace PHP.Library { /// /// Maps PHP mailing methods to Framework ones. /// /// public static class Mailer { #region mail, ezmlm_hash /// /// Sends e-mail only with essential headers. /// /// Recipient e-mail address. /// E-mail subject. /// Message body. /// True if mail was accepted to send. [ImplementsFunction("mail")] public static bool Mail(string to, string subject, string message) { return Mail(to, subject, message, null); } /// /// Sends e-mail, allows specify additional headers. /// Supported are Cc, Bcc, From, Priority, Content-type. Others are ignored. /// /// /// E-mail addresses specified in additional headers must be valid (including From header). /// Otherwise your e-mail will not be send. /// /// Recipient e-mail address. /// E-mail subject. /// Message body. /// Additional headers. /// True if mail was accepted to send. [ImplementsFunction("mail")] public static bool Mail(string to, string subject, string message, string additionalHeaders) { // to and subject cannot contain newlines, replace with spaces to = (to != null) ? to.Replace("\r\n", " ").Replace('\n', ' ') : ""; subject = (subject != null) ? subject.Replace("\r\n", " ").Replace('\n', ' ') : ""; Debug.WriteLine("MAILER", "mail('{0}','{1}','{2}','{3}')", to, subject, message, additionalHeaders); // get current configuration, we need some fields for mailing LibraryConfiguration config = LibraryConfiguration.Local; // set SMTP server we are using RawSmtpClient client = new RawSmtpClient(config.Mailer.SmtpServer, config.Mailer.SmtpPort); // X-PHP-Originating-Script if (config.Mailer.AddXHeader) additionalHeaders = "X-PHP-Originating-Script: 1:" + ScriptContext.CurrentContext.MainScriptFile.RelativePath.Path + "\n" + additionalHeaders; try { client.Connect(); client.SendMessage( config.Mailer.DefaultFromHeader, to, subject, additionalHeaders, message); return true; } catch (Exception e) { string error_message = e.Message; Exception inner = e; while ((inner = inner.InnerException) != null) error_message += "; " + inner.Message; PhpException.Throw(PhpError.Warning, LibResources.GetString("cannot_send_email", error_message) #if DEBUG + "\n\n" + e.StackTrace #endif ); return false; } finally { client.Disconnect(); } } /// /// Sends e-mail, allows specify additional headers and additional parameters. /// /// /// Additional parameters are not supported, must be null or empty string. /// Use overload function without additionalParameters parameter. /// /// Recipient e-mail address. /// E-mail subject. /// Message body. /// Additional headers. /// Additional parameters. /// True if mail was accepted to send. [ImplementsFunction("mail")] public static bool Mail(string to, string subject, string message, string additionalHeaders, string additionalParameters) { // additional parameters are not supported while running windows if (!string.IsNullOrEmpty(additionalParameters)) PhpException.Throw(PhpError.Warning, LibResources.GetString("additional_parameters_not_supported")); return Mail(to, subject, message, additionalHeaders); } /// /// Counts hash value needed by EZMLM. /// /// Mail address for which is hash value calculating. /// Calculated hash value. [ImplementsFunction("ezmlm_hash")] public static int ezmlm_hash(string addr) { // this algorithm is assumed from PHP source code uint h = 5381; // must be 32-bit unsigned addr = addr.ToLower(); unchecked // overflow may occur, this is OK. { for (int j = 0; j < addr.Length; j++) { h = (h + (h << 5)) ^ (uint)addr[j]; } } h = (h % 53); return (int)h; } #endregion #region Mail headers parsing /// /// Extracts mail headers from string headers and if the string contains supported headers, /// appropriate fields are set to MailMessage mm object. /// Supported headers are: Cc, Bcc, From, Priority, Content-type. Others are ignored. /// /// String containing mail headers. /// MailMessage object to set fields according to headers. private static void SetMailHeaders(string headers, MailMessage mm) { // parse additional headers Regex headerRegex = new Regex("^([^:]+):[ \t]*(.+)$"); Match headerMatch; int line_begin, line_end = -1; while (true) { line_begin = line_end + 1; // search for non-empty line while (line_begin < headers.Length && (headers[line_begin] == '\n' || headers[line_begin] == '\r')) line_begin++; if (line_begin >= headers.Length) break; // find the line end line_end = line_begin + 1; while (line_end < headers.Length && headers[line_end] != '\n' && headers[line_end] != '\r') line_end++; string header = headers.Substring(line_begin, line_end - line_begin); headerMatch = headerRegex.Match(header); // ignore wrong formatted headers if (!headerMatch.Success) continue; string sw = headerMatch.Groups[1].Value.Trim().ToLower(); switch (sw) { case "cc": mm.CC.Add(ExtractMailAddressesOnly(headerMatch.Groups[2].Value, Int32.MaxValue)); break; case "bcc": mm.Bcc.Add(ExtractMailAddressesOnly(headerMatch.Groups[2].Value, Int32.MaxValue)); break; case "from": string from = ExtractMailAddressesOnly(headerMatch.Groups[2].Value, 1); if (!String.IsNullOrEmpty(from)) { try { mm.From = new MailAddress(from); } catch (FormatException) { } } break; case "priority": mm.Priority = ExtractPriority(headerMatch.Groups[2].Value); break; case "content-type": ExtractContentType(headerMatch.Groups[2].Value, mm); break; default: mm.Headers.Add(headerMatch.Groups[1].Value.Trim(), headerMatch.Groups[2].Value); break; } } } /// /// Converts semicolon separated list of email addresses and names of email owners /// to semicolon separated list of only email addresses. /// /// Semicolon separated list of email addresses and names. /// Max number of emails returned. /// Semicolon separated list of email addresses only. private static string ExtractMailAddressesOnly(string emails, int max) { StringBuilder mailsOnly = new StringBuilder(); Regex regWithName = new Regex("^[ \t]*([^<>]*?)[ \t]*<[ \t]*([^<>]*?)[ \t]*>[ \t]*$"); Regex regEmail = new Regex("^[ \t]*[^@ \t<>]+@[^@ \t<>]+.[^@ \t<>]+[ \t]*$"); Match m, m2; string toAppend = ""; string[] mailsArray = emails.Split(';'); foreach (string mail in mailsArray) { m = regWithName.Match(mail); if (m.Success) // mail with name { Group gr; for (int i = 1; i < m.Groups.Count; i++) { gr = m.Groups[i]; m2 = regEmail.Match(gr.Value); if (m2.Success) { toAppend = m2.Value; } } // if an e-mail is in <..> we forget previous email found out of <..> (the name looks like e-mail address) mailsOnly.Append(toAppend); mailsOnly.Append(';'); } else { m2 = regEmail.Match(mail); if (m2.Success) // only email without name { mailsOnly.Append(m2.Value); mailsOnly.Append(';'); } else { // bad e-mail address PhpException.Throw(PhpError.Warning, LibResources.GetString("invalid_email_address", mail)); } } } if (mailsOnly.Length == 0) return ""; // return without last semicolon return mailsOnly.ToString(0, mailsOnly.Length - 1); } /// /// Used for converting header Priority to MailPriority value needed by .NET Framework mailer. /// /// "Priority:" header value. /// MailPriority specified by header value. private static MailPriority ExtractPriority(string p) { switch (p.Trim().ToLowerInvariant()) { case "high": return MailPriority.High; case "low": return MailPriority.Low; case "normal": default: return MailPriority.Normal; } } /// /// Used for converting header ContentType to MailFormat value and Encoding class. /// /// "Content-type:" header value /// Mail message instance. private static void ExtractContentType(string contentTypeHeader, MailMessage mm) { contentTypeHeader = contentTypeHeader.Trim().ToLower(); // extract content-type value parts (type/subtype; parameter1=value1; parameter2=value2) string[] headerParts = contentTypeHeader.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries); if (headerParts == null || headerParts.Length == 0) return; // process type/subtype mm.IsBodyHtml = (headerParts[0].Trim() == "text/html"); for (int i = 1; i < headerParts.Length; ++i) { int asspos = headerParts[i].IndexOf('='); if (asspos < 1) continue; string propertyName = headerParts[i].Remove(asspos).Trim(); string propertyValue = headerParts[i].Substring(asspos + 1).Trim(new char[]{' ','\t','\"','\'','\n','\r'}); switch (propertyName) { case "charset": try { mm.BodyEncoding = Encoding.GetEncoding(propertyValue); } catch (Exception) {} break; default: break; } } // add header into the mail message as it is mm.Headers.Add("content-type", contentTypeHeader); } #endregion #region RawSmtpClient /// /// Raw SMTP client serving the needs of PHP mail functions. This is reimplemented mainly because .NET SmtpClient provides /// certain level of abstraction which is incompatible with mail function usage. Currently not as much advanced, but it can easily be. /// internal class RawSmtpClient { /// /// Wait time for Socket.Poll - in microseconds. /// private const int _pollTime = 100000; /// /// Timeout of connection. We don't want to block for too long. /// private const int _connectionTimeout = 5000; /// /// Gets a value indicating whether this client is connected to a server. /// public bool Connected { get { return _connected; } } private bool _connected; /// /// Gets or sets a value indicating whether this client should implicitly use ESMTP to connect to the server. /// public bool UseExtendedSmtp { get { return _useExtendedSmtp; } } private bool _useExtendedSmtp; /// /// Gets host name set for this client to connect to. /// public string/*!*/HostName { get { return _hostName; } } private readonly string/*!*/_hostName; /// /// Gets port number set for this client to connect to. /// public int Port { get { return _port; } } private readonly int _port; /// /// Gets a list of SMTP extensions supported by current connection. /// public string[] Extensions { get { return _extensions; } } private string[] _extensions; private TextReader _reader; private TextWriter _writer; private Socket _socket; private NetworkStream _stream; public RawSmtpClient(string hostName) : this(hostName, 25) { } /// /// Initializes a new instance of AdvancedSmtp client class. /// /// Host name (IP or domain name) of the SMTP server. /// Port on which SMTP server runs. public RawSmtpClient(string hostName, int port) { _hostName = hostName ?? string.Empty; _port = port; _connected = false; _useExtendedSmtp = true; } /// /// Resets the state of this object. /// private void ResetConnection() { if (_reader != null) { _reader.Close(); _reader = null; } if (_writer != null) { _writer.Close(); _writer = null; } if (_stream != null) { _stream.Close(); _stream = null; } if (_socket != null) { if (_socket.Connected) _socket.Shutdown(SocketShutdown.Both); _socket.Close(); _socket = null; } _extensions = null; _connected = false; } /// /// Connects to the server. /// /// Method throws an exception on any error. /// If any error occures. public void Connect() { // invariant condition Debug.Assert(_connected == (_socket != null)); // check whether socket is not already connected if (_connected) { // check whether the socket is OK bool error = _socket.Poll(_pollTime, SelectMode.SelectError); if (!error) // ok, we keep this connection return;// true; // close the socket and reset ResetConnection(); } // resolve host's domain IPAddress[] addresses = null; try { addresses = System.Net.Dns.GetHostAddresses(_hostName); } catch (Exception e) { // DNS error - reset and fail ResetConnection(); //return false; throw new SmtpException(e.Message); } Debug.Assert(addresses != null); // create socket _socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); // begin async connect IAsyncResult res = _socket.BeginConnect(addresses, _port, null, null); // wait for some time res.AsyncWaitHandle.WaitOne(_connectionTimeout); // if socket could not connect, reset and fail if (!_socket.Connected) { ResetConnection(); throw new SmtpException("Cannot connect to " + _hostName); } // if anything inside throws exception, we were not successful try { // end connect _socket.EndConnect(res); // create a stream _stream = new NetworkStream(_socket); // create _reader and _writer _reader = new StreamReader(_stream, Encoding.ASCII); _writer = new StreamWriter(_stream, Encoding.ASCII); _writer.NewLine = "\r\n"; string line; // read server welcome message line = _reader.ReadLine(); // if there is no 220 in the beginning, this is no SMTP server if (!line.StartsWith("220")) throw new SmtpException("Expected 220, '"+line+"' given");// return false; //TODO: server name processing // send ESMTP welcome message if (_useExtendedSmtp) { Post("EHLO " + System.Net.Dns.GetHostName()); // read response line = _reader.ReadLine(); } if (_useExtendedSmtp && line.StartsWith("250")) { // this is ESMTP server // ESMTP returns '-' on fourth char if there are any more lines available if (line[3] == ' ') { // there are no extensions _extensions = ArrayUtils.EmptyStrings; // success return;// true; } else if (line[3] == '-') { List extensions = new List(); // we do not need to read first line - there is only a welcome string while (true) { //read new line line = _reader.ReadLine(); if (line.StartsWith("250-")) { //add new extension name extensions.Add(line.Substring(4, line.Length - 4)); } else if (line.StartsWith("250 ")) { //add new extension name and finish handshake extensions.Add(line.Substring(4, line.Length - 4)); _extensions = extensions.ToArray(); _connected = true; return;// true; } else { //invalid response (do not send QUIT message) break; } } } // this is not a valid ESMTP server } else if (line.StartsWith("500") || !_useExtendedSmtp) { Post("HELO " + System.Net.Dns.GetHostName()); if (Ack("250")) { _extensions = ArrayUtils.EmptyStrings; // handshake complete _connected = true; return;// true; } } } catch (Exception e) { throw new SmtpException(e.Message); } // any error is bad ResetConnection(); // (do not send QUIT message) throw new SmtpException("Unexpected"); //return false; } /// /// Disconnects the client from the server. /// public void Disconnect() { if (!_connected) { ResetConnection(); return; } Post("QUIT"); Ack("221", null, (_) => {/*incorrect response (do nothing)*/}); //correct response ResetConnection(); } /// /// Sends reset message to the server. /// private void Reset() { if (!_connected) return; if (_reader.Peek() != -1) { // there is something on the input (should be empty) ResetConnection(); return; } Post("RSET"); Ack("250", null, (_) => ResetConnection()); } /// /// Starts mail transaction and prepares the data lines from supplied message properties. /// Processes provided headers to determine cc, bcc and from values. /// All data will be send as ASCII if possible. /// /// Sender of the mail. /// Recipients of the mail. /// Subject of the mail. /// Additional headers. /// Message body. /// List of message body lines. private IEnumerable/*!*/ProcessMessageHeaders(string from, string to, string subject, string headers, string body) { Dictionary headerHashtable = new Dictionary(StringComparer.OrdinalIgnoreCase); List> headerList = new List>(); List recipients = new List(1) { to }; //parse headers if (headers != null) using (StringReader reader = new StringReader(headers)) { string line; while ((line = reader.ReadLine()) != null) { int index = line.IndexOf(": ", StringComparison.Ordinal); if (index > 0) { string name = line.Substring(0, index); string value = line.Substring(index + 2); // headerHashtable[name] = headerList.Count; // remember last position of header headerList.Add(new KeyValuePair(name, value)); // process known headers: if (from == null && name.EqualsOrdinalIgnoreCase("from")) from = value; if (name.EqualsOrdinalIgnoreCase("cc") || name.EqualsOrdinalIgnoreCase("bcc")) recipients.Add(value); //PostRcptTo(value); // postponed until we are discovering from address } } } // check from address: if (from == null) throw new SmtpException(LibResources.GetString("smtp_sendmail_from_not_set")); // start mail transaction: Post(FormatEmailAddress(from, "MAIL FROM:<{0}>")); Ack("250"); for (int i = 0; i < recipients.Count; i++) PostRcptTo(recipients[i]); // additional message lines: List ret = new List(); // Date: ret.Add("Date: " + DateTime.Now.ToString("ddd, dd MMM yyyy HH:mm:ss zz00", new CultureInfo("en-US"))); // From: // Only add the From: field from parameter if it isn't in the custom headers: if (!headerHashtable.ContainsKey("from") && !string.IsNullOrEmpty(from)) ret.Add("From: " + from); // Subject: ret.Add("Subject: " + (subject ?? "No Subject")); // To: // Only add the To: field from the parameter if isn't in the custom headers: if (!headerHashtable.ContainsKey("to") && !string.IsNullOrEmpty(to)) ret.Add("To: " + to); // add headers, ignore duplicities (only accept the last occurance): foreach (var headerIndex in headerHashtable.Values) { var header = headerList[headerIndex]; ret.Add(string.Format("{0}: {1}", header.Key, header.Value)); } ret.Add(""); // parse the into lines: StringReader bodyReader = new StringReader(body); while (bodyReader.Peek() != -1) ret.Add(bodyReader.ReadLine()); return ret; } /// /// Cut out the address if contained within <...> characters. Otherwise take the whole string. /// The address is transformed using given format. /// /// Given mail address. /// Format to be used for method. /// Formatted email address. private static string FormatEmailAddress(string/*!*/address, string/*!*/formatString) { Debug.Assert(address != null, "address == null"); Debug.Assert(formatString != null, "formatString == null"); int a, b; if ((a = address.IndexOf('<')) >= 0 && (b = address.IndexOf('>', a)) >= 0) address = address.Substring(a + 1, b - a - 1); return string.Format(formatString, address.Trim()); } #region Post, Ack /// /// Writes , appends CRLF and flushes internal writer. /// /// to be written onto the internal writer. private void Post(string line) { this._writer.WriteLine(line); this._writer.Flush(); } private bool Ack(string expected1) { return Ack(expected1, null, (line) => ThrowExpectedResponseHelper(line, expected1)); } private bool Ack(string expected1, string expected2) { return Ack(expected1, expected2, (line) => ThrowExpectedResponseHelper(line, string.Format("{0} or {1}", expected1, expected2))); } private void ThrowExpectedResponseHelper(string givenResponse, string expectedStr) { Reset(); throw new SmtpException(string.Format("Expected response {0}, '{1}' given.", expectedStr, givenResponse)); } private bool Ack(string expected1, string expected2, Action/*!*/fail) { Debug.Assert(fail != null); var line = _reader.ReadLine(); if (expected1 != null && line.StartsWith(expected1, StringComparison.Ordinal)) return true; // ok if (expected2 != null && line.StartsWith(expected2, StringComparison.Ordinal)) return true; // ok fail(line); return false; } #endregion /// /// Send RCPT TO commands. /// /// List of recipients comma-separated. private void PostRcptTo(string recipients) { if (!string.IsNullOrEmpty(recipients)) foreach (var rcpt in recipients.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) { if (rcpt.StartsWith("undisclosed-recipients:", StringComparison.Ordinal)) continue; // this should be specified in To: header, it is not intended for the SMTP server within RCPT TO command Post(FormatEmailAddress(rcpt, "RCPT TO:<{0}>")); Ack("250", "251"); } } /// /// Sends the raw message. /// /// On eny error an exception is thrown. /// When any error occures during the mail send. public void SendMessage(string from, string to, string subject, string headers, string body) { // // see http://email.about.com/cs/standards/a/smtp_error_code_2.htm for response codes. // if (!_connected) throw new SmtpException("NOT CONNECTED"); // start mail transaction and // process headers (may contain additional recipients and from address) // and prepare data that is broken up to form data lines. // Note ProcessMessageData may add additional recipients, so it must be called before "DATA" section. var dataLines = ProcessMessageHeaders(from, to, subject, headers, body); // send DATA Post("DATA"); Ack("354"); foreach (string dataLine in dataLines) { // PHP implementation uses 991 line length limit (including CRLF) const int maxLineLength = 989; int lineStart = 0; int correction = 0; // if SP character is on the first place, we need to duplicate it if (dataLine.Length > 0 && dataLine[0] == '.') _writer.Write('.'); // according to MIME, the lines must not be longer than 998 characters (1000 including CRLF) // so we need to break such lines using folding while (dataLine.Length - lineStart > maxLineLength - correction) { //break the line, inserting FWS sequence _writer.WriteLine(dataLine.Substring(lineStart, maxLineLength - correction)); _writer.Write(' '); lineStart += maxLineLength - correction; //make correction (whitespace on the next line) correction += 1; } //output the rest of the line _writer.WriteLine(dataLine.Substring(lineStart)); // flush the stream _writer.Flush(); } _writer.WriteLine("."); // flush the stream _writer.Flush(); Ack("250"); //return true; // ok } } #endregion } } ================================================ FILE: Source/ClassLibrary/Math.cs ================================================ /* Copyright (c) 2004-2006 Jan Benda and Tomas Matousek. The use and distribution terms for this software are contained in the file named License.txt, which can be found in the root of the Phalanger distribution. By using this software in any fashion, you are agreeing to be bound by the terms of this license. You must not remove this notice from this software. */ using System; using System.Text; using System.Collections; using System.ComponentModel; using PHP.Core; #if SILVERLIGHT using PHP.CoreCLR; using MathEx = PHP.CoreCLR.MathEx; #else using MathEx = System.Math; using System.Diagnostics; #endif namespace PHP.Library { /// /// Implements PHP mathematical functions and constants. /// /// public static class PhpMath { #region Per-request Random Number Generators /// /// Gets an initialized random number generator associated with the current thread. /// internal static Random Generator { get { if (_generator == null) _generator = new Random(unchecked((int)DateTime.UtcNow.ToFileTime())); return _generator; } } #if !SILVERLIGHT [ThreadStatic] #endif private static Random _generator; /// /// Gets an initialized Mersenne Twister random number generator associated with the current thread. /// internal static MersenneTwister MTGenerator { get { if (_mtGenerator == null) _mtGenerator = new MersenneTwister(unchecked((uint)DateTime.UtcNow.ToFileTime())); return _mtGenerator; } } #if !SILVERLIGHT [ThreadStatic] #endif private static MersenneTwister _mtGenerator; /// /// Registers routine to be called on request end. /// static PhpMath() { RequestContext.RequestEnd += new Action(ClearGenerators); } /// /// Nulls and fields on request end. /// private static void ClearGenerators() { _generator = null; _mtGenerator = null; } #endregion #region Constants [ImplementsConstant("M_PI")] public const double Pi = System.Math.PI; [ImplementsConstant("M_E")] public const double E = System.Math.E; [ImplementsConstant("M_LOG2E")] public const double Log2e = 1.4426950408889634074; [ImplementsConstant("M_LOG10E")] public const double Log10e = 0.43429448190325182765; [ImplementsConstant("M_LN2")] public const double Ln2 = 0.69314718055994530942; [ImplementsConstant("M_LN10")] public const double Ln10 = 2.30258509299404568402; [ImplementsConstant("M_PI_2")] public const double PiHalf = 1.57079632679489661923; [ImplementsConstant("M_PI_4")] public const double PiFourth = 0.78539816339744830962; [ImplementsConstant("M_1_PI")] public const double Pith = 0.31830988618379067154; [ImplementsConstant("M_2_PI")] public const double TwoPiths = 0.63661977236758134308; [ImplementsConstant("M_SQRTPI")] public const double SqrtPi = 1.77245385090551602729; [ImplementsConstant("M_2_SQRTPI")] public const double TwoSqrtPi = 1.12837916709551257390; [ImplementsConstant("M_SQRT3")] public const double Sqrt3 = 1.73205080756887729352; [ImplementsConstant("M_SQRT1_2")] public const double SqrtHalf = 0.70710678118654752440; [ImplementsConstant("M_LNPI")] public const double LnPi = 1.14472988584940017414; [ImplementsConstant("M_EULER")] public const double Euler = 0.57721566490153286061; [ImplementsConstant("NAN")] public const double NaN = Double.NaN; [ImplementsConstant("INF")] public const double Infinity = Double.PositiveInfinity; #endregion #region Absolutize Range /// /// Absolutizes range specified by an offset and a length relatively to a dimension of an array. /// /// The number of items in array. Should be non-negative. /// /// The offset of the range relative to the beginning (if non-negative) or the end of the array (if negative). /// If the offset underflows or overflows the length is shortened appropriately. /// /// /// The length of the range if non-negative. Otherwise, its absolute value is the number of items /// which will not be included in the range from the end of the array. In the latter case /// the range ends with the ||-th item from the end of the array (counting from zero). /// /// /// Ensures that [offset,offset + length] is subrange of [0,count]. /// public static void AbsolutizeRange(ref int offset, ref int length, int count) { Debug.Assert(count >= 0); // prevents overflows: if (offset >= count || count == 0) { offset = count; length = 0; return; } // negative offset => offset is relative to the end of the string: if (offset < 0) { offset += count; if (offset < 0) offset = 0; } Debug.Assert(offset >= 0 && offset < count); if (length < 0) { // there is count-offset items from offset to the end of array, // the last |length| items is taken away: length = count - offset + length; if (length < 0) length = 0; } else if ((long)offset + length > count) { // interval ends on the end of array: length = count - offset; } Debug.Assert(length >= 0 && offset + length <= count); } #endregion #region rand, srand, getrandmax, uniqid, lcg_value /// /// Gets 0 or 1 randomly. /// static int Random01() { return (int)Math.Round(Generator.NextDouble()); } /// /// Seed the random number generator. No return value. /// [ImplementsFunction("srand")] public static void Seed() { _generator = new Random(); } /// /// Seed the random number generator. No return value. /// /// Optional seed value. [ImplementsFunction("srand")] public static void Seed(int seed) { _generator = new Random(seed); } /// /// Show largest possible random value. /// /// The largest possible random value returned by rand(). [ImplementsFunction("getrandmax")] public static int GetMaxRandomValue() { return Int32.MaxValue; } /// /// Generate a random integer. /// /// A pseudo random value between 0 and getrandmax(), inclusive. [ImplementsFunction("rand")] public static int Random() { return Generator.Next() + Random01(); } /// /// Generate a random integer. /// /// The lowest value to return. /// The highest value to return. /// A pseudo random value between min and max, inclusive. [ImplementsFunction("rand")] public static int Random(int min, int max) { if (min > max) return Random(max, min); if (min == max) return min; if (max == int.MaxValue) return Generator.Next(min, int.MaxValue) + Random01(); return Generator.Next(min, max + 1); } /// /// Generate a unique ID. /// Gets a prefixed unique identifier based on the current time in microseconds. /// /// Returns the unique identifier, as a string. [ImplementsFunction("uniqid")] public static string UniqueId() { return UniqueId(null, false); } /// /// Generate a unique ID. /// Gets a prefixed unique identifier based on the current time in microseconds. /// /// Can be useful, for instance, if you generate identifiers simultaneously on several hosts that might happen to generate the identifier at the same microsecond. /// With an empty prefix , the returned string will be 13 characters long. /// /// Returns the unique identifier, as a string. [ImplementsFunction("uniqid")] public static string UniqueId(string prefix) { return UniqueId(prefix, false); } /// /// Generate a unique ID. /// /// /// With an empty prefix, the returned string will be 13 characters long. If more_entropy is TRUE, it will be 23 characters. /// /// Use the specified prefix. /// Use LCG to generate a random postfix. /// A pseudo-random string composed from the given prefix, current time and a random postfix. [ImplementsFunction("uniqid")] public static string UniqueId(string prefix, bool more_entropy) { // Note that Ticks specify time in 100nanoseconds but it is raised each 100144 // ticks which is around 10 times a second (the same for Milliseconds). string ticks = String.Format("{0:X}", DateTime.Now.Ticks + Generator.Next()); ticks = ticks.Substring(ticks.Length - 13); if (prefix == null) prefix = ""; if (more_entropy) { string rnd = LcgValue().ToString(); rnd = rnd.Substring(2, 8); return String.Format("{0}{1}.{2}", prefix, ticks, rnd); } else return String.Format("{0}{1}", prefix, ticks); } /// /// Generates a pseudo-random number using linear congruential generator in the range of (0,1). /// /// /// This method uses the Framwork generator /// which may or may not be the same generator as the PHP one (L(CG(2^31 - 85),CG(2^31 - 249))). /// /// [ImplementsFunction("lcg_value")] public static double LcgValue() { return Generator.NextDouble(); } #endregion #region mt_getrandmax, mt_rand, mt_srand [ImplementsFunction("mt_getrandmax")] public static int MtGetMaxRandomValue() { return Int32.MaxValue; } [ImplementsFunction("mt_rand")] public static int MtRandom() { return MTGenerator.Next(); } [ImplementsFunction("mt_rand")] public static int MtRandom(int min, int max) { return (min < max) ? MTGenerator.Next(min, max) : MTGenerator.Next(max, min); } /// /// Seed the better random number generator. /// No return value. /// [ImplementsFunction("mt_srand")] public static void MtSeed() { MtSeed(Generator.Next()); } /// /// Seed the better random number generator. /// No return value. /// /// Optional seed value. [ImplementsFunction("mt_srand")] public static void MtSeed(int seed) { MTGenerator.Seed(unchecked((uint)seed)); } #endregion #region is_nan,is_finite,is_infinite [ImplementsFunction("is_nan")] [PureFunction] public static bool IsNaN(double x) { return Double.IsNaN(x); } [ImplementsFunction("is_finite")] [PureFunction] public static bool IsFinite(double x) { return !Double.IsInfinity(x); } [ImplementsFunction("is_infinite")] [PureFunction] public static bool IsInfinite(double x) { return Double.IsInfinity(x); } #endregion #region decbin, bindec, decoct, octdec, dechex, hexdec, base_convert /// /// Converts the given number to int (if the number is whole /// and fits into the int's range). /// /// /// int representation of number if possible, otherwise a double representation. private static object ConvertToInt(double number) { if ((Math.Round(number) == number) && (number <= int.MaxValue) && (number >= int.MinValue)) { return (int)number; } return number; } /// /// Converts the lowest 32 bits of the given number to a binary string. /// /// /// [ImplementsFunction("decbin")] public static PhpBytes DecToBin(double number) { // Trim the number to the lower 32 binary digits. uint temp = unchecked((uint)number); return DoubleToBase(temp, 2); } /// /// Converts the lowest 32 bits of the given number to a binary string. /// /// /// [ImplementsFunction("decbin_unicode")] public static string DecToBinUnicode(double number) { // Trim the number to the lower 32 binary digits. uint temp = unchecked((uint)number); return DoubleToBaseUnicode(temp, 2); } /// /// Returns the decimal equivalent of the binary number represented by the binary_string argument. /// bindec() converts a binary number to an integer or, if needed for size reasons, double. /// /// The binary string to convert. /// The decimal value of . [ImplementsFunction("bindec")] public static object BinToDec(PhpBytes str) { if (str == null) return 0; return ConvertToInt(BaseToDouble(str, 2)); } [ImplementsFunction("bindec_unicode")] public static object BinToDecUnicode(string str) { if (str == null) return 0; return ConvertToInt(BaseToDoubleUnicode(str, 2)); } /// /// Returns a string containing an octal representation of the given number argument. /// /// Decimal value to convert. /// Octal string representation of . [ImplementsFunction("decoct")] public static PhpBytes DecToOct(int number) { return new PhpBytes(System.Convert.ToString(number, 8)); } [ImplementsFunction("decoct_unicode")] public static string DecToOctUnicode(int number) { return System.Convert.ToString(number, 8); } /// /// Returns the decimal equivalent of the octal number represented by the argument. /// /// The octal string to convert. /// The decimal representation of . [ImplementsFunction("octdec")] public static object OctToDec(PhpBytes str) { if (str == null) return 0; return ConvertToInt(BaseToDouble(str, 8)); } [ImplementsFunction("octdec_unicode")] public static object OctToDecUnicode(string str) { if (str == null) return 0; return ConvertToInt(BaseToDoubleUnicode(str, 8)); } /// /// Returns a string containing a hexadecimal representation of the given number argument. /// /// Decimal value to convert. /// Hexadecimal string representation of . [ImplementsFunction("dechex")] public static PhpBytes DecToHex(int number) { return new PhpBytes(System.Convert.ToString(number, 16)); } [ImplementsFunction("dechex_unicode")] public static string DecToHexUnicode(int number) { return System.Convert.ToString(number, 16); } /// /// Hexadecimal to decimal. /// Returns the decimal equivalent of the hexadecimal number represented by the hex_string argument. hexdec() converts a hexadecimal string to a decimal number. /// hexdec() will ignore any non-hexadecimal characters it encounters. /// /// The hexadecimal string to convert. /// The decimal representation of . [ImplementsFunction("hexdec")] public static object HexToDec(PhpBytes str) { if (str == null) return 0; return ConvertToInt(BaseToDouble(str, 16)); } [ImplementsFunction("hexdec_unicode")] public static object HexToDecUnicode(string str) { if (str == null) return 0; return ConvertToInt(BaseToDoubleUnicode(str, 16)); } public static double BaseToDouble(PhpBytes number, int fromBase) { if (number == null) { PhpException.ArgumentNull("number"); return 0.0; } if (fromBase < 2 || fromBase > 36) { PhpException.InvalidArgument("toBase", LibResources.GetString("arg:out_of_bounds")); return 0.0; } double fnum = 0; for (int i = 0; i < number.Length; i++) { int digit = Core.Parsers.Convert.AlphaNumericToDigit((char)number.ReadonlyData[i]); if (digit < fromBase) fnum = fnum * fromBase + digit; } return fnum; } public static double BaseToDoubleUnicode(string number, int fromBase) { if (number == null) { PhpException.ArgumentNull("number"); return 0.0; } if (fromBase < 2 || fromBase > 36) { PhpException.InvalidArgument("toBase", LibResources.GetString("arg:out_of_bounds")); return 0.0; } double fnum = 0; for (int i = 0; i < number.Length; i++) { int digit = Core.Parsers.Convert.AlphaNumericToDigit(number[i]); if (digit < fromBase) fnum = fnum * fromBase + digit; } return fnum; } private const string digitsUnicode = "0123456789abcdefghijklmnopqrstuvwxyz"; private static byte[] digits = new byte[] {(byte)'0',(byte)'1',(byte)'2',(byte)'3',(byte)'4',(byte)'5',(byte)'6',(byte)'7',(byte)'8',(byte)'9', (byte)'a',(byte)'b',(byte)'c',(byte)'d',(byte)'e',(byte)'f',(byte)'g',(byte)'h',(byte)'i',(byte)'j',(byte)'k',(byte)'l',(byte)'m',(byte)'n', (byte)'o',(byte)'p',(byte)'q',(byte)'r',(byte)'s',(byte)'t',(byte)'u',(byte)'v',(byte)'w',(byte)'x',(byte)'y',(byte)'z' }; public static PhpBytes DoubleToBase(double number, int toBase) { if (toBase < 2 || toBase > 36) { PhpException.InvalidArgument("toBase", LibResources.GetString("arg:out_of_bounds")); return PhpBytes.Empty; } // Don't try to convert infinity or NaN: if (Double.IsInfinity(number) || Double.IsNaN(number)) { PhpException.InvalidArgument("number", LibResources.GetString("arg:out_of_bounds")); return PhpBytes.Empty; } double fvalue = Math.Floor(number); /* floor it just in case */ if (Math.Abs(fvalue) < 1) return new PhpBytes(new byte[]{(byte)'0'}); System.Collections.Generic.List sb = new System.Collections.Generic.List(); while (Math.Abs(fvalue) >= 1) { double mod = Fmod(fvalue, toBase); int i = (int)mod; byte b = digits[i]; //sb.Append(digits[(int) fmod(fvalue, toBase)]); sb.Add(b); fvalue /= toBase; } sb.Reverse(); return new PhpBytes(sb.ToArray()); } public static string DoubleToBaseUnicode(double number, int toBase) { if (toBase < 2 || toBase > 36) { PhpException.InvalidArgument("toBase", LibResources.GetString("arg:out_of_bounds")); return String.Empty; } // Don't try to convert infinity or NaN: if (Double.IsInfinity(number) || Double.IsNaN(number)) { PhpException.InvalidArgument("number", LibResources.GetString("arg:out_of_bounds")); return String.Empty; } double fvalue = Math.Floor(number); /* floor it just in case */ if (Math.Abs(fvalue) < 1) return "0"; StringBuilder sb = new StringBuilder(); while (Math.Abs(fvalue) >= 1) { double mod = Fmod(fvalue, toBase); int i = (int)mod; char c = digitsUnicode[i]; //sb.Append(digits[(int) fmod(fvalue, toBase)]); sb.Append(c); fvalue /= toBase; } return PhpStrings.Reverse(sb.ToString()); } /// /// Convert a number between arbitrary bases. /// Returns a string containing number represented in base tobase. The base in which number is given is specified in . Both and have to be between 2 and 36, inclusive. Digits in numbers with a base higher than 10 will be represented with the letters a-z, with a meaning 10, b meaning 11 and z meaning 35. /// /// The number to convert /// The base is in. /// The base to convert to /// converted to base . [ImplementsFunction("base_convert")] [return: CastToFalse] public static string BaseConvert(string number, int fromBase, int toBase) { double value; if (number == null) return "0"; try { value = BaseToDoubleUnicode(number, fromBase); } catch (ArgumentException) { PhpException.Throw(PhpError.Warning, LibResources.GetString("arg:invalid_value", "fromBase", fromBase)); return null; } try { return DoubleToBaseUnicode(value, toBase); } catch (ArgumentException) { PhpException.Throw(PhpError.Warning, LibResources.GetString("arg:invalid_value", "toBase", toBase)); return null; } } #endregion #region deg2rad, pi, cos, sin, tan, acos, asin, atan, atan2 /// /// Degrees to radians. /// /// /// [ImplementsFunction("deg2rad"/*, FunctionImplOptions.Special*/)] [PureFunction] public static double DegreesToRadians(double degrees) { return degrees / 180 * Math.PI; } /// /// Radians to degrees. /// /// /// [ImplementsFunction("rad2deg")] [PureFunction] public static double RadiansToDegrees(double radians) { return radians / Math.PI * 180; } /// /// Returns an approximation of pi. /// /// The value of pi as double. [ImplementsFunction("pi")] [PureFunction] public static double PI() { return Math.PI; } /// /// Returns the arc cosine of arg in radians. /// acos() is the complementary function of cos(), which means that ==cos(acos()) for every value of a that is within acos()' range. /// /// The argument to process. /// The arc cosine of in radians. [ImplementsFunction("acos"/*, FunctionImplOptions.Special*/)] [PureFunction] public static double Acos(double x) { return Math.Acos(x); } /// /// Returns the arc sine of arg in radians. asin() is the complementary function of sin(), which means that ==sin(asin()) for every value of a that is within asin()'s range. /// /// The argument to process. /// The arc sine of in radians. [ImplementsFunction("asin"/*, FunctionImplOptions.Special*/)] [PureFunction] public static double Asin(double x) { return Math.Asin(x); } [ImplementsFunction("atan"/*, FunctionImplOptions.Special*/)] [PureFunction] public static double Atan(double x) { return Math.Atan(x); } [ImplementsFunction("atan2")] [PureFunction] public static double Atan2(double y, double x) { double rv = Math.Atan(y / x); if (x < 0) { return ((rv > 0) ? -Math.PI : Math.PI) + rv; } else return rv; } [ImplementsFunction("cos"/*, FunctionImplOptions.Special*/)] [PureFunction] public static double Cos(double x) { return Math.Cos(x); } [ImplementsFunction("sin"/*, FunctionImplOptions.Special*/)] [PureFunction] public static double Sin(double x) { return Math.Sin(x); } [ImplementsFunction("tan"/*, FunctionImplOptions.Special*/)] [PureFunction] public static double Tan(double x) { return Math.Tan(x); } #endregion #region cosh, sinh, tanh, acosh, asinh, atanh [ImplementsFunction("cosh")] [PureFunction] public static double Cosh(double x) { return Math.Cosh(x); } [ImplementsFunction("sinh")] [PureFunction] public static double Sinh(double x) { return Math.Sinh(x); } [ImplementsFunction("tanh")] [PureFunction] public static double Tanh(double x) { return Math.Tanh(x); } [ImplementsFunction("acosh")] [PureFunction] public static double Acosh(double x) { return Math.Log(x + Math.Sqrt(x * x - 1)); } [ImplementsFunction("asinh")] [PureFunction] public static double Asinh(double x) { return Math.Log(x + Math.Sqrt(x * x + 1)); } [ImplementsFunction("atanh")] [PureFunction] public static double Atanh(double x) { return Math.Log((1 + x) / (1 - x)) / 2; } #endregion #region exp, expm1, log, log10, log1p, pow, sqrt, hypot /// /// Returns e raised to the power of . /// [ImplementsFunction("exp"/*, FunctionImplOptions.Special*/)] [PureFunction] public static double Exp(double x) { return Math.Exp(x); } /// /// expm1() returns the equivalent to 'exp(arg) - 1' computed in a way that is accurate even /// if the value of arg is near zero, a case where 'exp (arg) - 1' would be inaccurate due to /// subtraction of two numbers that are nearly equal. /// /// The argument to process [ImplementsFunction("expm1")] [PureFunction] [EditorBrowsable(EditorBrowsableState.Never)] public static double ExpM1(double x) { return Math.Exp(x) - 1.0; // TODO: implement exp(x)-1 for x near to zero } /// /// Returns the base-10 logarithm of . /// [ImplementsFunction("log10")] [PureFunction] public static double Log10(double x) { return Math.Log10(x); } [ImplementsFunction("log"/*, FunctionImplOptions.Special*/)] [PureFunction] public static double Log(double x) { return Math.Log(x); } /// /// If the optional parameter is specified, log() returns log() , otherwise log() returns the natural logarithm of . /// [ImplementsFunction("log"/*, FunctionImplOptions.Special*/)] [PureFunction] public static double Log(double x, double logBase) { return MathEx.Log(x, logBase); } /// /// log1p() returns log(1 + number) computed in a way that is accurate even when the value /// of number is close to zero. log() might only return log(1) in this case due to lack of precision. /// /// The argument to process /// [ImplementsFunction("log1p")] [PureFunction] [EditorBrowsable(EditorBrowsableState.Never)] public static double Log1P(double x) { return Math.Log(x + 1.0); // TODO: implement log(x+1) for x near to zero } /// /// Returns raised to the power of . /// [ImplementsFunction("pow")] [PureFunction] public static object Power(object @base, object exp) { double dbase, dexp; int ibase, iexp; long lbase, lexp; Core.Convert.NumberInfo info_base, info_exp; info_base = Core.Convert.ObjectToNumber(@base, out ibase, out lbase, out dbase); info_exp = Core.Convert.ObjectToNumber(exp, out iexp, out lexp, out dexp); if (((info_base | info_exp) & PHP.Core.Convert.NumberInfo.Double) == 0 && lexp >= 0) { // integer base, non-negative integer exp // long lpower; double dpower; if (!Power(lbase, lexp, out lpower, out dpower)) return dpower; if (lpower >= Int32.MinValue && lpower <= Int32.MaxValue) return (Int32)lpower; return lpower; } if (dbase < 0) { // cannot rount to integer: if (Math.Ceiling(dexp) > dexp) return Double.NaN; double result = Math.Pow(-dbase, dexp); return (Math.IEEERemainder(Math.Abs(dexp), 2.0) < 1.0) ? result : -result; } if (dexp < 0) return 1 / Math.Pow(dbase, -dexp); else return Math.Pow(dbase, dexp); } private static bool Power(long x, long y, out long longResult, out double doubleResult) { long l1 = 1, l2 = x; if (y == 0) // anything powered by 0 is 1 { doubleResult = longResult = 1; return true; } if (x == 0) // 0^(anything except 0) is 0 { doubleResult = longResult = 0; return true; } try { while (y >= 1) { if ((y & 1) != 0) { l1 *= l2; y--; } else { l2 *= l2; y /= 2; } } } catch(ArithmeticException) { longResult = 0;//ignored doubleResult = (double)l1 * Math.Pow(l2, y); return false; } // able to do it with longs doubleResult = longResult = l1; return true; } [ImplementsFunction("sqrt"/*, FunctionImplOptions.Special*/)] [PureFunction] public static double Sqrt(double x) { return Math.Sqrt(x); } [ImplementsFunction("hypot")] [PureFunction] public static double Hypotenuse(double x, double y) { return Math.Sqrt(x * x + y * y); } #endregion #region ceil, floor, round, abs, fmod, max, min /// /// Returns the next highest integer value by rounding up if necessary. /// /// The value to round. /// rounded up to the next highest integer. The return value of ceil() is still of type double as the value range of double is usually bigger than that of integer. [ImplementsFunction("ceil")] [PureFunction] public static double Ceiling(double x) { return Math.Ceiling(x); } /// /// Returns the next lowest integer value by rounding down if necessary. /// /// The numeric value to round. /// rounded to the next lowest integer. The return value of floor() is still of type double because the value range of double is usually bigger than that of integer. [ImplementsFunction("floor")] [PureFunction] public static double Floor(double x) { return Math.Floor(x); } /// /// Rounds a float. /// /// The value to round. /// The rounded value. [ImplementsFunction("round")] [PureFunction] public static double Round(double x) { return RoundInternal(x, RoundMode.HalfUp); } /// /// Rounds a float. /// /// The value to round. /// The optional number of decimal digits to round to. Can be less than zero to ommit digits at the end. Default is 0. /// The rounded value. [ImplementsFunction("round")] [PureFunction] public static double Round(double x, int precision /*= 0*/) { return Round(x, precision, RoundMode.HalfUp); } /// /// $mode parameter for function. /// public enum RoundMode : int { /// /// When a number is halfway between two others, it is rounded away from zero. /// [ImplementsConstant("PHP_ROUND_HALF_UP")] HalfUp = 1, /// /// When a number is halfway between two others, it is rounded to the zero. /// [ImplementsConstant("PHP_ROUND_HALF_DOWN")] HalfDown = 2, /// /// When a number is halfway between two others, it is rounded toward the nearest even number. /// [ImplementsConstant("PHP_ROUND_HALF_EVEN")] HalfEven = 3, /// /// When a number is halfway between two others, it is rounded toward the nearest odd number. /// [ImplementsConstant("PHP_ROUND_HALF_ODD")] HalfOdd = 4, } #region Round Helpers /// /// Returns precise value of 10^. /// private static double Power10Value(int power) { switch (power) { case -15: return .000000000000001; case -14: return .00000000000001; case -13: return .0000000000001; case -12: return .000000000001; case -11: return .00000000001; case -10: return .0000000001; case -9: return .000000001; case -8: return .00000001; case -7: return .0000001; case -6: return .000001; case -5: return .00001; case -4: return .0001; case -3: return .001; case -2: return .01; case -1: return .1; case 0: return 1.0; case 1: return 10.0; case 2: return 100.0; case 3: return 1000.0; case 4: return 10000.0; case 5: return 100000.0; case 6: return 1000000.0; case 7: return 10000000.0; case 8: return 100000000.0; case 9: return 1000000000.0; case 10: return 10000000000.0; case 11: return 100000000000.0; case 12: return 1000000000000.0; case 13: return 10000000000000.0; case 14: return 100000000000000.0; case 15: return 1000000000000000.0; default: return Math.Pow(10.0, (double)power); } } private static double RoundInternal(double value, RoundMode mode) { double tmp_value; if (value >= 0.0) { tmp_value = Math.Floor(value + 0.5); if (mode != RoundMode.HalfUp) { if ((mode == RoundMode.HalfDown && value == (-0.5 + tmp_value)) || (mode == RoundMode.HalfEven && value == (0.5 + 2 * Math.Floor(tmp_value * .5))) || (mode == RoundMode.HalfOdd && value == (0.5 + 2 * Math.Floor(tmp_value * .5) - 1.0))) { tmp_value = tmp_value - 1.0; } } } else { tmp_value = Math.Ceiling(value - 0.5); if (mode != RoundMode.HalfUp) { if ((mode == RoundMode.HalfDown && value == (0.5 + tmp_value)) || (mode == RoundMode.HalfEven && value == (-0.5 + 2 * Math.Ceiling(tmp_value * .5))) || (mode == RoundMode.HalfOdd && value == (-0.5 + 2 * Math.Ceiling(tmp_value * .5) + 1.0))) { tmp_value = tmp_value + 1.0; } } } return tmp_value; } private static readonly double[] _Log10AbsValues = new[] { 1e-8, 1e-7, 1e-6, 1e-5, 1e-4, 1e-3, 1e-2, 1e-1, 1e0, 1e1, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 1e10, 1e11, 1e12, 1e13, 1e14, 1e15, 1e16, 1e17, 1e18, 1e19, 1e20, 1e21, 1e22, 1e23 }; private static int _Log10Abs(double value) { value = Math.Abs(value); if (value < 1e-8 || value > 1e23) { return (int)Math.Floor(Math.Log10(value)); } else { var values = _Log10AbsValues; /* Do a binary search with 5 steps */ var result = 16; if (value < values[result]) result -= 8; else result += 8; if (value < values[result]) result -= 4; else result += 4; if (value < values[result]) result -= 2; else result += 2; if (value < values[result]) result -= 1; else result += 1; if (value < values[result]) result -= 1; result -= 8; // return result; } } #endregion /// /// Rounds a float. /// /// The value to round. /// The optional number of decimal digits to round to. Can be less than zero to ommit digits at the end. Default is 0. /// One of PHP_ROUND_HALF_UP, PHP_ROUND_HALF_DOWN, PHP_ROUND_HALF_EVEN, or PHP_ROUND_HALF_ODD. Default is PHP_ROUND_HALF_UP. /// The rounded value. [ImplementsFunction("round")] [PureFunction] public static double Round(double x, int precision /*= 0*/, RoundMode mode /*= RoundMode.HalfUp*/) { if (Double.IsInfinity(x) || Double.IsNaN(x) || x == default(double)) return x; if (precision == 0) { return RoundInternal(x, mode); } else { if (precision > 23 || precision < -23) return x; // // Following code is taken from math.c to avoid incorrect .NET rounding // var precision_places = 14 - _Log10Abs(x); var f1 = Power10Value(precision); double tmp_value; /* If the decimal precision guaranteed by FP arithmetic is higher than the requested places BUT is small enough to make sure a non-zero value is returned, pre-round the result to the precision */ if (precision_places > precision && precision_places - precision < 15) { var f2 = Power10Value(precision_places); tmp_value = x * f2; /* preround the result (tmp_value will always be something * 1e14, thus never larger than 1e15 here) */ tmp_value = RoundInternal(tmp_value, mode); /* now correctly move the decimal point */ f2 = Power10Value(Math.Abs(precision - precision_places)); /* because places < precision_places */ tmp_value = tmp_value / f2; } else { /* adjust the value */ tmp_value = x * f1; /* This value is beyond our precision, so rounding it is pointless */ if (Math.Abs(tmp_value) >= 1e15) return x; } /* round the temp value */ tmp_value = RoundInternal(tmp_value, mode); /* see if it makes sense to use simple division to round the value */ //if (precision < 23 && precision > -23) { tmp_value = tmp_value / f1; } //else //{ // /* Simple division can't be used since that will cause wrong results. // Instead, the number is converted to a string and back again using // strtod(). strtod() will return the nearest possible FP value for // that string. */ // /* 40 Bytes should be more than enough for this format string. The // float won't be larger than 1e15 anyway. But just in case, use // snprintf() and make sure the buffer is zero-terminated */ // char buf[40]; // snprintf(buf, 39, "%15fe%d", tmp_value, -places); // buf[39] = '\0'; // tmp_value = zend_strtod(buf, NULL); // /* couldn't convert to string and back */ // if (!zend_finite(tmp_value) || zend_isnan(tmp_value)) { // tmp_value = value; // } //} return tmp_value; } } /// /// Returns the absolute value of . /// /// The numeric value to process. /// [ImplementsFunction("abs")] [PureFunction] public static object Abs(object x) { double dx; int ix; long lx; switch (Core.Convert.ObjectToNumber(x, out ix, out lx, out dx) & Core.Convert.NumberInfo.TypeMask) { case Core.Convert.NumberInfo.Double: return Math.Abs(dx); case Core.Convert.NumberInfo.Integer: if (ix == int.MinValue) return -lx; else return Math.Abs(ix); case Core.Convert.NumberInfo.LongInteger: if (lx == long.MinValue) return -dx; else return Math.Abs(lx); } return null; } /// /// Returns the floating point remainder (modulo) of the division of the arguments. /// /// The dividend. /// The divisor. /// The floating point remainder of /. [ImplementsFunction("fmod")] [PureFunction] public static double Fmod(double x, double y) { y = Math.Abs(y); double rem = Math.IEEERemainder(Math.Abs(x), y); if (rem < 0) rem += y; return (x >= 0) ? rem : -rem; } /// /// Find highest value. /// If the first and only parameter is an array, max() returns the highest value in that array. If at least two parameters are provided, max() returns the biggest of these values. /// /// An array containing the values or values separately. /// max() returns the numerically highest of the parameter values. If multiple values can be considered of the same size, the one that is listed first will be returned. /// When max() is given multiple arrays, the longest array is returned. If all the arrays have the same length, max() will use lexicographic ordering to find the return value. /// When given a string it will be cast as an integer when comparing. [ImplementsFunction("max")] [PureFunction] public static object Max(params object[] numbers) { return GetExtreme(numbers, true); } /// /// Find lowest value. /// If the first and only parameter is an array, min() returns the lowest value in that array. If at least two parameters are provided, min() returns the smallest of these values. /// /// An array containing the values or values separately. /// min() returns the numerically lowest of the parameter values. [ImplementsFunction("min")] [PureFunction] public static object Min(params object[] numbers) { return GetExtreme(numbers, false); } internal static object GetExtreme(object[] numbers, bool maximum) { if ((numbers.Length == 1) && (numbers[0] is PhpArray)) { IEnumerable e = (numbers[0] as PhpArray).Values; Debug.Assert(e != null); return FindExtreme(e, maximum); } return FindExtreme(numbers, maximum); } internal static object FindExtreme(IEnumerable array, bool maximum) { object ex = null; int fact = maximum ? 1 : -1; foreach (object o in array) { if (ex == null) ex = o; else { if ((PhpComparer.Default.Compare(o, ex) * fact) > 0) ex = o; } } return ex; } #endregion } } ================================================ FILE: Source/ClassLibrary/MersenneTwister.cs ================================================ using System; /* Mersanne Twister random generator C# implementation. Adapted by Tomas Matousek from original C version by Takuji Nishimura and Makoto Matsumoto (http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/emt.html). Experimental version. */ /* License: Copyright (C) 1997 - 2002, Makoto Matsumoto and Takuji Nishimura, All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The names of its contributors may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ namespace PHP.Library { /// /// Mersanne Twister random generator. /// public sealed class MersenneTwister { // period parameters: private const int N = 624; private const int M = 397; // mag01[x] = x * MATRIX_A for x=0,1 private static readonly uint[] mag01 = { 0, 0x9908b0dfU }; // mti==N+1 means mt[N] is not initialized: private int mti = N + 1; // the array for the state vector: private readonly uint[] mt = new uint[N]; /// /// Create a new instance of using a default seed. /// public MersenneTwister() { Seed(5489U); } /// /// Create a new instance of using a specified seed. /// /// The seed. public MersenneTwister(uint seed) { Seed(seed); } /// /// Seeds the generator. /// /// The seed. public void Seed(uint seed) { mt[0] = seed; for (int i = 1; i < N; i++) { // See Knuth TAOCP Vol2. 3rd Ed. P.106 for multiplier. // In the previous versions, MSBs of the seed affect // only MSBs of the array mt[]. // 2002/01/09 modified by Makoto Matsumoto mt[i] = unchecked((uint)((1812433253UL * (mt[i - 1] ^ (mt[i - 1] >> 30)) + (ulong)i))); } mti = N; } /// /// Generates a random unsigned integer. /// /// The generated number. public uint NextUnsigned() { // most significant w-r bits: const uint upper_mask = 0x80000000U; // least significant r bits: const uint lower_mask = 0x7fffffffU; uint result; unchecked { // generate N words at one time: if (mti >= N) { int k; for (k = 0; k < N - M; k++) { result = (mt[k] & upper_mask) | (mt[k + 1] & lower_mask); mt[k] = mt[k + M] ^ (result >> 1) ^ mag01[result & 1]; } for (; k < N - 1; k++) { result = (mt[k] & upper_mask) | (mt[k + 1] & lower_mask); mt[k] = mt[k + (M - N)] ^ (result >> 1) ^ mag01[result & 1]; } result = (mt[N - 1] & upper_mask) | (mt[0] & lower_mask); mt[N - 1] = mt[M - 1] ^ (result >> 1) ^ mag01[result & 1]; mti = 0; } result = mt[mti++]; // tempering: result ^= (result >> 11); result ^= (result << 7) & 0x9d2c5680U; result ^= (result << 15) & 0xefc60000U; result ^= (result >> 18); } return result; } /// /// Generates a random signed integer value. /// /// The generated number. public int Next() { return unchecked((int)(NextUnsigned() >> 1)); } /// /// Generates a random number from interval [min,max). /// /// The generated number. public int Next(int min, int max) { if (min > max) throw new ArgumentOutOfRangeException("min"); unchecked { int range = max - min; if (range < 0) { long long_range = (long)max - min; return (int)((long)(NextDouble() * long_range) + min); } else { return ((int)(NextDouble() * range)) + min; } } } /// /// Generates a random double value from interval [0,1). /// /// The generated number. double NextDouble() { return (double)NextUnsigned() * (1.0 / (double)UInt32.MaxValue); } #region Unit Testing #if DEBUG public static void Test() { int i; MersenneTwister mt = new MersenneTwister(); Console.WriteLine("1000 outputs of genrand_int32()"); for (i = 0; i < 1000; i++) { Console.Write("{0} ", mt.NextUnsigned()); if (i % 5 == 4) Console.WriteLine(); } Console.ReadLine(); Console.WriteLine("1000 outputs of genrand_real2"); for (i = 0; i < 1000; i++) { Console.Write("{0} ", mt.NextDouble()); if (i % 5 == 4) Console.WriteLine(); } } #endif #endregion } } ================================================ FILE: Source/ClassLibrary/Misc.cs ================================================ using System; using System.Diagnostics; /* Designed and implemented by Tomas Matousek. */ namespace PHP { /// /// Summary description for Utils. /// public class Misc { private Misc() { } /// /// Absolutizes range specified by an offset and a length relatively to a dimension of an array. /// /// The number of items in array. /// /// The offset of the range relative to the beginning (if non-negative) or the end of the array (if negative). /// If the offset underflows or overflows the dimension of array it is trimmed appropriately. /// /// /// The length of the range if non-negative. Otherwise, its absolute value is the number of items /// which will not be included in the range from the end of the array. In the latter case /// the range ends with the ||-th item from the end of the array (counting from zero). /// public static void AbsolutizeRange(ref int offset, ref int length, int count) { // prevents overflows: if (offset >= count) { offset = count; length = 0; return; } // negative offset => offset is relative to the end of the string: if (offset < 0) { offset += count; if (offset < 0) offset = 0; } Debug.Assert(offset >= 0 && offset < count); if (length < 0) { // there is count-offset items from offset to the end of array, // the last |length| items is taken away: length = count - offset + length; if (length < 0) length = 0; } else if ((long)offset + length > count) { // interval ends on the end of array: length = count - offset; } Debug.Assert(length >= 0 && offset + length <= count); } } } ================================================ FILE: Source/ClassLibrary/Miscellaneous.cs ================================================ /* Copyright (c) 2004-2006 Tomas Matousek. The use and distribution terms for this software are contained in the file named License.txt, which can be found in the root of the Phalanger distribution. By using this software in any fashion, you are agreeing to be bound by the terms of this license. You must not remove this notice from this software. TODO: - sleep() accepts negative values. (5.1.3) */ using System; //using System.Web; using System.IO; using System.Linq; using System.Collections; using System.ComponentModel; using System.Threading; using System.Reflection; using PHP.Core; using PHP.Core.Reflection; using System.Collections.Generic; using System.Diagnostics; #if SILVERLIGHT using PHP.CoreCLR; #endif namespace PHP.Library { #region Enumerations /// [Flags] [EditorBrowsable(EditorBrowsableState.Never)] public enum PhpInfoSections { [ImplementsConstant("INFO_GENERAL")] General = PhpNetInfo.Sections.General, [ImplementsConstant("INFO_CREDITS")] Credits = PhpNetInfo.Sections.Credits, [ImplementsConstant("INFO_CONFIGURATION")] Configuration = PhpNetInfo.Sections.Configuration, [ImplementsConstant("INFO_MODULES")] Extensions = PhpNetInfo.Sections.Extensions, [ImplementsConstant("INFO_ENVIRONMENT")] Environment = PhpNetInfo.Sections.Environment, [ImplementsConstant("INFO_VARIABLES")] Variables = PhpNetInfo.Sections.Variables, [ImplementsConstant("INFO_LICENSE")] License = PhpNetInfo.Sections.License, [ImplementsConstant("INFO_ALL")] All = PhpNetInfo.Sections.All } /// [Flags] [EditorBrowsable(EditorBrowsableState.Never)] public enum PhpCreditsSections { [ImplementsConstant("CREDITS_GROUP")] Group = 1, [ImplementsConstant("CREDITS_GENERAL")] General = 2, [ImplementsConstant("CREDITS_SAPI")] SAPI = 4, [ImplementsConstant("CREDITS_MODULES")] Modules = 8, [ImplementsConstant("CREDITS_DOCS")] Docs = 16, [ImplementsConstant("CREDITS_FULLPAGE")] Fullpage = 32, [ImplementsConstant("CREDITS_QA")] QA = 64, [ImplementsConstant("CREDITS_ALL")] All = -1 } #endregion /// /// Miscellaneous functionality. /// /// public static class Misc { #region phpinfo, phpcredits, phpversion, version_compare, zend_version /// /// Shows all information about Phalanger. /// /// 1. [ImplementsFunction("phpinfo")] public static int PhpInfo() { PhpNetInfo.Write(PhpNetInfo.Sections.All, ScriptContext.CurrentContext.Output); return 1; } /// /// Shows specific information about Phalanger. /// /// A section to show. /// 1. [ImplementsFunction("phpinfo")] public static int PhpInfo(PhpInfoSections sections) { PhpNetInfo.Write((PhpNetInfo.Sections)sections, ScriptContext.CurrentContext.Output); return 1; } /// /// Shows all credits of Phalanger. /// /// True on success, or False on failure. [ImplementsFunction("phpcredits")] public static bool PhpCredits() { PhpNetInfo.Write(PhpNetInfo.Sections.Credits, ScriptContext.CurrentContext.Output); return true; } /// /// Shows all credits of Phalanger. /// /// Ignored. /// /// True on success, or False on failure. [ImplementsFunction("phpcredits")] public static bool PhpCredits(PhpCreditsSections sections) { PhpNetInfo.Write(PhpNetInfo.Sections.Credits, ScriptContext.CurrentContext.Output); return true; } /// /// Retrieves a string version of PHP language which features is supported by the Phalanger. /// /// PHP language version. [ImplementsFunction("phpversion")] [PureFunction] public static string PhpVersion() { return Core.PhpVersion.Current; } /// /// Retrieves a string version of a specified extension. /// /// Version of the extension or null if it cannot be retrieved. [ImplementsFunction("phpversion")] [return: CastToFalse] public static string PhpVersion(string extensionName) { PhpException.FunctionNotSupported(); //return ApplicationContext.Default.GetLoadedLibraries().FirstOrDefault(x => x.Descriptor.AssemblyAttribute ... return null; } /// /// Compares PHP versions. /// /// The first version. /// The second version. /// The result of comparison (-1,0,+1). [ImplementsFunction("version_compare")] [PureFunction] public static int VersionCompare(string ver1, string ver2) { return Core.PhpVersion.Compare(ver1, ver2); } /// /// Compares PHP versions using a specified operators. /// /// The first version. /// The second version. /// The operator to be used. /// A boolean result of comparison or a null reference if the operator is invalid. [ImplementsFunction("version_compare")] [PureFunction] public static object VersionCompare(string ver1, string ver2, string op) { return Core.PhpVersion.Compare(ver1, ver2, op); } /// /// Gets the current version of Zend engine as it is defined in the currently supported PHP. /// /// The version. [ImplementsFunction("zend_version")] [PureFunction] public static string ZendVersion() { return Core.PhpVersion.Zend; } #endregion #region gethostname, php_uname, memory_get_usage, php_sapi_name /// /// gethostname() gets the standard host name for the local machine. /// /// Returns a string with the hostname on success, otherwise FALSE is returned. [ImplementsFunction("gethostname")] [return: CastToFalse] public static string GetHostName() { string host = null; #if !SILVERLIGHT try { host = System.Net.Dns.GetHostName(); } catch { } #endif return host; } /// /// Retrieves full version information about OS. /// /// OS version. [ImplementsFunction("php_uname")] public static string PhpUName() { //return String.Concat(Environment.OSVersion,", CLR ",Environment.Version); return PhpUName(null); } /// /// Retrieves specific version information about OS. /// /// /// /// 'a'This is the default. Contains all modes in the sequence "s n r v m". /// 's'Operating system name, e.g. "Windows NT", "Windows 9x". /// 'n'Host name, e.g. "www.php-compiler.net". /// 'r'Release name, e.g. "5.1". /// 'v'Version information. Varies a lot between operating systems, e.g. "build 2600". /// 'm'Machine type. eg. "i586". /// /// /// OS version. [ImplementsFunction("php_uname")] public static string PhpUName(string mode) { string system, host, release, version, machine; switch (Environment.OSVersion.Platform) { case PlatformID.Win32NT: system = "Windows NT"; break; case PlatformID.Win32Windows: system = "Windows 9x"; break; case PlatformID.Win32S: system = "Win32S"; break; case PlatformID.WinCE: system = "Windows CE"; break; default: system = "Unix"; break; // TODO } #if !SILVERLIGHT host = System.Net.Dns.GetHostName(); machine = Environment.GetEnvironmentVariable("PROCESSOR_ARCHITECTURE"); if (machine == "x86") machine = "i586"; // TODO #endif release = String.Concat(Environment.OSVersion.Version.Major, ".", Environment.OSVersion.Version.Minor); version = String.Concat("build ", Environment.OSVersion.Version.Build); if (mode != null && mode != "") { switch (mode[0]) { case 's': return system; case 'r': return release; case 'v': return version; #if !SILVERLIGHT case 'm': return machine; case 'n': return host; #endif } } #if !SILVERLIGHT return String.Format("{0} {1} {2} {3} {4}", system, host, release, version, machine); #else return String.Format("{0} {1} {2}", system, release, version); #endif } #if !SILVERLIGHT /// /// Retrieves the size of the current process working set in bytes. /// (In PHP, Returns the amount of memory, in bytes, that's currently being allocated to your PHP script.) /// /// The size. [ImplementsFunction("memory_get_usage")] public static int MemoryGetUsage() { return MemoryGetUsage(false); } /// /// Retrieves the size of the current process working set in bytes. /// /// /// "Set this to TRUE to get the real size of memory allocated from system. /// If not set or FALSE only the memory used by emalloc() is reported." /// The size. [ImplementsFunction("memory_get_usage")] public static int MemoryGetUsage(bool real_usage) { //if (real_usage == false)// TODO: real_usage = false // PhpException.ArgumentValueNotSupported("real_usage"); long ws = System.Diagnostics.Process.GetCurrentProcess().WorkingSet64; if (ws > Int32.MaxValue) return Int32.MaxValue; return (int)ws; } /// /// Returns the peak of memory, in bytes, that's been allocated to the PHP script. /// /// The size. [ImplementsFunction("memory_get_peak_usage", FunctionImplOptions.NotSupported)] public static int MemoryGetPeakUsage() { return MemoryGetPeakUsage(false); } /// /// Returns the peak of memory, in bytes, that's been allocated to the PHP script. /// /// /// Set this to TRUE to get the real size of memory allocated from system. /// If not set or FALSE only the memory used by emalloc() is reported. /// The size. [ImplementsFunction("memory_get_peak_usage", FunctionImplOptions.NotSupported)] public static int MemoryGetPeakUsage(bool real_usage) { //if (real_usage == false)// TODO: real_usage = false // PhpException.ArgumentValueNotSupported("real_usage"); long ws = System.Diagnostics.Process.GetCurrentProcess().NonpagedSystemMemorySize64; // can't get current thread's memory if (ws > Int32.MaxValue) return Int32.MaxValue; return (int)ws; } /// /// Returns the type of interface between web server and Phalanger. /// /// The "isapi" string if runned under webserver (ASP.NET works via ISAPI) or "cli" otherwise. [ImplementsFunction("php_sapi_name")] public static string PhpSapiName() { return (System.Web.HttpContext.Current == null) ? "cli" : "isapi"; } #endif #endregion #region getmypid, getlastmod, get_current_user, (UNIX) getmyuid #if !SILVERLIGHT /// /// Returns the PID of the current process. /// /// The PID. [ImplementsFunction("getmypid")] public static int GetCurrentProcessId() { return System.Diagnostics.Process.GetCurrentProcess().Id; } /// /// Gets time of last page modification. /// /// The UNIX timestamp or -1 on error. [ImplementsFunction("getlastmod")] public static int GetLastModification() { try { PhpSourceFile file = ScriptContext.CurrentContext.MainScriptFile; if (file == null) return -1; return DateTimeUtils.UtcToUnixTimeStamp(File.GetLastWriteTime(file.FullPath).ToUniversalTime()); } catch (System.Exception) { return -1; } } /// /// Gets the name of the current user. /// /// The name of the current user. [ImplementsFunction("get_current_user")] public static string GetCurrentUser() { return Environment.UserName; } #endif /// /// Not supported. /// /// Zero. [ImplementsFunction("getmyuid", FunctionImplOptions.NotSupported)] public static int GetCurrentUserId() { PhpException.FunctionNotSupported(); return 0; } #endregion #region sleep, usleep, (UNIX) time_sleep_until, (UNIX) time_nanosleep /// /// Sleeps the current thread for a specified amount of time. /// /// The number of seconds to sleep. /// Zero on success, or FALSE if negative argument is passed. [ImplementsFunction("sleep")] [return: CastToFalse] public static int sleep(int seconds) { if (seconds < 0) { PhpException.Throw(PhpError.Warning, LibResources.GetString("sleep_seconds_less_zero")); return -1; } Thread.Sleep(((long)seconds * 1000 > int.MaxValue) ? seconds = Timeout.Infinite : seconds * 1000); return 0; } /// /// Sleeps the current thread for a specified amount of time. /// No value is returned. /// /// The number of microseconds to sleep. [ImplementsFunction("usleep")] public static void usleep(int microSeconds) { if (microSeconds < 0) microSeconds = 0; Thread.Sleep(microSeconds / 1000); } #endregion #region dl, extension_loaded, get_loaded_extensions, get_extension_funcs /// /// Not supported. /// /// Ignored. /// false [ImplementsFunction("dl")] public static bool LoadExtension(string library) { PhpException.Throw(PhpError.Warning, LibResources.GetString("dl_not_supported")); return false; } /// /// Determines whether a native extension is loaded. /// /// Internal extension name (e.g. sockets). /// true if the is loaded, false otherwise. [ImplementsFunction("extension_loaded")] [PureFunction(typeof(Misc), "ExtensionLoaded_Analyze")] public static bool ExtensionLoaded(string extension) { return ScriptContext.CurrentContext.ApplicationContext.GetExtensionImplementor(extension) != null; } #region analyzer of extension_loaded public static bool ExtensionLoaded_Analyze(Analyzer/*!*/analyzer, string extension) { Debug.Assert(analyzer != null); foreach (var loadedExtension in analyzer.Context.ApplicationContext.GetLoadedExtensions()) if (String.Compare(loadedExtension, extension, StringComparison.CurrentCultureIgnoreCase) == 0) return true; return false; } #endregion /// /// Returns an array with names of all loaded native extensions. /// /// The array of extension names. [ImplementsFunction("get_loaded_extensions")] public static PhpArray GetLoadedExtensions() { PhpArray result = new PhpArray(); foreach (string extension_name in ScriptContext.CurrentContext.ApplicationContext.GetLoadedExtensions()) result.Add(extension_name); return result; } /// /// Returns an array with names of the functions of a native extension. /// /// Internal extension name (e.g. sockets). /// The array of function names or null if the is not loaded. [ImplementsFunction("get_extension_funcs")] public static PhpArray GetExtensionFunctions(string extension) { if (extension == "zend") // since PHP 5.0 { PhpException.ArgumentValueNotSupported("extension", extension); // TODO: functions in the module zend (php functions in PhpNetCore ?) // ... } ApplicationContext app_context = ScriptContext.CurrentContext.ApplicationContext; PhpLibraryDescriptor desc = app_context.GetExtensionImplementor(extension); if (desc == null) return null; PhpArray result = new PhpArray(); foreach (KeyValuePair function in app_context.Functions) { if (function.Value.DeclaringType.DeclaringModule == desc.Module) { result.Add(function.Key); } } return result; } /// /// A callback used by method. Adds a function to the resulting array as a key. /// private static bool AddFunctionToHashtable(MethodInfo info, ImplementsFunctionAttribute ifa, object result) { if ((ifa.Options & FunctionImplOptions.NotSupported) == 0) ((Hashtable)result)[ifa.Name] = null; return true; } #endregion #region get_required_files, get_included_files /// /// Returns an array of included file paths. /// /// The array of paths to included files (without duplicates). [ImplementsFunction("get_required_files")] public static PhpArray GetRequiredFiles() { return GetIncludedFiles(); } /// /// Returns an array of included file paths. /// /// The array of paths to included files (without duplicates). [ImplementsFunction("get_included_files")] public static PhpArray GetIncludedFiles() { PhpArray result = new PhpArray(); foreach (var source_file in ScriptContext.CurrentContext.GetIncludedScripts()) { result.Add(source_file/*.FullPath.ToString()*/); } return result; } #endregion #region NS: zend_logo_guid, php_logo_guid, (UNIX) getmygid, (UNIX) getmyinode /// /// Not supported. /// [ImplementsFunction("_mime_content_type", FunctionImplOptions.NotSupported)] [EditorBrowsable(EditorBrowsableState.Never)] public static string GetMimeContentType(string fileName) { PhpException.FunctionNotSupported(); return "text/plain"; } /// /// Not supported. /// [ImplementsFunction("zend_logo_guid", FunctionImplOptions.NotSupported)] [EditorBrowsable(EditorBrowsableState.Never)] public static string ZendLogoGuid() { PhpException.FunctionNotSupported(); return null; } /// /// Not supported. /// [ImplementsFunction("php_logo_guid", FunctionImplOptions.NotSupported)] [EditorBrowsable(EditorBrowsableState.Never)] public static string PhpLogoGuid() { PhpException.FunctionNotSupported(); return null; } /// /// Not supported. /// [ImplementsFunction("getmygid", FunctionImplOptions.NotSupported)] [EditorBrowsable(EditorBrowsableState.Never)] public static int GetMyGid() { PhpException.FunctionNotSupported(); return 0; } /// /// Not supported. /// [ImplementsFunction("getmyinode", FunctionImplOptions.NotSupported)] [EditorBrowsable(EditorBrowsableState.Never)] public static int GetMyINode() { PhpException.FunctionNotSupported(); return 0; } #endregion #region gc_enabled [ImplementsFunction("gc_enabled")] public static bool gc_enabled() { return true; // status of the circular reference collector } #endregion } } ================================================ FILE: Source/ClassLibrary/Network.CLR.cs ================================================ /* Copyright (c) 2004-2006 Tomas Matousek and Ladislav Prosek. The use and distribution terms for this software are contained in the file named License.txt, which can be found in the root of the Phalanger distribution. By using this software in any fashion, you are agreeing to be bound by the terms of this license. You must not remove this notice from this software. TODO: Added: inet_pton,inet_ntop (PHP 5.1.0, UNIX only) */ using System; using PHP.Core; using System.Net; using System.Net.Sockets; using System.ComponentModel; namespace PHP.Library { #region Enumerations /// /// Types of the DNS record. /// public enum DnsRecordType { /// IPv4 Address Resource [ImplementsConstant("DNS_A")] Ip4Address, /// Mail Exchanger Resource [ImplementsConstant("DNS_MX")] Mail, /// Alias (Canonical Name) Resource [ImplementsConstant("DNS_CNAME")] Alias, /// Authoritative Name Server Resource. [ImplementsConstant("DNS_NS")] NameServer, /// Pointer Resource. [ImplementsConstant("DNS_PTR")] Pointer, /// Host Info Resource. [ImplementsConstant("DNS_HINFO")] HostInfo, /// Start of Authority Resource. [ImplementsConstant("DNS_SOA")] StartOfAuthority, /// Text Resource. [ImplementsConstant("DNS_TXT")] Text, /// Any Resource Record. [ImplementsConstant("DNS_ANY")] Any, /// IPv6 Address Resource [ImplementsConstant("DNS_AAAA")] Ip6Address, /// Iteratively query the name server for each available record type. [ImplementsConstant("DNS_ALL")] All } #endregion /// /// Socket functions. /// /// public static class Sockets { #region pfsockopen [ImplementsFunction("pfsockopen")] [return: CastToFalse] public static PhpResource OpenPersistent(string target, int port) { int errno; string errstr; return Open(target, port, out errno, out errstr, ScriptContext.CurrentContext.Config.FileSystem.DefaultSocketTimeout, true); } [ImplementsFunction("pfsockopen")] [return: CastToFalse] public static PhpResource OpenPersistent(string target, int port, out int errno) { string errstr; return Open(target, port, out errno, out errstr, ScriptContext.CurrentContext.Config.FileSystem.DefaultSocketTimeout, true); } [ImplementsFunction("pfsockopen")] [return: CastToFalse] public static PhpResource OpenPersistent(string target, int port, out int errno, out string errstr) { return Open(target, port, out errno, out errstr, ScriptContext.CurrentContext.Config.FileSystem.DefaultSocketTimeout, true); } [ImplementsFunction("pfsockopen")] [return: CastToFalse] public static PhpResource OpenPersistent(string target, int port, out int errno, out string errstr, double timeout) { return Open(target, port, out errno, out errstr, timeout, true); } #endregion #region fsockopen /// /// Not supported. /// [ImplementsFunction("fsockopen")] public static PhpResource Open(string target, int port) { int errno; string errstr; return Open(target, port, out errno, out errstr, ScriptContext.CurrentContext.Config.FileSystem.DefaultSocketTimeout, false); } /// /// Not supported. /// [ImplementsFunction("fsockopen")] public static PhpResource Open(string target, int port, out int errno) { string errstr; return Open(target, port, out errno, out errstr, ScriptContext.CurrentContext.Config.FileSystem.DefaultSocketTimeout, false); } /// /// Not supported. /// [ImplementsFunction("fsockopen")] public static PhpResource Open(string target, int port, out int errno, out string errstr) { return Open(target, port, out errno, out errstr, ScriptContext.CurrentContext.Config.FileSystem.DefaultSocketTimeout, false); } /// /// Not supported. /// [ImplementsFunction("fsockopen")] public static PhpResource Open(string target, int port, out int errno, out string errstr, double timeout) { return Open(target, port, out errno, out errstr, timeout, false); } /// /// Not supported. /// [ImplementsFunction("fsockopen")] public static PhpResource Open(string target, int port, out int errno, out string errstr, double timeout, bool persistent) { return StreamSocket.Connect(target, port, out errno, out errstr, timeout, persistent ? StreamSocket.SocketOptions.Persistent : StreamSocket.SocketOptions.None, StreamContext.Default); } #endregion #region socket_get_status, socket_set_blocking, socket_set_timeout /// /// Gets status. /// /// A stream. /// The array containing status info. [ImplementsFunction("socket_get_status")] public static PhpArray GetStatus(PhpResource stream) { return PhpStreams.GetMetaData(stream); } /// /// Sets blocking mode. /// /// A stream. /// A mode. [ImplementsFunction("socket_set_blocking")] public static bool SetBlocking(PhpResource stream, int mode) { return PhpStreams.SetBlocking(stream, mode); } /// /// Sets a timeout. /// /// A stream. /// The timeout in seconds. [ImplementsFunction("socket_set_timeout")] public static bool SetTimeout(PhpResource stream, int seconds) { return PhpStreams.SetTimeout(stream, seconds); } /// /// Sets a timeout. /// /// A stream. /// Seconds part of the timeout. /// Microseconds part of the timeout. [ImplementsFunction("socket_set_timeout")] public static bool SetTimeout(PhpResource stream, int seconds, int microseconds) { return PhpStreams.SetTimeout(stream, seconds, microseconds); } #endregion } /// /// Functions working with DNS. /// /// public static class Dns { #region NS: dns_check_record, checkdnsrr /// /// Not supported. /// [ImplementsFunction("checkdnsrr", FunctionImplOptions.NotSupported)] public static int CheckRecordRows(string host) { return CheckRecords(host, "MX"); } /// /// Not supported. /// [ImplementsFunction("checkdnsrr", FunctionImplOptions.NotSupported)] public static int CheckRecordRows(string host, string type) { return CheckRecords(host, type); } /// /// Not supported. /// [ImplementsFunction("dns_check_record", FunctionImplOptions.NotSupported)] public static int CheckRecords(string host, string type) { PhpException.FunctionNotSupported(); return 0; } #endregion #region NS: dns_get_record /// /// Not supported. /// [ImplementsFunction("dns_get_record", FunctionImplOptions.NotSupported)] public static PhpArray GetRecord(string host) { return GetRecord(host, DnsRecordType.All); } /// /// Not supported. /// [ImplementsFunction("dns_get_record", FunctionImplOptions.NotSupported)] public static PhpArray GetRecord(string host, DnsRecordType type) { PhpException.FunctionNotSupported(); return null; } /// /// Not supported. /// [ImplementsFunction("dns_get_record", FunctionImplOptions.NotSupported)] public static PhpArray GetRecord(string host, DnsRecordType type, out PhpArray authNS, out PhpArray additional) { PhpException.FunctionNotSupported(); authNS = null; additional = null; return null; } #endregion #region gethostbyaddr, gethostbyname, gethostbynamel /// /// Gets the Internet host name corresponding to a given IP address. /// /// The IP address. /// The host name or unmodified on failure. [ImplementsFunction("gethostbyaddr")] public static string GetHostByAddress(string ipAddress) { try { return System.Net.Dns.GetHostEntry(ipAddress).HostName; } catch (System.Exception) { return ipAddress; } } /// /// Gets the IP address corresponding to a given Internet host name. /// /// The host name. /// The IP address or unmodified on failure. [ImplementsFunction("gethostbyname")] public static string GetHostByName(string hostName) { try { IPAddress[] addresses = System.Net.Dns.GetHostEntry(hostName).AddressList; return (addresses.Length > 0) ? addresses[0].ToString() : hostName; } catch (System.Exception) { return hostName; } } /// /// Gets a list of IP addresses corresponding to a given Internet host name. /// /// The host name. /// The list of IP addresses to which the Internet host specified by resolves. /// [ImplementsFunction("gethostbynamel")] public static PhpArray GetHostByNameList(string hostName) { try { IPAddress[] addresses = System.Net.Dns.GetHostEntry(hostName).AddressList; PhpArray result = new PhpArray(addresses.Length, 0); foreach (IPAddress address in addresses) result.Add(address.ToString()); return result; } catch (System.Exception) { return null; } } #endregion #region NS: getmxrr, dns_get_mx /// /// Not supported. /// [ImplementsFunction("getmxrr")] public static bool GetMxRecordRow(string hostName, PhpArray mxHosts) { return GetMxRecord(hostName, mxHosts); ; } /// /// Not supported. /// [ImplementsFunction("getmxrr")] public static bool GetMxRecordRow(string hostName, PhpArray mxHosts, PhpArray weight) { return GetMxRecord(hostName, mxHosts, weight); } /// /// Not supported. /// [ImplementsFunction("dns_get_mx", FunctionImplOptions.NotSupported)] public static bool GetMxRecord(string hostName, PhpArray mxHosts) { PhpException.FunctionNotSupported(); return false; } /// /// Not supported. /// [ImplementsFunction("dns_get_mx", FunctionImplOptions.NotSupported)] public static bool GetMxRecord(string hostName, PhpArray mxHosts, PhpArray weight) { PhpException.FunctionNotSupported(); return false; } #endregion #region getprotobyname, getprotobynumber, getservbyname, getservbyport, ip2long, long2ip /// /// Returns protocol number associated with a given protocol name. /// /// The protocol name. /// The protocol number or -1 if is not found. [ImplementsFunction("getprotobyname")] [return: CastToFalse] public static int GetProtocolByName(string name) { if (string.IsNullOrEmpty(name)) return -1; NetworkUtils.ProtoEnt ent = NetworkUtils.GetProtocolByName(name); if (ent == null) return -1; return ent.p_proto; } /// /// Returns protocol name associated with a given protocol number. /// /// The protocol number. /// The protocol name or null if is not found. [ImplementsFunction("getprotobynumber")] [return: CastToFalse] public static string GetProtocolByNumber(int number) { NetworkUtils.ProtoEnt ent = NetworkUtils.GetProtocolByNumber(number); if (ent == null) return null; return ent.p_name; } /// /// Returns port number associated with a given Internet service and protocol. /// /// The service. /// The protocol. /// The port number or -1 if not found. [ImplementsFunction("getservbyname")] [return: CastToFalse] public static int GetServiceByName(string service, string protocol) { if (service == null) return -1; NetworkUtils.ServEnt ent = NetworkUtils.GetServiceByName(service, protocol); if (ent == null) return -1; return IPAddress.NetworkToHostOrder(ent.s_port); } /// /// Returns an Internet service that corresponds to a given port and protocol. /// /// The port. /// The protocol. /// The service name or null if not found. [ImplementsFunction("getservbyport")] [return: CastToFalse] public static string GetServiceByPort(int port, string protocol) { NetworkUtils.ServEnt ent = NetworkUtils.GetServiceByPort(IPAddress.HostToNetworkOrder(port), protocol); if (ent == null) return null; return ent.s_proto; } /// /// Converts a string containing an (IPv4) Internet Protocol dotted address into a proper address. /// /// The string representation of the address. /// The integer representation of the address. [ImplementsFunction("ip2long")] [return: CastToFalse] public static int IPToInteger(string ipAddress) { if (string.IsNullOrEmpty(ipAddress)) return -1; IPAddress addr; try { addr = IPAddress.Parse(ipAddress); } catch (FormatException) { return -1; } if (addr.AddressFamily != System.Net.Sockets.AddressFamily.InterNetwork) return -1; return IPAddress.NetworkToHostOrder(BitConverter.ToInt32(addr.GetAddressBytes(), 0)); } /// /// Converts an (IPv4) Internet network address into a string in Internet standard dotted format. /// /// The integer representation of the address. /// The string representation of the address. [ImplementsFunction("long2ip")] public static string IntegerToIP(int properAddress) { IPAddress addr; unchecked { addr = new IPAddress((long)(uint)IPAddress.HostToNetworkOrder(properAddress)); } return addr.ToString(); } #endregion } } ================================================ FILE: Source/ClassLibrary/Objects.cs ================================================ /* Copyright (c) 2004-2006 Ladislav Prosek. The use and distribution terms for this software are contained in the file named License.txt, which can be found in the root of the Phalanger distribution. By using this software in any fashion, you are agreeing to be bound by the terms of this license. You must not remove this notice from this software. */ using System; using System.Threading; using System.Collections; using System.Collections.Generic; using PHP.Core; using PHP.Core.Reflection; using System.Diagnostics; namespace PHP.Library { /// /// Contains object-related class library functions. /// /// public static class PhpObjects { /// /// Calls the method referred by from the user defined /// object with parameters . /// /// DTypeDesc of the caller's class context. Can be UnknownTypeDesc. /// The name of the method. /// An instance to invoke the method on or a class name. /// Parameters to invoke the method with. /// The method's return value (always dereferenced). internal static object CallUserMethodInternal(DTypeDesc caller, string methodName, object classNameOrObject, ICollection args) { PhpException.Throw(PhpError.Notice, LibResources.GetString("call_user_method_deprecated")); object ret_val = false; DObject obj; string class_name; ScriptContext context = ScriptContext.CurrentContext; //DTypeDesc classContext = PhpStackTrace.GetClassContext(); // TODO: GetClassContext only if needed by context.ResolveType if (caller != null && caller.IsUnknown) caller = PhpStackTrace.GetClassContext(); if ((obj = classNameOrObject as DObject) != null) { // push arguments on stack context.Stack.AddFrame(args); ret_val = obj.InvokeMethod(methodName, caller, context); } else if ((class_name = PhpVariable.AsString(classNameOrObject)) != null) { // push arguments on stack context.Stack.AddFrame(args); ResolveTypeFlags flags = ResolveTypeFlags.UseAutoload | ResolveTypeFlags.ThrowErrors; DTypeDesc type = PHP.Core.Convert.ObjectToTypeDesc(class_name, flags, caller, context, null, null); ret_val = Operators.InvokeStaticMethod(type, methodName, null, caller, context); } else { PhpException.InvalidArgument("classNameOrObject", LibResources.GetString("arg:not_object_or_class_name")); } return PhpVariable.Dereference(ret_val); } /// /// Calls the method referred by from the user defined /// object with parameters . /// /// DTypeDesc of the caller's class context. Can be UnknownTypeDesc. /// The name of the method. /// An instance to invoke the method on or a class name. /// Parameters to invoke the method with. /// The method's return value (always dereferenced). [ImplementsFunction("call_user_method", FunctionImplOptions.NeedsClassContext)] public static object CallUserMethod(DTypeDesc caller, string methodName, object classNameOrObject, params object[] args) { return CallUserMethodInternal(caller, methodName, classNameOrObject, args); } /// /// Calls the method referred by from the user defined /// object with parameters . /// /// DTypeDesc of the caller's class context. Can be UnknownTypeDesc. /// The name of the method. /// An instance to invoke the method on or a class name. /// Parameters to invoke the method with. /// The method's return value. [ImplementsFunction("call_user_method_array", FunctionImplOptions.NeedsClassContext)] public static object CallUserMethodArray(DTypeDesc caller, string methodName, object classNameOrObject, PhpArray args) { return CallUserMethodInternal(caller, methodName, classNameOrObject, ((IDictionary)args).Values); } /// /// Returns a of default fields of a class. /// /// The caller of the method to resolve visible properties properly. Can be UnknownTypeDesc. /// The name of the class. /// Whether to list vars in PHP order (child vars then parent vars) or logical (parent vars then child). /// Specifies whether static variables should be listed as well /// Array of 's default fields. /// /// /// The resulting array elements are in the form of varname => value, where value /// is the default value of the field. /// /// /// This method returns fields declared in and all its parent classes. /// /// [ImplementsFunction("get_class_vars", FunctionImplOptions.NeedsClassContext)] [return: PhpDeepCopy] [return: CastToFalse] public static PhpArray GetClassVars(DTypeDesc caller, string className, bool parentsFirst, bool includeStatic) { ScriptContext script_context = ScriptContext.CurrentContext; DTypeDesc type = script_context.ResolveType(className); if (type == null) return null; // determine the calling type //DTypeDesc caller = PhpStackTrace.GetClassContext(); if (caller != null && caller.IsUnknown) caller = PhpStackTrace.GetClassContext(); PhpArray result = new PhpArray(); // add instance properties bool have_instance_props = false; if (!type.IsAbstract) { // the class has to be instantiated in order to discover default instance property values // (the constructor will initialize default properties, user defined constructor will not be called) DObject obj = type.New(script_context) as DObject; if (obj == null) return null; // populate the resulting array taking into account current caller IDictionaryEnumerator enumerator = obj.GetEnumerator(caller); while (enumerator.MoveNext()) { result.Add(enumerator.Key, enumerator.Value); } have_instance_props = true; } // add static fields (static and instance fields if the type is abstract) if (includeStatic) { foreach (KeyValuePair pair in type.EnumerateProperties(caller)) { if (pair.Value.IsStatic) { result.Add(pair.Key.ToString(), pair.Value.Get(null)); } else if (!have_instance_props) { result.Add(pair.Key.ToString(), null); } } } result.InplaceCopyOnReturn = true; return result; } [ImplementsFunction("get_class_vars", FunctionImplOptions.NeedsClassContext)] [return: PhpDeepCopy] [return: CastToFalse] public static PhpArray GetClassVars(DTypeDesc caller, string className) { return GetClassVars(caller, className, false, true); } /// /// Returns a of defined fields for the specified object . /// /// The caller of the method to resolve visible properties properly. Can be UnknownTypeDesc. /// The object whose fields are requested. /// Array of 's fields (name => value pairs). /// /// This method returns default fields (those declared in the class using "var") declared in the /// class and all its parent classes) as well as fields added at runtime. /// [ImplementsFunction("get_object_vars", FunctionImplOptions.NeedsClassContext)] //[return: PhpDeepCopy] public static PhpArray GetObjectVars(DTypeDesc caller, DObject obj) { return GetObjectVars(caller,obj,false); } /// /// Returns a of defined fields for the specified object . /// /// The caller of the method to resolve visible properties properly. Can be UnknownTypeDesc. /// The object whose fields are requested. /// References will be omited from the result /// Array of 's fields (name => value pairs). /// /// This method returns default fields (those declared in the class using "var") declared in the /// class and all its parent classes) as well as fields added at runtime. /// [ImplementsFunction("get_object_vars", FunctionImplOptions.NeedsClassContext)] //[return: PhpDeepCopy] // already deep copied public static PhpArray GetObjectVars(DTypeDesc caller, DObject obj, bool IgnoreReferences) { if (obj == null) return null; Converter copy = null; /////////////////////////////////////// // This is hot fix for a reference counting problem when reference aren't released in same way as in PHP. // Hence, we need to perform deep copy ignoring references if (IgnoreReferences) copy = (value) => { PhpReference refValue = value as PhpReference; if (refValue != null) return copy(refValue.Value); PhpArray array = value as PhpArray; if (array != null) { PhpArray dst = new PhpArray(array.IntegerCount, array.StringCount); foreach (KeyValuePair entry in array) { // checks whether a value is a reference pointing to the instance itself: refValue = entry.Value as PhpReference; if (refValue != null && refValue.Value == array) { // copies the value so that it will self-reference the new instance (not the old one): dst.Add(entry.Key, new PhpReference(dst)); } else { dst.Add(entry.Key, copy(entry.Value)); } } return dst; } return value; }; else copy = (value) => { return PhpVariable.DeepCopy(value); }; // perform InplaceDeepCopy() here to save one more iteration through the array /////////////////////////////////////// PhpArray result = new PhpArray(0, obj.Count); var foreachEnumerator = obj.GetEnumerator((caller != null && caller.IsUnknown) ? PhpStackTrace.GetClassContext() : caller); while (foreachEnumerator.MoveNext()) //foreach (DictionaryEntry pair in obj) { DictionaryEntry pair = (DictionaryEntry)foreachEnumerator.Current; result.Add((string)pair.Key, copy(pair.Value)); } //result.InplaceCopyOnReturn = true; // already deep copied return result; } /// /// Verifies whether the method given by has been defined for the given /// object . /// /// Current class context. /// The object to test. /// The name of the method. /// True if the method given by has been defined for the given /// object , false otherwise. [ImplementsFunction("method_exists", FunctionImplOptions.NeedsClassContext)] public static bool MethodExists(DTypeDesc caller, object obj, string methodName) { if (obj == null || string.IsNullOrEmpty(methodName)) return false; DTypeDesc dtype; DObject dobj; string str; if ((dobj = (obj as DObject)) != null) { dtype = dobj.TypeDesc; if (dtype == null) { Debug.Fail("DObject.TypeDesc should not be null"); return false; } } else if ((str = PhpVariable.AsString(obj)) != null) { ScriptContext script_context = ScriptContext.CurrentContext; dtype = script_context.ResolveType(str, null, caller, null, ResolveTypeFlags.UseAutoload); if (dtype == null) return false; } else { // other type names are not handled return false; } DRoutineDesc method; return (dtype.GetMethod(new Name(methodName), dtype, out method) != GetMemberResult.NotFound); } /// /// Converts a class name or class instance to object. /// /// Current . /// Current . /// The caller of the method to resolve visible properties properly. Can be UnknownTypeDesc. /// The class name or class instance (). /// True iff the __autoload magic function should be used. /// The type desc that corresponds to or null /// if the type could not be found or is neither a string /// nor . internal static DTypeDesc ClassNameOrObjectToType(ScriptContext/*!*/ scriptContext, NamingContext namingContext, DTypeDesc caller, object classNameOrObject, bool useAutoload) { string class_name = PhpVariable.AsString(classNameOrObject); if (class_name != null) { // lookup the Type return scriptContext.ResolveType(class_name, namingContext, caller, null, (useAutoload ? ResolveTypeFlags.UseAutoload : ResolveTypeFlags.None)); } else { DObject obj = classNameOrObject as DObject; if (obj != null) return obj.TypeDesc; } return null; } /// /// Verifies whether the property given by has been defined for the given /// object object or class. /// /// The caller of the method to resolve visible properties properly. Can be UnknownTypeDesc. /// The object () or the name of a class /// (). /// The name of the property. /// True if the property given by has been defined for the /// given class or object and is accessible from current class context. /// /// This function has different semantics than , which ignores visibility. /// If an object is passed in the first parameter, the property is searched among runtime fields as well. /// [ImplementsFunction("property_exists", FunctionImplOptions.NeedsClassContext)] public static bool PropertyExists(DTypeDesc caller, object classNameOrObject, string propertyName) { ScriptContext context = ScriptContext.CurrentContext; DTypeDesc type = ClassNameOrObjectToType(context, null, caller, classNameOrObject, true); if (type == null) return false; // determine the calling class context //DTypeDesc caller = PhpStackTrace.GetClassContext(); if (caller != null && caller.IsUnknown) caller = PhpStackTrace.GetClassContext(); DPropertyDesc property; if (type.GetProperty(new VariableName(propertyName), caller, out property) == GetMemberResult.OK) { // CT property was found return true; } else { // search RT fields, if possible DObject obj = classNameOrObject as DObject; return (obj != null && obj.RuntimeFields != null && obj.RuntimeFields.ContainsKey(propertyName)); } } /// /// Returns all methods defined in the specified class or class of specified object, and its predecessors. /// /// The caller of the method to resolve visible properties properly. Can be UnknownTypeDesc. /// The object () or the name of a class /// (). /// Array of all methods defined in . [ImplementsFunction("get_class_methods", FunctionImplOptions.NeedsClassContext)] public static PhpArray GetClassMethods(DTypeDesc caller, object classNameOrObject) { ScriptContext context = ScriptContext.CurrentContext; DTypeDesc type = ClassNameOrObjectToType(context, null, caller, classNameOrObject, true); if (type == null) return null; // determine the calling type //DTypeDesc caller = PhpStackTrace.GetClassContext(); if (caller != null && caller.IsUnknown) caller = PhpStackTrace.GetClassContext(); PhpArray result = new PhpArray(); foreach (KeyValuePair pair in type.EnumerateMethods(caller)) { result.Add(pair.Key.ToString()); } return result; } /// /// Returns a with names of all defined classes (system and user). /// /// of class names. [ImplementsFunction("get_declared_classes")] public static PhpArray GetDeclaredClasses() { return (PhpArray)ScriptContext.CurrentContext.GetDeclaredClasses(new PhpArray()); } /// /// Returns a with names of all defined interfaces (system and user). /// /// of interface names. [ImplementsFunction("get_declared_interfaces")] public static PhpArray GetDeclaredInterfaces() { return (PhpArray)ScriptContext.CurrentContext.GetDeclaredInterfaces(new PhpArray()); } /// /// Tests whether the class given by is derived from a class given /// by . /// /// The caller of the method to resolve visible properties properly. Can be UnknownTypeDesc. /// The object () or the name of a class /// (). /// The name of the (base) class. /// true if implements or extends , /// false otherwise. [ImplementsFunction("is_subclass_of", FunctionImplOptions.NeedsClassContext)] public static bool IsSubclassOf(DTypeDesc caller, object classNameOrObject, string baseClassName) { ScriptContext context = ScriptContext.CurrentContext; DTypeDesc type = ClassNameOrObjectToType(context, null, caller, classNameOrObject, true); if (type == null) return false; // look for the class, do not use autoload (since PHP 5.1): DTypeDesc base_type = context.ResolveType(baseClassName, null, caller, null, ResolveTypeFlags.None); // do not call autoload [workitem:26664] if (base_type == null) return false; return (base_type.RealType.IsAssignableFrom(type.RealType) && base_type != type); } /// /// Tests whether a given class is defined. /// /// The caller class context to resolve visibility. /// The name of the class. /// true if the class given by has been defined, /// false otherwise. [ImplementsFunction("class_exists", FunctionImplOptions.NeedsClassContext)] [PureFunction(typeof(PhpObjects), "ClassExists_Analyze_1")] public static bool ClassExists(DTypeDesc caller, string className) { return ClassExists(caller, className, true); } /// /// Tests whether a given class is defined. /// /// The caller class context to resolve visibility. /// The name of the class. /// Whether to attempt to call __autoload. /// true if the class given by has been defined, /// false otherwise. [ImplementsFunction("class_exists", FunctionImplOptions.NeedsClassContext)] [PureFunction(typeof(PhpObjects), "ClassExists_Analyze_2")] public static bool ClassExists(DTypeDesc caller, string className, bool autoload) { DTypeDesc type = ScriptContext.CurrentContext.ResolveType(className, null, caller, null, autoload ? ResolveTypeFlags.UseAutoload : ResolveTypeFlags.None); return type != null; } #region analyzer of class_exists public static PHP.Core.Compiler.AST.FunctionCallEvaluateInfo ClassExists_Analyze_2(Analyzer analyzer, string name, bool autoload) { // ignore autoload at the compile time return ClassExists_Analyze_1(analyzer, name); } public static PHP.Core.Compiler.AST.FunctionCallEvaluateInfo ClassExists_Analyze_1(Analyzer analyzer, string name) { QualifiedName? alias; DType type = analyzer.SourceUnit.ResolveTypeName( new QualifiedName(new Name(name)), analyzer.CurrentScope, out alias, null, PHP.Core.Text.Span.Invalid, false); if (type == null || type.IsUnknown) return null; // type is not known at the compilation time. However it can be defined at the runtime (dynamic include, script library, etc). return new PHP.Core.Compiler.AST.FunctionCallEvaluateInfo() { value = true // type is definitely known the the compilation time }; } #endregion /// /// Tests whether a given interface is defined. /// /// The class context of the caller. /// The name of the interface. /// true if the interface given by has been defined, /// false otherwise. [ImplementsFunction("interface_exists", FunctionImplOptions.NeedsClassContext)] public static bool InterfaceExists(DTypeDesc caller, string ifaceName) { return InterfaceExists(caller, ifaceName, true); } /// /// Tests whether a given interface is defined. /// /// The class context of the caller. /// The name of the interface. /// Whether to attempt to call __autoload. /// true if the interface given by has been defined, /// false otherwise. [ImplementsFunction("interface_exists", FunctionImplOptions.NeedsClassContext)] public static bool InterfaceExists(DTypeDesc caller, string ifaceName, bool autoload) { DTypeDesc type = ScriptContext.CurrentContext.ResolveType(ifaceName, null, caller, null, autoload ? ResolveTypeFlags.UseAutoload : ResolveTypeFlags.None); return type != null && type.IsInterface; } /// /// Returns the name of the current class. /// /// Current class context. /// Current class name. [ImplementsFunction("get_class", FunctionImplOptions.NeedsClassContext)] [return: CastToFalse] public static string GetClass(DTypeDesc caller) { if (caller == null || caller.IsUnknown) return null; return caller.MakeFullName(); } /// /// Returns the name of the class of which the object is an instance. /// /// Current class context. /// The object whose class is requested. /// 's class name or current class name if is /// null. [ImplementsFunction("get_class", FunctionImplOptions.NeedsClassContext)] [return: CastToFalse] public static string GetClass(DTypeDesc caller, object var) { if (var == null) return GetClass(caller); DObject obj = var as DObject; return (obj != null) ? obj.TypeName : null; } [ImplementsFunction("get_called_class", FunctionImplOptions.NeedsLateStaticBind)] [return: CastToFalse] public static string GetCalledClass(DTypeDesc caller) { if (caller == null || caller.IsUnknown) return null; return caller.MakeFullName(); } /// /// Gets the name of the class from which class given by /// inherits. /// /// The caller of the method to resolve visible properties properly. Can be UnknownTypeDesc. /// The object () or the name of a class /// (). /// If is an , returns the name /// of the parent class of the class of which is an instance. /// If is a , returns the name of the parent /// class of the class with that name. /// /// If the class given by has no parent in PHP class hierarchy, /// this method returns null. /// [ImplementsFunction("get_parent_class", FunctionImplOptions.NeedsClassContext)] [return: CastToFalse] [PureFunction(typeof(PhpObjects), "GetParentClass_Analyze")] public static string GetParentClass(DTypeDesc caller, object classNameOrObject) { ScriptContext context = ScriptContext.CurrentContext; DTypeDesc type = ClassNameOrObjectToType(context, null, caller, classNameOrObject, true); if (type == null || type.IsInterface) return null; DTypeDesc parent_type = type.Base; return (parent_type == null ? null : parent_type.MakeFullName()); } #region analyzer of get_parent_class [return: CastToFalse] public static PHP.Core.Compiler.AST.FunctionCallEvaluateInfo GetParentClass_Analyze(Analyzer analyzer, string name) { QualifiedName? alias; DType type = analyzer.SourceUnit.ResolveTypeName( new QualifiedName(new Name(name)), analyzer.CurrentScope, out alias, null, PHP.Core.Text.Span.Invalid, false); if (type == null || type.IsUnknown) return null; // type is not known at the compilation time. However it can be defined at the runtime (dynamic include, script library, etc). // type is definitely known the the compilation time var parent_type = type.Base; return new PHP.Core.Compiler.AST.FunctionCallEvaluateInfo() { value = (parent_type == null ? null : parent_type.FullName) }; } #endregion /// /// Tests whether 's class is derived from a class given by . /// /// The caller of the method to resolve visible properties properly. Can be UnknownTypeDesc. /// The object to test. /// The name of the class. /// true if the object belongs to class or /// a class which is a subclass of , false otherwise. [ImplementsFunction("is_a", FunctionImplOptions.NeedsClassContext)] public static bool IsA(DTypeDesc caller, object obj, string className) { if (obj == null || !(obj is DObject)) return false; DObject dobj = (DObject)obj; DTypeDesc type = ScriptContext.CurrentContext.ResolveType(className, null, caller, null, ResolveTypeFlags.None); // do not call autoload [workitem:26664] if (type == null) return false; return type.IsAssignableFrom(dobj.TypeDesc); } /// /// Returns a with keys and values being names of a given class's /// base classes. /// /// The caller of the method to resolve visible properties properly. Can be UnknownTypeDesc. /// The or class name to get base classes of. /// True if the magic __autoload function should be used. /// The with base class names. [ImplementsFunction("class_parents", FunctionImplOptions.NeedsClassContext)] [return: CastToFalse] public static PhpArray GetClassParents(DTypeDesc caller, object classNameOrObject, bool useAutoload) { ScriptContext context = ScriptContext.CurrentContext; DTypeDesc type = ClassNameOrObjectToType(context, null, caller, classNameOrObject, useAutoload); if (type == null || type.IsInterface) return null; PhpArray result = new PhpArray(); while ((type = type.Base) != null) { string class_name = type.MakeFullName(); result.Add(class_name, class_name); } return result; } /// /// Returns a with keys and values being names of a given class's /// base classes. /// /// The caller of the method to resolve visible properties properly. Can be UnknownTypeDesc. /// The or class name to get base classes of. /// The with base class names. [ImplementsFunction("class_parents", FunctionImplOptions.NeedsClassContext)] [return: CastToFalse] public static PhpArray GetClassParents(DTypeDesc caller, object classNameOrObject) { return GetClassParents(caller, classNameOrObject, true); } /// /// Returns a with keys and values being names of interfaces implemented by a given /// class. /// /// The caller of the method to resolve visible properties properly. Can be UnknownTypeDesc. /// The or class name to get implemented interfaces of. /// True if the magic __autoload function should be used. /// /// The with interface names. [ImplementsFunction("class_implements", FunctionImplOptions.NeedsClassContext)] [return: CastToFalse] public static PhpArray GetClassInterfaces(DTypeDesc caller, object classNameOrObject, bool useAutoload) { ScriptContext context = ScriptContext.CurrentContext; DTypeDesc type = ClassNameOrObjectToType(context, null, caller, classNameOrObject, useAutoload); if (type == null) return null; PhpArray result = new PhpArray(); DTypeDesc[] interfaces = type.GetImplementedInterfaces(); for (int i = 0; i < interfaces.Length; i++) { string iface_name = interfaces[i].MakeFullName(); result[iface_name] = iface_name; } return result; } /// /// Returns a with keys and values being names of interfaces implemented by a given /// class. /// /// The caller of the method to resolve visible properties properly. Can be UnknownTypeDesc. /// The or class name to get implemented interfaces of. /// /// The with interface names. [ImplementsFunction("class_implements", FunctionImplOptions.NeedsClassContext)] [return: CastToFalse] public static PhpArray GetClassInterfaces(DTypeDesc caller, object classNameOrObject) { return GetClassInterfaces(caller, classNameOrObject, true); } } } ================================================ FILE: Source/ClassLibrary/Output.CLR.cs ================================================ /* Copyright (c) 2004-2006 Tomas Matousek. The use and distribution terms for this software are contained in the file named License.txt, which can be found in the root of the Phalanger distribution. By using this software in any fashion, you are agreeing to be bound by the terms of this license. You must not remove this notice from this software. */ using System; using System.Web; using PHP.Core; namespace PHP.Library { /// /// PHP output control functions implementation. /// /// [ImplementsExtension(LibraryDescriptor.ExtCore)] public static class Output { [Flags] public enum _ChunkPosition { [ImplementsConstant("PHP_OUTPUT_HANDLER_START")] First = BufferedOutput.ChunkPosition.First, [ImplementsConstant("PHP_OUTPUT_HANDLER_CONT")] Middle = BufferedOutput.ChunkPosition.Middle, [ImplementsConstant("PHP_OUTPUT_HANDLER_END")] Last = BufferedOutput.ChunkPosition.Last } #region fprintf, vprintf /// /// Generates output according to the specified formatting string. /// /// The formatting string. See also the sprintf function (). /// Variables to format. /// Returns the length of the outputted string. [ImplementsFunction("printf")] public static int PrintFormatted(string format, params object[] args) { string formattedString = PhpStrings.FormatInternal(format, args); ScriptContext.CurrentContext.Output.Write(formattedString); return formattedString.Length; } /// /// Generates output according to the specified formatting string. /// /// The formatting string. /// Array of variables to format. /// Returns the length of the outputted string. [ImplementsFunction("vprintf")] public static int PrintFormatted(string format, PhpArray args) { string formattedString = PhpStrings.Format(format, args); ScriptContext.CurrentContext.Output.Write(formattedString); return formattedString.Length; } #endregion #region ob_start /// /// Increases the level of buffering and enables output buffering if disabled. /// /// Always true. [ImplementsFunction("ob_start")] public static bool Start() { return Start(null, 0, true); } /// /// Increases the level of buffering, enables output buffering if disabled and assignes the filtering callback /// to the new level of buffering. /// /// The filtering callback. Ignores invalid callbacks. /// Whether the filter is empty or a valid callback. [ImplementsFunction("ob_start")] public static bool Start(PhpCallback filter) { return Start(filter, 0, true); } /// /// Increases the level of buffering, enables output buffering if disabled and assignes the filtering callback /// to the new level of buffering. /// /// The filtering callback. Ignores invalid callbacks. /// Not supported. /// Whether the filter is empty or a valid callback. [ImplementsFunction("ob_start")] public static bool Start(PhpCallback filter, int chunkSize) { return Start(filter, chunkSize, true); } /// /// Increases the level of buffering, enables output buffering if disabled and assignes the filtering callback /// to the new level of buffering. /// /// The filtering callback. Ignores invalid callbacks. /// Not supported. /// Not supported. /// Whether the filter is valid callback. [ImplementsFunction("ob_start")] public static bool Start(PhpCallback filter, int chunkSize, bool erase) { if (chunkSize != 0) PhpException.ArgumentValueNotSupported("chunkSize", "!= 0"); if (!erase) PhpException.ArgumentValueNotSupported("erase", erase); ScriptContext context = ScriptContext.CurrentContext; context.BufferedOutput.IncreaseLevel(); bool result = true; // skips filter setting if filter is not specified or valid: if (filter != null && (result = filter.Bind())) context.BufferedOutput.SetFilter(filter); context.IsOutputBuffered = true; return result; } #endregion #region ob_clean, ob_end_clean, ob_end_flush /// /// Discards the contents of the current level of buffering. /// No value is returned. /// [ImplementsFunction("ob_clean")] public static void Clean() { ScriptContext.CurrentContext.BufferedOutput.Clean(); } /// /// Discards the contents of the current level of buffering and decreases the level. /// /// Whether the content was discarded and the level was decreased. [ImplementsFunction("ob_end_clean")] public static bool EndAndClean() { return EndInternal(ScriptContext.CurrentContext, false); } /// /// Flushes the contents of the current level of buffering and decreases the level. /// /// Whether the content was discarded and the level was decreased. [ImplementsFunction("ob_end_flush")] public static bool EndAndFlush() { return EndInternal(ScriptContext.CurrentContext, true); } /// /// Decreases the level of buffering and discards or flushes data on the current level of buffering. /// /// Current script context. /// Whether to flush data. /// Whether the content was discarded and the level was decreased. private static bool EndInternal(ScriptContext/*!*/ context, bool flush) { BufferedOutput buf = context.BufferedOutput; if (buf.Level == 0) { PhpException.Throw(PhpError.Notice, CoreResources.GetString("output_buffering_disabled")); return false; } if (buf.DecreaseLevel(flush) < 0) context.IsOutputBuffered = false; return true; } #endregion #region ob_get_clean, ob_get_contents, ob_get_flush, ob_get_level, ob_get_length, ob_get_status /// /// Gets the contents of the current buffer and cleans it. /// /// The content of type or . [ImplementsFunction("ob_get_clean")] [return: CastToFalse] public static object GetAndClean() { ScriptContext context = ScriptContext.CurrentContext; BufferedOutput bo = context.BufferedOutput; object result = bo.GetContent(); bo.Clean(); EndInternal(context, true); return result; } /// /// Gets the content of the current buffer. /// /// The content of type or . [ImplementsFunction("ob_get_contents")] [return: CastToFalse] public static object GetContents() { return ScriptContext.CurrentContext.BufferedOutput.GetContent(); } /// /// Gets the content of the current buffer and decreases the level of buffering. /// /// The content of the buffer. [ImplementsFunction("ob_get_flush")] public static object GetAndFlush() { ScriptContext context = ScriptContext.CurrentContext; BufferedOutput bo = context.BufferedOutput; object result = bo.GetContent(); EndInternal(context, true); return result; } /// /// Retrieves the level of buffering. /// /// The level of buffering. [ImplementsFunction("ob_get_level")] public static int GetLevel() { return ScriptContext.CurrentContext.BufferedOutput.Level; } /// /// Retrieves the length of the output buffer. /// /// The length of the contents in the output buffer or false, if output buffering isn't active. [ImplementsFunction("ob_get_length")] [return: CastToFalse] public static int GetLength() { return ScriptContext.CurrentContext.BufferedOutput.Length; } /// /// Get the status of the current or all output buffers. /// /// The array of name => value pairs containing information. [ImplementsFunction("ob_get_status")] public static PhpArray GetStatus() { return GetStatus(false); } /// /// Get the status of the current or all output buffers. /// /// Whether to retrieve extended information about all levels of buffering or about the current one. /// The array of name => value pairs containing information. [ImplementsFunction("ob_get_status")] public static PhpArray GetStatus(bool full) { BufferedOutput bo = ScriptContext.CurrentContext.BufferedOutput; PhpArray result; if (full) { result = new PhpArray(bo.Level, 0); for (int i = 1; i <= bo.Level; i++) result.Add(i, GetLevelStatus(bo, i)); } else if (bo.Level > 0) { result = GetLevelStatus(bo, bo.Level); result.Add("level", bo.Level); } else result = new PhpArray(0, 0); return result; } private static PhpArray/*!*/ GetLevelStatus(BufferedOutput/*!*/ bo, int index) { PhpArray result = new PhpArray(0, 3); PhpCallback filter; int size; bo.GetLevelInfo(index, out filter, out size); if (filter != null) { result.Add("type", 1); result.Add("name", ((IPhpConvertible)filter).ToString()); } else { result.Add("type", 0); } result.Add("buffer_size", size); return result; } #endregion #region flush, ob_flush /// /// Flush the output buffer of the HTTP server. Has no effect on data buffered in Phalanger output buffers. /// No value is returned. /// [ImplementsFunction("flush")] public static void FlushHttpBuffers() { HttpContext http_context = HttpContext.Current; if (http_context != null) http_context.Response.Flush(); } /// /// Flushes data from the current level of buffering to the previous one or to the client /// if the current one is the first one. Applies the filter assigned to the current level (if any). /// No value is returned. /// [ImplementsFunction("ob_flush")] public static void FlushOutputBuffer() { ScriptContext.CurrentContext.BufferedOutput.Flush(); } #endregion #region ob_implicit_flush /// /// Switches implicit flushing on. /// No value is returned. /// /// Affects the current script context. [ImplementsFunction("ob_implicit_flush")] public static void ImplicitFlush() { HttpContext http_context = HttpContext.Current; if (http_context != null) http_context.Response.BufferOutput = true; } /// /// Switches implicit flushing on or off. /// No value is returned. /// /// Do flush implicitly? /// /// Affects the current script context. /// /// There is a bug in the PHP implementation of this function: /// "Turning implicit flushing on will disable output buffering, the output buffers current output /// will be sent as if ob_end_flush() had been called." /// Actually, this is not true (PHP doesn't do that) and in fact it is nonsense because /// ob_end_flush only flushes and destroys one level of buffering. /// It would be more meaningful if ob_implicit_flush function had flushed and destroyed all existing buffers /// and so disabled output buffering. /// [ImplementsFunction("ob_implicit_flush")] public static void ImplicitFlush(bool doFlush) { HttpContext http_context = HttpContext.Current; if (http_context != null) http_context.Response.BufferOutput = doFlush; } #endregion #region ob_list_handlers [ImplementsFunction("ob_list_handlers")] public static PhpArray GetHandlers() { BufferedOutput bo = ScriptContext.CurrentContext.BufferedOutput; PhpArray result = new PhpArray(bo.Level, 0); for (int i = 0; i < bo.Level; i++) { result.Add(bo.GetLevelName(i)); } return result; } #endregion #region ob_gzhandler ///// ///// Compresses data by gzip compression. Not supported. ///// ///// Data to compress. ///// Compressed data. //[ImplementsFunction("ob_gzhandler")] //public static PhpBytes GzipHandler(string data) //{ // return GzipHandler(data, 4); //} /// /// Available content encodings. /// /// Values correspond to "content-encoding" response header. private enum ContentEncoding { gzip, deflate } /// /// Compresses data by gzip compression. /// /// Data to be compressed. /// Compression mode. /// Compressed data. /// The function does not support subsequent calls to compress more chunks of data subsequentally. [ImplementsFunction("ob_gzhandler")] [return: CastToFalse] public static object GzipHandler(object data, int mode) { // TODO: mode is not passed by Core properly. Therefore it is not possible to make subsequent calls to this handler. // Otherwise headers of ZIP stream will be mishmashed. // check input data if (data == null) return null; // check if we are running web application var httpcontext = HttpContext.Current; System.Collections.Specialized.NameValueCollection headers; if (httpcontext == null || httpcontext.Request == null || (headers = httpcontext.Request.Headers) == null) return data; // check if compression is supported by browser string acceptEncoding = headers["Accept-Encoding"]; if (acceptEncoding != null) { acceptEncoding = acceptEncoding.ToLower(System.Globalization.CultureInfo.InvariantCulture); if (acceptEncoding.Contains("gzip")) return DoGzipHandler(data, httpcontext, ContentEncoding.gzip); if (acceptEncoding.Contains("*") || acceptEncoding.Contains("deflate")) return DoGzipHandler(data, httpcontext, ContentEncoding.deflate); } return data; /* ScriptContext context = ScriptContext.CurrentContext; bool do_start = (((BufferedOutput.ChunkPosition)mode) & BufferedOutput.ChunkPosition.First) != 0; bool do_end = (((BufferedOutput.ChunkPosition)mode) & BufferedOutput.ChunkPosition.Last) != 0; // redirects output to the sink to allow error reporting: context.IsOutputBuffered = false; PhpException.FunctionNotSupported(PhpError.Notice); context.IsOutputBuffered = true; if (data == null) return null; return new PhpBytes(Configuration.Application.Globalization.PageEncoding.GetBytes(data));*/ } /// /// Compress given data using compressor named in contentEncoding. Set the response header accordingly. /// /// PhpBytes or string to be compressed. /// Current HttpContext. /// gzip or deflate /// Byte stream of compressed data. private static PhpBytes DoGzipHandler(object data, HttpContext/*!*/httpcontext, ContentEncoding contentEncoding) { PhpBytes phpbytes = data as PhpBytes; var inputbytes = (phpbytes != null) ? phpbytes.ReadonlyData : Configuration.Application.Globalization.PageEncoding.GetBytes(PHP.Core.Convert.ObjectToString(data)); using (var outputStream = new System.IO.MemoryStream()) { System.IO.Stream compressionStream; switch (contentEncoding) { case ContentEncoding.gzip: compressionStream = new System.IO.Compression.GZipStream(outputStream, System.IO.Compression.CompressionMode.Compress); break; case ContentEncoding.deflate: compressionStream = new System.IO.Compression.DeflateStream(outputStream, System.IO.Compression.CompressionMode.Compress); break; default: throw new ArgumentException("Not recognized content encoding to be compressed to.", "contentEncoding"); } using (compressionStream) { compressionStream.Write(inputbytes, 0, inputbytes.Length); } //Debug.Assert( // ScriptContext.CurrentContext.Headers["content-encoding"] != contentEncoding, // "The content encoding was already set to '" + contentEncoding + "'. The ob_gzhandler() was called subsequently probably."); ScriptContext.CurrentContext.Headers["content-encoding"] = contentEncoding.ToString(); return new PhpBytes(outputStream.ToArray()); } } #endregion } } ================================================ FILE: Source/ClassLibrary/PhpFormatter.CLR.cs ================================================ /* Copyright (c) 2005-2006 Ladislav Prosek. The use and distribution terms for this software are contained in the file named License.txt, which can be found in the root of the Phalanger distribution. By using this software in any fashion, you are agreeing to be bound by the terms of this license. You must not remove this notice from this software. */ using System; using System.IO; using System.Text; using System.Collections.Generic; using System.Globalization; using System.Security; using System.Security.Permissions; using System.Runtime.Serialization; using System.Runtime.Serialization.Formatters; using PHP.Core; using PHP.Core.Reflection; using System.Diagnostics; namespace PHP.Library { /// /// Implements a PHP-compatible formatter (serializer). /// public sealed class PhpFormatter : IFormatter { #region Tokens /// /// Contains definition of (one-character) tokens that constitute PHP serialized data. /// internal class Tokens { internal const char BraceOpen = '{'; internal const char BraceClose = '}'; internal const char Colon = ':'; internal const char Semicolon = ';'; internal const char Quote = '"'; internal const char Null = 'N'; internal const char Boolean = 'b'; internal const char Integer = 'i'; internal const char Double = 'd'; internal const char String = 's'; internal const char Array = 'a'; internal const char Object = 'O'; // instance of a class that does not implement SPL.Serializable internal const char ObjectSer = 'C'; // instance of a class that implements SPL.Serializable internal const char ClrObject = 'T'; // instance of CLR object, serialized using binary formatter internal const char Reference = 'R'; // &-like reference internal const char ObjectRef = 'r'; // same instance reference (PHP5 object semantics) } #endregion /// /// Implements the serialization functionality. Serializes an object, or graph of objects /// with the given root to the provided . /// internal class ObjectWriter : Serializer.ClassContextHolder { #region Fields and Properties private ScriptContext/*!*/ context; /// /// The stream writer to write serialized data to. /// private StreamWriter/*!*/ writer; /// /// Object ID counter used by the r and R tokens. /// private int sequenceNumber; /// /// Maintains a sequence number for every and /// that have already been serialized. /// private Dictionary serializedRefs { get { return _serializedRefs ?? (_serializedRefs = new Dictionary()); } } private Dictionary _serializedRefs; #endregion #region Construction /// /// Creates a new with a given . /// /// The current . /// The writer to write serialized data to. /// DTypeDesc of the caller's class context if it is known or UnknownTypeDesc if it should be determined lazily. internal ObjectWriter(ScriptContext/*!*/ context, StreamWriter/*!*/ writer, DTypeDesc caller) : base(caller) { Debug.Assert(context != null && writer != null); this.context = context; this.writer = writer; } #endregion #region Serialize and Write* /// /// Serializes an object or graph of objects to . /// /// The object (graph) to serialize. /// /// This is just a switch over 's type that delegates the task /// to one of , , , /// , , , /// , and . /// internal void Serialize(object graph) { sequenceNumber++; if (graph == null) WriteNull(); else { switch (Type.GetTypeCode(graph.GetType())) { case TypeCode.Boolean: WriteBoolean((bool)graph); break; case TypeCode.Int32: WriteInteger((int)graph); break; case TypeCode.Int64: WriteInteger((long)graph); break; case TypeCode.Double: WriteDouble((double)graph); break; case TypeCode.String: WriteString((string)graph); break; case TypeCode.Object: { PhpReference reference = graph as PhpReference; if (reference != null) { WriteReference(reference); break; } PhpBytes bytes = graph as PhpBytes; if (bytes != null) { WriteBinaryData(bytes.ReadonlyData); break; } PhpString str = graph as PhpString; if (str != null) { WriteString(str.ToString()); break; } PhpArray array = graph as PhpArray; if (array != null) { WriteArray(array); break; } DObject obj = graph as DObject; if (obj != null) { WriteObject(obj); break; } PhpResource res = graph as PhpResource; if (res != null) { // resources are serialized as 0 WriteInteger(0); break; } goto default; } default: throw new SerializationException(string.Format(Strings.serialization_unsupported_type, graph.GetType().FullName)); } } } /// /// Serializes Null. /// private void WriteNull() { writer.Write(Tokens.Null); writer.Write(Tokens.Semicolon); } /// /// Serializes a bool value. /// /// The value. private void WriteBoolean(bool value) { writer.Write(Tokens.Boolean); writer.Write(Tokens.Colon); writer.Write(value ? '1' : '0'); writer.Write(Tokens.Semicolon); } /// /// Serializes an integer. /// /// The integer. private void WriteInteger(long value) { writer.Write(Tokens.Integer); writer.Write(Tokens.Colon); writer.Write(value); writer.Write(Tokens.Semicolon); } /// /// Serializes a double. /// /// The double. private void WriteDouble(double value) { writer.Write(Tokens.Double); writer.Write(Tokens.Colon); // handle NaN, +Inf, -Inf if (Double.IsNaN(value)) writer.Write("NAN"); else if (Double.IsPositiveInfinity(value)) writer.Write("INF"); else if (Double.IsNegativeInfinity(value)) writer.Write("-INF"); else writer.Write(value.ToString("R", NumberFormatInfo.InvariantInfo)); writer.Write(Tokens.Semicolon); } /// /// Serializes a string. /// /// The string. private void WriteString(string value) { byte[] binaryValue = writer.Encoding.GetBytes(value); writer.Write(Tokens.String); writer.Write(Tokens.Colon); writer.Write(binaryValue.Length); writer.Write(Tokens.Colon); writer.Write(Tokens.Quote); // flush the StreamWriter before accessing its underlying stream writer.Flush(); writer.BaseStream.Write(binaryValue, 0, binaryValue.Length); writer.Write(Tokens.Quote); writer.Write(Tokens.Semicolon); } /// /// Serializes binary data. /// /// The data. private void WriteBinaryData(byte[] value) { writer.Write(Tokens.String); writer.Write(Tokens.Colon); writer.Write(value.Length); writer.Write(Tokens.Colon); writer.Write(Tokens.Quote); // flush the StreamWriter before accessing its underlying stream writer.Flush(); writer.BaseStream.Write(value, 0, value.Length); writer.Write(Tokens.Quote); writer.Write(Tokens.Semicolon); } /// /// Serializes a . /// /// The reference. private void WriteReference(PhpReference value) { sequenceNumber--; if (!value.IsAliased) { Serialize(value.Value); return; } int seq; if (serializedRefs.TryGetValue(value, out seq)) { // this reference has already been serialized -> write out its seq. number writer.Write(Tokens.Reference); writer.Write(Tokens.Colon); writer.Write(seq); writer.Write(Tokens.Semicolon); } else { serializedRefs.Add(value, sequenceNumber + 1); if (value.Value is DObject && serializedRefs.TryGetValue(value.Value, out seq)) { // this reference's value has already been serialized -> write out its seq. number // (this is to handle situations such as array($x, &$x), where $x is an object instance) writer.Write(Tokens.Reference); writer.Write(Tokens.Colon); writer.Write(seq); writer.Write(Tokens.Semicolon); } else Serialize(value.Value); } } /// /// Serializes a . /// /// The array. private void WriteArray(PhpArray value) { serializedRefs[value] = sequenceNumber; writer.Write(Tokens.Array); writer.Write(Tokens.Colon); writer.Write(value.Count); writer.Write(Tokens.Colon); writer.Write(Tokens.BraceOpen); // write out array items in the correct order foreach (KeyValuePair entry in value) { Serialize(entry.Key.Object); // don't assign a seq number to array keys sequenceNumber--; Serialize(entry.Value); } writer.Write(Tokens.BraceClose); } /// /// Serializes a . /// /// The object. /// Avoids redundant serialization of the same object by using . private void WriteObject(DObject value) { int seq; if (serializedRefs.TryGetValue(value, out seq)) { // this object instance has already been serialized -> write out its seq. number writer.Write(Tokens.ObjectRef); writer.Write(Tokens.Colon); writer.Write(seq); writer.Write(Tokens.Semicolon); sequenceNumber--; } else { serializedRefs.Add(value, sequenceNumber); if (value is ClrObject || value is IClrValue) WriteClrObjectInternal(value.RealObject); else WritePhpObjectInternal(value); } } /// /// Serializes using PHP serialization. /// /// The object. private void WritePhpObjectInternal(DObject/*!*/value) { byte[] binaryClassName; // determine class name bool avoid_pic_name = false; string class_name = null; __PHP_Incomplete_Class pic = value as __PHP_Incomplete_Class; if (pic != null) { if (pic.__PHP_Incomplete_Class_Name.IsSet) { avoid_pic_name = true; class_name = pic.__PHP_Incomplete_Class_Name.Value as string; } } if (value is stdClass) class_name = stdClass.ClassName; if (class_name == null) class_name = value.TypeName; // is the instance PHP5.1 Serializable? if (value.RealObject is Library.SPL.Serializable) { context.Stack.AddFrame(); object res = PhpVariable.Dereference(value.InvokeMethod("serialize", null, context)); if (res == null) { // serialize returned NULL -> serialize the instance as NULL WriteNull(); return; } byte[] resdata = null; if (res is PhpString) { res = res.ToString(); } if (res is string) { resdata = writer.Encoding.GetBytes((string)res); } else if (res is PhpBytes) { resdata = ((PhpBytes)res).ReadonlyData; } if (resdata == null) { // serialize did not return NULL nor a string -> throw an exception SPL.Exception.ThrowSplException( _ctx => new SPL.Exception(_ctx, true), context, string.Format(CoreResources.serialize_must_return_null_or_string, value.TypeName), 0, null); } writer.Write(Tokens.ObjectSer); writer.Write(Tokens.Colon); binaryClassName = writer.Encoding.GetBytes(class_name); // write out class name writer.Write(binaryClassName.Length); writer.Write(Tokens.Colon); writer.Write(Tokens.Quote); // flush the StreamWriter before accessing its underlying stream writer.Flush(); writer.BaseStream.Write(binaryClassName, 0, binaryClassName.Length); writer.Write(Tokens.Quote); writer.Write(Tokens.Colon); // write out the result of serialize writer.Write(resdata.Length); writer.Write(Tokens.Colon); writer.Write(Tokens.BraceOpen); // flush the StreamWriter before accessing its underlying stream writer.Flush(); writer.BaseStream.Write(resdata, 0, resdata.Length); writer.Write(Tokens.BraceClose); return; } // try to call the __sleep method bool sleep_called; PhpArray ser_props = value.Sleep(ClassContext, context, out sleep_called); if (sleep_called && ser_props == null) { // __sleep did not return an array -> serialize the instance as NULL WriteNull(); return; } writer.Write(Tokens.Object); writer.Write(Tokens.Colon); // write out class name binaryClassName = writer.Encoding.GetBytes(class_name); // write out class name writer.Write(binaryClassName.Length); writer.Write(Tokens.Colon); writer.Write(Tokens.Quote); // flush the StreamWriter before accessing its underlying stream writer.Flush(); writer.BaseStream.Write(binaryClassName, 0, binaryClassName.Length); writer.Write(Tokens.Quote); writer.Write(Tokens.Colon); // write out property count if (ser_props != null) writer.Write(ser_props.Count); else writer.Write(value.Count - (avoid_pic_name ? 1 : 0)); writer.Write(Tokens.Colon); writer.Write(Tokens.BraceOpen); // write out properties if (ser_props != null) WriteSleepResult(value, ser_props); else WriteAllProperties(value, avoid_pic_name); writer.Write(Tokens.BraceClose); } /// /// Serializes an object using .NET binary formatter. /// /// The object. private void WriteClrObjectInternal(object realObject) { writer.Write(Tokens.ClrObject); writer.Write(Tokens.Colon); writer.Write(Tokens.BraceOpen); // flush the StreamWriter before accessing its underlying stream writer.Flush(); // serialize CLR object var formatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter(); formatter.Serialize(writer.BaseStream, realObject); // writer.Write(Tokens.BraceClose); } /// /// Serializes properties whose names have been returned by __sleep. /// /// The instance containing the properties to serialize. /// The array containing names of the properties to serialize. private void WriteSleepResult(DObject value, PhpArray propertiesToSerialize) { // serialize the properties whose names have been returned by __sleep foreach (KeyValuePair pair in Serialization.EnumerateSerializableProperties( value, propertiesToSerialize, context)) { // write out the property name and the property value Serialize(pair.Key); sequenceNumber--; // don't assign a seq number to property names Serialize(pair.Value); } } /// /// Serializes all properties of a given instance. /// /// The instance containing the properties to serialize. /// If true, the property named __PHP_Incomplete_Class_Name /// should not be serialized. private void WriteAllProperties(DObject value, bool avoidPicName) { // if have no sleep result, serialize all instance properties foreach (KeyValuePair pair in Serialization.EnumerateSerializableProperties(value)) { if (avoidPicName && pair.Key == __PHP_Incomplete_Class.ClassNameFieldName) { // skip the __PHP_Incomplete_Class_Name field continue; } // write out the property name and the property value Serialize(pair.Key); sequenceNumber--; // don't assign a seq number to property names Serialize(pair.Value); } } #endregion } /// /// Implements the deserialization functionality. Deserializes the data on the provided /// and reconstitutes the graph of objects. /// internal class ObjectReader : Serializer.ClassContextHolder { #region BackReference /// /// Intermediate representation of a r or R record in serialized stream. /// private class BackReference { /// /// The index referenced by this back-reference record. /// private int index; /// /// If true, this is a proper & reference (R), if false, /// this is an object instance reference (r) following the PHP 5 reference /// semantics in objects. /// private bool isProper; /// /// Creates a new with a given index. /// /// The index of the record being referred to. /// Indicates whether this is a & reference, or /// just object identity (valid only for objects - class instances). internal BackReference(int index, bool isProper) { this.index = index; this.isProper = isProper; } /// /// Returns the index that is being referred to. /// internal int Index { get { return index; } } /// /// Returns true is this a & reference. See . /// internal bool IsProper { get { return isProper; } } } #endregion #region Fields and Properties private readonly ScriptContext/*!*/ context; /// /// The stream to read serialized data from. /// private readonly Stream/*!*/ stream; /// /// Encoding to be used for conversion from binary to unicode strings. /// private readonly Encoding/*!*/ encoding; /// /// List of objects deserialized from the reader. /// /// /// In its first phase, the deserializer reads the input stream token by token and stores the /// deserialized items to this . If a proper back-reference (&) /// is encountered, the referenced item is converted to and a /// instance is stored to . End of array item and /// object property lists are delimited by the singleton. In the second phase, /// after the whole stream has been read, the object graph is built from this list (see /// ). /// private List atoms; /// /// Maps sequence numbers used in the serialized stream to indices in the /// list. /// /// /// This is built simultaneously with during the /// first "parsing" phase. /// private List sequenceMap; /// /// The lookahead symbol of the parser input (i.e. the ). /// private char lookAhead; /// /// Tells whether Consume methods are in Unicode reading mode. Legacy only, will be removed. /// private bool unicodeMode; /// /// Used for switching back from Unicode mode. Legacy only, will be removed. /// private long lastUnicodeCharacterPos; /// /// Used by Unicode consume to buffer bytes and read characters, if possible. /// private byte[] miniByteBuffer; /// /// Used by Unicode consume to buffer chars. /// private char[] miniCharBuffer; /// /// Used by Unicode consume to decode characters; /// private Decoder decoder; /// /// If true, there are no more characters in the input stream. /// private bool endOfStream; /// /// If true, the next item being added to the list should not be /// assigned a sequence number. /// private bool skipSequenceNumber; /// /// Marks ends of array items and ends of object properties in the list. /// private static object delimiter = new object(); /// /// Current position in the list during object graph building. /// private int atomCounter; /// /// Temporarily used . Remember it to save GC. /// This method always returns the same instance of , it will always reset its to 0. /// private StringBuilder/*!*/GetTemporaryStringBuilder(int initialCapacity) { var tmp = tmpStringBuilder; if (tmp != null) { tmp.Length = 0; } else { tmpStringBuilder = tmp = new StringBuilder(initialCapacity, int.MaxValue); } return tmp; } private StringBuilder tmpStringBuilder; #endregion #region Construction /// /// Creates a new with a given . /// /// The current . /// The stream to read serialized data from. /// Encoding used to read serialized strings. /// DTypeDesc of the caller's class context if it is known or UnknownTypeDesc if it should be determined lazily. internal ObjectReader(ScriptContext/*!*/ context, Stream/*!*/ stream, Encoding/*!*/ encoding, DTypeDesc caller) :base(caller) { Debug.Assert(context != null && stream != null); this.context = context; this.stream = stream; this.encoding = encoding; this.atoms = new List(); this.sequenceMap = new List(); this.miniByteBuffer = new byte[1]; this.miniCharBuffer = new char[1]; this.decoder = encoding.GetDecoder(); // read look ahead character Consume(); } #endregion #region Parser helpers: Throw*, Consume, AddAtom /// /// Throws a due to an unexpected character. /// private void ThrowUnexpected() { throw new SerializationException(LibResources.GetString("unexpected_character_in_stream")); } /// /// Throws a due to an unexpected end of stream. /// private void ThrowEndOfStream() { throw new SerializationException(LibResources.GetString("unexpected_end_of_stream")); } /// /// Throws a due to an data type. /// private void ThrowInvalidDataType() { throw new SerializationException(LibResources.GetString("invalid_data_bad_type")); } /// /// Throws a due to an invalid length marker. /// private void ThrowInvalidLength() { throw new SerializationException(LibResources.GetString("invalid_data_bad_length")); } /// /// Throws a due to an invalid back-reference. /// private void ThrowInvalidReference() { throw new SerializationException(LibResources.GetString("invalid_data_bad_back_reference")); } /// /// Consumes the look ahead character and moves to the next character in the input stream. /// /// The old (consumed) look ahead character. /// The consumed value is 8-bit, always in range 0x00 - 0xff. private char Consume() { if (unicodeMode) { unicodeMode = false; endOfStream = false; stream.Seek(lastUnicodeCharacterPos, SeekOrigin.Begin); Consume(); // update lookahead } if (endOfStream) ThrowEndOfStream(); char ret = lookAhead; int next = stream.ReadByte(); if (next == -1) { endOfStream = true; lookAhead = (char)0; } else lookAhead = (char)next; return ret; } /// /// Consumes Unicode character based on encoding. /// /// private char ConsumeLegacy() { if (!unicodeMode && !endOfStream) { unicodeMode = true; stream.Seek(stream.Position - 1, SeekOrigin.Begin); ConsumeLegacy(); } if (endOfStream) ThrowEndOfStream(); lastUnicodeCharacterPos = stream.Position; char ret = lookAhead; while (true) { bool completed; int bytesUsed; int charsUsed; int next = stream.ReadByte(); if (next == -1) { endOfStream = true; lookAhead = (char)0; return ret; } miniByteBuffer[0] = unchecked((byte)next); decoder.Convert(miniByteBuffer, 0, 1, miniCharBuffer, 0, 1, false, out bytesUsed, out charsUsed, out completed); if (charsUsed == 1) break; } lookAhead = miniCharBuffer[0]; return ret; } /// /// Consumes a given look ahead character and moves to the next character in the input stream. /// /// The character that should be consumed. /// If does not match current look ahead character, /// is called. private void Consume(char ch) { if (unicodeMode) { unicodeMode = false; endOfStream = false; stream.Seek(lastUnicodeCharacterPos, SeekOrigin.Begin); Consume(); // update lookahead } if (endOfStream) ThrowEndOfStream(); if (lookAhead != ch) ThrowUnexpected(); int next = stream.ReadByte(); if (next == -1) { endOfStream = true; lookAhead = (char)0; } else lookAhead = (char)next; } /// /// Tries to consume a given look ahead character and, if successful, moves to the next character in the input stream. /// /// The character that should be consumed. /// If does not match current look ahead character, /// is called. /// True if a character was successfully consumed, otherwise false. private bool TryConsume(char ch) { if (unicodeMode) { unicodeMode = false; endOfStream = false; stream.Seek(lastUnicodeCharacterPos, SeekOrigin.Begin); Consume(); // update lookahead } if (endOfStream) return false; if (lookAhead != ch) return false; int next = stream.ReadByte(); if (next == -1) { endOfStream = true; lookAhead = (char)0; } else lookAhead = (char)next; return true; } private void Seek(long position) { stream.Seek(position, SeekOrigin.Begin); if (unicodeMode) ConsumeLegacy(); else Consume(); } /// /// Adds an item to the list and optionally assigns a sequence number to it. /// /// The item to add. private void AddAtom(object obj) { if (!skipSequenceNumber) sequenceMap.Add(atoms.Count); else skipSequenceNumber = false; atoms.Add(obj); } #endregion #region Utils /// /// Quickly check if the look ahead byte is digit. Assumes the value is in range 0x00 - 0xff. /// /// The lookAhead byte value. /// True if value is in range '0'-'9'. private static bool IsDigit(char lookAhead) { return Digit(lookAhead) != -1; } /// /// Quickly determine the numeric value of given lookAhead byte. /// /// The lookAhead byte value. /// private static int Digit(char lookAhead) { int num = unchecked((int)lookAhead - (int)'0'); return (num >= 0 && num <= 9) ? num : -1; } #endregion #region Parser /// /// The top-level parser method. /// /// Just a switch over the look ahead characters that delegates the work to one of /// , , , , /// , , , , /// . private void Parse() { switch (Consume()) { case Tokens.Null: ParseNull(); break; case Tokens.Boolean: ParseBoolean(); break; case Tokens.Integer: ParseInteger(); break; case Tokens.Double: ParseDouble(); break; case Tokens.String: ParseString(); break; case Tokens.Array: ParseArray(); break; case Tokens.Object: ParseObject(false); break; case Tokens.ObjectSer: ParseObject(true); break; case Tokens.ClrObject: ParseClrObject(); break; case Tokens.Reference: ParseReference(); break; case Tokens.ObjectRef: ParseObjectRef(); break; default: ThrowUnexpected(); break; } } /// /// Reads a signed 64-bit integer number from the . /// /// The integer. private long ReadInteger() { // pattern: // [+-]?[0-9]+ long number = 0; bool minus = (lookAhead == '-'); if (minus || (lookAhead == '+')) Consume(); int digit; // == Digit(lookAhead) if ((digit = Digit(lookAhead)) == -1) ThrowUnexpected(); do { // let it overflow just as PHP does number = unchecked((10 * number) + digit); Consume(); } while ((digit = Digit(lookAhead)) != -1); return (minus ? unchecked(-number) : number); } /// /// Reads a double-precision floating point number from the . /// /// The double. private double ReadDouble() { // pattern: // NAN // [+-]INF // [+-]?[0-9]*[.]?[0-9]*([eE][+-]?[0-9]+)? // NaN if (lookAhead == 'N') { Consume(); Consume('A'); Consume('N'); return Double.NaN; } // mantissa + / - int sign = 1; if (lookAhead == '+') Consume(); else if (lookAhead == '-') { sign = -1; Consume(); } // Infinity if (lookAhead == 'I') { Consume(); Consume('N'); Consume('F'); return (sign > 0 ? Double.PositiveInfinity : Double.NegativeInfinity); } // reconstruct the number: StringBuilder number = GetTemporaryStringBuilder(16); if (sign < 0) number.Append('-'); // [^;]* while (Tokens.Semicolon != lookAhead) { number.Append(lookAhead); Consume(); } double result; if (!Double.TryParse(number.ToString(), NumberStyles.AllowDecimalPoint | NumberStyles.AllowExponent | NumberStyles.AllowLeadingSign, NumberFormatInfo.InvariantInfo, out result)) ThrowUnexpected(); return result; } /// /// Reads a string with a given length surrounded by quotes from the . /// /// The expected length of the string. /// Byte array or null if string appears to be unicode (old functionality of serialize). private byte[]/*!*/ReadString(int length) { //ASCII character - we can expect if will be always there (UTF16 is not supported). Consume(Tokens.Quote); if (endOfStream) ThrowEndOfStream(); if (length > 0) { byte[] buffer = new byte[length]; // use current lookahead buffer[0] = unchecked((byte)lookAhead); // read the rest from stream int rlen = stream.Read(buffer, 1, length - 1); // unicode string would be longer or of same length, so it is safe to fail if end of stream was reached if (rlen != length - 1) ThrowEndOfStream(); // this just updates lookahead, and returns the lastahead which we already used Consume(); // try to consume bool success = TryConsume(Tokens.Quote); if (success) return buffer; else { return null; } } else { return ArrayUtils.EmptyBytes; } } /// /// Reads a string with a given length surrounded by quotes from the . /// /// The expected length of the string. /// The string or null. private string ReadStringUnicode(int length) { var bytes = ReadString(length); if (bytes == null) return null; return encoding.GetString(bytes); } /// /// LEGACY functionality, will be removed in future. /// /// /// private string ReadStringLegacy(int length) { var sb = GetTemporaryStringBuilder(length); Consume(Tokens.Quote); while (length-- > 0) sb.Append(ConsumeLegacy()); Consume(Tokens.Quote); return sb.ToString(); } /// /// Parses the N token. /// private void ParseNull() { Consume(Tokens.Semicolon); AddAtom(null); } /// /// Parses the b token. /// private void ParseBoolean() { Consume(Tokens.Colon); switch (Consume()) { case '0': AddAtom(false); break; case '1': AddAtom(true); break; default: ThrowUnexpected(); break; } Consume(Tokens.Semicolon); } /// /// Parses the i token. /// private void ParseInteger() { Consume(Tokens.Colon); long i = ReadInteger(); if (i >= Int32.MinValue && i <= Int32.MaxValue) AddAtom((int)i); else AddAtom(i); Consume(Tokens.Semicolon); } /// /// Parses the d token. /// private void ParseDouble() { Consume(Tokens.Colon); AddAtom(ReadDouble()); Consume(Tokens.Semicolon); } /// /// Parses the s token. /// private void ParseString() { Consume(Tokens.Colon); int length = (unchecked((int)ReadInteger())); if (length < 0) ThrowInvalidLength(); long position = stream.Position; Consume(Tokens.Colon); var str = ReadString(length); if (str != null && TryConsume(Tokens.Semicolon)) { AddAtom(new PhpBytes(str)); } else { Seek(position); AddAtom(ReadStringLegacy(length)); Consume(Tokens.Semicolon); } } /// /// Parses the a token. /// private void ParseArray() { Consume(Tokens.Colon); int length = (unchecked((int)ReadInteger())); if (length < 0) ThrowInvalidLength(); Consume(Tokens.Colon); AddAtom(new PhpArray(length / 2, length / 2)); Consume(Tokens.BraceOpen); while (length-- > 0) { skipSequenceNumber = true; Parse(); // J: do not encode byte[] to string //if (atoms[atoms.Count - 1] is PhpBytes) //{ // atoms[atoms.Count - 1] = encoding.GetString(((PhpBytes)atoms[atoms.Count - 1]).ReadonlyData); //} Parse(); } atoms.Add(delimiter); Consume(Tokens.BraceClose); } /// /// Parses the O and C tokens. /// /// If true, the last token eaten was C, otherwise O. private void ParseObject(bool serializable) { Consume(Tokens.Colon); int length = (unchecked((int)ReadInteger())); if (length < 0) ThrowInvalidLength(); long position = stream.Position; Consume(Tokens.Colon); string class_name = ReadStringUnicode(length); if (class_name == null) { Seek(position); class_name = ReadStringLegacy(length); } Consume(Tokens.Colon); length = (unchecked((int)ReadInteger())); if (length < 0) ThrowInvalidLength(); Consume(Tokens.Colon); // bind to the specified class DObject obj = Serialization.GetUninitializedInstance(class_name, context); if (obj == null) { throw new SerializationException(LibResources.GetString("class_instantiation_failed", class_name)); } // check whether the instance is PHP5.1 Serializable if (serializable && !(obj.RealObject is Library.SPL.Serializable)) { throw new SerializationException(LibResources.GetString("class_has_no_unserializer", class_name)); } AddAtom(obj); atoms.Add(serializable); Consume(Tokens.BraceOpen); if (serializable) { if (length > 0) { // add serialized representation to be later passed to unserialize if (endOfStream) ThrowEndOfStream(); byte[] buffer = new byte[length]; // use current lookahead buffer[0] = unchecked((byte)lookAhead); // read the rest from stream int rlen = stream.Read(buffer, 1, length - 1); if (rlen != length - 1) ThrowEndOfStream(); // this just updates lookahead, and returns the lastahead which we already used Consume(); atoms.Add(new PhpBytes(buffer)); } else { atoms.Add(PhpBytes.Empty); } } else { // parse properties while (length-- > 0) { skipSequenceNumber = true; // parse property name Parse(); // verify that the name is either string or int object name = atoms[atoms.Count - 1]; if (name is PhpBytes) // property name needs to be string name = atoms[atoms.Count - 1] = encoding.GetString(((PhpBytes)name).ReadonlyData); if (!(name is string)) { if (!(name is int)) ThrowInvalidDataType(); atoms[atoms.Count - 1] = name.ToString(); } // parse property value Parse(); } atoms.Add(delimiter); } Consume(Tokens.BraceClose); } /// /// Parses the T token. /// /// Expects CLR object formatted using . private void ParseClrObject() { // T,{DATA} Consume(Tokens.Colon); if (lookAhead != Tokens.BraceOpen) ThrowUnexpected(); var formatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter(); var obj = formatter.Deserialize(stream); AddAtom(ClrObject.WrapDynamic(obj)); atoms.Add(false); // !serializable atoms.Add(delimiter); // end // restore lookAhead state: int next = stream.ReadByte(); if (next == -1) { endOfStream = true; lookAhead = (char)0; } else lookAhead = (char)next; Consume(Tokens.BraceClose); } /// /// Parses the R token. /// private void ParseReference() { Consume(Tokens.Colon); int seq_number = (unchecked((int)ReadInteger())) - 1; Consume(Tokens.Semicolon); if (seq_number < 0 || seq_number >= sequenceMap.Count) ThrowInvalidReference(); int index = sequenceMap[seq_number]; // make the referenced atom a PhpReference PhpReference reference = atoms[index] as PhpReference; if (reference == null) { reference = new PhpReference(atoms[index]); atoms[index] = reference; } atoms.Add(new BackReference(index, true)); } /// /// Parses the r token. /// private void ParseObjectRef() { Consume(Tokens.Colon); int seq_number = (unchecked((int)ReadInteger())) - 1; Consume(Tokens.Semicolon); if (seq_number < 0 || seq_number >= sequenceMap.Count) ThrowInvalidReference(); int index = sequenceMap[seq_number]; atoms.Add(new BackReference(index, false)); } #endregion #region BuildObjectGraph, Deserialize /// /// Builds the object graph from . /// /// private object BuildObjectGraph() { object atom = atoms[atomCounter++]; if (atom != null /*&& Type.GetTypeCode(atom.GetType()) == TypeCode.Object*//* note (Jakub): useless check, in result much slower than a few .isinst */) { // back reference (either r or R) BackReference back_ref = atom as BackReference; if (back_ref != null) { PhpReference reference; object ref_val = atoms[back_ref.Index]; if (back_ref.IsProper) return ref_val; // object references should reference objects only reference = ref_val as PhpReference; if ((reference != null && !(reference.Value is DObject)) && !(ref_val is DObject)) ThrowInvalidReference(); return ref_val; } // dereference an eventual reference object value = PhpVariable.Dereference(atom); // array PhpArray array = value as PhpArray; if (array != null) { while (atoms[atomCounter] != delimiter) { object arraykey = BuildObjectGraph(); object arrayvalue = BuildObjectGraph(); if (arraykey is PhpBytes)// IntStringKey does not allow PhpBytes yet arraykey = encoding.GetString(((PhpBytes)arraykey).ReadonlyData); array.Add(arraykey, arrayvalue); } atomCounter++; // for the delimiter return atom; } // object DObject obj = value as DObject; if (obj != null) { BuildDObject(obj); return atom; } } // no special treatment for the rest of the types return atom; } /// /// Builds a from atoms (the object itself given as parameter). /// /// The instance. private void BuildDObject(DObject obj) { bool serializable = ((bool)atoms[atomCounter++] == true); if (serializable && obj.RealObject is Library.SPL.Serializable) { // pass the serialized data to unserialize context.Stack.AddFrame(BuildObjectGraph()); obj.InvokeMethod("unserialize", null, context); return; } while (atoms[atomCounter] != delimiter) { string property_name = (string)BuildObjectGraph(); object property_value = BuildObjectGraph(); Debug.Assert(property_name != null); Serialization.SetProperty(obj, property_name, property_value, context); } atomCounter++; // for the delimiter // invoke __wakeup on the deserialized instance obj.Wakeup(ClassContext, context); } /// /// Deserializes the data from the and reconstitutes the graph of objects. /// /// The top object of the deserialized graph. internal object Deserialize() { // parsing phase Parse(); // object building phase atomCounter = 0; return BuildObjectGraph(); } #endregion } #region Fields and properties /// /// Serialization security permission demanded in . /// private static SecurityPermission serializationPermission = new SecurityPermission(SecurityPermissionFlag.SerializationFormatter); /// /// The encoding to be used when writing and reading the serialization stream. /// private readonly Encoding encoding; /// /// DTypeDesc of the caller class context known already or UnknownTypeDesc if class context should be determined lazily. /// private readonly DTypeDesc caller; /// /// Gets or sets the serialization binder that performs type lookups during deserialization. /// public SerializationBinder Binder { get { return null; } set { throw new NotSupportedException(LibResources.GetString("serialization_binder_unsupported")); } } /// /// Gets or sets the streaming context used for serialization and deserialization. /// public StreamingContext Context { get { return new StreamingContext(StreamingContextStates.Persistence); } set { throw new NotSupportedException(LibResources.GetString("streaming_context_unsupported")); } } /// /// Gets or sets the surrogate selector used by the current formatter. /// public ISurrogateSelector SurrogateSelector { get { return null; } set { throw new NotSupportedException(LibResources.GetString("surrogate_selector_unsupported")); } } #endregion #region Construction ///// ///// Creates a new with and ///// default . ///// //public PhpFormatter() //{ // this.encoding = new ASCIIEncoding(); //} /// /// Creates a new with a given and /// default . /// /// The encoding to be used when writing and reading the serialization stream. /// DTypeDesc of the caller's class context if it is known or UnknownTypeDesc if it should be determined lazily. public PhpFormatter(Encoding encoding, DTypeDesc caller) { this.caller = caller; // no UTF8 BOM! if (encoding is UTF8Encoding) this.encoding = new UTF8Encoding(false); else this.encoding = (encoding ?? new ASCIIEncoding()); } #endregion #region Serialize and Deserialize /// /// Serializes an object, or graph of objects with the given root to the provided stream. /// /// The stream where the formatter puts the serialized data. /// The object, or root of the object graph, to serialize. public void Serialize(Stream serializationStream, object graph) { if (serializationStream == null) { throw new ArgumentNullException("serializationStream"); } serializationPermission.Demand(); StreamWriter stream_writer = new StreamWriter(serializationStream, encoding); ObjectWriter object_writer = new ObjectWriter(ScriptContext.CurrentContext, stream_writer, caller); try { object_writer.Serialize(graph); } finally { stream_writer.Flush(); } } /// /// Deserializes the data on the provided stream and reconstitutes the graph of objects. /// /// The stream containing the data to deserialize. /// The top object of the deserialized graph. public object Deserialize(Stream serializationStream) { if (serializationStream == null) { throw new ArgumentNullException("serializationStream"); } serializationPermission.Demand(); ScriptContext context = ScriptContext.CurrentContext; ObjectReader object_reader = new ObjectReader(context, serializationStream, encoding, caller); return object_reader.Deserialize(); } #endregion } } ================================================ FILE: Source/ClassLibrary/PhpHttpUtility.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace PHP.Library { /// /// This class implements alternative for HttpUtility.UrlEncode function which results have /// hexadecimal values with small letters. However PHP returns big letters. This can lead /// to incompatibility. e.g. %3a vs %3A /// internal static class PhpHttpUtility { public static byte[] UrlEncode(byte[] bytes) { if (bytes == null) { return null; } return UrlEncode(bytes, 0, bytes.Length); } public static string UrlEncode(string str, Encoding e) { if (str == null) { return null; } byte[] bytes = e.GetBytes(str); bytes = UrlEncode(bytes, 0, bytes.Length); return Encoding.ASCII.GetString(bytes); } private static byte[] UrlEncode(byte[] bytes, int offset, int count) { if (!ValidateUrlEncodingParameters(bytes, offset, count)) { return null; } int num = 0; int num2 = 0; for (int i = 0; i < count; i++) { char ch = (char)bytes[offset + i]; if (ch == ' ') { num++; } else if (!IsUrlSafeChar(ch)) { num2++; } } if ((num == 0) && (num2 == 0)) { return bytes; } byte[] buffer = new byte[count + (num2 * 2)]; int num4 = 0; for (int j = 0; j < count; j++) { byte num6 = bytes[offset + j]; char ch2 = (char)num6; if (IsUrlSafeChar(ch2)) { buffer[num4++] = num6; } else if (ch2 == ' ') { buffer[num4++] = 0x2b; } else { buffer[num4++] = 0x25; buffer[num4++] = (byte)IntToHex((num6 >> 4) & 15); buffer[num4++] = (byte)IntToHex(num6 & 15); } } return buffer; } private static bool ValidateUrlEncodingParameters(byte[] bytes, int offset, int count) { if ((bytes == null) && (count == 0)) { return false; } if (bytes == null) { throw new ArgumentNullException("bytes"); } if ((offset < 0) || (offset > bytes.Length)) { throw new ArgumentOutOfRangeException("offset"); } if ((count < 0) || ((offset + count) > bytes.Length)) { throw new ArgumentOutOfRangeException("count"); } return true; } public static bool IsUrlSafeChar(char ch) { if ((((ch >= 'a') && (ch <= 'z')) || ((ch >= 'A') && (ch <= 'Z'))) || ((ch >= '0') && (ch <= '9'))) { return true; } switch (ch) { case '(': case ')': case '*': case '-': case '.': case '_': case '!': return true; } return false; } public static char IntToHex(int n) { if (n <= 9) { return (char)(n + 0x30); } return (char)((n - 10) + 0x41); } } } ================================================ FILE: Source/ClassLibrary/PhpIni.CLR.cs ================================================ /* Copyright (c) 2004-2006 Tomas Matousek. The use and distribution terms for this software are contained in the file named License.txt, which can be found in the root of the Phalanger distribution. By using this software in any fashion, you are agreeing to be bound by the terms of this license. You must not remove this notice from this software. */ using System; using System.IO; using System.Web; using System.Xml; using System.Threading; using System.Collections; using System.ComponentModel; using PHP; using PHP.Core; using Convert = PHP.Core.Convert; using System.Web.Configuration; using System.Diagnostics; namespace PHP.Library { #region Enumerations /// /// Assertion options. /// public enum AssertOption { /// /// Whether assertions are evaluated. /// [ImplementsConstant("ASSERT_ACTIVE")] Active, /// /// Whether an error is reported if assertion fails. /// [ImplementsConstant("ASSERT_WARNING")] ReportWarning, /// /// Whether script execution is terminated if assertion fails. /// [ImplementsConstant("ASSERT_BAIL")] Terminate, /// /// Whether to disable error reporting during assertion evaluation. /// [ImplementsConstant("ASSERT_QUIET_EVAL")] Quiet, /// /// The user callback to be called if assertion fails. /// Can be a null reference which means no function is called. /// [ImplementsConstant("ASSERT_CALLBACK")] Callback } #endregion /// /// Class manipulating PHP configuration. /// The class is provided only for backward compatibility with PHP and /// is intended to be used only by a compiler of PHP language. /// /// public static class PhpIni { #region Default values for Core options having no equivalent in configuration record /// /// Default value for "default_mimetype" PHP configuration option. /// public const string DefaultMimetype = "text/html"; /// /// Default value for "default_charset" PHP configuration option. /// public static readonly string DefaultCharset = Configuration.Application.Globalization.PageEncoding.HeaderName; /// /// A value of "error_log" option meaning System log. /// public const string ErrorLogSysLog = "syslog"; #endregion #region Core Options internal static object GetSetRestoreCoreOption(LocalConfiguration local, string option, object value, IniAction action) { LocalConfiguration @default = Configuration.DefaultLocal; GlobalConfiguration global = Configuration.Global; ApplicationConfiguration app = Configuration.Application; switch (option) { #region case "extension_dir": Debug.Assert(action == IniAction.Get); return app.Paths.Libraries; #endregion #region case "short_open_tag": Debug.Assert(action == IniAction.Get); return app.Compiler.ShortOpenTags; case "asp_tags": Debug.Assert(action == IniAction.Get); return app.Compiler.AspTags; #endregion #region case "html_errors": return GSR(ref local.ErrorControl.HtmlMessages, @default.ErrorControl.HtmlMessages, value, action); case "display_errors": return GSR(ref local.ErrorControl.DisplayErrors, @default.ErrorControl.DisplayErrors, value, action); case "error_append_string": return GSR(ref local.ErrorControl.ErrorAppendString, @default.ErrorControl.ErrorAppendString, value, action); case "error_prepend_string": return GSR(ref local.ErrorControl.ErrorPrependString, @default.ErrorControl.ErrorPrependString, value, action); case "log_errors": return GSR(ref local.ErrorControl.EnableLogging, @default.ErrorControl.EnableLogging, value, action); case "error_log": return GsrErrorLog(local, @default, value, action); case "error_reporting": switch (action) { case IniAction.Get: return ErrorReporting(); case IniAction.Set: return ErrorReporting(Convert.ObjectToInteger(value)); case IniAction.Restore: return ErrorReporting((int)@default.ErrorControl.ReportErrors); } break; #endregion #region case "implicit_flush": Debug.Assert(action == IniAction.Get); return @default.OutputControl.ImplicitFlush; case "output_handler": Debug.Assert(action == IniAction.Get); IPhpConvertible handler = @default.OutputControl.OutputHandler; return (handler != null) ? handler.ToString() : null; case "output_buffering": Debug.Assert(action == IniAction.Get); return @default.OutputControl.OutputBuffering; #endregion #region case "max_execution_time": { object result = GSR(ref local.RequestControl.ExecutionTimeout, @default.RequestControl.ExecutionTimeout, value, action); // applies the timeout: if (action != IniAction.Get) ScriptContext.CurrentContext.ApplyExecutionTimeout(local.RequestControl.ExecutionTimeout); return result; } case "ignore_user_abort": { object result = GSR(ref local.RequestControl.IgnoreUserAbort, @default.RequestControl.IgnoreUserAbort, value, action); // enables/disables disconnection tracking: if (action != IniAction.Get) RequestContext.CurrentContext.TrackClientDisconnection = !local.RequestControl.IgnoreUserAbort; return result; } #endregion #region case "allow_url_fopen": return GSR(ref local.FileSystem.AllowUrlFopen, @default.FileSystem.AllowUrlFopen, value, action); case "user_agent": return GSR(ref local.FileSystem.UserAgent, @default.FileSystem.UserAgent, value, action); case "from": return GSR(ref local.FileSystem.AnonymousFtpPassword, @default.FileSystem.AnonymousFtpPassword, value, action); case "default_socket_timeout": return GSR(ref local.FileSystem.DefaultSocketTimeout, @default.FileSystem.DefaultSocketTimeout, value, action); case "include_path": return GSR(ref local.FileSystem.IncludePaths, @default.FileSystem.IncludePaths, value, action); #endregion #region case "zend.ze1_compatibility_mode": Debug.Assert(action != IniAction.Set || OptionValueToBoolean(value) == false); return false;// GSR(ref local.Variables.ZendEngineV1Compatible, @default.Variables.ZendEngineV1Compatible, value, action); case "magic_quotes_runtime": return GSR(ref local.Variables.QuoteRuntimeVariables, @default.Variables.QuoteRuntimeVariables, value, action); case "magic_quotes_sybase": Debug.Assert(action == IniAction.Get || OptionValueToBoolean(value) == local.Variables.QuoteInDbManner); return local.Variables.QuoteInDbManner; //GSR(ref local.Variables.QuoteInDbManner, @default.Variables.QuoteInDbManner, value, action); case "magic_quotes_gpc": Debug.Assert(action == IniAction.Get || OptionValueToBoolean(value) == global.GlobalVariables.QuoteGpcVariables); return global.GlobalVariables.QuoteGpcVariables; case "register_argc_argv": Debug.Assert(action == IniAction.Get); return global.GlobalVariables.RegisterArgcArgv; case "register_globals": Debug.Assert(action == IniAction.Get); return global.GlobalVariables.RegisterGlobals; case "register_long_arrays": Debug.Assert(action == IniAction.Get); return global.GlobalVariables.RegisterLongArrays; case "variables_order": return GsrVariablesOrder(local, @default, value, action); case "unserialize_callback_func": return GSR(ref local.Variables.DeserializationCallback, @default.Variables.DeserializationCallback, value, action); case "always_populate_raw_post_data": switch (action) { case IniAction.Restore: local.Variables.AlwaysPopulateRawPostData = false; break; case IniAction.Set: local.Variables.AlwaysPopulateRawPostData = Convert.ObjectToBoolean(value); break; } return local.Variables.AlwaysPopulateRawPostData; #endregion #region case "file_uploads": Debug.Assert(action == IniAction.Get); return global.PostedFiles.Accept; case "upload_tmp_dir": Debug.Assert(action == IniAction.Get); return global.PostedFiles.TempPath; case "post_max_size": case "upload_max_filesize": { Debug.Assert(action == IniAction.Get); HttpContext context; if (!Web.EnsureHttpContext(out context)) return null; HttpRuntimeSection http_runtime_section = (HttpRuntimeSection)context.GetSection("system.web/httpRuntime"); return (http_runtime_section != null) ? http_runtime_section.MaxRequestLength * 1024 : 0;// values in config are in kB, PHP's in B } #endregion #region case "assert.active": return GSR(ref local.Assertion.Active, @default.Assertion.Active, value, action); case "assert.bail": return GSR(ref local.Assertion.Terminate, @default.Assertion.Terminate, value, action); case "assert.quiet_eval": return GSR(ref local.Assertion.Quiet, @default.Assertion.Quiet, value, action); case "assert.warning": return GSR(ref local.Assertion.ReportWarning, @default.Assertion.ReportWarning, value, action); case "assert.callback": return GSR(ref local.Assertion.Callback, @default.Assertion.Callback, value, action); #endregion #region case "safe_mode": Debug.Assert(action == IniAction.Get); return global.SafeMode.Enabled; case "open_basedir": Debug.Assert(action == IniAction.Get); return global.SafeMode.GetAllowedPathPrefixesJoin(); case "safe_mode_exec_dir": Debug.Assert(action == IniAction.Get); return global.SafeMode.ExecutionDirectory; #endregion #region case "session.save_handler": return PhpSession.GsrHandler(local, @default, value, action); case "session.auto_start": Debug.Assert(action == IniAction.Get); return local.Session.AutoStart; case "session.name": Debug.Assert(action == IniAction.Get); return PhpSession.Name(); #endregion #region others case "default_charset": return GsrDefaultCharset(value, action); case "default_mimetype": return GsrDefaultMimetype(value, action); case "memory_limit": return GsrMemoryLimit(value, action); case "disable_functions": return GsrDisableFunctions(value, action); #endregion } Debug.Fail("Option '" + option + "' is supported but not implemented."); return null; } /// /// Writes Core legacy options and their values to XML text stream. /// Skips options whose values are the same as default values of Phalanger. /// /// XML writer. /// A hashtable containing PHP names and option values. Consumed options are removed from the table. /// Whether to add "phpName" attribute to option nodes. public static void CoreOptionsToXml(XmlTextWriter writer, Hashtable options, bool writePhpNames) // GENERICS: { if (writer == null) throw new ArgumentNullException("writer"); if (options == null) throw new ArgumentNullException("options"); ApplicationConfiguration app = new ApplicationConfiguration(); GlobalConfiguration global = new GlobalConfiguration(); LocalConfiguration local = new LocalConfiguration(); PhpIniXmlWriter ow = new PhpIniXmlWriter(writer, options, writePhpNames); ow.StartSection("compiler"); ow.WriteOption("short_open_tag", "ShortOpenTag", true, app.Compiler.ShortOpenTags); ow.WriteOption("asp_tags", "AspTags", false, app.Compiler.AspTags); ow.StartSection("variables"); //ow.WriteOption("zend.ze1_compatibility_mode", "ZendEngineV1Compatible", false, local.Variables.ZendEngineV1Compatible); ow.WriteOption("register_globals", "RegisterGlobals", false, global.GlobalVariables.RegisterGlobals); ow.WriteOption("register_argc_argv", "RegisterArgcArgv", true, global.GlobalVariables.RegisterArgcArgv); ow.WriteOption("register_long_arrays", "RegisterLongArrays", true, global.GlobalVariables.RegisterLongArrays); ow.WriteOption("variables_order", "RegisteringOrder", "EGPCS", local.Variables.RegisteringOrder); //ow.WriteOption("magic_quotes_gpc", "QuoteGpcVariables", true, global.GlobalVariables.QuoteGpcVariables); ow.WriteOption("magic_quotes_runtime", "QuoteRuntimeVariables", false, local.Variables.QuoteRuntimeVariables); //ow.WriteOption("magic_quotes_sybase", "QuoteInDbManner", false, local.Variables.QuoteInDbManner); ow.WriteOption("unserialize_callback_func", "DeserializationCallback", null, local.Variables.DeserializationCallback); ow.StartSection("output-control"); ow.WriteOption("output_buffering", "OutputBuffering", false, local.OutputControl.OutputBuffering); ow.WriteOption("output_handler", "OutputHandler", null, local.OutputControl.OutputHandler); ow.WriteOption("implicit_flush", "ImplicitFlush", false, local.OutputControl.ImplicitFlush); ow.WriteOption("default_mimetype", "ContentType", "text/html", DefaultMimetype); ow.WriteOption("default_charset", "Charset", "", DefaultCharset); ow.StartSection("request-control"); ow.WriteOption("max_execution_time", "ExecutionTimeout", 30, local.RequestControl.ExecutionTimeout); ow.WriteOption("ignore_user_abort", "IgnoreUserAbort", false, local.RequestControl.IgnoreUserAbort); ow.StartSection("error-control"); ow.WriteEnumOption("error_reporting", "ReportErrors", (int)PhpErrorSet.AllButStrict, (int)local.ErrorControl.ReportErrors, typeof(PhpError)); ow.WriteOption("display_errors", "DisplayErrors", true, local.ErrorControl.DisplayErrors); ow.WriteOption("html_errors", "HtmlMessages", true, local.ErrorControl.HtmlMessages); ow.WriteOption("docref_root", "DocRefRoot", null, local.ErrorControl.DocRefRoot.ToString()); ow.WriteOption("docref_ext", "DocRefExtension", null, local.ErrorControl.DocRefExtension); ow.WriteErrorLog("error_log", null, local.ErrorControl.SysLog, local.ErrorControl.LogFile); ow.WriteOption("log_errors", "EnableLogging", false, local.ErrorControl.EnableLogging); ow.WriteOption("error_prepend_string", "ErrorPrependString", null, local.ErrorControl.ErrorPrependString); ow.WriteOption("error_append_string", "ErrorAppendString", null, local.ErrorControl.ErrorAppendString); ow.StartSection("session-control"); ow.WriteOption("session.auto_start", "AutoStart", false, local.Session.AutoStart); ow.WriteOption("session.save_handler", "Handler", "files", local.Session.Handler.Name); ow.StartSection("assertion"); ow.WriteOption("assert.active", "Active", true, local.Assertion.Active); ow.WriteOption("assert.warning", "ReportWarning", true, local.Assertion.ReportWarning); ow.WriteOption("assert.bail", "Terminate", false, local.Assertion.Terminate); ow.WriteOption("assert.quiet_eval", "Quiet", false, local.Assertion.Quiet); ow.WriteOption("assert.callback", "Callback", null, local.Assertion.Callback); ow.StartSection("safe-mode"); ow.WriteOption("safe_mode", "Enabled", false, global.SafeMode.Enabled); ow.WriteOption("open_basedir", "AllowedPathPrefixes", null, global.SafeMode.GetAllowedPathPrefixesJoin()); ow.WriteOption("safe_mode_exec_dir", "ExecutionDirectory", null, global.SafeMode.ExecutionDirectory); ow.StartSection("posted-files"); ow.WriteOption("file_uploads", "Accept", true, global.PostedFiles.Accept); ow.WriteOption("upload_tmp_dir", "TempPath", null, global.PostedFiles.TempPath); ow.StartSection("file-system"); ow.WriteOption("allow_url_fopen", "AllowUrlFopen", true, local.FileSystem.AllowUrlFopen); ow.WriteOption("default_socket_timeout", "DefaultSocketTimeout", 60, local.FileSystem.DefaultSocketTimeout); ow.WriteOption("user_agent", "UserAgent", null, local.FileSystem.UserAgent); ow.WriteOption("from", "AnonymousFtpPassword", null, local.FileSystem.AnonymousFtpPassword); ow.WriteOption("include_path", "IncludePaths", ".", local.FileSystem.IncludePaths); ow.WriteEnd(); } #endregion #region Public GSRs internal static bool OptionValueToBoolean(object value) { string sval = value as string; if (sval != null) { switch (sval.ToLower(System.Globalization.CultureInfo.InvariantCulture)) // we dont need any unicode chars lowercased properly, CurrentCulture is slow { case "on": case "yes": return true; case "off": case "no": case "none": return false; } } return Convert.ObjectToBoolean(value); } /// /// Gets, sets or restores boolean option. /// public static object GSR(ref bool option, bool defaultValue, object value, IniAction action) { object result = option; switch (action) { case IniAction.Set: option = OptionValueToBoolean(value); break; case IniAction.Restore: option = defaultValue; break; } return result; } /// /// Gets, sets or restores integer option. /// public static object GSR(ref int option, int defaultValue, object value, IniAction action) { object result = option; switch (action) { case IniAction.Set: option = Convert.ObjectToInteger(value); break; case IniAction.Restore: option = defaultValue; break; } return result; } /// /// Gets, sets or restores double option. /// public static object GSR(ref double option, double defaultValue, object value, IniAction action) { object result = option; switch (action) { case IniAction.Set: option = Convert.ObjectToDouble(value); break; case IniAction.Restore: option = defaultValue; break; } return result; } /// /// Gets, sets or restores string option. /// public static object GSR(ref string option, string defaultValue, object value, IniAction action) { object result = option; switch (action) { case IniAction.Set: option = Convert.ObjectToString(value); break; case IniAction.Restore: option = defaultValue; break; } return result; } /// /// Gets, sets or restores callback option. /// public static object GSR(ref PhpCallback option, PhpCallback defaultValue, object value, IniAction action) { object result = option; switch (action) { case IniAction.Set: option = Convert.ObjectToCallback(value); break; case IniAction.Restore: option = defaultValue; break; } return result; } #endregion #region Special GSRs /// /// Gets, sets or restores "default_charset" option. /// private static object GsrDefaultCharset(object value, IniAction action) { HttpContext context; if (!Web.EnsureHttpContext(out context)) return null; object result = context.Response.Charset; switch (action) { case IniAction.Set: context.Response.Charset = Convert.ObjectToString(value); break; case IniAction.Restore: context.Response.Charset = DefaultCharset; break; } return result; } /// /// Gets, sets or restores "default_mimetype" option. /// private static object GsrDefaultMimetype(object value, IniAction action) { HttpContext context; if (!Web.EnsureHttpContext(out context)) return null; object result = context.Response.ContentType; switch (action) { case IniAction.Set: context.Response.ContentType = Convert.ObjectToString(value); break; case IniAction.Restore: context.Response.ContentType = DefaultMimetype; break; } return result; } /// /// Gets, sets or restores "memory_limit" option. /// private static object GsrMemoryLimit(object value, IniAction action) { object result = -1; switch (action) { case IniAction.Set: case IniAction.Restore: PhpException.ArgumentValueNotSupported("memory_limit", action); break; } return result; } /// /// Gets, sets or restores "disable_functions" option. /// private static object GsrDisableFunctions(object value, IniAction action) { object result = ""; switch (action) { case IniAction.Set: case IniAction.Restore: PhpException.ArgumentValueNotSupported("disable_functions", action); break; } return result; } /// /// Gets, sets or restores "variables_order" option. /// private static object GsrVariablesOrder(LocalConfiguration local, LocalConfiguration @default, object value, IniAction action) { object result = local.Variables.RegisteringOrder; switch (action) { case IniAction.Set: string svalue = Convert.ObjectToString(value); if (!LocalConfiguration.VariablesSection.ValidateRegisteringOrder(svalue)) PhpException.Throw(PhpError.Warning, CoreResources.GetString("invalid_registering_order")); else local.Variables.RegisteringOrder = svalue; break; case IniAction.Restore: local.Variables.RegisteringOrder = @default.Variables.RegisteringOrder; break; } return result; } /// /// Gets, sets or restores "error_log" option. /// private static object GsrErrorLog(LocalConfiguration local, LocalConfiguration @default, object value, IniAction action) { if (action == IniAction.Restore) { local.ErrorControl.LogFile = @default.ErrorControl.LogFile; local.ErrorControl.SysLog = @default.ErrorControl.SysLog; return null; } string result = (local.ErrorControl.SysLog) ? ErrorLogSysLog : local.ErrorControl.LogFile; if (action == IniAction.Set) { string svalue = Convert.ObjectToString(value); local.ErrorControl.SysLog = (string.Compare(svalue, ErrorLogSysLog, StringComparison.InvariantCultureIgnoreCase) == 0); local.ErrorControl.LogFile = (local.ErrorControl.SysLog) ? svalue : null; } return result; } #endregion #region ini_get, ini_set, ini_restore, get_cfg_var, ini_alter /// /// Gets the value of a configuration option. /// /// The option name (case sensitive). /// The option old value conveted to string or false on error. /// The option is not supported (Warning). [ImplementsFunction("ini_get")] public static object Get(string option) { bool error; object result = IniOptions.TryGetSetRestore(option, null, IniAction.Get, out error); if (error) return false; return Convert.ObjectToString(result); } /// /// Sets the value of a configuration option. /// /// The option name (case sensitive). /// The option new value. /// The option old value converted to string or false on error. /// The option is not supported (Warning). /// The option cannot be set by script (Warning). [ImplementsFunction("ini_set")] public static object Set(string option, object value) { bool error; object result = IniOptions.TryGetSetRestore(option, value, IniAction.Set, out error); if (error) return false; return Convert.ObjectToString(result); } /// /// Restores the value of a configuration option to its global value. /// No value is returned. /// /// The option name (case sensitive). /// The option is not supported (Warning). [ImplementsFunction("ini_restore")] public static void Restore(string option) { bool error; IniOptions.TryGetSetRestore(option, null, IniAction.Restore, out error); } /// /// Gets the value of a configuration option (alias for ). /// /// The option name (case sensitive). /// The option old value conveted to string or false on error. /// The option is not supported (Warning). [ImplementsFunction("get_cfg_var")] public static object GetCfgVar(string option) { return Get(option); } /// /// Sets the value of a configuration option (alias for ). /// /// The option name (case sensitive). /// The option new value converted to string. /// The option old value. /// The option is not supported (Warning). /// The option cannot be set by script (Warning). [ImplementsFunction("ini_alter")] public static object Alter(string option, object value) { return Set(option, value); } #endregion #region get_all /// /// Retrieves an array of all configuration entries. /// /// [ImplementsFunction("ini_get_all")] public static PhpArray GetAll() { return (PhpArray)IniOptions.GetAllOptionStates(null, new PhpArray(0, IniOptions.Count)); } /// /// Retrieves an array of configuration entries of a specified extension. /// /// The PHP internal extension name. /// /// For each supported configuration option an entry is added to the resulting array. /// The key is the name of the option and the value is an array having three entries: /// /// global_value - global value of the option /// local_value - local value of the option /// access - 7 (PHP_INI_ALL), 6 (PHP_INI_PERDIR | PHP_INI_SYSTEM) or 4 (PHP_INI_SYSTEM) /// /// [ImplementsFunction("ini_get_all")] public static PhpArray GetAll(string extension) { PhpArray result = new PhpArray(); // adds options from managed libraries: IniOptions.GetAllOptionStates(extension, result); return result; } #endregion #region assert_options /// /// Gets a value of an assert option. /// /// The option which value to get. /// The value of the option. [ImplementsFunction("assert_options")] public static object AssertOptions(AssertOption option) { return AssertOptions(option, null, IniAction.Get); } /// /// Sets a value of an assert option. /// /// The option which value to get. /// The new value for the option. /// The value of the option. [ImplementsFunction("assert_options")] public static object AssertOptions(AssertOption option, object value) { return AssertOptions(option, value, IniAction.Set); } /// /// Implementation of and . /// /// Only gets/sets. No restore. private static object AssertOptions(AssertOption option, object value, IniAction action) { LocalConfiguration config = Configuration.Local; switch (option) { case AssertOption.Active: return GSR(ref config.Assertion.Active, false, value, action); case AssertOption.Callback: return GSR(ref config.Assertion.Callback, null, value, action); case AssertOption.Quiet: return GSR(ref config.Assertion.Quiet, false, value, action); case AssertOption.Terminate: return GSR(ref config.Assertion.Terminate, false, value, action); case AssertOption.ReportWarning: return GSR(ref config.Assertion.ReportWarning, false, value, action); default: PhpException.InvalidArgument("option"); return false; } } #endregion #region get_include_path, set_include_path, restore_include_path /// /// Gets a value of "include_path" option. /// /// The current value. [ImplementsFunction("get_include_path")] public static string GetIncludePath() { return Configuration.Local.FileSystem.IncludePaths; } /// /// Sets a new value of "include_path" option. /// /// A previous value. [ImplementsFunction("set_include_path")] public static string SetIncludePath(string value) { LocalConfiguration config = Configuration.Local; string result = config.FileSystem.IncludePaths; config.FileSystem.IncludePaths = value; return result; } /// /// Restores a value of "include_path" option from global configuration. /// No value is returned. /// [ImplementsFunction("restore_include_path")] public static void RestoreIncludePath() { Configuration.Local.FileSystem.IncludePaths = Configuration.DefaultLocal.FileSystem.IncludePaths; } #endregion #region get_magic_quotes_gpc, get_magic_quotes_runtime, set_magic_quotes_runtime /// /// Gets a value of "magic_quotes_gpc" option. /// /// The current value. [ImplementsFunction("get_magic_quotes_gpc")] public static bool GetMagicQuotesGPC() { return Configuration.Global.GlobalVariables.QuoteGpcVariables; } /// /// Gets a value of "magic_quotes_runtime" option. /// /// The current value. [ImplementsFunction("get_magic_quotes_runtime")] public static bool GetMagicQuotesRuntime() { return Configuration.Local.Variables.QuoteRuntimeVariables; } /// /// Sets a new value of "magic_quotes_runtime" option. /// /// The new value. /// A previous value. [ImplementsFunction("set_magic_quotes_runtime")] public static bool SetMagicQuotesRuntime(bool value) { LocalConfiguration local = Configuration.Local; bool result = local.Variables.QuoteRuntimeVariables; local.Variables.QuoteRuntimeVariables = value; return result; } #endregion #region error_reporting, set_error_handler, restore_error_handler, set_exception_handler, restore_exception_handler /// /// Retrieves the current error reporting level. /// /// /// The bitmask of error types which are reported. Returns 0 if error reporting is disabled /// by means of @ operator. /// [ImplementsFunction("error_reporting")] public static int ErrorReporting() { return ScriptContext.CurrentContext.ErrorReportingLevel; } /// /// Sets a new level of error reporting. /// /// The new level. /// The original level. [ImplementsFunction("error_reporting")] public static int ErrorReporting(int level) { if ((level & (int)PhpErrorSet.All) == 0 && level != 0) PhpException.InvalidArgument("level"); ScriptContext context = ScriptContext.CurrentContext; int result = context.ErrorReportingLevel; context.Config.ErrorControl.ReportErrors = PhpErrorSet.All & (PhpErrorSet)level; return result; } /// /// Internal record in the error handler stack. /// private class ErrorHandlerRecord { /// /// Error handler callback. /// public PhpCallback ErrorHandler; /// /// Error types to be handled. /// public PhpError ErrorTypes; /// /// Public constructor of the class. /// /// Error handler callback. /// Error types to be handled. public ErrorHandlerRecord(PhpCallback handler, PhpError errors) { ErrorHandler = handler; ErrorTypes = errors; } } /// /// Stores user error handlers which has been rewritten by a new one. /// [ThreadStatic] private static Stack OldUserErrorHandlers; // GENERICS: /// /// Stores user exception handlers which has been rewritten by a new one. /// [ThreadStatic] private static Stack OldUserExceptionHandlers; // GENERICS: /// /// Clears and on request end. /// private static void ClearOldUserHandlers() { OldUserErrorHandlers = null; OldUserExceptionHandlers = null; } /// /// Sets user defined handler to handle errors. /// /// The class context used to bind the callback. /// The user callback called to handle an error. /// /// The PHP representation of previous user handler, null if there is no user one, or /// false if is invalid or empty. /// /// /// Stores old user handlers on the stack so that it is possible to /// go back to arbitrary previous user handler. /// [ImplementsFunction("set_error_handler", FunctionImplOptions.NeedsClassContext)] public static object SetErrorHandler(PHP.Core.Reflection.DTypeDesc caller, PhpCallback newHandler) { return SetErrorHandler(caller, newHandler, (int)PhpErrorSet.Handleable); } /// /// Sets user defined handler to handle errors. /// /// The class context used to bind the callback. /// The user callback called to handle an error. /// Error types to be handled by the handler. /// /// The PHP representation of previous user handler, null if there is no user one, or /// false if is invalid or empty. /// /// /// Stores old user handlers on the stack so that it is possible to /// go back to arbitrary previous user handler. /// [ImplementsFunction("set_error_handler", FunctionImplOptions.NeedsClassContext)] public static object SetErrorHandler(PHP.Core.Reflection.DTypeDesc caller, PhpCallback newHandler, int errorTypes) { if (!PhpArgument.CheckCallback(newHandler, caller, "newHandler", 0, false)) return null; PhpCallback old_handler = Configuration.Local.ErrorControl.UserHandler; PhpError old_errors = Configuration.Local.ErrorControl.UserHandlerErrors; // previous handler was defined by user => store it into the stack: if (old_handler != null) { if (OldUserErrorHandlers == null) { OldUserErrorHandlers = new Stack(5); RequestContext.RequestEnd += new Action(ClearOldUserHandlers); } OldUserErrorHandlers.Push(new ErrorHandlerRecord(old_handler, old_errors)); } // sets the current handler: Configuration.Local.ErrorControl.UserHandler = newHandler; Configuration.Local.ErrorControl.UserHandlerErrors = (PhpError)errorTypes; // returns the previous handler: return (old_handler != null) ? old_handler.ToPhpRepresentation() : null; } /// /// Restores the previous user error handler if there was any. /// [ImplementsFunction("restore_error_handler")] public static bool RestoreErrorHandler() { // if some user handlers has been stored in the stack then restore the top-most, otherwise set to null: if (OldUserErrorHandlers != null && OldUserErrorHandlers.Count > 0) { ErrorHandlerRecord record = (ErrorHandlerRecord)OldUserErrorHandlers.Pop(); Configuration.Local.ErrorControl.UserHandler = record.ErrorHandler; Configuration.Local.ErrorControl.UserHandlerErrors = record.ErrorTypes; } else { Configuration.Local.ErrorControl.UserHandler = null; Configuration.Local.ErrorControl.UserHandlerErrors = (PhpError)PhpErrorSet.None; } return true; } /// /// Sets user defined handler to handle exceptions. /// /// The class context used to bind the callback. /// The user callback called to handle an exceptions. /// /// The PHP representation of previous user handler, null if there is no user one, or /// false if is invalid or empty. /// /// /// Stores old user handlers on the stack so that it is possible to /// go back to arbitrary previous user handler. /// [ImplementsFunction("set_exception_handler", FunctionImplOptions.NeedsClassContext)] public static object SetExceptionHandler(PHP.Core.Reflection.DTypeDesc caller, PhpCallback newHandler) { if (!PhpArgument.CheckCallback(newHandler, caller, "newHandler", 0, false)) return null; PhpCallback old_handler = Configuration.Local.ErrorControl.UserExceptionHandler; // previous handler was defined by user => store it into the stack: if (old_handler != null) { if (OldUserExceptionHandlers == null) { OldUserExceptionHandlers = new Stack(5); RequestContext.RequestEnd += new Action(ClearOldUserHandlers); } OldUserExceptionHandlers.Push(old_handler); } // sets the current handler: Configuration.Local.ErrorControl.UserExceptionHandler = newHandler; // returns the previous handler: return (old_handler != null) ? old_handler.ToPhpRepresentation() : null; } /// /// Restores the previous user error handler if there was any. /// [ImplementsFunction("restore_exception_handler")] public static bool RestoreExceptionHandler() { if (OldUserExceptionHandlers != null && OldUserExceptionHandlers.Count > 0) Configuration.Local.ErrorControl.UserExceptionHandler = (PhpCallback)OldUserExceptionHandlers.Pop(); else Configuration.Local.ErrorControl.UserExceptionHandler = null; return true; } #endregion #region set_time_limit, ignore_user_abort /// /// Sets the request time-out in seconds (configuration option "max_execution_time"). /// No value is returned. /// /// The time-out setting for request. [ImplementsFunction("set_time_limit")] public static void SetTimeLimit(int seconds) { ScriptContext.CurrentContext.ApplyExecutionTimeout(seconds); } /// /// Get a value of a configuration option "ignore_user_abort". /// /// The current value of the option. [ImplementsFunction("ignore_user_abort")] public static bool IgnoreUserAbort() { return Configuration.Local.RequestControl.IgnoreUserAbort; } /// /// Sets a value of a configuration option "ignore_user_abort". /// /// The new value of the option. /// The previous value of the option. /// Web request PHP context is not available (Warning). [ImplementsFunction("ignore_user_abort")] public static bool IgnoreUserAbort(bool value) { RequestContext context; if (!Web.EnsureRequestContext(out context)) return true; LocalConfiguration local = Configuration.Local; bool result = local.RequestControl.IgnoreUserAbort; local.RequestControl.IgnoreUserAbort = value; // enables/disables disconnection tracking: context.TrackClientDisconnection = !value; return result; } #endregion } #region PhpIniXmlWriter public sealed class PhpIniXmlWriter { private readonly XmlTextWriter writer; private readonly Hashtable options; // GENERICS: private readonly bool writePhpNames; private string startSection; private bool sectionOpened; public PhpIniXmlWriter(XmlTextWriter writer, Hashtable options, bool writePhpNames) { this.writer = writer; this.options = options; this.writePhpNames = writePhpNames; } public void WriteEnd() { if (sectionOpened) writer.WriteEndElement(); } public void StartSection(string name) { startSection = name; } private void StartElement() { if (startSection != null) { if (sectionOpened) writer.WriteEndElement(); writer.WriteStartElement(startSection); startSection = null; sectionOpened = true; } } private void WriteSetNode(string phpName, string xmlName, string value) { StartElement(); writer.WriteStartElement("set"); writer.WriteAttributeString("name", xmlName); writer.WriteAttributeString("value", value); if (writePhpNames) writer.WriteAttributeString("phpName", phpName); writer.WriteEndElement(); } private void WriteEnumSetNode(string phpName, string xmlName, int value, Type type) { StartElement(); writer.WriteStartElement("set"); writer.WriteAttributeString("name", xmlName); if (writePhpNames) writer.WriteAttributeString("phpName", phpName); writer.WriteStartElement("clear"); writer.WriteEndElement(); writer.WriteStartElement("add"); writer.WriteAttributeString("value", Enum.Format(type, value, "G")); writer.WriteEndElement(); writer.WriteEndElement(); } public void WriteOption(string phpName, string xmlName, string phpValue, string defValue) { if (options.ContainsKey(phpName)) { phpValue = (string)options[phpName]; options.Remove(phpName); } if (phpValue == null) phpValue = ""; if (defValue == null) defValue = ""; if (phpValue != defValue) WriteSetNode(phpName, xmlName, phpValue); } public void WriteOption(string phpName, string xmlName, bool phpValue, bool defValue) { if (options.ContainsKey(phpName)) { phpValue = Core.Convert.StringToBoolean((string)options[phpName]); options.Remove(phpName); } if (phpValue != defValue) WriteSetNode(phpName, xmlName, phpValue ? "true" : "false"); } public void WriteByteSize(string phpName, string xmlName, int phpValue, int defValue) { if (options.ContainsKey(phpName)) { phpValue = Core.Convert.StringByteSizeToInteger((string)options[phpName]); options.Remove(phpName); } if (phpValue != defValue) WriteSetNode(phpName, xmlName, phpValue.ToString()); } public void WriteOption(string phpName, string xmlName, int phpValue, int defValue) { if (options.ContainsKey(phpName)) { phpValue = Core.Convert.StringToInteger((string)options[phpName]); options.Remove(phpName); } if (phpValue != defValue) WriteSetNode(phpName, xmlName, phpValue.ToString()); } public void WriteOption(string phpName, string xmlName, double phpValue, double defValue) { if (options.ContainsKey(phpName)) { phpValue = Core.Convert.StringToDouble((string)options[phpName]); options.Remove(phpName); } if (phpValue != defValue) WriteSetNode(phpName, xmlName, phpValue.ToString()); } public void WriteOption(string phpName, string xmlName, string phpValue, PhpCallback defValue) { WriteOption(phpName, xmlName, phpValue, (defValue != null) ? ((IPhpConvertible)defValue).ToString() : null); } internal void WriteErrorLog(string phpName, string phpValue, bool defSysLog, string defLogFile) { if (options.ContainsKey(phpName)) { phpValue = (string)options[phpName]; options.Remove(phpName); } bool phpSysLog = phpValue == PhpIni.ErrorLogSysLog; string phpLogFile = phpSysLog ? null : phpValue; if (phpLogFile == null) phpLogFile = ""; if (defLogFile == null) defLogFile = ""; if (phpLogFile != defLogFile) WriteSetNode(phpName, "LogFile", phpLogFile); if (phpSysLog != defSysLog) WriteSetNode(phpName, "SysLog", phpSysLog ? "true" : "false"); } public void WriteEnumOption(string phpName, string xmlName, int phpValue, int defValue, Type type) { if (options.ContainsKey(phpName)) { phpValue = Core.Convert.StringToInteger((string)options[phpName]); options.Remove(phpName); } if (phpValue != defValue) WriteEnumSetNode(phpName, xmlName, phpValue, type); } } #endregion } ================================================ FILE: Source/ClassLibrary/PhpIniOptions.CLR.cs ================================================ /* Copyright (c) 2004-2006 Tomas Matousek. The use and distribution terms for this software are contained in the file named License.txt, which can be found in the root of the Phalanger distribution. By using this software in any fashion, you are agreeing to be bound by the terms of this license. You must not remove this notice from this software. */ using System; using System.Collections; using System.Collections.Generic; using PHP.Core; using Convert = PHP.Core.Convert; using System.Diagnostics; namespace PHP.Library { public delegate object GetSetRestoreDelegate(LocalConfiguration config, string option, object value, IniAction action); /// /// An action which can be performed on option. /// public enum IniAction { Restore, Set, Get } [Flags] public enum IniFlags : byte { Unsupported = 0, Global = 0, Supported = 1, Local = 2, Http = 4, } [Flags] public enum IniAccessability { User = 1, PerDirectory = 2, System = 4, All = 7, Global = PerDirectory | System, Local = All } public static class IniOptions { #region Options Table /// /// Holds information about the option. /// public class OptionDefinition // GENERICS: struct { public readonly IniFlags Flags; public readonly GetSetRestoreDelegate Gsr; public readonly string Extension; internal OptionDefinition(IniFlags flags, GetSetRestoreDelegate gsr, string extension) { this.Flags = flags; this.Gsr = gsr; this.Extension = extension; } } private static Dictionary options; private static GetSetRestoreDelegate GsrCoreOption = new GetSetRestoreDelegate(PhpIni.GetSetRestoreCoreOption); /// /// Gets a number of currently registered options. /// public static int Count { get { return options.Count; } } /// /// Gets an option by name. /// /// The name of the option. /// Information about the option or a null reference if it has not been registered yet. /// is a null reference. /// Shouldn't be called before or during option registration (not thread safe for writes). public static OptionDefinition GetOption(string name) { if (name == null) throw new ArgumentNullException("name"); OptionDefinition value; return options.TryGetValue(name, out value) ? value : null; } /// /// Registeres a legacy configuration option. Not thread safe. /// /// A case-sensitive unique option name. /// Flags. /// A delegate pointing to a method which will perform option's value getting, setting, and restoring. /// A case-sensitive name of the extension which the option belongs to. Can be a null reference. /// /// Registered options are known to ini_get, ini_set, and ini_restore PHP functions. /// /// is a null reference. /// is a null reference. /// An option with specified name has already been registered. public static void Register(string name, IniFlags flags, GetSetRestoreDelegate gsr, string extension) { if (name == null) throw new ArgumentNullException("name"); if (gsr == null) throw new ArgumentNullException("gsr"); if (options.ContainsKey(name)) throw new ArgumentException(LibResources.GetString("option_already_registered", name)); options.Add(name, new OptionDefinition(flags, gsr, extension)); } /// /// Registeres a Core option. /// private static void RegisterCoreOption(string name, IniFlags flags) { options.Add(name, new OptionDefinition(flags, GsrCoreOption, null)); } #endregion #region Initialization static IniOptions() { options = new Dictionary(150); RegisterCoreOption("allow_call_time_pass_reference", IniFlags.Unsupported | IniFlags.Global); RegisterCoreOption("allow_url_fopen", IniFlags.Supported | IniFlags.Local); RegisterCoreOption("allow_webdav_methods", IniFlags.Unsupported | IniFlags.Global); RegisterCoreOption("always_populate_raw_post_data", IniFlags.Supported | IniFlags.Local); RegisterCoreOption("arg_separator.input", IniFlags.Unsupported | IniFlags.Global); RegisterCoreOption("arg_separator.output", IniFlags.Unsupported | IniFlags.Local); RegisterCoreOption("asp_tags", IniFlags.Supported | IniFlags.Global); RegisterCoreOption("assert.active", IniFlags.Supported | IniFlags.Local); RegisterCoreOption("assert.bail", IniFlags.Supported | IniFlags.Local); RegisterCoreOption("assert.callback", IniFlags.Supported | IniFlags.Local); RegisterCoreOption("assert.quiet_eval", IniFlags.Supported | IniFlags.Local); RegisterCoreOption("assert.warning", IniFlags.Supported | IniFlags.Local); RegisterCoreOption("async_send", IniFlags.Unsupported | IniFlags.Local); RegisterCoreOption("auto_append_file", IniFlags.Unsupported | IniFlags.Global); RegisterCoreOption("auto_detect_line_endings", IniFlags.Unsupported | IniFlags.Local); RegisterCoreOption("auto_prepend_file", IniFlags.Unsupported | IniFlags.Global); RegisterCoreOption("browscap", IniFlags.Unsupported | IniFlags.Global); RegisterCoreOption("cgi.force_redirect", IniFlags.Unsupported | IniFlags.Global); RegisterCoreOption("cgi.redirect_status_env", IniFlags.Unsupported | IniFlags.Global); RegisterCoreOption("cgi.rfc2616_headers", IniFlags.Unsupported | IniFlags.Global); RegisterCoreOption("child_terminate", IniFlags.Unsupported | IniFlags.Local); RegisterCoreOption("debugger.enabled", IniFlags.Unsupported | IniFlags.Global); RegisterCoreOption("debugger.host", IniFlags.Unsupported | IniFlags.Global); RegisterCoreOption("debugger.port", IniFlags.Unsupported | IniFlags.Global); RegisterCoreOption("default_charset", IniFlags.Supported | IniFlags.Local | IniFlags.Http); RegisterCoreOption("default_mimetype", IniFlags.Supported | IniFlags.Local | IniFlags.Http); RegisterCoreOption("default_socket_timeout", IniFlags.Supported | IniFlags.Local); RegisterCoreOption("define_syslog_variables", IniFlags.Unsupported | IniFlags.Local); RegisterCoreOption("disable_classes", IniFlags.Unsupported | IniFlags.Global); RegisterCoreOption("disable_functions", IniFlags.Supported | IniFlags.Global); RegisterCoreOption("display_errors", IniFlags.Supported | IniFlags.Local); RegisterCoreOption("display_startup_errors", IniFlags.Unsupported | IniFlags.Local); RegisterCoreOption("doc_root", IniFlags.Unsupported | IniFlags.Global); RegisterCoreOption("enable_dl", IniFlags.Unsupported | IniFlags.Global); RegisterCoreOption("engine", IniFlags.Unsupported | IniFlags.Local); RegisterCoreOption("error_append_string", IniFlags.Supported | IniFlags.Local); RegisterCoreOption("error_log", IniFlags.Supported | IniFlags.Local); RegisterCoreOption("error_prepend_string", IniFlags.Supported | IniFlags.Local); RegisterCoreOption("error_reporting", IniFlags.Supported | IniFlags.Local); RegisterCoreOption("expose_php", IniFlags.Unsupported | IniFlags.Global); RegisterCoreOption("extension_dir", IniFlags.Supported | IniFlags.Global); RegisterCoreOption("fastcgi.impersonate", IniFlags.Unsupported | IniFlags.Global); RegisterCoreOption("file_uploads", IniFlags.Supported | IniFlags.Global); RegisterCoreOption("from", IniFlags.Supported | IniFlags.Local); RegisterCoreOption("gpc_order", IniFlags.Unsupported | IniFlags.Local); RegisterCoreOption("html_errors", IniFlags.Supported | IniFlags.Local); RegisterCoreOption("ignore_repeated_errors", IniFlags.Unsupported | IniFlags.Local); RegisterCoreOption("ignore_repeated_source", IniFlags.Unsupported | IniFlags.Local); RegisterCoreOption("ignore_user_abort", IniFlags.Supported | IniFlags.Local | IniFlags.Http); RegisterCoreOption("implicit_flush", IniFlags.Supported | IniFlags.Global); RegisterCoreOption("include_path", IniFlags.Supported | IniFlags.Local); RegisterCoreOption("last_modified", IniFlags.Unsupported | IniFlags.Local); RegisterCoreOption("log_errors", IniFlags.Supported | IniFlags.Local); RegisterCoreOption("log_errors_max_len", IniFlags.Unsupported | IniFlags.Local); RegisterCoreOption("magic_quotes_gpc", IniFlags.Supported | IniFlags.Global); RegisterCoreOption("magic_quotes_runtime", IniFlags.Supported | IniFlags.Local); RegisterCoreOption("magic_quotes_sybase", IniFlags.Supported | IniFlags.Local); RegisterCoreOption("max_execution_time", IniFlags.Supported | IniFlags.Local); RegisterCoreOption("max_input_time", IniFlags.Unsupported | IniFlags.Global); RegisterCoreOption("memory_limit", IniFlags.Supported | IniFlags.Local); RegisterCoreOption("mime_magic.magicfile", IniFlags.Unsupported | IniFlags.Global); RegisterCoreOption("open_basedir", IniFlags.Supported | IniFlags.Global); RegisterCoreOption("output_buffering", IniFlags.Supported | IniFlags.Global); RegisterCoreOption("output_handler", IniFlags.Supported | IniFlags.Global); RegisterCoreOption("post_max_size", IniFlags.Supported | IniFlags.Global); RegisterCoreOption("precision", IniFlags.Unsupported | IniFlags.Local); RegisterCoreOption("register_argc_argv", IniFlags.Supported | IniFlags.Global); RegisterCoreOption("register_globals", IniFlags.Supported | IniFlags.Global); RegisterCoreOption("register_long_arrays", IniFlags.Supported | IniFlags.Global); RegisterCoreOption("report_memleaks", IniFlags.Unsupported | IniFlags.Global); RegisterCoreOption("safe_mode", IniFlags.Supported | IniFlags.Global); RegisterCoreOption("safe_mode_allowed_env_vars", IniFlags.Unsupported | IniFlags.Global); RegisterCoreOption("safe_mode_exec_dir", IniFlags.Supported | IniFlags.Global); RegisterCoreOption("safe_mode_gid", IniFlags.Unsupported | IniFlags.Global); RegisterCoreOption("safe_mode_include_dir", IniFlags.Unsupported | IniFlags.Global); RegisterCoreOption("safe_mode_protected_env_vars", IniFlags.Unsupported | IniFlags.Global); RegisterCoreOption("session.auto_start", IniFlags.Supported | IniFlags.Global | IniFlags.Http); RegisterCoreOption("session.save_handler", IniFlags.Supported | IniFlags.Local | IniFlags.Http); RegisterCoreOption("session.name", IniFlags.Supported | IniFlags.Global | IniFlags.Http); RegisterCoreOption("short_open_tag", IniFlags.Supported | IniFlags.Global); RegisterCoreOption("sql.safe_mode", IniFlags.Unsupported | IniFlags.Global); RegisterCoreOption("track_errors", IniFlags.Unsupported | IniFlags.Local); RegisterCoreOption("unserialize_callback_func", IniFlags.Supported | IniFlags.Local); RegisterCoreOption("upload_max_filesize", IniFlags.Supported | IniFlags.Global); RegisterCoreOption("upload_tmp_dir", IniFlags.Supported | IniFlags.Global); RegisterCoreOption("url_rewriter.tags", IniFlags.Unsupported | IniFlags.Local); RegisterCoreOption("user_agent", IniFlags.Supported | IniFlags.Local); RegisterCoreOption("user_dir", IniFlags.Unsupported | IniFlags.Global); RegisterCoreOption("variables_order", IniFlags.Supported | IniFlags.Local); RegisterCoreOption("warn_plus_overloading", IniFlags.Unsupported | IniFlags.Global); RegisterCoreOption("xbithack", IniFlags.Unsupported | IniFlags.Local); RegisterCoreOption("y2k_compliance", IniFlags.Unsupported | IniFlags.Local); RegisterCoreOption("zend.ze1_compatibility_mode", IniFlags.Supported | IniFlags.Local); } #endregion /// /// Tries to get, set, or restore an option given its PHP name and value. /// /// The option name. /// The option new value if applicable. /// The action to be taken. /// true, on failure. /// The option old value. /// The option not supported (Warning). /// The option is read only but action demands write access (Warning). internal static object TryGetSetRestore(string name, object value, IniAction action, out bool error) { Debug.Assert(name != null); error = true; IniOptions.OptionDefinition option = GetOption(name); // option not found: if (option == null) { PhpException.Throw(PhpError.Warning, LibResources.GetString("unknown_option", name)); return null; } // the option is known but not supported: if ((option.Flags & IniFlags.Supported) == 0) { PhpException.Throw(PhpError.Warning, LibResources.GetString("option_not_supported", name)); return null; } // the option is global thus cannot be changed: if ((option.Flags & IniFlags.Local) == 0 && action != IniAction.Get) { PhpException.Throw(PhpError.Warning, LibResources.GetString("option_readonly", name)); return null; } error = false; return option.Gsr(Configuration.Local, name, value, action); } /// /// Formats a state of the specified option into . /// /// The option's flag. /// A default value of the option. /// A script local value of the option. /// An array containig keys "global_value", "local_value", "access". private static PhpArray FormatOptionState(IniFlags flags, object defaultValue, object localValue) { PhpArray result = new PhpArray(0, 3); // default value: result.Add("global_value", Convert.ObjectToString(defaultValue)); // local value: result.Add("local_value", Convert.ObjectToString(localValue)); // accessibility: result.Add("access", (int)((flags & IniFlags.Local) != 0 ? IniAccessability.Local : IniAccessability.Global)); return result; } /// /// Gets an array of options states formatted by . /// /// An extension which options to retrieve. /// A dictionary where to add options. /// An array of option states. /// Options already contained in are overwritten. internal static IDictionary GetAllOptionStates(string extension, IDictionary result) { Debug.Assert(result != null); LocalConfiguration local = Configuration.Local; LocalConfiguration @default = Configuration.DefaultLocal; foreach (KeyValuePair entry in options) { string name = entry.Key; OptionDefinition def = entry.Value; // skips configuration which don't belong to the specified extension: if ((extension == null || extension == def.Extension)) { if ((def.Flags & IniFlags.Supported) == 0) { result[name] = FormatOptionState( def.Flags, "Not Supported", "Not Supported"); } else if ((def.Flags & IniFlags.Http) != 0 && System.Web.HttpContext.Current == null) { result[name] = FormatOptionState( def.Flags, "Http Context Required", "Http Context Required"); } else { result[name] = FormatOptionState( def.Flags, def.Gsr(@default, name, null, IniAction.Get), def.Gsr(local, name, null, IniAction.Get)); } } } return result; } } } ================================================ FILE: Source/ClassLibrary/PhpIniParser.CLR.cs ================================================ /* Copyright (c) 2005-2006 Ladislav Prosek. The use and distribution terms for this software are contained in the file named License.txt, which can be found in the root of the Phalanger distribution. By using this software in any fashion, you are agreeing to be bound by the terms of this license. You must not remove this notice from this software. TODO: Added possibility to access INI variables from within .ini file. (Andrei) (PHP 5.1.0) */ using System; using System.Text; using PHP.Core; using System.Diagnostics; namespace PHP.Library { /// /// Implements the INI file parsing functionality (see the parse_ini_file PHP function). /// /// /// The parser is implemented by hand using the recursive descent (LL) approach. /// Note (jakub): can be implemented using regular expressions ? /// public sealed class PhpIniParser { /// /// Type of sorting. /// public enum ScannerMode { /// Normal scanner mode. [ImplementsConstant("INI_SCANNER_NORMAL")] Normal = 0, /// Raw scanner mode. [ImplementsConstant("INI_SCANNER_RAW")] Raw = 1, }; #region parse_ini_string /// /// Parse a configuration string. /// /// The contents of the ini file being parsed. /// The settings are returned as an associative array on success, and FALSE on failure. [ImplementsFunction("parse_ini_string")] [return: CastToFalse] public static PhpArray ParseString(string ini) { return ParseString(ini, false, 0); } /// /// Parse a configuration string. /// /// The contents of the ini file being parsed. /// By setting the process_sections parameter to TRUE, you get a multidimensional array, with the section names and settings included. The default for process_sections is FALSE /// The settings are returned as an associative array on success, and FALSE on failure. [ImplementsFunction("parse_ini_string")] [return: CastToFalse] public static PhpArray ParseString(string ini, bool processSections) { return ParseString(ini, processSections, 0); } /// /// Parse a configuration string. /// /// The contents of the ini file being parsed. /// By setting the process_sections parameter to TRUE, you get a multidimensional array, with the section names and settings included. The default for process_sections is FALSE /// Can either be INI_SCANNER_NORMAL (default) or INI_SCANNER_RAW. If INI_SCANNER_RAW is supplied, then option values will not be parsed. /// The settings are returned as an associative array on success, and FALSE on failure. [ImplementsFunction("parse_ini_string")] [return: CastToFalse] public static PhpArray ParseString(string ini, bool processSections, int scanner_mode) { if (scanner_mode != (int)ScannerMode.Normal) // TODO: handle value 1 PhpException.ArgumentValueNotSupported("scanner_mode", scanner_mode); if (string.IsNullOrEmpty(ini)) return null; ArrayBuilder builder = new ArrayBuilder(ScriptContext.CurrentContext, processSections); try { // parse the stream and let the builder build the resulting array Parse(ini, builder); } catch (ParseException e) { PhpException.Throw(PhpError.Warning, LibResources.GetString("ini_parse_error", e.LineNumber)); return null; } // return what we have read so far - even if a parse error occurred return builder.Result; } #endregion #region parse_ini_file /// /// Parses an INI-style configuration file. /// /// A file designation (may be a local file path, an URL, or whatever is accepted /// by fopen). /// An array of key-value pairs read from the INI file. /// Parse error (Warning). /// /// Section names and keys are converted to integers if applicable. The parser recognizes special values /// true, on and yes (converted to "1"); and false, off, /// no and none (converted to ""). /// [ImplementsFunction("parse_ini_file")] [return: CastToFalse] public static PhpArray ParseFile(string fileName) { return ParseFile(fileName, false, 0); } /// /// Parses an INI-style configuration file. /// /// A file designation (may be a local file path, an URL, or whatever is accepted /// by fopen). /// If true, the returned array contains nested arrays corresponding /// to individual INI sections. If false, section names are completely disregarded and the returned /// array contains directly key-value pairs from all sections. /// An array of key-value pairs read from the INI file. /// Parse error (Warning). /// /// Section names and keys are converted to integers if applicable. The parser recognizes special values /// true, on and yes (converted to "1"); and false, off, /// no and none (converted to ""). /// [ImplementsFunction("parse_ini_file")] [return: CastToFalse] public static PhpArray ParseFile(string fileName, bool processSections) { return ParseFile(fileName, processSections, 0); } /// /// Parses an INI-style configuration file. /// /// A file designation (may be a local file path, an URL, or whatever is accepted /// by fopen). /// If true, the returned array contains nested arrays corresponding /// to individual INI sections. If false, section names are completely disregarded and the returned /// array contains directly key-value pairs from all sections. /// Can either be INI_SCANNER_NORMAL (default) = 0 or INI_SCANNER_RAW = 1. If INI_SCANNER_RAW is supplied, then option values will not be parsed. /// An array of key-value pairs ( is false) or an array /// of arrays of key-value pairs ( is true). /// Parse error (Warning). /// /// Section names and keys are converted to integers if applicable. The parser recognizes special values /// true, on and yes (converted to "1"); and false, off, /// no and none (converted to ""). /// [ImplementsFunction("parse_ini_file")] [return: CastToFalse] public static PhpArray ParseFile(string fileName, bool processSections, int scanner_mode) { if (scanner_mode != (int)ScannerMode.Normal) // TODO: handle value 1 PhpException.ArgumentValueNotSupported("scanner_mode", scanner_mode); // we're using binary mode because CR/LF stuff should be preserved for multiline values using (PhpStream stream = PhpStream.Open(fileName, "rb", StreamOpenOptions.ReportErrors, StreamContext.Default)) { if (stream == null) return null;//new PhpArray(); ArrayBuilder builder = new ArrayBuilder(ScriptContext.CurrentContext, processSections); try { // parse the stream and let the builder build the resulting array Parse(stream, builder); } catch (ParseException e) { PhpException.Throw(PhpError.Warning, LibResources.GetString("ini_parse_error", e.LineNumber)); return null; } // return what we have read so far - even if a parse error occurred return builder.Result; } } /// /// Parses an INI-style configuration file. /// /// A stream referring to the file to parse. Should be open in binary mode. /// Implementation of the parser callbacks invoked during parsing. /// Parse error. /// or is a null reference. /// Stream is was not opened as binary. public static void Parse(PhpStream stream, IParserCallbacks callbacks) { if (stream == null) throw new ArgumentNullException("stream"); if (!stream.IsBinary) throw new ArgumentException("Stream must be binary"); if (callbacks == null) throw new ArgumentNullException("callbacks"); PhpIniParser parser = new PhpIniParser(stream, callbacks); parser.TopLevel(); } public static void Parse(string ini, IParserCallbacks callbacks) { if (ini == null) throw new ArgumentNullException("ini"); if (callbacks == null) throw new ArgumentNullException("callbacks"); PhpIniParser parser = new PhpIniParser(ini, callbacks); parser.TopLevel(); } #endregion #region IParserCallbacks /// /// Groups together methods that are called back by the parser during parsing. /// public interface IParserCallbacks { /// /// Called when an INI section is encountered. /// /// The section name (without the enclosing brackets). Either a string or /// an integer. void ProcessSection(object sectionName); /// /// Called when an option (i.e. a key-value pair) is encountered. /// /// The key. Either a string or an integer. /// The value. void ProcessOption(object key, string value); /// /// Called when a token, which might possibly denote a constant, should be resolved. /// /// The constant name. /// The constant value. Should be either a string or an integer. Usually, when the /// implementing method is unable to resolve the constant, it simply returns . /// object GetConstantValue(string name); } #endregion #region ArrayBuilder /// /// Provides an array-building implementation of the the parser callbacks. /// /// /// The format of the resulting complies to the parse_ini_file /// return value. /// public class ArrayBuilder : IParserCallbacks { #region Fields and Properties /// /// The resulting array. /// private PhpArray result; /// /// The section currently being processed. /// private PhpArray currentSection; /// /// The used to lookup constants. /// private ScriptContext scriptContext; /// /// A flag that affects the way the is built up. /// /// /// If true, the resulting array contains nested arrays corresponding to individual /// INI sections. If false, section names are completely disregarded and the resulting /// array contains directly key-value pairs from all sections. /// private bool processSections; /// /// Returns the resulting array. /// public PhpArray Result { get { return result; } } #endregion #region Construction /// /// Creates a new . /// /// The used to lookup constants or a null reference. /// If true, the resulting array contains nested arrays /// corresponding to individual INI sections. If false, section names are completely /// disregarded and the resulting array contains directly key-value pairs from all sections. /// is a null reference. public ArrayBuilder(ScriptContext scriptContext, bool processSections) { this.scriptContext = scriptContext; this.processSections = processSections; result = new PhpArray(); currentSection = result; } #endregion #region IParserCallbacks Members /// /// Called when an INI section is encountered. /// public void ProcessSection(object sectionName) { if (processSections) { currentSection = new PhpArray(); result[sectionName] = currentSection; } } /// /// Called when an option (i.e. a key-value pair) is encountered. /// public void ProcessOption(object key, string value) { currentSection[key] = value; } /// /// Called when a token, which might possibly denote a constant, should be resolved. /// public object GetConstantValue(string name) { return scriptContext.GetConstantValue(name, true, true); } #endregion } #endregion #region Tokens /// /// Contains definition of (one-character) tokens that are relevant for INI files. /// internal class Tokens { internal const char BracketOpen = '['; internal const char BracketClose = ']'; internal const char EqualS = '='; internal const char Quote = '"'; internal const char Semicolon = ';'; internal const char Or = '|'; internal const char And = '&'; internal const char Not = '!'; internal const char Neg = '~'; internal const char ParOpen = '('; internal const char ParClose = ')'; internal const char EndOfLine = (char)0; } #endregion #region ParseException /// /// An exception thrown by the parser when an error occurs. /// internal class ParseException : ApplicationException { /// /// Number of the line where the parse error occured. /// private int lineNumber; /// /// Returns the number of the line where the parse error occured. /// public int LineNumber { get { return lineNumber; } } /// /// Creates a new . /// /// Number of the line where the parse error occured. public ParseException(int lineNumber) { this.lineNumber = lineNumber; } } #endregion #region Line getter /// /// Interface for getting next line from the source. /// private abstract class LineGetter { /// /// Get the next line from the source. Every line must ends with "\n". /// /// Next line or null if you reach the end of the source. public abstract string GetLine(); } /// /// Getting next line from the PhpStream. /// private sealed class LineGetterStream:LineGetter { /// /// A stream representing the input INI file, instead of text. /// private PhpStream stream; public LineGetterStream(PhpStream stream) { if (stream == null) throw new ArgumentNullException("stream"); this.stream = stream; } public override string GetLine() { if (stream.Eof) return null; return stream.ReadLine(-1, null); } } /// /// Getting next line from the string. /// private sealed class LineGetterString:LineGetter { private string[] lines; private int nextLineIndex = 0; public LineGetterString(string text) { if (text == null) lines = ArrayUtils.EmptyStrings; else lines = text.Split(new char[] { '\n' }); } public override string GetLine() { if (nextLineIndex < lines.Length) return lines[nextLineIndex++] + "\n"; else return null; } } #endregion #region Fields /// /// Object getting next lines of INI source. /// private LineGetter lineGetter; /// /// Implementation of the parser callbacks invoked during parsing. /// private IParserCallbacks callbacks; /// /// The line read from that is currently being processed. /// private string line; /// /// Current line number. /// private int lineNumber = 0; /// /// The position within the current (0-based column). /// /// /// line[linePos] denotes a lookahead symbol. /// private int linePos; #endregion #region Construction /// /// Creates a new operating on a given input stream. /// /// The input stream. Should be open in binary mode. /// Implementation of the parser callbacks invoked during parsing. private PhpIniParser(PhpStream stream, IParserCallbacks callbacks) { this.lineGetter = new LineGetterStream(stream); this.callbacks = callbacks; } /// /// Creates a new operating on a given input stream. /// /// The input INI file content. /// Implementation of the parser callbacks invoked during parsing. private PhpIniParser(string text, IParserCallbacks callbacks) { this.lineGetter = new LineGetterString(text); this.callbacks = callbacks; } #endregion #region Parser helpers: LoadLine, LookAhead, Consume*, AddValue /// /// Loads the next line from , and updates and . /// /// true if a line was successfully loaded, false if end-of-file was reached. private bool LoadLine() { line = lineGetter.GetLine(); linePos = 0; if (line != null) { lineNumber++; return true; } else { return false; } } /// /// Returns the lookahead symbol which is either line[linePos] or /// if there are no more characters in the current line. /// private char LookAhead { get { return (linePos < line.Length ? line[linePos] : Tokens.EndOfLine); } } /// /// Returns the lookahead symbol and cosumes it, i.e. advances the . /// /// /// The original lookahead (before advancing). private char Consume() { return (linePos < line.Length ? line[linePos++] : Tokens.EndOfLine); } /// /// Consumes the current lookahead symbol and compares it to a given character. /// /// The character that is expected as the current lookahead symbol. If the characters /// do not match, a is thrown. private void Consume(char ch) { if (Consume() != ch) throw new ParseException(lineNumber); } /// /// Keeps consuming the current lookahead as long as it is categorized as a white space. /// private void ConsumeWhiteSpace() { while (linePos < line.Length && Char.IsWhiteSpace(line, linePos)) linePos++; } /// /// Adds a key-value pair into a . If a value with the same key already exists, /// a nested containing all values with this key is created. /// /// The array to add the pair to. /// The key. /// The value. private static void AddValue(PhpArray array, object key, string value) { if (!array.Contains(key)) array.Add(key, value); else { object old_value = array[key]; PhpArray nested_array = old_value as PhpArray; if (nested_array != null) nested_array.Add(value); else { nested_array = new PhpArray(); nested_array.Add(old_value); nested_array.Add(value); array[key] = nested_array; } } } #endregion #region Conversions /// /// Converts a substring of the current into the array key representing a section name /// (the interior of [ ]) or an option name (on the left of =). /// /// The start index of the substring (within the current ). /// The length of the substring. /// The key found at the position given by and . /// This may be either a string or an integer (decimal, hexadecimal and octal numbers are decoded). private object SubstringToKey(int start, int length) { Debug.Assert(start >= 0 && start <= line.Length && (start + length) <= line.Length && length > 0); int radix = 10; if (line[start] == '0') { if (length > 2 && (line[start + 1] == 'x' || line[start + 1] == 'X')) { radix = 16; // skip the "0x" prefix start += 2; length -= 2; } else radix = 8; } int pos = start; int res = (int)Core.Convert.SubstringToLongStrict(line, length, radix, Int32.MaxValue, ref pos); if (pos == start + length) return res; else return line.Substring(start, length); } /// /// Converts a substring of the current into the array value representing an option /// value (on the right of =). /// /// The start index of the substring (within the current ). /// The length of the substring. /// The value found at the position given by and . /// This may be either a string or an integer (decimal numbers are decoded and constants are looked up). /// private object SubstringToValue(int start, int length) { Debug.Assert(start >= 0 && start <= line.Length && (start + length) <= line.Length); if (length == 0) return String.Empty; // check for decimal number int pos = start; long res = Core.Convert.SubstringToLongInteger(line, length, ref pos); if (pos == start + length) { int ires = unchecked((int)res); if (ires == res) return ires; // is Int32 big enough? return res; } string val = line.Substring(start, length); // check for predefined "INI constants" switch (val.ToUpper()) { case "ON": case "YES": return "1"; case "OFF": case "NO": case "NONE": return String.Empty; default: { object obj = callbacks.GetConstantValue(val); if (obj is int) return obj; else return Core.Convert.ObjectToString(obj); } } } #endregion #region Parser /// /// Top level parsing method. /// /// /// Reads and processes lines from the input stream until the end-of-file is reached. Invokes the /// during parsing. /// private void TopLevel() { StringBuilder val = null; bool multiline = false; object key = null; while (LoadLine()) { if (multiline) { // this is the next line of a multi-line value val.Append(Value(ref multiline)); // it is the last line of multi-line value, save the entire value if (!multiline) callbacks.ProcessOption(key, val.ToString()); } else { ConsumeWhiteSpace(); char la = LookAhead; // check for end-of-line and comment (line starting with ;) if (la == Tokens.EndOfLine || la == Tokens.Semicolon) continue; if (la == Tokens.BracketOpen) { // this line denotes a section callbacks.ProcessSection(Section()); } else if ((key = Key()) != null) { // this line denotes an ordinary entry string s = Value(ref multiline); if (!multiline) callbacks.ProcessOption(key, s); else val = new StringBuilder(s); } } } // check for an unterminated multi-line value if (multiline) throw new ParseException(lineNumber); } /// /// Parses an INI section ([<section_name><whitespace>]<whitespace>). /// /// The section name (either a string or an integer). private object Section() { Consume(Tokens.BracketOpen); //ConsumeWhiteSpace(); int start = linePos, end = linePos; char ch; while ((ch = Consume()) != Tokens.BracketClose) { if (ch == Tokens.EndOfLine) throw new ParseException(lineNumber); // remember the last non-whitespace /*if (!Char.IsWhiteSpace(ch)) */end = linePos; // include white-spaces too, as it is in PHP 5.3.1 } ConsumeWhiteSpace(); // section name must not be empty and we must have reached end-of-line by now if (end == start || (LookAhead != Tokens.EndOfLine && LookAhead != Tokens.Semicolon)) { throw new ParseException(lineNumber); } return SubstringToKey(start, end - start); } /// /// Parses an INI option name (<option_name><whitespace>=). /// /// The option name (either a string or an integer). private object Key() { int start = linePos, end = linePos, whitespace = start - 1; char ch; while ((ch = Consume()) != Tokens.EqualS) { if (ch == Tokens.EndOfLine || ch == Tokens.Semicolon) return null; // remember the last non-whitespace and whitespace if (!Char.IsWhiteSpace(ch)) { end = linePos; if (linePos == (whitespace + 1)) // new word starts, ignore the words before start = linePos - 1; } else { whitespace = linePos; } } // option name must not be empty if (end == start) throw new ParseException(lineNumber); return SubstringToKey(start, end - start); } /// /// Parses an INI option value ("<quoted_value> or <expression>). /// /// If true, next line of a multi-line value is expected; if false /// otherwise. Receives true if more lines should follow and false if this was the last one /// or the only one line. /// The option value (always a string). If receives true, /// the return values is just a fragment and should be concatenated with subsequent return values to /// obtain the entire option value. private string Value(ref bool multiline) { if (multiline) return QuotedValue(out multiline); // this is the first line (just after the =) ConsumeWhiteSpace(); if (LookAhead == Tokens.Quote) { // quoted string starts here Consume(); return QuotedValue(out multiline); } // no quotes - let's parse an expression string result = Core.Convert.ObjectToString(Expression()); // must have reached end-of-line if (LookAhead != Tokens.EndOfLine && LookAhead != Tokens.Semicolon) throw new ParseException(lineNumber); return result; } /// /// Parses an INI option quoted value (<option_value> or /// <option_value>"<whitespace>). /// /// Receives true if this value consists of more lines that /// should follow (i.e. right quote not found yet), false otherwise. /// The option value (always a string). If receives /// true, the return values is just a fragment and should be concatenated with subsequent /// return values to obtain the entire option value. private string QuotedValue(out bool moreLinesFollow) { char ch; int start = linePos; // reading next line of a multiline quoted string while ((ch = Consume()) != Tokens.EndOfLine) { if (ch == Tokens.Quote) { // right quote moreLinesFollow = false; int end = linePos - 1; ConsumeWhiteSpace(); if (LookAhead != Tokens.EndOfLine && LookAhead != Tokens.Semicolon) { throw new ParseException(lineNumber); } return line.Substring(start, end - start); } } // the string shall continue on the following line moreLinesFollow = true; return (start == 0 ? line : line.Substring(start)); } /// /// Parses an INI option value expression (<literal>(&/|<literal>)*). /// /// The expression value (either a string or an integer). private object Expression() { object result = Literal(); while (LookAhead != Tokens.EndOfLine && LookAhead != Tokens.Semicolon && LookAhead != Tokens.ParClose) { // expecting either & or | char op = Consume(); if (op != Tokens.And && op != Tokens.Or) throw new ParseException(lineNumber); // both operands must be converted to an integer int lhs = Core.Convert.ObjectToInteger(result); int rhs = Core.Convert.ObjectToInteger(Literal()); // perform the operation eagerly (like a stupid calculator) result = (op == Tokens.And ? (int)(lhs & rhs) : (int)(lhs | rhs)); } return result; } /// /// Parses an INI option value literal (<whitespace>(<expression>)<whitespace>, /// <whitespace>!<literal>, <whitespace>~<literal> or /// <whitespace><literal_value><whitespace>). /// /// The literal value (either a string or an integer). private object Literal() { ConsumeWhiteSpace(); switch (LookAhead) { case Tokens.ParOpen: { // literal ::= ( expression ) Consume(); object result = Expression(); Consume(Tokens.ParClose); ConsumeWhiteSpace(); return result; } case Tokens.Not: { // literal ::= ! literal Consume(); return (Core.Convert.ObjectToBoolean(Literal()) ? "0" : "1"); } case Tokens.Neg: { // literal ::= ~ literal Consume(); return (int)~Core.Convert.ObjectToInteger(Literal()); } default: { // literal ::= alphanum int start = linePos, end = start; while (true) { char la = LookAhead; switch (la) { case Tokens.EqualS: case Tokens.Quote: case Tokens.Or: case Tokens.And: case Tokens.Not: case Tokens.Neg: case Tokens.ParOpen: case Tokens.ParClose: case Tokens.Semicolon: case Tokens.EndOfLine: { return SubstringToValue(start, end - start); } default: { Consume(); // remember the last non-whitespace if (!Char.IsWhiteSpace(la)) end = linePos; break; } } } } } } } #endregion } ================================================ FILE: Source/ClassLibrary/PhpJson.cs ================================================ /* Copyright (c) 2004-2010 Tomas Matousek, Jakub Misek. The use and distribution terms for this software are contained in the file named License.txt, which can be found in the root of the Phalanger distribution. By using this software in any fashion, you are agreeing to be bound by the terms of this license. You must not remove this notice from this software. */ /* * TODO: * * JSON_NUMERIC_CHECK (integer) * Encodes numeric strings as numbers. Available since PHP 5.3.3. * * JSON_BIGINT_AS_STRING (integer) * Available since PHP 5.4.0. * * JSON_PRETTY_PRINT (integer) * Use whitespace in returned data to format it. Available since PHP 5.4.0. * * JSON_UNESCAPED_SLASHES (integer) * Don't escape /. Available since PHP 5.4.0. * */ using System; using System.IO; using System.Text; using System.Collections.Generic; using System.Globalization; using System.Security; using System.Security.Permissions; using System.Runtime.Serialization; using System.Runtime.Serialization.Formatters; using PHP.Core; using PHP.Core.Reflection; using PHP.Library; #if SILVERLIGHT using PHP.CoreCLR; #else using System.Web; using System.Runtime.Serialization.Formatters.Binary; using System.Diagnostics; #endif namespace PHP.Library { #region JSON PHP API /// /// Classes implementing Countable can be used with the count() function. /// [ImplementsType] public interface JsonSerializable { /// /// Specify data which should be serialized to JSON. /// /// Current provided by Phalanger. /// Return data which should be serialized by json_encode(), see . [ImplementsMethod] [AllowReturnValueOverride] object jsonSerialize(ScriptContext context); } /// /// JSON encoding/decoding functions. /// /// [ImplementsExtension(LibraryDescriptor.ExtJson)] public static class PhpJson { #region Constants /// /// Values returned by json_last_error function. /// public enum JsonLastError : int { /// /// No error has occurred /// [ImplementsConstant("JSON_ERROR_NONE")] JSON_ERROR_NONE = 0, /// /// The maximum stack depth has been exceeded /// [ImplementsConstant("JSON_ERROR_DEPTH")] JSON_ERROR_DEPTH = 1, /// /// Occurs with underflow or with the modes mismatch. /// [ImplementsConstant("PHP_JSON_ERROR_STATE_MISMATCH")] PHP_JSON_ERROR_STATE_MISMATCH = 2, /// /// Control character error, possibly incorrectly encoded /// [ImplementsConstant("JSON_ERROR_CTRL_CHAR")] JSON_ERROR_CTRL_CHAR = 3, /// /// Syntax error /// [ImplementsConstant("JSON_ERROR_SYNTAX")] JSON_ERROR_SYNTAX = 4, /// /// /// [ImplementsConstant("JSON_ERROR_UTF8")] JSON_ERROR_UTF8 = 5, } /// /// Options given to json_encode function. /// public enum JsonEncodeOptions { /// /// No options specified. /// Default = 0, /// /// All < and > are converted to \u003C and \u003E. /// [ImplementsConstant("JSON_HEX_TAG")] JSON_HEX_TAG = 1, /// /// All &s are converted to \u0026. /// [ImplementsConstant("JSON_HEX_AMP")] JSON_HEX_AMP = 2, /// /// All ' are converted to \u0027. /// [ImplementsConstant("JSON_HEX_APOS")] JSON_HEX_APOS = 4, /// /// All " are converted to \u0022. /// [ImplementsConstant("JSON_HEX_QUOT")] JSON_HEX_QUOT = 8, /// /// Outputs an object rather than an array when a non-associative array is used. Especially useful when the recipient of the output is expecting an object and the array is empty. /// [ImplementsConstant("JSON_FORCE_OBJECT")] JSON_FORCE_OBJECT = 16, /// /// Encodes numeric strings as numbers. /// [ImplementsConstant("JSON_NUMERIC_CHECK")] JSON_NUMERIC_CHECK = 32, } /// /// Options given to json_decode function. /// public enum JsonDecodeOptions { Default = 0, /// /// Big integers represent as strings rather than floats. /// [ImplementsConstant("JSON_BIGINT_AS_STRING")] JSON_BIGINT_AS_STRING = 1, } #endregion #region json_encode, json_decode, json_last_error (CLR only) #if !SILVERLIGHT [ImplementsFunction("json_encode")] public static PhpBytes Serialize(object value) { return PhpJsonSerializer.Default.Serialize(value, UnknownTypeDesc.Singleton); } [ImplementsFunction("json_encode")] public static PhpBytes Serialize(object value, JsonEncodeOptions options) { return new PhpJsonSerializer( new JsonFormatter.EncodeOptions() { ForceObject = (options & JsonEncodeOptions.JSON_FORCE_OBJECT) != 0, HexAmp = (options & JsonEncodeOptions.JSON_HEX_AMP) != 0, HexApos = (options & JsonEncodeOptions.JSON_HEX_APOS) != 0, HexQuot = (options & JsonEncodeOptions.JSON_HEX_QUOT) != 0, HexTag = (options & JsonEncodeOptions.JSON_HEX_TAG) != 0, NumericCheck = (options & JsonEncodeOptions.JSON_NUMERIC_CHECK) != 0, }, new JsonFormatter.DecodeOptions() ).Serialize(value, UnknownTypeDesc.Singleton); } [ImplementsFunction("json_decode")] public static PhpReference Unserialize(PhpBytes json) { if (json == null) return null; return PhpJsonSerializer.Default.Deserialize(json, UnknownTypeDesc.Singleton); } [ImplementsFunction("json_decode")] public static PhpReference Unserialize(PhpBytes json, bool assoc /* = false*/) { return Unserialize(json, assoc, 512, JsonDecodeOptions.Default); } [ImplementsFunction("json_decode")] public static PhpReference Unserialize(PhpBytes json, bool assoc /* = false*/ , int depth /* = 512*/) { return Unserialize(json, assoc, depth, JsonDecodeOptions.Default); } /// /// /// /// /// When TRUE, returned object's will be converted into associative array s. /// User specified recursion depth. /// /// [ImplementsFunction("json_decode")] public static PhpReference Unserialize(PhpBytes json, bool assoc /* = false*/ , int depth /* = 512*/ , JsonDecodeOptions options /* = 0 */) { if (json == null) return null; return new PhpJsonSerializer( new JsonFormatter.EncodeOptions(), new JsonFormatter.DecodeOptions() { Assoc = assoc, Depth = depth, BigIntAsString = (options & JsonDecodeOptions.JSON_BIGINT_AS_STRING) != 0 } ).Deserialize(json, UnknownTypeDesc.Singleton); } [ImplementsFunction("json_last_error")] public static int GetLastError() { JsonLastError err; var ctx = ScriptContext.CurrentContext; if (ctx.Properties.TryGetProperty(out err) == false) err = JsonLastError.JSON_ERROR_NONE; return (int)err; } #endif #endregion } #endregion #region JsonFormatter /// /// Implements a JSON formatter (serializer). /// public sealed class JsonFormatter : IFormatter { #region Tokens /// /// Contains definition of (one-character) tokens that constitute PHP serialized data. /// internal class Tokens { internal const char ObjectOpen = '{'; internal const char ObjectClose = '}'; internal const char ItemsSeparator = ','; internal const char PropertyKeyValueSeparator = ':'; internal const char Quote = '"'; internal const char Escape = '\\'; internal const string EscapedNewLine = @"\n"; internal const string EscapedCR = @"\r"; internal const string EscapedTab = @"\t"; internal const string EscapedBackspace = @"\b"; internal const string EscapedQuote = "\\\""; internal const string EscapedReverseSolidus = @"\\"; internal const string EscapedSolidus = @"\/"; internal const string EscapedFormFeed = @"\f"; internal const string EscapedUnicodeChar = @"\u"; // 4-digit number follows internal const char ArrayOpen = '['; internal const char ArrayClose = ']'; internal const string NullLiteral = "null"; internal const string TrueLiteral = "true"; internal const string FalseLiteral = "false"; } #endregion /// /// Implements the serialization functionality. Serializes an object, or graph of objects /// with the given root to the provided . /// internal class ObjectWriter { #region Fields and Properties private readonly ScriptContext/*!*/ context; /// /// The stream writer to write serialized data to. /// private readonly StreamWriter/*!*/ writer; /// /// Options. /// private readonly EncodeOptions/*!*/ encodeOptions; /// /// The encoding to be used when writing and reading the serialization stream. /// private Encoding encoding; /// /// Stack of objects being currently serialized. Used to avoid stack overflow and to properly outputs "recursion_detected" warning. /// private List recursionStack = null; #endregion #region Construction /// /// Creates a new with a given . /// /// The current . /// The writer to write serialized data to. /// Encoding options. /// Encoding used for reading PhpBytes. internal ObjectWriter(ScriptContext/*!*/ context, StreamWriter/*!*/ writer, EncodeOptions/*!*/encodeOptions, Encoding encoding) { Debug.Assert(context != null && writer != null && encodeOptions != null); this.context = context; this.writer = writer; this.encodeOptions = encodeOptions; this.encoding = encoding; } #endregion #region Recursion /// /// Push currently serialized array or object to the stack to prevent recursion. /// /// /// private bool PushObject(object/*!*/obj) { Debug.Assert(obj != null); if (recursionStack == null) recursionStack = new List(8); else { // check recursion int hits = 0; for (int i = 0; i < recursionStack.Count; i++) if (recursionStack[i] == obj) hits++; if (hits >= 2) { PhpException.Throw(PhpError.Warning, LibResources.GetString("recursion_detected")); return false; } } recursionStack.Add(obj); return true; } /// /// Pop the serialized object from the stack. /// private void PopObject() { Debug.Assert(recursionStack != null); recursionStack.RemoveAt(recursionStack.Count - 1); } #endregion #region Serialize, Write* /// /// Serializes an object or graph of objects to . /// /// The object (graph) to serialize. internal void Serialize(object graph) { if (graph == null) { WriteNull(); return; } switch (Type.GetTypeCode(graph.GetType())) { case TypeCode.Boolean: WriteBoolean((bool)graph); break; case TypeCode.Byte: case TypeCode.SByte: case TypeCode.Int16: case TypeCode.Int32: case TypeCode.Int64: case TypeCode.UInt16: case TypeCode.UInt32: case TypeCode.UInt64: case TypeCode.Decimal: writer.Write(graph.ToString()); break; case TypeCode.Single: writer.Write(graph.ToString()); break; case TypeCode.Double: writer.Write((double)graph); break; case TypeCode.Char: WriteString(graph.ToString()); break; case TypeCode.String: WriteString((string)graph); break; case TypeCode.Object: { PhpArray array; if ((array = graph as PhpArray) != null) { if (PushObject(graph)) { WriteArray(array); PopObject(); } else WriteNull(); break; } DObject obj; JsonSerializable jsonserializeble; if ((jsonserializeble = graph as JsonSerializable) != null) { var retval = jsonserializeble.jsonSerialize(context); if ((obj = (retval as DObject)) != null) // Handle the case where jsonSerialize() returns itself. WriteDObject(obj); else Serialize(retval); break; } if ((obj = graph as DObject) != null) { if (PushObject(graph)) { WriteDObject(obj); PopObject(); } else WriteNull(); break; } PhpReference reference; if ((reference = graph as PhpReference) != null) { Serialize(reference.Value); break; } PhpBytes bytes; if ((bytes = graph as PhpBytes) != null) { WriteString(((IPhpConvertible)bytes).ToString()); break; } PhpString str; if ((str = graph as PhpString) != null) { WriteString(str.ToString()); break; } if (graph is PhpResource) { WriteUnsupported(PhpResource.PhpTypeName); break; } goto default; } default: WriteUnsupported(graph.GetType().FullName); break; } } /// /// Serializes null and throws an exception. /// /// private void WriteUnsupported(string TypeName) { PhpException.Throw(PhpError.Warning, LibResources.GetString("serialization_unsupported_type", TypeName)); WriteNull(); } /// /// Serializes Null. /// private void WriteNull() { writer.Write(Tokens.NullLiteral); } /// /// Serializes a bool value. /// /// The value. private void WriteBoolean(bool value) { writer.Write(value ? Tokens.TrueLiteral : Tokens.FalseLiteral); } #region encoding strings /// /// Determines if given character is printable character. Otherwise it must be encoded. /// /// /// private static bool CharIsPrintable(char c) { return (c <= 0x7f) && // ASCII (!char.IsControl(c)) && // not control (!(c >= 9 && c <= 13)); // not BS, HT, LF, Vertical Tab, Form Feed, CR } /// /// Determines if given character should be encoded. /// /// /// private bool CharShouldBeEncoded(char c) { switch (c) { case '\n': case '\r': case '\t': case '/': case Tokens.Escape: case '\b': case '\f': case Tokens.Quote: return true; case '\'': return encodeOptions.HexApos; case '<': return encodeOptions.HexTag; case '>': return encodeOptions.HexTag; case '&': return encodeOptions.HexAmp; default: return !CharIsPrintable(c); } } /// /// Convert 16b character into json encoded character. /// /// The full string to be encoded. /// The index of character to be encoded. Can be increased if more characters are processed. /// The encoded part of string, from value[i] to value[i after method call] private string EncodeStringIncremental(string value, ref int i) { char c = value[i]; switch (c) { case '\n': return (Tokens.EscapedNewLine); case '\r': return (Tokens.EscapedCR); case '\t': return (Tokens.EscapedTab); case '/': return (Tokens.EscapedSolidus); case Tokens.Escape: return (Tokens.EscapedReverseSolidus); case '\b': return (Tokens.EscapedBackspace); case '\f': return (Tokens.EscapedFormFeed); case Tokens.Quote: return (encodeOptions.HexQuot ? (Tokens.EscapedUnicodeChar + "0022") : Tokens.EscapedQuote); case '\'': return (encodeOptions.HexApos ? (Tokens.EscapedUnicodeChar + "0027") : "'"); case '<': return (encodeOptions.HexTag ? (Tokens.EscapedUnicodeChar + "003C") : "<"); case '>': return (encodeOptions.HexTag ? (Tokens.EscapedUnicodeChar + "003E") : ">"); case '&': return (encodeOptions.HexAmp ? (Tokens.EscapedUnicodeChar + "0026") : "&"); default: { if (CharIsPrintable(c)) { int start = i++; for (; i < value.Length && !CharShouldBeEncoded(value[i]); ++i) ; return value.Substring(start, (i--) - start); // accumulate characters, mostly it is entire string value (faster) } else { return (Tokens.EscapedUnicodeChar + ((int)c).ToString("X4")); } } } } #endregion /// /// Serializes JSON string. /// /// The string. private void WriteString(string value) { if (encodeOptions.NumericCheck) { int i; long l; double d; var result = PHP.Core.Convert.StringToNumber(value, out i, out l, out d); if ((result & Core.Convert.NumberInfo.IsNumber) != 0) { if ((result & Core.Convert.NumberInfo.Integer) != 0) writer.Write(i.ToString()); if ((result & Core.Convert.NumberInfo.LongInteger) != 0) writer.Write(l.ToString()); if ((result & Core.Convert.NumberInfo.Double) != 0) writer.Write(d.ToString()); return; } } StringBuilder strVal = new StringBuilder(value.Length + 2); strVal.Append(Tokens.Quote); for (int i = 0; i < value.Length; ++i) { strVal.Append(EncodeStringIncremental(value, ref i)); } strVal.Append(Tokens.Quote); writer.Write(strVal.ToString()); } #region formatting JSON objects / arrays private void WriteJsonObject(IEnumerable> items) { writer.Write(Tokens.ObjectOpen); bool bFirst = true; foreach (var x in items) { if (bFirst) bFirst = false; else writer.Write(Tokens.ItemsSeparator); WriteString(x.Key); writer.Write(Tokens.PropertyKeyValueSeparator); Serialize(x.Value); } writer.Write(Tokens.ObjectClose); } private void WriteJsonArray(IEnumerable items) { writer.Write(Tokens.ArrayOpen); bool bFirst = true; foreach (var x in items) { if (bFirst) bFirst = false; else writer.Write(Tokens.ItemsSeparator); Serialize(x); } writer.Write(Tokens.ArrayClose); } private IEnumerable> JsonObjectProperties(PhpArray/*!*/value) { foreach (var x in value) yield return new KeyValuePair(x.Key.ToString(), x.Value); } private IEnumerable> JsonObjectProperties(DObject/*!*/value, bool avoidPicName) { foreach (KeyValuePair pair in Serialization.EnumerateSerializableProperties(value)) { if (avoidPicName && pair.Key == __PHP_Incomplete_Class.ClassNameFieldName) { // skip the __PHP_Incomplete_Class_Name field continue; } yield return pair; } } #endregion /// /// Serializes a . /// /// The array. private void WriteArray(PhpArray value) { if (encodeOptions.ForceObject || (value.StringCount > 0 || value.MaxIntegerKey + 1 != value.IntegerCount)) WriteJsonObject(JsonObjectProperties(value)); else WriteJsonArray(value.Values); } /// /// Serializes a . /// /// The object. private void WriteDObject(DObject value) { __PHP_Incomplete_Class pic; // write out properties WriteJsonObject(JsonObjectProperties(value, (pic = value as __PHP_Incomplete_Class) != null && pic.__PHP_Incomplete_Class_Name.IsSet)); } #endregion } /// /// Implements the deserialization functionality. Deserializes the data on the provided /// and reconstitutes the graph of objects. /// internal class ObjectReader { #region Fields and Properties private readonly ScriptContext/*!*/ context; /// /// The stream reader to read serialized data from. /// private readonly StreamReader/*!*/ reader; /// /// Decoding options. /// private readonly DecodeOptions/*!*/decodeOptions; #endregion #region Construction /// /// Creates a new with a given . /// /// The current . /// The reader to reader serialized data from. /// internal ObjectReader(ScriptContext/*!*/ context, StreamReader/*!*/ reader, DecodeOptions/*!*/decodeOptions) { Debug.Assert(context != null && reader != null && decodeOptions != null); this.context = context; this.reader = reader; this.decodeOptions = decodeOptions; } #endregion /// /// De-serializes the data is and reconstitutes the graph of objects. /// /// The top object of the deserialized graph. Null in case of error. internal object Deserialize() { context.Properties.RemoveProperty(); var scanner = new JsonScanner(reader, decodeOptions); var parser = new Json.Parser(context, decodeOptions) { Scanner = scanner }; try { if (!parser.Parse()) throw new Exception("Syntax error"); } catch (Exception) { context.Properties.SetProperty(PhpJson.JsonLastError.JSON_ERROR_SYNTAX); return null; } // return parser.Result; } } #region Fields and properties /// /// Serialization security permission demanded in . /// private static SecurityPermission serializationPermission = new SecurityPermission(SecurityPermissionFlag.SerializationFormatter); /// /// The encoding to be used when writing and reading the serialization stream. /// private Encoding encoding; /// /// Gets or sets the encoding to be used when writing and reading the serialized stream. /// public Encoding Encoding { get { return encoding; } set { encoding = (value ?? new ASCIIEncoding()); } } /// /// Gets or sets the serialization binder that performs type lookups during deserialization. /// public SerializationBinder Binder { get { return null; } set { throw new NotSupportedException(LibResources.GetString("serialization_binder_unsupported")); } } /// /// Gets or sets the streaming context used for serialization and deserialization. /// public StreamingContext Context { get { return new StreamingContext(StreamingContextStates.Persistence); } set { throw new NotSupportedException(LibResources.GetString("streaming_context_unsupported")); } } /// /// Gets or sets the surrogate selector used by the current formatter. /// public ISurrogateSelector SurrogateSelector { get { return null; } set { throw new NotSupportedException(LibResources.GetString("surrogate_selector_unsupported")); } } #endregion #region Options /// /// Encode (serialize) options. All false. /// public class EncodeOptions { public bool HexTag = false, HexAmp = false, HexApos = false, HexQuot = false, ForceObject = false, NumericCheck = false; } /// /// Decode (unserialize) options. /// public class DecodeOptions { public bool BigIntAsString = false; /// /// When TRUE, returned object s will be converted into associative array s. /// public bool Assoc = false; /// /// User specified recursion depth. /// public int Depth = 512; } private readonly EncodeOptions encodeOptions; private readonly DecodeOptions decodeOptions; #endregion #region Construction ///// ///// Creates a new with and ///// default . ///// //public JsonFormatter() // :this(new ASCIIEncoding(), new EncodeOptions(), new DecodeOptions()) //{ //} /// /// Creates a new with a given and /// default . /// /// The encoding to be used when writing and reading the serialization stream. /// Options used to encode the data stream. /// Options used to decode the data stream. /// DTypeDesc of the caller's class context if it is known or UnknownTypeDesc if it should be determined lazily. public JsonFormatter(Encoding encoding, EncodeOptions encodeOptions, DecodeOptions decodeOptions, DTypeDesc caller) { // no UTF8 BOM! if (encoding is UTF8Encoding) this.encoding = new UTF8Encoding(false); else this.encoding = (encoding ?? new ASCIIEncoding()); // options this.encodeOptions = encodeOptions; this.decodeOptions = decodeOptions; } #endregion #region Serialize and Deserialize /// /// Serializes an object, or graph of objects with the given root to the provided stream. /// /// The stream where the formatter puts the serialized data. /// The object, or root of the object graph, to serialize. public void Serialize(Stream/*!*/serializationStream, object graph) { if (serializationStream == null) throw new ArgumentNullException("serializationStream"); serializationPermission.Demand(); StreamWriter stream_writer = new StreamWriter(serializationStream, encoding); ObjectWriter object_writer = new ObjectWriter(ScriptContext.CurrentContext, stream_writer, encodeOptions, encoding); try { object_writer.Serialize(graph); } finally { stream_writer.Flush(); } } /// /// Deserializes the data on the provided stream and reconstitutes the graph of objects. /// /// The stream containing the data to deserialize. /// The top object of the deserialized graph. public object Deserialize(Stream/*!*/serializationStream) { if (serializationStream == null) throw new ArgumentNullException("serializationStream"); serializationPermission.Demand(); ScriptContext context = ScriptContext.CurrentContext; ObjectReader object_reader = new ObjectReader(context, new StreamReader(serializationStream, encoding), decodeOptions); return object_reader.Deserialize(); } #endregion } #endregion #region JsonScanner public class JsonScanner : Json.Lexer, PHP.Core.Parsers.GPPG.ITokenProvider { Json.SemanticValueType tokenSemantics; Json.Position tokenPosition; private readonly PHP.Library.JsonFormatter.DecodeOptions/*!*/decodeOptions; public JsonScanner(TextReader/*!*/ reader, PHP.Library.JsonFormatter.DecodeOptions/*!*/decodeOptions) : base(reader) { Debug.Assert(decodeOptions != null); this.decodeOptions = decodeOptions; } #region ITokenProvider Members public Json.SemanticValueType TokenValue { get { return tokenSemantics; } } public Json.Position TokenPosition { get { return tokenPosition; } } public new int GetNextToken() { tokenPosition = new Json.Position(); tokenSemantics = new Json.SemanticValueType(); Json.Tokens token = base.GetNextToken(); switch (token) { case Json.Tokens.STRING_BEGIN: while ((token = base.GetNextToken()) != Json.Tokens.STRING_END) { if (token == Json.Tokens.ERROR || token == Json.Tokens.EOF) throw new Exception("Syntax error, unexpected " + TokenChunkLength.ToString()); } token = Json.Tokens.STRING; tokenSemantics.obj = base.QuotedStringContent; break; case Json.Tokens.INTEGER: case Json.Tokens.DOUBLE: { int i; long l; double d; string numtext = yytext(); switch (PHP.Core.Convert.StringToNumber(numtext, out i, out l, out d) & PHP.Core.Convert.NumberInfo.TypeMask) { case PHP.Core.Convert.NumberInfo.Double: if (decodeOptions.BigIntAsString && token == Json.Tokens.INTEGER) tokenSemantics.obj = numtext; // it was integer, but converted to double because it was too long else tokenSemantics.obj = d; break; case PHP.Core.Convert.NumberInfo.Integer: tokenSemantics.obj = i; break; case PHP.Core.Convert.NumberInfo.LongInteger: tokenSemantics.obj = l; break; default: tokenSemantics.obj = numtext; break; } } break; } return (int)token; } public void ReportError(string[] expectedTokens) { } #endregion } #endregion } namespace PHP.Library.Json { public partial class Lexer { private char Map(char c) { return (c > SByte.MaxValue) ? 'a' : c; } } } ================================================ FILE: Source/ClassLibrary/PhpTokenizer.cs ================================================ /* Copyright (c) 2005-2006 Tomas Matousek. The use and distribution terms for this software are contained in the file named License.txt, which can be found in the root of the Phalanger distribution. By using this software in any fashion, you are agreeing to be bound by the terms of this license. You must not remove this notice from this software. */ using System; using System.IO; using PHP.Core; using PHP.Core.Parsers; namespace PHP.Library { using CoreTokens = PHP.Core.Parsers.Tokens; /// /// Provides functions and constant related to PHP tokenizer. /// [ImplementsExtension(LibraryDescriptor.ExtTokenizer)] public static class PhpTokenizer { #region Tokens /// public enum Tokens { [ImplementsConstant("T_REQUIRE_ONCE")] T_REQUIRE_ONCE = CoreTokens.T_REQUIRE_ONCE, [ImplementsConstant("T_REQUIRE")] T_REQUIRE = CoreTokens.T_REQUIRE, [ImplementsConstant("T_EVAL")] T_EVAL = CoreTokens.T_EVAL, [ImplementsConstant("T_INCLUDE_ONCE")] T_INCLUDE_ONCE = CoreTokens.T_INCLUDE_ONCE, [ImplementsConstant("T_INCLUDE")] T_INCLUDE = CoreTokens.T_INCLUDE, [ImplementsConstant("T_LOGICAL_OR")] T_LOGICAL_OR = CoreTokens.T_LOGICAL_OR, [ImplementsConstant("T_LOGICAL_XOR")] T_LOGICAL_XOR = CoreTokens.T_LOGICAL_XOR, [ImplementsConstant("T_LOGICAL_AND")] T_LOGICAL_AND = CoreTokens.T_LOGICAL_AND, [ImplementsConstant("T_PRINT")] T_PRINT = CoreTokens.T_PRINT, [ImplementsConstant("T_SR_EQUAL")] T_SR_EQUAL = CoreTokens.T_SR_EQUAL, [ImplementsConstant("T_SL_EQUAL")] T_SL_EQUAL = CoreTokens.T_SL_EQUAL, [ImplementsConstant("T_XOR_EQUAL")] T_XOR_EQUAL = CoreTokens.T_XOR_EQUAL, [ImplementsConstant("T_OR_EQUAL")] T_OR_EQUAL = CoreTokens.T_OR_EQUAL, [ImplementsConstant("T_AND_EQUAL")] T_AND_EQUAL = CoreTokens.T_AND_EQUAL, [ImplementsConstant("T_MOD_EQUAL")] T_MOD_EQUAL = CoreTokens.T_MOD_EQUAL, [ImplementsConstant("T_CONCAT_EQUAL")] T_CONCAT_EQUAL = CoreTokens.T_CONCAT_EQUAL, [ImplementsConstant("T_DIV_EQUAL")] T_DIV_EQUAL = CoreTokens.T_DIV_EQUAL, [ImplementsConstant("T_MUL_EQUAL")] T_MUL_EQUAL = CoreTokens.T_MUL_EQUAL, [ImplementsConstant("T_MINUS_EQUAL")] T_MINUS_EQUAL = CoreTokens.T_MINUS_EQUAL, [ImplementsConstant("T_PLUS_EQUAL")] T_PLUS_EQUAL = CoreTokens.T_PLUS_EQUAL, [ImplementsConstant("T_BOOLEAN_OR")] T_BOOLEAN_OR = CoreTokens.T_BOOLEAN_OR, [ImplementsConstant("T_BOOLEAN_AND")] T_BOOLEAN_AND = CoreTokens.T_BOOLEAN_AND, [ImplementsConstant("T_IS_NOT_IDENTICAL")] T_IS_NOT_IDENTICAL = CoreTokens.T_IS_NOT_IDENTICAL, [ImplementsConstant("T_IS_IDENTICAL")] T_IS_IDENTICAL = CoreTokens.T_IS_IDENTICAL, [ImplementsConstant("T_IS_NOT_EQUAL")] T_IS_NOT_EQUAL = CoreTokens.T_IS_NOT_EQUAL, [ImplementsConstant("T_IS_EQUAL")] T_IS_EQUAL = CoreTokens.T_IS_EQUAL, [ImplementsConstant("T_IS_GREATER_OR_EQUAL")] T_IS_GREATER_OR_EQUAL = CoreTokens.T_IS_GREATER_OR_EQUAL, [ImplementsConstant("T_IS_SMALLER_OR_EQUAL")] T_IS_SMALLER_OR_EQUAL = CoreTokens.T_IS_SMALLER_OR_EQUAL, [ImplementsConstant("T_SR")] T_SR = CoreTokens.T_SR, [ImplementsConstant("T_SL")] T_SL = CoreTokens.T_SL, [ImplementsConstant("T_INSTANCEOF")] T_INSTANCEOF = CoreTokens.T_INSTANCEOF, [ImplementsConstant("T_UNSET_CAST")] T_UNSET_CAST = CoreTokens.T_UNSET_CAST, [ImplementsConstant("T_BOOL_CAST")] T_BOOL_CAST = CoreTokens.T_BOOL_CAST, [ImplementsConstant("T_OBJECT_CAST")] T_OBJECT_CAST = CoreTokens.T_OBJECT_CAST, [ImplementsConstant("T_ARRAY_CAST")] T_ARRAY_CAST = CoreTokens.T_ARRAY_CAST, [ImplementsConstant("T_STRING_CAST")] T_STRING_CAST = CoreTokens.T_STRING_CAST, [ImplementsConstant("T_DOUBLE_CAST")] T_DOUBLE_CAST = CoreTokens.T_DOUBLE_CAST, [ImplementsConstant("T_INT_CAST")] T_INT_CAST = CoreTokens.T_INT_CAST, [ImplementsConstant("T_DEC")] T_DEC = CoreTokens.T_DEC, [ImplementsConstant("T_INC")] T_INC = CoreTokens.T_INC, [ImplementsConstant("T_CLONE")] T_CLONE = CoreTokens.T_CLONE, [ImplementsConstant("T_NEW")] T_NEW = CoreTokens.T_NEW, [ImplementsConstant("T_EXIT")] T_EXIT = CoreTokens.T_EXIT, [ImplementsConstant("T_IF")] T_IF = CoreTokens.T_IF, [ImplementsConstant("T_ELSEIF")] T_ELSEIF = CoreTokens.T_ELSEIF, [ImplementsConstant("T_ELSE")] T_ELSE = CoreTokens.T_ELSE, [ImplementsConstant("T_ENDIF")] T_ENDIF = CoreTokens.T_ENDIF, [ImplementsConstant("T_LNUMBER")] T_LNUMBER = CoreTokens.T_LNUMBER, [ImplementsConstant("T_DNUMBER")] T_DNUMBER = CoreTokens.T_DNUMBER, [ImplementsConstant("T_STRING")] T_STRING = CoreTokens.T_STRING, [ImplementsConstant("T_STRING_VARNAME")] T_STRING_VARNAME = CoreTokens.T_STRING_VARNAME, [ImplementsConstant("T_VARIABLE")] T_VARIABLE = CoreTokens.T_VARIABLE, [ImplementsConstant("T_NUM_STRING")] T_NUM_STRING = CoreTokens.T_NUM_STRING, [ImplementsConstant("T_INLINE_HTML")] T_INLINE_HTML = CoreTokens.T_INLINE_HTML, [ImplementsConstant("T_CHARACTER")] T_CHARACTER = CoreTokens.T_CHARACTER, [ImplementsConstant("T_BAD_CHARACTER")] T_BAD_CHARACTER = CoreTokens.T_BAD_CHARACTER, [ImplementsConstant("T_ENCAPSED_AND_WHITESPACE")] T_ENCAPSED_AND_WHITESPACE = CoreTokens.T_ENCAPSED_AND_WHITESPACE, [ImplementsConstant("T_CONSTANT_ENCAPSED_STRING")] T_CONSTANT_ENCAPSED_STRING = CoreTokens.T_CONSTANT_ENCAPSED_STRING, [ImplementsConstant("T_ECHO")] T_ECHO = CoreTokens.T_ECHO, [ImplementsConstant("T_DO")] T_DO = CoreTokens.T_DO, [ImplementsConstant("T_WHILE")] T_WHILE = CoreTokens.T_WHILE, [ImplementsConstant("T_ENDWHILE")] T_ENDWHILE = CoreTokens.T_ENDWHILE, [ImplementsConstant("T_FOR")] T_FOR = CoreTokens.T_FOR, [ImplementsConstant("T_ENDFOR")] T_ENDFOR = CoreTokens.T_ENDFOR, [ImplementsConstant("T_FOREACH")] T_FOREACH = CoreTokens.T_FOREACH, [ImplementsConstant("T_ENDFOREACH")] T_ENDFOREACH = CoreTokens.T_ENDFOREACH, // [ImplementsConstant("T_DECLARE")] T_DECLARE = CoreTokens.T_DECLARE, // [ImplementsConstant("T_ENDDECLARE")] T_ENDDECLARE = CoreTokens.T_ENDDECLARE, [ImplementsConstant("T_AS")] T_AS = CoreTokens.T_AS, [ImplementsConstant("T_SWITCH")] T_SWITCH = CoreTokens.T_SWITCH, [ImplementsConstant("T_ENDSWITCH")] T_ENDSWITCH = CoreTokens.T_ENDSWITCH, [ImplementsConstant("T_CASE")] T_CASE = CoreTokens.T_CASE, [ImplementsConstant("T_DEFAULT")] T_DEFAULT = CoreTokens.T_DEFAULT, [ImplementsConstant("T_BREAK")] T_BREAK = CoreTokens.T_BREAK, [ImplementsConstant("T_CONTINUE")] T_CONTINUE = CoreTokens.T_CONTINUE, [ImplementsConstant("T_FUNCTION")] T_FUNCTION = CoreTokens.T_FUNCTION, [ImplementsConstant("T_CONST")] T_CONST = CoreTokens.T_CONST, [ImplementsConstant("T_RETURN")] T_RETURN = CoreTokens.T_RETURN, [ImplementsConstant("T_YIELD")] T_YIELD = CoreTokens.T_YIELD, [ImplementsConstant("T_TRY")] T_TRY = CoreTokens.T_TRY, [ImplementsConstant("T_CATCH")] T_CATCH = CoreTokens.T_CATCH, [ImplementsConstant("T_FINALLY")] T_FINALLY = CoreTokens.T_FINALLY, [ImplementsConstant("T_THROW")] T_THROW = CoreTokens.T_THROW, // [ImplementsConstant("T_USE")] T_USE = CoreTokens.T_USE, [ImplementsConstant("T_GLOBAL")] T_GLOBAL = CoreTokens.T_GLOBAL, [ImplementsConstant("T_PUBLIC")] T_PUBLIC = CoreTokens.T_PUBLIC, [ImplementsConstant("T_PROTECTED")] T_PROTECTED = CoreTokens.T_PROTECTED, [ImplementsConstant("T_PRIVATE")] T_PRIVATE = CoreTokens.T_PRIVATE, [ImplementsConstant("T_FINAL")] T_FINAL = CoreTokens.T_FINAL, [ImplementsConstant("T_ABSTRACT")] T_ABSTRACT = CoreTokens.T_ABSTRACT, [ImplementsConstant("T_STATIC")] T_STATIC = CoreTokens.T_STATIC, [ImplementsConstant("T_VAR")] T_VAR = CoreTokens.T_VAR, [ImplementsConstant("T_UNSET")] T_UNSET = CoreTokens.T_UNSET, [ImplementsConstant("T_ISSET")] T_ISSET = CoreTokens.T_ISSET, [ImplementsConstant("T_EMPTY")] T_EMPTY = CoreTokens.T_EMPTY, [ImplementsConstant("T_HALT_COMPILER")] T_HALT_COMPILER = 351, // Unused [ImplementsConstant("T_CLASS")] T_CLASS = CoreTokens.T_CLASS, [ImplementsConstant("T_INTERFACE")] T_INTERFACE = CoreTokens.T_INTERFACE, [ImplementsConstant("T_EXTENDS")] T_EXTENDS = CoreTokens.T_EXTENDS, [ImplementsConstant("T_IMPLEMENTS")] T_IMPLEMENTS = CoreTokens.T_IMPLEMENTS, [ImplementsConstant("T_OBJECT_OPERATOR")] T_OBJECT_OPERATOR = CoreTokens.T_OBJECT_OPERATOR, [ImplementsConstant("T_DOUBLE_ARROW")] T_DOUBLE_ARROW = CoreTokens.T_DOUBLE_ARROW, [ImplementsConstant("T_LIST")] T_LIST = CoreTokens.T_LIST, [ImplementsConstant("T_ARRAY")] T_ARRAY = CoreTokens.T_ARRAY, [ImplementsConstant("T_CLASS_C")] T_CLASS_C = CoreTokens.T_CLASS_C, [ImplementsConstant("T_METHOD_C")] T_METHOD_C = CoreTokens.T_METHOD_C, [ImplementsConstant("T_FUNC_C")] T_FUNC_C = CoreTokens.T_FUNC_C, [ImplementsConstant("T_LINE")] T_LINE = CoreTokens.T_LINE, [ImplementsConstant("T_FILE")] T_FILE = CoreTokens.T_FILE, [ImplementsConstant("T_COMMENT")] T_COMMENT = CoreTokens.T_COMMENT, [ImplementsConstant("T_DOC_COMMENT")] T_DOC_COMMENT = CoreTokens.T_DOC_COMMENT, [ImplementsConstant("T_OPEN_TAG")] T_OPEN_TAG = CoreTokens.T_OPEN_TAG, [ImplementsConstant("T_OPEN_TAG_WITH_ECHO")] T_OPEN_TAG_WITH_ECHO = CoreTokens.T_OPEN_TAG_WITH_ECHO, [ImplementsConstant("T_CLOSE_TAG")] T_CLOSE_TAG = CoreTokens.T_CLOSE_TAG, [ImplementsConstant("T_WHITESPACE")] T_WHITESPACE = CoreTokens.T_WHITESPACE, [ImplementsConstant("T_START_HEREDOC")] T_START_HEREDOC = CoreTokens.T_START_HEREDOC, [ImplementsConstant("T_END_HEREDOC")] T_END_HEREDOC = CoreTokens.T_END_HEREDOC, [ImplementsConstant("T_DOLLAR_OPEN_CURLY_BRACES")] T_DOLLAR_OPEN_CURLY_BRACES = CoreTokens.T_DOLLAR_OPEN_CURLY_BRACES, [ImplementsConstant("T_CURLY_OPEN")] T_CURLY_OPEN = CoreTokens.T_CURLY_OPEN, [ImplementsConstant("T_DOUBLE_COLON")] T_DOUBLE_COLON = CoreTokens.T_DOUBLE_COLON, [ImplementsConstant("T_PAAMAYIM_NEKUDOTAYIM")] T_PAAMAYIM_NEKUDOTAYIM = CoreTokens.T_DOUBLE_COLON, // Duplicate [ImplementsConstant("T_DIR")] T_DIR = CoreTokens.T_DIR, [ImplementsConstant("T_GOTO")] T_GOTO = CoreTokens.T_GOTO, } #endregion #region token_get_all, token_name /// /// Tokenize a source source and returns a list of tokens. /// /// /// Array of items that are either token string values of for unnamed tokens /// or arrays comprising of token id and token string value. /// [ImplementsFunction("token_get_all")] public static PhpArray GetAllTokens(string sourceCode) { PhpArray result = new PhpArray(); Tokenizer tokenizer = new Tokenizer(new StringReader(sourceCode)); for (; ; ) { CoreTokens token = tokenizer.GetNextToken(); if (token == CoreTokens.ERROR) { token = CoreTokens.T_STRING; } if (token == CoreTokens.EOF) break; if (Tokenizer.IsCharToken(token)) { result.Add(tokenizer.TokenText); } else { PhpArray item = new PhpArray(); item.Add((int)token); item.Add(tokenizer.TokenText); result.Add(item); } } return result; } /// /// Gets the name of the PHP grammar token. /// /// The token id. /// The token name. [ImplementsFunction("token_name")] public static string GetTokenName(Tokens token) { return token.ToString(); } #endregion } } ================================================ FILE: Source/ClassLibrary/Process.CLR.cs ================================================ /* Copyright (c) 2005-2006 Tomas Matousek. The use and distribution terms for this software are contained in the file named License.txt, which can be found in the root of the Phalanger distribution. By using this software in any fashion, you are agreeing to be bound by the terms of this license. You must not remove this notice from this software. */ using System; using System.Diagnostics; using System.IO; using System.Threading; using System.Collections; using Process = System.Diagnostics.Process; using PHP.Core; using PHP.Core.Reflection; namespace PHP.Library { #region PhpProcessHandle public class PhpProcessHandle : PhpResource { public Process/*!*/ Process { get { return process; } } private Process/*!*/ process; public string/*!*/ Command { get { return command; } } private string/*!*/ command; internal PhpProcessHandle(Process/*!*/ process, string/*!*/ command) : base("process") { Debug.Assert(process != null && command != null); this.process = process; this.command = command; } protected override void FreeManaged() { process.Close(); base.FreeManaged(); } internal static PhpProcessHandle Validate(PhpResource resource) { PhpProcessHandle result = resource as PhpProcessHandle; if (result == null || !result.IsValid) { PhpException.Throw(PhpError.Warning, LibResources.GetString("invalid_process_resource")); return null; } return result; } } #endregion public static class Processes { #region popen, pclose private sealed class ProcessWrapper : StreamWrapper { public Process/*!*/ process; public ProcessWrapper(Process/*!*/ process) { this.process = process; } public override bool IsUrl { get { return false; } } public override string Label { get { return null; } } public override string Scheme { get { return null; } } public override PhpStream Open(ref string path, string mode, StreamOpenOptions options, StreamContext context) { return null; } } /// /// Starts a process and creates a pipe to its standard input or output. /// /// The command. /// Pipe open mode ("r" or "w"). /// Opened pipe or null on error. [ImplementsFunction("popen")] public static PhpResource OpenPipe(string command, string mode) { if (String.IsNullOrEmpty(mode)) { PhpException.Throw(PhpError.Warning, CoreResources.GetString("invalid_file_mode", mode)); return null; } bool read = mode[0] == 'r'; bool write = mode[0] == 'w' || mode[0] == 'a' || mode[0] == 'x'; if (!read && !write) { PhpException.Throw(PhpError.Warning, CoreResources.GetString("invalid_file_mode", mode)); return null; } Process process = CreateProcessExecutingCommand(ref command, false); if (process == null) return null; process.StartInfo.RedirectStandardOutput = read; process.StartInfo.RedirectStandardInput = write; if (!StartProcess(process, true)) return null; Stream stream = (read) ? process.StandardOutput.BaseStream : process.StandardInput.BaseStream; StreamAccessOptions access = (read) ? StreamAccessOptions.Read : StreamAccessOptions.Write; ProcessWrapper wrapper = new ProcessWrapper(process); PhpStream php_stream = new NativeStream(stream, wrapper, access, String.Empty, StreamContext.Default); return php_stream; } /// /// Closes a pipe and a process opened by . /// /// The pipe handle returned by . /// An exit code of the process. [ImplementsFunction("pclose")] public static int ClosePipe(PhpResource pipeHandle) { PhpStream php_stream = PhpStream.GetValid(pipeHandle); if (php_stream == null) return -1; ProcessWrapper wrapper = php_stream.Wrapper as ProcessWrapper; if (wrapper == null) return -1; var code = CloseProcess(wrapper.process); php_stream.Close(); return code; } #endregion #region proc_open /// /// Opens a process. /// [ImplementsFunction("proc_open")] public static PhpResource Open(string command, PhpArray descriptorSpec, out PhpArray pipes) { return Open(command, descriptorSpec, out pipes, null, null, null); } /// /// Opens a process. /// [ImplementsFunction("proc_open")] public static PhpResource Open(string command, PhpArray descriptorSpec, out PhpArray pipes, string workingDirectory) { return Open(command, descriptorSpec, out pipes, workingDirectory, null, null); } /// /// Opens a process. /// [ImplementsFunction("proc_open")] public static PhpResource Open(string command, PhpArray descriptorSpec, out PhpArray pipes, string workingDirectory, PhpArray envVariables) { return Open(command, descriptorSpec, out pipes, workingDirectory, envVariables, null); } /// /// Starts a process and otpionally redirects its input/output/error streams to specified PHP streams. /// /// /// /// Indexed array where the key represents the descriptor number (0 for STDIN, 1 for STDOUT, 2 for STDERR) /// and the value represents how to pass that descriptor to the child process. /// A descriptor is either an opened file resources or an integer indexed arrays /// containing descriptor name followed by options. Supported descriptors: /// /// array("pipe",{mode})Pipe is opened in the specified mode . /// array("file",{path},{mode})The file is opened in the specified mode. /// /// /// Set to indexed array of file resources corresponding to the current process's ends of created pipes. /// /// /// Working directory. /// /// /// /// Associative array containing following key-value pairs. /// /// "suppress_errors" /// /// /// /// Resource representing the process. /// [ImplementsFunction("proc_open")] public static PhpResource Open(string command, PhpArray descriptors, out PhpArray pipes, string workingDirectory, PhpArray envVariables, PhpArray options) { if (descriptors == null) { PhpException.ArgumentNull("descriptors"); pipes = null; return null; } pipes = new PhpArray(); PhpResource result = Open(command, descriptors, pipes, workingDirectory, envVariables, options); return result; } /// /// Opens a process. /// private static PhpResource Open(string command, PhpArray/*!*/ descriptors, PhpArray/*!*/ pipes, string workingDirectory, PhpArray envVariables, PhpArray options) { if (descriptors == null) throw new ArgumentNullException("descriptors"); if (pipes == null) throw new ArgumentNullException("pipes"); bool bypass_shell = options != null && Core.Convert.ObjectToBoolean(options["bypass_shell"]); // quiet Process process = CreateProcessExecutingCommand(ref command, bypass_shell); if (process == null) return null; if (!SetupStreams(process, descriptors)) return null; if (envVariables != null) SetupEnvironment(process, envVariables); if (workingDirectory != null) process.StartInfo.WorkingDirectory = workingDirectory; bool suppress_errors = false; if (options != null) { suppress_errors = Core.Convert.ObjectToBoolean(options["suppress_errors"]); } if (!StartProcess(process, !suppress_errors)) return null; if (!RedirectStreams(process, descriptors, pipes)) return null; return new PhpProcessHandle(process, command); } private const string CommandLineSplitterPattern = @"(?^""[^""]*""|\S*) *(?.*)?"; private static readonly System.Text.RegularExpressions.Regex/*!*/CommandLineSplitter = new System.Text.RegularExpressions.Regex(CommandLineSplitterPattern, System.Text.RegularExpressions.RegexOptions.Singleline); private static Process CreateProcessExecutingCommand(ref string command, bool bypass_shell) { if (!Execution.MakeCommandSafe(ref command)) return null; Process process = new Process(); if (bypass_shell) { var match = CommandLineSplitter.Match(command); if (match == null || !match.Success) { PhpException.InvalidArgument("command"); return null; } process.StartInfo.FileName = match.Groups["filename"].Value; process.StartInfo.Arguments = match.Groups["arguments"].Value; } else { process.StartInfo.FileName = (Environment.OSVersion.Platform != PlatformID.Win32Windows) ? "cmd.exe" : "command.com"; process.StartInfo.Arguments = "/c " + command; } process.StartInfo.UseShellExecute = false; process.StartInfo.WorkingDirectory = ScriptContext.CurrentContext.WorkingDirectory; return process; } private static bool StartProcess(Process/*!*/ process, bool reportError) { try { process.Start(); return true; } catch (Exception e) { if (reportError) PhpException.Throw(PhpError.Warning, LibResources.GetString("error_starting_process", e.Message)); return false; } } private static void SetupEnvironment(Process/*!*/ process, IDictionary/*!*/ envVariables) { foreach (DictionaryEntry entry in envVariables) { string s = entry.Key as string; if (s != null) process.StartInfo.EnvironmentVariables.Add(s, Core.Convert.ObjectToString(entry.Value)); } } private static bool SetupStreams(Process/*!*/ process, IDictionary/*!*/ descriptors) { foreach (DictionaryEntry entry in descriptors) { // key must be an integer: if (!(entry.Key is int)) { PhpException.Throw(PhpError.Warning, LibResources.GetString("argument_not_integer_indexed_array", "descriptors")); return false; } int desc_no = (int)entry.Key; switch (desc_no) { case 0: process.StartInfo.RedirectStandardInput = true; break; case 1: process.StartInfo.RedirectStandardOutput = true; break; case 2: process.StartInfo.RedirectStandardError = true; break; default: PhpException.Throw(PhpError.Warning, LibResources.GetString("descriptor_unsupported", desc_no)); return false; } } return true; } private static bool RedirectStreams(Process/*!*/ process, PhpArray/*!*/ descriptors, PhpArray/*!*/ pipes) { using (var descriptors_enum = descriptors.GetFastEnumerator()) while (descriptors_enum.MoveNext()) { int desc_no = descriptors_enum.CurrentKey.Integer; StreamAccessOptions access; Stream stream; switch (desc_no) { case 0: stream = process.StandardInput.BaseStream; access = StreamAccessOptions.Write; break; case 1: stream = process.StandardOutput.BaseStream; access = StreamAccessOptions.Read; break; case 2: stream = process.StandardError.BaseStream; access = StreamAccessOptions.Read; break; default: Debug.Fail(null); return false; } object value = PhpVariable.Dereference(descriptors_enum.CurrentValue); PhpResource resource; PhpArray array; if ((array = PhpArray.AsPhpArray(value)) != null) { if (!array.Contains(0)) { // value must be either a resource or an array: PhpException.Throw(PhpError.Warning, LibResources.GetString("descriptor_item_missing_qualifier", desc_no)); return false; } string qualifier = Core.Convert.ObjectToString(array[0]); switch (qualifier) { case "pipe": { // mode is ignored (it's determined by the stream): PhpStream php_stream = new NativeStream(stream, null, access, String.Empty, StreamContext.Default); pipes.Add(desc_no, php_stream); break; } case "file": { if (!array.Contains(1)) { PhpException.Throw(PhpError.Warning, LibResources.GetString("descriptor_item_missing_file_name", desc_no)); return false; } if (!array.Contains(2)) { PhpException.Throw(PhpError.Warning, LibResources.GetString("descriptor_item_missing_mode", desc_no)); return false; } string path = Core.Convert.ObjectToString(array[1]); string mode = Core.Convert.ObjectToString(array[2]); PhpStream php_stream = PhpStream.Open(path, mode, StreamOpenOptions.Empty, StreamContext.Default); if (php_stream == null) return false; if (!ActivePipe.BeginIO(stream, php_stream, access, desc_no)) return false; break; } default: PhpException.Throw(PhpError.Warning, LibResources.GetString("invalid_handle_qualifier", qualifier)); return false; } } else if ((resource = value as PhpResource) != null) { PhpStream php_stream = PhpStream.GetValid(resource); if (php_stream == null) return false; if (!ActivePipe.BeginIO(stream, php_stream, access, desc_no)) return false; } else { // value must be either a resource or an array: PhpException.Throw(PhpError.Warning, LibResources.GetString("descriptor_item_not_array_nor_resource", desc_no)); return false; } } return true; } private sealed class ActivePipe { private const int BufferSize = 1024; Stream stream; StreamAccessOptions access; PhpStream phpStream; public AsyncCallback callback; public PhpBytes buffer; public static bool BeginIO(Stream stream, PhpStream phpStream, StreamAccessOptions access, int desc_no) { if (access == StreamAccessOptions.Read && !phpStream.CanWrite || access == StreamAccessOptions.Write && !phpStream.CanRead) { PhpException.Throw(PhpError.Warning, LibResources.GetString("descriptor_item_invalid_mode", desc_no)); return false; } ActivePipe pipe = new ActivePipe(); pipe.stream = stream; pipe.phpStream = phpStream; pipe.access = access; pipe.callback = new AsyncCallback(pipe.Callback); if (access == StreamAccessOptions.Read) { var buffer = new byte[BufferSize]; stream.BeginRead(buffer, 0, buffer.Length, pipe.callback, null); pipe.buffer = new PhpBytes(buffer); } else { pipe.buffer = phpStream.ReadBytes(BufferSize); if (pipe.buffer != null) stream.BeginWrite(pipe.buffer.ReadonlyData, 0, pipe.buffer.Length, pipe.callback, null); else stream.Close(); } return true; } private void Callback(IAsyncResult ar) { if (access == StreamAccessOptions.Read) { int count = stream.EndRead(ar); if (count > 0) { if (count != buffer.Length) { // TODO: improve streams var buf = new byte[count]; Buffer.BlockCopy(buffer.ReadonlyData, 0, buf, 0, count); phpStream.WriteBytes(new PhpBytes(buf)); } else { phpStream.WriteBytes(buffer); } stream.BeginRead(buffer.Data, 0, buffer.Length, callback, ar.AsyncState); } else { stream.Close(); } } else { buffer = phpStream.ReadBytes(BufferSize); if (buffer != null) { stream.BeginWrite(buffer.ReadonlyData, 0, buffer.Length, callback, ar.AsyncState); } else { stream.EndWrite(ar); stream.Close(); } } } } #endregion #region proc_close, proc_get_status, proc_terminate [ImplementsFunction("proc_close")] public static int Close(PhpResource process) { PhpProcessHandle handle = PhpProcessHandle.Validate(process); if (handle == null) return -1; var code = CloseProcess(handle.Process); handle.Close(); return code; } private static int CloseProcess(Process/*!*/ process) { try { process.WaitForExit(); } catch (Exception e) { PhpException.Throw(PhpError.Warning, LibResources.GetString("error_waiting_for_process_exit", e.Message)); return -1; } return process.ExitCode; } /// /// /// /// /// /// /// "command"The command string that was passed to proc_open() /// "pid"process id /// "running"TRUE if the process is still running, FALSE if it has terminated /// "signaled"TRUE if the child process has been terminated by an uncaught signal. Always set to FALSE on Windows. /// "stopped"TRUE if the child process has been stopped by a signal. Always set to FALSE on Windows. /// "exitcode"the exit code returned by the process (which is only meaningful if running is FALSE) /// "termsig"the number of the signal that caused the child process to terminate its execution (only meaningful if signaled is TRUE) /// "stopsig"the number of the signal that caused the child process to stop its execution (only meaningful if stopped is TRUE) /// /// [ImplementsFunction("proc_get_status")] public static PhpArray GetStatus(PhpResource process) { PhpProcessHandle handle = PhpProcessHandle.Validate(process); if (handle == null) return null; PhpArray result = new PhpArray(0, 8); result.Add("command", handle.Command); result.Add("pid", handle.Process.Id); result.Add("running", !handle.Process.HasExited); result.Add("signaled", false); // UNIX result.Add("stopped", false); // UNIX result.Add("exitcode", handle.Process.HasExited ? handle.Process.ExitCode : -1); result.Add("termsig", 0); // UNIX result.Add("stopsig", 0); // UNIX return result; } [ImplementsFunction("proc_terminate")] public static int Terminate(PhpResource process) { return Terminate(process, 255); } [ImplementsFunction("proc_terminate")] public static int Terminate(PhpResource process, int signal) { PhpProcessHandle handle = PhpProcessHandle.Validate(process); if (handle == null) return -1; try { handle.Process.Kill(); } catch (Exception e) { PhpException.Throw(PhpError.Warning, LibResources.GetString("error_terminating_process", handle.Process.ProcessName, handle.Process.Id, e.Message)); return -1; } return handle.Process.ExitCode; } #endregion #region NS: proc_nice [ImplementsFunction("proc_nice", FunctionImplOptions.NotSupported)] public static bool SetPriority(int priority) { PhpException.FunctionNotSupported(); // even in PHP for Windows, it is not available return false; } #endregion } } ================================================ FILE: Source/ClassLibrary/RegExpPerl.cs ================================================ /* Copyright (c) 2004-2006 Pavel Novak and Tomas Matousek. The use and distribution terms for this software are contained in the file named License.txt, which can be found in the root of the Phalanger distribution. By using this software in any fashion, you are agreeing to be bound by the terms of this license. You must not remove this notice from this software. TODO: preg_match - unmatched groups should be empty only if they are not followed by matched one (isn't it PHP bug?) TODO: preg_last_error - Returns the error code of the last PCRE regex execution */ using System; using System.Text; using System.Threading; using System.Collections; using System.Collections.Generic; using System.Globalization; using System.Text.RegularExpressions; using PHP.Core; using PHP.Core.Reflection; using System.Diagnostics; namespace PHP.Library { /// /// Perl regular expression specific options that are not captured by .NET or by /// transformation of the regular expression itself. /// [Flags] public enum PerlRegexOptions { None = 0, Evaluate = 1, Ungreedy = 2, Anchored = 4, DollarMatchesEndOfStringOnly = 8, UTF8 = 16 } /// /// Implements PERL extended regular expressions as they are implemented in PHP. /// /// [ImplementsExtension(LibraryDescriptor.ExtPcre)] public static class PerlRegExp { #region preg_last_error public enum PregError { [ImplementsConstant("PREG_NO_ERROR")] NoError = 0, [ImplementsConstant("PREG_INTERNAL_ERROR")] InternalError = 1, [ImplementsConstant("PREG_BACKTRACK_LIMIT_ERROR")] BacktrackLimitError = 2, [ImplementsConstant("PREG_RECURSION_LIMIT_ERROR")] RecursionLimitError = 3, [ImplementsConstant("PREG_BAD_UTF8_ERROR")] BadUtf8Error = 4, [ImplementsConstant("PREG_BAD_UTF8_OFFSET_ERROR")] BadUtf8OffsetError = 5 } public enum PregConst { [ImplementsConstant("PREG_PATTERN_ORDER")] PatternOrder = 1, [ImplementsConstant("PREG_SET_ORDER")] SetOrder = 2, [ImplementsConstant("PREG_OFFSET_CAPTURE")] OffsetCapture = 1 << 8, [ImplementsConstant("PREG_SPLIT_NO_EMPTY")] SplitNoEmpty = 1 << 0, [ImplementsConstant("PREG_SPLIT_DELIM_CAPTURE")] SplitDelimCapture = 1 << 1, [ImplementsConstant("PREG_SPLIT_OFFSET_CAPTURE")] SplitOffsetCapture = 1 << 2, [ImplementsConstant("PREG_REPLACE_EVAL")] ReplaceEval = 1 << 0, [ImplementsConstant("PREG_GREP_INVERT")] GrepInvert = 1 << 0, } [ImplementsFunction("preg_last_error")] public static int LastError() { return 0; } #endregion #region preg_quote /// /// Escapes all characters that have special meaning in regular expressions. These characters are /// . \\ + * ? [ ^ ] $ ( ) { } = ! < > | : /// /// String with characters to escape. /// String with escaped characters. [ImplementsFunction("preg_quote")] [PureFunction] public static string Quote(string str) { return Quote(str, '\0', false); } /// /// Escapes all characters that have special meaning in regular expressions. These characters are /// . \\ + * ? [ ^ ] $ ( ) { } = ! < > | : plus . /// /// String with characters to escape. /// Character to escape in additon to general special characters. /// String with escaped characters. [ImplementsFunction("preg_quote")] [PureFunction] public static string Quote(string str, string delimiter) { bool delimiter_used = true; if (delimiter == null || delimiter.Length == 0) delimiter_used = false; return Quote(str, delimiter_used ? delimiter[0] : '\0', delimiter_used); } /// /// Escapes all characters with special meaning in Perl regular expressions and char /// . /// /// String to quote. /// Additional character to quote. /// Whether the delimiter should be quoted. /// String with quoted characters. internal static string Quote(string str, char delimiter, bool delimiterUsed) { if (str == null) return null; StringBuilder result = new StringBuilder(); for (int i = 0; i < str.Length; i++) { bool escape = false; if (delimiterUsed && str[i] == delimiter) escape = true; else // switch only if true is not set already switch (str[i]) { case '\\': case '+': case '*': case '?': case '[': case '^': case ']': case '$': case '(': case ')': case '{': case '}': case '=': case '!': case '<': case '>': case '|': case ':': case '.': escape = true; break; } if (escape) result.Append('\\'); result.Append(str[i]); } return result.ToString(); } #endregion #region preg_grep /// /// Flags for Grep functions. /// [Flags] public enum GrepFlags { None = 0, [ImplementsConstant("PREG_GREP_INVERT")] GrepInvert = 1 } /// /// Returns the array consisting of the elements of the array that match /// the given . /// /// Pattern to be matched against each array element. /// Array of strings to match. /// Array containing only values from that match /// [ImplementsFunction("preg_grep")] public static PhpArray Grep(object pattern, PhpArray input) { return Grep(pattern, input, GrepFlags.None); } /// /// Returns the array consisting of the elements of the array that match /// the given . /// If flag is specified, resulting array will contain /// elements that do not match the . /// /// Pattern to be matched against each array element. /// Array of strings to match. /// Flags modifying which elements contains resulting array. /// Array containing only values from that match . /// (Or do not match according to specified.) [ImplementsFunction("preg_grep")] public static PhpArray Grep(object pattern, PhpArray input, GrepFlags flags) { if (input == null) return null; PerlRegExpConverter converter = ConvertPattern(pattern, null); if (converter == null) return null; PhpArray result = new PhpArray(); foreach (KeyValuePair entry in input) { string str = ConvertData(entry.Value, converter); Match m = converter.Regex.Match(str); // move a copy to return array if success and not invert or // not success and invert if (m.Success ^ (flags & GrepFlags.GrepInvert) != 0) result.Add(entry.Key, str); } return result; } #endregion #region preg_match, preg_match_all /// /// Flags for Match function family. /// /// /// MatchFlags used by pre_match PHP functions is a hybrid enumeration. /// PatternOrder and SetOrder flags are mutually exclusive but OffsetCapture may be added by bitwise | operator. /// Moreover, PatternOrder is a default value used by these functions, so it can be equal to 0. /// (This confusing declaration is done by PHP authors.) /// [Flags] public enum MatchFlags { [ImplementsConstant("PREG_PATTERN_ORDER")] PatternOrder = 1, [ImplementsConstant("PREG_SET_ORDER")] SetOrder = 2, [ImplementsConstant("PREG_OFFSET_CAPTURE")] OffsetCapture = 0x100 } /// /// Searches for a match to the regular expression given in . /// The search is stopped after the first match is found. /// /// Perl regular expression. /// String to search. /// 0 if there is no match and 1 if the match was found. [ImplementsFunction("preg_match")] [return: CastToFalse] public static int Match(object pattern, object data) { PerlRegExpConverter converter = ConvertPattern(pattern, null); if (converter == null) return -1; string str = ConvertData(data, converter); Match match = converter.Regex.Match(str); return match.Success ? 1 : 0; } /// /// Searches for a match to the regular expression given in /// . The search is stopped after the first match is found. /// contains an array with matches. At index 0 is the whole string that /// matches the , from index 1 are stored matches for parenthesized subpatterns. /// /// Perl regular expression. /// String or string of bytes to search. /// Array containing matched strings. /// 0 if there is no match and 1 if the match was found. [ImplementsFunction("preg_match")] [return: CastToFalse] public static int Match(object pattern, object data, out PhpArray matches) { return Match(pattern, data, out matches, MatchFlags.PatternOrder, 0, false); } /// /// Searches for a match to the regular expression given in /// . The search is stopped after the first match is found. /// contains an array with matches. At index 0 is the whole string that /// matches the , from index 1 are stored matches for parenthesized subpatterns. /// Flag can be specified and it means that the /// array will not contain substrings, but another array where the substring /// is stored at index [0] and index [1] is its offset in . /// /// Perl regular expression. /// String to search. /// Array containing matched strings. /// . /// 0 if there is no match and 1 if the match was found. [ImplementsFunction("preg_match")] [return: CastToFalse] public static int Match(object pattern, object data, out PhpArray matches, MatchFlags flags) { return Match(pattern, data, out matches, flags, 0, false); } /// /// Searches for a match to the regular expression given in /// . The search is stopped after the first match is found. /// contains an array with matches. At index 0 is the whole string that /// matches the , from index 1 are stored matches for parenthesized subpatterns. /// Flag can be specified and it means that the /// array will not contain substrings, but another array where the substring /// is stored at index [0] and index [1] is its offset in . /// specifies where the search should start. (Note that it is not the same as passing a substring of /// .) /// /// Perl regular expression. /// String or string of bytes to search. /// Array containing matched strings. /// . /// Offset to where the match should start. /// 0 if there is no match and 1 if the match was found. [ImplementsFunction("preg_match")] [return: CastToFalse] public static int Match(object pattern, object data, out PhpArray matches, MatchFlags flags, int offset) { return Match(pattern, data, out matches, flags, offset, false); } /// /// Searches for all matches to the regular expression given in pattern and puts /// them in array. The matches are sorted in "Pattern Order" i. e. at zero /// index is an array containing whole matches, at first index is an array containing number 1 subpatterns /// for all matches etc. /// Next match search starts just after the previous match. /// /// Regular expression. /// String or string of bytes to search. /// Output array containing matches found. /// Number of whole matches. [ImplementsFunction("preg_match_all")] [return: CastToFalse] public static int MatchAll(object pattern, object data, out PhpArray matches) { return Match(pattern, data, out matches, MatchFlags.PatternOrder, 0, true); } /// /// Searches for all matches to the regular expression given in pattern and puts /// them in array. The matches are sorted in "Pattern Order" i. e. at zero /// index is an array containing whole matches, at first index is an array containing number 1 subpatterns /// for all matches etc. /// Next match search starts just after the previous match. /// If flag is specified, array /// contains an array of full pattern matches at index 0, an array of strings matched to /// first parenthesized substring at index 1 etc. If is set, at index 0 is the first /// set of matches (full match and substrings), at index 1 full set for second match etc. /// Flag indicates that instead the matched substring should /// be an array containing the substring at index 0 and position at original string at index 1. /// /// Regular expression. /// String or string of bytes to search. /// Output array containing matches found. /// Flags for specifying order of results in array (Set Order, /// Pattern Order) and whether positions of matches should be added to results (Offset Capture). /// Number of whole matches. [ImplementsFunction("preg_match_all")] [return: CastToFalse] public static int MatchAll(object pattern, object data, out PhpArray matches, MatchFlags flags) { return Match(pattern, data, out matches, flags, 0, true); } /// /// Searches for all matches to the regular expression given in pattern and puts /// them in array. The matches are sorted in "Pattern Order" i. e. at zero /// index is an array containing whole matches, at first index is an array containing number 1 subpatterns /// for all matches etc. /// Next match search starts just after the previous match. /// If flag is specified, array /// contains at index 0 an array of full pattern matches, at index 1 is an array of strings matched to /// first parenthesized substring etc. If is set, at index 0 is the first /// set of matches (full match and substrings), at index 1 full set for second match etc. /// Flag indicates that instead the matched substring should /// be an array containing the substring at index 0 and position at original string at index 1. /// /// Regular expression. /// String or string of bytes to search. /// Output array containing matches found. /// Flags for specifying order of results in array (Set Order, /// Pattern Order) and whether positions of matches should be added to results (Offset Capture). /// Offset in where the search should begin. Note that it is /// not equal to passing an substring as this parameter because of ^ (start of the string or line) modifier. /// /// Number of whole matches. [ImplementsFunction("preg_match_all")] [return: CastToFalse] public static int MatchAll(object pattern, object data, out PhpArray matches, MatchFlags flags, int offset) { return Match(pattern, data, out matches, flags, offset, true); } /// /// Private method implementing functions from match family. /// /// Perl regular expression match pattern. /// String to search matches. /// An array containing matches found. /// Flags for searching. /// Offset to where the search should start. /// True if all matches should be found, false if only the first /// is enough. /// Number of times the matches. private static int Match(object pattern, object data, out PhpArray matches, MatchFlags flags, int offset, bool matchAll) { // these two flags together do not make sense if ((flags & MatchFlags.PatternOrder) != 0 && (flags & MatchFlags.SetOrder) != 0) { PhpException.InvalidArgument("flags", LibResources.GetString("preg_match_pattern_set_order")); matches = null; return -1; } PerlRegExpConverter converter = ConvertPattern(pattern, null); if (converter == null) { matches = new PhpArray(); return -1; } string converted = ConvertData(data, converter); Match m = converter.Regex.Match(converted, offset > converted.Length ? converted.Length : offset); if ((converter.PerlOptions & PerlRegexOptions.Anchored) > 0 && m.Success && m.Index != offset) { matches = new PhpArray(); return -1; } if (m.Success) { if (!matchAll || (flags & MatchFlags.PatternOrder) != 0) { matches = new PhpArray(m.Groups.Count); } else matches = new PhpArray(); if (!matchAll) { // Preg numbers groups sequentially, both named and unnamed. // .Net only numbers unnamed groups. // So we name unnamed groups (see ConvertRegex) to map correctly. int lastSuccessfulGroupIndex = GetLastSuccessfulGroup(m.Groups); var indexGroups = new List(m.Groups.Count); var groupNameByIndex = new Dictionary(m.Groups.Count); for (int i = 0; i <= lastSuccessfulGroupIndex; i++) { // All groups should be named. var groupName = GetGroupName(converter.Regex, i); if (!string.IsNullOrEmpty(groupName)) { matches[groupName] = NewArrayItem(m.Groups[i].Value, m.Groups[i].Index, (flags & MatchFlags.OffsetCapture) != 0); } matches[i] = NewArrayItem(m.Groups[i].Value, m.Groups[i].Index, (flags & MatchFlags.OffsetCapture) != 0); } return 1; } // store all other matches in PhpArray matches if ((flags & MatchFlags.SetOrder) != 0) // cannot test PatternOrder, it is 0, SetOrder must be tested return FillMatchesArrayAllSetOrder(converter.Regex, m, ref matches, (flags & MatchFlags.OffsetCapture) != 0); else return FillMatchesArrayAllPatternOrder(converter.Regex, m, ref matches, (flags & MatchFlags.OffsetCapture) != 0); } // no match has been found if (matchAll && (flags & MatchFlags.SetOrder) == 0) { // in that case PHP returns an array filled with empty arrays according to parentheses count matches = new PhpArray(m.Groups.Count); for (int i = 0; i < converter.Regex.GetGroupNumbers().Length; i++) { AddGroupNameToResult(converter.Regex, matches, i, (ms, groupName) => { ms[groupName] = new PhpArray(0); }); matches[i] = new PhpArray(0); } } else { matches = new PhpArray(0); // empty array } return 0; } private static string GetGroupName(Regex regex, int index) { var groupName = regex.GroupNameFromNumber(index); if (groupName.StartsWith(PerlRegExpConverter.AnonymousGroupPrefix)) { // Anonymous groups: remove it altogether. Its purpose was to order it correctly. Debug.Assert(groupName.Substring(PerlRegExpConverter.AnonymousGroupPrefix.Length) == index.ToString(CultureInfo.InvariantCulture)); groupName = string.Empty; } else if (groupName[0] != PerlRegExpConverter.GroupPrefix) { // Indexed groups. Leave as-is. Debug.Assert(groupName == index.ToString(CultureInfo.InvariantCulture)); groupName = string.Empty; } else { // Named groups: remove prefix. groupName = (groupName[0] == PerlRegExpConverter.GroupPrefix ? groupName.Substring(1) : groupName); } return groupName; } #endregion #region preg_split /// /// Flags for split functions family. /// [Flags] public enum SplitFlags { None = 0, [ImplementsConstant("PREG_SPLIT_NO_EMPTY")] NoEmpty = 1, [ImplementsConstant("PREG_SPLIT_DELIM_CAPTURE")] DelimCapture = 2, [ImplementsConstant("PREG_SPLIT_OFFSET_CAPTURE")] OffsetCapture = 4 } /// /// Splits along boundaries matched by and returns /// an array containing substrings. /// /// Regular expression to match to boundaries. /// String string of bytes to split. /// An array containing substrings. [ImplementsFunction("preg_split")] public static PhpArray Split(object pattern, object data) { return Split(pattern, data, -1, SplitFlags.None); } /// /// Splits along boundaries matched by and returns /// an array containing substrings. /// specifies the maximum number of strings returned in the resulting /// array. If (limit-1) matches is found and there remain some characters to match whole remaining /// string is returned as the last element of the array. /// /// Regular expression to match to boundaries. /// String string of bytes to split. /// Max number of elements in the resulting array. /// An array containing substrings. [ImplementsFunction("preg_split")] public static PhpArray Split(object pattern, object data, int limit) { return Split(pattern, data, limit, SplitFlags.None); } /// /// Splits along boundaries matched by and returns /// an array containing substrings. /// specifies the maximum number of strings returned in the resulting /// array. If (limit-1) matches is found and there remain some characters to match whole remaining /// string is returned as the last element of the array. /// Some flags may be specified. means no empty strings will be /// in the resulting array. adds also substrings matching /// the delimiter and returns instead substrings the arrays /// containing appropriate substring at index 0 and the offset of this substring in original /// at index 1. /// /// Regular expression to match to boundaries. /// String or string of bytes to split. /// Max number of elements in the resulting array. /// Flags affecting the returned array. /// An array containing substrings. [ImplementsFunction("preg_split")] public static PhpArray Split(object pattern, object data, int limit, SplitFlags flags) { if (limit == 0) // 0 does not make sense, php's behavior is as it is -1 limit = -1; if (limit < -1) // for all other negative values it seems that is as limit == 1 limit = 1; PerlRegExpConverter converter = ConvertPattern(pattern, null); if (converter == null) return null; string str = ConvertData(data, converter); Match m = converter.Regex.Match(str); bool offset_capture = (flags & SplitFlags.OffsetCapture) != 0; PhpArray result = new PhpArray(); int last_index = 0; while (m.Success && (limit == -1 || --limit > 0) && last_index < str.Length) { // add part before match int length = m.Index - last_index; if (length > 0 || (flags & SplitFlags.NoEmpty) == 0) result.Add(NewArrayItem(str.Substring(last_index, length), last_index, offset_capture)); if (m.Value.Length > 0) { if ((flags & SplitFlags.DelimCapture) != 0) // add all captures but not whole pattern match (start at 1) { List lastUnsucessfulGroups = null; // value of groups that was not successful since last succesful one for (int i = 1; i < m.Groups.Count; i++) { Group g = m.Groups[i]; if (g.Length > 0 || (flags & SplitFlags.NoEmpty) == 0) { // the value to be added into the result: object value = NewArrayItem(g.Value, g.Index, offset_capture); if (g.Success) { // group {i} was matched: // if there was some unsuccesfull matches before, add them now: if (lastUnsucessfulGroups != null && lastUnsucessfulGroups.Count > 0) { foreach (var x in lastUnsucessfulGroups) result.Add(x); lastUnsucessfulGroups.Clear(); } // add the matched group: result.Add(value); } else { // The match was unsuccesful, remember all the unsuccesful matches // and add them only if some succesful match will follow. // In PHP, unsuccessfully matched groups are trimmed by the end // (regexp processing stops when other groups cannot be matched): if (lastUnsucessfulGroups == null) lastUnsucessfulGroups = new List(); lastUnsucessfulGroups.Add(value); } } } } last_index = m.Index + m.Length; } else // regular expression match an empty string => add one character { // always not empty result.Add(NewArrayItem(str.Substring(last_index, 1), last_index, offset_capture)); last_index++; } m = m.NextMatch(); } // add remaining string (might be empty) if (last_index < str.Length || (flags & SplitFlags.NoEmpty) == 0) result.Add(NewArrayItem(str.Substring(last_index), last_index, offset_capture)); return result; } #endregion #region preg_replace, preg_replace_callback /// /// Searches for matches to and replaces them /// with . may contain backreferences /// of the form of \\n or $n (second one preferred). /// Every parameter may be an unidimensional array of strings. If is /// an array, replacement is done on every element and return value is an array as well. If /// and are arrays, the replacements are processed /// in the order the keys appear in the array. If only is an array, the /// replacement string is used for every key in the . /// /// Current . Passed by Phalanger runtime, cannot be null. /// Instance of object that called the replace method (replace pattern may contain $this). /// /// Regular expression to match. /// Replacement string. /// String to search for replacements. /// String or array containing strings with replacement performed. [ImplementsFunction("preg_replace", FunctionImplOptions.CaptureEvalInfo | FunctionImplOptions.NeedsVariables | FunctionImplOptions.NeedsThisReference)] public static object Replace(ScriptContext/*!*/context, DObject self, Dictionary definedVariables, object pattern, object replacement, object data) { int count = Int32.MinValue; // disables counting return Replace(context, self, definedVariables, pattern, replacement, null, data, -1, ref count); } /// /// Searches for matches to and replaces them /// with . may contain backreferences /// of the form of \\n or $n (second one preferred). /// Every parameter may be an unidimensional array of strings. If is /// an array, replacement is done on every element and return value is an array as well. If /// and are arrays, the replacements are processed /// in the order the keys appear in the array. If only is an array, the /// replacement string is used for every key in the . /// /// Current . Passed by Phalanger runtime, cannot be null. /// Instance of object that called the replace method (replace pattern may contain $this) /// /// Regular expression to match. /// Replacement string. /// String to search for replacements. /// Maximum number of matches replaced. (-1 for no limit) /// String or array containing strings with replacement performed. [ImplementsFunction("preg_replace", FunctionImplOptions.CaptureEvalInfo | FunctionImplOptions.NeedsVariables | FunctionImplOptions.NeedsThisReference)] public static object Replace(ScriptContext/*!*/context, DObject self, Dictionary definedVariables, object pattern, object replacement, object data, int limit) { int count = Int32.MinValue; // disables counting return Replace(context, self, definedVariables, pattern, replacement, null, data, limit, ref count); } /// /// Searches for matches to and replaces them /// with . may contain backreferences /// of the form of \\n or $n (second one preferred). /// Every parameter may be an unidimensional array of strings. If is /// an array, replacement is done on every element and return value is an array as well. If /// and are arrays, the replacements are processed /// in the order the keys appear in the array. If only is an array, the /// replacement string is used for every key in the . /// /// Current . Passed by Phalanger runtime, cannot be null. /// Instance of object that called the replace method (replace pattern may contain $this) /// /// Regular expression to match. /// Replacement string. /// String to search for replacements. /// Maximum number of matches replaced. (-1 for no limit) /// Number of replacements. /// String or array containing strings with replacement performed. [ImplementsFunction("preg_replace", FunctionImplOptions.CaptureEvalInfo | FunctionImplOptions.NeedsVariables | FunctionImplOptions.NeedsThisReference)] public static object Replace(ScriptContext/*!*/context, DObject self, Dictionary definedVariables, object pattern, object replacement, object data, int limit, out int count) { count = 0; return Replace(context, self, definedVariables, pattern, replacement, null, data, limit, ref count); } /// /// Searches for matches to and the array of matched /// strings (full pattern match + parenthesized substrings) is passed to which /// returns replacement string. /// and parameters may be also unidimensional /// arrays of strings. For the explanation . /// /// Current . Passed by Phalanger runtime, cannot be null. /// Regular expression to match. /// Function called to find out the replacement string. /// String to search for replacements. /// String or array containing strings with replacement performed. [ImplementsFunction("preg_replace_callback")] public static object Replace(ScriptContext/*!*/context, object pattern, PhpCallback callback, object data) { int count = Int32.MinValue; // disables counting; return Replace(context, null, null, pattern, null, callback, data, -1, ref count); } /// /// Searches for matches to and the array of matched /// strings (full pattern match + parenthesized substrings) is passed to which /// returns replacement string. /// and parameters may be also unidimensional /// arrays of strings. For the explanation . /// /// Current . Passed by Phalanger runtime, cannot be null. /// Regular expression to match. /// Function called to find out the replacement string. /// String to search for replacements. /// Maximum number of matches replaced. (-1 for no limit) /// String or array containing strings with replacement performed. [ImplementsFunction("preg_replace_callback")] public static object Replace(ScriptContext/*!*/context, object pattern, PhpCallback callback, object data, int limit) { int count = Int32.MinValue; // disables counting return Replace(context, null, null, pattern, null, callback, data, limit, ref count); } /// /// Searches for matches to and the array of matched /// strings (full pattern match + parenthesized substrings) is passed to which /// returns replacement string. /// and parameters may be also unidimensional /// arrays of strings. For the explanation . /// /// Current . Passed by Phalanger runtime, cannot be null. /// Regular expression to match. /// Function called to find out the replacement string. /// String to search for replacements. /// Maximum number of matches replaced. (-1 for no limit) /// Number of replacements. /// String or array containing strings with replacement performed. [ImplementsFunction("preg_replace_callback")] public static object Replace(ScriptContext/*!*/context, object pattern, PhpCallback callback, object data, int limit, out int count) { count = 0; return Replace(context, null, null, pattern, null, callback, data, limit, ref count); } /// /// Private mehtod implementing all replace methods. Just one of or should be used. /// /// Current . Must not be null. /// Instance of object that called the replace method (replace pattern may contain $this) /// /// /// /// /// /// /// /// String or an array. private static object Replace(ScriptContext/*!*/context, DObject self, Dictionary definedVariables, object pattern, object replacement, PhpCallback callback, object data, int limit, ref int count) { // if we have no replacement and no callback, matches are deleted (replaced by an empty string) if (replacement == null && callback == null) replacement = String.Empty; // exactly one of replacement or callback is valid now Debug.Assert(replacement != null ^ callback != null); // get eval info if it has been captured - is needed even if we do not need them later SourceCodeDescriptor descriptor = context.GetCapturedSourceCodeDescriptor(); // PHP's behaviour for undocumented limit range if (limit < -1) limit = 0; PhpArray replacement_array = replacement as PhpArray; string replacement_string = null; if (replacement_array == null && replacement != null) replacement_string = Core.Convert.ObjectToString(replacement); // we should return new array, if there is an array passed as subject, it should remain unchanged: object data_copy = PhpVariable.DeepCopy(data); PhpArray pattern_array = pattern as PhpArray; if (pattern_array == null) { // string pattern // string replacement if (replacement_array != null) { // string pattern and array replacement not allowed: PhpException.InvalidArgument("replacement", LibResources.GetString("replacement_array_pattern_not")); return null; } // pattern should be treated as string and therefore replacement too: return SimpleReplace(self, definedVariables, pattern, replacement_string, callback, data_copy, limit, descriptor, ref count); } else if (replacement_array == null) { // array pattern // string replacement using (var pattern_enumerator = pattern_array.GetFastEnumerator()) while (pattern_enumerator.MoveNext()) { data_copy = SimpleReplace(self, definedVariables, pattern_enumerator.CurrentValue, replacement_string, callback, data_copy, limit, descriptor, ref count); } } else //if (replacement_array != null) { // array pattern // array replacement var replacement_enumerator = replacement_array.GetFastEnumerator(); bool replacement_valid = true; using (var pattern_enumerator = pattern_array.GetFastEnumerator()) while (pattern_enumerator.MoveNext()) { // replacements are in array, move to next item and take it if possible, in other case take empty string: if (replacement_valid && replacement_enumerator.MoveNext()) { replacement_string = Core.Convert.ObjectToString(replacement_enumerator.CurrentValue); } else { replacement_string = string.Empty; replacement_valid = false; // end of replacement_enumerator, do not call MoveNext again! } data_copy = SimpleReplace(self, definedVariables, pattern_enumerator.CurrentValue, replacement_string, callback, data_copy, limit, descriptor, ref count); } } // return resulting array or string assigned to data return data_copy; } /// /// Takes a regular expression and one of or /// . Performs replacing on , which can be /// , in other cases it is converted to string. /// If is , every value is converted to string and /// replacement is performed in place in this array. /// Either or should be null. /// /// Instance of object that called the replace method (replace pattern may contain $this) /// Array with local variables - can be used by replace pattern /// Regular expression to search. /// Regular replacement expression. Should be null if callback is specified. /// Callback function that should be called to make replacements. Should be null /// if replacement is specified. /// Array or string where pattern is searched. /// Max count of replacements for each item in subject. /// for possible lambda function creation. /// Cumulated number of replacements. /// private static object SimpleReplace(DObject self, Dictionary definedVariables, object pattern, string replacement, PhpCallback callback, object data, int limit, SourceCodeDescriptor descriptor, ref int count) { Debug.Assert(limit >= -1); // exactly one of replacement or callback is valid: Debug.Assert(replacement != null ^ callback != null); PerlRegExpConverter converter = ConvertPattern(pattern, replacement); if (converter == null) return null; // get types of data we need: PhpArray data_array = data as PhpArray; string data_string = (data_array == null) ? ConvertData(data, converter) : null; // data comprising of a single string: if (data_array == null) { return ReplaceInternal(self, definedVariables, converter, callback, data_string, limit, descriptor, ref count); } else { // data is array, process each item: var enumerator = data_array.GetFastEnumerator(); while (enumerator.MoveNext()) { enumerator.CurrentValue = ReplaceInternal(self, definedVariables, converter, callback, ConvertData(enumerator.CurrentValue, converter), limit, descriptor, ref count); } enumerator.Dispose(); // return array with items replaced: return data; } } /// /// Replaces occurences of substrings. /// /// /// Converter used for replacement if is null. /// /// Instance of object that called the replace method (replace pattern may contain $this) /// Array with local variables - can be used by replace pattern /// Callback to call for replacement strings. /// String to search for matches. /// Max number of replacements performed. /// for possible lambda function creation. /// Cumulated number of replacements. /// private static string ReplaceInternal(DObject self, Dictionary definedVariables, PerlRegExpConverter converter, PhpCallback callback, string str, int limit, SourceCodeDescriptor sourceCodeDesc, ref int count) { Debug.Assert(limit >= -1); if (callback == null) { // replace without executing code or counting the number of replacements: if ((converter.PerlOptions & PerlRegexOptions.Evaluate) == 0 && count < 0) return converter.Regex.Replace(str, converter.DotNetReplaceExpression, limit); Evaluator evaluator = new Evaluator(converter.Regex, converter.DotNetReplaceExpression, sourceCodeDesc, self, definedVariables); MatchEvaluator match_evaluator; if ((converter.PerlOptions & PerlRegexOptions.Evaluate) != 0) match_evaluator = new MatchEvaluator(evaluator.ReplaceCodeExecute); else match_evaluator = new MatchEvaluator(evaluator.ReplaceCount); string result = converter.Regex.Replace(str, match_evaluator, limit); count += evaluator.Count; return result; } else { StringBuilder result = new StringBuilder((str != null) ? str.Length : 0); int last_index = 0; Match m = converter.Regex.Match(str); while (m.Success && (limit == -1 || limit-- > 0)) { // append everything from input string to current match result.Append(str, last_index, m.Index - last_index); // move index after current match last_index = m.Index + m.Length; PhpArray arr = new PhpArray(m.Groups.Count, 0); for (int i = 0; i < m.Groups.Count; i++) arr[i] = m.Groups[i].Value; // append user callback function result string replacement = Core.Convert.ObjectToString(callback.Invoke(arr)); result.Append(replacement); m = m.NextMatch(); count++; } // remaining string result.Append(str, last_index, str.Length - last_index); return result.ToString(); } } /// /// Class implementing delegate evaluating php code if 'e' modifier /// in preg_replace is specified. /// private sealed class Evaluator { private Regex reg; private string replacement; private SourceCodeDescriptor sourceCodeDesc; private Dictionary definedVariables; private DObject self; public int Count { get { return count; } } private int count; public Evaluator(Regex reg, string replacement, SourceCodeDescriptor sourceCodeDesc, DObject self, Dictionary definedVariables) { this.reg = reg; this.definedVariables = definedVariables; this.replacement = replacement; this.sourceCodeDesc = sourceCodeDesc; this.count = 0; this.self = self; } public string ReplaceCodeExecute(Match m) { count++; if (m.Value.Trim().Length == 0) return String.Empty; // nothing to do ScriptContext context = ScriptContext.CurrentContext; // generate code that will be executed string code = String.Concat("return ", Substitute(replacement, m.Groups), ";"); // Execute.. return Core.Convert.ObjectToString(DynamicCode.Eval(code, true, context, definedVariables, self, null, context.EvalRelativeSourcePath, context.EvalLine, context.EvalColumn, context.EvalId, null)); } public string ReplaceCount(Match m) { count++; return replacement; } /// /// Expects replacement string produced by , /// i.e. only ${n} refer to valid groups. /// private string Substitute(string replacement, GroupCollection groups) { StringBuilder result = new StringBuilder(replacement.Length); int i = 0; while (i < replacement.Length) { if (IsParenthesizedGroupReference(replacement, i)) { // ${ i += 2; // [0-9]{1,2} int group_no = replacement[i++] - '0'; if (replacement[i] != '}') { group_no = group_no * 10 + (replacement[i] - '0'); i++; } // } Debug.Assert(replacement[i] == '}'); i++; Debug.Assert(group_no < groups.Count); // append slashed group value: result.Append(StringUtils.AddCSlashes(groups[group_no].Value, true, true, false)); } else if (replacement[i] == '$') { Debug.Assert(i + 1 < replacement.Length && replacement[i + 1] == '$'); result.Append('$'); i += 2; } else { result.Append(replacement[i++]); } } return result.ToString(); } } #endregion #region Helper methods private static void AddGroupNameToResult(Regex regex, PhpArray matches, int i, Action action) { var groupName = GetGroupName(regex, i); if (!String.IsNullOrEmpty(groupName)) { action(matches, groupName); } } private static PerlRegExpConverter ConvertPattern(object pattern, string replacement) { var converter = PerlRegExpCache.Get(pattern, replacement, true); // converter can contain a warning message, // it means it is invalid and we cannot use it: if (converter.ArgumentException != null) { // Exception message might contain substrings like "{2}" so it cannot be passed to any // method that formats the string and replaces these numbers with parameters. PhpException.Throw(PhpError.Warning, LibResources.GetString("invalid_argument", "pattern") + ": " + converter.ArgumentException); return null; } // return converter; } private static string ConvertData(object data, PerlRegExpConverter/*!*/ converter) { if (data == null) { return string.Empty; } else if (data.GetType() == typeof(PhpBytes)) { return converter.ConvertBytes(((PhpBytes)data).ReadonlyData); } else { string str = Core.Convert.ObjectToString(data); return converter.ConvertString(str, 0, str.Length); } } /// /// Used for handling Offset Capture flags. Returns just if /// is false or an containing /// at index 0 and at index 1. /// /// Item to add to return value. /// Index to specify in return value if is /// true. /// Whether or not to make with item and index. /// private static object NewArrayItem(object item, int index, bool offsetCapture) { if (!offsetCapture) return item; PhpArray arr = new PhpArray(2, 0); arr[0] = item; arr[1] = index; return arr; } /// /// Goes through matches and fill array with results /// according to Pattern Order. /// /// that produced the match /// to iterate through all matches by NextMatch() call. /// Array for storing results. /// Whether or not add arrays with offsets instead of strings. /// Number of full pattern matches. private static int FillMatchesArrayAllPatternOrder(Regex r, Match m, ref PhpArray matches, bool addOffsets) { // second index, increases at each match in pattern order int j = 0; while (m.Success) { // add all groups for (int i = 0; i < m.Groups.Count; i++) { object arr = NewArrayItem(m.Groups[i].Value, m.Groups[i].Index, addOffsets); AddGroupNameToResult(r, matches, i, (ms, groupName) => { if (j == 0) ms[groupName] = new PhpArray(); ((PhpArray)ms[groupName])[j] = arr; }); if (j == 0) matches[i] = new PhpArray(); ((PhpArray)matches[i])[j] = arr; } j++; m = m.NextMatch(); } return j; } /// /// Goes through matches and fill array with results /// according to Set Order. /// /// that produced the match /// to iterate through all matches by NextMatch() call. /// Array for storing results. /// Whether or not add arrays with offsets instead of strings. /// Number of full pattern matches. private static int FillMatchesArrayAllSetOrder(Regex r, Match m, ref PhpArray matches, bool addOffsets) { // first index, increases at each match in set order int i = 0; while (m.Success) { PhpArray pa = new PhpArray(m.Groups.Count, 0); // add all groups for (int j = 0; j < m.Groups.Count; j++) { object arr = NewArrayItem(m.Groups[j].Value, m.Groups[j].Index, addOffsets); AddGroupNameToResult(r, pa, j, (p, groupName) => { p[groupName] = arr; }); pa[j] = arr; } matches[i] = pa; i++; m = m.NextMatch(); } return i; } private static int GetLastSuccessfulGroup(GroupCollection/*!*/ groups) { Debug.Assert(groups != null); for (int i = groups.Count - 1; i >= 0; i--) { if (groups[i].Success) return i; } return -1; } internal static bool IsDigitGroupReference(string replacement, int i) { return (replacement[i] == '$' || replacement[i] == '\\') && (i + 1 < replacement.Length && Char.IsDigit(replacement, i + 1)); } internal static bool IsParenthesizedGroupReference(string replacement, int i) { return replacement[i] == '$' && i + 3 < replacement.Length && replacement[i + 1] == '{' && Char.IsDigit(replacement, i + 2) && ( replacement[i + 3] == '}' || i + 4 < replacement.Length && replacement[i + 4] == '}' && Char.IsDigit(replacement, i + 3) ); } #endregion } #region PerlRegExpReplacement internal static class PerlRegExpReplacement { /// /// Get the converted replacement from the cache or perform conversion and cache. /// /// /// /// internal static string ConvertReplacement(Regex/*!*/regex, string/*!*/replacement) { int[] group_numbers = regex.GetGroupNumbers(); int max_number = (group_numbers.Length > 0) ? group_numbers[group_numbers.Length - 1] : 0; return ConvertReplacement(max_number, replacement); } /// /// Converts substitutions of the form \\xx to $xx (perl to .NET format). /// /// Maximum group number for the current regullar expression. /// /// int[] group_numbers = regex.GetGroupNumbers(); /// int max_number = (group_numbers.Length > 0) ? group_numbers[group_numbers.Length - 1] : 0; /// /// /// String possibly containing \\xx substitutions. /// String with converted $xx substitution format. private static string ConvertReplacement(int max_number, string replacement) { int length = replacement.Length; StringBuilder result = new StringBuilder(length); //int[] group_numbers = regex.GetGroupNumbers(); //int max_number = (group_numbers.Length > 0) ? group_numbers[group_numbers.Length - 1] : 0; int i = 0; while (i < length) { if (PerlRegExp.IsDigitGroupReference(replacement, i) || PerlRegExp.IsParenthesizedGroupReference(replacement, i)) { int add = 0; i++; if (replacement[i] == '{') { i++; add = 1; } // parse number int number = replacement[i++] - '0'; if (i < length && Char.IsDigit(replacement, i)) { number = number * 10 + (replacement[i++] - '0'); } // insert only existing group references (others replaced with empty string): if (number <= max_number) { result.Append('$'); result.Append('{'); result.Append(number.ToString()); result.Append('}'); } i += add; } else if (replacement[i] == '$') { // there is $ and it is not a substitution - duplicate it: result.Append("$$"); i++; } else if (replacement[i] == '\\' && i + 1 < length) { if (replacement[i + 1] == '\\') { // two backslashes, replace with one: result.Append('\\'); i += 2; } else if (replacement[i + 1] == '$') { // "/$" -> '$$' because /$ doesn't escape $ in .NET result.Append("$$"); i += 2; } else { // backslash + some character, skip two characters result.Append(replacement, i, 2); i += 2; } } else { // no substitution, no backslash (or backslash at the end of string) result.Append(replacement, i++, 1); } } return result.ToString(); } } #endregion #region PerlRegExpCache internal static class PerlRegExpCache { private const uint BucketsLength = 64; private static readonly PerlRegExpConverter[]/*!*/buckets = new PerlRegExpConverter[BucketsLength]; private static readonly object[] locks = new object[8]; static PerlRegExpCache() { var locks = PerlRegExpCache.locks; for (int i = 0; i < locks.Length; i++) locks[i] = new object(); Debug.Assert(BucketsLength == 64); // must be 2^x RequestContext.RequestEnd += CleanupBuckets; } private static int generation = 0; public static PerlRegExpConverter Get(object pattern, string replacement, bool add) { uint hash = unchecked( ((pattern != null) ? (uint)pattern.GetHashCode() // little slow, some virtual method call : 0) & (BucketsLength - 1)); for (var item = buckets[hash]; item != null; item = item.nextcache) { if (item.CacheEquals(item, pattern, replacement)) { item.Cachehit(); item.generation = PerlRegExpCache.generation; // move item to the current generation return item; } } return add ? EnsureGet(pattern, replacement, hash) : null; } private static PerlRegExpConverter/*!*/EnsureGet(object pattern, string replacement, uint hash) { PerlRegExpConverter item; lock (locks[hash % locks.Length]) { // double checked lock if ((item = Get(pattern, replacement, false)) == null) { // avoid growing of the table in non-web applications (console etc.) CleanupBuckets(); // new item item = new PerlRegExpConverter(pattern, replacement, Configuration.Application.Globalization.PageEncoding) { nextcache = PerlRegExpCache.buckets[hash], generation = PerlRegExpCache.generation }; buckets[hash] = item; // enlist the item } } return item; } private static int requestsCounter = 0; private static uint cleanupBucket = 0; private static void CleanupBuckets() { var requestsCounter = PerlRegExpCache.requestsCounter; if (requestsCounter < 32) { PerlRegExpCache.requestsCounter = requestsCounter + 1; } else if (requestsCounter < 64) { if (Interlocked.Increment(ref PerlRegExpCache.requestsCounter) == 64) { // do some cleanup var generation = PerlRegExpCache.generation; var hash = PerlRegExpCache.cleanupBucket; PerlRegExpCache.cleanupBucket = (uint)(hash + 1) & (BucketsLength - 1); // PerlRegExpConverter prev = null; for (var p = buckets[hash]; p != null; p = p.nextcache) { if (p.generation != generation && unchecked(p.generation + 1) != generation) { if (prev != null) prev.nextcache = p.nextcache; else buckets[hash] = p.nextcache; } else prev = p; } // if ((hash & 1) == 1) // every 2nd PerlRegExpCache.generation = unchecked(generation + 1); } } else PerlRegExpCache.requestsCounter = 0; } } #endregion #region PerlRegExpConverter /// /// Used for converting PHP Perl like regular expressions to .NET regular expressions. /// internal sealed class PerlRegExpConverter { #region Static & Constants /// /// All named groups from Perl regexp are renamed to start with this character. /// In order to enable group names starting with number /// internal const char GroupPrefix = 'a'; internal const string AnonymousGroupPrefix = "an0ny_"; /// /// Regular expression used for matching quantifiers, they are changed ungreedy to greedy and vice versa if /// needed. /// private static Regex quantifiers { get { if (_quantifiers == null) _quantifiers = new Regex(@"\G(?:\?|\*|\+|\{[0-9]+,[0-9]*\})"); return _quantifiers; } } private static Regex _quantifiers; /// /// Regular expression for POSIX regular expression classes matching. /// private static Regex posixCharClasses { get { if (_posixCharClasses == null) _posixCharClasses = new Regex("^\\[:(^)?(alpha|alnum|ascii|cntrl|digit|graph|lower|print|punct|space|upper|word|xdigit):]", RegexOptions.Singleline | RegexOptions.Compiled); return _posixCharClasses; } } private static Regex _posixCharClasses = null; #endregion #region Fields & Properties /// /// Returns class that can be used for matching. /// public Regex/*!*/ Regex { get { return regex; } } private Regex/*!*/ regex; /// /// Returns .NET replacement string. /// public readonly string DotNetReplaceExpression; /// /// which should be set while matching the expression. May be null /// if is already set. /// public RegexOptions DotNetOptions { get { return dotNetOptions; } } private RegexOptions dotNetOptions; public PerlRegexOptions PerlOptions { get { return perlOptions; } } private PerlRegexOptions perlOptions = PerlRegexOptions.None; private readonly Encoding/*!*/ encoding; /// /// An error message. Is null if all the conversions are ok. /// public string ArgumentException { get; private set; } #endregion #region Cache helper /// /// Internal pointer to the next in the list of cached instances. /// internal PerlRegExpConverter nextcache; /// /// Internal hits counter. Once it gets to specified constant number, gets compiled. /// private int hitsCount = 0; /// /// Current generation. Old generations can be removed from cache. /// internal long generation; internal readonly object _pattern; internal readonly string _replacement, _strpattern; internal void Cachehit() { int hitsCount = this.hitsCount; if (hitsCount < 3 && (Interlocked.Increment(ref this.hitsCount) == 3)) { if (this.regex != null) // && (this.regex.Options & RegexOptions.Compiled) == 0) this.regex = new Regex(this.regex.ToString(), this.dotNetOptions | RegexOptions.Compiled); } } /// /// Function that efficiently compares this instance of with another . /// 1st argument is reference to this. /// 2nd argument is the other's . /// 3nd argument is the other's . /// Function returns true if pattern and replacement match. /// internal readonly Func/*!*/CacheEquals; /// /// Functions for efficient equality check. /// private struct CacheEqualsFunctions { static bool eq_null(PerlRegExpConverter self, object otherpattern, string otherreplacement) { return otherpattern == null && otherreplacement == self._replacement; } static bool eq_string_null(PerlRegExpConverter self, object otherpattern, string otherreplacement) { return otherpattern != null && otherreplacement == null && otherpattern.GetType() == typeof(string) && self._strpattern.Equals((string)otherpattern); } static bool eq_string(PerlRegExpConverter self, object otherpattern, string otherreplacement) { return otherpattern != null && otherreplacement != null && otherpattern.GetType() == typeof(string) && self._strpattern.Equals((string)otherpattern) && self._replacement.Equals(otherreplacement); } static bool eq_phpbytes(PerlRegExpConverter self, object otherpattern, string otherreplacement) { return otherpattern != null && otherpattern.GetType() == typeof(PhpBytes) && ((PhpBytes)otherpattern).Equals((PhpBytes)self._pattern) && otherreplacement == self._replacement; } static bool eq_phpstring(PerlRegExpConverter self, object otherpattern, string otherreplacement) { return otherpattern != null && otherpattern.GetType() == typeof(PhpString) && ((PhpString)otherpattern).Equals((PhpString)self._pattern) && otherreplacement == self._replacement; } static bool eq_default(PerlRegExpConverter self, object otherpattern, string otherreplacement) { return otherpattern != null && otherpattern.GetType() == self._pattern.GetType() && otherpattern.Equals(self._pattern) && otherreplacement == self._replacement; } // cached delegates static Func/*!*/ cacheeq_null = eq_null, cacheeq_string_null = eq_string_null, cacheeq_string = eq_string, cacheeq_phpbytes = eq_phpbytes, cacheeq_phpstring = eq_phpstring, cacheeq_default = eq_default; /// /// Select appropriate equality function delegate for given 's pattern and replacement. /// public static Func/*!*/SelectEqualsFunction(object pattern, string replacement) { if (pattern == null) return CacheEqualsFunctions.cacheeq_null; else if (pattern.GetType() == typeof(string) && replacement == null) return CacheEqualsFunctions.cacheeq_string_null; else if (pattern.GetType() == typeof(string)) return CacheEqualsFunctions.cacheeq_string; else if (pattern.GetType() == typeof(PhpBytes)) return CacheEqualsFunctions.cacheeq_phpbytes; else if (pattern.GetType() == typeof(PhpString)) return CacheEqualsFunctions.cacheeq_phpstring; else return CacheEqualsFunctions.cacheeq_default; } } /// /// Initializes cache-specific fields of new instance. /// private PerlRegExpConverter(object pattern, string replacement) { // used for caching: this._pattern = PhpVariable.Copy(pattern, CopyReason.Assigned); this._strpattern = pattern as string; this._replacement = replacement; // initialize function that effectively checks given pattern whether it is equal to this pattern this.CacheEquals = CacheEqualsFunctions.SelectEqualsFunction(pattern, replacement); } #endregion /// /// Creates new and converts Perl regular expression to .NET. /// /// Perl regular expression to convert. /// Perl replacement string to convert or a null reference for match only. /// Encoding used in the case the pattern is a binary string. public PerlRegExpConverter(object pattern, string replacement, Encoding/*!*/ encoding) : this(pattern, replacement) { if (encoding == null) throw new ArgumentNullException("encoding"); this.encoding = encoding; ConvertPattern(pattern); if (replacement != null && this.regex != null) this.DotNetReplaceExpression = (replacement.Length == 0) ? string.Empty : PerlRegExpReplacement.ConvertReplacement(regex, replacement); } private void ConvertPattern(object pattern) { string perlRegEx; string dotNetMatchExpression = null; try { // convert pattern into string, parse options: if (pattern != null && pattern.GetType() == typeof(PhpBytes)) perlRegEx = LoadPerlRegex(((PhpBytes)pattern).ReadonlyData); else perlRegEx = LoadPerlRegex(PHP.Core.Convert.ObjectToString(pattern)); // convert pattern into regex: dotNetMatchExpression = ConvertRegex(perlRegEx, this.perlOptions, this.encoding); // process the regex: this.regex = new Regex(dotNetMatchExpression, dotNetOptions); } catch (ArgumentException e) { this.ArgumentException = ExtractExceptionalMessage(e.Message, dotNetMatchExpression); } } /// /// Extracts the .NET exceptional message from the message stored in an exception. /// The message has format 'parsing "{pattern}" - {message}\r\nParameter name {pattern}' in .NET 1.1. /// private static string ExtractExceptionalMessage(string message, string dotNetMatchExpression) { if (message != null) { if (dotNetMatchExpression != null) message = message.Replace(dotNetMatchExpression, ""); int i = message.IndexOf("\r\n"); if (i >= 0) message = message.Substring(0, i); i = message.IndexOf("-"); if (i >= 0) message = message.Substring(i + 2); return message; } else { return string.Empty; } } internal string ConvertString(string str, int start, int length) { if ((perlOptions & PerlRegexOptions.UTF8) != 0 && !StringUtils.IsAsciiString(str, start, length)) #if SILVERLIGHT { byte[] bytes = new byte[encoding.GetByteCount(str)]; encoding.GetBytes(str, 0, str.Length, bytes, 0); return System.Text.Encoding.UTF8.GetString(bytes, 0, bytes.Length); } #else return Encoding.UTF8.GetString(encoding.GetBytes(str.Substring(start, length))); #endif else return str.Substring(start, length); } internal string ConvertBytes(byte[] bytes) { return ConvertBytes(bytes, 0, bytes.Length); } internal string ConvertBytes(byte[] bytes, int start, int length) { if ((perlOptions & PerlRegexOptions.UTF8) != 0) return Encoding.UTF8.GetString(bytes, start, length); else return encoding.GetString(bytes, start, length); } private string LoadPerlRegex(byte[] pattern) { if (pattern == null) pattern = ArrayUtils.EmptyBytes; int regex_start, regex_end; StringUtils.UniformWrapper upattern = new StringUtils.BytesWrapper(pattern); FindRegexDelimiters(upattern, out regex_start, out regex_end); ParseRegexOptions(upattern, regex_end + 2, out dotNetOptions, out perlOptions); return ConvertBytes(pattern, regex_start, regex_end - regex_start + 1); } private string LoadPerlRegex(string pattern) { if (pattern == null) pattern = ""; int regex_start, regex_end; StringUtils.UniformWrapper upattern = new StringUtils.StringWrapper(pattern); FindRegexDelimiters(upattern, out regex_start, out regex_end); ParseRegexOptions(upattern, regex_end + 2, out dotNetOptions, out perlOptions); return ConvertString(pattern, regex_start, regex_end - regex_start + 1); } private void FindRegexDelimiters(StringUtils.UniformWrapper pattern, out int start, out int end) { int i = 0; while (i < pattern.Length && Char.IsWhiteSpace(pattern[i])) i++; if (i == pattern.Length) throw new ArgumentException(LibResources.GetString("regular_expression_empty")); char start_delimiter = pattern[i++]; if (Char.IsLetterOrDigit(start_delimiter) || start_delimiter == '\\') throw new ArgumentException(LibResources.GetString("delimiter_alnum_backslash")); start = i; char end_delimiter; if (start_delimiter == '[') end_delimiter = ']'; else if (start_delimiter == '(') end_delimiter = ')'; else if (start_delimiter == '{') end_delimiter = '}'; else if (start_delimiter == '<') end_delimiter = '>'; else end_delimiter = start_delimiter; int depth = 1; while (i < pattern.Length) { if (pattern[i] == '\\' && i + 1 < pattern.Length) { i += 2; continue; } else if (pattern[i] == end_delimiter) // (1) should precede (2) to handle end_delim == start_delim case { depth--; if (depth == 0) break; } else if (pattern[i] == start_delimiter) // (2) { depth++; } i++; } if (i == pattern.Length) throw new ArgumentException(LibResources.GetString("preg_no_end_delimiter", end_delimiter)); end = i - 1; } private static void ParseRegexOptions(StringUtils.UniformWrapper pattern, int start, out RegexOptions dotNetOptions, out PerlRegexOptions extraOptions) { dotNetOptions = RegexOptions.None; extraOptions = PerlRegexOptions.None; for (int i = start; i < pattern.Length; i++) { char option = pattern[i]; switch (option) { case 'i': // PCRE_CASELESS dotNetOptions |= RegexOptions.IgnoreCase; break; case 'm': // PCRE_MULTILINE dotNetOptions |= RegexOptions.Multiline; break; case 's': // PCRE_DOTALL dotNetOptions |= RegexOptions.Singleline; break; case 'x': // PCRE_EXTENDED dotNetOptions |= RegexOptions.IgnorePatternWhitespace; break; case 'e': // evaluate as PHP code extraOptions |= PerlRegexOptions.Evaluate; break; case 'A': // PCRE_ANCHORED extraOptions |= PerlRegexOptions.Anchored; break; case 'D': // PCRE_DOLLAR_ENDONLY extraOptions |= PerlRegexOptions.DollarMatchesEndOfStringOnly; break; case 'S': // spend more time studying the pattern - ignore break; case 'U': // PCRE_UNGREEDY extraOptions |= PerlRegexOptions.Ungreedy; break; case 'u': // PCRE_UTF8 extraOptions |= PerlRegexOptions.UTF8; break; case 'X': // PCRE_EXTRA PhpException.Throw(PhpError.Warning, LibResources.GetString("modifier_not_supported", option)); break; default: PhpException.Throw(PhpError.Notice, LibResources.GetString("modifier_unknown", option)); break; } } // inconsistent options check: if ( (dotNetOptions & RegexOptions.Multiline) != 0 && (extraOptions & PerlRegexOptions.DollarMatchesEndOfStringOnly) != 0 ) { PhpException.Throw(PhpError.Notice, LibResources.GetString("modifiers_inconsistent", 'D', 'm')); } } /// /// Parses escaped sequences: "\[xX][0-9A-Fa-f]{2}", "\[xX]\{[0-9A-Fa-f]{0,4}\}", "\[0-7]{3}", /// "\[pP]{Unicode Category}" /// private static bool ParseEscapeCode( //Encoding/*!*/ encoding, string/*!*/ str, ref int pos, ref int ch, ref bool escaped) { Debug.Assert(/*encoding != null &&*/ str != null && pos >= 0 && pos < str.Length && str[pos] == '\\'); if (pos + 3 >= str.Length) return false; int number = 0; if (str[pos + 1] == 'x') { if (str[pos + 2] == '{') { // hexadecimal number encoding a Unicode character: int i = pos + 3; while (i < str.Length && str[i] != '}' && number < Char.MaxValue) { int digit = Core.Parsers.Convert.AlphaNumericToDigit(str[i]); if (digit > 16) return false; number = (number << 4) + digit; i++; } if (/*number > Char.MaxValue || */i >= str.Length) return false; pos = i; ch = number; escaped = ch < Char.MaxValue ? IsCharRegexSpecial((char)ch) : false; } else { // hexadecimal number encoding single-byte character: for (int i = pos + 2; i < pos + 4; i++) { Debug.Assert(i < str.Length); int digit = Core.Parsers.Convert.AlphaNumericToDigit(str[i]); if (digit > 16) return false; number = (number << 4) + digit; } pos += 3; ch = number; //char[] chars = encoding.GetChars(new byte[] { (byte)number }); //if (chars.Length == 1) // ch = chars[0]; //else // ch = number; escaped = ch < Char.MaxValue ? IsCharRegexSpecial((char)ch) : false; } return true; } else if (str[pos + 1] >= '0' && str[pos + 1] <= '7') { // octal number: for (int i = pos + 1; i < pos + 4; i++) { Debug.Assert(i < str.Length); int digit = Core.Parsers.Convert.AlphaNumericToDigit(str[i]); if (digit > 8) return false; number = (number << 3) + digit; } pos += 3; ch = number;//encoding.GetChars(new byte[] { (byte)number })[0]; escaped = ch < Char.MaxValue ? IsCharRegexSpecial((char)ch) : false; return true; } else if (str[pos + 1] == 'p' || str[pos + 1] == 'P') { bool complement = str[pos + 1] == 'P'; int cat_start; if (str[pos + 2] == '{') { if (!complement && str[pos + 3] == '^') { complement = true; cat_start = pos + 4; } else cat_start = pos + 3; } else { cat_start = pos + 2; } UnicodeCategoryGroup group; UnicodeCategory category; int cat_length = StringUtils.ParseUnicodeDesignation(str, cat_start, out group, out category); int cat_end = cat_start + cat_length - 1; // unknown category: if (cat_length == 0) return false; // check closing brace: if (str[pos + 2] == '{' && (cat_end + 1 >= str.Length || str[cat_end + 1] != '}')) return false; // TODO: custom categories on .NET 2? // Unicode category: PhpException.Throw(PhpError.Warning, "Unicode categories not supported."); // ?? if (complement) pos = pos; return false; } else if (str[pos + 1] == 'X') { PhpException.Throw(PhpError.Warning, "Unicode categories not supported."); return false; } return false; } /// /// Characters that must be encoded in .NET regexp /// static char[] encodeChars = new char[] { '.', '$', '(', ')', '*', '+', '?', '[', ']', '{', '}', '\\', '^', '|' }; /// /// Returns true if character needs to be escaped in .NET regex /// private static bool IsCharRegexSpecial(char ch) { return Array.IndexOf(encodeChars, ch) != -1; } /// /// Converts Perl match expression (only, without delimiters, options etc.) to .NET regular expression. /// /// Perl regular expression to convert. /// Regexp options - some of them must be processed by changes in match string. /// Encoding used for character ranges and escaping. /// Resulting .NET regular expression. internal static string ConvertRegex(string perlExpr, PerlRegexOptions opt, Encoding encoding) { // Ranges in bracket expressions should be replaced with appropriate characters // assume no conversion will be performed, create string builder with exact length. Only in // case there is a range StringBuilder would be prolonged, +1 for Anchored StringBuilder result = new StringBuilder(perlExpr.Length + 1); // Anchored means that the string should match only at the start of the string, add '^' // at the beginning if there is no one if ((opt & PerlRegexOptions.Anchored) != 0 && (perlExpr.Length == 0 || perlExpr[0] != '^')) result.Append('^'); // set to true after a quantifier is matched, if there is second quantifier just behind the // first it is an error bool last_quantifier = false; // 4 means we're switching from 3 back to 2 - ie. "a-b-c" // (we need to make a difference here because second "-" shouldn't be expanded) bool leaving_range = false; // remember the last character added in the character class, so in state 3 we can expand the range as properly as possible int range_from_character = -1; bool escaped = false; int state = 0; int inner_state = 0; HashSet addedSurrogate2Ranges = null; // cache of already added character pairs valid within character class [], dropped when switching to 0 int group_number = 0; int i = 0; while (i < perlExpr.Length) { int ch = perlExpr[i]; escaped = false; if (ch == '\\' && !ParseEscapeCode(/*encoding,*/ perlExpr, ref i, ref ch, ref escaped)) { i++; Debug.Assert(i < perlExpr.Length, "Regex cannot end with backslash."); ch = perlExpr[i]; if (ch == 'g') { ++i; inner_state = 5; // skip 'g' from resulting pattern escaped = false; continue; } else if (ch == 'k') { inner_state = 11; escaped = true; } // some characters (like '_') don't need to be escaped in .net // and ignore escaping of unicode sequence of characters if (ch == '_' || (int)ch > 0x7F) escaped = false; else escaped = true; } switch (state) { case 0: // outside of character class if (escaped) { result.Append('\\'); Append(result, ch); last_quantifier = false; break; } // In perl regexps, named groups are written like this: "(?P ... )" // (\k...) // (\k'name'...) // (\k{name}...) // (\g{name}...) // (?'name'...) // (?...) // (?P=name) // (?:...) // If the group is starting here, we need to skip the 'P' character (see state 4) switch (inner_state) { case 0: if (ch == '(') { inner_state = 1; // Look-ahead and name anonymous groups. // This is used to match the order of the results. // As perlre doc says: // NOTE: While the notation of this construct [grouping] is the same as the similar function in .NET regexes, // the behavior is not. In Perl the groups are numbered sequentially regardless of being named or not. ++group_number; if (i + 1 < perlExpr.Length) { if (perlExpr[i + 1] != '?') { ++i; result.Append("(?<"); result.Append(AnonymousGroupPrefix); result.Append(group_number); result.Append('>'); continue; } else if (i + 2 < perlExpr.Length && perlExpr[i + 2] == ':') { // Pseudo-group, don't count. --group_number; } } } else if (ch == '\\') inner_state = 4; else inner_state = 0; break; //groups case 1: if (ch == '?') inner_state = 2; else if (ch != '(')// stay in inner_state == 1, because this can happen: ((?...)) inner_state = 0; break; case 2: if (ch == 'P') { i++; inner_state = 3; continue; //skip 'P' from resulting pattern } else if (ch == '<') { inner_state = 15; break; } else if (ch == '\'') { i++; result.Append('\''); result.Append(GroupPrefix); inner_state = 0; continue; } inner_state = 0; break; case 3: // '(?P' if (ch == '=') { ++i; inner_state = 12; continue; //skip '=' from resulting pattern } else if (ch != '<')// if P wasn't part of "(?P ... )" neither '(?P=name)' back reference, so put it back to the pattern { result.Append('P'); } else if (ch == '<') { i++; result.Append('<'); result.Append(GroupPrefix); inner_state = 0; continue; } inner_state = 0; break; // /g[0-9]{1,2} back references case 5: // '\g' result.Append('\\'); if (ch == '{') { i++; inner_state = 6; continue; // skip '{' from resulting pattern } else if (ch >= '0' && ch <= '9') { inner_state = 0; // just copy the rest of the pattern } else { result.Append('g'); // unexpected character after '/g', so put g back to pattern inner_state = 0; } break; case 6: // '\g{' if (ch >= '0' && ch <= '9') { inner_state = 7; } else { // it can be named group result.Append("k<"); result.Append(GroupPrefix); inner_state = 10; //result.Append("g{"); // unexpected character after '/g{', so put it back to pattern //group_state = 0; } break; case 7:// '\g{[0-9]' if (ch == '}') { i++; inner_state = 9; continue; // skip '}' from resulting pattern } else if (ch >= '0' && ch <= '9') { inner_state = 8; } else { //name of the group starts with a number //put behind PreGroupNameSign result.Insert(result.Length - 1, "k<"); result.Insert(result.Length - 1, GroupPrefix); inner_state = 14; } break; case 8: // '\g{[0-9][0-9]' if (ch == '}') { i++; inner_state = 9; continue; // skip '}' from resulting pattern } else { //name of the group starts with a number //put behind PreGroupNameSign result.Insert(result.Length - 1, "k<"); result.Insert(result.Length - 2, GroupPrefix); inner_state = 14; } // there is just 99 back references possible inner_state = 0; break; case 9:// '\g{[0-9][0-9]?}' if (ch >= '0' && ch <= '9') { result.Append("(?#)"); // put this to the resulting pattern to separate number of the reference from number that follows } inner_state = 0; break; // named back references case 10:// '\g{.*?}' | '\k{.*?}' if (ch == '}') { ++i; result.Append('>'); inner_state = 0; continue; // skip '}' from resulting pattern } break; case 11:// '\k' if (ch == '{') { i++; inner_state = 10; result.Append('<'); result.Append(GroupPrefix); continue; // skip '{' from resulting pattern } else if (ch == '<') { i++; result.Append('<'); result.Append(GroupPrefix); inner_state = 0; continue; } else if (ch == '\'') { i++; result.Append('\''); result.Append(GroupPrefix); inner_state = 0; continue; } inner_state = 0; break; // transforming '(?P=name)' to '\k' case 12: // '(?P=' // (? was already put in the pattern, so replace it with '\k' result[result.Length - 2] = '\\'; result[result.Length - 1] = 'k'; // add '<' so it is '\k<' result.Append('<'); result.Append(GroupPrefix); inner_state = 13; break; case 13: // '(?P=.*?' if (ch == ')') { ++i; result.Append('>'); inner_state = 0; continue; // skip ')' from resulting pattern } break; case 14:// '\g{[0-9].*?' if (ch == '}') { i++; inner_state = 9; result.Append(">"); continue; // skip '}' from resulting pattern } break; case 15:// (?< //Add group prefix only if it's not lookbehind assertions //(? 0) throw new ArgumentException(/*TODO*/ "POSIX character classes negation not supported."); result.Append(chars); range_from_character = -1; // -1 means, it is not rangable :) i += match.Length - 1; // +1 is added just behind the switch break; } if (ch == ']') { addedSurrogate2Ranges = null; // drop the cache of ranges state = 0; } // append range_from_character = ch; if (ch == '-') result.Append("\\x2d"); else AppendEscaped(result, ch); break; case 3: // range previous character was '-' if (!escaped && ch == ']') { if (range_from_character > char.MaxValue) throw new ArgumentException("Cannot range from an UTF-32 character to unknown."); result.Append("-]"); addedSurrogate2Ranges = null; // drop the cache of ranges state = 0; break; } //string range; //int error; //if (!PosixRegExp.BracketExpression.CountRange(result[result.Length - 1], ch, out range, out error)) //{ // if ((error != 1) || (!CountUnicodeRange(result[result.Length - 1], ch, out range))) // { // Debug.Assert(error == 2); // throw new ArgumentException(LibResources.GetString("range_first_character_greater")); // } //} //PosixRegExp.BracketExpression.EscapeBracketExpressionSpecialChars(result, range); // left boundary is duplicated, but doesn't matter... if (addedSurrogate2Ranges == null) addedSurrogate2Ranges = new HashSet(); // initialize the cache of already added character ranges, invalidated at the end of character class if (ch != range_from_character) { // -: // 1. - // 2. - // 3. - if (range_from_character <= char.MaxValue) { if (ch <= char.MaxValue) { //symbol order can be different, not testet with other modes var seqBreak = false; int from = 0; int to = 0; if (encoding.IsSingleByte) { var bytes = encoding.GetBytes(new char[] { (char)range_from_character }); from = (int)bytes[0]; bytes = encoding.GetBytes(new char[] { (char)ch }); to = (int)bytes[0]; var lastChar = range_from_character; for (int j = from; j < to; j++) { var chars = encoding.GetChars(new[] { (byte)(j + 1) }); if (chars[0] - lastChar != 1) { seqBreak = true; break; } lastChar = chars[0]; } } // 1. if (!seqBreak) { result.Append('-'); AppendEscaped(result, ch); } else { for (int j = from; j < to; j++) { var chars = encoding.GetChars(new[] { (byte)(j + 1) }); AppendEscaped(result, chars[0]); } } } else { // 2. result.Append('-'); AppendEscaped(result, char.MaxValue); // count - CountUTF32Range(result, char.MaxValue + 1, ch, addedSurrogate2Ranges); } } else { // 3. utf32 range result.Length -= 2; CountUTF32Range(result, range_from_character, ch, addedSurrogate2Ranges); } } state = 2; leaving_range = true; range_from_character = -1; break; } i++; } return ConvertPossesiveToAtomicGroup(result); } private static void AppendEscaped(StringBuilder/*!*/sb, int ch) { Debug.Assert(sb != null); if (ch < 0x80 && ch != '\\' && ch != '-') sb.Append((char)ch); else AppendUnicode(sb, ch); } private static void Append(StringBuilder/*!*/sb, int ch) { Debug.Assert(sb != null); Debug.Assert(ch >= 0); if (ch < Char.MaxValue && ch > 0) sb.Append((char)ch); else AppendUnicode(sb, ch); } private static void AppendUnicode(StringBuilder/*!*/sb, int ch) { Debug.Assert(sb != null); if (ch <= Char.MaxValue) sb.Append(@"\u" + ((int)ch).ToString("X4")); else sb.Append(Char.ConvertFromUtf32(ch)); } #region Conversion of possesive quantifiers internal struct brace { public brace(int position, char braceType) { this.position = position; this.braceType = braceType; } public int position; public char braceType; } /// /// Convert possesive quantifiers to atomic group, which .NET support. /// /// /// /// Works on these cases *+, ++, ?+, {}+ /// private static string ConvertPossesiveToAtomicGroup(StringBuilder pattern) { const int preallocatedAttomicGroups = 10; const string atomicGroupStart = "(?>"; const string atomicGroupEnd = ")"; Stack braceStack = new Stack(16); int state = 0; int escape_state = 0; int escapeSequenceStart = 0; int offset = 0; StringBuilder sb = new StringBuilder(pattern.Length + atomicGroupStart.Length * preallocatedAttomicGroups);//, 0, pattern.Length, pattern.Length + 4 * 10); // (?>) Action addAtomicGroup = (start) => { sb.Insert(start, atomicGroupStart); sb.Append(atomicGroupEnd); offset += atomicGroupStart.Length; }; Action pushToStack = (pos, ch) => { braceStack.Push(new brace(pos + offset, ch)); }; brace LastBrace = new brace(); bool escaped = false; int i = 0; while (i < pattern.Length) { char ch = pattern[i]; //TODO: handle comments if (!escaped) { switch (state) { case 0: if (ch == '(') { pushToStack(i, ch); state = 2; } else if (ch == '[') { pushToStack(i, ch); state = 12; } break; case 2: // (. if (ch == ')') state = 3; else if (ch == '(') //nested ( pushToStack(i, ch); else if (ch == '[') { state = 12; pushToStack(i, ch); } break; case 3: // (...) LastBrace = braceStack.Pop(); if (ch == '*' || ch == '?' || ch == '+') state = 4; else if (ch == '{') state = 5; else { state = DecideState(pattern, braceStack); continue; } break; case 4: // (...)*+ | (...)++ | (...)?+ if (ch == '+') { addAtomicGroup(LastBrace.position); state = DecideState(pattern, braceStack); ++i; continue; } else state = DecideState(pattern, braceStack); break; case 5: // (...){ if (ch == '}') state = 4; //if (!char.IsDigit(ch)) //{ // state = DecideState(pattern, braceStack); //} break; case 12: // [. if (ch == ']') state = 13; //else //if (ch == '(') //{ // state = 2; // pushToStack(i, ch); //} else if (ch == '[') { pushToStack(i, ch); } break; case 13: // [...] LastBrace = braceStack.Pop(); if (ch == '*' || ch == '?' || ch == '+') state = 14; else if (ch == '{') state = 15; else state = DecideState(pattern, braceStack); break; case 14: // [...]*+ if (ch == '+') { addAtomicGroup(LastBrace.position); state = DecideState(pattern, braceStack); ++i; continue; } else { state = DecideState(pattern, braceStack); continue; } case 15: // [...]{ if (ch == '}') state = 4; break; } } else { //escaped switch (escape_state) { case 0: if (ch == '\\') { escape_state = 0; } else { escape_state = 1; } break; case 1:// \. if (ch == '*' || ch == '?' || ch == '+') escape_state = 2; else escape_state = 0; break; case 2: if (ch == '+') { escape_state = 0; addAtomicGroup(escapeSequenceStart); ++i; } else { escape_state = 0; } break; } if (escape_state == 0) { escaped = false; continue; } } if (ch == '\\' && escaped == false) { escaped = true; escapeSequenceStart = i + offset; } ++i; sb.Append(ch); } return sb.ToString(); } private static int DecideState(StringBuilder pattern, Stack braceStack) { int state; if (braceStack.Count > 0) { brace SecondToLastBrace = braceStack.Pop(); braceStack.Push(SecondToLastBrace); if (SecondToLastBrace.braceType == '(') state = 2; else state = 12; } else state = 0; return state; } #endregion ///// ///// Simple version of 'PosixRegExp.BracketExpression.CountRange' function. Generates string ///// with all characters in specified range, but uses unicode encoding. ///// ///// Lower bound ///// Upper bound ///// Returned string ///// Returns false if lower bound is larger than upper bound //private static bool CountUnicodeRange(char f, char t, out string range) //{ // range = ""; // if (f > t) return false; // StringBuilder sb = new StringBuilder(t - f); // for (char c = f; c <= t; c++) sb.Append(c); // range = sb.ToString(); // return true; //} /// /// Ranges characters from up to inclusive, where characters are UTF32. /// We will only list every from surrogate pair once (same result as writing all the characters one by one). /// /// /// /// /// Cache of already added character pairs to avoid duplicitous character ranges. private static void CountUTF32Range(StringBuilder/*!*/sb, int chFrom, int chTo, HashSet/*!*/addedSurrogate2Ranges) { Debug.Assert(addedSurrogate2Ranges != null); Debug.Assert(chFrom > Char.MaxValue); Debug.Assert(chTo > Char.MaxValue); // chFrom -= char.MaxValue + 1; chTo -= char.MaxValue + 1; // whether the range of the same surrogate1 starts bool start = true; // range UTF32 characters for (; chFrom <= chTo; chFrom++) { // current UTF32 character "": char a1 = (char)(chFrom / 1024 + 55296); // surrogate pair [1] char a2 = (char)(chFrom % 1024 + 56320); // surrogate pair [2] //var str = new string(new char[] { a1, a2 }); // single UTF32 character // output: if (start) // first character from the range of the same surrogate1 { start = false; // "" // try to compress : // convert "-ab" to "-b", where a+1 == b if (sb.Length >= 2 && sb[sb.Length - 1] + 1 == a1 && sb[sb.Length - 2] == '-' && (sb.Length < 3 || sb[sb.Length - 3] != '\\')) // '-' is not escaped { sb[sb.Length - 1] = a1; // extend the range } // convert "abc" to "a-c", where a+2 == b+1 == c else if (sb.Length >= 2 && sb[sb.Length - 1] + 1 == a1 && sb[sb.Length - 2] + 2 == a1) { // a,b,c are all UTF32 surrogate1 sb[sb.Length - 1] = '-'; sb.Append(a1); } else { sb.Append(a1); } // sb.Append(a2); } else if ((chFrom + 1) > chTo || a1 != (char)((chFrom + 1) / 1024 + 55296)) // finish the range (end of the range || different next surrogate1) { AddCharacterRangeChecked(sb, a2, addedSurrogate2Ranges); start = true; } else { // in range ... } } } /// /// Adds "-" iff there is not the same character range in the result already. Otherwise the last character form is removed. /// /// with lower bound of the range already added. /// Upper bound of the range. /// Cache of already added character pairs. /// Assumes there is starting character at the end of . private static void AddCharacterRangeChecked(StringBuilder/*!*/sb, char chTo, HashSet/*!*/addedSurrogate2Ranges) { Debug.Assert(addedSurrogate2Ranges != null); Debug.Assert(sb.Length > 0); char previous = sb[sb.Length - 1]; // the lower bound already in the result uint print = (uint)previous | ((uint)chTo << 16); // the "hash" of the character range to be inserted if (addedSurrogate2Ranges.Add(print)) // is the range not in the result yet? { // and of the range with the same surrogate1 // "-" wil be in the sb.Append('-'); sb.Append(chTo); } else { // "-" already in the result, just "remove" the last character from the sb.Length--; } } /// /// Modifies regular expression so it matches only at the beginning of the string. /// /// Regular expression to modify. private static void ModifyRegExpAnchored(ref string expr) { // anchored means regular expression should match only at the beginning of the string // => add ^ at the beginning if there is no one. if (expr.Length == 0 || expr[0] != '^') expr.Insert(0, "^"); } } #endregion } ================================================ FILE: Source/ClassLibrary/RegExpPosix.cs ================================================ /* Copyright (c) 2004-2006 Pavel Novak and Tomas Matousek. The use and distribution terms for this software are contained in the file named License.txt, which can be found in the root of the Phalanger distribution. By using this software in any fashion, you are agreeing to be bound by the terms of this license. You must not remove this notice from this software. */ using System; using System.Text; using System.Text.RegularExpressions; using PHP.Core; using System.Diagnostics; namespace PHP.Library { /// /// Implements POSIX extended regular expressions as they are implemented in PHP. /// /// [ImplementsExtension(LibraryDescriptor.ExtEreg)] public static class PosixRegExp { #region sql_regcase /// /// Returns a valid regular expression which will match string, ignoring case. /// /// String for that is case insensitive regular expression created. /// Regular expression matching str case insensitive. /// This expression is string with each character converted to a bracket expression; /// this bracket expression contains that character's uppercase and lowercase form if applicable, /// otherwise it contains only the original character. /// [ImplementsFunction("sql_regcase")] public static string GetCaseInsensitivePattern(string str) { PhpException.FunctionDeprecated("sql_regcase"); if (String.IsNullOrEmpty(str)) return ""; StringBuilder regcaseStr = new StringBuilder(str.Length * 4); // estimated necessary capacity of StringBuilder char upper; char lower; foreach (char ch in str) { upper = Char.ToUpper(ch); lower = Char.ToLower(ch); if (upper == lower) //non-alphabetic character { regcaseStr.Append('['); regcaseStr.Append(ch); regcaseStr.Append(']'); } else { regcaseStr.Append('['); regcaseStr.Append(upper); regcaseStr.Append(lower); regcaseStr.Append(']'); } } return regcaseStr.ToString(); } #endregion #region ereg_replace, eregi_replace /// /// This function scans str for matches to pattern and replaces the matched text with replacement. /// The modified string is returned. Pattern can contain parenthesized substrings in this case /// replacement may contain substrings of the form \\digit, they will be replaced by the text /// matching the digit'th parenthesized substring. \\0 means the entire contents of string. /// Up to nine substrings (1..9) may be used. Parentheses may be nested, in which case they are counted by the opening parenthesis. /// /// Regular expression that is matched to str. /// String that will be placed instead of string that matched pattern. /// Scanned string. /// Modified string with replacements. If there is no match found, unmodified str is returned. [ImplementsFunction("ereg_replace")] public static string Replace(string pattern, string replacement, string str) { PhpException.FunctionDeprecated("ereg_replace"); try { // convert Posix pattern to .NET regular expression and create regular expression object Regex r = new Regex(ConvertPosix2DotNetExpr(pattern)); // convert Posix replacement to .NET regular expression // (there may be \\digit references to pattern) and replace return r.Replace(str, ConvertPosix2DotNetRepl(replacement, r.GetGroupNumbers())); } catch (PhpException) { // PhpExceptions rethrow immediately throw; } catch (System.Exception e) { // all other exceptions convert to PhpException, we want to handle they in the same way // (display to user in web browser etc.) PhpException.Throw(PhpError.Warning, e.Message); return null; } } /// /// Case insensitive version of ereg_replace. /// Ignores case distinction when matching characters. Other behaviour is identical to ereg_replace. /// /// Regular expression that is matched to str. /// String that will be placed instead of string that matched pattern. /// Scanned string. /// Modified string with replacements. If there is no match found, unmodified str is returned. [ImplementsFunction("eregi_replace")] public static string ReplaceIgnoreCase(string pattern, string replacement, string str) { PhpException.FunctionDeprecated("eregi_replace"); try { // convert Posix pattern to .NET regular expression and create regular expression object Regex r = new Regex(ConvertPosix2DotNetExpr(pattern), RegexOptions.IgnoreCase); // convert Posix replacement to .NET regular expression // (there may be \\digit references to pattern) and replace return r.Replace(str, ConvertPosix2DotNetRepl(replacement, r.GetGroupNumbers())); } catch (PhpException) { // PhpExceptions rethrow immediately throw; } catch (System.Exception e) { // all other exceptions convert to PhpException, we want to handle they in the same way // (display to user in web browser etc.) PhpException.Throw(PhpError.Warning, e.Message); return null; } } #endregion #region ereg, eregi /// /// Scans str for matches to the regular expression pattern (case sensitive). /// /// Regular expression. /// Scanned string. /// True if there is a match, false otherwise. [ImplementsFunction("ereg")] [return: CastToFalse] public static int Match(string pattern, string str) { PhpException.FunctionDeprecated("ereg"); try { // convert and find match if (Regex.IsMatch(str, ConvertPosix2DotNetExpr(pattern))) return 1; else return -1; } catch (PhpException) { throw; } catch (System.Exception e) { // all other exceptions convert to PhpException, we want to handle they in the same way // (display to user in web browser etc.) PhpException.Throw(PhpError.Warning, e.Message); return -1; } } /// /// Scans str for matches to the regular expression pattern (case sensitive). /// If pattern contains parentheses and matches are found for parenthesized substrings, these matches /// are stored in registers array. /// /// /// registers[0] contains whole matched string, /// registers[1] to registers[9] contain matched substrings, if applicable. /// Parenthesized substrigs are counted according to open parenthesis. /// /// Extension to PHP: if pattern contains /// more than 9 parenthesis all of matched substrings are stored in registers array, /// not only first 9 of them. /// /// Regular expression. /// Scanned string. /// Array containing matches for parenthesized substrings. /// True if there is a match, false otherwise. [ImplementsFunction("ereg")] [return: CastToFalse] public static int Match(string pattern, string str, PhpReference registers) { PhpException.FunctionDeprecated("ereg"); Match m; try { m = Regex.Match(str, ConvertPosix2DotNetExpr(pattern)); } catch (PhpException) { throw; } catch (System.Exception e) { PhpException.Throw(PhpError.Warning, e.Message); return -1; } if (!m.Success) return -1; // fill registers PhpArray result = new PhpArray(m.Groups.Count, 0); for (int i = 0; i < m.Groups.Count; i++) { // index 0 contains string that suits the whole reg. expression string value = m.Groups[i].Value; result.Add(i, (value.Length == 0 ? (object)false : (object)value)); } registers.value = result; int matched_length = m.Groups[0].Value.Length; // match was successful, at least index 0 exist // return 1 if the length of matched string is zero (according to PHP manual) if (matched_length == 0) return 1; return matched_length; } /// /// Case insensitive variation of ereg function. /// /// ereg() /// /// Regular expression. /// Scanned string. /// True if there is a match, false otherwise. [ImplementsFunction("eregi")] [return: CastToFalse] public static int MatchIgnoreCase(string pattern, string str) { PhpException.FunctionDeprecated("eregi"); try { // convert and find match if (Regex.IsMatch(str, ConvertPosix2DotNetExpr(pattern), RegexOptions.IgnoreCase)) return 1; else return -1; } catch (PhpException) { throw; } catch (System.Exception e) { // all other exceptions convert to PhpException, we want to handle they in the same way // (display to user in web browser etc.) PhpException.Throw(PhpError.Warning, e.Message); return -1; } } /// /// Case insensitive variation of ereg function. /// /// ereg() /// /// Regular expression. /// Scanned string. /// Array containing matches for parenthesized substrings. /// True if there is a match, false otherwise. [ImplementsFunction("eregi")] [return: CastToFalse] public static int MatchIgnoreCase(string pattern, string str, PhpReference registers) { PhpException.FunctionDeprecated("eregi"); Match m; try { m = Regex.Match(str, ConvertPosix2DotNetExpr(pattern), RegexOptions.IgnoreCase); } catch (PhpException) { throw; } catch (System.Exception e) { PhpException.Throw(PhpError.Warning, e.Message); return -1; } if (!m.Success) return -1; // fill registers PhpArray result = new PhpArray(m.Groups.Count, 0); for (int i = 0; i < m.Groups.Count; i++) { // index 0 contains string that suits the whole reg. expression result.Add(i, m.Groups[i].Value); } registers.value = result; int matched_length = m.Groups[0].Value.Length; // match was successful, at least index 0 exist // return 1 if the length of matched string is zero (according to PHP manual) if (matched_length == 0) return 1; return matched_length; } #endregion #region split, spliti /// /// Splits string str to arrays of strings by regular expression pattern /// (case sensitive). /// /// Regular expression matching string delimiters. /// String to split according to regular expression. /// Array of substrings. [ImplementsFunction("split")] public static PhpArray Split(string pattern, string str) { PhpException.FunctionDeprecated("split"); return DoSplit( pattern, str, 0, false, // do not use limit (previous parameter) false // case sensitive ); } /// /// Splits string str to arrays of strings by regular expression pattern. /// Returned array contains max. limit elements. If there is more substrings in str, /// array contains only first limit-1 substrings and last element contains the whole rest /// of input string. /// /// Regular expression matching string delimiters. /// String to split according to regular expression. /// Max number of elements in returned array. /// Array of substrings. [ImplementsFunction("split")] public static PhpArray Split(string pattern, string str, int limit) { PhpException.FunctionDeprecated("split"); return DoSplit( pattern, str, limit, true, // use limit (previous parameter) false // case sensitive ); } /// /// Splits string str to arrays of strings by regular expression pattern /// in case insensitive way. /// /// Regular expression matching string delimiters. /// String to split according to regular expression. /// Array of substrings. [ImplementsFunction("spliti")] public static PhpArray SplitIgnoreCase(string pattern, string str) { PhpException.FunctionDeprecated("spliti"); return DoSplit( pattern, str, 0, false, // do not use limit (previous parameter) true // ignore case ); } /// /// Splits string str to arrays of strings by regular expression pattern /// in case insensitive way. /// Returned array contains max. limit elements. If there is more substrings in str, /// array contains only first limit-1 substrings and last element contains the whole rest /// of input string. /// /// Regular expression matching string delimiters. /// String to split according to regular expression. /// Max number of elements in returned array. /// Array of substrings. [ImplementsFunction("spliti")] public static PhpArray SplitIgnoreCase(string pattern, string str, int limit) { PhpException.FunctionDeprecated("spliti"); return DoSplit( pattern, str, limit, true, // use limit (previous parameter) true // ignore case ); } /// /// Implementation of functions family "split" /// /// POSIX regular expression that match delimiter. /// String to split. /// Maximum elements of output array. /// True if you want to use previous parameter. /// True if str is matched case insensitive, false otherwise. /// Array containing parts of str public static PhpArray DoSplit(string pattern, string str, int limit, bool useLimit, bool ignoreCase) { System.Array sAr; if (useLimit) { // in PHP limit < 1 means the same as 1, no error or warning is written if (limit < 1) { PhpException.Throw(PhpError.Warning, LibResources.GetString("limit_less_than_one")); limit = 1; } // there is no static method with parameter "limit", we must instantiate Regex Regex reg = new Regex(ConvertPosix2DotNetExpr(pattern)); sAr = reg.Split(str, limit); } else { // we can use static method sAr = Regex.Split(str, ConvertPosix2DotNetExpr(pattern)); } return new PhpArray(sAr, 0, sAr.Length); } #endregion #region BracketExpression class /// /// Class representing one bracket expression ([...]) in whole regular expression. /// /// /// While converting POSIX regular expression to framework regexp if we determine start /// of bracket expression, characters are written to this class and it controls regexp processing. /// Nothing is written to output while processing, results are stored in this class and the /// converted bracket expression is written at once after to the output. /// internal class BracketExpression { /* vocabulary used in function naming: * COUNT sth. means get some string to appropriate input (character class name, range endpoints...) * UNROLL sth. means replace some parts in buffer with COUNTED string * OPTIMIZE means make some change in buffer that doesn't change meaning of reg. expr. */ // string containing partially processed regular expression // in this string are written several parts, which substrings are which parts indicates parts array private StringBuilder buffer; const int initialNumberOfParts = 30; private int[] parts; // -1 means no part private PartType[] partTypes; private int currentPartNumber; private bool negation; /// /// indicates whether or not some failure occurs /// private bool allOK; public enum PartType { Normal, NormalNoRangeNext, NormalBackslash, NormalBackslashNoRangeNext, CollatingElement, UnrolledCollatingElement, CharacterClass, UnrolledCharacterClass, WordBoundary, EquivalenceClass, UnrolledEquivalenceClass, Range, UnrolledRange }; /// /// indicates if there is a part that cannot be converted to single [...] expression, for example /// [xyz[.abcd.]opq]. Is set to "true" in optimization if some part is marked as UnrolledCollatingElement /// or UnrolledEquivalenceClass /// private bool specialTranslationNeeded; /// /// Indicates that this bracket expression has '^' as the first character. /// public bool Negation { set { negation = value; } } public PartType CurrentPartType { set { if (value == PartType.Range) { StartNextPart(); partTypes[currentPartNumber] = value; buffer.Append('-'); // so that the part wasn't empty and we can simply convert it to PartType.Normal StartNextPart(); } else { partTypes[currentPartNumber] = value; } } } /// /// According to currentPartNumber part makes some changes at the end of buffer. Assumes that /// currentPartNumber is last in buffer. /// Sets allOK to false if something is wrong. /// /// BEFORE optimization there can be: /// Range, Normal, NormalBackslash, CharacterClass, CollatingElement, EquivalenceClass /// /// AFTER optimization there can be: /// Range, UnrolledRange, Normal, NormalBackslash, NormalBackslashNoRangeNext, NormalNoRangeNext, /// UnrolledCharacterClass, WordBoundary, UnrolledCollatingElement, UnrolledEquivalenceClass /// private void OptimizeParts() { switch (partTypes[currentPartNumber]) { case PartType.Range: OptimizeRange(); // transformed to Range or UnrolledRange break; case PartType.Normal: OptimizeNormal(); break; case PartType.NormalBackslash: OptimizeNormalBackslash(); break; case PartType.CharacterClass: //transformed to UnrolledCharacterClass or WordBoundary OptimizeCharacterClass(); break; case PartType.CollatingElement: // transformed to Normal, NormalBackslash or UnrolledCollatingElement OptimizeCollatingElement(); break; case PartType.EquivalenceClass: OptimizeEquivalenceClass(); break; default: Debug.Fail("Unexpected part type in OptimizeParts()."); break; /* These possibilities cannot occur here, they arise during optimization * case PartType.UnrolledRange: * case PartType.NormalNoRangeNext: * case PartType.NormalBackslashNoRangeNext; * case PartType.UnrolledCharacterClass: * case PartType.WordBoundary: * case PartType.UnrolledEquivalenceClass: */ } } /// /// Assume that currentPartNumber is set to Range and is last in buffer. /// According to previous part type changes types and groups some parts. /// Sets allOK to false if something is wrong. /// private void OptimizeRange() { if (currentPartNumber == 0) { partTypes[currentPartNumber] = PartType.NormalNoRangeNext; // '-' is first character in expression } else { switch (partTypes[currentPartNumber - 1]) { case PartType.Range: // replace [x-y] with correct chars string countedRange = CountRangeEscaped(buffer[parts[currentPartNumber - 2]], '-'); currentPartNumber = currentPartNumber - 2; parts[currentPartNumber + 1] = -1; buffer.Remove(parts[currentPartNumber], buffer.Length - parts[currentPartNumber]); buffer.Append(countedRange); partTypes[currentPartNumber] = PartType.UnrolledRange; break; case PartType.UnrolledRange: PhpException.Throw(PhpError.Warning, LibResources.GetString("range_shared_endpoint")); allOK = false; break; case PartType.Normal: if ((parts[currentPartNumber] - parts[currentPartNumber - 1]) > 1) // divide part in order that we have one character before range { // create next part, but do not optimize to avoid infinite recursive call StartNextPart(false); // currentPartNumber is now greater by 1 parts[currentPartNumber] = parts[currentPartNumber - 1]; partTypes[currentPartNumber] = partTypes[currentPartNumber - 1]; parts[currentPartNumber - 1]--; partTypes[currentPartNumber - 1] = PartType.Normal; } break; case PartType.NormalBackslash: break; case PartType.NormalNoRangeNext: PhpException.Throw(PhpError.Warning, LibResources.GetString("range_not_allowed")); allOK = false; break; case PartType.NormalBackslashNoRangeNext: goto case PartType.NormalNoRangeNext; case PartType.UnrolledCharacterClass: PhpException.Throw(PhpError.Warning, LibResources.GetString("first_endpoint_character_class")); allOK = false; break; case PartType.WordBoundary: PhpException.Throw(PhpError.Warning, LibResources.GetString("word_boundary_not_single_bracket_expr")); allOK = false; break; case PartType.UnrolledCollatingElement: PhpException.Throw(PhpError.Warning, LibResources.GetString("bad_collating_el_at_first_endpoint_of_range")); allOK = false; break; case PartType.UnrolledEquivalenceClass: PhpException.Throw(PhpError.Warning, LibResources.GetString("equivalence_class_at_first_endpoint_of_range")); allOK = false; break; default: Debug.Fail("Internal error - default in OptimizeRange()."); break; } } } private void OptimizeNormal() { if (currentPartNumber == 0) // if this is the first part, there is nothing to optimize return; switch (partTypes[currentPartNumber - 1]) { case PartType.Range: string countedRange = CountRangeEscaped(buffer[parts[currentPartNumber - 2]], buffer[parts[currentPartNumber]]); string normalLeft = buffer.ToString(parts[currentPartNumber] + 1, buffer.Length - parts[currentPartNumber] - 1); parts[currentPartNumber] = -1; currentPartNumber = currentPartNumber - 1; buffer.Remove(parts[currentPartNumber - 1], buffer.Length - parts[currentPartNumber - 1]); buffer.Append(countedRange); partTypes[currentPartNumber - 1] = PartType.UnrolledRange; parts[currentPartNumber] = buffer.Length; buffer.Append(normalLeft); partTypes[currentPartNumber] = PartType.Normal; break; case PartType.WordBoundary: PhpException.Throw(PhpError.Warning, LibResources.GetString("word_boundary_not_single_bracket_expr")); allOK = false; break; } } private void OptimizeNormalBackslash() { if (currentPartNumber == 0) return; switch (partTypes[currentPartNumber - 1]) { case PartType.Range: string countedRange = CountRangeEscaped(buffer[parts[currentPartNumber - 2]], '\\'); currentPartNumber = currentPartNumber - 2; parts[currentPartNumber + 1] = -1; buffer.Remove(parts[currentPartNumber], buffer.Length - parts[currentPartNumber]); buffer.Append(countedRange); partTypes[currentPartNumber] = PartType.UnrolledRange; break; case PartType.WordBoundary: PhpException.Throw(PhpError.Warning, LibResources.GetString("word_boundary_not_single_bracket_expr")); allOK = false; break; } } /// /// Returns string containing appropriate characters for range according to current encoding. If some /// characters may have special meaning in the bracket expression they are escaped. /// Sets private variable allOK to false if secondCharacter is before firstCharacter in current encoding /// or the range cannot be counted for these characters. /// /// First endpoint of the range. /// Second endpoint of the range. /// String with all range characters. private string CountRangeEscaped(char firstCharacter, char secondCharacter) { // error indication of range conversion int result; // range characters string characters; if (CountRange(firstCharacter, secondCharacter, out characters, out result)) { StringBuilder sb = new StringBuilder(characters.Length); EscapeBracketExpressionSpecialChars(sb, characters); return sb.ToString(); } // there was an error switch (result) { case 1: PhpException.Throw(PhpError.Warning, LibResources.GetString("ranges_not_supported")); allOK = false; break; case 2: PhpException.Throw(PhpError.Warning, LibResources.GetString("range_first_character_greater")); allOK = false; break; default: Debug.Fail("Unexpected result error value from CountRange()."); break; } return null; } /// /// Escapes characters that have special meaning in bracket expression to make them ordinary characters. /// /// to output the result. /// String possibly containing characters with special meaning. /// String with escaped characters. internal static void EscapeBracketExpressionSpecialChars(StringBuilder/*!*/sb, string chars) { Debug.Assert(sb != null); for (int i = 0; i < chars.Length; i++) { char ch = chars[i]; switch (ch) { // case '^': // not necessary, not at the beginning have no special meaning case '\\': case ']': case '-': sb.Append('\\'); goto default; default: sb.Append(ch); break; } } } /// /// Takes endpoints of a range and returns string containing appropriate characters. /// /// First endpoint of a range. /// Second endpoint of a range. /// String containing all characters that are to be in the range. /// Integer specifying an error. Value 1 means characters specified cannot /// be expressed in current encoding, value of 2 first character is greater than second. /// True if range was succesfuly counted, false otherwise. internal static bool CountRange(char firstCharacter, char secondCharacter, out string characters, out int result) { // initialize out parameters characters = null; result = 0; Encoding encoding = Configuration.Application.Globalization.PageEncoding; char[] chars = new char[2]; chars[0] = firstCharacter; chars[1] = secondCharacter; byte[] two_bytes = new byte[encoding.GetMaxByteCount(2)]; // convert endpoints and test if characters are "normal" - they can be stored in one byte if (encoding.GetBytes(chars, 0, 2, two_bytes, 0) != 2) { result = 1; return false; } if (two_bytes[0] > two_bytes[1]) { result = 2; return false; } // array for bytes that will be converted to unicode string byte[] bytes = new byte[two_bytes[1] - two_bytes[0] + 1]; int i = 0; for (int ch = two_bytes[0]; ch <= two_bytes[1]; i++, ch++) { // casting to byte is OK, ch is always in byte range thanks to ch <= two_bytes[1] condition bytes[i] = (byte)ch; } characters = encoding.GetString(bytes, 0, i); return true; } /// /// Takes character class name and returns string containing appropriate characters. /// Returns null if has got unknown character class name. /// /// Character class name. /// String containing characters from character class. internal static string CountCharacterClass(string chClassName) { string ret = null; switch (chClassName) { case "alnum": ret = @"\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Nd}"; break; case "digit": ret = @"\p{Nd}"; break; case "punct": ret = @"\p{P}\p{S}"; break; case "alpha": ret = @"\p{Ll}\p{Lu}\p{Lt}\p{Lo}"; break; case "graph": ret = @"\p{L}\p{M}\p{N}\p{P}\p{S}"; break; case "space": ret = @"\s"; break; case "blank": ret = @" \t"; break; case "lower": ret = @"\p{Ll}"; break; case "upper": ret = @"\p{Lu}"; break; case "cntrl": ret = @"\p{Cc}"; break; case "print": ret = @"\p{L}\p{M}\p{N}\p{P}\p{S}\p{Zs}"; break; case "xdigit": ret = @"abcdefABCDEF\d"; break; case "ascii": ret = @"\u0000-\u007F"; break; case "word": ret = @"_\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Nd}"; break; } return ret; } /// /// Replaces CharacterClass name with appropriate characters and changes type to UnrolledCharacterClass. /// /// /// Assumes that currentPartNumber is last part in buffer and has type CharacterClass. /// private void OptimizeCharacterClass() { if (currentPartNumber > 0) { if (partTypes[currentPartNumber - 1] == PartType.Range) { PhpException.Throw(PhpError.Warning, LibResources.GetString("character_class_at_second_endpoint_of_range")); allOK = false; return; } else if (partTypes[currentPartNumber - 1] == PartType.WordBoundary) { PhpException.Throw(PhpError.Warning, LibResources.GetString("word_boundary_not_single_bracket_expr")); allOK = false; return; } } int length = buffer.Length - parts[currentPartNumber]; string oldValue = buffer.ToString(parts[currentPartNumber], length); if (currentPartNumber == 0 && (oldValue == "<" || oldValue == ">")) { partTypes[currentPartNumber] = PartType.WordBoundary; return; } string cce = CountCharacterClass(oldValue); if (cce == null) { PhpException.Throw(PhpError.Warning, LibResources.GetString("unknown_character_class")); allOK = false; cce = ""; } partTypes[currentPartNumber] = PartType.UnrolledCharacterClass; buffer.Remove(parts[currentPartNumber], length); buffer.Append(cce); } /// /// Takes collating element "name" (string that was enclosed in [. and .]) and returns appropriate /// character(s) or the original string, if there no association exist. /// /// String that was enclosed in [. and .] (collating element). /// String associated with cElement. private string CountCollatingElement(string cElement) { string ret; switch (cElement) { case "NUL": ret = "\x0"; break; case "SOH": ret = "\x1"; break; case "STX": ret = "\x2"; break; case "ETX": ret = "\x3"; break; case "EOT": ret = "\x4"; break; case "ENQ": ret = "\x5"; break; case "ACK": ret = "\x6"; break; case "BEL": ret = "\x7"; break; case "alert": ret = "\x7"; break; case "BS": ret = "\x8"; break; case "backspace": ret = "\b"; break; case "HT": ret = "\x9"; break; case "tab": ret = "\t"; break; case "LF": ret = "\xa"; break; case "newline": ret = "\n"; break; case "VT": ret = "\xb"; break; case "vertical-tab": ret = "\v"; break; case "FF": ret = "\xc"; break; case "form-feed": ret = "\f"; break; case "CR": ret = "\xd"; break; case "carriage-return": ret = "\r"; break; case "SO": ret = "\xe"; break; case "SI": ret = "\xf"; break; case "DLE": ret = "\x10"; break; case "DC1": ret = "\x11"; break; case "DC2": ret = "\x12"; break; case "DC3": ret = "\x13"; break; case "DC4": ret = "\x14"; break; case "NAK": ret = "\x15"; break; case "SYN": ret = "\x16"; break; case "ETB": ret = "\x17"; break; case "CAN": ret = "\x18"; break; case "EM": ret = "\x19"; break; case "SUB": ret = "\x1a"; break; case "ESC": ret = "\x1b"; break; case "IS4": ret = "\x1c"; break; case "FS": ret = "\x1c"; break; case "IS3": ret = "\x1d"; break; case "GS": ret = "\x1d"; break; case "IS2": ret = "\x1e"; break; case "RS": ret = "\x1e"; break; case "IS1": ret = "\x1f"; break; case "US": ret = "\x1f"; break; case "space": ret = " "; break; case "exclamation-mark": ret = "!"; break; case "quotation-mark": ret = "\""; break; case "number-sign": ret = "#"; break; case "dollar-sign": ret = "$"; break; case "percent-sign": ret = "%"; break; case "ampersand": ret = "&"; break; case "apostrophe": ret = "\'"; break; case "left-parenthesis": ret = "("; break; case "right-parenthesis": ret = ")"; break; case "asterisk": ret = "*"; break; case "plus-sign": ret = "+"; break; case "comma": ret = ","; break; case "hyphen": ret = "-"; break; case "hyphen-minus": ret = "-"; break; case "period": ret = "."; break; case "full-stop": ret = "."; break; case "slash": ret = "/"; break; case "solidus": ret = "/"; break; case "zero": ret = "0"; break; case "one": ret = "1"; break; case "two": ret = "2"; break; case "three": ret = "3"; break; case "four": ret = "4"; break; case "five": ret = "5"; break; case "six": ret = "6"; break; case "seven": ret = "7"; break; case "eight": ret = "8"; break; case "nine": ret = "9"; break; case "colon": ret = ":"; break; case "semicolon": ret = ";"; break; case "less-than-sign": ret = "<"; break; case "equals-sign": ret = "="; break; case "greater-than-sign": ret = ">"; break; case "question-mark": ret = "?"; break; case "commercial-at": ret = "@"; break; case "left-square-bracket": ret = "["; break; case "backslash": ret = "\\"; break; case "reverse-solidus": ret = "\\"; break; case "right-square-bracket": ret = "]"; break; case "circumflex": ret = "^"; break; case "circumflex-accent": ret = "^"; break; case "underscore": ret = "_"; break; case "low-line": ret = "_"; break; case "grave-accent": ret = "`"; break; case "left-brace": ret = "{"; break; case "left-curly-bracket": ret = "{"; break; case "vertical-line": ret = "|"; break; case "right-brace": ret = "}"; break; case "right-curly-bracket": ret = "}"; break; case "tilde": ret = "~"; break; case "DEL": ret = "\x7f"; break; case "NULL": ret = "\x0"; break; default: ret = cElement; break; } return ret; } /// /// Assumes that currentPartNumber is last part in buffer and has type CollatingElement. /// Changes it to Normal, NormalBackslash or UnrolledCollatingElement. /// private void OptimizeCollatingElement() { if (currentPartNumber > 0 && (partTypes[currentPartNumber - 1] == PartType.WordBoundary)) { PhpException.Throw(PhpError.Warning, LibResources.GetString("word_boundary_not_single_bracket_expr")); allOK = false; return; } int length = buffer.Length - parts[currentPartNumber]; string cce = CountCollatingElement(buffer.ToString(parts[currentPartNumber], length)); buffer.Remove(parts[currentPartNumber], length); buffer.Append(cce); if (cce.Length == 1) { partTypes[currentPartNumber] = PartType.Normal; OptimizeNormal(); } else if (cce == @"\\") { cce = @"\"; partTypes[currentPartNumber] = PartType.NormalBackslash; OptimizeNormalBackslash(); } else { partTypes[currentPartNumber] = PartType.UnrolledCollatingElement; specialTranslationNeeded = true; } } /// /// Calls OptimizeCollatingElement() and sets current part type to UnrolledEquivalenceClass. /// private void OptimizeEquivalenceClass() { if (currentPartNumber > 0) { if (partTypes[currentPartNumber - 1] == PartType.Range) { PhpException.Throw(PhpError.Warning, LibResources.GetString("equivalence_class_at_second_endpoint_of_range")); allOK = false; return; } else if (partTypes[currentPartNumber - 1] == PartType.WordBoundary) { PhpException.Throw(PhpError.Warning, LibResources.GetString("word_boundary_not_single_bracket_expr")); allOK = false; return; } } // we have no equivalence classes defined, so [= =] is the same as [. .] according to specification OptimizeCollatingElement(); switch (partTypes[currentPartNumber]) { case PartType.UnrolledCollatingElement: partTypes[currentPartNumber] = PartType.UnrolledEquivalenceClass; break; case PartType.Normal: partTypes[currentPartNumber] = PartType.NormalNoRangeNext; break; case PartType.NormalBackslash: partTypes[currentPartNumber] = PartType.NormalBackslashNoRangeNext; break; } } /// /// If something was written to current part, creates next empty part. /// /// /// Important to easy automaton implementation: if current part is empty, does nothing! /// Appending new parts is unlimited, arrays are enlarged if needed. /// public bool StartNextPart() { return StartNextPart(true); } /// /// If something was written to current part, creates next empty part. /// /// /// Important to easy automaton implementation: if current part is empty, does nothing! /// Appending new parts is unlimited, arrays are enlarged if needed. /// /// Whether call OptimizeParts(). /// True if everything is OK. private bool StartNextPart(bool optimize) { if (!allOK) return false; if (parts[currentPartNumber] == buffer.Length) // we don't need to make new part, current part is empty return true; if (optimize) OptimizeParts(); currentPartNumber++; if (currentPartNumber == parts.Length) // array is full, enlarge it { int[] tempArray = parts; parts = new int[parts.Length * 2]; System.Array.Copy(tempArray, parts, tempArray.Length); PartType[] tempArray2 = partTypes; partTypes = new PartType[parts.Length * 2]; System.Array.Copy(tempArray2, partTypes, tempArray2.Length); } parts[currentPartNumber] = buffer.Length; // set position after last character in buffer partTypes[currentPartNumber] = PartType.Normal; parts[currentPartNumber + 1] = -1; return true; } /// /// Constructor. Sets all fields to appropriate empty values. /// public BracketExpression() { buffer = new StringBuilder(); parts = new int[initialNumberOfParts]; partTypes = new PartType[initialNumberOfParts]; Reset(); } /// /// Sets inner state as if the object was created. /// public void Reset() { buffer.Remove(0, buffer.Length); currentPartNumber = 0; parts[0] = 0; parts[1] = -1; partTypes[0] = PartType.Normal; // if these arrays were enlarged, we keep the same lenght, shortening is pointless negation = false; allOK = true; specialTranslationNeeded = false; } /// /// Appends one character to current part of bracket expression. /// /// Character to append. public void Append(char ch) { buffer.Append(ch); } /// /// Appends two characters to current part of bracket expression. /// /// First character to append. /// Second character to append. public void Append(char ch1, char ch2) { buffer.Append(ch1); buffer.Append(ch2); } /// /// Appends three characters to current part of bracket expression. /// /// First character to append. /// Second character to append. /// Third character to append. public void Append(char ch1, char ch2, char ch3) { buffer.Append(ch1); buffer.Append(ch2); buffer.Append(ch3); } /// /// /// /// private void WriteOutNoSpecial(ref StringBuilder output) { for (int i = 0; i < currentPartNumber; i++) { if (partTypes[i] == PartType.NormalBackslash || partTypes[i] == PartType.NormalBackslashNoRangeNext) output.Append(@"\"); else output.Append(buffer.ToString(parts[i], parts[i + 1] - parts[i])); } // last iteration - we count part length otherwise if (partTypes[currentPartNumber] == PartType.NormalBackslash || partTypes[currentPartNumber] == PartType.NormalBackslashNoRangeNext) output.Append(@"\\"); else output.Append(buffer.ToString(parts[currentPartNumber], buffer.Length - parts[currentPartNumber])); } /// /// /// /// private void WriteOutSpecial(ref StringBuilder output) { int length; for (int i = 0; i <= currentPartNumber; i++) { if (i == currentPartNumber) length = buffer.Length - parts[i]; else length = parts[i + 1] - parts[i]; switch (partTypes[i]) { case PartType.Normal: output.Append('['); output.Append(buffer.ToString(parts[i], length)); output.Append(']'); break; case PartType.Range: // can be only last part Debug.Assert(i != currentPartNumber, "internal error WriteOutSpecial() Range isn't last."); goto case PartType.Normal; case PartType.UnrolledRange: goto case PartType.Normal; case PartType.NormalBackslash: output.Append(@"[\\]"); break; case PartType.NormalBackslashNoRangeNext: goto case PartType.NormalBackslash; case PartType.NormalNoRangeNext: goto case PartType.Normal; case PartType.UnrolledCharacterClass: goto case PartType.Normal; case PartType.WordBoundary: Debug.Fail("internal error WriteOutSpecial() Word boundary."); break; case PartType.UnrolledCollatingElement: output.Append(buffer.ToString(parts[i], length)); break; case PartType.UnrolledEquivalenceClass: goto case PartType.UnrolledCollatingElement; } output.Append('|'); } // for() output.Remove(output.Length - 1, 1); // remove last '|' character } /// /// Writes to output Framework regular expression for beginning or end of word, /// according to first part in parts array. /// /// StringBuilder to write out. private void WriteOutWordBoundary(ref StringBuilder output) { if (buffer[parts[0]] == '<') { // beginning of word output.Append(@"\b(?=\w)"); } else { // end of word output.Append(@"\b(?<=\w)"); } } /// /// Compose all parts and creates .NET Framework compatible regular expression. /// /// .NET Framework compatible regular expression public bool WriteOut(ref StringBuilder retString) { // some failure occured, nothing is written if (!allOK) return false; // creates new empty part - causes optimization of previous part (the last one, that was not omptimized, // previous parts were optimized while calling StartNextPart()). StartNextPart(); StringBuilder output = new StringBuilder(2 * buffer.Length); // estimated indigent length if (partTypes[0] == PartType.WordBoundary) { // writes word boundary and ends, if it is word boundary, nothing can follow WriteOutWordBoundary(ref output); } else if (!specialTranslationNeeded) { // regular expression can be written to single framework bracket expression [..] output.Append('['); if (negation) output.Append('^'); WriteOutNoSpecial(ref output); output.Append(']'); } else { // regular expression cannot be written to single framework expression, // we enclose whole expression to (? .. ) parentheses and inside can be more // complicated expression that match one single POSIX bracket expression if (negation) { output.Append("(?("); WriteOutSpecial(ref output); output.Append(@")\b\B|.)"); // \b\B always fails } else { output.Append("(?:"); WriteOutSpecial(ref output); output.Append(')'); } } retString.Append(output.ToString()); return allOK; } }// class BracketExpression #endregion #region Regular expression conversion functions /// /// CharMap containing characters that must be preppended by '\'. /// private static readonly CharMap controlCharsMap = new CharMap(new uint[] { 0x0, 0x8f20001, 0x1a, 0x18 }); /// /// Converts POSIX regular expression to .NET Framework regular expression /// /// POSIX 1003.2 regular expression /// .NET Framework compatible regular expression // WORKING: change to private! public static string ConvertPosix2DotNetExpr(string expr) { if (expr == null) return ""; // number that is not used in automaton const int errorState = 99; // 0 == initial state int state = 0; // iterator for iterating in strings #if !SILVERLIGHT CharEnumerator ch = expr.GetEnumerator(); #else System.Collections.Generic.IEnumerator ch = new System.Collections.Generic.List(expr.ToCharArray()).GetEnumerator(); #endif // true if we are at the end of bracket expression bool eOfExpr = false; // true if we have read next character and this character is not applicable for current state, // we change state with lambda step and there is character scanned again // true if we are changing state and the character should be scanned again bool lambdaStep = false; // into this StringBuilder is converted regular expression written // 2*expr.Length is estimated necessary length of output string StringBuilder output = new StringBuilder(2 * expr.Length); // bracket expressions are very complicated, we have made separate class for managing them // if we need to create bracket expression class instance, we store it in this variable // and reuse it after Reset() call BracketExpression be = null; eOfExpr = !ch.MoveNext(); while (!eOfExpr) { switch (state) { case 0: // initial state switch (ch.Current) { case '\\': state = 1; break; case '[': state = 2; if (be != null) // bracket expr. already exists, reset it only be.Reset(); else be = new BracketExpression(); break; case '(': state = 15; break; default: output.Append(ch.Current); break; } break; case 1: if (controlCharsMap.Contains(ch.Current)) { // control character - must be preppended by '\' output.Append('\\'); } output.Append(ch.Current); state = 0; break; case 2: switch (ch.Current) { case '^': be.Negation = true; state = 3; break; case ']': be.Append(']'); state = 4; break; default: lambdaStep = true; state = 4; break; } break; case 3: if (ch.Current == ']') be.Append(']'); else lambdaStep = true; state = 4; break; case 4: switch (ch.Current) { case '[': state = 5; break; case '\\': be.StartNextPart(); be.Append('\\'); be.CurrentPartType = BracketExpression.PartType.NormalBackslash; be.StartNextPart(); break; case ']': state = 0; if (!be.WriteOut(ref output)) state = errorState; break; case '-': be.CurrentPartType = BracketExpression.PartType.Range; break; default: be.Append(ch.Current); break; } break; case 5: switch (ch.Current) { case '.': be.StartNextPart(); be.CurrentPartType = BracketExpression.PartType.CollatingElement; state = 6; break; case ':': be.StartNextPart(); be.CurrentPartType = BracketExpression.PartType.CharacterClass; state = 7; break; case '=': be.StartNextPart(); be.CurrentPartType = BracketExpression.PartType.EquivalenceClass; state = 8; break; case '\\': be.Append('\\', '\\'); state = 4; break; default: be.Append('[', ch.Current); state = 4; break; } break; case 6: if (ch.Current == '\\') be.Append('\\', '\\'); else be.Append(ch.Current); state = 9; break; case 7: if (ch.Current == '\\') be.Append('\\', '\\'); else be.Append(ch.Current); state = 10; break; case 8: if (ch.Current == '\\') be.Append('\\', '\\'); else be.Append(ch.Current); state = 11; break; case 9: switch (ch.Current) { case '\\': be.Append('\\', '\\'); break; case '.': state = 12; break; default: be.Append(ch.Current); break; } break; case 10: switch (ch.Current) { case '\\': be.Append('\\', '\\'); break; case ':': state = 13; break; default: be.Append(ch.Current); break; } break; case 11: switch (ch.Current) { case '\\': be.Append('\\', '\\'); break; case '=': state = 14; break; default: be.Append(ch.Current); break; } break; case 12: switch (ch.Current) { case ']': be.StartNextPart(); state = 4; break; case '\\': be.Append('.', '\\', '\\'); state = 9; break; default: be.Append('.', ch.Current); state = 9; break; } break; case 13: switch (ch.Current) { case ']': be.StartNextPart(); state = 4; break; case '\\': be.Append(':', '\\', '\\'); state = 10; break; default: be.Append(':', ch.Current); state = 10; break; } break; case 14: switch (ch.Current) { case ']': be.StartNextPart(); state = 4; break; case '\\': be.Append('=', '\\', '\\'); state = 11; break; default: be.Append('=', ch.Current); state = 11; break; } break; case 15: switch (ch.Current) { case '?': PhpException.Throw(PhpError.Warning, LibResources.GetString("question_mark_folowing_nothing")); state = errorState; break; default: output.Append('('); output.Append(ch.Current); state = 0; break; } break; default: // catch the ErrorState eOfExpr = true; output.Remove(0, output.Length); break; } // we can eliminate this, but without lambda steps will be an automaton much more complicated // other solution is calling ch.MoveNext() in each case statement, this would bring error liability // but can save a few instructions in each iteration if (!eOfExpr && !lambdaStep) eOfExpr = !ch.MoveNext(); lambdaStep = false; } // check where an automaton has finished switch (state) { case 0: return output.ToString(); case 1: PhpException.Throw(PhpError.Warning, LibResources.GetString("regexp_cannot_end_with_two_backslashes")); return null; case 15: PhpException.Throw(PhpError.Warning, LibResources.GetString("regexp_cannot_end_with_open_bracket")); return null; default: PhpException.Throw(PhpError.Warning, LibResources.GetString("unenclosed_bracket_expression")); return null; } } /// /// Converts string that represents replacement and can be used with regular expression and /// contain references to parenthesized substrings in that regular expression. /// /// String to convert /// Array containig numbers of parenthesized substrings in matching regular expression. /// Converted .NET Framework compatible regular expression to replacement. private static string ConvertPosix2DotNetRepl(string replacement, int[] substrNumbers) { if (replacement == null) return ""; int state = 0; StringBuilder output = new StringBuilder((int)(replacement.Length * 1.5)); foreach (char ch in replacement) { switch (state) { case 0: switch (ch) { case '\\': state = 1; break; case '$': // 'normal' dollar must be doubled to prevent back reference meaning output.Append("$$"); break; default: output.Append(ch); break; } break; case 1: state = 0; // always return to state 0 if (ch == '$') { // 'normal' dollar must be doubled to prevent back reference meaning output.Append("\\$$"); } else if (ch >= '0' && ch <= '9') { // back reference number 0 .. 9 // write back reference only if exists if (((System.Collections.IList)substrNumbers).Contains(Int32.Parse(ch.ToString()))) output.Append('$'); else output.Append('\\'); output.Append(ch); } else { // other characters - leave unchanged output.Append('\\'); output.Append(ch); } break; } } if (state == 1) output.Append('\\'); return output.ToString(); } #endregion } } ================================================ FILE: Source/ClassLibrary/Resources/WindowsTZ.xml ================================================ ================================================ FILE: Source/ClassLibrary/SPL/Autoload.cs ================================================ using System; using System.Collections.Generic; using System.Text; using PHP.Core; using PHP.Core.Reflection; using System.Diagnostics; namespace PHP.Library { /// /// Functions for date and time manipulation. /// /// [ImplementsExtension(LibraryDescriptor.ExtSpl)] public static class Autoload { #region Constants /// /// The name of spl_autoload default function. /// public const string SplAutoloadFunction = "spl_autoload"; #endregion #region spl_autoload_call, spl_autoload_extensions, spl_autoload_functions, spl_autoload_register, spl_autoload_unregister, spl_autoload /// /// This function can be used to manually search for a class or interface using the registered __autoload functions. /// [ImplementsFunction("spl_autoload_call", FunctionImplOptions.NeedsClassContext | FunctionImplOptions.NeedsNamingContext)] public static void Call(NamingContext namingContext, DTypeDesc caller, string className) { ScriptContext context = ScriptContext.CurrentContext; // If class isn't defined autoload functions are called automatically until class is declared if (context.IsSplAutoloadEnabled) ScriptContext.CurrentContext.ResolveType(className, namingContext, caller, null, ResolveTypeFlags.UseAutoload); } [ImplementsFunction("spl_autoload_extensions")] public static string SetExtensions() { var context = ScriptContext.CurrentContext; StringBuilder sb = null; foreach (string extension in context.SplAutoloadExtensions) { if (sb == null) sb = new StringBuilder(); else sb.Append(','); sb.Append(extension); } return sb.ToString(); } [ImplementsFunction("spl_autoload_extensions")] public static string SetExtensions(string fileExtensions) { ScriptContext.CurrentContext.SplAutoloadExtensions = Array.ConvertAll(fileExtensions.Split(new char[] { ',' }), (value) => value.Trim()); return fileExtensions; } [ImplementsFunction("spl_autoload_functions")] [return:CastToFalse] public static PhpArray GetFunctions() { var context = ScriptContext.CurrentContext; if (context.IsSplAutoloadEnabled) { PhpArray result = new PhpArray(); foreach (var func in context.SplAutoloadFunctions) result.Add(func.ToPhpRepresentation()); return result; } else { return null; } } [ImplementsFunction("spl_autoload_register", FunctionImplOptions.NeedsClassContext | FunctionImplOptions.NeedsNamingContext)] public static bool Register(NamingContext namingContext, DTypeDesc caller) { return Register(namingContext, caller, new PhpCallback(SplAutoloadFunction), true, false); } [ImplementsFunction("spl_autoload_register", FunctionImplOptions.NeedsClassContext | FunctionImplOptions.NeedsNamingContext)] public static bool Register(NamingContext namingContext, DTypeDesc caller, PhpCallback autoloadFunction) { return Register(namingContext, caller, autoloadFunction, true, false); } [ImplementsFunction("spl_autoload_register", FunctionImplOptions.NeedsClassContext | FunctionImplOptions.NeedsNamingContext)] public static bool Register(NamingContext namingContext, DTypeDesc caller, PhpCallback autoloadFunction, bool throwError) { return Register(namingContext, caller, autoloadFunction, throwError, false); } [ImplementsFunction("spl_autoload_register", FunctionImplOptions.NeedsClassContext | FunctionImplOptions.NeedsNamingContext)] public static bool Register(NamingContext namingContext, DTypeDesc caller, PhpCallback autoloadFunction, bool throwError, bool prepend) { if (autoloadFunction == null) { PhpException.ArgumentNull("autoloadFunction"); return false; } if (autoloadFunction.Bind(!throwError, caller, namingContext)) { var context = ScriptContext.CurrentContext; if (FindAutoloadFunction(context, autoloadFunction.ToPhpRepresentation()) != null) return false; if (prepend) context.SplAutoloadFunctions.AddFirst(autoloadFunction); else context.SplAutoloadFunctions.AddLast(autoloadFunction); return true; } else { return false; } } [ImplementsFunction("spl_autoload_unregister")] public static bool Unregister(object autoloadFunction) { var context = ScriptContext.CurrentContext; var functionNode = FindAutoloadFunction(context, autoloadFunction); if (functionNode != null) { context.SplAutoloadFunctions.Remove(functionNode); return true; } else { return false; } } [ImplementsFunction("spl_autoload", FunctionImplOptions.NeedsClassContext | FunctionImplOptions.NeedsNamingContext)] public static void DefaultAutoload(NamingContext namingContext, DTypeDesc caller, string className) { // TODO: skip in pure mode var context = ScriptContext.CurrentContext; var fileExtensions = context.SplAutoloadExtensions.GetEnumerator(); bool stateChanged = true; while (!stateChanged || ScriptContext.CurrentContext.ResolveType(className, namingContext, caller, null, ResolveTypeFlags.None) == null) { if (!fileExtensions.MoveNext()) { PhpException.Throw(PhpError.Error, string.Format(CoreResources.class_could_not_be_loaded, className)); return; } // try to dynamically include the file specified by the class name, if it exists string FullFileName = className + fileExtensions.Current; if (PhpFile.Exists(FullFileName)) { context.DynamicInclude(FullFileName, context.WorkingDirectory, null, null, null, InclusionTypes.IncludeOnce); stateChanged = true; } else { stateChanged = false; } } } #endregion #region helpers /// /// Finds the specified autoload function list element. /// /// Current script context. /// The PHP representation of callback function to find in list of SPL autoload functions. /// List node or null if such a functions does not exist in the list. private static LinkedListNode FindAutoloadFunction(ScriptContext/*!*/context, object autoloadFunction) { Debug.Assert(context != null); if (context.IsSplAutoloadEnabled) for (var node = context.SplAutoloadFunctions.First; node != null; node = node.Next) if (PhpComparer.CompareEq(node.Value.ToPhpRepresentation(), autoloadFunction)) return node; return null; } #endregion } } ================================================ FILE: Source/ClassLibrary/SPL/FileSystem.cs ================================================ using System; using PHP.Core; using System.Collections.Generic; using System.Linq; using System.Text; using System.ComponentModel; using PHP.Core.Reflection; using System.IO; using System.Runtime.InteropServices; using System.Diagnostics; namespace PHP.Library.SPL { /// /// The SplFileInfo class offers a high-level object oriented interface to information for an individual file. /// [ImplementsType] public class SplFileInfo : PhpObject { #region Fields & Properties /// /// Internal file system entry. /// internal FileSystemInfo fs_info = null; [PhpVisible] private string pathName { get { return getPathnameInternal(this.fs_info); } } [PhpVisible] private string fileName { get { return getFilenameInternal(fs_info); } } ///// ///// as . ///// //protected FileInfo FileInfo { get { return this._info as FileInfo; } } ///// ///// as . ///// //protected DirectoryInfo DirectoryInfo { get { return this._info as DirectoryInfo; } } #endregion #region Constructor /// /// For internal purposes only. /// [EditorBrowsable(EditorBrowsableState.Never)] public SplFileInfo(ScriptContext/*!*/context, bool newInstance) : base(context, newInstance) { } /// /// For internal purposes only. /// [EditorBrowsable(EditorBrowsableState.Never)] public SplFileInfo(ScriptContext/*!*/context, DTypeDesc caller) : base(context, caller) { } /// /// Creates a new SplFileInfo object for the specified. The file does not need to exist, or be readable. /// /// Current . /// File or directory name. [ImplementsMethod] public object __construct(ScriptContext/*!*/context, object filename) { // check arguments string filenamestr = PhpVariable.AsString(filename); if (filenamestr == null) { PhpException.InvalidArgumentType("filename", PhpVariable.TypeNameString); } else { // TODO } return null; } [EditorBrowsable(EditorBrowsableState.Never)] public static object __construct(object instance, PhpStack stack) { var filename = stack.PeekValue(1); stack.RemoveFrame(); return ((SplFileInfo)instance).__construct(stack.Context, filename); } #endregion #region Methods //public int getATime ( void ) //public string getBasename ([ string $suffix ] ) //public int getCTime ( void ) //public string getExtension ( void ) //public SplFileInfo getFileInfo ([ string $class_name ] ) protected static string getPathnameInternal(FileSystemInfo info) { if (info == null) return string.Empty; // handle . and .. var originalPath = info.ToString(); if (originalPath.EndsWith(".")) { string fname = Path.GetFileName(originalPath); if (fname == "." || fname == "..") return originalPath; } // otherwise use FullName return info.FullName; } protected static string getFilenameInternal(FileSystemInfo info) { return (info != null) ? Path.GetFileName(info.ToString()) : string.Empty; // we need original path, including "." and ".." } [ImplementsMethod] public virtual object/*string*/getFilename(ScriptContext context) { return getFilenameInternal(this.fs_info); } [EditorBrowsable(EditorBrowsableState.Never)] public static object getFilename(object instance, PhpStack stack) { stack.RemoveFrame(); return ((SplFileInfo)instance).getFilename(stack.Context); } //public int getGroup ( void ) //public int getInode ( void ) //public string getLinkTarget ( void ) //public int getMTime ( void ) //public int getOwner ( void ) protected static string getPathInternal(FileSystemInfo/*!*/info) { Debug.Assert(info != null); DirectoryInfo dir = info as DirectoryInfo ?? ((FileInfo)info).Directory; return dir.FullName; } [ImplementsMethod] public virtual object/*string*/getPath(ScriptContext context) { return getPathInternal(this.fs_info); } [EditorBrowsable(EditorBrowsableState.Never)] public static object getPath(object instance, PhpStack stack) { stack.RemoveFrame(); return ((SplFileInfo)instance).getPath(stack.Context); } //public SplFileInfo getPathInfo ([ string $class_name ] ) [ImplementsMethod] public virtual object/*string*/getPathname(ScriptContext context) { return getPathnameInternal(this.fs_info); } [EditorBrowsable(EditorBrowsableState.Never)] public static object getPathname(object instance, PhpStack stack) { stack.RemoveFrame(); return ((SplFileInfo)instance).getPathname(stack.Context); } //public int getPerms ( void ) //public string getRealPath ( void ) [ImplementsMethod] public virtual object/*bool*/getSize(ScriptContext context) { if (this.fs_info is FileInfo) return ((FileInfo)this.fs_info).Length; return false; } [EditorBrowsable(EditorBrowsableState.Never)] public static object getSize(object instance, PhpStack stack) { stack.RemoveFrame(); return ((SplFileInfo)instance).getSize(stack.Context); } //public string getType ( void ) [ImplementsMethod] public virtual object/*bool*/isDir(ScriptContext context) { return this.fs_info is DirectoryInfo; } [EditorBrowsable(EditorBrowsableState.Never)] public static object isDir(object instance, PhpStack stack) { stack.RemoveFrame(); return ((SplFileInfo)instance).isDir(stack.Context); } //public bool isExecutable ( void ) [ImplementsMethod] public virtual object/*bool*/isFile(ScriptContext context) { return this.fs_info is FileInfo; } [EditorBrowsable(EditorBrowsableState.Never)] public static object isFile(object instance, PhpStack stack) { stack.RemoveFrame(); return ((SplFileInfo)instance).isFile(stack.Context); } //public bool isLink ( void ) //public bool isReadable ( void ) //public bool isWritable ( void ) //public SplFileObject openFile ([ string $open_mode = r [, bool $use_include_path = false [, resource $context = NULL ]]] ) //public void setFileClass ([ string $class_name ] ) //public void setInfoClass ([ string $class_name ] ) /// /// An alias for getPathname. /// /// /// [ImplementsMethod] public virtual object/*string*/__toString(ScriptContext context) { return getPathnameInternal(this.fs_info); } [EditorBrowsable(EditorBrowsableState.Never)] public static object __toString(object instance, PhpStack stack) { stack.RemoveFrame(); return ((SplFileInfo)instance).__toString(stack.Context); } #endregion } /// /// The DirectoryIterator class provides a simple interface for viewing the contents of filesystem directories. /// [ImplementsType] public class DirectoryIterator : SplFileInfo, Iterator, Traversable, SeekableIterator { #region Fields /// /// Internal fs enumerator. /// protected IEnumerator dir_enumerator = null; /// /// Internal fs enumerator item index. /// protected int dir_enumerator_key = -1; #endregion #region Constructor /// /// For internal purposes only. /// [EditorBrowsable(EditorBrowsableState.Never)] public DirectoryIterator(ScriptContext/*!*/context, bool newInstance) : base(context, newInstance) { } /// /// For internal purposes only. /// [EditorBrowsable(EditorBrowsableState.Never)] public DirectoryIterator(ScriptContext/*!*/context, DTypeDesc caller) : base(context, caller) { } /// /// Gets enumeration of file system entries for this iterator. /// /// protected virtual IEnumerable/*!*/EnumerateFileSystemInfos() { var dir = this.fs_info as DirectoryInfo; return dir != null ? dir.EnumerateFileSystemInfos() : new FileSystemInfo[0]; } /// /// Initializes . /// protected void CreateEnumeratorInternal() { var dir = this.fs_info as DirectoryInfo; if (dir != null) { var enumerable = this.EnumerateFileSystemInfos(); if (dir.Root != dir) { // prepend ., .. var dots = new FileSystemInfo[] { new DirectoryInfo(dir.FullName + "\\."), new DirectoryInfo(dir.FullName + "\\..") }; enumerable = dots.Concat(enumerable); } this.dir_enumerator = enumerable.GetEnumerator(); } else { this.dir_enumerator = null; } } protected void ConstructDirectoryIteratorInternal(ScriptContext/*!*/context, object path) { string pathstr = PhpVariable.AsString(path); if (string.IsNullOrEmpty(pathstr)) { RuntimeException.ThrowSplException(c => new RuntimeException(c, true), context, @"Directory name must not be empty.", 0, null); return; } string errmessage = null; try { this.fs_info = new DirectoryInfo(Path.Combine(context.WorkingDirectory, pathstr)); this.CreateEnumeratorInternal(); } catch (System.Exception ex) { errmessage = ex.Message; } if (errmessage != null) { UnexpectedValueException.ThrowSplException(c => new UnexpectedValueException(c, true), context, errmessage, 0, null); } } [ImplementsMethod] public virtual new object __construct(ScriptContext/*!*/context, object path) { ConstructDirectoryIteratorInternal(context, path); return null; } [EditorBrowsable(EditorBrowsableState.Never)] public static new object __construct(object instance, PhpStack stack) { var path = stack.PeekValue(1); stack.RemoveFrame(); return ((DirectoryIterator)instance).__construct(stack.Context, path); } #endregion #region Methods /// /// Whether current entry represents "." or "..". /// protected bool isDotInternal() { string str; return //this.dir_enumerator_key < 2 && // . and .. are first 2 entries validInternal() && (str = this.dir_enumerator.Current.ToString()).EndsWith(".", StringComparison.Ordinal) && ((str = Path.GetFileName(str)) == ".." || str == "."); } [ImplementsMethod] public virtual object/*bool*/isDot(ScriptContext context) { return isDotInternal(); } [EditorBrowsable(EditorBrowsableState.Never)] public static object isDot(object instance, PhpStack stack) { stack.RemoveFrame(); return ((DirectoryIterator)instance).isDot(stack.Context); } //public int getATime ( void ) //public string getBasename ([ string $suffix ] ) //public int getCTime ( void ) //public string getExtension ( void ) [ImplementsMethod] public override object/*string*/getFilename(ScriptContext context) { return validInternal() ? getFilenameInternal(this.dir_enumerator.Current) : string.Empty; } [EditorBrowsable(EditorBrowsableState.Never)] public new static object getFilename(object instance, PhpStack stack) { stack.RemoveFrame(); return ((DirectoryIterator)instance).getFilename(stack.Context); } //public int getGroup ( void ) //public int getInode ( void ) //public int getMTime ( void ) //public int getOwner ( void ) [ImplementsMethod] public override object/*string*/getPath(ScriptContext context) { return validInternal() ? getPathInternal(this.dir_enumerator.Current) : string.Empty; } [EditorBrowsable(EditorBrowsableState.Never)] public new static object getPath(object instance, PhpStack stack) { stack.RemoveFrame(); return ((DirectoryIterator)instance).getPath(stack.Context); } [ImplementsMethod] public override object/*string*/getPathname(ScriptContext context) { return validInternal() ? getPathnameInternal(this.dir_enumerator.Current) : string.Empty; } [EditorBrowsable(EditorBrowsableState.Never)] public new static object getPathname(object instance, PhpStack stack) { stack.RemoveFrame(); return ((DirectoryIterator)instance).getPathname(stack.Context); } //public int getPerms ( void ) [ImplementsMethod] public override object/*bool*/getSize(ScriptContext context) { if (validInternal()) { var info = this.dir_enumerator.Current as FileInfo; if (info != null) return info.Length; } return false; } [EditorBrowsable(EditorBrowsableState.Never)] public new static object getSize(object instance, PhpStack stack) { stack.RemoveFrame(); return ((DirectoryIterator)instance).getSize(stack.Context); } //public string getType ( void ) [ImplementsMethod] public override object/*bool*/isDir(ScriptContext context) { return validInternal() && this.dir_enumerator.Current is DirectoryInfo; } [EditorBrowsable(EditorBrowsableState.Never)] public new static object isDir(object instance, PhpStack stack) { stack.RemoveFrame(); return ((DirectoryIterator)instance).isDir(stack.Context); } //public bool isExecutable ( void ) [ImplementsMethod] public override object/*bool*/isFile(ScriptContext context) { return validInternal() && this.dir_enumerator.Current is FileInfo; } [EditorBrowsable(EditorBrowsableState.Never)] public new static object isFile(object instance, PhpStack stack) { stack.RemoveFrame(); return ((DirectoryIterator)instance).isFile(stack.Context); } //public bool isLink ( void ) //public bool isReadable ( void ) //public bool isWritable ( void ) /// /// An alias for getFilename. /// /// /// [ImplementsMethod] public override object/*string*/__toString(ScriptContext context) { return this.getFilename(context); } [EditorBrowsable(EditorBrowsableState.Never)] public new static object __toString(object instance, PhpStack stack) { stack.RemoveFrame(); return ((SplFileInfo)instance).__toString(stack.Context); } #endregion #region interface Iterator [ImplementsMethod] public virtual object rewind(ScriptContext context) { if (this.dir_enumerator == null || this.dir_enumerator_key >= 0) { this.dir_enumerator_key = -1; this.CreateEnumeratorInternal(); } return this.next(context); // move to first item } [ImplementsMethod] public virtual object next(ScriptContext context) { if (this.dir_enumerator == null) return false; if (this.dir_enumerator.MoveNext()) this.dir_enumerator_key++; else this.dir_enumerator = null; return null; } protected bool validInternal() { return this.dir_enumerator_key >= 0 && this.dir_enumerator != null; } [ImplementsMethod] public virtual object valid(ScriptContext context) { return validInternal(); } [ImplementsMethod] public virtual object key(ScriptContext context) { return this.dir_enumerator_key; } [ImplementsMethod] public virtual object current(ScriptContext context) { return this; } #region Arglesses [EditorBrowsable(EditorBrowsableState.Never)] public static object rewind(object instance, PhpStack stack) { stack.RemoveFrame(); return ((DirectoryIterator)instance).rewind(stack.Context); } [EditorBrowsable(EditorBrowsableState.Never)] public static object next(object instance, PhpStack stack) { stack.RemoveFrame(); return ((DirectoryIterator)instance).next(stack.Context); } [EditorBrowsable(EditorBrowsableState.Never)] public static object valid(object instance, PhpStack stack) { stack.RemoveFrame(); return ((DirectoryIterator)instance).valid(stack.Context); } [EditorBrowsable(EditorBrowsableState.Never)] public static object key(object instance, PhpStack stack) { stack.RemoveFrame(); return ((DirectoryIterator)instance).key(stack.Context); } [EditorBrowsable(EditorBrowsableState.Never)] public static object current(object instance, PhpStack stack) { stack.RemoveFrame(); return ((DirectoryIterator)instance).current(stack.Context); } #endregion #endregion #region interface SeekableIterator [ImplementsMethod] public object seek(ScriptContext context, object position) { int i = Core.Convert.ObjectToInteger(position); if (i < 0) return this.rewind(context); if (this.dir_enumerator_key == -1 || this.dir_enumerator_key > i) { // newly constructed this.rewind(context); // we have to rewind and iterate to // -> } else if (validInternal()) { if (this.dir_enumerator_key == i) return null; // done // else dir_enumerator_key < i, we have to iterate to // -> } else { this.rewind(context); // -> } // -> while (validInternal() && this.dir_enumerator_key < i) this.next(context); return null; } #region Arglesses [EditorBrowsable(EditorBrowsableState.Never)] public static object seek(object instance, PhpStack stack) { object position = stack.PeekValue(1); stack.RemoveFrame(); return ((DirectoryIterator)instance).seek(stack.Context, position); } #endregion #endregion } /// /// The Filesystem iterator. /// [ImplementsType] public class FilesystemIterator : DirectoryIterator, Iterator, Traversable, SeekableIterator { #region Constants /// /// Default . /// private const int DefaultFlags = FilesystemIterator.KEY_AS_PATHNAME | FilesystemIterator.CURRENT_AS_FILEINFO | FilesystemIterator.SKIP_DOTS; public const int CURRENT_AS_PATHNAME = 32; public const int CURRENT_AS_FILEINFO = 0; public const int CURRENT_AS_SELF = 16; public const int CURRENT_MODE_MASK = 240; public const int KEY_AS_PATHNAME = 0; public const int KEY_AS_FILENAME = 256; public const int FOLLOW_SYMLINKS = 512; public const int KEY_MODE_MASK = 3840; public const int NEW_CURRENT_AND_KEY = 256; public const int SKIP_DOTS = 4096; public const int UNIX_PATHS = 8192; #endregion #region Fields /// /// Flags of the iterator. See constants. /// protected int flags = 0; protected bool CurrentAsPathName { get { return (this.flags & CURRENT_AS_PATHNAME) != 0; } } protected bool CurrentAsFileInfo { get { return (this.flags & CURRENT_MODE_MASK) == CURRENT_AS_FILEINFO; } } protected bool CurrentAsSelf { get { return (this.flags & CURRENT_AS_SELF) != 0; } } protected bool KeyAsPathName { get { return (this.flags & KEY_MODE_MASK) == KEY_AS_PATHNAME; } } protected bool KeyAsFileName { get { return (this.flags & KEY_AS_FILENAME) != 0; } } #endregion #region Constructor /// /// For internal purposes only. /// [EditorBrowsable(EditorBrowsableState.Never)] public FilesystemIterator(ScriptContext/*!*/context, bool newInstance) : base(context, newInstance) { } /// /// For internal purposes only. /// [EditorBrowsable(EditorBrowsableState.Never)] public FilesystemIterator(ScriptContext/*!*/context, DTypeDesc caller) : base(context, caller) { } [ImplementsMethod] public virtual object __construct(ScriptContext/*!*/context, object/*string*/path, [Optional]object/*int*/flags /*= FilesystemIterator.KEY_AS_PATHNAME | FilesystemIterator.CURRENT_AS_FILEINFO | FilesystemIterator.SKIP_DOTS*/ ) { if (flags == Arg.Default || flags == null) this.flags = DefaultFlags; else this.flags = Core.Convert.ObjectToInteger(flags); throw new NotImplementedException(); } [EditorBrowsable(EditorBrowsableState.Never)] public static new object __construct(object instance, PhpStack stack) { var path = stack.PeekValue(1); var flags = stack.PeekValueOptional(2); stack.RemoveFrame(); return ((FilesystemIterator)instance).__construct(stack.Context, path, flags); } #endregion #region interface Iterator [ImplementsMethod] public override object key(ScriptContext context) { if (validInternal()) { if (KeyAsFileName) return dir_enumerator.Current.Name; else// if (KeyAsPathName) return dir_enumerator.Current.FullName; } return false; } [ImplementsMethod] public override object current(ScriptContext context) { if (validInternal()) { if (CurrentAsSelf) return this; else if (CurrentAsPathName) return getPathnameInternal(dir_enumerator.Current); else //if (CurrentAsFileInfo) return new SplFileInfo(context, true) { fs_info = dir_enumerator.Current, }; } return false; } #region Arglesses [EditorBrowsable(EditorBrowsableState.Never)] public new static object key(object instance, PhpStack stack) { stack.RemoveFrame(); return ((FilesystemIterator)instance).key(stack.Context); } [EditorBrowsable(EditorBrowsableState.Never)] public new static object current(object instance, PhpStack stack) { stack.RemoveFrame(); return ((FilesystemIterator)instance).current(stack.Context); } #endregion #endregion } /// /// The RecursiveDirectoryIterator provides an interface for iterating recursively over filesystem directories. /// [ImplementsType] public class RecursiveDirectoryIterator : FilesystemIterator, RecursiveIterator { #region Fields & Properties /// /// Default . /// private const int DefaultFlags = FilesystemIterator.KEY_AS_PATHNAME | FilesystemIterator.CURRENT_AS_FILEINFO; /// /// Sub path used internally to track nesting of the iterator. /// private string sub_path = null; protected string SubPathname { get { var fname = (this.dir_enumerator != null) ? getFilenameInternal(this.dir_enumerator.Current) : null; if (this.sub_path != null) { return string.Concat(this.sub_path, Path.DirectorySeparatorChar.ToString(), fname); } else { return fname ?? string.Empty; } } } #endregion #region Constructor /// /// For internal purposes only. /// [EditorBrowsable(EditorBrowsableState.Never)] public RecursiveDirectoryIterator(ScriptContext/*!*/context, bool newInstance) : base(context, newInstance) { } /// /// For internal purposes only. /// [EditorBrowsable(EditorBrowsableState.Never)] public RecursiveDirectoryIterator(ScriptContext/*!*/context, DTypeDesc caller) : base(context, caller) { } [ImplementsMethod] public virtual new object __construct(ScriptContext/*!*/context, object/*string*/path , [Optional]object/*int*/flags /*= FilesystemIterator.KEY_AS_PATHNAME | FilesystemIterator.CURRENT_AS_FILEINFO*/ ) { // setup flags if (flags != Arg.Default && flags != null) this.flags = Core.Convert.ObjectToInteger(flags); else this.flags = DefaultFlags; // init path and enumerator ConstructDirectoryIteratorInternal(context, path); return null; } [EditorBrowsable(EditorBrowsableState.Never)] public static new object __construct(object instance, PhpStack stack) { var path = stack.PeekValue(1); var flags = stack.PeekValueOptional(2); stack.RemoveFrame(); return ((RecursiveDirectoryIterator)instance).__construct(stack.Context, path, flags); } protected override IEnumerable EnumerateFileSystemInfos() { var dir = this.fs_info as DirectoryInfo; return dir != null ? dir.EnumerateFileSystemInfos("*", SearchOption.AllDirectories) : new FileSystemInfo[0]; } #endregion #region Methods [ImplementsMethod] public virtual object/*string*/getSubPath(ScriptContext/*!*/context) { return this.sub_path ?? string.Empty; } [ImplementsMethod] public virtual object/*string*/getSubPathname(ScriptContext/*!*/context) { return this.SubPathname; } //public string getSubPathname ( void ) //public bool hasChildren ([ bool $allow_links = false ] ) //public string key ( void ) //public void next ( void ) //public void rewind ( void ) #endregion #region RecursiveIterator [ImplementsMethod] public virtual object getChildren(ScriptContext context) { if (CurrentAsPathName) return this.getPath(context); if (validInternal()) { var di = new RecursiveDirectoryIterator(context, true) { fs_info = this.dir_enumerator.Current, sub_path = this.SubPathname, flags = DefaultFlags, }; di.CreateEnumeratorInternal(); return di; } return null; } [ImplementsMethod] public virtual object hasChildren(ScriptContext context/*, [Optional]object allowLinks/*=false*/) { //bool bAllowLinks = (allowLinks == null || allowLinks == Arg.Default) ? false : Core.Convert.ObjectToBoolean(allowLinks); return this.validInternal() && !this.isDotInternal() && this.dir_enumerator.Current is DirectoryInfo; } #region Arglesses [EditorBrowsable(EditorBrowsableState.Never)] public static object getSubPath(object instance, PhpStack stack) { stack.RemoveFrame(); return ((RecursiveDirectoryIterator)instance).getSubPath(stack.Context); } [EditorBrowsable(EditorBrowsableState.Never)] public static object getSubPathname(object instance, PhpStack stack) { stack.RemoveFrame(); return ((RecursiveDirectoryIterator)instance).getSubPathname(stack.Context); } [EditorBrowsable(EditorBrowsableState.Never)] public static object getChildren(object instance, PhpStack stack) { stack.RemoveFrame(); return ((RecursiveDirectoryIterator)instance).getChildren(stack.Context); } [EditorBrowsable(EditorBrowsableState.Never)] public static object hasChildren(object instance, PhpStack stack) { var allowLinks = stack.PeekValueOptional(1); stack.RemoveFrame(); return ((RecursiveDirectoryIterator)instance).hasChildren(stack.Context/*, allowLinks*/); } #endregion #endregion } /// /// The SplFileObject class offers an object oriented interface for a file. /// [ImplementsType] public class SplFileObject : SplFileInfo, RecursiveIterator, Traversable, Iterator, SeekableIterator { #region Constants /// /// Drop newlines at the end of a line. /// public const int DROP_NEW_LINE = 1; /// /// Read on rewind/next. /// public const int READ_AHEAD = 2; /// /// Skips empty lines in the file. This requires the READ_AHEAD flag be enabled, to work as expected. /// public const int SKIP_EMPTY = 4; /// /// Read lines as CSV rows. /// public const int READ_CSV = 8; #endregion #region Constructor /// /// For internal purposes only. /// [EditorBrowsable(EditorBrowsableState.Never)] public SplFileObject(ScriptContext/*!*/context, bool newInstance) : base(context, newInstance) { } /// /// For internal purposes only. /// [EditorBrowsable(EditorBrowsableState.Never)] public SplFileObject(ScriptContext/*!*/context, DTypeDesc caller) : base(context, caller) { } #endregion #region Methods ///* Methods */ //public __construct ( string $filename [, string $open_mode = "r" [, bool $use_include_path = false [, resource $context ]]] ) [ImplementsMethod] public virtual new object __construct(ScriptContext context, object filename) { throw new NotImplementedException(); } [EditorBrowsable(EditorBrowsableState.Never)] public static new object __construct(object instance, PhpStack stack) { var arg1 = stack.PeekValue(1); stack.RemoveFrame(); return ((SplFileObject)instance).__construct(stack.Context, arg1); } //public bool eof ( void ) //public bool fflush ( void ) //public string fgetc ( void ) //public array fgetcsv ([ string $delimiter = "," [, string $enclosure = "\"" [, string $escape = "\\" ]]] ) //public string fgets ( void ) //public string fgetss ([ string $allowable_tags ] ) //public bool flock ( int $operation [, int &$wouldblock ] ) //public int fpassthru ( void ) //public int fputcsv ( array $fields [, string $delimiter = ',' [, string $enclosure = '"' ]] ) //public mixed fscanf ( string $format [, mixed &$... ] ) //public int fseek ( int $offset [, int $whence = SEEK_SET ] ) //public array fstat ( void ) //public int ftell ( void ) //public bool ftruncate ( int $size ) //public int fwrite ( string $str [, int $length ] ) //public array getCsvControl ( void ) //public int getFlags ( void ) //public int getMaxLineLen ( void ) //public void setCsvControl ([ string $delimiter = "," [, string $enclosure = "\"" [, string $escape = "\\" ]]] ) //public void setFlags ( int $flags ) //public void setMaxLineLen ( int $max_len ) #endregion #region RecursiveIterator Members [ImplementsMethod] public virtual object getChildren(ScriptContext context) { throw new NotImplementedException(); } [EditorBrowsable(EditorBrowsableState.Never)] public static object getChildren(object instance, PhpStack stack) { stack.RemoveFrame(); return ((SplFileObject)instance).getChildren(stack.Context); } [ImplementsMethod] public virtual object hasChildren(ScriptContext context) { throw new NotImplementedException(); } [EditorBrowsable(EditorBrowsableState.Never)] public static object hasChildren(object instance, PhpStack stack) { stack.RemoveFrame(); return ((SplFileObject)instance).hasChildren(stack.Context); } #endregion #region Iterator Members [ImplementsMethod] public virtual object rewind(ScriptContext context) { throw new NotImplementedException(); } [EditorBrowsable(EditorBrowsableState.Never)] public static object rewind(object instance, PhpStack stack) { stack.RemoveFrame(); return ((SplFileObject)instance).rewind(stack.Context); } [ImplementsMethod] public virtual object next(ScriptContext context) { throw new NotImplementedException(); } [EditorBrowsable(EditorBrowsableState.Never)] public static object next(object instance, PhpStack stack) { stack.RemoveFrame(); return ((SplFileObject)instance).next(stack.Context); } [ImplementsMethod] public virtual object valid(ScriptContext context) { throw new NotImplementedException(); } [EditorBrowsable(EditorBrowsableState.Never)] public static object valid(object instance, PhpStack stack) { stack.RemoveFrame(); return ((SplFileObject)instance).valid(stack.Context); } [ImplementsMethod] public virtual object key(ScriptContext context) { throw new NotImplementedException(); } [EditorBrowsable(EditorBrowsableState.Never)] public static object key(object instance, PhpStack stack) { stack.RemoveFrame(); return ((SplFileObject)instance).key(stack.Context); } [ImplementsMethod] public virtual object current(ScriptContext context) { throw new NotImplementedException(); } [EditorBrowsable(EditorBrowsableState.Never)] public static object current(object instance, PhpStack stack) { stack.RemoveFrame(); return ((SplFileObject)instance).current(stack.Context); } #endregion #region SeekableIterator Members [ImplementsMethod] public virtual object seek(ScriptContext context, object position) { throw new NotImplementedException(); } [EditorBrowsable(EditorBrowsableState.Never)] public static object seek(object instance, PhpStack stack) { var arg1 = stack.PeekValue(1); stack.RemoveFrame(); return ((SplFileObject)instance).seek(stack.Context, arg1); } #endregion } } ================================================ FILE: Source/ClassLibrary/SPL/Iterators.cs ================================================ /* Copyright (c) 2004-2006 Ladislav Prosek. The use and distribution terms for this software are contained in the file named License.txt, which can be found in the root of the Phalanger distribution. By using this software in any fashion, you are agreeing to be bound by the terms of this license. You must not remove this notice from this software. */ using System; using System.Threading; using System.Collections; using System.Collections.Generic; using PHP.Core; using PHP.Core.Reflection; using System.Diagnostics; namespace PHP.Library.SPL { /// /// Contains iterators-related class library functions. /// /// public static class SplIterators { #region iterator_apply, iterator_count, iterator_to_array /// /// Calls a function for every element in an iterator. /// /// Current . /// Class context provided by compiler. /// The class to iterate over. /// The callback function to call on every element. /// Note: The function must return TRUE in order to continue iterating over the iterator. /// Returns the iteration count. /// or are null references. [ImplementsFunction("iterator_apply", FunctionImplOptions.NeedsClassContext)] [return: CastToFalse] public static int Apply(ScriptContext/*!*/context, PHP.Core.Reflection.DTypeDesc caller, Iterator iterator, PhpCallback function) { return Apply(context, caller, iterator, function, null); } /// /// Calls a function for every element in an iterator. /// /// Current . /// Class context provided by compiler. /// The class to iterate over. /// The callback function to call on every element. /// Note: The function must return TRUE in order to continue iterating over the iterator. /// Arguments to pass to the callback function. /// Returns the iteration count. /// or are null references. [ImplementsFunction("iterator_apply", FunctionImplOptions.NeedsClassContext)] [return:CastToFalse] public static int Apply(ScriptContext/*!*/context, PHP.Core.Reflection.DTypeDesc caller, Iterator/*!*/iterator, PhpCallback function, PhpArray args) { // check parameters: Debug.Assert(context != null); Debug.Assert(iterator != null, "Phalanger should not pass a null here."); if (function == null) { PhpException.ArgumentNull("function"); return -1; } // copy args into object array: object[] args_array; if (args != null) { args_array = new object[args.Count]; args.Values.CopyTo(args_array, 0); } else { args_array = ArrayUtils.EmptyObjects; } // iterate through the iterator: int n = 0; iterator.rewind(context); while (PHP.Core.Convert.ObjectToBoolean(iterator.valid(context))) { if (!PHP.Core.Convert.ObjectToBoolean(function.Invoke(caller, args_array))) break; n++; iterator.next(context); } // return amount of iterated elements: return n; } /// /// Count the elements in an iterator. /// /// Current . /// The iterator being counted. /// The number of elements in . [ImplementsFunction("iterator_count")] public static int Count(ScriptContext/*!*/context, Iterator/*!*/iterator) { // check parameters: Debug.Assert(context != null); Debug.Assert(iterator != null, "Phalanger should not pass a null here."); // iterate through the iterator: int n = 0; iterator.rewind(context); while (PHP.Core.Convert.ObjectToBoolean(iterator.valid(context))) { n++; iterator.next(context); } // return amount of iterated elements: return n; } /// /// Copy the elements of an iterator into an array. /// /// Current . /// The iterator being copied. /// An array containing the elements of the . [ImplementsFunction("iterator_to_array")] public static PhpArray/*!*/ToArray(ScriptContext/*!*/context, Iterator/*!*/iterator) { return ToArray(context, iterator, true); } /// /// Copy the elements of an iterator into an array. /// /// Current . /// The iterator being copied. /// Whether to use the iterator element keys as index. /// An array containing the elements of the . [ImplementsFunction("iterator_to_array")] public static PhpArray/*!*/ToArray(ScriptContext/*!*/context, Iterator/*!*/iterator, bool use_keys/*=true*/) { // check parameters: Debug.Assert(context != null); Debug.Assert(iterator != null, "Phalanger should not pass a null here."); // var array = new PhpArray(); // iterate through the iterator: iterator.rewind(context); while (PHP.Core.Convert.ObjectToBoolean(iterator.valid(context))) { object value = iterator.current(context); // PHP calls current() first if (use_keys) array[iterator.key(context)] = value; else array.Add(value); iterator.next(context); } // return amount of iterated elements: return array; } #endregion } } ================================================ FILE: Source/ClassLibrary/SPL/Objects.cs ================================================ /* Copyright (c) 2004-2006 Ladislav Prosek. The use and distribution terms for this software are contained in the file named License.txt, which can be found in the root of the Phalanger distribution. By using this software in any fashion, you are agreeing to be bound by the terms of this license. You must not remove this notice from this software. */ using System; using System.Threading; using System.Collections; using System.Collections.Generic; using PHP.Core; using PHP.Core.Reflection; namespace PHP.Library { /// /// Contains object-related class library functions. /// /// public static class SplObjects { /// /// Return hash id for given object. /// /// Object instance to get its hash code. /// Hexadecimal number as string. [ImplementsFunction("spl_object_hash")] public static string ObjectHash(object obj) { DObject dobj = obj as DObject; if (dobj == null) { PhpException.Throw(PhpError.Warning, LibResources.GetString("unexpected_arg_given", 1, DObject.PhpTypeName, PhpVariable.GetTypeName(obj).ToLower())); return null; } return dobj.GetHashCode().ToString("x32"); } /// /// This function returns an array with the current available SPL classes. /// /// Returns an array containing the currently available SPL classes. [ImplementsFunction("spl_classes")] public static PhpArray/*!*/SplClasses() { var array = new PhpArray(32); // TODO: (J) list SPL classes http://www.php.net/manual/en/function.spl-classes.php // array.Add( "class_name", "class_name" ); return array; } } } ================================================ FILE: Source/ClassLibrary/Serializers.CLR.cs ================================================ /* Copyright (c) 2004-2006 Tomas Matousek, Ladislav Prosek. The use and distribution terms for this software are contained in the file named License.txt, which can be found in the root of the Phalanger distribution. By using this software in any fashion, you are agreeing to be bound by the terms of this license. You must not remove this notice from this software. */ using System; using System.IO; using System.Runtime.Serialization; using PHP.Core; using PHP.Core.Reflection; using System.Collections.Generic; using System.Diagnostics; namespace PHP.Library { #region Serializer /// /// A base class for serializers, i.e. a named formatters. /// public abstract class Serializer : MarshalByRefObject { #region ClassContextHolder /// /// Common base class of ObjectWriter and ObjectReader containing the cached class context functionality. /// /// /// Class context is needed when invoking __sleep and __wakeup magic methods. /// internal abstract class ClassContextHolder { /// /// Initialize the ClassCOntextHolder with a known DTypeDesc. /// Use UnknownTypeDesc.Singleton to specify an unknown caller. In this case the caller will be determined when needed. /// /// public ClassContextHolder(DTypeDesc caller) { if (caller == null || !caller.IsUnknown) { ClassContext = caller; } } /// /// Copies info from already used ClassContextHolder. It reuses the holder iff class context was already initialized. /// /// Exiting class context holder with potentionaly already obtained class context. internal ClassContextHolder(ClassContextHolder/*!*/holder) { Debug.Assert(holder != null); this._classContext = holder._classContext; this.classContextIsValid = holder.classContextIsValid; } /// /// Gets or sets the current class context. See . /// protected DTypeDesc ClassContext { get { return (classContextIsValid ? _classContext : (ClassContext = PhpStackTrace.GetClassContext())); } set { _classContext = value; classContextIsValid = true; } } /// /// Holds the current class context (a type derived from in whose /// scope the calling code is executing). Initialized lazily. /// private DTypeDesc _classContext; /// /// Invalid class context singleton. The initial value for . /// private bool classContextIsValid; } #endregion /// /// Gets a name of the serializer. Shouldn't return a null reference. /// protected abstract string GetName(); /// /// Creates a formatter. Shouldn't return a null reference. /// /// DTypeDesc of the class context or UnknownTypeDesc if class context is not known yet and will be determined lazily. protected abstract IFormatter CreateFormatter(DTypeDesc caller); /// /// Gets tring representation of the serializer. /// /// The name of the serializer. public override string ToString() { return Name; } /// /// Gets the serializer name (always non-null). /// public string Name { get { string result = GetName(); if (result == null) throw new InvalidMethodImplementationException(GetType().FullName + ".GetName"); return result; } } /// /// Creates a formatter (always non-null). /// /// DTypeDesc of the class context or UnknownTypeDesc if class context is not known yet and will be determined lazily. /// New IFormatter class instance. private IFormatter GetFormatter(DTypeDesc caller) { IFormatter result = CreateFormatter(caller); if (result == null) throw new InvalidMethodImplementationException(GetType().FullName + "CreateFormatter"); return result; } /// /// Serializes a graph of connected objects to a byte array using a given formatter. /// /// The variable to serialize. /// DTypeDesc of the caller's class context if it is known or UnknownTypeDesc if it should be determined lazily. /// /// The serialized representation of the or a null reference on error. /// /// Serialization failed (Notice). public PhpBytes Serialize(object variable, DTypeDesc caller) { MemoryStream stream = new MemoryStream(); try { try { // serialize the variable into the memory stream GetFormatter(caller).Serialize(stream, variable); } catch (System.Reflection.TargetInvocationException e) { throw e.InnerException; } } catch (SerializationException e) { PhpException.Throw(PhpError.Notice, LibResources.GetString("serialization_failed", e.Message)); return null; } // extract the serialized data return new PhpBytes(stream.ToArray()); } /// /// Deserializes a graph of connected object from a byte array using a given formatter. /// /// The byte array to deserialize the graph from. /// DTypeDesc of the caller's class context if it is known or UnknownTypeDesc if it should be determined lazily. /// /// The deserialized object graph or an instance of containing false on error. /// /// Deserialization failed (Notice). public PhpReference Deserialize(PhpBytes bytes, DTypeDesc caller) { MemoryStream stream = new MemoryStream(bytes.ReadonlyData); object result = null; try { try { // deserialize the data result = GetFormatter(caller).Deserialize(stream); } catch (System.Reflection.TargetInvocationException e) { throw e.InnerException; } } catch (SerializationException e) { PhpException.Throw(PhpError.Notice, LibResources.GetString("deserialization_failed", e.Message, stream.Position, stream.Length)); return new PhpReference(false); } return PhpVariable.MakeReference(result); } } #endregion #region SingletonSerializer /// /// Represents a serializer with a singleton formatter. /// /// public sealed class SingletonSerializer : Serializer { /// /// A name of the serializer. Can't contain a null reference. /// private readonly string/*!*/ name; /// /// A formatter. Can't contain a null reference. /// private readonly IFormatter/*!*/ formatter; /// /// Creates a new instance of the serializer. /// /// The name. /// The formatter. /// or are null references. public SingletonSerializer(string/*!*/ name, IFormatter/*!*/ formatter) { if (name == null) throw new ArgumentNullException("name"); if (formatter == null) throw new ArgumentNullException("formatter"); this.name = name; this.formatter = formatter; } /// /// Returns the name. /// protected override string/*!*/ GetName() { return name; } /// /// Returns the formatter. /// protected override IFormatter/*!*/ CreateFormatter(DTypeDesc caller) { return formatter; } } #endregion #region ContextualSerializer /// /// Prepresents a serializer with a formatter utilizing the . /// /// public sealed class ContextualSerializer : Serializer { public delegate IFormatter/*!*/ FormatterFactory(DTypeDesc caller); /// /// A name of the serializer. Can't contain a null reference. /// private readonly string/*!*/ name; /// /// A formatter. Can't contain a null reference. /// private readonly FormatterFactory/*!*/ formatterFactory; /// /// Creates a new instance of the serializer. /// /// The name. /// The factory that supplies fresh instances of the formatter. /// or are null references. public ContextualSerializer(string/*!*/ name, FormatterFactory/*!*/ formatterFactory) { if (name == null) throw new ArgumentNullException("name"); if (formatterFactory == null) throw new ArgumentNullException("formatterFactory"); this.name = name; this.formatterFactory = formatterFactory; } /// /// Returns the name. /// protected override string/*!*/ GetName() { return name; } /// /// Returns the formatter. /// protected override IFormatter/*!*/ CreateFormatter(DTypeDesc caller) { return formatterFactory(caller); } } #endregion #region PhpSerializer public sealed class PhpSerializer : Serializer { private PhpSerializer() { } /// /// A singleton instance. /// public static readonly PhpSerializer Default = new PhpSerializer(); /// /// Returns the name. /// protected override string GetName() { return "php"; } /// /// Returns the formatter using the current page encoding set in the global configuration. /// protected override IFormatter CreateFormatter(DTypeDesc caller) { return new PhpFormatter(Configuration.Application.Globalization.PageEncoding, caller); } } #endregion #region PhpJsonSerializer public sealed class PhpJsonSerializer : Serializer { private readonly JsonFormatter.EncodeOptions encodeOptions; private readonly JsonFormatter.DecodeOptions decodeOptions; /// /// Initialize parametrized serializer. /// internal PhpJsonSerializer(JsonFormatter.EncodeOptions encodeOptions, JsonFormatter.DecodeOptions decodeOptions) { // options this.encodeOptions = encodeOptions; this.decodeOptions = decodeOptions; } /// /// A singleton instance with default parameters. /// public static readonly PhpJsonSerializer Default = new PhpJsonSerializer(new JsonFormatter.EncodeOptions(), new JsonFormatter.DecodeOptions()); /// /// Returns the name. /// protected override string GetName() { return "JSON"; } /// /// Returns the formatter using the current page encoding set in the global configuration. /// protected override IFormatter CreateFormatter(DTypeDesc caller) { return new JsonFormatter(Configuration.Application.Globalization.PageEncoding, encodeOptions, decodeOptions, caller); } } #endregion //#region PhalangerSerializer //public sealed class PhalangerSerializer : Serializer //{ // private PhalangerSerializer() { } // /// // /// A singleton instance. // /// // public static readonly PhalangerSerializer Default = new PhalangerSerializer(); // /// // /// Returns the name. // /// // protected override string GetName() // { // return "phalanger"; // } // /// // /// Returns the formatter using the current page encoding set in the global configuration. // /// // protected override IFormatter CreateFormatter(DTypeDesc caller) // { // return new PhalangerFormatter(Configuration.Application.Globalization.PageEncoding, caller); // } //} //#endregion #region Serializers /// /// Maintains serializers. Libraries can register their own serializers here. /// public static class Serializers { /// /// Registered handlers. /// private static Dictionary serializers = new Dictionary(); private static readonly object serializersLock = new object(); /// /// Registeres a new serializer. Serializers are usualy registered by libraries. /// /// The serializer. /// Whether the serializer has been successfuly registered. Two serializers with the same names can't be registered. /// is a null reference. public static bool RegisterSerializer(Serializer serializer) { if (serializer == null) throw new ArgumentNullException("serializer"); lock (serializersLock) { if (serializers.ContainsKey(serializer.Name)) return false; serializers.Add(serializer.Name, serializer); } return true; } /// /// Gets a serializer by specified name. /// /// The name of the serializer. /// The serializer or null reference if such serializer has not been registered. /// is a null reference. public static Serializer GetSerializer(string name) { if (name == null) throw new ArgumentNullException("name"); lock (serializersLock) { if (serializers.ContainsKey(name)) { return (Serializer)serializers[name]; } else { return null; } } } } #endregion } ================================================ FILE: Source/ClassLibrary/Session.CLR.cs ================================================ /* Copyright (c) 2004-2006 Tomas Matousek. The use and distribution terms for this software are contained in the file named License.txt, which can be found in the root of the Phalanger distribution. By using this software in any fashion, you are agreeing to be bound by the terms of this license. You must not remove this notice from this software. TODO: - Added a check for special characters in the session name. (PHP 5.1.3) - Deprecated session_register(), session_unregister() and session_is_registered(). */ using System; using System.IO; using System.Web; using System.Web.SessionState; using System.Collections; using System.ComponentModel; using System.Runtime.Serialization; using System.Globalization; using PHP.Core; using PHP.Core.Reflection; using System.Web.Configuration; using System.Security.Cryptography; using System.Collections.Generic; using System.Diagnostics; namespace PHP.Library { #region PhpSessionHandlerBase /// /// A base class for PHP session handlers. /// public abstract class PhpSessionHandlerBase : SessionHandler { protected const string FilePrefix = "sess_"; /// /// Loads serialized variables. /// /// A path where session files can be stored in. /// A session ID. /// Variables in serialized form. protected abstract PhpBytes LoadSerializedVariables(string savePath, string sid); /// /// Stores serialized variables. /// /// A path where session files can be stored in. /// A session ID. /// Variables in serialized form. protected abstract void SaveSerializedVariables(string savePath, string sid, PhpBytes data); /// /// Collects old session data. /// /// A path where session files can be stored in. /// A session ID. /// A data lifetime in seconds. protected abstract void Collect(string savePath, string sid, int lifetime); /// /// Loads session variables from persistent storage. /// /// The current script context. /// The current HTTP context. /// An array of session variables. A null reference on error. protected sealed override PhpArray Load(ScriptContext context, HttpContext httpContext) { string sid = httpContext.Session.SessionID; LibraryConfiguration config = LibraryConfiguration.GetLocal(context); PhpBytes bytes = LoadSerializedVariables(config.Session.SavePath, sid); // deserialization: PhpArray result = null; if (bytes != null && bytes.Length != 0) { PhpReference php_ref = PhpVariables.Unserialize(null/*Load method is not called from any class context*/, bytes); result = (php_ref != null) ? php_ref.Value as PhpArray : null; } // collection: if (DoCollection(config)) Collect(config.Session.SavePath, sid, config.Session.GcMaxLifetime); return result; } /// /// Persists session variables to a file. /// /// Variables to persist. /// The current script context. /// The current HTTP context. protected sealed override void Persist(PhpArray variables, ScriptContext context, HttpContext httpContext) { string sid = httpContext.Session.SessionID; LibraryConfiguration config = LibraryConfiguration.GetLocal(context); PhpBytes data = PhpVariables.Serialize(null/*Persist method is not called from any class context*/, variables); SaveSerializedVariables(config.Session.SavePath, sid, data); } /// /// Decides whether to perform collection or not. /// private static bool DoCollection(LibraryConfiguration config) { if (config.Session.GcProbability <= 0) return false; double rand = (double)config.Session.GcDivisor * PhpMath.Generator.NextDouble(); return rand < config.Session.GcProbability; } /// /// Gets a name of the session file without path. /// protected static string GetSessionFileName(string sid) { return FilePrefix + sid; } /// /// Gets a full path to the session file. /// protected static string GetSessionFilePath(string savePath, string sid) { try { return Path.Combine(savePath, GetSessionFileName(sid)); } catch (ArgumentException) { PhpException.Throw(PhpError.Warning, LibResources.GetString("invalid_session_save_path", savePath)); return null; } } } #endregion #region PhpSessionHandler /// /// Handles PHP file backed sessions. /// public sealed class PhpSessionHandler : PhpSessionHandlerBase { private PhpSessionHandler() { } /// /// Singleton instance. /// public static readonly PhpSessionHandler Default = new PhpSessionHandler(); /// /// Gets name of the handler used in configuration. /// public override string Name { get { return "files"; } } /// /// Loads session data from the session file. /// protected override PhpBytes LoadSerializedVariables(string savePath, string sid) { PhpBytes result = null; using (PhpStream file = OpenSessionFile(savePath, sid, false)) { if (file != null) { result = file.ReadBinaryContents(-1); file.Close(); } } return result; } /// /// Stores serialied variables to the session file. /// protected override void SaveSerializedVariables(string savePath, string sid, PhpBytes data) { using (PhpStream file = OpenSessionFile(savePath, sid, true)) { if (file != null) { file.WriteBytes(data); file.Close(); } } } /// /// Deletes session files older than . /// protected override void Collect(string savePath, string sid, int lifetime) { using (PhpResource dir = PhpDirectory.Open(savePath)) { if (dir == null) return; int threshold = DateTimeUtils.UtcToUnixTimeStamp(DateTime.Now.ToUniversalTime().AddSeconds(-lifetime)); string file_name; while ((file_name = PhpDirectory.Read(dir)) != null) { if (file_name.Length >= FilePrefix.Length && file_name.Substring(0, FilePrefix.Length) == FilePrefix) { string full_path = Path.Combine(savePath, file_name); int time = PhpFile.GetAccessTime(full_path); if (time < threshold) { Debug.WriteLine(String.Format("Collecting file {0} atime: {1} threshold: {2}", full_path, DateTimeUtils.UnixTimeStampToUtc(time).ToLongTimeString(), DateTimeUtils.UnixTimeStampToUtc(threshold).ToLongTimeString()), "PhpSessionHandler"); PhpFile.Delete(full_path); } } } } } /// /// Called immediately before the session is abandoned. /// /// A current script context. /// A current HTTP context. protected override void Abandoning(ScriptContext context, HttpContext httpContext) { LibraryConfiguration config = LibraryConfiguration.GetLocal(context); string file_name = GetSessionFilePath(config.Session.SavePath, httpContext.Session.SessionID); Debug.WriteLine("Abandoning file " + file_name, "PhpSessionHandler.CollectOldFiles"); PhpFile.Delete(file_name); } /// /// Opens a session file for reading or writing. /// /// A save path in the configuration. /// The SID. /// Whether to open the file for writing. private static PhpStream OpenSessionFile(string savePath, string sid, bool write) { string file_path = GetSessionFilePath(savePath, sid); if (file_path != null) { if (write) { Debug.WriteLine("Write open file " + file_path, "PhpSessionHandler"); return PhpStream.Open(file_path, "wb", StreamOpenOptions.Empty, StreamContext.Default); } else if (PhpFile.Exists(file_path)) { Debug.WriteLine("Read open file " + file_path, "PhpSessionHandler"); return PhpStream.Open(file_path, "rb", StreamOpenOptions.Empty, StreamContext.Default); } } return null; } #region Unit Testing #if DEBUG public static void Test_CollectOldFiles() { string path = Path.Combine(Path.GetTempPath(), "Session"); System.IO.Directory.CreateDirectory(path); const int lifetime = 200; const int count = 20; // System.Diagnostics.Debug.Listeners.Clear(); // System.Diagnostics.Debug.Listeners.Add(new TextWriterTraceListener(Console.Out)); for (int i = 0; i < count; i++) { string file = Path.Combine(path, "sess_" + i); Console.WriteLine("create file '{0}'", file); File.CreateText(file).Close(); File.SetLastAccessTime(file, DateTime.Now.AddSeconds(-lifetime + count / 2 - i)); } Console.WriteLine("collecting..."); Default.Collect(path, "", lifetime); Console.WriteLine("done."); } #endif #endregion } #endregion #region PhpUserSessionHandler /// /// Handles PHP sessions via user handlers. /// public sealed class PhpUserSessionHandler : PhpSessionHandlerBase { private PhpUserSessionHandler() { } #region Nested class: User Handlers /// /// A set of session callbacks. /// internal class Handlers { public PhpCallback Open; public PhpCallback Close; public PhpCallback Read; public PhpCallback Write; public PhpCallback Destroy; public PhpCallback Collect; /// /// Clears thread static field. Called on request end. /// private static void Clear() { _current = null; } /// /// Registeres called on request end. /// static Handlers() { RequestContext.RequestEnd += new Action(Clear); } /// /// Gets the current set of handlers. /// internal static Handlers Current { get { if (_current == null) _current = new Handlers(); return _current; } } [ThreadStatic] private static Handlers _current = null; } #endregion /// /// Singleton instance. /// public static readonly PhpUserSessionHandler Default = new PhpUserSessionHandler(); /// /// Gets name of the handler used in configuration. /// public override string Name { get { return "user"; } } /// /// Calls "open" and "read" user handlers if not empty. /// protected override PhpBytes LoadSerializedVariables(string savePath, string sid) { Handlers handlers = Handlers.Current; PhpBytes result = null; if (handlers.Open != null) { if (!Core.Convert.ObjectToBoolean(handlers.Open.Invoke(savePath, GetSessionFileName(sid)))) { ReportError("open", savePath, sid); return null; } } if (handlers.Read != null) { result = Core.Convert.ObjectToPhpBytes(handlers.Read.Invoke(sid)); // error (empty string of bytes): if (result != null && result.Length == 0) { ReportError("read", savePath, sid); return null; } } return result; } /// /// Calls "write" and "close" user handlers if not empty. /// protected override void SaveSerializedVariables(string savePath, string sid, PhpBytes data) { Handlers handlers = Handlers.Current; if (handlers.Write != null && !Core.Convert.ObjectToBoolean(handlers.Write.Invoke(sid, data))) { ReportError("write", savePath, sid); return; } if (handlers.Close != null && !Core.Convert.ObjectToBoolean(handlers.Close.Invoke())) { ReportError("close", savePath, sid); return; } } /// /// Calls "gc" user handler if not empty. /// protected override void Collect(string savePath, string sid, int lifetime) { Handlers handlers = Handlers.Current; if (handlers.Collect != null) if (!Core.Convert.ObjectToBoolean(handlers.Collect.Invoke(lifetime))) ReportError("gc", savePath, sid); } /// /// Calls "destroy" user handler if not empty. /// protected override void Abandoning(ScriptContext context, HttpContext httpContext) { string sid = httpContext.Session.SessionID; LibraryConfiguration config = LibraryConfiguration.GetLocal(context); Handlers handlers = Handlers.Current; if (handlers.Destroy != null) if (!Core.Convert.ObjectToBoolean(handlers.Destroy.Invoke(sid))) ReportError("destroy", config.Session.SavePath, sid); } /// /// Reports an error when the user handler has failed. /// private void ReportError(string operation, string savePath, string sid) { PhpException.Throw(PhpError.Warning, LibResources.GetString("user_session_handler_failed", operation, sid, savePath)); } } #endregion #region AspNetThruSessionHandler /// /// Session handler based of ASP.NET sessions. /// public sealed class AspNetThruSessionHandler : SessionHandler { #region Inner class: AspNetSessionArray private sealed class AspNetSessionArray : PhpArray { private readonly HttpSessionState/*!*/state; public AspNetSessionArray(HttpSessionState/*!*/httpSessionState) { Debug.Assert(httpSessionState != null); this.state = httpSessionState; } #region Helpers /// /// Checks whether given object DOES NOT implement __wakeup and __sleep magic methods. /// [System.Diagnostics.Conditional("DEBUG")] private static void NotWakeupThrowHelper(object obj) { if (obj != null && obj is DObject) { var dobj = (DObject)obj; if (dobj.TypeDesc.GetMethod(Core.Name.SpecialMethodNames.Wakeup) != null) throw new ArgumentException("__wakeup not handled yet in aspnet session handler!"); if (dobj.TypeDesc.GetMethod(Core.Name.SpecialMethodNames.Sleep) != null) throw new ArgumentException("__sleep not handled yet in aspnet session handler!"); } } private string FindNewKey() { for (int i = 0; ; i++) { string name = i.ToString(); if (state[name] == null) return name; } } #endregion #region Operators public override object Clone() { var result = new PhpArray(state.Count); foreach (string name in state) result[name] = ClrObject.WrapDynamic(state[name]); return result; } protected override PhpArray EnsureItemIsArrayOverride() { // find max integer key, add new array at the next position var result = new PhpArray(); state[FindNewKey()] = result; return result; } protected override PhpArray EnsureItemIsArrayOverride(object key) { IntStringKey array_key; if (!PHP.Core.Convert.ObjectToArrayKey(key, out array_key)) { PhpException.IllegalOffsetType(); return null; } string name = array_key.ToString(); var obj = state[name]; var objref = obj as PhpReference; if (objref != null) obj = objref.Value; // wrap CLR types into DObject (needed for checks below): obj = ClrObject.WrapDynamic(obj); // convert obj into an array or wrap it into an array if possible: object new_obj; var wrappedarray = Operators.EnsureObjectIsArray(obj, out new_obj); if (wrappedarray != null) { if (new_obj != null) { if (objref != null) objref.Value = new_obj; else state[name] = new_obj; } return wrappedarray; } // cannot be represented as an array: PhpException.VariableMisusedAsArray(obj, false); return null; } protected override DObject EnsureItemIsObjectOverride(object key, ScriptContext context) { IntStringKey array_key; if (!PHP.Core.Convert.ObjectToArrayKey(key, out array_key)) { PhpException.IllegalOffsetType(); return null; } string name = array_key.ToString(); var obj = state[name]; var objref = obj as PhpReference; if (objref != null) obj = objref.Value; obj = ClrObject.WrapDynamic(obj); if (obj is DObject) return (DObject)obj; if (Operators.IsEmptyForEnsure(obj)) { var newobj = PHP.Library.stdClass.CreateDefaultObject(context); if (objref != null) objref.Value = newobj; else state[name] = newobj; return newobj; } PhpException.VariableMisusedAsObject(obj, false); return null; } protected override DObject EnsureItemIsObjectOverride(ScriptContext context) { var obj = PHP.Library.stdClass.CreateDefaultObject(context); state[FindNewKey()] = obj; return obj; } protected override object GetArrayItemOverride(object key, bool quiet) { IntStringKey array_key; if (!PHP.Core.Convert.ObjectToArrayKey(key, out array_key)) { if (!quiet) PhpException.IllegalOffsetType(); return null; } string name = array_key.ToString(); var item = state[name]; NotWakeupThrowHelper(item); return ClrObject.WrapDynamic(PhpVariable.Dereference(item)); } protected override PhpReference GetArrayItemRefOverride() { var result = new PhpReference(); state[FindNewKey()] = result; return result; } protected override PhpReference GetArrayItemRefOverride(int key) { return SessionGetArrayItemRef(key.ToString()); } protected override PhpReference GetArrayItemRefOverride(string key) { return SessionGetArrayItemRef(key ?? string.Empty); } protected override PhpReference GetArrayItemRefOverride(object key) { IntStringKey array_key; if (PHP.Core.Convert.ObjectToArrayKey(key, out array_key)) { return SessionGetArrayItemRef(array_key.ToString()); } else { PhpException.IllegalOffsetType(); return null; } } private PhpReference SessionGetArrayItemRef(string name) { Debug.Assert(name != null); var obj = state[name]; NotWakeupThrowHelper(obj); if (obj is PhpReference) return (PhpReference)obj; var objref = new PhpReference(ClrObject.WrapDynamic(obj)); state[name] = objref; return objref; } protected override void SetArrayItemOverride(object value) { state[FindNewKey()] = value; } protected override void SetArrayItemOverride(int key, object value) { SessionSetArrayItem(key.ToString(), value); } protected override void SetArrayItemOverride(object key, object value) { IntStringKey array_key; if (PHP.Core.Convert.ObjectToArrayKey(key, out array_key)) { SessionSetArrayItem(array_key.ToString(), value); } else { PhpException.IllegalOffsetType(); } } protected override void SetArrayItemOverride(string key, object value) { SessionSetArrayItem(key ?? string.Empty, value); } private void SessionSetArrayItem(string name, object value) { Debug.Assert(name != null); NotWakeupThrowHelper(value); var obj = state[name]; // preserve reference: if (obj != null && obj is PhpReference) ((PhpReference)obj).Value = value; else state[name] = value; } protected override void SetArrayItemRefOverride(object key, PhpReference value) { IntStringKey array_key; if (PHP.Core.Convert.ObjectToArrayKey(key, out array_key)) { NotWakeupThrowHelper(value.Value); state[array_key.ToString()] = value; } else { PhpException.IllegalOffsetType(); } } public override bool Remove(IntStringKey key) { state.Remove(key.ToString()); return true; } public override int Count { get { return state.Count; } } public override void Clear() { state.Clear(); } private class SessionStateEnumerator : IDictionaryEnumerator { private AspNetSessionArray array; private bool aliasedValues; private readonly IEnumerator namesEnumerator; public SessionStateEnumerator(AspNetSessionArray array, bool aliasedValues) { this.array = array; this.aliasedValues = aliasedValues; this.namesEnumerator = new System.Collections.ArrayList(array.state).GetEnumerator(); // make a copy of names, and get enumerator on this } public DictionaryEntry Entry { get { throw new NotImplementedException(); } } public object Key { get { return namesEnumerator.Current; } } public object Value { get { if (aliasedValues) return array.GetArrayItemRefOverride((string)Key); else return PhpVariable.Copy(ClrObject.WrapDynamic(PhpVariable.Dereference(array.state[(string)Key])), CopyReason.Assigned); } } public object Current { get { throw new NotImplementedException(); } } public bool MoveNext() { return namesEnumerator.MoveNext(); } public void Reset() { namesEnumerator.Reset(); } } public override IDictionaryEnumerator GetForeachEnumerator(bool keyed, bool aliasedValues, DTypeDesc caller) { return new SessionStateEnumerator(this, aliasedValues); } #endregion #region Enumeration public override IEnumerator>/*!*/ GetEnumerator() { foreach (string name in state) { string key = (string)name; yield return new KeyValuePair(new IntStringKey(key), state[key]); } } #endregion } #endregion /// /// Does not allow instantiation from outside. /// private AspNetThruSessionHandler() { } public static string AspNetSessionName { get { return AspNetSessionHandler.AspNetSessionName; } } /// /// Singleton instance. /// public static readonly AspNetThruSessionHandler Default = new AspNetThruSessionHandler(); /// /// Gets a string representation. /// /// The name of the handler. public override string ToString() { return Name; } /// /// Gets a name of the handler used in the configuration. /// public override string Name { get { return "aspnet_thru"; } } /// /// Loads variables from ASP.NET session to an array. /// protected override PhpArray Load(ScriptContext context, HttpContext httpContext) { return new AspNetSessionArray(httpContext.Session); } /// /// Stores session variables to ASP.NET session. /// protected override void Persist(PhpArray variables, ScriptContext context, HttpContext httpContext) { } /// /// Called immediately before the session is abandoned. /// protected override void Abandoning(ScriptContext context, HttpContext httpContext) { } /// /// ASP.NET session handler won't persist data if session id has been changed. New session will be created. /// public override bool AllowsSessionIdChange { get { return false; } } /// /// Gets session cookie associated with a specified HTTP context. /// /// The context. /// The cookie. public static HttpCookie GetCookie(HttpContext/*!*/ context) { if (context == null) throw new ArgumentNullException("context"); // no cookies available: if (context.Session == null || context.Session.IsCookieless) return null; // gets cookie from request: return context.Request.Cookies[AspNetSessionName]; } } #endregion /// /// PHP session handling functions. /// /// [ImplementsExtension(LibraryDescriptor.ExtSession)] public static class PhpSession { #region GSRs /// /// Default value for "session.cache_expire" PHP configuration option. /// public const int DefaultCacheExpire = 180; /// /// Default value for "session.cache_limiter" PHP configuration option. /// public const string DefaultCacheLimiter = "public"; /// /// Default value for "session.cookie_lifetime" PHP configuration option. /// public const int DefaultCookieLifetime = 0; /// /// Default value for "session.cookie_path" PHP configuration option. /// public const string DefaultCookiePath = "/"; /// /// Default value for "session.cookie_domain" PHP configuration option. /// public const string DefaultCookieDomain = null; /// /// Default value for "session.cookie_secure" PHP configuration option. /// public const bool DefaultCookieSecure = false; /// /// GSR routine for "session.serialize_handler" configuration option. /// internal static object GsrSerializer(LibraryConfiguration/*!*/ local, LibraryConfiguration/*!*/ @default, object value, IniAction action) { string result = local.Session.Serializer.Name; switch (action) { case IniAction.Set: { string name = Core.Convert.ObjectToString(value); Serializer serializer = Serializers.GetSerializer(name); if (serializer == null) { PhpException.Throw(PhpError.Warning, LibResources.GetString("unknown_serializer", name)); } else { local.Session.Serializer = serializer; } break; } case IniAction.Restore: local.Session.Serializer = @default.Session.Serializer; break; } return result; } /// /// Gets, sets or restores "session.save_handler" option. /// internal static object GsrHandler(LocalConfiguration local, LocalConfiguration @default, object value, IniAction action) { string result = local.Session.Handler.Name; switch (action) { case IniAction.Set: { string name = Core.Convert.ObjectToString(value); SessionHandler handler = SessionHandlers.GetHandler(name); if (handler == null) { PhpException.Throw(PhpError.Warning, PhpException.ToErrorMessage(CoreResources.GetString("unknown_session_handler", name))); } else { local.Session.Handler = handler; } break; } case IniAction.Restore: local.Session.Handler = @default.Session.Handler; break; } return result; } /// /// GSR routine used for configuration. /// internal static object GsrCacheExpire(object value, IniAction action) { switch (action) { case IniAction.Get: return CacheExpire(); case IniAction.Set: return CacheExpire(Core.Convert.ObjectToInteger(value)); case IniAction.Restore: CacheExpire(PhpSession.DefaultCacheExpire); return null; } return null; } /// /// GSR routine used for configuration. /// internal static object GsrCacheLimiter(object value, IniAction action) { switch (action) { case IniAction.Get: return CacheLimiter(); case IniAction.Set: return CacheLimiter(Core.Convert.ObjectToString(value)); case IniAction.Restore: CacheLimiter(PhpSession.DefaultCacheLimiter); return null; } return null; } /// /// GSR routine used for configuration. /// internal static object GsrCookieLifetime(object value, IniAction action) { RequestContext context; HttpCookie cookie; if (!GetCookie(out cookie, out context)) return DefaultCookieLifetime; int result = context.SessionCookieLifetime; switch (action) { case IniAction.Set: context.SessionCookieLifetime = Core.Convert.ObjectToInteger(value); break; case IniAction.Restore: context.SessionCookieLifetime = DefaultCookieLifetime; break; } return result; } /// /// GSR routine used for configuration. /// internal static object GsrCookieSecure(object value, IniAction action) { RequestContext context; HttpCookie cookie; if (!GetCookie(out cookie, out context)) return DefaultCookieSecure; bool result = cookie.Secure; switch (action) { case IniAction.Set: cookie.Secure = PhpIni.OptionValueToBoolean(value); break; case IniAction.Restore: cookie.Secure = DefaultCookieSecure; break; } return result; } /// /// GSR routine used for configuration. /// internal static object GsrCookiePath(object value, IniAction action) { RequestContext context; HttpCookie cookie; if (!GetCookie(out cookie, out context)) return DefaultCookiePath; string result = cookie.Path; switch (action) { case IniAction.Set: cookie.Path = Core.Convert.ObjectToString(value); break; case IniAction.Restore: cookie.Path = DefaultCookiePath; break; } return result; } /// /// GSR routine used for configuration. /// internal static object GsrCookieDomain(object value, IniAction action) { RequestContext context; HttpCookie cookie; if (!GetCookie(out cookie, out context)) return DefaultCookieDomain; string result = cookie.Domain; switch (action) { case IniAction.Set: cookie.Domain = Core.Convert.ObjectToString(value); break; case IniAction.Restore: cookie.Domain = DefaultCookieDomain; break; } return result; } #endregion #region SessionId internal class SessionId { /// /// Singleton SessionIDManager instance. /// internal static SessionIDManager Manager { get { if (manager == null) { var newManager = new SessionIDManager(); newManager.Initialize(); return (manager = newManager); } return manager; } } private static SessionIDManager manager = null; /// /// Set new SessionId string. Resets the Session object. /// /// Current RequestContext. Cannot be null. /// New SessionId string. internal static void SetNewSessionId(RequestContext/*!*/request_context, string session_id) { Debug.Assert(request_context != null); // currently this method does not work properly with ASP.NET handler, because // there is already created InProcDataStore associated with old SessionId, // this old SessionId is saved in private field SessionStateModule._rqId (and others) // and an attempt to store the data at the end of the request by ASP runtime with // new SessionId will silently fail (probably). // // Need to implement own SessionStateModule ? //Debug.Assert(request_context.ScriptContext.Config.Session.Handler.Name != AspNetSessionHandler.Default.Name); // NOTE: // When using ASP.NET session handler, following process drops all the session data // created during this request ... so next request starts with all new session state. if (!Manager.Validate(session_id)) throw new ArgumentException(null, "session_id"); var session = request_context.HttpContext.Session; //var x = HttpRuntime.CacheInternal.Get("j" + session.SessionID); // drop previous HttpContext.Session System.Web.SessionState.SessionStateUtility.RemoveHttpSessionStateFromContext( request_context.HttpContext); // assign new HttpContext.Session System.Web.SessionState.SessionStateUtility.AddHttpSessionStateToContext( request_context.HttpContext, new System.Web.SessionState.HttpSessionStateContainer( session_id, CloneSessionStateCollection(session), // in PHP, session variables are not cleaned when new SessionId has been set session.StaticObjects,// new HttpStaticObjectsCollection(), session.Timeout, true, session.CookieMode, session.Mode, false) ); // save session id cookie, update SID //request_context.HttpContext.Response.Cookies[] SessionId.Manager.RemoveSessionID(request_context.HttpContext); bool redirected, cookieAdded; SessionId.Manager.SaveSessionID(request_context.HttpContext, session_id, out redirected, out cookieAdded); // set new SID constant request_context.UpdateSID(); } private static ISessionStateItemCollection CloneSessionStateCollection(HttpSessionState session) { var collection = new System.Web.SessionState.SessionStateItemCollection(); for (int i = 0; i < session.Count; ++i) collection[session.Keys[i]] = session[i]; return collection; } } #endregion #region session_start, session_destroy, session_write_close, session_commit /// /// Starts session. Loads session variables to $_SESSION and optionally to $GLOBALS arrays. /// /// true on success. /// Web server variables are not available (Warning). [ImplementsFunction("session_start")] public static bool Start() { RequestContext request_context; if (!Web.EnsureRequestContext(out request_context)) return false; request_context.StartSession(); return true; } /// /// Closes session and deletes all the data associated with it. /// /// true on success. [ImplementsFunction("session_destroy")] public static bool Destroy() { RequestContext request_context; if (!Web.EnsureRequestContext(out request_context)) return false; request_context.EndSession(true); return true; } /// /// Persists session data and closes the session. See for details. /// No value is returned. /// [ImplementsFunction("session_write_close")] public static void WriteClose() { Commit(); } /// /// Persists session data and closes the session. /// [ImplementsFunction("session_commit")] public static void Commit() { RequestContext request_context; if (!Web.EnsureRequestContext(out request_context)) return; request_context.EndSession(false); } #endregion #region session_register, session_is_registered, session_unregister, session_unset [ImplementsFunction("session_register")] public static bool RegisterVariable(params object[] names) { if (names == null) { PhpException.ArgumentNull("names"); return false; } RequestContext request_context; if (!Web.EnsureRequestContext(out request_context)) return false; // starts session if not started yet: if (request_context.SessionState == SessionStates.Closed) request_context.StartSession(); ScriptContext context = request_context.ScriptContext; // gets $GLOBALS array if exists: PhpArray globals = context.GlobalVariables; // gets $_SESSION array (creates a new one if not exists): PhpArray session = context.SessionVariables; PhpReference reference; bool result = true; // sets $_SESSION items using $GLOBALS array: for (int i = 0; i < names.Length; i++) { string name; PhpArray array; if ((array = names[i] as PhpArray) != null) { // recursively searches for string variable names: using (PhpHashtable.RecursiveEnumerator iterator = array.GetRecursiveEnumerator(false, true)) { while (iterator.MoveNext()) { name = PHP.Core.Convert.ObjectToString(iterator.Current.Value); reference = globals.GetArrayItemRef(iterator.Current.Value); // skips resources: if (!(reference.value is PhpResource)) session[name] = reference; else result = false; } } } else { name = PHP.Core.Convert.ObjectToString(names[i]); reference = globals.GetArrayItemRef(names[i]); // skips resources: if (!(reference.value is PhpResource)) session[name] = reference; else result = false; } } return result; } [ImplementsFunction("session_is_registered")] public static bool IsVariableRegistered(string sessionName) { PhpArray session = PhpReference.AsPhpArray(ScriptContext.CurrentContext.AutoGlobals.Session); return (session != null) && session.ContainsKey(sessionName); } [ImplementsFunction("session_unregister")] public static bool UnregisterVariable(string name) { PhpArray session = PhpReference.AsPhpArray(ScriptContext.CurrentContext.AutoGlobals.Session); if (session == null) return false; bool result = session.ContainsKey(name); session.Remove(name); return result; } [ImplementsFunction("session_unset")] public static void UnsetVariable() { PhpArray session = PhpReference.AsPhpArray(ScriptContext.CurrentContext.AutoGlobals.Session); if (session != null) session.Clear(); } #endregion #region session_cache_expire, session_cache_limiter /// /// Gets a session cache expiration timeout. /// /// The timeout in minutes. [ImplementsFunction("session_cache_expire")] public static int CacheExpire() { HttpContext http_context; if (!Web.EnsureHttpContext(out http_context)) return 0; return http_context.Response.Expires; } /// /// Sets a session cache expiration timeout. /// /// A new value (in minutes). /// An old value (in minutes). /// is not positive. (Warning) [ImplementsFunction("session_cache_expire")] public static int CacheExpire(int newValue) { HttpContext http_context; if (!Web.EnsureHttpContext(out http_context)) return 0; int result = http_context.Response.Expires; if (newValue > 0) { http_context.Response.Expires = newValue; } else { PhpException.InvalidArgument("newValue", LibResources.GetString("arg:negative_or_zero")); } return result; } /// /// Gets a current value of cache control limiter. /// /// The cache control limiter ("private", "public", "no-cache"). [ImplementsFunction("session_cache_limiter")] public static string CacheLimiter() { return CacheLimiter(null); } /// /// Sets cache control limiter. /// /// /// A new value - should be one of "private", "private_no_expire", "public", "nocache", or "no-cache". /// Letter case is ignored. In PHP the value can contain other colon-separated values. /// /// An old value ("private", "public", or "no-cache"). /// Sets the headers according to the http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html . /// has invalid value. (Notice) [ImplementsFunction("session_cache_limiter")] public static string CacheLimiter(string newLimiter) { HttpContext http_context; if (!Web.EnsureHttpContext(out http_context)) return null; string result = ScriptContext.CurrentContext.Headers["cache-control"] ?? "public"; if (!string.IsNullOrEmpty(newLimiter)) { PHP.Core.HttpHeaders.CacheLimiter( http_context.Response, newLimiter, limiter => PhpException.Throw(PhpError.Notice, LibResources.GetString("invalid_cache_limiter", limiter)) ); } return result; } #endregion #region session_save_path, session_name, session_id, session_regenerate_id /// /// Gets a path where sessions are stored. /// [ImplementsFunction("session_save_path")] public static string SavePath() { HttpContext context; if (!Web.EnsureHttpContext(out context)) return null; return LibraryConfiguration.Local.Session.SavePath; } /// /// Sets a path where sessions are stored (see 'session.save_path' configuration option). /// /// The new path to set. /// A previous value of the path. [ImplementsFunction("session_save_path")] public static string SavePath(string newPath) { HttpContext context; if (!Web.EnsureHttpContext(out context)) return null; string result = LibraryConfiguration.Local.Session.SavePath; LibraryConfiguration.Local.Session.SavePath = newPath; return result; } /// /// Gets the current session name. /// /// A session name ("ASP.NET_SessionId"). [ImplementsFunction("session_name")] public static string Name() { return Name(null); } /// /// Sets the current session name. /// /// A new name. /// An old name. [ImplementsFunction("session_name")] public static string Name(string newName) { RequestContext request_context; if (!Web.EnsureRequestContext(out request_context)) return null; var/*!*/handler = request_context.ScriptContext.Config.Session.Handler; Debug.Assert(handler != null); var oldName = handler.GetSessionName(request_context); if (newName != null) { handler.SetSessionName(request_context, newName); } return oldName; } /// /// Gets the current session id. /// /// The session id. [ImplementsFunction("session_id")] public static string Id() { RequestContext request_context; if (!Web.EnsureRequestContext(out request_context)) return null; // in Phalanger: // id is returned only if sessions are active return (request_context.SessionState == SessionStates.Started) ? request_context.HttpContext.Session.SessionID : String.Empty; // in PHP: // id is initially "" // session_id() returns current SessionId even if session was not started yet // id is cleared after destroying the session // return request_context.HttpContext.Session.SessionID; } /// /// Changes session id. /// /// A new id value. /// A session id. [ImplementsFunction("session_id")] public static string Id(string id) { string oldId = Id(); if (!string.IsNullOrEmpty(id)) { RequestContext request_context; if (!Web.EnsureRequestContext(out request_context)) return null; // writes up new session id SessionId.SetNewSessionId(request_context, id); // if (!request_context.ScriptContext.Config.Session.Handler.AllowsSessionIdChange) { // ASP.NET session id change causes session data to be lost: PhpException.Throw(PhpError.Notice, Strings.aspnet_sessionhandler_id_reset); } } return oldId; } /// /// Update the current session id with a newly generated one. /// /// Returns TRUE on success or FALSE on failure. [ImplementsFunction("session_regenerate_id")] public static bool RegenerateId() { return RegenerateId(false); } /// /// Update the current session id with a newly generated one. /// /// Whether to delete the old associated session file or not. /// Returns TRUE on success or FALSE on failure. [ImplementsFunction("session_regenerate_id")] public static bool RegenerateId(bool delete_old_session) { RequestContext request_context; if (!Web.EnsureRequestContext(out request_context)) return false; if (request_context.SessionState != SessionStates.Started) return false; if (delete_old_session) { // TODO: delete old session file } // regenerate SessionID string session_id = SessionId.Manager.CreateSessionID(request_context.HttpContext/*not used*/); SessionId.SetNewSessionId(request_context, session_id); if (!request_context.ScriptContext.Config.Session.Handler.AllowsSessionIdChange) { // ASP.NET session id change causes session data to be lost: PhpException.Throw(PhpError.Notice, Strings.aspnet_sessionhandler_id_reset); } return true; } #endregion #region session_decode, session_encode /// /// Deserializes data serialized by PHP session serializer and registers them into the $_SESSION /// and $GLOBAL (if register globals configuration option is on) variables. /// /// A string of bytes to deserialize. /// Whether deserialization was successful. /// Out of HTTP server context (Warning). /// Session doesn't not exist (Notice). /// Deserialization failed (Notice). [ImplementsFunction("session_decode")] public static bool DecodeVariables(PhpBytes data) { RequestContext request_context; if (!Web.EnsureRequestContext(out request_context)) return false; if (!request_context.SessionExists) { PhpException.Throw(PhpError.Notice, LibResources.GetString("session_not_exists")); return false; } ScriptContext context = request_context.ScriptContext; LibraryConfiguration config = LibraryConfiguration.GetLocal(context); GlobalConfiguration global = Configuration.Global; PhpReference php_ref = config.Session.Serializer.Deserialize(data, UnknownTypeDesc.Singleton); if (php_ref == null) return false; context.AutoGlobals.Session = php_ref; // copies session variables to $GLOBALS array if necessary: if (global.GlobalVariables.RegisterGlobals) context.RegisterSessionGlobals(); return true; } /// /// Serializes session variables. /// /// /// Session variables serialized by the current session serializer. /// Returns a null reference on failure. /// /// Out of HTTP server context (Warning). /// Session doesn't not exist (Notice). /// Serialization failed (Notice). [ImplementsFunction("session_encode")] public static PhpBytes EncodeVariables() { RequestContext request_context; if (!Web.EnsureRequestContext(out request_context)) return null; if (!request_context.SessionExists) { PhpException.Throw(PhpError.Notice, LibResources.GetString("session_not_exists")); return null; } ScriptContext context = request_context.ScriptContext; LibraryConfiguration config = LibraryConfiguration.GetLocal(context); return config.Session.Serializer.Serialize(PhpReference.AsPhpArray(context.AutoGlobals.Session), UnknownTypeDesc.Singleton); } #endregion #region session_get_cookie_params, session_set_cookie_params /// /// Gets the cookie created for the session by ASP.NET server. /// private static bool GetCookie(out HttpCookie cookie, out RequestContext context) { if (!Web.EnsureRequestContext(out context)) { context = null; cookie = null; return false; } cookie = AspNetSessionHandler.GetCookie(context.HttpContext); return cookie != null; } /// /// Get the session cookie parameters. /// [ImplementsFunction("session_get_cookie_params")] public static PhpArray GetCookieParameters() { RequestContext context; HttpCookie cookie; if (!GetCookie(out cookie, out context)) return null; PhpArray result = new PhpArray(0, 4); result.Add("secure", cookie.Secure); result.Add("domain", cookie.Domain); result.Add("path", cookie.Path); result.Add("lifetime", context.SessionCookieLifetime); return result; } /// /// Set the session cookie parameters. /// [ImplementsFunction("session_set_cookie_params")] public static void SetCookieParameters(int lifetime) { RequestContext context; HttpCookie cookie; if (!GetCookie(out cookie, out context)) return; context.SessionCookieLifetime = lifetime; } /// /// Set the session cookie parameters. /// [ImplementsFunction("session_set_cookie_params")] public static void SetCookieParameters(int lifetime, string path) { RequestContext context; HttpCookie cookie; if (!GetCookie(out cookie, out context)) return; context.SessionCookieLifetime = lifetime; cookie.Path = path; } /// /// Set the session cookie parameters. /// [ImplementsFunction("session_set_cookie_params")] public static void SetCookieParameters(int lifetime, string path, string domain) { SetCookieParameters(lifetime, path, domain, false, false); } /// /// Set the session cookie parameters. /// [ImplementsFunction("session_set_cookie_params")] public static void SetCookieParameters(int lifetime, string path, string domain, bool secure) { SetCookieParameters(lifetime, path, domain, secure, false); } /// /// Set the session cookie parameters. /// [ImplementsFunction("session_set_cookie_params")] public static void SetCookieParameters(int lifetime, string path, string domain, bool secure, bool httponly) { RequestContext context; HttpCookie cookie; if (!GetCookie(out cookie, out context)) return; context.SessionCookieLifetime = lifetime; cookie.Path = path; cookie.Domain = domain; cookie.Secure = secure; cookie.HttpOnly = httponly; } #endregion #region session_set_save_handler, session_module_name /// /// Sets handlers for session managing. /// /// /// Only those callbacks which are non-null are set others are left their previous values. /// If any non-null callback binding fails none are set. /// /// Whether all non-null callbacks were successfully set. /// Web server is not available (Warning). [ImplementsFunction("session_set_save_handler", FunctionImplOptions.NeedsClassContext)] public static bool SetHandlers( PHP.Core.Reflection.DTypeDesc caller, PhpCallback open, PhpCallback close, PhpCallback read, PhpCallback write, PhpCallback destroy, PhpCallback gc) { if (!Web.EnsureHttpContext()) return false; // binds all non-null callbacks (reports all errors due to bitwise or): if (!PhpArgument.CheckCallback(open, caller, "open", 0, true) | !PhpArgument.CheckCallback(close, caller, "close", 0, true) | !PhpArgument.CheckCallback(read, caller, "read", 0, true) | !PhpArgument.CheckCallback(write, caller, "write", 0, true) | !PhpArgument.CheckCallback(destroy, caller, "destroy", 0, true) | !PhpArgument.CheckCallback(gc, caller, "gc", 0, true)) { return false; } PhpUserSessionHandler.Handlers handlers = PhpUserSessionHandler.Handlers.Current; // sets current handlers: if (open != null) handlers.Open = open; if (close != null) handlers.Close = close; if (read != null) handlers.Read = read; if (write != null) handlers.Write = write; if (destroy != null) handlers.Destroy = destroy; if (gc != null) handlers.Collect = gc; Configuration.Local.Session.Handler = PhpUserSessionHandler.Default; return true; } /// /// Gets the current session handler name. /// /// The name of the current session handler. /// Web server is not available (Warning). [ImplementsFunction("session_module_name")] public static string HandlerName() { if (!Web.EnsureHttpContext()) return null; return Configuration.Local.Session.Handler.Name; } /// /// Sets the current session module. /// /// A name of the new handler. /// The name of the current session handler. /// Web server is not available (Warning). /// is a null reference. [ImplementsFunction("session_module_name")] public static string HandlerName(string name) { if (!Web.EnsureHttpContext()) return null; if (name == null) { PhpException.ArgumentNull("name"); return Configuration.Local.Session.Handler.Name; } return (string)GsrHandler(Configuration.Local, null, name, IniAction.Set); } #endregion } } ================================================ FILE: Source/ClassLibrary/Shell.CLR.cs ================================================ /* Copyright (c) 2004-2006 Tomas Matousek. The use and distribution terms for this software are contained in the file named License.txt, which can be found in the root of the Phalanger distribution. By using this software in any fashion, you are agreeing to be bound by the terms of this license. You must not remove this notice from this software. */ using System; using System.Web; using System.Text; using System.ComponentModel; using PHP.Core; using System.Diagnostics; namespace PHP.Library { /// /// Implements program execution functions defined by PHP. /// /// public static class Shell { #region getenv, putenv /// /// Gets a value of an environment variable associated with a current process. /// /// A name of the variable. /// Current value of the variable. [ImplementsFunction("getenv")] [return: CastToFalse] public static string GetEnvironmentVariable(string name) { if (string.IsNullOrEmpty(name)) return null; var servervar = ScriptContext.CurrentContext.AutoGlobals.Server.Value as PhpArray; if (servervar != null) { object value; if (servervar.TryGetValue(name, out value)) return PHP.Core.Convert.ObjectToString(PhpVariable.Dereference(value)); } return Environment.GetEnvironmentVariable(name); } /// /// Sets an environment variable of the current process. /// /// String in format "{name}={value}". [ImplementsFunction("putenv")] public static bool SetEnvironmentVariable(string setting) { if (HttpContext.Current != null) { PhpException.Throw(PhpError.Warning, LibResources.GetString("function_disallowed_in_web_context")); return false; } if (String.IsNullOrEmpty(setting)) { PhpException.InvalidArgument("setting", LibResources.GetString("arg:null_or_empty")); return false; } int separator_pos = setting.IndexOf('='); if (separator_pos == -1) { PhpException.Throw(PhpError.Warning, LibResources.GetString("arg:invalid_value", "setting", setting)); return false; } string name = setting.Substring(0, separator_pos); string value = setting.Substring(separator_pos + 1); try { Environment.SetEnvironmentVariable(name, value); } catch (Exception e) { PhpException.Throw(PhpError.Warning, e.Message); return false; } return true; } #endregion #region escapeshellarg, escapeshellcmd /// /// Escapes argument to be passed to shell command. /// /// The argument to excape. /// /// /// On Windows platform, each occurance of double quote (") and ampersand (&) /// is replaced with a single space. The resulting string is then put into double quotes. /// /// /// On Unix platform, each occurance of single quote (') /// is replaced with characters '\'''. The resulting string is then put into single quotes. /// /// [ImplementsFunction("escapeshellarg")] public static string EscapeShellArg(string arg) { if (arg == null || arg.Length == 0) return String.Empty; StringBuilder sb; if (Environment.OSVersion.Platform != PlatformID.Unix) { sb = new StringBuilder(arg.Length + 2); sb.Append(' '); sb.Append(arg); sb.Replace('"', ' '); sb.Replace('%', ' '); sb.Append('"'); sb[0] = '\''; } else { sb = new StringBuilder(arg.Length + 2); sb.Append(' '); sb.Append(arg); sb.Replace("'", @"'\''"); sb.Append('\''); sb[0] = '\''; } return sb.ToString(); } /// /// Escape shell metacharacters in a specified shell command. /// /// The command to excape. /// /// On Windows platform, each occurance of a character that might be used to trick a shell command /// is replaced with space. These characters are /// ", ', #, &, ;, `, |, *, ?, ~, <, >, ^, (, ), [, ], {, }, $, \, \u000A, \u00FF, %. /// [ImplementsFunction("escapeshellcmd")] public static string EscapeShellCmd(string command) { return Execution.EscapeCommand(command); } #endregion #region exec /// /// Executes a shell command. /// /// The command to execute. /// The last line of the output. [ImplementsFunction("exec")] public static string Exec(string command) { string result; Execution.ShellExec(command, Execution.OutputHandling.ArrayOfLines, null, out result); return Core.Convert.Quote(result, ScriptContext.CurrentContext); } /// /// Executes a shell command. /// /// The command to execute. /// An array where to add items of output. One item per each line of the output. /// The last line of the output. [ImplementsFunction("exec")] public static string Exec(string command, ref PhpArray output) { int exit_code; return Exec(command, ref output, out exit_code); } /// /// Executes a shell command. /// /// The command to execute. /// An array where to add items of output. One item per each line of the output. /// Exit code of the process. /// The last line of the output. [ImplementsFunction("exec")] public static string Exec(string command, ref PhpArray output, out int exitCode) { // creates a new array if user specified variable not containing one: if (output == null) output = new PhpArray(); string result; exitCode = Execution.ShellExec(command, Execution.OutputHandling.ArrayOfLines, output, out result); return Core.Convert.Quote(result, ScriptContext.CurrentContext); } #endregion #region pasthru /// /// Executes a command and writes raw output to the output sink set on the current script context. /// /// The command. [ImplementsFunction("passthru")] public static void PassThru(string command) { string dummy; Execution.ShellExec(command, Execution.OutputHandling.RedirectToScriptOutput, null, out dummy); } /// /// Executes a command and writes raw output to the output sink set on the current script context. /// /// The command. /// An exit code of the process. [ImplementsFunction("passthru")] public static void PassThru(string command, out int exitCode) { string dummy; exitCode = Execution.ShellExec(command, Execution.OutputHandling.RedirectToScriptOutput, null, out dummy); } #endregion #region system /// /// Executes a command and writes output line by line to the output sink set on the current script context. /// Flushes output after each written line. /// /// The command. /// /// Either the last line of the output or a null reference if the command fails (returns non-zero exit code). /// [ImplementsFunction("system")] [return: CastToFalse] public static string System(string command) { int exit_code; return System(command, out exit_code); } /// /// Executes a command and writes output line by line to the output sink set on the current script context. /// Flushes output after each written line. /// /// The command. /// An exit code of the process. /// /// Either the last line of the output or a null reference if the command fails (returns non-zero exit code). /// [ImplementsFunction("system")] [return: CastToFalse] public static string System(string command, out int exitCode) { string result; exitCode = Execution.ShellExec(command, Execution.OutputHandling.FlushLinesToScriptOutput, null, out result); return (exitCode == 0) ? result : null; } #endregion #region shell_exec [ImplementsFunction("shell_exec")] public static string ShellExec(string command) { string result; Execution.ShellExec(command, Execution.OutputHandling.String, null, out result); return result; } #endregion #region getopt [ImplementsFunction("getopt")] [return: CastToFalse] public static PhpArray GetOptions(string options) { return GetOptions(options, null); } /// /// Gets options from the command line argument list. /// /// Each character in this string will be used as option characters and matched against options passed to the script starting with a single hyphen (-). For example, an option string "x" recognizes an option -x. Only a-z, A-Z and 0-9 are allowed. /// An array of options. Each element in this array will be used as option strings and matched against options passed to the script starting with two hyphens (--). For example, an longopts element "opt" recognizes an option --opt. /// This function will return an array of option / argument pairs or FALSE on failure. [ImplementsFunction("getopt")] [return:CastToFalse] public static PhpArray GetOptions(string options, PhpArray longopts) { var args = Environment.GetCommandLineArgs(); PhpArray result = new PhpArray(); // process single char options if (options != null) for (int i = 0; i < options.Length; ++i ) { char opt = options[i]; if (!char.IsLetterOrDigit(opt)) break; int ncolons = 0; if (i+1 0) { bool eq = (value[0] == '='); // '=' follows if (longOpt && !eq)continue; // long options can have value only after = if (eq) value = value.Substring(1); // remove the '=' char return value; // value resolved (optional or required) } if (valueOptional) return false; // value required if (a + 1 >= args.Length) return null; // missing value return args[a + 1]; } } // not found return null; } #endregion } } ================================================ FILE: Source/ClassLibrary/Streams.Sockets.CLR.cs ================================================ /* Copyright (c) 2004-2006 Tomas Matousek and Jan Benda. The use and distribution terms for this software are contained in the file named License.txt, which can be found in the root of the Phalanger distribution. By using this software in any fashion, you are agreeing to be bound by the terms of this license. You must not remove this notice from this software. */ /* TODO: - implement all functions - Added (PHP 5.1.0): stream_socket_enable_crypto() */ using System; using System.IO; using System.Text; using System.Net; using System.Net.Sockets; using System.Collections; using System.Threading; using PHP.Core; namespace PHP.Library { /// /// Gives access to various network-based stream properties. /// /// public static class StreamSocket { #region Enums /// /// Options used for . /// public enum SocketOptions { /// /// Default option. /// [ImplementsConstant("STREAM_CLIENT_CONNECT")] None = 0, /// /// Client socket opened with stream_socket_client should remain persistent /// between page loads. /// [ImplementsConstant("STREAM_CLIENT_PERSISTENT")] Persistent = 1, /// /// Open client socket asynchronously. /// [ImplementsConstant("STREAM_CLIENT_ASYNC_CONNECT")] Asynchronous = 2 } public enum _AddressFamily { [ImplementsConstant("STREAM_PF_INET")] InterNetwork = AddressFamily.InterNetwork, [ImplementsConstant("STREAM_PF_INET6")] InterNetworkV6 = AddressFamily.InterNetworkV6, [ImplementsConstant("STREAM_PF_UNIX")] Unix = AddressFamily.Unix } public enum _SocketType { Unknown = SocketType.Unknown, [ImplementsConstant("STREAM_SOCK_STREAM")] Stream = SocketType.Stream, [ImplementsConstant("STREAM_SOCK_DGRAM")] Dgram = SocketType.Dgram, [ImplementsConstant("STREAM_SOCK_RAW")] Raw = SocketType.Raw, [ImplementsConstant("STREAM_SOCK_RDM")] Rdm = SocketType.Rdm, [ImplementsConstant("STREAM_SOCK_SEQPACKET")] Seqpacket = SocketType.Seqpacket, } public enum _ProtocolType { [ImplementsConstant("STREAM_IPPROTO_IP")] IP = ProtocolType.IP, [ImplementsConstant("STREAM_IPPROTO_ICMP")] Icmp = ProtocolType.Icmp, [ImplementsConstant("STREAM_IPPROTO_TCP")] Tcp = ProtocolType.Tcp, [ImplementsConstant("STREAM_IPPROTO_UDP")] Udp = ProtocolType.Udp, [ImplementsConstant("STREAM_IPPROTO_RAW")] Raw = ProtocolType.Raw } public enum SendReceiveOptions { None = 0, [ImplementsConstant("STREAM_OOB")] OutOfBand = 1, [ImplementsConstant("STREAM_PEEK")] Peek = 2 } #endregion #region TODO: stream_get_transports, stream_socket_get_name /// Retrieve list of registered socket transports [ImplementsFunction("stream_get_transports", FunctionImplOptions.NotSupported)] public static PhpArray GetTransports() { PhpException.FunctionNotSupported(); return null; } /// /// Retrieve the name of the local or remote sockets. /// [ImplementsFunction("stream_socket_get_name", FunctionImplOptions.NotSupported)] public static string SocketGetName(PhpResource handle, bool wantPeer) { PhpException.FunctionNotSupported(); return null; } #endregion #region TODO: stream_socket_client //private static void SplitSocketAddressPort(ref string socket, out int port) //{ // port = 0; // String[] arr = socket.Split(new[] {':'}, 2, StringSplitOptions.RemoveEmptyEntries); // if (arr.Length == 2) // { // socket = arr[0]; // port = int.Parse(arr[1]); // } //} /// /// Open client socket. /// [ImplementsFunction("stream_socket_client")] public static PhpResource ConnectClient(string remoteSocket) { int errno; string errstr; int port = 0; //SplitSocketAddressPort(ref remoteSocket, out port); return Connect(remoteSocket, port, out errno, out errstr, Double.NaN, SocketOptions.None, StreamContext.Default); } /// /// Open client socket. /// [ImplementsFunction("stream_socket_client")] public static PhpResource ConnectClient(string remoteSocket, out int errno) { string errstr; int port = 0; //SplitSocketAddressPort(ref remoteSocket, out port); return Connect(remoteSocket, port, out errno, out errstr, Double.NaN, SocketOptions.None, StreamContext.Default); } /// /// Open client socket. /// [ImplementsFunction("stream_socket_client")] public static PhpResource ConnectClient(string remoteSocket, out int errno, out string errstr) { int port = 0; //SplitSocketAddressPort(ref remoteSocket, out port); return Connect(remoteSocket, port, out errno, out errstr, Double.NaN, SocketOptions.None, StreamContext.Default); } /// /// Open client socket. /// [ImplementsFunction("stream_socket_client")] public static PhpResource ConnectClient(string remoteSocket, out int errno, out string errstr, double timeout) { int port = 0; //SplitSocketAddressPort(ref remoteSocket, out port); return Connect(remoteSocket, port, out errno, out errstr, timeout, SocketOptions.None, StreamContext.Default); } /// /// Open client socket. /// [ImplementsFunction("stream_socket_client")] public static PhpResource ConnectClient(string remoteSocket, out int errno, out string errstr, double timeout, SocketOptions flags) { int port = 0; //SplitSocketAddressPort(ref remoteSocket, out port); return Connect(remoteSocket, port, out errno, out errstr, timeout, flags, StreamContext.Default); } /// /// Open client socket. /// [ImplementsFunction("stream_socket_client")] public static PhpResource ConnectClient(string remoteSocket, out int errno, out string errstr, double timeout, SocketOptions flags, PhpResource context) { StreamContext sc = StreamContext.GetValid(context); if (sc == null) { errno = -1; errstr = null; return null; } int port = 0; //SplitSocketAddressPort(ref remoteSocket, out port); return Connect(remoteSocket, port, out errno, out errstr, timeout, flags, sc); } #endregion #region TODO: stream_socket_server /// /// Open client socket. /// [ImplementsFunction("stream_socket_server")] public static PhpResource ConnectServer(string localSocket) { int errno; string errstr; int port = 0; //SplitSocketAddressPort(ref localSocket, out port); return Connect(localSocket, port, out errno, out errstr, Double.NaN, SocketOptions.None, StreamContext.Default); } /// /// Open client socket. /// [ImplementsFunction("stream_socket_server")] public static PhpResource ConnectServer(string localSocket, out int errno) { string errstr; int port = 0; //SplitSocketAddressPort(ref localSocket, out port); return Connect(localSocket, port, out errno, out errstr, Double.NaN, SocketOptions.None, StreamContext.Default); } /// /// Open client socket. /// [ImplementsFunction("stream_socket_server")] public static PhpResource ConnectServer(string localSocket, out int errno, out string errstr) { int port = 0; //SplitSocketAddressPort(ref localSocket, out port); return Connect(localSocket, port, out errno, out errstr, Double.NaN, SocketOptions.None, StreamContext.Default); } /// /// Open client socket. /// [ImplementsFunction("stream_socket_server")] public static PhpResource ConnectServer(string localSocket, out int errno, out string errstr, double timeout) { int port = 0; //SplitSocketAddressPort(ref localSocket, out port); return Connect(localSocket, port, out errno, out errstr, timeout, SocketOptions.None, StreamContext.Default); } /// /// Open client socket. /// [ImplementsFunction("stream_socket_server")] public static PhpResource ConnectServer(string localSocket, out int errno, out string errstr, double timeout, SocketOptions flags) { int port = 0; //SplitSocketAddressPort(ref localSocket, out port); return Connect(localSocket, port, out errno, out errstr, timeout, flags, StreamContext.Default); } /// /// Open client socket. /// [ImplementsFunction("stream_socket_server")] public static PhpResource ConnectServer(string localSocket, out int errno, out string errstr, double timeout, SocketOptions flags, PhpResource context) { StreamContext sc = StreamContext.GetValid(context); if (sc == null) { errno = -1; errstr = null; return null; } int port = 0; //SplitSocketAddressPort(ref localSocket, out port); return Connect(localSocket, port, out errno, out errstr, timeout, flags, sc); } #endregion #region TODO: stream_socket_accept /// /// Accepts a connection on a server socket. /// [ImplementsFunction("stream_socket_accept", FunctionImplOptions.NotSupported)] public static bool Accept(PhpResource serverSocket) { string peerName; return Accept(serverSocket, Configuration.Local.FileSystem.DefaultSocketTimeout, out peerName); } /// /// Accepts a connection on a server socket. /// [ImplementsFunction("stream_socket_accept", FunctionImplOptions.NotSupported)] public static bool Accept(PhpResource serverSocket, int timeout) { string peerName; return Accept(serverSocket, timeout, out peerName); } /// /// Accepts a connection on a server socket. /// [ImplementsFunction("stream_socket_accept", FunctionImplOptions.NotSupported)] public static bool Accept(PhpResource serverSocket, int timeout, out string peerName) { peerName = ""; SocketStream stream = SocketStream.GetValid(serverSocket); if (stream == null) return false; PhpException.FunctionNotSupported(); return false; } #endregion #region TODO: stream_socket_recvfrom [ImplementsFunction("stream_socket_recvfrom", FunctionImplOptions.NotSupported)] public static string ReceiveFrom(PhpResource socket, int length) { string address; return ReceiveFrom(socket, length, SendReceiveOptions.None, out address); } [ImplementsFunction("stream_socket_recvfrom", FunctionImplOptions.NotSupported)] public static string ReceiveFrom(PhpResource socket, int length, SendReceiveOptions flags) { string address; return ReceiveFrom(socket, length, flags, out address); } [ImplementsFunction("stream_socket_recvfrom", FunctionImplOptions.NotSupported)] public static string ReceiveFrom(PhpResource socket, int length, SendReceiveOptions flags, out string address) { address = null; SocketStream stream = SocketStream.GetValid(socket); if (stream == null) return null; PhpException.FunctionNotSupported(); return null; } #endregion #region TODO: stream_socket_sendto [ImplementsFunction("stream_socket_sendto", FunctionImplOptions.NotSupported)] public static int SendTo(PhpResource socket, string data) { return SendTo(socket, data, SendReceiveOptions.None, null); } [ImplementsFunction("stream_socket_sendto", FunctionImplOptions.NotSupported)] public static int SendTo(PhpResource socket, string data, SendReceiveOptions flags) { return SendTo(socket, data, flags, null); } [ImplementsFunction("stream_socket_sendto", FunctionImplOptions.NotSupported)] public static int SendTo(PhpResource socket, string data, SendReceiveOptions flags, string address) { SocketStream stream = SocketStream.GetValid(socket); if (stream == null) return -1; PhpException.FunctionNotSupported(); return -1; } #endregion #region TODO: stream_socket_pair //[ImplementsFunction("stream_socket_pair", FunctionImplOptions.NotSupported)] public static PhpArray CreatePair(ProtocolFamily protocolFamily, SocketType type, ProtocolType protocol) { PhpException.FunctionNotSupported(); return null; } #endregion #region Connect /// /// Opens a new SocketStream /// internal static SocketStream Connect(string remoteSocket, int port, out int errno, out string errstr, double timeout, SocketOptions flags, StreamContext/*!*/ context) { errno = 0; errstr = null; if (remoteSocket == null) { PhpException.ArgumentNull("remoteSocket"); return null; } // TODO: extract schema (tcp://, udp://) and port from remoteSocket // Uri uri = Uri.TryCreate(remoteSocket); ProtocolType protocol = ProtocolType.Tcp; if (remoteSocket.Contains("://")) { String[] separator = { "://" }; String[] socketParts = remoteSocket.Split(separator, 2, StringSplitOptions.None); switch (socketParts[0]) { case "udp": protocol = ProtocolType.Udp; break; case "tcp": default: protocol = ProtocolType.Tcp; break; } remoteSocket = socketParts[1]; } if (remoteSocket.Contains(":")) { Char[] separator = { ':' }; String[] socketParts = remoteSocket.Split(separator, 2, StringSplitOptions.None); remoteSocket = socketParts[0]; int result = 0; if (socketParts[1] != "" && int.TryParse(socketParts[1], out result) && (0 < result && result < 65536)) { port = result; } } if (Double.IsNaN(timeout)) timeout = Configuration.Local.FileSystem.DefaultSocketTimeout; // TODO: if (flags != SocketOptions.None && flags != SocketOptions.Asynchronous) PhpException.ArgumentValueNotSupported("flags", (int)flags); try { // workitem 299181; for remoteSocket as IPv4 address it results in IPv6 address //IPAddress address = System.Net.Dns.GetHostEntry(remoteSocket).AddressList[0]; IPAddress address; if (!IPAddress.TryParse(remoteSocket, out address)) // if remoteSocket is not a valid IP address then lookup the DNS address = System.Net.Dns.GetHostEntry(remoteSocket).AddressList[0]; Socket socket = new Socket(address.AddressFamily, SocketType.Stream, protocol); IAsyncResult res = socket.BeginConnect( new IPEndPoint(address, port), new AsyncCallback(StreamSocket.ConnectResultCallback), socket); int msec = 0; while (!res.IsCompleted) { Thread.Sleep(100); msec += 100; if (msec / 1000.0 > timeout) { PhpException.Throw(PhpError.Warning, LibResources.GetString("socket_open_timeout", FileSystemUtils.StripPassword(remoteSocket))); return null; } } socket.EndConnect(res); // socket.Connect(new IPEndPoint(address, port)); return new SocketStream(socket, remoteSocket, context, (flags & SocketOptions.Asynchronous) == SocketOptions.Asynchronous); } catch (SocketException e) { errno = e.ErrorCode; errstr = e.Message; } catch (System.Exception e) { errno = -1; errstr = e.Message; } PhpException.Throw(PhpError.Warning, LibResources.GetString("socket_open_error", FileSystemUtils.StripPassword(remoteSocket), errstr)); return null; } private static void ConnectResultCallback(IAsyncResult res) { } #endregion } } ================================================ FILE: Source/ClassLibrary/Streams.cs ================================================ /* Copyright (c) 2004-2005 Jan Benda and Tomas Matousek. The use and distribution terms for this software are contained in the file named License.txt, which can be found in the root of the Phalanger distribution. By using this software in any fashion, you are agreeing to be bound by the terms of this license. You must not remove this notice from this software. */ /* TODO: - Added offset parameter to the stream_copy_to_stream() function. (PHP 5.1.0) - Changed stream_filter_(ap|pre)pend() to return resource. (Sara) - Fixed a bug where stream_get_meta_data() did not return the "uri" element for files opened with tmpname(). (Derick) - Fixed crash inside stream_get_line() when length parameter equals 0. (Ilia) - Added (PHP 5.1.0): stream_context_get_default() (Wez) stream_wrapper_unregister() (Sara) stream_wrapper_restore() (Sara) stream_filter_remove() (Sara) - Added proxy support to ftp wrapper via http. (Sara) - Added MDTM support to ftp_url_stat. (Sara) - Added zlib stream filter support. (Sara) - Added bz2 stream filter support. (Sara) - Added bindto socket context option. (PHP 5.1.0) - Added HTTP/1.1 and chunked encoding support to http:// wrapper. (PHP 5.1.0) NOTES: PhpStream is derived from PhpResource, it contains a Stream descendant, a StreamContext (may be empty) and an ordered list of PhpFilters. PhpStream may be cast to a regular stream (using its RawStream property). PhpStream is created by a StreamWrapper on a call to fopen(). Wrappers are stateless: they provide an instance of PhpStream on fopen() and an instance of DirectoryListing on opendir(). PHP Stream functions are implemented as static methods of corresponding classes - wrappers are registered by StreamWrapper and so on. User-defined wrappers are stored in the ScriptContext. So are the user-defined filters. And finally a working directory too. EX: Notification callback: void my_notifier ( int notification_code, int severity, string message, int message_code, int bytes_transferred, int bytes_max) It is a parameter of StreamContext. */ using System; using System.Diagnostics; using System.IO; using System.Text; using System.Net; //using System.Net.Sockets; using System.Collections; using PHP.Core; using PHP.Core.Reflection; using System.Threading; namespace PHP.Library { #region Enums /// /// The "whence" options used in PhpStream.Seek(). /// public enum SeekOptions { /// Seek from the beginning of the file. [ImplementsConstant("SEEK_SET")] Set = SeekOrigin.Begin, // 0 (OK) /// Seek from the current position. [ImplementsConstant("SEEK_CUR")] Current = SeekOrigin.Current, // 1 (OK) /// Seek from the end of the file. [ImplementsConstant("SEEK_END")] End = SeekOrigin.End // 2 (OK) } /// /// Value used as an argument to flock() calls. /// Passed to streams using the /// with option set to . /// /// /// Note that not all of these are flags. Only the /// may be added to one of the first three values. /// [Flags] public enum StreamLockOptions { /// /// To acquire a shared lock (reader), set operation to LOCK_SH. /// [ImplementsConstant("LOCK_SH")] Shared = 1, /// /// To acquire an exclusive lock (writer), set operation to LOCK_EX. /// [ImplementsConstant("LOCK_EX")] Exclusive = 2, /// /// To release a lock (shared or exclusive), set operation to LOCK_UN. /// [ImplementsConstant("LOCK_UN")] Unlock = 3, /// /// If you don't want flock() to block while locking, add LOCK_NB to operation. /// [ImplementsConstant("LOCK_NB")] NoBlocking = 4 } /// /// ImplementsConstant enumeration for various PHP stream-related constants. /// [Flags] public enum PhpStreamConstants { /// Empty option (default) Empty = 0, /// If path is relative, Wrapper will search for the resource using the include_path (1). [ImplementsConstant("STREAM_USE_PATH")] UseIncludePath = StreamOptions.UseIncludePath, /// When this flag is set, only the file:// wrapper is considered. (2) [ImplementsConstant("STREAM_IGNORE_URL")] IgnoreUrl = StreamOptions.IgnoreUrl, /// Apply the safe_mode permissions check when opening a file (4). [ImplementsConstant("STREAM_ENFORCE_SAFE_MODE")] EnforceSafeMode = StreamOptions.EnforceSafeMode, /// If this flag is set, the Wrapper is responsible for raising errors using /// trigger_error() during opening of the stream. If this flag is not set, she should not raise any errors (8). [ImplementsConstant("STREAM_REPORT_ERRORS")] ReportErrors = StreamOptions.ReportErrors, /// If you don't need to write to the stream, but really need to /// be able to seek, use this flag in your options (16). [ImplementsConstant("STREAM_MUST_SEEK")] MustSeek = StreamOptions.MustSeek, /// Stat the symbolic link itself instead of the linked file (1). [ImplementsConstant("STREAM_URL_STAT_LINK")] StatLink = StreamStatOptions.Link, /// Do not complain if the file does not exist (2). [ImplementsConstant("STREAM_URL_STAT_QUIET")] StatQuiet = StreamStatOptions.Quiet, /// Create the whole path leading to the specified directory if necessary (1). [ImplementsConstant("STREAM_MKDIR_RECURSIVE")] MakeDirectoryRecursive = StreamMakeDirectoryOptions.Recursive } public enum StreamEncryption { [ImplementsConstant("STREAM_CRYPTO_METHOD_SSLv2_CLIENT")] ClientSSL2, [ImplementsConstant("STREAM_CRYPTO_METHOD_SSLv3_CLIENT")] ClientSSL3, [ImplementsConstant("STREAM_CRYPTO_METHOD_SSLv23_CLIENT")] ClientSSL23, [ImplementsConstant("STREAM_CRYPTO_METHOD_TLS_CLIENT")] ClientTSL, [ImplementsConstant("STREAM_CRYPTO_METHOD_SSLv2_SERVER")] ServerSSL2, [ImplementsConstant("STREAM_CRYPTO_METHOD_SSLv3_SERVER")] ServerSSL3, [ImplementsConstant("STREAM_CRYPTO_METHOD_SSLv23_SERVER")] ServerSSL23, [ImplementsConstant("STREAM_CRYPTO_METHOD_TLS_SERVER")] ServerTSL } #endregion #region Steam Filter functions #region Options and status /// /// The status indicators returned by filter's main method. /// public enum FilterStatus { /// /// Error in data stream (1). /// [ImplementsConstant("PSFS_ERR_FATAL")] FatalError, /// /// Filter needs more data; stop processing chain until more is available (2). /// [ImplementsConstant("PSFS_FEED_ME")] MoreData, /// /// Filter generated output buckets; pass them on to next in chain (3). /// [ImplementsConstant("PSFS_PASS_ON")] OK } /// /// Indicates whether the filter is to be attached to the /// input/ouput filter-chain or both. /// [Flags] public enum FilterChains { /// /// Insert the filter to the read filter chain of the stream (1). /// [ImplementsConstant("STREAM_FILTER_READ")] Read = FilterChainOptions.Read, /// /// Insert the filter to the write filter chain of the stream (2). /// [ImplementsConstant("STREAM_FILTER_WRITE")] Write = FilterChainOptions.Write, /// /// Insert the filter to both the filter chains of the stream (3). /// [ImplementsConstant("STREAM_FILTER_ALL")] ReadWrite = Read | Write } #endregion /// /// Gives access to the stream filter chains. /// /// public static class PhpFilters { #region stream_filter_append, stream_filter_prepend /// [ImplementsFunction("stream_filter_append")] public static bool Append(PhpResource stream, string filter) { return Append(stream, filter, (int)FilterChainOptions.ReadWrite, null); } /// /// Combination of the flags. [ImplementsFunction("stream_filter_append")] public static bool Append(PhpResource stream, string filter, int read_write) { return Append(stream, filter, read_write, null); } /// /// Combination of the flags. /// Additional parameters for a user filter. [ImplementsFunction("stream_filter_append")] public static bool Append(PhpResource stream, string filter, int read_write, object parameters) { PhpStream s = PhpStream.GetValid(stream); if (s == null) return false; FilterChainOptions where = (FilterChainOptions)read_write & FilterChainOptions.ReadWrite; return PhpFilter.AddToStream(s, filter, where | FilterChainOptions.Tail, parameters); } /// [ImplementsFunction("stream_filter_prepend")] public static bool Prepend(PhpResource stream, string filter) { return Prepend(stream, filter, (int)FilterChainOptions.ReadWrite, null); } /// /// Combination of the flags. [ImplementsFunction("stream_filter_prepend")] public static bool Prepend(PhpResource stream, string filter, int read_write) { return Prepend(stream, filter, read_write, null); } /// /// Combination of the flags. /// Additional parameters for a user filter. [ImplementsFunction("stream_filter_prepend")] public static bool Prepend(PhpResource stream, string filter, int read_write, object parameters) { PhpStream s = PhpStream.GetValid(stream); if (s == null) return false; FilterChainOptions where = (FilterChainOptions)read_write & FilterChainOptions.ReadWrite; return PhpFilter.AddToStream(s, filter, where | FilterChainOptions.Head, parameters); } #endregion #region stream_filter_register, stream_get_filters /// /// Registers a user stream filter. /// /// The name of the filter (may contain wildcards). /// The PHP user class (derived from php_user_filter) implementing the filter. /// true if the filter was succesfully added, false if the filter of such name already exists. [ImplementsFunction("stream_filter_register")] public static bool Register(string filter, string classname) { // EX: [stream_filter_register] return PhpFilter.AddUserFilter(filter, classname); } /// /// Retrieves the list of registered filters. /// /// A containing the names of available filters. [ImplementsFunction("stream_get_filters")] public static PhpArray GetFilterNames() { return PhpFilter.GetFilterNames(); } #endregion } #region Stream Filter Implementations #region String Filters /// /// Options provided to the constructor of /// to specify which string conversion to use. /// public enum StringFilterOptions { /// Use the str_rot13 function to alter the stream data. Rotate13 = 1, /// Use the strtoupper function to alter the stream data. ToUpper = 2, /// Use the strtolower function to alter the stream data. ToLower = 3, /// Use the strip_tags function with an additional allowable_tags /// argument to alter the stream data. StripTags = 4 } /// /// Encapsulates built-in "string.*" filters. See /// for the list of possible filter operations. /// /// public sealed class StringFilter : PhpFilter { /// Creates a new instance of this filter with additional parameters. public StringFilter(StringFilterOptions operation, object parameters) : base(AlterParameters(operation, parameters)) { this.operation = operation; } private static object AlterParameters(StringFilterOptions operation, object parameters) { if (operation == StringFilterOptions.StripTags) { // Convert the given tags to the format expected by strip_tags PhpArray tags = (parameters as PhpArray); if (tags != null) { StringBuilder sb = new StringBuilder(); foreach (object o in tags) { sb.Append('<'); sb.Append(Core.Convert.ObjectToString(o)); sb.Append('>'); } return sb.ToString(); } else { // The allowable_tags is expected to be a string return Core.Convert.ObjectToString(parameters); } } return parameters; } /// public override object Filter(object input, bool closing) { string str = PhpStream.AsText(input); switch (operation) { case StringFilterOptions.Rotate13: str = PhpStrings.Rotate13(str); break; case StringFilterOptions.ToUpper: str = str.ToUpper(); break; case StringFilterOptions.ToLower: str = str.ToLower(); break; case StringFilterOptions.StripTags: str = PhpStrings.StripTags(str, (string)parameters, ref stripTagsState); break; default: Debug.Assert(false); break; } return str; } /// The selected operation of this string-filter. private readonly StringFilterOptions operation; /// The stored state of the last strip_tags function call. private int stripTagsState = 0; } /// /// Factory for string stream filters. /// /// public sealed class StringFilterFactory : IFilterFactory { #region Implemented Filters Access /// /// Returns the list of filters defined by this PhpFilter. /// /// public string[] GetImplementedFilterNames() { return new string[] { "string.toupper", "string.tolower", "string.rot13", "string.strip-tags" }; } /// /// Returns a filter implementation defined by this PhpFilter. /// /// Name of the filter to look for. /// true to fill with a new instance of that filter. /// Filled with a new instance of an implemented filter if . /// Additional parameters provided to the filter constructor. /// true if a filter with the given name was found. public bool GetImplementedFilter(string name, bool instantiate, out PhpFilter instance, object parameters) { instance = null; switch (name) { case "string.toupper": if (instantiate) instance = new StringFilter(StringFilterOptions.ToUpper, parameters); return true; case "string.tolower": if (instantiate) instance = new StringFilter(StringFilterOptions.ToLower, parameters); return true; case "string.rot13": if (instantiate) instance = new StringFilter(StringFilterOptions.Rotate13, parameters); return true; case "string.strip-tags": if (instantiate) instance = new StringFilter(StringFilterOptions.StripTags, parameters); return true; } return false; } #endregion } #endregion #region Conversion Filters /// /// Options provided to the constructor of /// or to specify which conversion to use. /// public enum ConversionFilterOptions { /// Use the base-64 encoding. Base64 = 1, /// Use the quoted-printable encoding. Only decoding is implemented. QuotedPrintable = 2, } /// /// Encapsulates built-in "convert.*" filters performing the decoding /// (string to binary) conversions. See /// for the list of possible filter operations. /// /// public sealed class DecodingFilter : PhpFilter { /// Creates a new instance of this filter. public DecodingFilter(ConversionFilterOptions operation) : base(null) { this.operation = operation; } /// public override object Filter(object input, bool closing) { string str = PhpStream.AsText(input); switch (operation) { case ConversionFilterOptions.Base64: return new PhpBytes(System.Convert.FromBase64String(str)); // PHP5 supports this function with additional parameters too. case ConversionFilterOptions.QuotedPrintable: return PhpStrings.QuotedPrintableDecode(str); // PHP5 supports this function with additional parameters too. default: Debug.Assert(false); break; } return str; } /// The selected operation of this conversion filter. private readonly ConversionFilterOptions operation; } /// /// Factory for decoding stream filters. /// /// public sealed class DecodingFilterFactory : IFilterFactory { #region Implemented Filters Access /// /// Returns the list of filters defined by this PhpFilter. /// /// public string[] GetImplementedFilterNames() { return new string[] { "convert.base64-decode" // "convert.quoted-printable-decode" }; } /// /// Returns a filter implementation defined by this PhpFilter. /// /// Name of the filter to look for. /// true to fill with a new instance of that filter. /// Filled with a new instance of an implemented filter if . /// Additional parameters provided to the filter constructor. /// true if a filter with the given name was found. public bool GetImplementedFilter(string name, bool instantiate, out PhpFilter instance, object parameters) { instance = null; switch (name) { case "convert.base64-decode": if (instantiate) instance = new DecodingFilter(ConversionFilterOptions.Base64); return true; case "convert.quoted-printable-decode": if (instantiate) instance = new DecodingFilter(ConversionFilterOptions.QuotedPrintable); return true; } return false; } #endregion } /// /// Encapsulates built-in "convert.*" filters performing the encoding /// (binary to string) conversions. See /// for the list of possible filter operations. /// /// public sealed class EncodingFilter : PhpFilter { /// Creates a new instance of this filter. public EncodingFilter(ConversionFilterOptions operation) : base(null) { this.operation = operation; } /// public override object Filter(object input, bool closing) { PhpBytes bin = PhpStream.AsBinary(input); switch (operation) { case ConversionFilterOptions.Base64: return System.Convert.ToBase64String(bin.ReadonlyData); // EX: PHP5 supports this function with additional parameters. case ConversionFilterOptions.QuotedPrintable: PhpException.FunctionNotSupported(); // EX: PHP5 supports this function with additional parameters. break; default: Debug.Assert(false); break; } return bin; } /// The selected operation of this conversion filter. private readonly ConversionFilterOptions operation; } /// /// Factory for encoding stream filters. /// /// public sealed class EncodingFilterFactory : IFilterFactory { #region Implemented Filters Access /// /// Returns the list of filters defined by this PhpFilter. /// /// public string[] GetImplementedFilterNames() { return new string[] { "convert.base64-encode" // "convert.quoted-printable-encode" }; } /// /// Returns a filter implementation defined by this PhpFilter. /// /// Name of the filter to look for. /// true to fill with a new instance of that filter. /// Filled with a new instance of an implemented filter if . /// Additional parameters provided to the filter constructor. /// true if a filter with the given name was found. public bool GetImplementedFilter(string name, bool instantiate, out PhpFilter instance, object parameters) { instance = null; switch (name) { case "convert.base64-encode": if (instantiate) instance = new EncodingFilter(ConversionFilterOptions.Base64); return true; // case "convert.quoted-printable-encode": // if (instantiate) instance = new EncodingFilter(ConversionFilterOptions.QuotedPrintable); // return true; } return false; } #endregion } #endregion #endregion #endregion #region Stream Context functions /// /// Class containing implementations of PHP functions accessing the s. /// /// public static class PhpContexts { #region stream_context_create [ImplementsFunction("stream_context_create")] public static PhpResource CreateContext() { return CreateContext(null); } /// Create a new stream context. /// The 2-dimensional array in format "options[wrapper][option]". [ImplementsFunction("stream_context_create")] public static PhpResource CreateContext(PhpArray data) { if (data == null) return StreamContext.Default; // OK, data lead to a valid stream-context. if (CheckContextData(data)) return new StreamContext(data); // Otherwise.. PhpException.Throw(PhpError.Warning, LibResources.GetString("invalid_context_resource")); return null; } /// /// Check whether the provided argument is a valid stream-context data array. /// /// The data to be stored into context. /// private static bool CheckContextData(PhpArray data) { // Check if the supplied data are correctly formed. foreach (object o in data.Values) { if (!(o is PhpArray)) return false; // Invalid resource - not an array of arrays } return true; } /// /// Get the StreamContext from a handle representing either an isolated context or a PhpStream. /// /// The PhpResource of either PhpStream or StreamContext type. /// If true then a new context will be created at the place of . /// The respective StreamContext. /// If the first argument is neither a stream nor a context. private static StreamContext FromResource(PhpResource stream_or_context, bool createContext) { if ((stream_or_context != null) && (stream_or_context.IsValid)) { // Get the context out of the stream PhpStream stream = stream_or_context as PhpStream; if (stream != null) { Debug.Assert(stream.Context != null); stream_or_context = stream.Context; } StreamContext context = stream_or_context as StreamContext; if (context == StreamContext.Default) { if (!createContext) return null; context = new StreamContext(); } return context; } PhpException.Throw(PhpError.Warning, CoreResources.GetString("context_expected")); return null; } private static PhpArray GetContextData(PhpResource stream_or_context) { // Always create a new context if there is the Default one. StreamContext context = FromResource(stream_or_context, true); // Now create the data if this is a "lazy context". if (context != null) { if (context.Data == null) context.Data = new PhpArray(0, 4); return context.Data; // Now it is OK. } return null; } #endregion #region stream_context_get_options, stream_context_set_option, stream_context_set_params /// /// Retrieve options for a stream-wrapper or a context itself. /// /// The PhpResource of either PhpStream or StreamContext type. /// The contained PhpArray of options. [ImplementsFunction("stream_context_get_options")] public static PhpArray GetContextOptions(PhpResource stream_or_context) { // Do not create a new context if there is the Default one. StreamContext context = FromResource(stream_or_context, false); return context != null ? context.Data : null; } /// /// Sets an option for a stream/wrapper/context. /// /// The PhpResource of either PhpStream or StreamContext type. /// The first-level index to the options array. /// The second-level index to the options array. /// The data to be stored to the options array. /// True on success. [ImplementsFunction("stream_context_set_option")] public static bool SetContextOption(PhpResource stream_or_context, string wrapper, string option, object data) { // OK, creates the context if Default, so that Data is always a PhpArray. // Fails only if the first argument is not a stream nor context. PhpArray context_data = GetContextData(stream_or_context); if (context_data == null) return false; if (context_data.ContainsKey(wrapper)) { // Inserts the option key if necessary. (context_data[wrapper] as PhpArray)[option] = data; } else { // Create the second-level array and fill it with the given data. PhpArray options = new PhpArray(0, 4); options.Add(option, data); context_data.Add(wrapper, options); } return true; } /// /// Set parameters for a stream/wrapper/context. /// [ImplementsFunction("stream_context_set_params")] public static bool SetContextParameters(PhpResource stream_or_context, PhpArray parameters) { // Create the context if the stream does not have one. StreamContext context = FromResource(stream_or_context, true); if ((context != null) && (context.IsValid)) { context.Parameters = parameters; return true; } return false; } #endregion } #endregion #region Stream Wrapper functions /// /// Class containing implementations of PHP functions accessing the s. /// /// public static class PhpWrappers { #region stream_wrapper_register, stream_register_wrapper, stream_get_wrappers /// /// Optional flag for stream_wrapper_register function. /// public enum StreamWrapperRegisterFlags : int { Default = 0, [ImplementsConstant("STREAM_IS_URL")] IsUrl = 1 } /// /// Registers a user-wrapper specified by the name of a defining user-class. /// /// The class context. /// The schema to be associated with the given wrapper. /// Name of the user class implementing the wrapper functions. /// False in case of failure (ex. schema already occupied). [ImplementsFunction("stream_wrapper_register", FunctionImplOptions.NeedsClassContext)] public static bool RegisterUserWrapperByName(DTypeDesc caller, string protocol, string classname) { return RegisterUserWrapperByName(caller, protocol, classname, StreamWrapperRegisterFlags.Default); } /// /// Registers a user-wrapper specified by the name of a defining user-class. /// /// The class context. /// The schema to be associated with the given wrapper. /// Name of the user class implementing the wrapper functions. /// Should be set to STREAM_IS_URL if protocol is a URL protocol. Default is 0, local stream. /// False in case of failure (ex. schema already occupied). [ImplementsFunction("stream_wrapper_register", FunctionImplOptions.NeedsClassContext)] public static bool RegisterUserWrapperByName(DTypeDesc caller, string protocol, string classname, StreamWrapperRegisterFlags flags/*=0*/) { // check if the scheme is already registered: if (string.IsNullOrEmpty(protocol) || StreamWrapper.Exists(protocol)) { // TODO: Warning? return false; } DTypeDesc wrapperClass = ScriptContext.CurrentContext.ResolveType(classname, null, caller, null, ResolveTypeFlags.UseAutoload | ResolveTypeFlags.ThrowErrors); if (wrapperClass == null) return false; // EX: [stream_wrapper_register]: create the user wrapper StreamWrapper wrapper = new UserStreamWrapper(ScriptContext.CurrentContext, protocol, wrapperClass, flags == StreamWrapperRegisterFlags.IsUrl); return StreamWrapper.RegisterUserWrapper(protocol, wrapper); } /// /// Registers a user-wrapper specified by the name of a defining user-class. /// /// The class context. /// The schema to be associated with the given wrapper. /// Name of the user class implementing the wrapper functions. /// False in case of failure (ex. schema already occupied). [ImplementsFunction("stream_register_wrapper", FunctionImplOptions.NeedsClassContext)] public static bool RegisterUserWrapperByName2(DTypeDesc caller, string protocol, string userWrapperName) { return RegisterUserWrapperByName(caller, protocol, userWrapperName); } /// /// Registers a user-wrapper specified by the name of a defining user-class. /// /// The class context. /// The schema to be associated with the given wrapper. /// Name of the user class implementing the wrapper functions. /// Should be set to STREAM_IS_URL if protocol is a URL protocol. Default is 0, local stream. /// False in case of failure (ex. schema already occupied). [ImplementsFunction("stream_register_wrapper", FunctionImplOptions.NeedsClassContext)] public static bool RegisterUserWrapperByName2(DTypeDesc caller, string protocol, string userWrapperName, StreamWrapperRegisterFlags flags/*=0*/) { return RegisterUserWrapperByName(caller, protocol, userWrapperName, flags); } ///Retrieve list of registered streams (only the names) [ImplementsFunction("stream_get_wrappers")] public static PhpArray GetWrapperSchemes() { PhpArray ret = new PhpArray(8, 0); // First add the internal built-in wrappers. var internals = StreamWrapper.GetSystemWrapperSchemes(); foreach (string scheme in internals) { ret.Add(scheme); } // Now add the indexes (schemes) of User wrappers. foreach (string scheme in StreamWrapper.GetUserWrapperSchemes()) { ret.Add(scheme); } return ret; } #endregion } #endregion #region PHP Stream functions /// /// A class encapsulating the static implementations of PHP Stream functions. /// /// public static class PhpStreams { #region stream_copy_to_stream /// /// Copies data from one stream to another. /// /// Stream to copy data from. Opened for reading. /// Stream to copy data to. Opened for writing. [ImplementsFunction("stream_copy_to_stream")] public static int Copy(PhpResource source, PhpResource dest) { return Copy(source, dest, -1, 0); } /// /// Copies data from one stream to another. /// /// Stream to copy data from. Opened for reading. /// Stream to copy data to. Opened for writing. /// The maximum count of bytes to copy (-1 to copy entire stream. [ImplementsFunction("stream_copy_to_stream")] public static int Copy(PhpResource source, PhpResource dest, int maxlength) { return Copy(source, dest, maxlength, 0); } /// /// Copies data from one stream to another. /// /// Stream to copy data from. Opened for reading. /// Stream to copy data to. Opened for writing. /// The maximum count of bytes to copy (-1 to copy entire stream. /// The offset where to start to copy data. [ImplementsFunction("stream_copy_to_stream")] [return: CastToFalse] public static int Copy(PhpResource source, PhpResource destination, int maxlength, int offset) { PhpStream from = PhpStream.GetValid(source); PhpStream to = PhpStream.GetValid(destination); if (from == null || to == null) return -1; if (offset < 0) return -1; if (maxlength == 0) return 0; // Compatibility (PHP streams.c: "in the event that the source file is 0 bytes, // return 1 to indicate success because opening the file to write had already // created a copy" if (from.Eof) return 1; // If we have positive offset, we will skip the data if ( offset > 0 ) { int haveskipped = 0; while (haveskipped != offset) { object data = null; int toskip = offset - haveskipped; if (toskip > from.GetNextDataLength()) { data = from.ReadMaximumData(); if (data == null) break; } else { data = from.ReadData(toskip, false); if (data == null) break; // EOF or error. Debug.Assert(PhpStream.GetDataLength(data) <= toskip); } Debug.Assert(haveskipped <= offset); } } // Copy entire stream. int haveread = 0, havewritten = 0; while (haveread != maxlength) { object data = null; // Is is safe to read a whole block? int toread = maxlength - haveread; if ((maxlength == -1) || (toread > from.GetNextDataLength())) { data = from.ReadMaximumData(); if (data == null) break; // EOF or error. } else { data = from.ReadData(toread, false); if (data == null) break; // EOF or error. Debug.Assert(PhpStream.GetDataLength(data) <= toread); } Debug.Assert((data is string) || (data is PhpBytes)); haveread += PhpStream.GetDataLength(data); Debug.Assert((maxlength == -1) || (haveread <= maxlength)); int written = to.WriteData(data); if (written <= 0) { // Warning already thrown at PhpStream.WriteData. return (havewritten > 0) ? haveread : -1; } havewritten += written; } return haveread; } #endregion #region stream_get_line, stream_get_meta_data /// Gets line from stream resource up to a given delimiter /// A handle to a stream opened for reading. /// A string containing the end-of-line delimiter. /// Maximum length of the return value. /// One line from the stream without the string at the end. [ImplementsFunction("stream_get_line")] [return: CastToFalse] public static string ReadLine(PhpResource handle, int length, string ending) { PhpStream stream = PhpStream.GetValid(handle); if (stream == null) return null; if (length <= 0) { PhpException.Throw(PhpError.Warning, LibResources.GetString("arg:negative", "length")); return null; } if (String.IsNullOrEmpty(ending)) { PhpException.Throw(PhpError.Warning, LibResources.GetString("arg:empty", "ending")); return null; } // The ending is not included in the returned data. string rv = stream.ReadLine(length, ending); if (rv == null) return null; if (rv.Length >= ending.Length) rv = rv.Substring(rv.Length - ending.Length); return rv; } /// /// Retrieves header/meta data from streams/file pointers /// /// /// The result array contains the following items: /// * timed_out (bool) - TRUE if the stream timed out while waiting for data on the last call to fread() or fgets(). /// * blocked (bool) - TRUE if the stream is in blocking IO mode. See stream_set_blocking(). /// * eof (bool) - TRUE if the stream has reached end-of-file. Note that for socket streams this member can be TRUE even when unread_bytes is non-zero. To determine if there is more data to be read, use feof() instead of reading this item. /// * unread_bytes (int) - the number of bytes currently contained in the PHP's own internal buffer. /// * stream_type (string) - a label describing the underlying implementation of the stream. /// * wrapper_type (string) - a label describing the protocol wrapper implementation layered over the stream. See List of Supported Protocols/Wrappers for more information about wrappers. /// * wrapper_data (mixed) - wrapper specific data attached to this stream. See List of Supported Protocols/Wrappers for more information about wrappers and their wrapper data. /// * filters (array) - and array containing the names of any filters that have been stacked onto this stream. Documentation on filters can be found in the Filters appendix. /// * mode (string) - the type of access required for this stream (see Table 1 of the fopen() reference) /// * seekable (bool) - whether the current stream can be seeked. /// * uri (string) - the URI/filename associated with this stream. /// [ImplementsFunction("stream_get_meta_data")] public static PhpArray GetMetaData(PhpResource resource) { PhpStream stream = PhpStream.GetValid(resource); if (stream == null) return null; PhpArray result = new PhpArray(0, 10); // TODO: timed_out (bool) - TRUE if the stream timed out while waiting for data on the last call to fread() or fgets(). // TODO: blocked (bool) - TRUE if the stream is in blocking IO mode. See stream_set_blocking(). result.Add("blocked", true); // eof (bool) - TRUE if the stream has reached end-of-file. Note that for socket streams this member can be TRUE even when unread_bytes is non-zero. To determine if there is more data to be read, use feof() instead of reading this item. result.Add("eof", stream.Eof); // TODO: unread_bytes (int) - the number of bytes currently contained in the PHP's own internal buffer. result.Add("unread_bytes", 0); // TODO: stream_type (string) - a label describing the underlying implementation of the stream. result.Add("stream_type", (stream.Wrapper != null) ? stream.Wrapper.Label : string.Empty); // wrapper_type (string) - a label describing the protocol wrapper implementation layered over the stream. See List of Supported Protocols/Wrappers for more information about wrappers. result.Add("wrapper_type", (stream.Wrapper != null) ? stream.Wrapper.Scheme : string.Empty); // wrapper_data (mixed) - wrapper specific data attached to this stream. See List of Supported Protocols/Wrappers for more information about wrappers and their wrapper data. if (stream.WrapperSpecificData != null) result.Add("wrapper_data", stream.WrapperSpecificData); // filters (array) - and array containing the names of any filters that have been stacked onto this stream. Documentation on filters can be found in the Filters appendix. result.Add("filters", GetFiltersName(stream)); // mode (string) - the type of access required for this stream (see Table 1 of the fopen() reference) result.Add("mode", stream.CanRead ? (stream.CanWrite ? "r+" : "r") : (stream.CanWrite ? "w" : string.Empty)); // seekable (bool) - whether the current stream can be seeked. result.Add("seekable", stream.CanSeek); // uri (string) - the URI/filename associated with this stream. result.Add("uri", stream.OpenedPath); return result; } /// /// filters (array) /// - array containing the names of any filters that have been stacked onto this stream. /// /// /// private static PhpArray GetFiltersName(PhpStream/*!*/stream) { PhpArray array = new PhpArray(); foreach (PhpFilter f in stream.StreamFilters) array.Add(f.FilterName); return array; } #endregion #region stream_get_contents /// /// Reads entire content of the stream. /// [ImplementsFunction("stream_get_contents")] [return: CastToFalse] public static object ReadContents(PhpResource handle) { return ReadContents(handle, -1, -1); } /// /// Reads entire content of the stream. /// [ImplementsFunction("stream_get_contents")] [return: CastToFalse] public static object ReadContents(PhpResource handle, int maxLength) { return ReadContents(handle, maxLength, -1); } /// /// Reads entire content of the stream. /// [ImplementsFunction("stream_get_contents")] [return: CastToFalse] public static object ReadContents(PhpResource handle, int maxLength, int offset) { PhpStream stream = PhpStream.GetValid(handle, FileAccess.Read); if (stream == null) return null; return stream.ReadContents(maxLength, offset); } #endregion #region stream_set_blocking, stream_set_timeout, set_file_buffer, stream_set_write_buffer /// Set blocking/non-blocking (synchronous/asynchronous I/O operations) mode on a stream. /// A handle to a stream resource. /// 1 for blocking, 0 for non-blocking. /// true if the operation is supported and was successful, false otherwise. [ImplementsFunction("stream_set_blocking")] public static bool SetBlocking(PhpResource resource, int mode) { PhpStream stream = PhpStream.GetValid(resource); if (stream == null) return false; bool block = mode > 0; return stream.SetParameter(StreamParameterOptions.BlockingMode, block); } /// Set timeout period on a stream /// A handle to a stream opened for reading. /// The number of seconds. /// true if the operation is supported and was successful, false otherwise. [ImplementsFunction("stream_set_timeout")] public static bool SetTimeout(PhpResource resource, int seconds) { return SetTimeout(resource, seconds, 0); } /// Set timeout period on a stream /// A handle to a stream opened for reading. /// The number of seconds. /// The number of microseconds. /// true if the operation is supported and was successful, false otherwise. [ImplementsFunction("stream_set_timeout")] public static bool SetTimeout(PhpResource resource, int seconds, int microseconds) { PhpStream stream = PhpStream.GetValid(resource); if (stream == null) return false; double timeout = seconds + (microseconds / 1000000.0); if (timeout < 0.0) timeout = 0.0; return stream.SetParameter(StreamParameterOptions.ReadTimeout, timeout); } /// Sets file buffering on the given stream. /// The stream to set write buffer size to. /// Number of bytes the output buffer holds before /// passing to the underlying stream. /// true on success. [ImplementsFunction("set_file_buffer")] public static bool SetFileBuffer(PhpResource resource, int buffer) { return SetWriteBuffer(resource, buffer); } /// Sets file buffering on the given stream. /// The stream to set write buffer size to. /// Number of bytes the output buffer holds before /// passing to the underlying stream. /// true on success. [ImplementsFunction("stream_set_write_buffer")] public static bool SetWriteBuffer(PhpResource resource, int buffer) { PhpStream stream = PhpStream.GetValid(resource); if (stream == null) return false; if (buffer < 0) buffer = 0; return stream.SetParameter(StreamParameterOptions.WriteBufferSize, buffer); } #endregion #region TODO: stream_select /// /// Runs the equivalent of the select() system call on the given arrays of streams /// with a timeout specified by tv_sec and tv_usec. /// [ImplementsFunction("stream_select")] public static int Select(ref PhpArray read, ref PhpArray write, ref PhpArray except, int tv_sec) { return Select(ref read, ref write, ref except, tv_sec, 0); } /// Runs the equivalent of the select() system call on the given arrays of streams with a timeout specified by tv_sec and tv_usec [ImplementsFunction("stream_select")] public static int Select(ref PhpArray read, ref PhpArray write, ref PhpArray except, int tv_sec, int tv_usec) { if ((read == null || read.IsEmpty()) && (write == null || write.IsEmpty())) return except == null ? 0 : except.Count; var readResult = new PhpArray(); var writeResult = new PhpArray(); var i = 0; var timer = Stopwatch.StartNew(); var waitTime = tv_sec*1000 + tv_usec; while (true) { if (read != null) { readResult.Clear(); foreach (var item in read) { var stream = item.Value as PhpStream; if (stream == null) continue; if (stream.CanReadWithoutLock()) readResult.Add(item.Key, item.Value); } } if (write != null) { writeResult.Clear(); foreach (var item in write) { var stream = item.Value as PhpStream; if (stream == null) continue; if (stream.CanWriteWithoutLock()) writeResult.Add(item.Key, item.Value); } } if (readResult.Count > 0 || writeResult.Count > 0 || except.Count > 0) break; i++; if (timer.ElapsedMilliseconds > waitTime) break; if (i < 10) Thread.Yield(); else Thread.Sleep(Math.Min(i, waitTime)); } read = readResult; write = writeResult; return read.Count + write.Count + (except == null ? 0 : except.Count); } #endregion } #endregion } ================================================ FILE: Source/ClassLibrary/Strings.Designer.cs ================================================ //------------------------------------------------------------------------------ // // This code was generated by a tool. // Runtime Version:4.0.30319.18444 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. // //------------------------------------------------------------------------------ namespace PHP.Library { using System; /// /// A strongly-typed resource class, for looking up localized strings, etc. /// // This class was auto-generated by the StronglyTypedResourceBuilder // class via a tool like ResGen or Visual Studio. // To add or remove a member, edit your .ResX file then rerun ResGen // with the /str option, or rebuild your VS project. [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] internal class Strings { private static global::System.Resources.ResourceManager resourceMan; private static global::System.Globalization.CultureInfo resourceCulture; [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] internal Strings() { } /// /// Returns the cached ResourceManager instance used by this class. /// [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] internal static global::System.Resources.ResourceManager ResourceManager { get { if (object.ReferenceEquals(resourceMan, null)) { global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("PHP.Library.Strings", typeof(Strings).Assembly); resourceMan = temp; } return resourceMan; } } /// /// Overrides the current thread's CurrentUICulture property for all /// resource lookups using this strongly typed resource class. /// [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] internal static global::System.Globalization.CultureInfo Culture { get { return resourceCulture; } set { resourceCulture = value; } } /// /// Looks up a localized string similar to Additional parameters not supported. /// internal static string additional_parameters_not_supported { get { return ResourceManager.GetString("additional_parameters_not_supported", resourceCulture); } } /// /// Looks up a localized string similar to '{0}' should not be empty. /// internal static string arg_empty { get { return ResourceManager.GetString("arg:empty", resourceCulture); } } /// /// Looks up a localized string similar to Argument '{0}' has invalid length. /// internal static string arg_invalid_length { get { return ResourceManager.GetString("arg:invalid_length", resourceCulture); } } /// /// Looks up a localized string similar to Value '{1}' is invalid for argument '{0}'. /// internal static string arg_invalid_value { get { return ResourceManager.GetString("arg:invalid_value", resourceCulture); } } /// /// Looks up a localized string similar to '{0}' should not be negative. /// internal static string arg_negative { get { return ResourceManager.GetString("arg:negative", resourceCulture); } } /// /// Looks up a localized string similar to '{0}' should be positive. /// internal static string arg_negative_or_zero { get { return ResourceManager.GetString("arg:negative_or_zero", resourceCulture); } } /// /// Looks up a localized string similar to '{0}' not an object or class name. /// internal static string arg_not_object_or_class_name { get { return ResourceManager.GetString("arg:not_object_or_class_name", resourceCulture); } } /// /// Looks up a localized string similar to '{0}' should not be null nor empty. /// internal static string arg_null_or_empty { get { return ResourceManager.GetString("arg:null_or_empty", resourceCulture); } } /// /// Looks up a localized string similar to '{0}' is out of bounds. /// internal static string arg_out_of_bounds { get { return ResourceManager.GetString("arg:out_of_bounds", resourceCulture); } } /// /// Looks up a localized string similar to '{0}' should not be zero. /// internal static string arg_zero { get { return ResourceManager.GetString("arg:zero", resourceCulture); } } /// /// Looks up a localized string similar to Argument #{0} should be an array. /// internal static string argument_not_array { get { return ResourceManager.GetString("argument_not_array", resourceCulture); } } /// /// Looks up a localized string similar to Argument #{0} should be an array or a sort flag. /// internal static string argument_not_array_or_sort_flag { get { return ResourceManager.GetString("argument_not_array_or_sort_flag", resourceCulture); } } /// /// Looks up a localized string similar to Argument '{0}' must be an integer indexed array. /// internal static string argument_not_integer_indexed_array { get { return ResourceManager.GetString("argument_not_integer_indexed_array", resourceCulture); } } /// /// Looks up a localized string similar to Second argument is not an object or class name. /// internal static string argument_not_object_or_class_name { get { return ResourceManager.GetString("argument_not_object_or_class_name", resourceCulture); } } /// /// Looks up a localized string similar to By changing ASP.NET session ID, all the session data created during this request will be lost. New session will start in the next request.. /// internal static string aspnet_sessionhandler_id_reset { get { return ResourceManager.GetString("aspnet_sessionhandler_id_reset", resourceCulture); } } /// /// Looks up a localized string similar to Type '{0}': '*' ignored. /// internal static string asterisk_ignored { get { return ResourceManager.GetString("asterisk_ignored", resourceCulture); } } /// /// Looks up a localized string similar to Attempted {0} variable override. /// internal static string attempted_variable_override { get { return ResourceManager.GetString("attempted_variable_override", resourceCulture); } } /// /// Looks up a localized string similar to Collating element representing more than one character cannot be the first endpoint of range. /// internal static string bad_collating_el_at_first_endpoint_of_range { get { return ResourceManager.GetString("bad_collating_el_at_first_endpoint_of_range", resourceCulture); } } /// /// Looks up a localized string similar to Type '{0}': binary data length has overflown integer size. /// internal static string binary_data_overflown { get { return ResourceManager.GetString("binary_data_overflown", resourceCulture); } } /// /// Looks up a localized string similar to . /// internal static string both_must_be_arrays_or_nonarrays { get { return ResourceManager.GetString("both_must_be_arrays_or_nonarrays", resourceCulture); } } /// /// Looks up a localized string similar to This function is deprecated, use the call_user_func variety with the array(&$obj, "method") syntax instead. /// internal static string call_user_method_deprecated { get { return ResourceManager.GetString("call_user_method_deprecated", resourceCulture); } } /// /// Looks up a localized string similar to Cannot open connection: {0}. /// internal static string cannot_open_connection { get { return ResourceManager.GetString("cannot_open_connection", resourceCulture); } } /// /// Looks up a localized string similar to Cannot retrieve schema information. /// internal static string cannot_retrieve_schema { get { return ResourceManager.GetString("cannot_retrieve_schema", resourceCulture); } } /// /// Looks up a localized string similar to Cannot send the mail due to error: '{0}'. /// internal static string cannot_send_email { get { return ResourceManager.GetString("cannot_send_email", resourceCulture); } } /// /// Looks up a localized string similar to Invalid '{0}'-range, no character to the left of '{0}'. /// internal static string char_range_no_char_on_left { get { return ResourceManager.GetString("char_range_no_char_on_left", resourceCulture); } } /// /// Looks up a localized string similar to Invalid '{0}'-range, no character to the right of '{0}'. /// internal static string char_range_no_char_on_right { get { return ResourceManager.GetString("char_range_no_char_on_right", resourceCulture); } } /// /// Looks up a localized string similar to Invalid '{0}'-range, '{0}'-range needs to be incrementing. /// internal static string char_range_not_incrementing { get { return ResourceManager.GetString("char_range_not_incrementing", resourceCulture); } } /// /// Looks up a localized string similar to Character class cannot be an endpoint of range (second endpoint here). /// internal static string character_class_at_second_endpoint_of_range { get { return ResourceManager.GetString("character_class_at_second_endpoint_of_range", resourceCulture); } } /// /// Looks up a localized string similar to Class {0} has no unserializer. /// internal static string class_has_no_unserializer { get { return ResourceManager.GetString("class_has_no_unserializer", resourceCulture); } } /// /// Looks up a localized string similar to Unable to instantiate class '{0}'.. /// internal static string class_instantiation_failed { get { return ResourceManager.GetString("class_instantiation_failed", resourceCulture); } } /// /// Looks up a localized string similar to Command execution failed: {0}. /// internal static string command_execution_failed { get { return ResourceManager.GetString("command_execution_failed", resourceCulture); } } /// /// Looks up a localized string similar to Number of connections reached the limit ({0}). /// internal static string connection_limit_reached { get { return ResourceManager.GetString("connection_limit_reached", resourceCulture); } } /// /// Looks up a localized string similar to Can't force cut when width is zero. /// internal static string cut_forced_with_zero_width { get { return ResourceManager.GetString("cut_forced_with_zero_width", resourceCulture); } } /// /// Looks up a localized string similar to Database selection failed: {0}. /// internal static string database_selection_failed { get { return ResourceManager.GetString("database_selection_failed", resourceCulture); } } /// /// Looks up a localized string similar to Delimiter must not be alphanumeric or backslash. /// internal static string delimiter_alnum_backslash { get { return ResourceManager.GetString("delimiter_alnum_backslash", resourceCulture); } } /// /// Looks up a localized string similar to Invalid mode for descriptor item #{0}. /// internal static string descriptor_item_invalid_mode { get { return ResourceManager.GetString("descriptor_item_invalid_mode", resourceCulture); } } /// /// Looks up a localized string similar to Missing file name parameter from descriptor item #{0}. /// internal static string descriptor_item_missing_file_name { get { return ResourceManager.GetString("descriptor_item_missing_file_name", resourceCulture); } } /// /// Looks up a localized string similar to Missing mode parameter from descriptor item #{0}. /// internal static string descriptor_item_missing_mode { get { return ResourceManager.GetString("descriptor_item_missing_mode", resourceCulture); } } /// /// Looks up a localized string similar to Descriptor item #{0} should contain handle qualifier and parameters. /// internal static string descriptor_item_missing_qualifier { get { return ResourceManager.GetString("descriptor_item_missing_qualifier", resourceCulture); } } /// /// Looks up a localized string similar to Descriptor item #{0} must be either an array or a resource. /// internal static string descriptor_item_not_array_nor_resource { get { return ResourceManager.GetString("descriptor_item_not_array_nor_resource", resourceCulture); } } /// /// Looks up a localized string similar to Descriptor #{0} is not supported. /// internal static string descriptor_unsupported { get { return ResourceManager.GetString("descriptor_unsupported", resourceCulture); } } /// /// Looks up a localized string similar to Deserialization failed: {0} at offset {1} of {2} bytes. /// internal static string deserialization_failed { get { return ResourceManager.GetString("deserialization_failed", resourceCulture); } } /// /// Looks up a localized string similar to The number of variables ({0}) differs from the number of format specifiers ({1}). /// internal static string different_variables_and_specifiers { get { return ResourceManager.GetString("different_variables_and_specifiers", resourceCulture); } } /// /// Looks up a localized string similar to The directory '{0}' does not exist. /// internal static string directory_not_found { get { return ResourceManager.GetString("directory_not_found", resourceCulture); } } /// /// Looks up a localized string similar to Extensions cannot be loaded by script. Use configuration files instead.. /// internal static string dl_not_supported { get { return ResourceManager.GetString("dl_not_supported", resourceCulture); } } /// /// Looks up a localized string similar to Equivalence class cannot be endpoint of range (first endpoint here). /// internal static string equivalence_class_at_first_endpoint_of_range { get { return ResourceManager.GetString("equivalence_class_at_first_endpoint_of_range", resourceCulture); } } /// /// Looks up a localized string similar to Equivalence class cannot be an endpoint of a range (second endpoint here). /// internal static string equivalence_class_at_second_endpoint_of_range { get { return ResourceManager.GetString("equivalence_class_at_second_endpoint_of_range", resourceCulture); } } /// /// Looks up a localized string similar to Error occured while closing the connection: {0}. /// internal static string error_closing_connection { get { return ResourceManager.GetString("error_closing_connection", resourceCulture); } } /// /// Looks up a localized string similar to Phalanger: Error report. /// internal static string error_report { get { return ResourceManager.GetString("error_report", resourceCulture); } } /// /// Looks up a localized string similar to An error occured while starting process: {0}. /// internal static string error_starting_process { get { return ResourceManager.GetString("error_starting_process", resourceCulture); } } /// /// Looks up a localized string similar to An error occured while terminating process {0} (pid = {1}): {2}. /// internal static string error_terminating_process { get { return ResourceManager.GetString("error_terminating_process", resourceCulture); } } /// /// Looks up a localized string similar to An error occured while waiting for process exit: {0}. /// internal static string error_waiting_for_process_exit { get { return ResourceManager.GetString("error_waiting_for_process_exit", resourceCulture); } } /// /// Looks up a localized string similar to Field (column) of name '{0}' doesn't exist in the result. /// internal static string field_not_exists { get { return ResourceManager.GetString("field_not_exists", resourceCulture); } } /// /// Looks up a localized string similar to First endpoint of range cannot be a character class. /// internal static string first_endpoint_character_class { get { return ResourceManager.GetString("first_endpoint_character_class", resourceCulture); } } /// /// Looks up a localized string similar to Function not allowed in web server context. /// internal static string function_disallowed_in_web_context { get { return ResourceManager.GetString("function_disallowed_in_web_context", resourceCulture); } } /// /// Looks up a localized string similar to Header '{0}' not supported and has been ignored. /// internal static string header_not_supported { get { return ResourceManager.GetString("header_not_supported", resourceCulture); } } /// /// Looks up a localized string similar to Headers has already been sent; modification of cookies or other HTTP headers are not allowed. /// internal static string headers_has_been_sent { get { return ResourceManager.GetString("headers_has_been_sent", resourceCulture); } } /// /// Looks up a localized string similar to Requested host not responding. /// internal static string host_not_responding { get { return ResourceManager.GetString("host_not_responding", resourceCulture); } } /// /// Looks up a localized string similar to HTTP request failed with message '{0}'. /// internal static string http_request_failed { get { return ResourceManager.GetString("http_request_failed", resourceCulture); } } /// /// Looks up a localized string similar to Type '{0}': illegal hex digit '{0}'. /// internal static string illegal_hex_digit { get { return ResourceManager.GetString("illegal_hex_digit", resourceCulture); } } /// /// Looks up a localized string similar to Parse error on line {0}. /// internal static string ini_parse_error { get { return ResourceManager.GetString("ini_parse_error", resourceCulture); } } /// /// Looks up a localized string similar to Invalid argument '{0}'. /// internal static string invalid_argument { get { return ResourceManager.GetString("invalid_argument", resourceCulture); } } /// /// Looks up a localized string similar to Invalid base64 encoded data. /// internal static string invalid_base64_encoded_data { get { return ResourceManager.GetString("invalid_base64_encoded_data", resourceCulture); } } /// /// Looks up a localized string similar to '{0}' is not a valid value for cache limiter. /// internal static string invalid_cache_limiter { get { return ResourceManager.GetString("invalid_cache_limiter", resourceCulture); } } /// /// Looks up a localized string similar to Invalid calendar id '{0}'. /// internal static string invalid_calendar { get { return ResourceManager.GetString("invalid_calendar", resourceCulture); } } /// /// Looks up a localized string similar to Invalid connection resource. /// internal static string invalid_connection_resource { get { return ResourceManager.GetString("invalid_connection_resource", resourceCulture); } } /// /// Looks up a localized string similar to Supplied resource is not a valid Stream-Context resource. /// internal static string invalid_context_resource { get { return ResourceManager.GetString("invalid_context_resource", resourceCulture); } } /// /// Looks up a localized string similar to Invalid data encountered in the stream (bad back reference marker).. /// internal static string invalid_data_bad_back_reference { get { return ResourceManager.GetString("invalid_data_bad_back_reference", resourceCulture); } } /// /// Looks up a localized string similar to Invalid data encountered in the stream (bad length marker).. /// internal static string invalid_data_bad_length { get { return ResourceManager.GetString("invalid_data_bad_length", resourceCulture); } } /// /// Looks up a localized string similar to Invalid data encountered in the stream (the specified data type is invalid in this context).. /// internal static string invalid_data_bad_type { get { return ResourceManager.GetString("invalid_data_bad_type", resourceCulture); } } /// /// Looks up a localized string similar to Field index {0} is invalid for {1} resource #{2}. /// internal static string invalid_data_result_field_index { get { return ResourceManager.GetString("invalid_data_result_field_index", resourceCulture); } } /// /// Looks up a localized string similar to Row index {0} is invalid for {1} resource #{2}. /// internal static string invalid_data_result_row_index { get { return ResourceManager.GetString("invalid_data_result_row_index", resourceCulture); } } /// /// Looks up a localized string similar to Supplied resource is not a valid Directory listing resource. /// internal static string invalid_directory_resource { get { return ResourceManager.GetString("invalid_directory_resource", resourceCulture); } } /// /// Looks up a localized string similar to Invalid destination charser. /// internal static string invalid_dst_charset { get { return ResourceManager.GetString("invalid_dst_charset", resourceCulture); } } /// /// Looks up a localized string similar to Email address '{0}' is not valid. /// internal static string invalid_email_address { get { return ResourceManager.GetString("invalid_email_address", resourceCulture); } } /// /// Looks up a localized string similar to '{0}' is not a valid handle qualifier. /// internal static string invalid_handle_qualifier { get { return ResourceManager.GetString("invalid_handle_qualifier", resourceCulture); } } /// /// Looks up a localized string similar to Path '{0}' is invalid. /// internal static string invalid_path { get { return ResourceManager.GetString("invalid_path", resourceCulture); } } /// /// Looks up a localized string similar to Invalid port number '{0}'. /// internal static string invalid_port { get { return ResourceManager.GetString("invalid_port", resourceCulture); } } /// /// Looks up a localized string similar to Invalid process resource. /// internal static string invalid_process_resource { get { return ResourceManager.GetString("invalid_process_resource", resourceCulture); } } /// /// Looks up a localized string similar to Invalid query result resource. /// internal static string invalid_result_resource { get { return ResourceManager.GetString("invalid_result_resource", resourceCulture); } } /// /// Looks up a localized string similar to Invalid scan conversion character "{0}". /// internal static string invalid_scan_conversion_character { get { return ResourceManager.GetString("invalid_scan_conversion_character", resourceCulture); } } /// /// Looks up a localized string similar to Invalid session save path '{0}'.. /// internal static string invalid_session_save_path { get { return ResourceManager.GetString("invalid_session_save_path", resourceCulture); } } /// /// Looks up a localized string similar to Invalid source charser. /// internal static string invalid_src_charset { get { return ResourceManager.GetString("invalid_src_charset", resourceCulture); } } /// /// Looks up a localized string similar to Invalid stored procedure resource. /// internal static string invalid_stored_procedure_resource { get { return ResourceManager.GetString("invalid_stored_procedure_resource", resourceCulture); } } /// /// Looks up a localized string similar to Invalid name of type. /// internal static string invalid_type_name { get { return ResourceManager.GetString("invalid_type_name", resourceCulture); } } /// /// Looks up a localized string similar to Not a valid URL, unable to parse ({0}). /// internal static string invalid_url { get { return ResourceManager.GetString("invalid_url", resourceCulture); } } /// /// Looks up a localized string similar to The given parameter is not a valid uuencoded string. /// internal static string invalid_uuencoded_string { get { return ResourceManager.GetString("invalid_uuencoded_string", resourceCulture); } } /// /// Looks up a localized string similar to Limit is less than 1. /// internal static string limit_less_than_one { get { return ResourceManager.GetString("limit_less_than_one", resourceCulture); } } /// /// Looks up a localized string similar to Ignoring unsupported pattern modifier '{0}' in perl regular expression. /// internal static string modifier_not_supported { get { return ResourceManager.GetString("modifier_not_supported", resourceCulture); } } /// /// Looks up a localized string similar to Ignoring unknown pattern modifier '{0}' in perl regular expression. /// internal static string modifier_unknown { get { return ResourceManager.GetString("modifier_unknown", resourceCulture); } } /// /// Looks up a localized string similar to Pattern modifier '{0}' is ignored due to use of modifier '{1}' in perl regular expression. /// internal static string modifiers_inconsistent { get { return ResourceManager.GetString("modifiers_inconsistent", resourceCulture); } } /// /// Looks up a localized string similar to Type '{0}': multi-byte characters are not supported. /// internal static string multibyte_chars_unsupported { get { return ResourceManager.GetString("multibyte_chars_unsupported", resourceCulture); } } /// /// Looks up a localized string similar to {0} must be greater than or equal to 0. /// internal static string must_be_positive { get { return ResourceManager.GetString("must_be_positive", resourceCulture); } } /// /// Looks up a localized string similar to Can {0} only string and integer values. /// internal static string neither_string_nor_integer_value { get { return ResourceManager.GetString("neither_string_nor_integer_value", resourceCulture); } } /// /// Looks up a localized string similar to No prefix specified - possible security hazard. /// internal static string no_prefix_security_hazard { get { return ResourceManager.GetString("no_prefix_security_hazard", resourceCulture); } } /// /// Looks up a localized string similar to . /// internal static string no_prefix_specified { get { return ResourceManager.GetString("no_prefix_specified", resourceCulture); } } /// /// Looks up a localized string similar to Type '{0}': not enough arguments. /// internal static string not_enought_arguments { get { return ResourceManager.GetString("not_enought_arguments", resourceCulture); } } /// /// Looks up a localized string similar to Type '{0}': not enough characters in string. /// internal static string not_enought_characters { get { return ResourceManager.GetString("not_enought_characters", resourceCulture); } } /// /// Looks up a localized string similar to Type '{0}': not enough input, need {1}, have {2}. /// internal static string not_enought_input { get { return ResourceManager.GetString("not_enought_input", resourceCulture); } } /// /// Looks up a localized string similar to Number of elements must be positive. /// internal static string number_of_elements_not_positive { get { return ResourceManager.GetString("number_of_elements_not_positive", resourceCulture); } } /// /// Looks up a localized string similar to The number of items is {0} but it must be between 1 and array item count {1}. /// internal static string number_of_items_not_between_one_and_item_count { get { return ResourceManager.GetString("number_of_items_not_between_one_and_item_count", resourceCulture); } } /// /// Looks up a localized string similar to Number of repetitions must be non-negative. /// internal static string number_of_repetitions_negative { get { return ResourceManager.GetString("number_of_repetitions_negative", resourceCulture); } } /// /// Looks up a localized string similar to Option '{0}' has already been registered.. /// internal static string option_already_registered { get { return ResourceManager.GetString("option_already_registered", resourceCulture); } } /// /// Looks up a localized string similar to '{0}' option missing. /// internal static string option_missing { get { return ResourceManager.GetString("option_missing", resourceCulture); } } /// /// Looks up a localized string similar to Configuration option '{0}' is not supported. /// internal static string option_not_supported { get { return ResourceManager.GetString("option_not_supported", resourceCulture); } } /// /// Looks up a localized string similar to Configuration option '{0}' cannot be set or restored since it is read only. /// internal static string option_readonly { get { return ResourceManager.GetString("option_readonly", resourceCulture); } } /// /// Looks up a localized string similar to Type '{0}': outside of string. /// internal static string outside_string { get { return ResourceManager.GetString("outside_string", resourceCulture); } } /// /// Looks up a localized string similar to Parameter '{0}' has already been bound. /// internal static string parameter_already_bound { get { return ResourceManager.GetString("parameter_already_bound", resourceCulture); } } /// /// Looks up a localized string similar to Parse error on position {0} near '{1}'. /// internal static string parse_error { get { return ResourceManager.GetString("parse_error", resourceCulture); } } /// /// Looks up a localized string similar to PREG_PATTERN_ORDER and PREG_SET_ORDER flags are mutually exclusive. /// internal static string preg_match_pattern_set_order { get { return ResourceManager.GetString("preg_match_pattern_set_order", resourceCulture); } } /// /// Looks up a localized string similar to No ending delimiter '{0}' found. /// internal static string preg_no_end_delimiter { get { return ResourceManager.GetString("preg_no_end_delimiter", resourceCulture); } } /// /// Looks up a localized string similar to Quantifier '?' following nothing (after '('). /// internal static string question_mark_folowing_nothing { get { return ResourceManager.GetString("question_mark_folowing_nothing", resourceCulture); } } /// /// Looks up a localized string similar to Range: first character code is greater than second. /// internal static string range_first_character_greater { get { return ResourceManager.GetString("range_first_character_greater", resourceCulture); } } /// /// Looks up a localized string similar to Range not allowed here (first endpoint may be illeagal). /// internal static string range_not_allowed { get { return ResourceManager.GetString("range_not_allowed", resourceCulture); } } /// /// Looks up a localized string similar to Ranges cannot share an endpoint. /// internal static string range_shared_endpoint { get { return ResourceManager.GetString("range_shared_endpoint", resourceCulture); } } /// /// Looks up a localized string similar to Ranges for current page encoding are not supported. /// internal static string ranges_not_supported { get { return ResourceManager.GetString("ranges_not_supported", resourceCulture); } } /// /// Looks up a localized string similar to Recursion detected. /// internal static string recursion_detected { get { return ResourceManager.GetString("recursion_detected", resourceCulture); } } /// /// Looks up a localized string similar to Regular expression cannot end with '('. /// internal static string regexp_cannot_end_with_open_bracket { get { return ResourceManager.GetString("regexp_cannot_end_with_open_bracket", resourceCulture); } } /// /// Looks up a localized string similar to Regular expression cannot end with '\\'. /// internal static string regexp_cannot_end_with_two_backslashes { get { return ResourceManager.GetString("regexp_cannot_end_with_two_backslashes", resourceCulture); } } /// /// Looks up a localized string similar to Nothing to repeat - duplicate quantifier at offset {0} in matching part of regular expression.. /// internal static string regexp_duplicate_quantifier { get { return ResourceManager.GetString("regexp_duplicate_quantifier", resourceCulture); } } /// /// Looks up a localized string similar to Empty regular expression. /// internal static string regular_expression_empty { get { return ResourceManager.GetString("regular_expression_empty", resourceCulture); } } /// /// Looks up a localized string similar to Replacement cannot be an array if pattern is not an array. /// internal static string replacement_array_pattern_not { get { return ResourceManager.GetString("replacement_array_pattern_not", resourceCulture); } } /// /// Looks up a localized string similar to The segment length must be greater then zero. /// internal static string segment_length_not_positive { get { return ResourceManager.GetString("segment_length_not_positive", resourceCulture); } } /// /// Looks up a localized string similar to PhpFormatter does not support serialization binders.. /// internal static string serialization_binder_unsupported { get { return ResourceManager.GetString("serialization_binder_unsupported", resourceCulture); } } /// /// Looks up a localized string similar to Serialization failed: {0}. /// internal static string serialization_failed { get { return ResourceManager.GetString("serialization_failed", resourceCulture); } } /// /// Looks up a localized string similar to Serialization of type {0} is not supported by PhpFormatter.. /// internal static string serialization_unsupported_type { get { return ResourceManager.GetString("serialization_unsupported_type", resourceCulture); } } /// /// Looks up a localized string similar to {0}::serialize() must return a string or NULL. /// internal static string serialize_must_return_null_or_string { get { return ResourceManager.GetString("serialize_must_return_null_or_string", resourceCulture); } } /// /// Looks up a localized string similar to Serializer '{0}' has already been registered.. /// internal static string serializer_already_registered { get { return ResourceManager.GetString("serializer_already_registered", resourceCulture); } } /// /// Looks up a localized string similar to Session doesn't not exist. /// internal static string session_not_exists { get { return ResourceManager.GetString("session_not_exists", resourceCulture); } } /// /// Looks up a localized string similar to {0} should be specified. /// internal static string should_be_specified { get { return ResourceManager.GetString("should_be_specified", resourceCulture); } } /// /// Looks up a localized string similar to Number of seconds must be greater than or equal to 0. /// internal static string sleep_seconds_less_zero { get { return ResourceManager.GetString("sleep_seconds_less_zero", resourceCulture); } } /// /// Looks up a localized string similar to From header was not specified.. /// internal static string smtp_sendmail_from_not_set { get { return ResourceManager.GetString("smtp_sendmail_from_not_set", resourceCulture); } } /// /// Looks up a localized string similar to Error connecting '{0}': {0}. /// internal static string socket_open_error { get { return ResourceManager.GetString("socket_open_error", resourceCulture); } } /// /// Looks up a localized string similar to Connect timeout: {0} did not respond. /// internal static string socket_open_timeout { get { return ResourceManager.GetString("socket_open_timeout", resourceCulture); } } /// /// Looks up a localized string similar to Argument #{0} specifies a sorting flag which has already been specified for the array. /// internal static string sorting_flag_already_specified { get { return ResourceManager.GetString("sorting_flag_already_specified", resourceCulture); } } /// /// Looks up a localized string similar to PhpFormatter does not support streaming context.. /// internal static string streaming_context_unsupported { get { return ResourceManager.GetString("streaming_context_unsupported", resourceCulture); } } /// /// Looks up a localized string similar to Length value {0} exceeds string length. /// internal static string substr_count_length_exceeds { get { return ResourceManager.GetString("substr_count_length_exceeds", resourceCulture); } } /// /// Looks up a localized string similar to Offset value {0} exceeds string length. /// internal static string substr_count_offset_exceeds { get { return ResourceManager.GetString("substr_count_offset_exceeds", resourceCulture); } } /// /// Looks up a localized string similar to Offset should be greater than or equal to 0. /// internal static string substr_count_offset_zero { get { return ResourceManager.GetString("substr_count_offset_zero", resourceCulture); } } /// /// Looks up a localized string similar to Length should be greater than 0. /// internal static string substr_count_zero_length { get { return ResourceManager.GetString("substr_count_zero_length", resourceCulture); } } /// /// Looks up a localized string similar to PhpFormatter does not support surrogate selectors.. /// internal static string surrogate_selector_unsupported { get { return ResourceManager.GetString("surrogate_selector_unsupported", resourceCulture); } } /// /// Looks up a localized string similar to String containg Unicode characters greater than '\u0800' are not supported. /// internal static string too_big_unicode_character { get { return ResourceManager.GetString("too_big_unicode_character", resourceCulture); } } /// /// Looks up a localized string similar to Too few arguments. /// internal static string too_few_arguments { get { return ResourceManager.GetString("too_few_arguments", resourceCulture); } } /// /// Looks up a localized string similar to Unenclosed bracket expression. /// internal static string unenclosed_bracket_expression { get { return ResourceManager.GetString("unenclosed_bracket_expression", resourceCulture); } } /// /// Looks up a localized string similar to expects parameter {0} to be {1}, {2} given. /// internal static string unexpected_arg_given { get { return ResourceManager.GetString("unexpected_arg_given", resourceCulture); } } /// /// Looks up a localized string similar to Unexpected character in the stream.. /// internal static string unexpected_character_in_stream { get { return ResourceManager.GetString("unexpected_character_in_stream", resourceCulture); } } /// /// Looks up a localized string similar to Unexpected end of stream.. /// internal static string unexpected_end_of_stream { get { return ResourceManager.GetString("unexpected_end_of_stream", resourceCulture); } } /// /// Looks up a localized string similar to Uninitialized string offset '{0}'. /// internal static string uninitialized_string_offset { get { return ResourceManager.GetString("uninitialized_string_offset", resourceCulture); } } /// /// Looks up a localized string similar to Unknown character class name. /// internal static string unknown_character_class { get { return ResourceManager.GetString("unknown_character_class", resourceCulture); } } /// /// Looks up a localized string similar to File type not recognized. /// internal static string unknown_file_type { get { return ResourceManager.GetString("unknown_file_type", resourceCulture); } } /// /// Looks up a localized string similar to Type '{0}': unknown format code. /// internal static string unknown_format_code { get { return ResourceManager.GetString("unknown_format_code", resourceCulture); } } /// /// Looks up a localized string similar to Configuration option '{0}' is not known. /// internal static string unknown_option { get { return ResourceManager.GetString("unknown_option", resourceCulture); } } /// /// Looks up a localized string similar to Serializer '{0}' is unknown. It hasn't been registered by any loaded library. /// internal static string unknown_serializer { get { return ResourceManager.GetString("unknown_serializer", resourceCulture); } } /// /// Looks up a localized string similar to Unknown time zone '{0}'. /// internal static string unknown_timezone { get { return ResourceManager.GetString("unknown_timezone", resourceCulture); } } /// /// Looks up a localized string similar to Unknown time zone '{0}' specified by 'TZ' environment variable. /// internal static string unknown_timezone_env { get { return ResourceManager.GetString("unknown_timezone_env", resourceCulture); } } /// /// Looks up a localized string similar to Unmatched [ in format string. /// internal static string unmathed_format_bracket { get { return ResourceManager.GetString("unmathed_format_bracket", resourceCulture); } } /// /// Looks up a localized string similar to {0} unused arguments. /// internal static string unused_arguments { get { return ResourceManager.GetString("unused_arguments", resourceCulture); } } /// /// Looks up a localized string similar to User session handler operation '{0}' failed (sid = '{1}', save_path = '{2}'). /// internal static string user_session_handler_failed { get { return ResourceManager.GetString("user_session_handler_failed", resourceCulture); } } /// /// Looks up a localized string similar to Using system time zone settings which may be inaccurate ('{0}' zone selected). /// internal static string using_implicit_timezone { get { return ResourceManager.GetString("using_implicit_timezone", resourceCulture); } } /// /// Looks up a localized string similar to . /// internal static string web_server_not_available { get { return ResourceManager.GetString("web_server_not_available", resourceCulture); } } /// /// Looks up a localized string similar to <?xml version="1.0" encoding="UTF-8" ?> ///<!-- document downloaded from http://unicode.org/repos/cldr/trunk/common/supplemental/windowsZones.xml --> ///<supplementalData> /// <windowsZones> /// <mapTimezones otherVersion="07dc0000" typeVersion="2012a"> /// /// <!-- (UTC-12:00) International Date Line West --> /// <mapZone other="Dateline Standard Time" territory="001" type="Etc/GMT+12"/> /// <mapZone other="Dateline Standard Time" territory="ZZ" type="Etc/GMT+12"/> /// /// <!-- (UTC-11:00) Coordinated Universal Time-11 --> /// [rest of string was truncated]";. /// internal static string WindowsTZ { get { return ResourceManager.GetString("WindowsTZ", resourceCulture); } } /// /// Looks up a localized string similar to Word boundary must be single bracket expression. /// internal static string word_boundary_not_single_bracket_expr { get { return ResourceManager.GetString("word_boundary_not_single_bracket_expr", resourceCulture); } } /// /// Looks up a localized string similar to The destination wrapper is different from the source one; use copy instead. /// internal static string wrappers_must_match { get { return ResourceManager.GetString("wrappers_must_match", resourceCulture); } } /// /// Looks up a localized string similar to Zero is not a valid argument number. /// internal static string zero_argument_invalid { get { return ResourceManager.GetString("zero_argument_invalid", resourceCulture); } } } } ================================================ FILE: Source/ClassLibrary/Strings.cs ================================================ /* Copyright (c) 2004-2006 Tomas Matousek and Ladislav Prosek. The use and distribution terms for this software are contained in the file named License.txt, which can be found in the root of the Phalanger distribution. By using this software in any fashion, you are agreeing to be bound by the terms of this license. You must not remove this notice from this software. */ /* GENERICS: Generic char map and hashtable will allow to handle all Unicode characters and get rid of the errors: contains Unicode characters greater than '\u0800'. TODO: - PHP6 - new functions hash($alg,...) hash_file($alg, ...) - Added overflow checks to wordwrap() function. (5.1.3) - Fixed offset/length parameter validation in substr_compare() function. (5.1.3) - (strncmp & strncasecmp do not return false on negative string length). (5.1.3) */ using System; using PHP.Core; using System.IO; using System.Text; using System.Collections; using System.Collections.Generic; using System.Security.Cryptography; using System.Text.RegularExpressions; using System.ComponentModel; #if SILVERLIGHT using PHP.CoreCLR; using System.Windows.Browser; #else using System.Web; using System.Diagnostics; #endif namespace PHP.Library { #region Enumerations /// Quote conversion options. [Flags] public enum QuoteStyle { /// /// Default quote style for htmlentities. /// HtmlEntitiesDefault = QuoteStyle.Compatible | QuoteStyle.Html401, /// Single quotes. SingleQuotes = 1, /// Double quotes. DoubleQuotes = 2, /// /// No quotes. /// Will leave both double and single quotes unconverted. /// [ImplementsConstant("ENT_NOQUOTES")] NoQuotes = 0, /// /// Will convert double-quotes and leave single-quotes alone. /// [ImplementsConstant("ENT_COMPAT")] Compatible = DoubleQuotes, /// /// Both single and double quotes. /// Will convert both double and single quotes. /// [ImplementsConstant("ENT_QUOTES")] BothQuotes = DoubleQuotes | SingleQuotes, /// /// Silently discard invalid code unit sequences instead of /// returning an empty string. Using this flag is discouraged /// as it may have security implications. /// [ImplementsConstant("ENT_IGNORE")] Ignore = 4, /// /// Replace invalid code unit sequences with a Unicode /// Replacement Character U+FFFD (UTF-8) or &#FFFD; /// (otherwise) instead of returning an empty string. /// [ImplementsConstant("ENT_SUBSTITUTE")] // 8 Substitute = 8, /// /// Handle code as HTML 4.01. /// [ImplementsConstant("ENT_HTML401")] // 0 Html401 = NoQuotes, /// /// Handle code as XML 1. /// [ImplementsConstant("ENT_XML1")] // 16 XML1 = 16, /// /// Handle code as XHTML. /// [ImplementsConstant("ENT_XHTML")] // 32 XHTML = 32, /// /// Handle code as HTML 5. /// [ImplementsConstant("ENT_HTML5")] // (16|32) HTML5 = XML1 | XHTML, /// /// Replace invalid code points for the given document type /// with a Unicode Replacement Character U+FFFD (UTF-8) or &#FFFD; /// (otherwise) instead of leaving them as is. /// This may be useful, for instance, to ensure the well-formedness /// of XML documents with embedded external content. /// [ImplementsConstant("ENT_DISALLOWED")] // 128 Disallowed = 128, }; /// Types of HTML entities tables. public enum HtmlEntitiesTable { /// Table containing special characters only. [ImplementsConstant("HTML_SPECIALCHARS")] SpecialChars = 0, /// Table containing all entities. [ImplementsConstant("HTML_ENTITIES")] AllEntities = 1 }; /// /// Type of padding. /// public enum PaddingType { /// Pad a string from the left. [ImplementsConstant("STR_PAD_LEFT")] Left = 0, /// Pad a string from the right. [ImplementsConstant("STR_PAD_RIGHT")] Right = 1, /// Pad a string from both sides. [ImplementsConstant("STR_PAD_BOTH")] Both = 2 } /// /// Format of a return value of method. Constants are not named in PHP. /// public enum WordCountResult { /// /// Return number of words in string. /// WordCount = 0, /// /// Return array of words. /// WordsArray = 1, /// /// Return positions to words mapping. /// PositionsToWordsMapping = 2 } #endregion /// /// Manipulates strings. /// /// public static class PhpStrings { #region Character map #if !SILVERLIGHT [ThreadStatic] #endif private static CharMap _charmap; /// /// Get clear to be used by current thread. . /// internal static CharMap InitializeCharMap() { CharMap result = _charmap; if (result == null) _charmap = result = new CharMap(0x0800); else result.ClearAll(); return result; } #endregion #region Binary Data Functions #region ord, chr, bin2hex, ord_unicode, chr_unicode, bin2hex_unicode, to_binary /// /// Returns ASCII code of the first character of a string of bytes. /// /// The string of bytes which the first byte will be returned. /// The ASCII code of [0] or zero if null or empty. [ImplementsFunction("ord")] [PureFunction] public static int Ord(PhpBytes bytes) { return (bytes == null || bytes.Length == 0) ? 0 : (int)bytes[0]; } /// /// Returns Unicode ordinal number of the first character of a string. /// /// The string which the first character's ordinal number is returned. /// The ordinal number of [0]. [ImplementsFunction("ord_unicode")] [PureFunction] public static int OrdUnicode(string str) { return (str == null || str == String.Empty) ? 0 : (int)str[0]; } /// /// Converts ordinal number of character to a binary string containing that character. /// /// The ASCII code. /// The character with ASCIT code. /// Current code-page is determined by the property. [ImplementsFunction("chr")] [PureFunction] public static PhpBytes Chr(int charCode) { return new PhpBytes(unchecked((byte)charCode)); } /// /// Converts ordinal number of Unicode character to a string containing that character. /// /// The ordinal number of character. /// The character with ordnial number. [ImplementsFunction("chr_unicode")] [PureFunction] public static string ChrUnicode(int charCode) { return unchecked((char)charCode).ToString(); } /// /// Converts a string of bytes into hexadecimal representation. /// /// The string of bytes. /// Concatenation of hexadecimal values of bytes of . /// /// The string "01A" is converted into string "303140" because ord('0') = 0x30, ord('1') = 0x31, ord('A') = 0x40. /// [ImplementsFunction("bin2hex")] [PureFunction] public static string BinToHex(PhpBytes bytes) { return (bytes == null) ? String.Empty : StringUtils.BinToHex(bytes.ReadonlyData, null); } /// /// Converts a string into hexadecimal representation. /// /// The string to be converted. /// /// The concatenated four-characters long hexadecimal numbers each representing one character of . /// [ImplementsFunction("bin2hex_unicode")] [PureFunction] public static string BinToHex(string str) { if (str == null) return null; int length = str.Length; StringBuilder result = new StringBuilder(length * 4, length * 4); result.Length = length * 4; const string hex_digs = "0123456789abcdef"; for (int i = 0; i < length; i++) { int c = (int)str[i]; result[4 * i + 0] = hex_digs[(c & 0xf000) >> 12]; result[4 * i + 1] = hex_digs[(c & 0x0f00) >> 8]; result[4 * i + 2] = hex_digs[(c & 0x00f0) >> 4]; result[4 * i + 3] = hex_digs[(c & 0x000f)]; } return result.ToString(); } /// /// Converts a variable to a string of binary data. /// /// A variable. /// Binary data. [ImplementsFunction("to_binary")] [PureFunction] public static PhpBytes ToBinary(PhpBytes var) { return var; } #endregion #region convert_cyr_string #region cyrWin1251 (1251), cyrCp866 (20866), cyrIso88595 (28595), cyrMac (10007) conversion tables /// /// Cyrillic translation table for Windows CP1251 character set. /// private static readonly byte[] cyrWin1251 = new byte[] { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15, 16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31, 32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47, 48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63, 64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79, 80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95, 96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111, 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127, 46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46, 46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46, 154,174,190,46,159,189,46,46,179,191,180,157,46,46,156,183, 46,46,182,166,173,46,46,158,163,152,164,155,46,46,46,167, 225,226,247,231,228,229,246,250,233,234,235,236,237,238,239,240, 242,243,244,245,230,232,227,254,251,253,255,249,248,252,224,241, 193,194,215,199,196,197,214,218,201,202,203,204,205,206,207,208, 210,211,212,213,198,200,195,222,219,221,223,217,216,220,192,209, 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15, 16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31, 32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47, 48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63, 64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79, 80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95, 96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111, 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,184,186,32,179,191,32,32,32,32,32,180,162,32, 32,32,32,168,170,32,178,175,32,32,32,32,32,165,161,169, 254,224,225,246,228,229,244,227,245,232,233,234,235,236,237,238, 239,255,240,241,242,243,230,226,252,251,231,248,253,249,247,250, 222,192,193,214,196,197,212,195,213,200,201,202,203,204,205,206, 207,223,208,209,210,211,198,194,220,219,199,216,221,217,215,218, }; /// /// Cyrillic translation table for CP866 character set. /// private static readonly byte[] cyrCp866 = new byte[] { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15, 16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31, 32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47, 48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63, 64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79, 80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95, 96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111, 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127, 225,226,247,231,228,229,246,250,233,234,235,236,237,238,239,240, 242,243,244,245,230,232,227,254,251,253,255,249,248,252,224,241, 193,194,215,199,196,197,214,218,201,202,203,204,205,206,207,208, 35,35,35,124,124,124,124,43,43,124,124,43,43,43,43,43, 43,45,45,124,45,43,124,124,43,43,45,45,124,45,43,45, 45,45,45,43,43,43,43,43,43,43,43,35,35,124,124,35, 210,211,212,213,198,200,195,222,219,221,223,217,216,220,192,209, 179,163,180,164,183,167,190,174,32,149,158,32,152,159,148,154, 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15, 16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31, 32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47, 48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63, 64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79, 80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95, 96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111, 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 205,186,213,241,243,201,32,245,187,212,211,200,190,32,247,198, 199,204,181,240,242,185,32,244,203,207,208,202,216,32,246,32, 238,160,161,230,164,165,228,163,229,168,169,170,171,172,173,174, 175,239,224,225,226,227,166,162,236,235,167,232,237,233,231,234, 158,128,129,150,132,133,148,131,149,136,137,138,139,140,141,142, 143,159,144,145,146,147,134,130,156,155,135,152,157,153,151,154, }; /// /// Cyrillic translation table for ISO88595 character set. /// private static readonly byte[] cyrIso88595 = new byte[] { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15, 16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31, 32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47, 48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63, 64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79, 80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95, 96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111, 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,179,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 225,226,247,231,228,229,246,250,233,234,235,236,237,238,239,240, 242,243,244,245,230,232,227,254,251,253,255,249,248,252,224,241, 193,194,215,199,196,197,214,218,201,202,203,204,205,206,207,208, 210,211,212,213,198,200,195,222,219,221,223,217,216,220,192,209, 32,163,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15, 16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31, 32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47, 48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63, 64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79, 80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95, 96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111, 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,241,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,161,32,32,32,32,32,32,32,32,32,32,32,32, 238,208,209,230,212,213,228,211,229,216,217,218,219,220,221,222, 223,239,224,225,226,227,214,210,236,235,215,232,237,233,231,234, 206,176,177,198,180,181,196,179,197,184,185,186,187,188,189,190, 191,207,192,193,194,195,182,178,204,203,183,200,205,201,199,202, }; /// /// Cyrillic translation table for Mac character set. /// private static readonly byte[] cyrMac = new byte[] { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15, 16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31, 32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47, 48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63, 64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79, 80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95, 96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111, 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127, 225,226,247,231,228,229,246,250,233,234,235,236,237,238,239,240, 242,243,244,245,230,232,227,254,251,253,255,249,248,252,224,241, 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175, 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191, 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143, 144,145,146,147,148,149,150,151,152,153,154,155,156,179,163,209, 193,194,215,199,196,197,214,218,201,202,203,204,205,206,207,208, 210,211,212,213,198,200,195,222,219,221,223,217,216,220,192,255, 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15, 16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31, 32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47, 48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63, 64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79, 80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95, 96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111, 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127, 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207, 208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223, 160,161,162,222,164,165,166,167,168,169,170,171,172,173,174,175, 176,177,178,221,180,181,182,183,184,185,186,187,188,189,190,191, 254,224,225,246,228,229,244,227,245,232,233,234,235,236,237,238, 239,223,240,241,242,243,230,226,252,251,231,248,253,249,247,250, 158,128,129,150,132,133,148,131,149,136,137,138,139,140,141,142, 143,159,144,145,146,147,134,130,156,155,135,152,157,153,151,154, }; #endregion /// /// Returns a Cyrillic translation table for a specified character set, /// /// The character set code. Can be one of 'k', 'w', 'i', 'a', 'd', 'm'. /// The translation table or null if no table is associated with given charset code. internal static byte[] GetCyrTableInternal(char code) { switch (Char.ToUpper(code)) { case 'W': return cyrWin1251; case 'A': case 'D': return cyrCp866; case 'I': return cyrIso88595; case 'M': return cyrMac; case 'K': return null; default: return ArrayUtils.EmptyBytes; } } /// /// Thrown if source or destination charset is invalid. [ImplementsFunction("convert_cyr_string")] public static PhpBytes ConvertCyrillic(PhpBytes bytes, string srcCharset, string dstCharset) { if (bytes == null) return null; if (bytes.Length == 0) return PhpBytes.Empty; // checks srcCharset argument: if (srcCharset == null || srcCharset == String.Empty) { PhpException.InvalidArgument("srcCharset", LibResources.GetString("arg:null_or_empty")); return PhpBytes.Empty; } // checks dstCharset argument: if (dstCharset == null || dstCharset == String.Empty) { PhpException.InvalidArgument("dstCharset", LibResources.GetString("arg:null_or_empty")); return PhpBytes.Empty; } // get and check source charset table: byte[] fromTable = GetCyrTableInternal(srcCharset[0]); if (fromTable != null && fromTable.Length < 256) { PhpException.Throw(PhpError.Warning, LibResources.GetString("invalid_src_charser")); return PhpBytes.Empty; } // get and check destination charset table: byte[] toTable = GetCyrTableInternal(dstCharset[0]); if (toTable != null && toTable.Length < 256) { PhpException.Throw(PhpError.Warning, LibResources.GetString("invalid_dst_charser")); return PhpBytes.Empty; } byte[] data = bytes.ReadonlyData; byte[] result = new byte[data.Length]; // perform conversion: if (fromTable == null) { if (toTable != null) { for (int i = 0; i < data.Length; i++) result[i] = toTable[data[i] + 256]; } } else { if (toTable == null) { for (int i = 0; i < data.Length; i++) result[i] = fromTable[data[i]]; } else { for (int i = 0; i < data.Length; i++) result[i] = toTable[fromTable[data[i]] + 256]; } } return new PhpBytes(result); } #endregion #region count_chars /// /// Creates a histogram of Unicode character occurence in the given string. /// /// The string to be processed. /// The array of characters frequency (unsorted). [ImplementsFunction("count_chars_unicode")] public static PhpArray CountChars(string str) { PhpArray count = new PhpArray(); for (int i = str.Length - 1; i >= 0; i--) { int j = (int)str[i]; object c = count[j]; count[j] = (c == null) ? 1 : (int)c + 1; } return count; } /// /// Creates a histogram of byte occurence in the given array of bytes. /// /// The array of bytes to be processed. /// The array of bytes frequency. public static int[] CountBytes(byte[] bytes) { if (bytes == null) throw new ArgumentNullException("bytes"); int[] count = new int[256]; for (int i = bytes.Length - 1; i >= 0; i--) count[bytes[i]]++; return count; } /// /// Creates a histogram of byte occurrence in specified string of bytes. /// /// Bytes to be processed. /// The array of characters frequency. [ImplementsFunction("count_chars")] public static PhpArray CountChars(PhpBytes bytes) { return (bytes == null) ? new PhpArray() : new PhpArray(CountBytes(bytes.ReadonlyData), 0, 256); } /// /// Creates a histogram of character occurence in a string or string of bytes. /// /// The string or bytes to be processed. /// Determines the type of result. /// Depending on the following is returned: /// /// 0an array with the character ordinals as key and their frequency as value, /// 1same as 0 but only characters with a frequency greater than zero are listed, /// 2same as 0 but only characters with a frequency equal to zero are listed, /// 3a string containing all used characters is returned, /// 4a string containing all not used characters is returned. /// /// /// The is invalid. /// The contains Unicode characters greater than '\u0800'. [ImplementsFunction("count_chars")] public static object CountChars(object data, int mode) { try { switch (mode) { case 0: return new PhpArray(CountBytes(Core.Convert.ObjectToPhpBytes(data).ReadonlyData), 0, 256); case 1: return new PhpArray(CountBytes(Core.Convert.ObjectToPhpBytes(data).ReadonlyData), 0, 256, 0, true); case 2: return new PhpArray(CountBytes(Core.Convert.ObjectToPhpBytes(data).ReadonlyData), 0, 256, 0, false); case 3: return GetBytesContained(Core.Convert.ObjectToPhpBytes(data), 0, 255); case 4: return GetBytesNotContained(Core.Convert.ObjectToPhpBytes(data), 0, 255); default: PhpException.InvalidArgument("mode"); return null; } } catch (IndexOutOfRangeException) { // thrown by char map: PhpException.Throw(PhpError.Warning, LibResources.GetString("too_big_unicode_character")); return null; } } /// /// Returns a containing all characters used in the specified . /// /// The string to process. /// The lower limit for returned chars. /// The upper limit for returned chars. /// /// The string containing characters used in which are sorted according to their ordinal values. /// /// contains characters greater than '\u0800'. public static string GetCharactersContained(string str, char lower, char upper) { CharMap charmap = InitializeCharMap(); charmap.Add(str); return charmap.ToString(lower, upper, false); } /// /// Returns a containing all characters used in the specified . /// /// The string to process. /// The lower limit for returned chars. /// The upper limit for returned chars. /// /// The string containing characters used in which are sorted according to their ordinal values. /// /// contains characters greater than '\u0800'. public static string GetCharactersNotContained(string str, char lower, char upper) { CharMap charmap = InitializeCharMap(); charmap.Add(str); return charmap.ToString(lower, upper, true); } private static BitArray CreateByteMap(PhpBytes/*!*/ bytes, out int count) { BitArray map = new BitArray(256); map.Length = 256; count = 0; for (int i = 0; i < bytes.Length; i++) { if (!map[bytes[i]]) { map[bytes[i]] = true; count++; } } return map; } public static PhpBytes GetBytesContained(PhpBytes bytes, byte lower, byte upper) { if (bytes == null) bytes = PhpBytes.Empty; int count; BitArray map = CreateByteMap(bytes, out count); byte[] result = new byte[count]; int j = 0; for (int i = lower; i <= upper; i++) { if (map[i]) result[j++] = (byte)i; } return new PhpBytes(result); } public static PhpBytes GetBytesNotContained(PhpBytes bytes, byte lower, byte upper) { if (bytes == null) bytes = PhpBytes.Empty; int count; BitArray map = CreateByteMap(bytes, out count); byte[] result = new byte[map.Length - count]; int j = 0; for (int i = lower; i <= upper; i++) { if (!map[i]) result[j++] = (byte)i; } return new PhpBytes(result); } #endregion #region crypt (CLR only) #if !SILVERLIGHT /// /// Specifies whether standard DES algorithm is implemented. /// We set it to 1, but it's not really true - our DES encryption is nothing like PHP's, so the values will be different /// If you want key compatibility with PHP, use CRYPT_MD5 by passing in a key starting with "?1?" /// [ImplementsConstant("CRYPT_STD_DES")] public const int CryptStandardDES = 1; /// /// Specifies whether extended DES algorithm is implemented. /// [ImplementsConstant("CRYPT_EXT_DES")] public const int CryptExtendedDES = 0; /// /// Specifies whether MD5 algorithm is implemented. /// [ImplementsConstant("CRYPT_MD5")] public const int CryptMD5 = 1; /// /// Specifies whether Blowfish encryption is implemented. /// [ImplementsConstant("CRYPT_BLOWFISH")] public const int CryptBlowfish = 0; /// /// Specifies the length of the salt applicable to the method. /// [ImplementsConstant("CRYPT_SALT_LENGTH")] public const int CryptSaltLength = 9; /// /// Encrypts a string (one-way) with a random key. /// /// The string to encrypt. /// The encrypted string. [ImplementsFunction("crypt")] public static PhpBytes Encrypt(PhpBytes str) { return Encrypt(str, null); } private const int MaxMD5Key = 12; private const int InternalMD5Key = 8; private const int MaxKeyLength = MaxMD5Key; private const int MaxDESKey = 8; public static bool ByteArrayEquals(byte[] array1, byte[] array2, int compareLength) { // If the other object is null, of a diffent type, or // of an array of a different length then skip out now. if ((array2 == null) || (array1 == null) || (compareLength <= 0 && (array1.Length != array2.Length))) return false; int minArray = Math.Min(array1.Length, array2.Length); if (compareLength <= 0) compareLength = minArray; else compareLength = Math.Min(minArray, compareLength); // If any of the elements are not equal, skip out. for (int i = 0; i < compareLength; ++i) if (array1[i] != array2[i]) return false; // They're both the same length and the elements are all // equal so consider the arrays to be equal. return true; } //PHP's non-standard base64 used in converting md5 binary crypt() into chars //0 ... 63 => ascii - 64 //aka bin_to_ascii ((c) >= 38 ? ((c) - 38 + 'a') : (c) >= 12 ? ((c) - 12 + 'A') : (c) + '.') private static byte[] itoa64 = System.Text.Encoding.ASCII.GetBytes("./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"); private static void to64(MemoryStream stream, UInt32 v, int n) { while (--n >= 0) { stream.WriteByte(itoa64[v & 0x3f]); v >>= 6; } } private static byte[] MD5MagicString = System.Text.Encoding.ASCII.GetBytes("$1$"); private static PhpBytes DoMD5Password(byte[] key, PhpBytes password) { MD5CryptoServiceProvider ctx = new MD5CryptoServiceProvider(), ctx1 = new MD5CryptoServiceProvider(); MemoryStream result = new MemoryStream(); byte[] final = new byte[16]; int startOffset = 0, endOffset = 0; /* If it starts with the magic string, then skip that */ if (ByteArrayEquals(key, MD5MagicString, MD5MagicString.Length)) startOffset += MD5MagicString.Length; /* It stops at the first '$', max InternalMD5Key chars */ for (endOffset = startOffset; key[endOffset] != '\0' && key[endOffset] != '$' && endOffset < (startOffset + InternalMD5Key); ++endOffset) continue; int keyLength = endOffset - startOffset; // PHP puts the relevant salt characters in the beginning result.Write(MD5MagicString, 0, MD5MagicString.Length); result.Write(key, startOffset, keyLength); result.Write(System.Text.Encoding.ASCII.GetBytes(new char[] { '$' }), 0, 1); ctx.Initialize(); /* The password first, since that is what is most unknown */ ctx.TransformBlock(password.ReadonlyData, 0, password.Length, null, 0); ctx.TransformBlock(MD5MagicString, 0, MD5MagicString.Length, null, 0); ctx.TransformBlock(key, startOffset, keyLength, null, 0); ctx1.Initialize(); /* Then just as many characters of the MD5(pw,salt,pw) */ ctx1.TransformBlock(password.ReadonlyData, 0, password.Length, null, 0); ctx1.TransformBlock(key, startOffset, keyLength, null, 0); ctx1.TransformFinalBlock(password.ReadonlyData, 0, password.Length); Array.Copy(ctx1.Hash, final, final.Length); for (int pl = password.Length; pl > 0; pl -= 16) ctx.TransformBlock(final, 0, pl > 16 ? 16 : pl, null, 0); //Clear the data for (int i = 0; i < final.Length; ++i) final[i] = 0; // "Then something really weird...", per zend PHP - what a ridiculous waste of CPU cycles byte[] zeroByte = new byte[1] { 0 }; for (int i = password.Length; i != 0; i >>= 1) { if ((i & 1) != 0) ctx.TransformBlock(zeroByte, 0, 1, null, 0); else ctx.TransformBlock(password.ReadonlyData, 0, 1, null, 0); } ctx.TransformFinalBlock(ArrayUtils.EmptyBytes, 0, 0); Array.Copy(ctx.Hash, final, final.Length); /* Per md5crypt.c, again ridiculous but we want to keep consistent " * And now, just to make sure things don't run too fast. On a 60 MHz * Pentium this takes 34 msec, so you would need 30 seconds to build * a 1000 entry dictionary... " */ for (int i = 0; i < 1000; ++i) { ctx1.Initialize(); if ((i & 1) != 0) ctx1.TransformBlock(password.ReadonlyData, 0, password.Length, null, 0); else ctx1.TransformBlock(final, 0, final.Length, null, 0); if ((i % 3) != 0) ctx1.TransformBlock(key, startOffset, keyLength, null, 0); if ((i % 7) != 0) ctx1.TransformBlock(password.ReadonlyData, 0, password.Length, null, 0); if ((i & 1) != 0) ctx1.TransformFinalBlock(final, 0, final.Length); else ctx1.TransformFinalBlock(password.ReadonlyData, 0, password.Length); Array.Copy(ctx1.Hash, final, final.Length); } to64(result, ((UInt32)final[0] << 16) | ((UInt32)final[6] << 8) | (UInt32)final[12], 4); to64(result, ((UInt32)final[1] << 16) | ((UInt32)final[7] << 8) | (UInt32)final[13], 4); to64(result, ((UInt32)final[2] << 16) | ((UInt32)final[8] << 8) | (UInt32)final[14], 4); to64(result, ((UInt32)final[3] << 16) | ((UInt32)final[9] << 8) | (UInt32)final[15], 4); to64(result, ((UInt32)final[4] << 16) | ((UInt32)final[10] << 8) | (UInt32)final[5], 4); to64(result, (UInt32)final[11], 2); return new PhpBytes(result.ToArray()); } /// /// Encrypts a string (one-way) with given key. /// /// The string of bytes to encrypt /// The key. /// The encrypted string. [ImplementsFunction("crypt")] public static PhpBytes Encrypt(PhpBytes str, PhpBytes salt) { if (str == null) str = PhpBytes.Empty; Stream stream = new System.IO.MemoryStream(str.ReadonlyData); bool usemd5 = (salt == null) || (salt.Length == 0) || ByteArrayEquals(salt.ReadonlyData, MD5MagicString, MD5MagicString.Length); int requiredKeyLength = usemd5 ? MaxMD5Key : MaxDESKey; byte[] key = new byte[requiredKeyLength]; int saltLength = requiredKeyLength; DES des = new DESCryptoServiceProvider(); // prepare the key if salt is provided: if ((salt != null) && (salt.Length > 0)) { //Fill with $'s first, same as zend PHP Array.Copy(System.Text.Encoding.ASCII.GetBytes(new String('$', requiredKeyLength)), key, requiredKeyLength); saltLength = System.Math.Min(requiredKeyLength, salt.Length); Array.Copy(salt.ReadonlyData, key, saltLength); } else Array.Copy(des.Key, key, InternalMD5Key); //Random 8-byte sequence if (usemd5) { return DoMD5Password(key, str); } else { MemoryStream result = new MemoryStream(); des.IV = new byte[8]; des.Key = key; ICryptoTransform transform = des.CreateEncryptor(des.Key, des.IV); CryptoStream cs = new CryptoStream(stream, transform, CryptoStreamMode.Read); // PHP puts the relevant salt characters in the beginning result.Write(key, 0, saltLength); byte[] buffer = new byte[256]; int rd; while ((rd = cs.Read(buffer, 0, buffer.Length)) > 0) { int i; for (i = 0; i < rd; ++i) { switch (i % 3) { case 0: result.WriteByte(itoa64[buffer[i] >> 2]); break; case 1: result.WriteByte(itoa64[((buffer[i - 1] & 0x3) << 4) | (buffer[i] >> 4)]); break; case 2: result.WriteByte(itoa64[((buffer[i - 1] & 0xF) << 2) | (buffer[i] >> 6)]); result.WriteByte(itoa64[buffer[i] & 0x3F]); break; } } //Leftover bits switch (i % 3) { case 1: result.WriteByte(itoa64[((buffer[i - 1] & 0x3) << 4)]); break; case 2: result.WriteByte(itoa64[((buffer[i - 1] & 0xF) << 2)]); break; } } return new PhpBytes(result.ToArray()); } } #endif #endregion #endregion #region strrev, strspn, strcspn /// /// Reverses the given string. /// /// The string to be reversed. /// The reversed string or empty string if is null. [ImplementsFunction("strrev")] [PureFunction] public static object Reverse(object obj) { PhpBytes bytes; if ((bytes = obj as PhpBytes) != null) { return Reverse(bytes); } else { return Reverse(PHP.Core.Convert.ObjectToString(obj)); } } internal static PhpBytes Reverse(PhpBytes bytes) { int length; if ((length = bytes.Length) == 0) return PhpBytes.Empty; byte[] reversed = new byte[length]; byte[] data = bytes.ReadonlyData; for (int i = 0, j = length - 1; j >= 0; j--, i++) reversed[i] = data[j]; return new PhpBytes(reversed); } internal static string Reverse(string str) { if (String.IsNullOrEmpty(str)) return String.Empty; int length = str.Length; StringBuilder result = new StringBuilder(length, length); result.Length = length; for (int i = 0, j = length - 1; j >= 0; j--, i++) result[i] = str[j]; return result.ToString(); } /// /// Finds a length of an initial segment consisting entirely of specified characters. /// /// The string to be searched in. /// Accepted characters. /// /// The length of the initial segment consisting entirely of characters in /// or zero if any argument is null. /// [ImplementsFunction("strspn")] public static int StrSpn(string str, string acceptedChars) { return StrSpnInternal(str, acceptedChars, 0, int.MaxValue, false); } /// /// Finds a length of a segment consisting entirely of specified characters. /// /// The string to be searched in. /// Accepted characters. /// The relativized offset of the first item of the slice. /// /// The length of the substring consisting entirely of characters in or /// zero if any argument is null. Search starts from absolutized /// (see where length is infinity). /// [ImplementsFunction("strspn")] public static int StrSpn(string str, string acceptedChars, int offset) { return StrSpnInternal(str, acceptedChars, offset, int.MaxValue, false); } /// /// Finds a length of a segment consisting entirely of specified characters. /// /// The string to be searched in. /// Accepted characters. /// The relativized offset of the first item of the slice. /// The relativized length of the slice. /// /// The length of the substring consisting entirely of characters in or /// zero if any argument is null. Search starts from absolutized /// (see and takes at most absolutized characters. /// [ImplementsFunction("strspn")] public static int StrSpn(string str, string acceptedChars, int offset, int length) { return StrSpnInternal(str, acceptedChars, offset, length, false); } /// /// Finds a length of an initial segment consisting entirely of any characters excpept for specified ones. /// /// The string to be searched in. /// Accepted characters. /// /// The length of the initial segment consisting entirely of characters not in /// or zero if any argument is null. /// [ImplementsFunction("strcspn")] public static int StrCSpn(string str, string acceptedChars) { return StrSpnInternal(str, acceptedChars, 0, int.MaxValue, true); } /// /// Finds a length of a segment consisting entirely of any characters excpept for specified ones. /// /// The string to be searched in. /// Accepted characters. /// The relativized offset of the first item of the slice. /// /// The length of the substring consisting entirely of characters not in or /// zero if any argument is null. Search starts from absolutized /// (see where length is infinity). /// [ImplementsFunction("strcspn")] public static int StrCSpn(string str, string acceptedChars, int offset) { return StrSpnInternal(str, acceptedChars, offset, int.MaxValue, true); } /// /// Finds a length of a segment consisting entirely of any characters except for specified ones. /// /// The string to be searched in. /// Accepted characters. /// The relativized offset of the first item of the slice. /// The relativized length of the slice. /// /// The length of the substring consisting entirely of characters not in or /// zero if any argument is null. Search starts from absolutized /// (see and takes at most absolutized characters. /// [ImplementsFunction("strcspn")] public static int StrCSpn(string str, string acceptedChars, int offset, int length) { return StrSpnInternal(str, acceptedChars, offset, length, true); } /// /// Internal version of (complement off) and (complement on). /// internal static int StrSpnInternal(string str, string acceptedChars, int offset, int length, bool complement) { if (str == null || acceptedChars == null) return 0; PhpMath.AbsolutizeRange(ref offset, ref length, str.Length); char[] chars = acceptedChars.ToCharArray(); Array.Sort(chars); int j = offset; if (complement) { while (length > 0 && ArrayUtils.BinarySearch(chars, str[j]) < 0) { j++; length--; } } else { while (length > 0 && ArrayUtils.BinarySearch(chars, str[j]) >= 0) { j++; length--; } } return j - offset; } #endregion #region explode, implode /// /// Splits a string by string separators. /// /// The substrings separator. Must not be empty. /// The string to be split. /// The array of strings. [ImplementsFunction("explode")] [return: CastToFalse] public static PhpArray Explode(string separator, string str) { return Explode(separator, str, Int32.MaxValue); } /// /// Splits a string by string separators with limited resulting array size. /// /// The substrings separator. Must not be empty. /// The string to be split. /// /// The maximum number of elements in the resultant array. Zero value is treated in the same way as 1. /// If negative, then the number of separators found in the string + 1 is added to the limit. /// /// The array of strings. /// /// If is empty an array consisting of exacty one empty string is returned. /// If is zero /// /// Thrown if the is null or empty or if is not positive nor -1. [ImplementsFunction("explode")] [return: CastToFalse] public static PhpArray Explode(string separator, string str, int limit) { // validate parameters: if (String.IsNullOrEmpty(separator)) { PhpException.InvalidArgument("separator", LibResources.GetString("arg:null_or_empty")); return null; } if (str == null) str = String.Empty; bool last_part_is_the_rest = limit >= 0; if (limit == 0) limit = 1; else if (limit < 0) limit += SubstringCountInternal(str, separator, 0, str.Length) + 2; // splits by : int sep_len = separator.Length; int i = 0; // start searching at this position int pos; // found separator's first character position PhpArray result = new PhpArray(); // creates integer-keyed array with default capacity var/*!*/compareInfo = System.Globalization.CultureInfo.InvariantCulture.CompareInfo; while (--limit > 0) { pos = compareInfo.IndexOf(str, separator, i, str.Length - i, System.Globalization.CompareOptions.Ordinal); if (pos < 0) break; // not found result.AddToEnd(str.Substring(i, pos - i)); // faster than Add() i = pos + sep_len; } // Adds last chunk. If separator ends the string, it will add empty string (as PHP do). if (i <= str.Length && last_part_is_the_rest) { result.AddToEnd(str.Substring(i)); } return result; } /// /// Concatenates items of an array into a string separating them by a glue. /// /// The array to be impleded. /// The glued string. [ImplementsFunction("join")] public static object JoinGeneric(PhpArray pieces) { return ImplodeGeneric(pieces); } /// /// Concatenates items of an array into a string separating them by a glue. /// /// The array to be impleded. /// The glue string. /// The glued string. /// Thrown if neither nor is not null and of type . [ImplementsFunction("join")] public static object JoinGeneric(object glue, object pieces) { return ImplodeGeneric(glue, pieces); } /// /// Concatenates items of an array into a string. /// /// The to be imploded. /// The glued string. [ImplementsFunction("implode")] public static object ImplodeGeneric(PhpArray pieces) { if (pieces == null) { PhpException.ArgumentNull("pieces"); return null; } return Implode("", pieces); } /// /// Concatenates items of an array into a string separating them by a glue. /// /// The glue of type or to be imploded. /// The to be imploded or glue of type . /// The glued string. /// Thrown if neither nor is not null and of type . [ImplementsFunction("implode")] public static object ImplodeGeneric(object glue, object pieces) { if (pieces != null && pieces.GetType() == typeof(PhpArray)) return Implode(glue, (PhpArray)pieces); if (glue != null && glue.GetType() == typeof(PhpArray)) return Implode(pieces, (PhpArray)glue); return ImplodeGenericEnumeration(glue, pieces); } private static object ImplodeGenericEnumeration(object glue, object pieces) { Core.Reflection.DObject dobj; IEnumerable enumerable; if ((dobj = pieces as Core.Reflection.DObject) != null && (enumerable = dobj.RealObject as IEnumerable) != null) return Implode(glue, new PhpArray(enumerable)); if ((dobj = glue as Core.Reflection.DObject) != null && (enumerable = dobj.RealObject as IEnumerable) != null) return Implode(pieces, new PhpArray(enumerable)); // PhpException.InvalidArgument("pieces"); return null; } /// /// Concatenates items of an array into a string separating them by a glue. /// /// The glue string. /// The enumeration to be imploded. /// The glued string. /// /// Items of are converted to strings in the manner of PHP /// (i.e. by ). /// /// Thrown if is null. public static object Implode(object glue, PhpArray/*!*/pieces) { Debug.Assert(pieces != null); // handle empty pieces: if (pieces.Count == 0) return string.Empty; // check whether we have to preserve a binary string bool binary = glue != null && glue.GetType() == typeof(PhpBytes); if (!binary) // try to find any binary string within pieces: using (var x = pieces.GetFastEnumerator()) while (x.MoveNext()) if (x.CurrentValue != null && x.CurrentValue.GetType() == typeof(PhpBytes)) { binary = true; break; } // concatenate pieces and glue: bool not_first = false; // not the first iteration if (binary) { Debug.Assert(pieces.Count > 0); PhpBytes gluebytes = PHP.Core.Convert.ObjectToPhpBytes(glue); PhpBytes[] piecesBytes = new PhpBytes[pieces.Count + pieces.Count - 1]; // buffer of PhpBytes to be concatenated int p = 0; using (var x = pieces.GetFastEnumerator()) while (x.MoveNext()) { if (not_first) piecesBytes[p++] = gluebytes; else not_first = true; piecesBytes[p++] = PHP.Core.Convert.ObjectToPhpBytes(x.CurrentValue); } return PhpBytes.Concat(piecesBytes, 0, piecesBytes.Length); } else { string gluestr = PHP.Core.Convert.ObjectToString(glue); StringBuilder result = new StringBuilder(); using (var x = pieces.GetFastEnumerator()) while (x.MoveNext()) { if (not_first) result.Append(gluestr); else not_first = true; result.Append(PHP.Core.Convert.ObjectToString(x.CurrentValue)); } return result.ToString(); } } #endregion #region strtr, str_rot13 /// /// Replaces specified characters in a string with another ones. /// /// A string where to do the replacement. /// Characters to be replaced. /// Characters to replace those in with. /// /// A copy of with all occurrences of each character in /// replaced by the corresponding character in . /// /// /// If and are different lengths, the extra characters /// in the longer of the two are ignored. /// [ImplementsFunction("strtr")] [PureFunction] public static string Translate(string str, string from, string to) { if (String.IsNullOrEmpty(str) || from == null || to == null) return String.Empty; int min_length = Math.Min(from.Length, to.Length); Dictionary ht = new Dictionary(min_length); // adds chars to the hashtable: for (int i = 0; i < min_length; i++) ht[from[i]] = to[i]; // creates result builder: StringBuilder result = new StringBuilder(str.Length, str.Length); result.Length = str.Length; // translates: for (int i = 0; i < str.Length; i++) { char c = str[i]; char h; result[i] = ht.TryGetValue(c, out h) ? h : c; // obsolete: // object h = ht[c]; // result[i] = (h==null) ? c : h; } return result.ToString(); } /// /// Compares objects according to the length of their string representation /// as the primary criteria and the alphabetical order as the secondary one. /// private sealed class StringLengthComparer : IComparer { /// /// Performs length and alphabetical comparability backwards (longer first). /// /// /// /// public int Compare(string x, string y) { int rv = x.Length - y.Length; if (rv == 0) return -string.CompareOrdinal(x, y); else return -rv; } } /// /// Replaces substrings according to a dictionary. /// /// Input string. /// /// An dictionary that contains to replacement mapping. /// /// A copy of str, replacing all substrings (looking for the longest possible match). /// This function will not try to replace stuff that it has already worked on. /// Thrown if the argument is null. [ImplementsFunction("strtr")] [return: CastToFalse] public static string Translate(string str, PhpArray replacePairs) { if (replacePairs == null) { PhpException.ArgumentNull("replacePairs"); return null; } if (string.IsNullOrEmpty(str)) return String.Empty; // sort replacePairs according to the key length, longer first var count = replacePairs.Count; var sortedkeys = new string[count]; var sortedValues = new string[count]; int i = 0; var replacePairsEnum = replacePairs.GetFastEnumerator(); while (replacePairsEnum.MoveNext()) { string key = replacePairsEnum.CurrentKey.ToString(); string value = Core.Convert.ObjectToString(replacePairsEnum.CurrentValue); if (key.Length == 0) { // TODO: an exception ? return null; } sortedkeys[i] = key; sortedValues[i] = value; i++; } Array.Sort(sortedkeys, sortedValues, new StringLengthComparer()); // perform quick sort, much faster than SortedList // perform replacement StringBuilder result = new StringBuilder(str); StringBuilder temp = new StringBuilder(str); int length = str.Length; int[] offset = new int[length]; for (i = 0; i < sortedkeys.Length; i++) { var key = sortedkeys[i]; int index = 0; while ((index = temp.ToString().IndexOf(key, index, StringComparison.Ordinal)) >= 0) // ordinal search, because of exotic Unicode characters are find always at the beginning of the temp { var value = sortedValues[i]; var keyLength = key.Length; int replaceAtIndex = index + offset[index]; // replace occurrence in result result.Replace(index + offset[index], keyLength, value); // Pack the offset array (drop the items removed from temp) for (int j = index + keyLength; j < offset.Length; j++) offset[j - keyLength] = offset[j]; // Ensure that we don't replace stuff that we already have worked on by // removing the replaced substring from temp. temp.Remove(index, keyLength); for (int j = index; j < length; j++) offset[j] += value.Length; } } return result.ToString(); } /// /// GetUserEntryPoint encode a string by shifting every letter (a-z, A-Z) by 13 places in the alphabet. /// /// The string to be encoded. /// The string with characters rotated by 13 places. [ImplementsFunction("str_rot13")] [PureFunction] public static string Rotate13(string str) { return Translate(str, "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ", "nopqrstuvwxyzabcdefghijklmNOPQRSTUVWXYZABCDEFGHIJKLM"); } #endregion #region substr, str_repeat /// /// Retrieves a substring from the given string. /// /// The source string (unicode or binary). /// The relativized offset of the first item of the slice. /// The substring of the . /// /// See for details about where length is infinity. /// [ImplementsFunction("substr")] [PureFunction] [return: CastToFalse] public static object Substring(object str, int offset) { return Substring(str, offset, int.MaxValue); } /// /// Retrieves a substring from the given string. /// /// The source string (unicode or binary). /// The relativized offset of the first item of the slice. /// The relativized length of the slice. /// The substring of the . /// /// See for details about and . /// [ImplementsFunction("substr")] [PureFunction] [return: CastToFalse] public static object Substring(object str, int offset, int length) { PhpBytes binstr = str as PhpBytes; if (binstr != null) { if (binstr.Length == 0) return null; PhpMath.AbsolutizeRange(ref offset, ref length, binstr.Length); // string is shorter than offset to start substring if (offset == binstr.Length) return null; if (length == 0) return PhpBytes.Empty; byte[] substring = new byte[length]; Buffer.BlockCopy(binstr.ReadonlyData, offset, substring, 0, length); return new PhpBytes(substring); } string unistr = Core.Convert.ObjectToString(str); if (unistr != null) { if (unistr == String.Empty) return null; PhpMath.AbsolutizeRange(ref offset, ref length, unistr.Length); // string is shorter than offset to start substring if (offset == unistr.Length) return null; if (length == 0) return String.Empty; return unistr.Substring(offset, length); } return null; } /// /// Repeats a string. /// /// The input string, can be both binary and unicode. /// The number of times should be repeated. /// The string where is repeated times. /// If is null reference, the function will return an empty string. /// If is set to 0, the function will return null reference. /// Thrown if is negative. [ImplementsFunction("str_repeat")] [PureFunction] public static object Repeat(object str, int count) { if (str == null) return String.Empty; if (count < 0) { PhpException.Throw(PhpError.Warning, LibResources.GetString("number_of_repetitions_negative")); return null; } if (count == 0) return null; PhpBytes binstr = str as PhpBytes; if (binstr != null) { byte[] result = new byte[binstr.Length * count]; for (int i = 0; i < count; i++) Buffer.BlockCopy(binstr.ReadonlyData, 0, result, binstr.Length * i, binstr.Length); return new PhpBytes(result); } string unistr = Core.Convert.ObjectToString(str); if (unistr != null) { StringBuilder result = new StringBuilder(count * unistr.Length); while (count-- > 0) result.Append(unistr); return result.ToString(); } return null; } #endregion #region substr_count, substr_replace, substr_compare #region substr_count internals private static bool SubstringCountInternalCheck(string needle) { if (String.IsNullOrEmpty(needle)) { PhpException.InvalidArgument("needle", LibResources.GetString("arg:null_or_empty")); return false; } return true; } private static bool SubstringCountInternalCheck(string haystack, int offset) { if (offset < 0) { PhpException.InvalidArgument("offset", LibResources.GetString("substr_count_offset_zero")); return false; } if (offset > haystack.Length) { PhpException.InvalidArgument("offset", LibResources.GetString("substr_count_offset_exceeds", offset)); return false; } return true; } private static bool SubstringCountInternalCheck(string haystack, int offset, int length) { if (!SubstringCountInternalCheck(haystack, offset)) return false; if (length == 0) { PhpException.InvalidArgument("length", LibResources.GetString("substr_count_zero_length")); return false; } if (offset + length > haystack.Length) { PhpException.InvalidArgument("length", LibResources.GetString("substr_count_length_exceeds", length)); return false; } return true; } /// /// Count the number of substring occurrences. Expects correct argument values. /// internal static int SubstringCountInternal(string/*!*/ haystack, string/*!*/ needle, int offset, int end) { int result = 0; if (needle.Length == 1) { while (offset < end) { if (haystack[offset] == needle[0]) result++; offset++; } } else { while ((offset = haystack.IndexOf(needle, offset, end - offset)) != -1) { offset += needle.Length; result++; } } return result; } #endregion /// /// See . /// [ImplementsFunction("substr_count")] [PureFunction] [return: CastToFalse] public static int SubstringCount(string haystack, string needle) { if (String.IsNullOrEmpty(haystack)) return 0; if (!SubstringCountInternalCheck(needle)) return -1; return SubstringCountInternal(haystack, needle, 0, haystack.Length); } /// /// See . /// [ImplementsFunction("substr_count")] [PureFunction] [return: CastToFalse] public static int SubstringCount(string haystack, string needle, int offset) { if (String.IsNullOrEmpty(haystack)) return 0; if (!SubstringCountInternalCheck(needle)) return -1; if (!SubstringCountInternalCheck(haystack, offset)) return -1; return SubstringCountInternal(haystack, needle, offset, haystack.Length); } /// /// Count the number of substring occurrences. /// /// The string. /// The substring. /// The relativized offset of the first item of the slice. Zero if missing in overloads /// The relativized length of the slice. Infinity if missing in overloads. /// The number of occurences in . /// "aba" has one occurence in "ababa". /// /// See for details about and . /// /// Thrown if is null. [ImplementsFunction("substr_count")] [PureFunction] [return: CastToFalse] public static int SubstringCount(string haystack, string needle, int offset, int length) { if (String.IsNullOrEmpty(haystack)) return 0; if (!SubstringCountInternalCheck(needle)) return -1; if (!SubstringCountInternalCheck(haystack, offset, length)) return -1; return SubstringCountInternal(haystack, needle, offset, offset + length); } /// /// See . /// [ImplementsFunction("substr_replace")] [PureFunction] public static object SubstringReplace(object subject, object replacement, object offset) { return SubstringReplace(subject, replacement, offset, int.MaxValue); } /// /// Replaces a portion of a string or multiple strings with another string. /// /// The subject of replacement (can be an array of subjects). /// The replacement string (can be array of replacements). /// The relativized offset of the first item of the slice (can be array of offsets). /// The relativized length of the slice (can be array of lengths). /// /// Either the with a substring replaced by if it is a string /// or an array containing items of the with substrings replaced by /// and indexed by integer keys starting from 0. If is an array, multiple replacements take place. /// /// /// See for details about and . /// Missing is considered to be infinity. /// If and conversion results in position /// less than or equal to zero and greater than or equal to string length, the replacement is prepended and appended, respectively. /// [ImplementsFunction("substr_replace")] [PureFunction] public static object SubstringReplace(object subject, object replacement, object offset, object length) { IDictionary dict_subject, dict_replacement, dict_offset, dict_length; string[] replacements = null, subjects = null; int[] offsets = null, lengths = null; int int_offset = 0, int_length = 0; string str_replacement = null; // prepares string array of subjects: if ((dict_subject = subject as IDictionary) != null) { subjects = new string[dict_subject.Count]; int i = 0; foreach (object item in dict_subject.Values) subjects[i++] = Core.Convert.ObjectToString(item); } else { subjects = new string[] { Core.Convert.ObjectToString(subject) }; } // prepares string array of replacements: if ((dict_replacement = replacement as IDictionary) != null) { replacements = new string[dict_replacement.Count]; int i = 0; foreach (object item in dict_replacement.Values) replacements[i++] = Core.Convert.ObjectToString(item); } else { str_replacement = Core.Convert.ObjectToString(replacement); } // prepares integer array of offsets: if ((dict_offset = offset as IDictionary) != null) { offsets = new int[dict_offset.Count]; int i = 0; foreach (object item in dict_offset.Values) offsets[i++] = Core.Convert.ObjectToInteger(item); } else { int_offset = Core.Convert.ObjectToInteger(offset); } // prepares integer array of lengths: if ((dict_length = length as IDictionary) != null) { lengths = new int[dict_length.Count]; int i = 0; foreach (object item in dict_length.Values) lengths[i++] = Core.Convert.ObjectToInteger(item); } else { int_length = Core.Convert.ObjectToInteger(length); } for (int i = 0; i < subjects.Length; i++) { if (dict_offset != null) int_offset = (i < offsets.Length) ? offsets[i] : 0; if (dict_length != null) int_length = (i < lengths.Length) ? lengths[i] : subjects[i].Length; if (dict_replacement != null) str_replacement = (i < replacements.Length) ? replacements[i] : ""; subjects[i] = SubstringReplace(subjects[i], str_replacement, int_offset, int_length); } if (dict_subject != null) return new PhpArray(subjects); else return subjects[0]; } /// /// Performs substring replacements on subject. /// private static string SubstringReplace(string subject, string replacement, int offset, int length) { PhpMath.AbsolutizeRange(ref offset, ref length, subject.Length); return new StringBuilder(subject).Remove(offset, length).Insert(offset, replacement).ToString(); } /// /// Case sensitive comparison of from position /// with . /// /// . [ImplementsFunction("substr_compare")] [PureFunction] public static int SubstringCompare(string mainStr, string str, int offset) { return SubstringCompare(mainStr, str, offset, Int32.MaxValue, false); } /// /// Case sensitive comparison of from position /// with up to the characters. /// /// . [ImplementsFunction("substr_compare")] [PureFunction] public static int SubstringCompare(string mainStr, string str, int offset, int length) { return SubstringCompare(mainStr, str, offset, length, false); } /// /// Compares substrings. /// /// A string whose substring to compare with . /// The second operand of the comparison. /// An offset in where to start. Negative value means zero. Offsets beyond means its length. /// A maximal number of characters to compare. Non-positive values means infinity. /// Whether to ignore case. [ImplementsFunction("substr_compare")] [PureFunction] public static int SubstringCompare(string mainStr, string str, int offset, int length, bool ignoreCase) { if (mainStr == null) mainStr = ""; if (str == null) str = ""; if (length <= 0) length = Int32.MaxValue; if (offset < 0) offset = 0; if (offset > mainStr.Length) offset = mainStr.Length; return String.Compare(mainStr, offset, str, 0, length, ignoreCase ? StringComparison.CurrentCultureIgnoreCase : StringComparison.CurrentCulture); } #endregion #region str_replace, str_ireplace #region ReplaceInternal /// /// A class that enables customized replacement of substrings. /// Optimized for multiple replacements. /// internal class SubstringReplacer { private Regex regex; private int count; private MatchEvaluator evaluator; private string replacement; private string search; public SubstringReplacer(string/*!*/ search, string/*!*/ replacement, bool ignoreCase) { Debug.Assert(!string.IsNullOrEmpty(search), "Searched string shouln't be empty"); if (ignoreCase) { this.regex = new Regex(Regex.Escape(search), RegexOptions.CultureInvariant | RegexOptions.IgnoreCase | RegexOptions.Singleline); this.evaluator = new MatchEvaluator(Evaluator); } this.search = search; this.replacement = replacement; } /// /// Called for each matched substring. /// /// Replacement. private string Evaluator(Match match) { count++; return replacement; } /// /// Replaces all substrings of specified in constructor parameter search /// with . If is non-negative, /// advances it by the number of replacements. Retuns resulting string. /// public string Replace(string/*!*/ subject, ref int replacementCount) { string result; if (regex == null) { if (replacementCount >= 0) replacementCount += SubstringCountInternal(subject, search, 0, subject.Length); if (search.Length != 1 || replacement.Length != 1) result = subject.Replace(search, replacement); else result = subject.Replace(search[0], replacement[0]); } else { this.count = 0; result = regex.Replace(subject, evaluator); if (replacementCount >= 0) replacementCount += this.count; } return result; } } /* /// /// Get enumeration of given parameter. /// /// Single object or IDictionary of objects. /// IEnumerable of object/objects. private static IEnumerable ValuesEnumerator(object objOrDictionary) { IDictionary dict; if ((dict = objOrDictionary as IDictionary) != null) return dict.Values; else return new object[] { objOrDictionary ?? string.Empty }; } */ private class InifiniteEnumerator : IEnumerator { private readonly object obj; public InifiniteEnumerator(object obj) { this.obj = obj; } #region IEnumerator Members public object Current { get { return obj; } } public bool MoveNext() { return true; } public void Reset() { } #endregion } internal static string ReplaceInternal(string/*!*/search, string replace, string/*!*/subject, bool ignoreCase, ref int count) { SubstringReplacer replacer = new SubstringReplacer(search, replace, ignoreCase); return replacer.Replace(subject, ref count); } internal static string ReplaceInternal(IEnumerable searches, IEnumerator replacements_enum, string/*!*/subject, bool ignoreCase, ref int count) { //IEnumerator replacements_enum = replacements.GetEnumerator(); foreach (object s in searches) { string search_str = Core.Convert.ObjectToString(s); string replacement_str = (replacements_enum.MoveNext()) ? Core.Convert.ObjectToString(replacements_enum.Current) : string.Empty; if (search_str != string.Empty) { SubstringReplacer replacer = new SubstringReplacer(search_str, replacement_str, ignoreCase); subject = replacer.Replace(subject, ref count); if (subject == string.Empty) break; } } return subject; } internal static PhpArray ReplaceInternal(string search, string replace, ref DictionaryEntry[] subjects, bool ignoreCase, ref int count) { SubstringReplacer replacer = new SubstringReplacer(search, replace, ignoreCase); PhpArray result = new PhpArray(); foreach (var entry in subjects) { // subjects has already been converted to CLR strings: string subject_str = entry.Value as string; result.Add(entry.Key, string.IsNullOrEmpty(subject_str) ? entry.Value : replacer.Replace(subject_str, ref count)); } return result; } internal static PhpArray ReplaceInternal(IEnumerable searches, IEnumerator replacements_enum, ref DictionaryEntry[] subjects, bool ignoreCase, ref int count) { // performs replacement - subjects are enumerated once per each search-replacement pair; // this order of loops enables to reuse instances of SubstringReplacer: //IEnumerator replacements_enum = replacements.GetEnumerator(); foreach (object s in searches) { string search_str = Core.Convert.ObjectToString(s); string replacement_str = (replacements_enum.MoveNext()) ? Core.Convert.ObjectToString(replacements_enum.Current) : string.Empty; // skips empty strings: if (search_str != string.Empty) { SubstringReplacer replacer = new SubstringReplacer(search_str, replacement_str, ignoreCase); for (int i = 0; i < subjects.Length; i++) { // subjects has already been converted to CLR strings: string subject_str = subjects[i].Value as string; if (subject_str != null) { subjects[i].Value = replacer.Replace(subject_str, ref count); } } } } // copy into PhpArray return ToPhpArray(ref subjects); } /// /// Convert array of DictionaryEntry into PhpArray. /// /// /// internal static PhpArray ToPhpArray(ref DictionaryEntry[]/*!*/subjects) { Debug.Assert(subjects != null); var result = new PhpArray(subjects.Length); foreach (var entry in subjects) result.Add(entry.Key, entry.Value); return result; } ///// ///// Returns first item from values of given collection converted to string or empty string. ///// ///// ///// //internal static string FirstOrEmpty(IDictionary/*!*/dict) //{ // if (dict.Count > 0) // { // var dict_enum = dict.Values.GetEnumerator(); // if (dict_enum.MoveNext()) // return Core.Convert.ObjectToString(dict_enum.Current); // } // return string.Empty; //} /// /// Implements str_replace and str_ireplace functions. /// internal static object ReplaceInternal(object search, object replace, object subject, bool ignoreCase, ref int count) { if (subject == null) return null; IDictionary searches = search as IDictionary; IDictionary replacements = replace as IDictionary; IDictionary subjects = subject as IDictionary; // // several cases of search/replace/subject combinations // if (subjects == null) { // string str_replace(..., ... , {string}, ...) string subject_str = Core.Convert.ObjectToString(subject); if (subject_str == string.Empty) return string.Empty; if (searches == null) { string search_str = Core.Convert.ObjectToString(search); if (search_str == string.Empty) return subject_str; //// //if (replacements == null)// str_replace({string},{string},{string},...); // return ReplaceInternal(search_str, Core.Convert.ObjectToString(replace), subject_str, ignoreCase, ref count); //else// str_replace({string},{array}[0],{string},...); // return ReplaceInternal(search_str, FirstOrEmpty(replacements), subject_str, ignoreCase, ref count); return ReplaceInternal(search_str, Core.Convert.ObjectToString(replace), subject_str, ignoreCase, ref count); } else { if (replacements == null)// str_replace({array},{string[1]},{string},...); return ReplaceInternal(searches.Values, new InifiniteEnumerator(Core.Convert.ObjectToString(replace)), subject_str, ignoreCase, ref count); else// str_replace({array},{array},{string},...); return ReplaceInternal(searches.Values, replacements.Values.GetEnumerator(), subject_str, ignoreCase, ref count); } } else { // converts scalars (and nulls) to strings: var subjectEntries = new DictionaryEntry[subjects.Count]; int i = 0; foreach (DictionaryEntry entry in subjects) { subjectEntries[i] = entry; if (PhpVariable.IsScalar(entry.Value)) subjectEntries[i].Value = Core.Convert.ObjectToString(entry.Value); else if (entry.Value == null) subjectEntries[i].Value = string.Empty; i++; } // PhpArray str_replace(..., ... , {array}, ...) if (searches == null) { string search_str = Core.Convert.ObjectToString(search); if (search_str == string.Empty) return ToPhpArray(ref subjectEntries); //// //if (replacements == null)// str_replace({string},{string},{array},...); // return ReplaceInternal(search_str, Core.Convert.ObjectToString(replace), ref subjectEntries, ignoreCase, ref count); //else// str_replace({string},{array}[0],{array},...); // return ReplaceInternal(search_str, FirstOrEmpty(replacements), ref subjectEntries, ignoreCase, ref count); return ReplaceInternal(search_str, Core.Convert.ObjectToString(replace), ref subjectEntries, ignoreCase, ref count); } else { if (replacements == null)// str_replace({array},{string[1]},{array},...); return ReplaceInternal(searches.Values, new InifiniteEnumerator(Core.Convert.ObjectToString(replace)), ref subjectEntries, ignoreCase, ref count); else// str_replace({array},{array},{array},...); return ReplaceInternal(searches.Values, replacements.Values.GetEnumerator(), ref subjectEntries, ignoreCase, ref count); } } /* // // previous (common) implementation: // // assembles a dictionary of subject strings: bool return_array; DictionaryEntry[] subjects; IDictionary dict; if ((dict = subject as IDictionary) != null) { subjects = new DictionaryEntry[dict.Count]; // converts scalars to strings: int i = 0; foreach (DictionaryEntry entry in dict) { subjects[i] = entry; if (PhpVariable.IsScalar(entry.Value)) subjects[i].Value = Core.Convert.ObjectToString(entry.Value); i++; } return_array = true; } else { subjects = new DictionaryEntry[] { new DictionaryEntry(string.Empty, Core.Convert.ObjectToString(subject)) }; return_array = false; } // performs replacement - subjects are enumerated once per each search-replacement pair; // this order of loops enables to reuse instances of SubstringReplacer: IEnumerator replacements_enum = replacements.GetEnumerator(); foreach (object s in searches) { string search_str = Core.Convert.ObjectToString(s); string replacement_str = (replacements_enum.MoveNext()) ? Core.Convert.ObjectToString(replacements_enum.Current) : string.Empty; ReplaceInplace(search_str, replacement_str, ref subjects, ignoreCase, ref count); } // constructs resulting array or single item from subjects: if (return_array) { PhpArray result = new PhpArray(); foreach (DictionaryEntry entry in subjects) result.Add(entry.Key, entry.Value); return result; } else { return subjects[0].Value; }*/ } #endregion /// /// Replaces all occurrences of the string /// with the string counting the number of occurrences. /// /// /// The substring(s) to replace. Can be string or of strings. /// /// /// The string(s) to replace . Can be string or of strings. /// /// /// The string or of strings to perform the search and replace with. /// /// /// The number of matched and replaced occurrences. /// /// /// A string or an with all occurrences of /// in replaced /// with the given value. /// [ImplementsFunction("str_replace")] [PureFunction] public static object Replace(object searched, object replacement, object subject, out int count) { count = 0; return ReplaceInternal(searched, replacement, subject, false, ref count); } /// /// Replaces all occurrences of the string /// with the string. /// /// [ImplementsFunction("str_replace")] [PureFunction] public static object Replace(object searched, object replacement, object subject) { int count = -1; return ReplaceInternal(searched, replacement, subject, false, ref count); } /// /// Case insensitive version of . /// [ImplementsFunction("str_ireplace")] [PureFunction] public static object ReplaceInsensitively(object searched, object replacement, object subject, out int count) { count = 0; return ReplaceInternal(searched, replacement, subject, true, ref count); } /// /// Case insensitive version of . /// [ImplementsFunction("str_ireplace")] [PureFunction] public static object ReplaceInsensitively(object searched, object replacement, object subject) { int count = -1; return ReplaceInternal(searched, replacement, subject, true, ref count); } #endregion #region str_shuffle, str_split /// /// Randomly shuffles a string. /// /// The string to shuffle. /// One random permutation of . [ImplementsFunction("str_shuffle")] public static string Shuffle(string str) { if (str == null) return String.Empty; Random generator = PhpMath.Generator; int count = str.Length; if (count <= 1) return str; StringBuilder newstr = new StringBuilder(str); // Takes n-th character from the string at random with probability 1/i // and exchanges it with the one on the i-th position. // Thus a random permutation is formed in the second part of the string (from i to count) // and the set of remaining characters is stored in the first part. for (int i = count - 1; i > 0; i--) { int n = generator.Next(i + 1); char ch = newstr[i]; newstr[i] = newstr[n]; newstr[n] = ch; } return newstr.ToString(); } /// /// Converts a string to an array. /// /// The string to split. /// An array with keys being character indeces and values being characters. [ImplementsFunction("str_split")] [return: CastToFalse] public static PhpArray Split(string str) { return Split(str, 1); } /// /// Converts a string to an array. /// /// The string to split. /// Length of chunks should be split into. /// An array with keys being chunk indeces and values being chunks of /// length. /// The parameter is not positive (Warning). [ImplementsFunction("str_split")] [return: CastToFalse] public static PhpArray Split(object obj, int splitLength) { if (splitLength < 1) { PhpException.Throw(PhpError.Warning, LibResources.GetString("segment_length_not_positive")); return null; } if (obj == null) return new PhpArray(); PhpBytes bytes; if ((bytes = obj as PhpBytes) != null) { int length = bytes.Length; PhpArray result = new PhpArray(length / splitLength + 1, 0); // add items of length splitLength int i; for (i = 0; i < (length - splitLength + 1); i += splitLength) { byte[] chunk = new byte[splitLength]; Array.Copy(bytes.ReadonlyData, i, chunk, 0, chunk.Length); result.Add(new PhpBytes(chunk)); } // add the last item if (i < length) { byte[] chunk = new byte[length - i]; Array.Copy(bytes.ReadonlyData, i, chunk, 0, chunk.Length); result.Add(new PhpBytes(chunk)); } return result; } else { return Split(PHP.Core.Convert.ObjectToString(obj), splitLength); } } private static PhpArray Split(string str, int splitLength) { int length = str.Length; PhpArray result = new PhpArray(length / splitLength + 1, 0); // add items of length splitLength int i; for (i = 0; i < (length - splitLength + 1); i += splitLength) { result.Add(str.Substring(i, splitLength)); } // add the last item if (i < length) result.Add(str.Substring(i)); return result; } #endregion #region quoted_printable_decode, quoted_printable_encode /// /// Maximum length of line according to quoted-printable specification. /// internal const int PHP_QPRINT_MAXL = 75; /// /// Converts a quoted-printable string into (an 8-bit) string. /// /// The quoted-printable string. /// The 8-bit string corresponding to the decoded . /// Based on the implementation in quot_print.c PHP source file. [ImplementsFunction("quoted_printable_decode")] public static string QuotedPrintableDecode(string str) { if (str == null) return String.Empty; Encoding encoding = Configuration.Application.Globalization.PageEncoding; MemoryStream stream = new MemoryStream(); StringBuilder result = new StringBuilder(str.Length / 2); int i = 0; while (i < str.Length) { char c = str[i]; if (c == '=') { if (i + 2 < str.Length && Uri.IsHexDigit(str[i + 1]) && Uri.IsHexDigit(str[i + 2])) { stream.WriteByte((byte)((Uri.FromHex(str[i + 1]) << 4) + Uri.FromHex(str[i + 2]))); i += 3; } else // check for soft line break according to RFC 2045 { int k = 1; // Possibly, skip spaces/tabs at the end of line while (i + k < str.Length && (str[i + k] == ' ' || str[i + k] == '\t')) k++; // End of line reached if (i + k >= str.Length) { i += k; } else if (str[i + k] == '\r' && i + k + 1 < str.Length && str[i + k + 1] == '\n') { // CRLF i += k + 2; } else if (str[i + k] == '\r' || str[i + k] == '\n') { // CR or LF i += k + 1; } else { // flush stream if (stream.Position > 0) { result.Append(encoding.GetChars(stream.GetBuffer(), 0, (int)stream.Position)); stream.Seek(0, SeekOrigin.Begin); } result.Append(str[i++]); } } } else { // flush stream if (stream.Position > 0) { result.Append(encoding.GetChars(stream.GetBuffer(), 0, (int)stream.Position)); stream.Seek(0, SeekOrigin.Begin); } result.Append(c); i++; } } // flush stream if (stream.Position > 0) { result.Append(encoding.GetChars(stream.GetBuffer(), 0, (int)stream.Position)); stream.Seek(0, SeekOrigin.Begin); } return result.ToString(); } /// /// Convert a 8 bit string to a quoted-printable string /// /// The input string. /// The quoted-printable string. /// Based on the implementation in quot_print.c PHP source file. [ImplementsFunction("quoted_printable_encode")] public static string QuotedPrintableEncode(string str) { if (str == null) return String.Empty; Encoding encoding = Configuration.Application.Globalization.PageEncoding; MemoryStream stream = new MemoryStream(); StringBuilder result = new StringBuilder(3 * str.Length + 3 * (((3 * str.Length) / PHP_QPRINT_MAXL) + 1)); string hex = "0123456789ABCDEF"; byte[] bytes = new byte[encoding.GetMaxByteCount(1)]; int encodedChars; int i = 0; int j = 0; int charsOnLine = 0; char c; while (i < str.Length) { c = str[i]; if (c == '\r' && i + 1 < str.Length && str[i + 1] == '\n') { result.Append("\r\n"); charsOnLine = 0; i += 2; } else { if (char.IsControl(c) || c >= 0x7F || // is not ascii char (c == '=') || ((c == ' ') && i + 1 < str.Length && (str[i + 1] == '\r'))) { if ((charsOnLine += 3) > PHP_QPRINT_MAXL) { result.Append("=\r\n"); charsOnLine = 3; } // encode c(==str[i]) encodedChars = encoding.GetBytes(str, i, 1, bytes, 0); for (j = 0; j < encodedChars; ++j) { result.Append('='); result.Append(hex[bytes[j] >> 4]); result.Append(hex[bytes[j] & 0xf]); } } else { if ((++charsOnLine) > PHP_QPRINT_MAXL) { result.Append("=\r\n"); charsOnLine = 1; } result.Append(c); } ++i; } } return result.ToString(); } #endregion #region addslashes, addcslashes, quotemeta /// /// Adds backslashes before characters depending on current configuration. /// /// Data to process. /// /// The string or string of bytes where some characters are preceded with the backslash character. /// /// /// If ("magic_quotes_sybase" in PHP) option /// is set then '\0' characters are slashed and single quotes are replaced with two single quotes. Otherwise, /// '\'', '"', '\\' and '\0 characters are slashed. /// [ImplementsFunction("addslashes")] public static string AddSlashes(string str) { ScriptContext context = ScriptContext.CurrentContext; if (context.Config.Variables.QuoteInDbManner) return StringUtils.AddDbSlashes(str); else return StringUtils.AddCSlashes(str, true, true); } /// /// Thrown if interval is invalid. [ImplementsFunction("addcslashes_unicode")] public static string AddCSlashes(string str, string mask) { if (str == null) return String.Empty; if (mask == null) return str; return AddCSlashesInternal(str, str, mask); } /// /// Thrown if interval is invalid. [ImplementsFunction("addcslashes")] public static string AddCSlashesAscii(string str, string mask) { if (string.IsNullOrEmpty(str)) return String.Empty; if (string.IsNullOrEmpty(mask)) return str; //Encoding encoding = Configuration.Application.Globalization.PageEncoding; //// to guarantee the same result both the string and the mask has to be converted to bytes: //string c = ArrayUtils.ToString(encoding.GetBytes(mask)); //string s = ArrayUtils.ToString(encoding.GetBytes(str)); string c = Encoding.ASCII.GetString(Encoding.ASCII.GetBytes(mask)); string s = Encoding.ASCII.GetString(Encoding.ASCII.GetBytes(str)); // the result contains ASCII characters only, so there is no need to conversions: return AddCSlashesInternal(str, s, c); } /// A sequence of chars or ints from which to take character codes. /// A mask containing codes. /// A string to be slashed. /// interval is invalid. /// contains Unicode characters greater than '\u0800'. internal static string AddCSlashesInternal(string str, string translatedStr, string translatedMask) { Debug.Assert(str != null && translatedMask != null && translatedStr != null && str.Length == translatedStr.Length); // prepares the mask: CharMap charmap = InitializeCharMap(); try { charmap.AddUsingMask(translatedMask); } catch (IndexOutOfRangeException) { PhpException.Throw(PhpError.Warning, LibResources.GetString("too_big_unicode_character")); return null; } const string cslashed_chars = "abtnvfr"; StringBuilder result = new StringBuilder(); for (int i = 0; i < str.Length; i++) { //char c = translatedStr[i]; if (charmap.Contains(translatedStr[i])) { result.Append('\\'); char c = str[i]; // J: translatedStr and translatedMask are used only in context of CharMap, later we are working with original str only // performs conversion to C representation: if (c < '\u0020' || c > '\u007f') { if (c >= '\u0007' && c <= '\u000d') result.Append(cslashed_chars[c - '\u0007']); else result.Append(System.Convert.ToString((int)c, 8)); // 0x01234567 } else result.Append(c); } else result.Append(str[i]); } return result.ToString(); } /// /// A map of following characters: {'.', '\', '+', '*', '?', '[', '^', ']', '(', '$', ')'}. /// internal static readonly CharMap metaCharactersMap = new CharMap(new uint[] { 0, 0x08f20001, 0x0000001e }); /// /// Adds backslashes before following characters: {'.', '\', '+', '*', '?', '[', '^', ']', '(', '$', ')'} /// /// The string to be processed. /// The string where said characters are backslashed. [ImplementsFunction("quotemeta")] public static string QuoteMeta(string str) { if (str == null) return String.Empty; int length = str.Length; StringBuilder result = new StringBuilder(length); for (int i = 0; i < length; i++) { char c = str[i]; if (metaCharactersMap.Contains(c)) result.Append('\\'); result.Append(c); } return result.ToString(); } #endregion #region stripslashes, stripcslashes /// /// Unquote string quoted with . /// /// The string to unquote. /// The unquoted string. [ImplementsFunction("stripslashes")] public static string StripSlashes(string str) { ScriptContext context = ScriptContext.CurrentContext; if (context.Config.Variables.QuoteInDbManner) return StringUtils.StripDbSlashes(str); else return StringUtils.StripCSlashes(str); } /// /// Returns a string with backslashes stripped off. Recognizes \a, \b, \f, \n, \r, \t, \v, \\, octal /// and hexadecimal representation. /// /// The string to strip. /// The stripped string. [ImplementsFunction("stripcslashes")] public static string StripCSlashesAscii(string str) { if (str == null) return String.Empty; Encoding encoding = Configuration.Application.Globalization.PageEncoding; const char escape = '\\'; int length = str.Length; StringBuilder result = new StringBuilder(length); bool state1 = false; byte[] bA1 = new byte[1]; for (int i = 0; i < length; i++) { char c = str[i]; if (c == escape && state1 == false) { state1 = true; continue; } if (state1 == true) { switch (c) { case 'a': result.Append('\a'); break; case 'b': result.Append('\b'); break; case 'f': result.Append('\f'); break; case 'n': result.Append('\n'); break; case 'r': result.Append('\r'); break; case 't': result.Append('\t'); break; case 'v': result.Append('\v'); break; case '\\': result.Append('\\'); break; // hex ASCII code case 'x': { int code = 0; if (i + 1 < length && Uri.IsHexDigit(str[i + 1])) // first digit { code = Uri.FromHex(str[i + 1]); i++; if (i + 1 < length && Uri.IsHexDigit(str[i + 1])) // second digit { code = (code << 4) + Uri.FromHex(str[i + 1]); i++; } bA1[0] = (byte)code; result.Append(encoding.GetChars(bA1)[0]); break; } goto default; } // octal ASCII code default: { int code = 0, j = 0; for (; j < 3 && i < length && str[i] >= '0' && str[i] <= '8'; i++, j++) { code = (code << 3) + (str[i] - '0'); } if (j > 0) { i--; bA1[0] = (byte)code; result.Append(encoding.GetChars(bA1)[0]); } else result.Append(c); break; } } state1 = false; } else result.Append(c); } return result.ToString(); } #endregion #region htmlspecialchars, htmlspecialchars_decode /// /// Converts special characters to HTML entities. /// /// The string to convert. /// The converted string. [ImplementsFunction("htmlspecialchars")] public static string HtmlSpecialCharsEncode(string str) { return HtmlSpecialCharsEncode(str, 0, str.Length, QuoteStyle.Compatible, "ISO-8859-1"); } /// /// Converts special characters to HTML entities. /// /// The string to convert. /// Quote conversion. /// The converted string. [ImplementsFunction("htmlspecialchars")] public static string HtmlSpecialCharsEncode(string str, QuoteStyle quoteStyle) { return HtmlSpecialCharsEncode(str, 0, str.Length, quoteStyle, "ISO-8859-1"); } /// /// Converts special characters to HTML entities. /// /// The string to convert. /// Quote conversion. /// The character set used in conversion. This parameter is ignored. /// The converted string. [ImplementsFunction("htmlspecialchars")] public static string HtmlSpecialCharsEncode(string str, QuoteStyle quoteStyle, string charSet) { return HtmlSpecialCharsEncode(str, 0, str.Length, quoteStyle, charSet); } /// /// Converts special characters to HTML entities. /// /// The string to convert. /// Quote conversion. /// The character set used in conversion. This parameter is ignored. /// When double_encode is turned off PHP will not encode existing html entities, the default is to convert everything. /// The converted string. [ImplementsFunction("htmlspecialchars")] public static string HtmlSpecialCharsEncode(string str, QuoteStyle quoteStyle, string charSet, bool doubleEncode /* = true */) { if (!doubleEncode) PhpException.ArgumentValueNotSupported("doubleEncode", doubleEncode); // TODO: is doubleEncode is false return HtmlSpecialCharsEncode(str, 0, str.Length, quoteStyle, charSet); } /// /// Converts special characters of substring to HTML entities. /// /// The string. /// First character of the string to covert. /// Length of the substring to covert. /// The converted substring. internal static string HtmlSpecialChars(string str, int index, int length) { return HtmlSpecialCharsEncode(str, index, length, QuoteStyle.Compatible, "ISO-8859-1"); } /// /// Converts special characters of substring to HTML entities. /// /// The string. /// First character of the string to covert. /// Length of the substring to covert. /// Quote conversion. /// The character set used in conversion. This parameter is ignored. /// The converted substring. internal static string HtmlSpecialCharsEncode(string str, int index, int length, QuoteStyle quoteStyle, string charSet) { if (str == null) return String.Empty; Debug.Assert(index + length <= str.Length); StringBuilder result = new StringBuilder(length); // quote style is anded to emulate PHP behavior (any value is allowed): string single_quote = (quoteStyle & QuoteStyle.SingleQuotes) != 0 ? "'" : "'"; string double_quote = (quoteStyle & QuoteStyle.DoubleQuotes) != 0 ? """ : "\""; for (int i = index; i < index + length; i++) { char c = str[i]; switch (c) { case '&': result.Append("&"); break; case '"': result.Append(double_quote); break; case '\'': result.Append(single_quote); break; case '<': result.Append("<"); break; case '>': result.Append(">"); break; default: result.Append(c); break; } } return result.ToString(); } /// /// Converts HTML entities (&amp;, &quot;, &lt;, and &gt;) /// in a specified string to the respective characters. /// /// The string to be converted. /// String with converted entities. [ImplementsFunction("htmlspecialchars_decode")] public static string HtmlSpecialCharsDecode(string str) { return HtmlSpecialCharsDecode(str, QuoteStyle.Compatible); } /// /// Converts HTML entities (&amp;, &lt;, &gt;, and optionally &quot; and &#039;) /// in a specified string to the respective characters. /// /// The string to be converted. /// Which quote entities to convert. /// String with converted entities. [ImplementsFunction("htmlspecialchars_decode")] public static string HtmlSpecialCharsDecode(string str, QuoteStyle quoteStyle) { if (str == null) return null; StringBuilder result = new StringBuilder(str.Length); bool dq = (quoteStyle & QuoteStyle.DoubleQuotes) != 0; bool sq = (quoteStyle & QuoteStyle.SingleQuotes) != 0; int i = 0; while (i < str.Length) { char c = str[i]; if (c == '&') { i++; if (i + 4 < str.Length && str[i + 4] == ';') // quot; #039; { if (dq && str[i] == 'q' && str[i + 1] == 'u' && str[i + 2] == 'o' && str[i + 3] == 't') { i += 5; result.Append('"'); continue; } if (sq && str[i] == '#' && str[i + 1] == '0' && str[i + 2] == '3' && str[i + 3] == '9') { i += 5; result.Append('\''); continue; } } if (i + 3 < str.Length && str[i + 3] == ';') // amp; #39; { if (str[i] == 'a' && str[i + 1] == 'm' && str[i + 2] == 'p') { i += 4; result.Append('&'); continue; } if (sq && str[i] == '#' && str[i + 1] == '3' && str[i + 2] == '9') { i += 4; result.Append('\''); continue; } } if (i + 2 < str.Length && str[i + 2] == ';' && str[i + 1] == 't') // lt; gt; { if (str[i] == 'l') { i += 3; result.Append('<'); continue; } if (str[i] == 'g') { i += 3; result.Append('>'); continue; } } } else { i++; } result.Append(c); } return result.ToString(); } #endregion #region htmlentities, get_html_translation_table, html_entity_decode /// /// Default encoding used in htmlentities. /// private const string DefaultHtmlEntitiesCharset = "UTF-8"; /// /// Converts special characters to HTML entities. /// /// The string to convert. /// The converted string. /// This method is identical to in all ways, except with /// htmlentities (), all characters that have HTML character entity equivalents are /// translated into these entities. [ImplementsFunction("htmlentities")] public static string EncodeHtmlEntities(object str) { return EncodeHtmlEntities(str, QuoteStyle.HtmlEntitiesDefault, DefaultHtmlEntitiesCharset, true); } /// /// Converts special characters to HTML entities. /// /// The string to convert. /// Quote conversion. /// The converted string. /// This method is identical to in all ways, except with /// htmlentities (), all characters that have HTML character entity equivalents are /// translated into these entities. [ImplementsFunction("htmlentities")] public static string EncodeHtmlEntities(object str, QuoteStyle quoteStyle) { return EncodeHtmlEntities(str, quoteStyle, DefaultHtmlEntitiesCharset, true); } /// /// Converts special characters to HTML entities. /// /// The string to convert. /// Quote conversion. /// The character set used in conversion. /// The converted string. /// This method is identical to in all ways, except with /// htmlentities (), all characters that have HTML character entity equivalents are /// translated into these entities. [ImplementsFunction("htmlentities")] public static string EncodeHtmlEntities(object str, QuoteStyle quoteStyle, string charSet) { return EncodeHtmlEntities(str, quoteStyle, charSet, true); } /// /// Converts special characters to HTML entities. /// /// The string to convert. /// Quote conversion. /// The character set used in conversion. This parameter is ignored. /// When it is turned off existing HTML entities will not be encoded. The default is to convert everything. /// The converted string. /// This method is identical to in all ways, except with /// htmlentities (), all characters that have HTML character entity equivalents are /// translated into these entities. [ImplementsFunction("htmlentities")] public static string EncodeHtmlEntities(object str, QuoteStyle quoteStyle, string charSet, bool doubleEncode) { try { var s = ObjectToString(str, charSet); return EncodeHtmlEntities(s, quoteStyle, doubleEncode); } catch (ArgumentException ex) { PhpException.Throw(PhpError.Warning, ex.Message); return string.Empty; } } private static string EncodeHtmlEntities(string str, QuoteStyle quoteStyle, bool doubleEncode) { if (string.IsNullOrEmpty(str)) return string.Empty; if (!doubleEncode) { // existing HTML entities will not be double encoded // TODO: do it nicely str = DecodeHtmlEntities(str, quoteStyle); } // if only double quotes should be encoded, we can use HttpUtility.HtmlEncode right away: if ((quoteStyle & QuoteStyle.BothQuotes) == QuoteStyle.DoubleQuotes) { return HttpUtility.HtmlEncode(str); } // quote style is anded to emulate PHP behavior (any value is allowed): string single_quote = (quoteStyle & QuoteStyle.SingleQuotes) != 0 ? "'" : "'"; string double_quote = (quoteStyle & QuoteStyle.DoubleQuotes) != 0 ? """ : "\""; StringBuilder str_builder = new StringBuilder(str.Length); StringWriter result = new StringWriter(str_builder); // convert ' and " manually, rely on HttpUtility.HtmlEncode for everything else char[] quotes = new char[] { '\'', '\"' }; int old_index = 0, index = 0; while (index < str.Length && (index = str.IndexOfAny(quotes, index)) >= 0) { result.Write(HttpUtility.HtmlEncode(str.Substring(old_index, index - old_index))); if (str[index] == '\'') result.Write(single_quote); else result.Write(double_quote); old_index = ++index; } if (old_index < str.Length) result.Write(HttpUtility.HtmlEncode(str.Substring(old_index))); result.Flush(); return str_builder.ToString(); } /// /// Returns the translation table used by and . /// /// Type of the table that should be returned. /// The table. [ImplementsFunction("get_html_translation_table")] public static PhpArray GetHtmlTranslationTable(HtmlEntitiesTable table) { return GetHtmlTranslationTable(table, QuoteStyle.Compatible); } /// /// Returns the translation table used by and . /// /// Type of the table that should be returned. /// Quote conversion. /// The table. [ImplementsFunction("get_html_translation_table")] public static PhpArray GetHtmlTranslationTable(HtmlEntitiesTable table, QuoteStyle quoteStyle) { PhpArray result = new PhpArray(); if (table == HtmlEntitiesTable.SpecialChars) { // return the table used with HtmlSpecialChars if ((quoteStyle & QuoteStyle.SingleQuotes) != 0) result.Add("\'", "'"); if ((quoteStyle & QuoteStyle.DoubleQuotes) != 0) result.Add("\"", """); result.Add("&", "&"); result.Add("<", "<"); result.Add(">", ">"); } else { // return the table used with HtmlEntities if ((quoteStyle & QuoteStyle.SingleQuotes) != 0) result.Add("\'", "'"); if ((quoteStyle & QuoteStyle.DoubleQuotes) != 0) result.Add("\"", """); for (char ch = (char)0; ch < 0x100; ch++) { if (ch != '\'' && ch != '\"') { string str = ch.ToString(); string enc = HttpUtility.HtmlEncode(str); // if the character was encoded: if (str != enc) result.Add(str, enc); } } } return result; } /// /// Converts all HTML entities to their applicable characters. /// /// The string to convert. /// The converted string. [ImplementsFunction("html_entity_decode")] public static string DecodeHtmlEntities(object str) { return DecodeHtmlEntities(str, QuoteStyle.Compatible, DefaultHtmlEntitiesCharset); } /// /// Converts all HTML entities to their applicable characters. /// /// The string to convert. /// Quote conversion. /// The converted string. [ImplementsFunction("html_entity_decode")] public static string DecodeHtmlEntities(object str, QuoteStyle quoteStyle) { return DecodeHtmlEntities(str, quoteStyle, DefaultHtmlEntitiesCharset); } /// /// Converts all HTML entities to their applicable characters. /// /// The string to convert. /// Quote conversion. /// The character set used in conversion. /// The converted string. [ImplementsFunction("html_entity_decode")] public static string DecodeHtmlEntities(object str, QuoteStyle quoteStyle, string charSet) { try { string s = ObjectToString(str, charSet); return DecodeHtmlEntities(s, quoteStyle); } catch (ArgumentException ex) { PhpException.Throw(PhpError.Warning, ex.Message); return string.Empty; } } private static string DecodeHtmlEntities(string str, QuoteStyle quoteStyle) { if (str == null) return String.Empty; // if both quotes should be decoded, we can use HttpUtility.HtmlDecode right away: if ((quoteStyle & QuoteStyle.BothQuotes) == QuoteStyle.BothQuotes) { return HttpUtility.HtmlDecode(str); } StringBuilder str_builder = new StringBuilder(str.Length); StringWriter result = new StringWriter(str_builder); // convert ', ' and " manually, rely on HttpUtility.HtmlDecode for everything else int old_index = 0, index = 0; while (index < str.Length && (index = str.IndexOf('&', index)) >= 0) { // " if ((quoteStyle & QuoteStyle.DoubleQuotes) == 0 && index < str.Length - 5 && str[index + 1] == 'q' && str[index + 2] == 'u' && str[index + 3] == 'o' && str[index + 4] == 't' && str[index + 5] == ';') { result.Write(HttpUtility.HtmlDecode(str.Substring(old_index, index - old_index))); result.Write("""); old_index = (index += 6); continue; } if ((quoteStyle & QuoteStyle.SingleQuotes) == 0) { // ' if (index < str.Length - 5 && str[index + 1] == '#' && str[index + 2] == '0' && str[index + 3] == '3' && str[index + 4] == '9' && str[index + 5] == ';') { result.Write(HttpUtility.HtmlDecode(str.Substring(old_index, index - old_index))); result.Write("'"); old_index = (index += 6); continue; } // ' if (index < str.Length - 4 && str[index + 1] == '#' && str[index + 2] == '3' && str[index + 3] == '9' && str[index + 4] == ';') { result.Write(HttpUtility.HtmlDecode(str.Substring(old_index, index - old_index))); result.Write("'"); old_index = (index += 5); continue; } } index++; // for the & } if (old_index < str.Length) result.Write(HttpUtility.HtmlDecode(str.Substring(old_index))); result.Flush(); return str_builder.ToString(); } #endregion #region strip_tags, nl2br /// /// Strips HTML and PHP tags from a string. /// /// The string to strip tags from. /// The result. [ImplementsFunction("strip_tags")] public static string StripTags(string str) { return StripTags(str, null); } /// /// Strips HTML and PHP tags from a string. /// /// The string to strip tags from. /// Tags which should not be stripped in the following format: /// <tag1><tag2><tag3>. /// The result. /// This is a slightly modified php_strip_tags which can be found in PHP sources. [ImplementsFunction("strip_tags")] public static string StripTags(string str, string allowableTags) { int state = 0; return StripTags(str, allowableTags, ref state); } /// /// Strips tags allowing to set automaton start state and read its accepting state. /// internal static string StripTags(string str, string allowableTags, ref int state) { if (str == null) return String.Empty; int br = 0, i = 0, depth = 0, length = str.Length; char lc = '\0'; // Simple state machine. State 0 is the output state, State 1 means we are inside a // normal html tag and state 2 means we are inside a php tag. // // lc holds the last significant character read and br is a bracket counter. // When an allowableTags string is passed in we keep track of the string in // state 1 and when the tag is closed check it against the allowableTags string // to see if we should allow it. StringBuilder result = new StringBuilder(), tagBuf = new StringBuilder(); if (allowableTags != null) allowableTags = allowableTags.ToLower(); while (i < length) { char c = str[i]; switch (c) { case '<': if (i + 1 < length && Char.IsWhiteSpace(str[i + 1])) goto default; if (state == 0) { lc = '<'; state = 1; if (allowableTags != null) { tagBuf.Length = 0; tagBuf.Append(c); } } else if (state == 1) depth++; break; case '(': if (state == 2) { if (lc != '"' && lc != '\'') { lc = '('; br++; } } else if (allowableTags != null && state == 1) tagBuf.Append(c); else if (state == 0) result.Append(c); break; case ')': if (state == 2) { if (lc != '"' && lc != '\'') { lc = ')'; br--; } } else if (allowableTags != null && state == 1) tagBuf.Append(c); else if (state == 0) result.Append(c); break; case '>': if (depth > 0) { depth--; break; } switch (state) { case 1: /* HTML/XML */ lc = '>'; state = 0; if (allowableTags != null) { // find out whether this tag is allowable or not tagBuf.Append(c); StringBuilder normalized = new StringBuilder(); bool done = false; int tagBufLen = tagBuf.Length, substate = 0; // normalize the tagBuf by removing leading and trailing whitespace and turn // any into just and any into for (int j = 0; j < tagBufLen; j++) { char d = Char.ToLower(tagBuf[j]); switch (d) { case '<': normalized.Append(d); break; case '>': done = true; break; default: if (!Char.IsWhiteSpace(d)) { if (substate == 0) { substate = 1; if (d != '/') normalized.Append(d); } else normalized.Append(d); } else if (substate == 1) done = true; break; } if (done) break; } normalized.Append('>'); if (allowableTags.IndexOf(normalized.ToString()) >= 0) result.Append(tagBuf); tagBuf.Length = 0; } break; case 2: /* PHP */ if (br == 0 && lc != '\"' && i > 0 && str[i] == '?') state = 0; { state = 0; tagBuf.Length = 0; } break; case 3: state = 0; tagBuf.Length = 0; break; case 4: /* JavaScript/CSS/etc... */ if (i >= 2 && str[i - 1] == '-' && str[i - 2] == '-') { state = 0; tagBuf.Length = 0; } break; default: result.Append(c); break; } break; case '"': goto case '\''; case '\'': if (state == 2 && i > 0 && str[i - 1] != '\\') { if (lc == c) lc = '\0'; else if (lc != '\\') lc = c; } else if (state == 0) result.Append(c); else if (allowableTags != null && state == 1) tagBuf.Append(c); break; case '!': /* JavaScript & Other HTML scripting languages */ if (state == 1 && i > 0 && str[i - 1] == '<') { state = 3; lc = c; } else { if (state == 0) result.Append(c); else if (allowableTags != null && state == 1) tagBuf.Append(c); } break; case '-': if (state == 3 && i >= 2 && str[i - 1] == '-' && str[i - 2] == '!') state = 4; else goto default; break; case '?': if (state == 1 && i > 0 && str[i - 1] == '<') { br = 0; state = 2; break; } goto case 'e'; case 'E': goto case 'e'; case 'e': /* !DOCTYPE exception */ if (state == 3 && i > 6 && Char.ToLower(str[i - 1]) == 'p' && Char.ToLower(str[i - 2]) == 'y' && Char.ToLower(str[i - 3]) == 't' && Char.ToLower(str[i - 4]) == 'c' && Char.ToLower(str[i - 5]) == 'o' && Char.ToLower(str[i - 6]) == 'd') { state = 1; break; } goto case 'l'; case 'l': /* If we encounter ' 2 && str[i - 1] == 'm' && str[i - 2] == 'x') { state = 1; break; } goto default; /* fall-through */ default: if (state == 0) result.Append(c); else if (allowableTags != null && state == 1) tagBuf.Append(c); break; } i++; } return result.ToString(); } /// /// Inserts HTML line breaks before all newlines in a string. /// /// The input string. /// The output string. /// Inserts "<br/>" before each "\n", "\n\r", "\r", "\r\n". [ImplementsFunction("nl2br")] public static string NewLinesToBreaks(string str) { return NewLinesToBreaks(str, true); } /// /// Inserts HTML line breaks before all newlines in a string. /// /// The input string. /// Whenever to use XHTML compatible line breaks or not. /// The output string. /// Inserts "<br/>" before each "\n", "\n\r", "\r", "\r\n". [ImplementsFunction("nl2br")] public static string NewLinesToBreaks(string str, bool isXHTML/*=true*/ ) { if (string.IsNullOrEmpty(str)) return String.Empty; StringReader reader = new StringReader(str); StringWriter writer = new StringWriter(new StringBuilder(str.Length)); NewLinesToBreaks(reader, writer, isXHTML ? "
" : "
"); return writer.ToString(); } public static void NewLinesToBreaks(TextReader/*!*/ input, TextWriter/*!*/ output, string lineBreakString) { if (input == null) throw new ArgumentNullException("input"); if (output == null) throw new ArgumentNullException("output"); for (; ; ) { int d = input.Read(); if (d == -1) break; char c = (char)d; if (c == '\r' || c == '\n') { output.Write(lineBreakString); d = input.Peek(); if (d != -1) { char c1 = (char)d; if ((c == '\r' && c1 == '\n') || (c == '\n' && c1 == '\r')) { output.Write(c); c = c1; input.Read(); } } } output.Write(c); } } #endregion #region chunk_split /// /// Splits a string into chunks 76 characters long separated by "\r\n". /// /// The string to split. /// The splitted string. /// "\r\n" is also appended after the last chunk. [ImplementsFunction("chunk_split")] [return: CastToFalse] public static string ChunkSplit(string str) { return ChunkSplit(str, 76, "\r\n"); } /// /// Splits a string into chunks of a specified length separated by "\r\n". /// /// The string to split. /// The chunk length. /// The splitted string. /// "\r\n" is also appended after the last chunk. [ImplementsFunction("chunk_split")] [return: CastToFalse] public static string ChunkSplit(string str, int chunkLength) { return ChunkSplit(str, chunkLength, "\r\n"); } /// /// Splits a string into chunks of a specified length separated by a specified string. /// /// The string to split. /// The chunk length. /// The chunk separator. /// is also appended after the last chunk. [ImplementsFunction("chunk_split")] [return: CastToFalse] public static string ChunkSplit(string str, int chunkLength, string endOfChunk) { if (str == null) return String.Empty; if (chunkLength <= 0) { PhpException.InvalidArgument("chunkLength", LibResources.GetString("arg:negative_or_zero")); return null; } int length = str.Length; StringBuilder result = new StringBuilder(length + (length / chunkLength + 1) * endOfChunk.Length); // append the chunks one by one to the result for (int i = 0, j = length - chunkLength; i < length; i += chunkLength) { if (i > j) result.Append(str, i, length - i); else result.Append(str, i, chunkLength); result.Append(endOfChunk); } return result.ToString(); } #endregion #region soundex, metaphone, levenshtein, similar_text /// /// A map of following characters: {'A', 'E', 'I', 'Y', 'O', 'U', 'a', 'e', 'i', 'y', 'o', 'u'}. /// internal static readonly CharMap vowelsMap = new CharMap(new uint[] { 0, 0, 0x44410440, 0x44410440 }); /// /// Indicates whether a character is recognized as an English vowel. /// /// The character. /// True iff recognized as an English vowel. public static bool IsVowel(char c) { return vowelsMap.Contains(c); } /// /// Calculates the soundex key of a string. /// /// The string to calculate soundex key of. /// The soundex key of . [ImplementsFunction("soundex")] public static string Soundex(string str) { if (str == null || str == String.Empty) return String.Empty; int length = str.Length; const string sound = "01230120022455012623010202"; char[] result = new char[4]; int resPos = 0; char lastIdx = '0'; for (int i = 0; i < length; i++) { char c = Char.ToUpper(str[i]); if (c >= 'A' && c <= 'Z') { char idx = sound[(int)(c - 'A')]; if (resPos == 0) { result[resPos++] = c; lastIdx = idx; } else { if (idx != '0' && idx != lastIdx) { result[resPos] = idx; if (++resPos >= 4) return new string(result); } // Some soundex algorithm descriptions say that the following condition should // be in effect... /*if (c != 'W' && c != 'H')*/ lastIdx = idx; } } } // pad with '0' do { result[resPos] = '0'; } while (++resPos < 4); return new string(result); } /// /// Calculates the metaphone key of a string. /// /// The string to calculate metaphone key of. /// The metaphone key of . [ImplementsFunction("metaphone")] public static string Metaphone(string str) { if (str == null) return String.Empty; int length = str.Length; const int padL = 4, padR = 3; StringBuilder sb = new StringBuilder(str.Length + padL + padR); StringBuilder result = new StringBuilder(); // avoid index out of bounds problem when looking at previous and following characters // by padding the string at both sides sb.Append('\0', padL); sb.Append(str.ToUpper()); sb.Append('\0', padR); int i = padL; char c = sb[i]; // transformations at the beginning of the string if ((c == 'A' && sb[i + 1] == 'E') || (sb[i + 1] == 'N' && (c == 'G' || c == 'K' || c == 'P')) || (c == 'W' && sb[i + 1] == 'R')) i++; if (c == 'X') sb[i] = 'S'; if (c == 'W' && sb[i + 1] == 'H') sb[++i] = 'W'; // if the string starts with a vowel it is copied to output if (IsVowel(sb[i])) result.Append(sb[i++]); int end = length + padL; while (i < end) { c = sb[i]; if (c == sb[i - 1] && c != 'C') { i++; continue; } // transformations of consonants (vowels as well as other characters are ignored) switch (c) { case 'B': if (sb[i - 1] != 'M') result.Append('B'); break; case 'C': if (sb[i + 1] == 'I' || sb[i + 1] == 'E' || sb[i + 1] == 'Y') { if (sb[i + 2] == 'A' && sb[i + 1] == 'I') result.Append('X'); else if (sb[i - 1] == 'S') break; else result.Append('S'); } else if (sb[i + 1] == 'H') { result.Append('X'); i++; } else result.Append('K'); break; case 'D': if (sb[i + 1] == 'G' && (sb[i + 2] == 'E' || sb[i + 2] == 'Y' || sb[i + 2] == 'I')) { result.Append('J'); i++; } else result.Append('T'); break; case 'F': result.Append('F'); break; case 'G': if (sb[i + 1] == 'H') { if (sb[i - 4] == 'H' || (sb[i - 3] != 'B' && sb[i - 3] != 'D' && sb[i - 3] != 'H')) { result.Append('F'); i++; } else break; } else if (sb[i + 1] == 'N') { if (sb[i + 2] < 'A' || sb[i + 2] > 'Z' || (sb[i + 2] == 'E' && sb[i + 3] == 'D')) break; else result.Append('K'); } else if ((sb[i + 1] == 'E' || sb[i + 1] == 'I' || sb[i + 1] == 'Y') && sb[i - 1] != 'G') { result.Append('J'); } else result.Append('K'); break; case 'H': if (IsVowel(sb[i + 1]) && sb[i - 1] != 'C' && sb[i - 1] != 'G' && sb[i - 1] != 'P' && sb[i - 1] != 'S' && sb[i - 1] != 'T') result.Append('H'); break; case 'J': result.Append('J'); break; case 'K': if (sb[i - 1] != 'C') result.Append('K'); break; case 'L': result.Append('L'); break; case 'M': result.Append('M'); break; case 'N': result.Append('N'); break; case 'P': if (sb[i + 1] == 'H') result.Append('F'); else result.Append('P'); break; case 'Q': result.Append('K'); break; case 'R': result.Append('R'); break; case 'S': if (sb[i + 1] == 'I' && (sb[i + 2] == 'O' || sb[i + 2] == 'A')) result.Append('X'); else if (sb[i + 1] == 'H') { result.Append('X'); i++; } else result.Append('S'); break; case 'T': if (sb[i + 1] == 'I' && (sb[i + 2] == 'O' || sb[i + 2] == 'A')) result.Append('X'); else if (sb[i + 1] == 'H') { result.Append('0'); i++; } else result.Append('T'); break; case 'V': result.Append('F'); break; case 'W': if (IsVowel(sb[i + 1])) result.Append('W'); break; case 'X': result.Append("KS"); break; case 'Y': if (IsVowel(sb[i + 1])) result.Append('Y'); break; case 'Z': result.Append('S'); break; } i++; } return result.ToString(); } /// /// Calculates the Levenshtein distance between two strings. /// /// The first string. /// The second string. /// The Levenshtein distance between and or -1 if any of the /// strings is longer than 255 characters. [ImplementsFunction("levenshtein")] public static int Levenshtein(string src, string dst) { return Levenshtein(src, dst, 1, 1, 1); } /// /// Calculates the Levenshtein distance between two strings given the cost of insert, replace /// and delete operations. /// /// The first string. /// The second string. /// Cost of the insert operation. /// Cost of the replace operation. /// Cost of the delete operation. /// The Levenshtein distance between and or -1 if any of the /// strings is longer than 255 characters. /// See
http://www.merriampark.com/ld.htm for description of the algorithm. [ImplementsFunction("levenshtein")] public static int Levenshtein(string src, string dst, int insertCost, int replaceCost, int deleteCost) { if (src == null) src = String.Empty; if (dst == null) dst = String.Empty; int n = src.Length; int m = dst.Length; if (n > 255 || m > 255) return -1; if (n == 0) return m * insertCost; if (m == 0) return n * deleteCost; int[,] matrix = new int[n + 1, m + 1]; for (int i = 0; i <= n; i++) matrix[i, 0] = i * deleteCost; for (int j = 0; j <= m; j++) matrix[0, j] = j * insertCost; for (int i = 1; i <= n; i++) { char cs = src[i - 1]; for (int j = 1; j <= m; j++) { char cd = dst[j - 1]; matrix[i, j] = System.Math.Min(System.Math.Min( matrix[i - 1, j] + deleteCost, matrix[i, j - 1] + insertCost), matrix[i - 1, j - 1] + (cs == cd ? 0 : replaceCost)); } } return matrix[n, m]; } /// /// Calculates the similarity between two strings. Internal recursive function. /// /// The first string. /// The second string. /// The number of matching characters in both strings. /// Algorithm description is supposed to be found /// here. internal static int SimilarTextInternal(string first, string second) { Debug.Assert(first != null && second != null); int posF = 0, lengthF = first.Length; int posS = 0, lengthS = second.Length; int maxK = 0; for (int i = 0; i < lengthF; i++) { for (int j = 0; j < lengthS; j++) { int k; for (k = 0; i + k < lengthF && j + k < lengthS && first[i + k] == second[j + k]; k++) ; if (k > maxK) { maxK = k; posF = i; posS = j; } } } int sum = maxK; if (sum > 0) { if (posF > 0 && posS > 0) { sum += SimilarTextInternal(first.Substring(0, posF), second.Substring(0, posS)); } if (posF + maxK < lengthF && posS + maxK < lengthS) { sum += SimilarTextInternal(first.Substring(posF + maxK), second.Substring(posS + maxK)); } } return sum; } /// /// Calculates the similarity between two strings. /// /// The first string. /// The second string. /// The number of matching characters in both strings. [ImplementsFunction("similar_text")] public static int SimilarText(string first, string second) { if (first == null || second == null) return 0; return SimilarTextInternal(first, second); } /// /// Calculates the similarity between two strings. /// /// The first string. /// The second string. /// Will become the similarity in percent. /// The number of matching characters in both strings. [ImplementsFunction("similar_text")] public static int SimilarText(string first, string second, out double percent) { if (first == null || second == null) { percent = 0; return 0; } int sum = SimilarTextInternal(first, second); percent = (200.0 * sum) / (first.Length + second.Length); return sum; } #endregion #region strtok /// /// Holds a context of method. /// private class TokenizerContext { /// /// The str parameter of last method call. /// public string String; /// /// Current position in . /// public int Position; /// /// The length of . /// public int Length; /// /// A context associated with the current thread. /// public static TokenizerContext/*!*/CurrentContext { get { var ctx = ScriptContext.CurrentContext; TokenizerContext tctx; if (ctx.Properties.TryGetProperty(out tctx) == false) ctx.Properties.SetProperty(tctx = new TokenizerContext()); // return tctx; } } } /// /// Splits a string into tokens using given set of delimiter characters. Tokenizes the string /// that was passed to a previous call of the two-parameter version. /// /// Set of delimiters. /// The next token or a null reference. /// This method implements the behavior introduced with PHP 4.1.0, i.e. empty tokens are /// skipped and never returned. [ImplementsFunction("strtok")] [return: CastToFalse] public static string Tokenize(string delimiters) { TokenizerContext context = TokenizerContext.CurrentContext; if (context.Position >= context.Length) return null; if (delimiters == null) delimiters = String.Empty; int index; char[] delChars = delimiters.ToCharArray(); while ((index = context.String.IndexOfAny(delChars, context.Position)) == context.Position) { if (context.Position == context.Length - 1) return null; // last char is delimiter context.Position++; } string token; if (index == -1) // delimiter not found { token = context.String.Substring(context.Position); context.Position = context.Length; return token; } token = context.String.Substring(context.Position, index - context.Position); context.Position = index + 1; return token; } /// /// Splits a string into tokens using given set of delimiter characters. /// /// The string to tokenize. /// Set of delimiters. /// The first token or null. Call one-parameter version of this method to get next tokens. /// /// This method implements the behavior introduced with PHP 4.1.0, i.e. empty tokens are /// skipped and never returned. [ImplementsFunction("strtok")] [return: CastToFalse] public static string Tokenize(string str, string delimiters) { if (str == null) str = String.Empty; TokenizerContext context = TokenizerContext.CurrentContext; context.String = str; context.Length = str.Length; context.Position = 0; return Tokenize(delimiters); } #endregion #region trim, rtrim, ltrim, chop /// /// Strips whitespace characters from the beginning and end of a string. /// /// The string to trim. /// The trimmed string. /// This one-parameter version trims '\0', '\t', '\n', '\r', '\x0b' and ' ' (space). [ImplementsFunction("trim")] public static string Trim(string str) { return Trim(str, "\0\t\n\r\x0b\x20"); } /// /// Strips given characters from the beginning and end of a string. /// /// The string to trim. /// The characters to strip from . Can contain ranges /// of characters, e.g. "\0x00..\0x1F". /// The trimmed string. /// is invalid char mask. Multiple errors may be printed out. /// contains Unicode characters greater than '\u0800'. [ImplementsFunction("trim")] public static string Trim(string str, string whiteSpaceCharacters) { if (str == null) return String.Empty; // As whiteSpaceCharacters may contain intervals, I see two possible implementations: // 1) Call CharMap.AddUsingMask and do the trimming "by hand". // 2) Write another version of CharMap.AddUsingMask that would return char[] of characters // that fit the mask, and do the trimming with String.Trim(char[]). // I have chosen 1). CharMap charmap = InitializeCharMap(); // may throw an exception: try { charmap.AddUsingMask(whiteSpaceCharacters); } catch (IndexOutOfRangeException) { PhpException.Throw(PhpError.Warning, LibResources.GetString("unicode_characters")); return null; } int length = str.Length, i = 0, j = length - 1; // finds the new beginning: while (i < length && charmap.Contains(str[i])) i++; // finds the new end: while (j >= 0 && charmap.Contains(str[j])) j--; return (i <= j) ? str.Substring(i, j - i + 1) : String.Empty; } /// Characters treated as blanks by the PHP. private static char[] phpBlanks = new char[] { '\0', '\t', '\n', '\r', '\u000b', ' ' }; /// /// Strips whitespace characters from the beginning of a string. /// /// The string to trim. /// The trimmed string. /// This one-parameter version trims '\0', '\t', '\n', '\r', '\u000b' and ' ' (space). [ImplementsFunction("ltrim")] public static string TrimStart(string str) { return (str != null) ? str.TrimStart(phpBlanks) : String.Empty; } /// /// Strips given characters from the beginning of a string. /// /// The string to trim. /// The characters to strip from . Can contain ranges /// of characters, e.g. \0x00..\0x1F. /// The trimmed string. /// is invalid char mask. Multiple errors may be printed out. /// contains Unicode characters greater than '\u0800'. [ImplementsFunction("ltrim")] public static string TrimStart(string str, string whiteSpaceCharacters) { if (str == null) return String.Empty; CharMap charmap = InitializeCharMap(); // may throw an exception: try { charmap.AddUsingMask(whiteSpaceCharacters); } catch (IndexOutOfRangeException) { PhpException.Throw(PhpError.Warning, LibResources.GetString("unicode_characters")); return null; } int length = str.Length, i = 0; while (i < length && charmap.Contains(str[i])) i++; if (i < length) return str.Substring(i); return String.Empty; } /// /// Strips whitespace characters from the end of a string. /// /// The string to trim. /// The trimmed string. /// This one-parameter version trims '\0', '\t', '\n', '\r', '\u000b' and ' ' (space). [ImplementsFunction("rtrim")] public static string TrimEnd(string str) { return (str != null) ? str.TrimEnd(phpBlanks) : String.Empty; } /// /// Strips given characters from the end of a string. /// /// The string to trim. /// The characters to strip from . Can contain ranges /// of characters, e.g. \0x00..\0x1F. /// The trimmed string. /// is invalid char mask. Multiple errors may be printed out. /// contains Unicode characters greater than '\u0800'. [ImplementsFunction("rtrim")] public static string TrimEnd(string str, string whiteSpaceCharacters) { if (str == null) return String.Empty; CharMap charmap = InitializeCharMap(); try { charmap.AddUsingMask(whiteSpaceCharacters); } catch (IndexOutOfRangeException) { PhpException.Throw(PhpError.Warning, LibResources.GetString("unicode_characters")); return null; } int j = str.Length - 1; while (j >= 0 && charmap.Contains(str[j])) j--; return (j >= 0) ? str.Substring(0, j + 1) : String.Empty; } /// /// Strips whitespace characters from the end of a string. /// /// The string to trim. /// The trimmed string. /// This one-parameter version trims '\0', '\t', '\n', '\r', '\u000b' and ' ' (space). [ImplementsFunction("chop")] public static string Chop(string str) { return TrimEnd(str); } /// /// Strips given characters from the end of a string. /// /// The string to trim. /// The characters to strip from . Can contain ranges /// of characters, e.g. \0x00..\0x1F. /// The trimmed string. /// Thrown if is invalid char mask. Multiple errors may be printed out. [ImplementsFunction("chop")] public static string Chop(string str, string whiteSpaceCharacters) { return TrimEnd(str, whiteSpaceCharacters); } #endregion #region ucfirst, lcfirst, ucwords /// /// Makes a string's first character uppercase. /// /// The input string. /// with the first character converted to uppercase. [ImplementsFunction("ucfirst")] public static string UpperCaseFirst(string str) { if (string.IsNullOrEmpty(str)) return string.Empty; return Char.ToUpper(str[0]) + str.Substring(1); } /// /// Returns a string with the first character of str , lowercased if that character is alphabetic. /// Note that 'alphabetic' is determined by the current locale. For instance, in the default "C" locale characters such as umlaut-a () will not be converted. /// /// The input string. /// Returns the resulting string. [ImplementsFunction("lcfirst")] public static string LowerCaseFirst(string str) { if (string.IsNullOrEmpty(str)) return string.Empty; // first character to lower case return Char.ToLower(str[0]) + str.Substring(1); } /// /// Makes the first character of each word in a string uppercase. /// /// The input string. /// with the first character of each word in a string converted to /// uppercase. [ImplementsFunction("ucwords")] public static string UpperCaseWords(string str) { if (str == null) return String.Empty; int length = str.Length; StringBuilder result = new StringBuilder(str); bool state = true; for (int i = 0; i < length; i++) { if (Char.IsWhiteSpace(result[i])) state = true; else { if (state) { result[i] = Char.ToUpper(result[i]); state = false; } } } return result.ToString(); } #endregion #region sprintf, vsprintf /// /// Default number of decimals when formatting floating-point numbers (%f in printf). /// internal const int printfFloatPrecision = 6; /// /// Returns a formatted string. /// /// The format string. /// See PHP manual for details. /// Besides, a type specifier "%C" is applicable. It converts an integer value to Unicode character. /// The arguments. /// The formatted string or null if there is too few arguments. /// Assumes that either nor is null. internal static string FormatInternal(string format, object[] arguments) { Debug.Assert(format != null && arguments != null); Encoding encoding = Configuration.Application.Globalization.PageEncoding; StringBuilder result = new StringBuilder(); int state = 0, width = 0, precision = -1, seqIndex = 0, swapIndex = -1; bool leftAlign = false; bool plusSign = false; char padChar = ' '; // process the format string using a 6-state finite automaton int length = format.Length; for (int i = 0; i < length; i++) { char c = format[i]; Lambda: switch (state) { case 0: // the initial state { if (c == '%') { width = 0; precision = -1; swapIndex = -1; leftAlign = false; plusSign = false; padChar = ' '; state = 1; } else result.Append(c); break; } case 1: // % character encountered, expecting format { switch (c) { case '-': leftAlign = true; break; case '+': plusSign = true; break; case ' ': padChar = ' '; break; case '\'': state = 2; break; case '.': state = 4; break; case '%': result.Append(c); state = 0; break; case '0': padChar = '0'; state = 3; break; default: { if (Char.IsDigit(c)) state = 3; else state = 5; goto Lambda; } } break; } case 2: // ' character encountered, expecting padding character { padChar = c; state = 1; break; } case 3: // number encountered, expecting width or argument number { switch (c) { case '$': { swapIndex = width; if (swapIndex == 0) { PhpException.Throw(PhpError.Warning, LibResources.GetString("zero_argument_invalid")); return result.ToString(); } width = 0; state = 1; break; } case '.': { state = 4; break; } default: { if (Char.IsDigit(c)) width = width * 10 + (int)Char.GetNumericValue(c); else { state = 5; goto Lambda; } break; } } break; } case 4: // number after . encountered, expecting precision { if (precision == -1) precision = 0; if (Char.IsDigit(c)) precision = precision * 10 + (int)Char.GetNumericValue(c); else { state = 5; goto case 5; } break; } case 5: // expecting type specifier { int index = (swapIndex <= 0 ? seqIndex++ : swapIndex - 1); if (index >= arguments.Length) { // few arguments: return null; } object obj = arguments[index]; string app = null; char sign = '\0'; switch (c) { case 'b': // treat as integer, present as binary number without a sign app = System.Convert.ToString(Core.Convert.ObjectToInteger(obj), 2); break; case 'c': // treat as integer, present as character app = encoding.GetString(new byte[] { unchecked((byte)Core.Convert.ObjectToInteger(obj)) }, 0, 1); break; case 'C': // treat as integer, present as Unicode character app = new String(unchecked((char)Core.Convert.ObjectToInteger(obj)), 1); break; case 'd': // treat as integer, present as signed decimal number { // use long to prevent overflow in Math.Abs: long ivalue = Core.Convert.ObjectToInteger(obj); if (ivalue < 0) sign = '-'; else if (ivalue >= 0 && plusSign) sign = '+'; app = Math.Abs((long)ivalue).ToString(); break; } case 'u': // treat as integer, present as unsigned decimal number, without sign app = unchecked((uint)Core.Convert.ObjectToInteger(obj)).ToString(); break; case 'e': { double dvalue = Core.Convert.ObjectToDouble(obj); if (dvalue < 0) sign = '-'; else if (dvalue >= 0 && plusSign) sign = '+'; string f = String.Concat("0.", new String('0', precision == -1 ? printfFloatPrecision : precision), "e+0"); app = Math.Abs(dvalue).ToString(f); break; } case 'f': // treat as float, present locale-aware floating point number { double dvalue = Core.Convert.ObjectToDouble(obj); if (dvalue < 0) sign = '-'; else if (dvalue >= 0 && plusSign) sign = '+'; app = Math.Abs(dvalue).ToString("F" + (precision == -1 ? printfFloatPrecision : precision)); break; } case 'F': // treat as float, present locale-unaware floating point number with '.' decimal separator (PHP 5.0.3+ feature) { double dvalue = Core.Convert.ObjectToDouble(obj); if (dvalue < 0) sign = '-'; else if (dvalue >= 0 && plusSign) sign = '+'; app = Math.Abs(dvalue).ToString("F" + (precision == -1 ? printfFloatPrecision : precision), System.Globalization.NumberFormatInfo.InvariantInfo); break; } case 'o': // treat as integer, present as octal number without sign app = System.Convert.ToString(Core.Convert.ObjectToInteger(obj), 8); break; case 'x': // treat as integer, present as hex number (lower case) without sign app = Core.Convert.ObjectToInteger(obj).ToString("x"); break; case 'X': // treat as integer, present as hex number (upper case) without sign app = Core.Convert.ObjectToInteger(obj).ToString("X"); break; case 's': // treat as string, present as string { if (obj != null) { app = Core.Convert.ObjectToString(obj); // undocumented feature: if (precision != -1) app = app.Substring(0, Math.Min(precision, app.Length)); } break; } } if (app != null) { // pad: if (leftAlign) { if (sign != '\0') result.Append(sign); result.Append(app); for (int j = width - app.Length; j > ((sign != '\0') ? 1 : 0); j--) result.Append(padChar); } else { if (sign != '\0' && padChar == '0') result.Append(sign); for (int j = width - app.Length; j > ((sign != '\0') ? 1 : 0); j--) result.Append(padChar); if (sign != '\0' && padChar != '0') result.Append(sign); result.Append(app); } } state = 0; break; } } } return result.ToString(); } /// /// Returns a formatted string. /// /// The format string. For details, see PHP manual. /// The arguments. /// See PHP manual for details. /// Besides, a type specifier "%C" is applicable. It converts an integer value to Unicode character. /// The formatted string. /// Thrown when the parameter is null. /// Thrown when there is less arguments than expeceted by formatting string. [ImplementsFunction("sprintf")] [return: CastToFalse] public static string Format(string format, params object[] arguments) { if (format == null) return String.Empty; // null arguments would be compiler's error (or error of the user): if (arguments == null) throw new ArgumentNullException("arguments"); string result = FormatInternal(format, arguments); if (result == null) PhpException.Throw(PhpError.Warning, LibResources.GetString("too_few_arguments")); return result; } /// /// Returns a formatted string. /// /// The format string. For details, see PHP manual. /// The arguments. /// The formatted string. /// Thrown when there is less arguments than expeceted by formatting string. [ImplementsFunction("vsprintf")] [return: CastToFalse] public static string Format(string format, PhpArray arguments) { if (format == null) return String.Empty; object[] array; if (arguments != null) { array = new object[arguments.Count]; arguments.Values.CopyTo(array, 0); } else array = ArrayUtils.EmptyObjects; string result = FormatInternal(format, array); if (result == null) PhpException.Throw(PhpError.Warning, LibResources.GetString("too_few_arguments")); return result; } #endregion #region sscanf /// /// Parses input from a string according to a format. /// /// The string to be parsed. /// The format. See sscanf C function for details. /// A PHP reference which value is set to the first parsed value. /// PHP references which values are set to the next parsed values. /// The number of parsed values. /// . [ImplementsFunction("sscanf")] public static int ScanFormat(string str, string format, PhpReference arg, params PhpReference[] arguments) { if (arg == null) throw new ArgumentNullException("arg"); if (arguments == null) throw new ArgumentNullException("arguments"); // assumes capacity same as the number of arguments: ArrayList result = new ArrayList(arguments.Length + 1); // parses string and fills the result with parsed values: ParseString(str, format, result); // the number of specifiers differs from the number of arguments: if (result.Count != arguments.Length + 1) { PhpException.Throw(PhpError.Warning, LibResources.GetString("different_variables_and_specifiers", arguments.Length + 1, result.Count)); return -1; } // the number of non-null parsed values: int count = 0; if (result[0] != null) { arg.Value = result[0]; count = 1; } for (int i = 0; i < arguments.Length; i++) { if (arguments[i] != null && result[i + 1] != null) { arguments[i].Value = result[i + 1]; count++; } } return count; } /// /// Parses input from a string according to a format. /// /// The string to be parsed. /// The format. See sscanf C function for details. /// A new instance of containing parsed values indexed by integers starting from 0. /// . [ImplementsFunction("sscanf")] public static PhpArray ScanFormat(string str, string format) { return (PhpArray)ParseString(str, format, new PhpArray()); } /// /// Parses a string according to a specified format. /// /// The string to be parsed. /// The format. See sscanf C function for details. /// A list which to fill with results. /// for convenience. /// is a null reference. /// Invalid formatting specifier. public static IList ParseString(string str, string format, IList result) { if (result == null) throw new ArgumentNullException("result"); if (str == null || format == null) return result; int s = 0, f = 0; while (f < format.Length) { char c = format[f++]; if (c == '%') { if (f == format.Length) break; int width; // max. parsed characters bool store; // whether to store parsed item to the result // checks for asterisk which means matching value is not stored: if (format[f] == '*') { f++; if (f == format.Length) break; store = false; } else { store = true; } // parses width (a sequence of digits without sign): if (format[f] >= '0' && format[f] <= '9') { width = (int)Core.Convert.SubstringToLongStrict(format, -1, 10, Int32.MaxValue, ref f); if (width == 0) width = Int32.MaxValue; // format string ends with "%number" if (f == format.Length) { PhpException.Throw(PhpError.Warning, LibResources.GetString("invalid_scan_conversion_character", "null")); return null; } } else { width = Int32.MaxValue; } // adds null if string parsing has been finished: if (s == str.Length) { if (store) { if (format[f] == 'n') result.Add(s); else if (format[f] != '%') result.Add(null); } continue; } // parses the string according to the format specifier: object item = ParseSubstring(format[f], width, str, ref s); // unknown specifier: if (item == null) { if (format[f] == '%') { // stops string parsing if characters don't match: if (str[s++] != '%') s = str.Length; } else if (format[f] == '[') { bool complement; CharMap charmap = ParseRangeSpecifier(format, ref f, out complement); if (charmap != null) { int start = s; // skip characters contained in the specifier: if (complement) { while (s < str.Length && !charmap.Contains(str[s])) s++; } else { while (s < str.Length && charmap.Contains(str[s])) s++; } item = str.Substring(start, s - start); } else { PhpException.Throw(PhpError.Warning, LibResources.GetString("unmatched_separator")); return null; } } else { PhpException.Throw(PhpError.Warning, LibResources.GetString("invalid_scan_conversion_character", c)); return null; } } // stores the parsed value: if (store && item != null) result.Add(item); // shift: f++; } else if (Char.IsWhiteSpace(c)) { // skips additional white space in the format: while (f < format.Length && Char.IsWhiteSpace(format[f])) f++; // skips white space in the string: while (s < str.Length && Char.IsWhiteSpace(str[s])) s++; } else if (s < str.Length && c != str[s++]) { // stops string parsing if characters don't match: s = str.Length; } } return result; } /// /// Extracts a range specifier from the formatting string. /// /// The formatting string. /// The position if the string pointing to the '[' at the beginning and to ']' at the end. /// Whether '^' was stated as the first character in the specifier. /// /// containing the characters belonging to the range or a null reference on error. /// /// /// Specifier should be enclosed to brackets '[', ']' and can contain complement character '^' at the beginning. /// The first character after '[' or '^' can be ']'. In such a case the specifier continues to the next ']'. /// private static CharMap ParseRangeSpecifier(string format, ref int f, out bool complement) { Debug.Assert(format != null && f > 0 && f < format.Length && format[f] == '['); complement = false; f++; if (f < format.Length) { if (format[f] == '^') { complement = true; f++; } if (f + 1 < format.Length) { // search for ending bracket (the first symbol can be the bracket so skip it): int end = format.IndexOf(']', f + 1); if (end >= 0) { CharMap result = InitializeCharMap(); result.AddUsingRegularMask(format, f, end, '-'); f = end; return result; } } } return null; } /// /// Parses a string according to a given specifier. /// /// The specifier. /// A width of the maximal parsed substring. /// The string to be parsed. /// A current position in the string. /// The parsed value or a null reference on error. private static object ParseSubstring(char specifier, int width, string str, ref int s) { Debug.Assert(width >= 0 && str != null && s < str.Length); object result; int limit = (width < str.Length - s) ? s + width : str.Length; switch (specifier) { case 'S': // string case 's': { // skips initial white spaces: while (s < limit && Char.IsWhiteSpace(str[s])) s++; int i = s; // skips black spaces: while (i < limit && !Char.IsWhiteSpace(str[i])) i++; // if s = length then i = s and substring returns an empty string: result = str.Substring(s, i - s); // moves behind the substring: s = i; } break; case 'C': // character case 'c': { result = str[s++].ToString(); break; } case 'X': // hexadecimal integer: [0-9A-Fa-f]* case 'x': result = Core.Convert.SubstringToLongStrict(str, width, 16, Int32.MaxValue, ref s); break; case 'o': // octal integer: [0-7]* result = Core.Convert.SubstringToLongStrict(str, width, 8, Int32.MaxValue, ref s); break; case 'd': // decimal integer: [+-]?[0-9]* result = Core.Convert.SubstringToLongStrict(str, width, 10, Int32.MaxValue, ref s); break; case 'u': // unsigned decimal integer [+-]?[1-9][0-9]* result = unchecked((uint)Core.Convert.SubstringToLongStrict(str, width, 10, Int32.MaxValue, ref s)); break; case 'i': // decimal (no prefix), hexadecimal (0[xX]...), or octal (0...) integer { // sign: int sign = 0; if (str[s] == '-') { sign = -1; s++; } else if (str[s] == '+') { sign = +1; s++; } // string ends if (s == limit) { result = 0; break; } if (str[s] != '0') { if (sign != 0) s--; result = (int)Core.Convert.SubstringToLongStrict(str, width, 10, Int32.MaxValue, ref s); break; } s++; // string ends if (s == limit) { result = 0; break; } int number = 0; if (str[s] == 'x' || str[s] == 'X') { s++; // reads unsigned hexadecimal number starting from the next position: if (s < limit && str[s] != '+' && str[s] != '-') number = (int)Core.Convert.SubstringToLongStrict(str, width, 16, Int32.MaxValue, ref s); } else { // reads unsigned octal number starting from the current position: if (str[s] != '+' && str[s] != '-') number = (int)Core.Convert.SubstringToLongStrict(str, width, 8, Int32.MaxValue, ref s); } // minus sign has been stated: result = (sign >= 0) ? +number : -number; break; } case 'e': // float case 'E': case 'g': case 'G': case 'f': result = Core.Convert.SubstringToDouble(str, width, ref s); break; case 'n': // the number of read characters is placed into result: result = s; break; default: result = null; break; } return result; } #endregion #region wordwrap /// /// Wraps a string to 75 characters using new line as the break character. /// /// The string to word-wrap. /// The word-wrapped string. /// The only "break-point" character is space (' '). If a word is longer than 75 characers /// it will stay uncut. [ImplementsFunction("wordwrap")] [return: CastToFalse] public static string WordWrap(string str) { return WordWrap(str, 75, "\n", false); } /// /// Wraps a string to a specified number of characters using new line as the break character. /// /// The string to word-wrap. /// The desired line length. /// The word-wrapped string. /// The only "break-point" character is space (' '). If a word is longer than /// characers it will stay uncut. [ImplementsFunction("wordwrap")] [return: CastToFalse] public static string WordWrap(string str, int width) { return WordWrap(str, width, "\n", false); } /// /// Wraps a string to a specified number of characters using a specified string as the break string. /// /// The string to word-wrap. /// The desired line length. /// The break string. /// The word-wrapped string. /// The only "break-point" character is space (' '). If a word is longer than /// characers it will stay uncut. [ImplementsFunction("wordwrap")] [return: CastToFalse] public static string WordWrap(string str, int width, string lineBreak) { return WordWrap(str, width, lineBreak, false); } /// /// Wraps a string to a specified number of characters using a specified string as the break string. /// /// The string to word-wrap. /// The desired line length. /// The break string. /// If true, words longer than will be cut so that no line is longer /// than . /// The word-wrapped string. /// The only "break-point" character is space (' '). /// Thrown if the combination of and is invalid. [ImplementsFunction("wordwrap")] [return: CastToFalse] public static string WordWrap(string str, int width, string lineBreak, bool cut) { if (width == 0 && cut) { PhpException.Throw(PhpError.Warning, LibResources.GetString("cut_forced_with_zero_width")); return null; } if (str == null) return null; int length = str.Length; StringBuilder result = new StringBuilder(length); // mimic the strange PHP behaviour when width < 0 and cut is true if (width < 0 && cut) { result.Append(lineBreak); width = 1; } int lastSpace = -1, lineStart = 0; for (int i = 0; i < length; i++) { if (str[i] == ' ') { lastSpace = i; if (i - lineStart >= width + 1) { // cut is false if we get here if (lineStart == 0) { result.Append(str, 0, i); } else { result.Append(lineBreak); result.Append(str, lineStart, i - lineStart); } lineStart = i + 1; continue; } } if (i - lineStart >= width) { // we reached the specified width if (lastSpace > lineStart) // obsolete: >= { if (lineStart > 0) result.Append(lineBreak); result.Append(str, lineStart, lastSpace - lineStart); lineStart = lastSpace + 1; } else if (cut) { if (lineStart > 0) result.Append(lineBreak); result.Append(str, lineStart, width); lineStart = i; } } } // process the rest of str if (lineStart < length || lastSpace == length - 1) { if (lineStart > 0) result.Append(lineBreak); result.Append(str, lineStart, length - lineStart); } return result.ToString(); } #endregion #region number_format, NS: money_format /// /// Formats a number with grouped thousands. /// /// The number to format. /// String representation of the number without decimals (rounded) with comma between every group /// of thousands. [ImplementsFunction("number_format")] public static string FormatNumber(double number) { return FormatNumber(number, 0, ".", ","); } /// /// Formats a number with grouped thousands and with given number of decimals. /// /// The number to format. /// The number of decimals. /// String representation of the number with decimals with a dot in front, and with /// comma between every group of thousands. [ImplementsFunction("number_format")] public static string FormatNumber(double number, int decimals) { return FormatNumber(number, decimals, ".", ","); } /// /// Formats a number with grouped thousands, with given number of decimals, with given decimal point string /// and with given thousand separator. /// /// The number to format. /// The number of decimals within range 0 to 99. /// The string to separate integer part and decimals. /// The character to separate groups of thousands. Only the first character /// of is used. /// /// String representation of the number with decimals with in /// front, and with between every group of thousands. /// /// /// The number_format () PHP function requires and /// to be of length 1 otherwise it uses default values (dot and comma respectively). As this behavior does /// not make much sense, this method has no such limitation except for of which /// only the first character is used (documented feature). /// [ImplementsFunction("number_format")] public static string FormatNumber(double number, int decimals, string decimalPoint, string thousandsSeparator) { System.Globalization.NumberFormatInfo format = new System.Globalization.NumberFormatInfo(); if ((decimals >= 0) && (decimals <= 99)) { format.NumberDecimalDigits = decimals; } else { PhpException.InvalidArgument("decimals", LibResources.GetString("arg:out_of_bounds", decimals)); } if (!String.IsNullOrEmpty(decimalPoint)) { format.NumberDecimalSeparator = decimalPoint; } if (thousandsSeparator == null) thousandsSeparator = String.Empty; switch (thousandsSeparator.Length) { case 0: format.NumberGroupSeparator = String.Empty; break; case 1: format.NumberGroupSeparator = thousandsSeparator; break; default: format.NumberGroupSeparator = thousandsSeparator.Substring(0, 1); break; } return number.ToString("N", format); } /// /// Not supported. /// [ImplementsFunction("money_format", FunctionImplOptions.NotSupported)] [EditorBrowsable(EditorBrowsableState.Never)] public static string FormatMoney(string format, double number) { PhpException.FunctionNotSupported(); return null; } #endregion #region hebrev, hebrevc /// /// Indicates whether a character is recognized as Hebrew letter. /// /// The character. /// /// Whether the is a Hebrew letter according to /// the Unicode 4.0 standard. /// public static bool IsHebrew(char c) { return c >= '\u05d0' && c <= '\u05ea'; } /// /// Indicates whether a character is a space or tab. /// /// The character. /// True iff space or tab. internal static bool IsBlank(char c) { return c == ' ' || c == '\t'; } /// /// Indicates whether a character is new line or carriage return. /// /// The character. /// True iff new line or carriage return. internal static bool IsNewLine(char c) { return c == '\n' || c == '\r'; } /// /// Converts logical Hebrew text to visual text. /// /// The string to convert. /// If >0, maximum number of characters per line. If 0, /// there is no maximum. /// Whether to convert new lines '\n' to "<br/>". /// The converted string. internal static string HebrewReverseInternal(string str, int maxCharactersPerLine, bool convertNewLines) { if (str == null || str == String.Empty) return str; int length = str.Length, blockLength = 0, blockStart = 0, blockEnd = 0; StringBuilder hebStr = new StringBuilder(length); hebStr.Length = length; bool blockTypeHeb = IsHebrew(str[0]); int source = 0, target = length - 1; do { if (blockTypeHeb) { while (source + 1 < length && (IsHebrew(str[source + 1]) || IsBlank(str[source + 1]) || Char.IsPunctuation(str[source + 1]) || str[source + 1] == '\n') && blockEnd < length - 1) { source++; blockEnd++; blockLength++; } for (int i = blockStart; i <= blockEnd; i++) { switch (str[i]) { case '(': hebStr[target] = ')'; break; case ')': hebStr[target] = '('; break; case '[': hebStr[target] = ']'; break; case ']': hebStr[target] = '['; break; case '{': hebStr[target] = '}'; break; case '}': hebStr[target] = '{'; break; case '<': hebStr[target] = '>'; break; case '>': hebStr[target] = '<'; break; case '\\': hebStr[target] = '/'; break; case '/': hebStr[target] = '\\'; break; default: hebStr[target] = str[i]; break; } target--; } blockTypeHeb = false; } else { // blockTypeHeb == false while (source + 1 < length && !IsHebrew(str[source + 1]) && str[source + 1] != '\n' && blockEnd < length - 1) { source++; blockEnd++; blockLength++; } while ((IsBlank(str[source]) || Char.IsPunctuation(str[source])) && str[source] != '/' && str[source] != '-' && blockEnd > blockStart) { source--; blockEnd--; } for (int i = blockEnd; i >= blockStart; i--) { hebStr[target] = str[i]; target--; } blockTypeHeb = true; } blockStart = blockEnd + 1; } while (blockEnd < length - 1); StringBuilder brokenStr = new StringBuilder(length); brokenStr.Length = length; int begin = length - 1, end = begin, charCount, origBegin; target = 0; while (true) { charCount = 0; while ((maxCharactersPerLine == 0 || charCount < maxCharactersPerLine) && begin > 0) { charCount++; begin--; if (begin <= 0 || IsNewLine(hebStr[begin])) { while (begin > 0 && IsNewLine(hebStr[begin - 1])) { begin--; charCount++; } break; } } if (charCount == maxCharactersPerLine) { // try to avoid breaking words int newCharCount = charCount, newBegin = begin; while (newCharCount > 0) { if (IsBlank(hebStr[newBegin]) || IsNewLine(hebStr[newBegin])) break; newBegin++; newCharCount--; } if (newCharCount > 0) { charCount = newCharCount; begin = newBegin; } } origBegin = begin; if (IsBlank(hebStr[begin])) hebStr[begin] = '\n'; while (begin <= end && IsNewLine(hebStr[begin])) { // skip leading newlines begin++; } for (int i = begin; i <= end; i++) { // copy content brokenStr[target] = hebStr[i]; target++; } for (int i = origBegin; i <= end && IsNewLine(hebStr[i]); i++) { brokenStr[target] = hebStr[i]; target++; } begin = origBegin; if (begin <= 0) break; begin--; end = begin; } if (convertNewLines) brokenStr.Replace("\n", "
\n"); return brokenStr.ToString(); } /// /// Converts logical Hebrew text to visual text. /// /// The string to convert. /// The comverted string. /// Although PHP returns false if is null or empty there is no reason to do so. [ImplementsFunction("hebrev")] public static string HebrewReverse(string str) { return HebrewReverseInternal(str, 0, false); } /// /// Converts logical Hebrew text to visual text. /// /// The string to convert. /// Maximum number of characters per line. /// The comverted string. /// Although PHP returns false if is null or empty there is no reason to do so. [ImplementsFunction("hebrev")] public static string HebrewReverse(string str, int maxCharactersPerLine) { return HebrewReverseInternal(str, maxCharactersPerLine, false); } /// /// Converts logical Hebrew text to visual text and also converts new lines '\n' to "<br/>". /// /// The string to convert. /// The converted string. /// Although PHP returns false if is null or empty there is no reason to do so. [ImplementsFunction("hebrevc")] public static string HebrewReverseWithNewLines(string str) { return HebrewReverseInternal(str, 0, true); } /// /// Converts logical Hebrew text to visual text and also converts new lines '\n' to "<br/>". /// /// The string to convert. /// Maximum number of characters per line. /// The comverted string. /// Although PHP returns false if is null or empty there is no reason to do so. [ImplementsFunction("hebrevc")] public static string HebrewReverseWithNewLines(string str, int maxCharactersPerLine) { return HebrewReverseInternal(str, maxCharactersPerLine, true); } #endregion #region strnatcmp, strnatcasecmp /// /// Compares two strings using the natural ordering. /// /// NaturalCompare("page155", "page16") returns 1. /// [ImplementsFunction("strnatcmp")] public static int NaturalCompare(string x, string y) { return PhpNaturalComparer.Default.Compare(x, y); } /// /// Compares two strings using the natural ordering. Ignores the case. /// /// [ImplementsFunction("strnatcasecmp")] public static int NaturalCompareIgnoringCase(string x, string y) { return PhpNaturalComparer.CaseInsensitive.Compare(x, y); } #endregion #region str_pad /// /// Pads a string to a certain length with spaces. /// /// The string to pad. /// Desired length of the returned string. /// padded on the right with spaces. [ImplementsFunction("str_pad")] public static object Pad(object str, int totalWidth) { if (str is PhpBytes) return Pad(str, totalWidth, new PhpBytes(32)); else return Pad(str, totalWidth, " "); } /// /// Pads a string to certain length with another string. /// /// The string to pad. /// Desired length of the returned string. /// The string to use as the pad. /// padded on the right with . /// Thrown if is null or empty. [ImplementsFunction("str_pad")] public static object Pad(object str, int totalWidth, object paddingString) { return Pad(str, totalWidth, paddingString, PaddingType.Right); } /// /// Pads a string to certain length with another string. /// /// The string to pad. /// Desired length of the returned string. /// The string to use as the pad. /// Specifies whether the padding should be done on the left, on the right, /// or on both sides of . /// padded with . /// Thrown if is invalid or is null or empty. [ImplementsFunction("str_pad")] public static object Pad(object str, int totalWidth, object paddingString, PaddingType paddingType) { PhpBytes binstr = str as PhpBytes; if (str is PhpBytes) { PhpBytes binPaddingString = Core.Convert.ObjectToPhpBytes(paddingString); if (binPaddingString == null || binPaddingString.Length == 0) { PhpException.InvalidArgument("paddingString", LibResources.GetString("arg:null_or_empty")); return null; } if (binstr == null) binstr = PhpBytes.Empty; int length = binstr.Length; if (totalWidth <= length) return binstr; int pad = totalWidth - length, padLeft = 0, padRight = 0; switch (paddingType) { case PaddingType.Left: padLeft = pad; break; case PaddingType.Right: padRight = pad; break; case PaddingType.Both: padLeft = pad / 2; padRight = pad - padLeft; break; default: PhpException.InvalidArgument("paddingType"); break; } // if paddingString has length 1, use String.PadLeft and String.PadRight int padStrLength = binPaddingString.Length; // else build the resulting string manually byte[] result = new byte[totalWidth]; int position = 0; // pad left while (padLeft > padStrLength) { Buffer.BlockCopy(binPaddingString.ReadonlyData, 0, result, position, padStrLength); padLeft -= padStrLength; position += padStrLength; } if (padLeft > 0) { Buffer.BlockCopy(binPaddingString.ReadonlyData, 0, result, position, padLeft); position += padLeft; } Buffer.BlockCopy(binstr.ReadonlyData, 0, result, position, binstr.Length); position += binstr.Length; // pad right while (padRight > padStrLength) { Buffer.BlockCopy(binPaddingString.ReadonlyData, 0, result, position, padStrLength); padRight -= padStrLength; position += padStrLength; } if (padRight > 0) { Buffer.BlockCopy(binPaddingString.ReadonlyData, 0, result, position, padRight); position += padRight; } return new PhpBytes(result); } string unistr = Core.Convert.ObjectToString(str); if (unistr != null) { string uniPaddingString = Core.Convert.ObjectToString(paddingString); if (String.IsNullOrEmpty(uniPaddingString)) { PhpException.InvalidArgument("paddingString", LibResources.GetString("arg:null_or_empty")); return null; } if (unistr == null) unistr = String.Empty; int length = unistr.Length; if (totalWidth <= length) return unistr; int pad = totalWidth - length, padLeft = 0, padRight = 0; switch (paddingType) { case PaddingType.Left: padLeft = pad; break; case PaddingType.Right: padRight = pad; break; case PaddingType.Both: padLeft = pad / 2; padRight = pad - padLeft; break; default: PhpException.InvalidArgument("paddingType"); break; } // if paddingString has length 1, use String.PadLeft and String.PadRight int padStrLength = uniPaddingString.Length; if (padStrLength == 1) { char c = uniPaddingString[0]; if (padLeft > 0) unistr = unistr.PadLeft(length + padLeft, c); if (padRight > 0) unistr = unistr.PadRight(totalWidth, c); return unistr; } // else build the resulting string manually StringBuilder result = new StringBuilder(totalWidth); // pad left while (padLeft > padStrLength) { result.Append(uniPaddingString); padLeft -= padStrLength; } if (padLeft > 0) result.Append(uniPaddingString.Substring(0, padLeft)); result.Append(unistr); // pad right while (padRight > padStrLength) { result.Append(uniPaddingString); padRight -= padStrLength; } if (padRight > 0) result.Append(uniPaddingString.Substring(0, padRight)); return result.ToString(); } return null; } #endregion #region str_word_count /// /// Counts the number of words inside a string. /// /// The string containing words to count. /// Then number of words inside . [ImplementsFunction("str_word_count")] public static int CountWords(string str) { return CountWords(str, WordCountResult.WordCount, null, null); } /// /// Splits a string into words. /// /// The string to split. /// If , the method returns an array containing all /// the words found inside the string. If , the method returns /// an array, where the key is the numeric position of the word inside the string and the value is the /// actual word itself. /// Array of words. Keys are just numbers starting with 0 (when is /// WordCountResult.WordsArray) or positions of the words inside (when /// is ). /// Thrown if is invalid. [ImplementsFunction("str_word_count")] public static object CountWords(string str, WordCountResult format) { return CountWords(str, format, null); } [ImplementsFunction("str_word_count")] public static object CountWords(string str, WordCountResult format, string addWordChars) { PhpArray words = (format != WordCountResult.WordCount) ? new PhpArray() : null; int count = CountWords(str, format, addWordChars, words); if (count == -1) return false; if (format == WordCountResult.WordCount) return count; else { if (words != null) return words; else return false; } } private static bool IsWordChar(char c, CharMap map) { return Char.IsLetter(c) || map != null && map.Contains(c); } public static int CountWords(string str, WordCountResult format, string addWordChars, IDictionary words) { if (str == null) return 0; if (format != WordCountResult.WordCount && words == null) throw new ArgumentNullException("words"); CharMap charmap = null; if (!String.IsNullOrEmpty(addWordChars)) { charmap = InitializeCharMap(); charmap.Add(addWordChars); } // find the end int last = str.Length - 1; if (last > 0 && str[last] == '-' && !IsWordChar(str[last], charmap)) last--; // find the beginning int pos = 0; if (last >= 0 && (str[0] == '-' || str[0] == '\'') && !IsWordChar(str[0], charmap)) pos++; int word_count = 0; while (pos <= last) { if (IsWordChar(str[pos], charmap) || str[pos] == '\'' || str[pos] == '-') { // word started - read it whole: int word_start = pos++; while (pos <= last && (IsWordChar(str[pos], charmap) || str[pos] == '\'' || str[pos] == '-')) { pos++; } switch (format) { case WordCountResult.WordCount: break; case WordCountResult.WordsArray: words.Add(word_count, str.Substring(word_start, pos - word_start)); break; case WordCountResult.PositionsToWordsMapping: words.Add(word_start, str.Substring(word_start, pos - word_start)); break; default: PhpException.InvalidArgument("format"); return -1; } word_count++; } else pos++; } return word_count; } #endregion #region strcmp, strcasecmp, strncmp, strncasecmp /// /// Compares two specified strings, honoring their case, using culture invariant comparison. /// /// A string. /// A string. /// Returns -1 if is less than ; +1 if is greater than , /// and 0 if they are equal. [ImplementsFunction("strcmp")] [EditorBrowsable(EditorBrowsableState.Never)] public static int Compare(string str1, string str2) { return String.CompareOrdinal(str1, str2); } /// /// Compares two specified strings, ignoring their case, using culture invariant comparison. /// /// A string. /// A string. /// Returns -1 if is less than ; +1 if is greater than , /// and 0 if they are equal. [ImplementsFunction("strcasecmp")] [EditorBrowsable(EditorBrowsableState.Never)] public static int CompareIgnoringCase(string str1, string str2) { #if SILVERLIGHT return String.Compare(str1, str2, System.Globalization.CultureInfo.InvariantCulture,System.Globalization.CompareOptions.IgnoreCase); #else return String.Compare(str1, str2, true, System.Globalization.CultureInfo.InvariantCulture); #endif } /// /// Compares parts of two specified strings, honoring their case, using culture invariant comparison. /// /// The lesser string. /// The greater string. /// The upper limit of the length of parts to be compared. /// Returns -1 if is less than ; +1 if is greater than , /// and 0 if they are equal. [ImplementsFunction("strncmp")] [EditorBrowsable(EditorBrowsableState.Never)] public static object Compare(string str1, string str2, int length) { if (length < 0) { PhpException.Throw(PhpError.Warning, LibResources.GetString("must_be_positive", "Length")); return false; } return String.CompareOrdinal(str1, 0, str2, 0, length); } /// /// Compares parts of two specified strings, honoring their case, using culture invariant comparison. /// /// A string. /// A string. /// The upper limit of the length of parts to be compared. /// Returns -1 if is less than ; +1 if is greater than , /// and 0 if they are equal. [ImplementsFunction("strncasecmp")] [EditorBrowsable(EditorBrowsableState.Never)] public static object CompareIgnoringCase(string str1, string str2, int length) { if (length < 0) { PhpException.Throw(PhpError.Warning, LibResources.GetString("must_be_positive", "Length")); return false; } #if SILVERLIGHT return String.Compare(str1, 0, str2, 0, length, System.Globalization.CultureInfo.InvariantCulture, System.Globalization.CompareOptions.IgnoreCase); #else return String.Compare(str1, 0, str2, 0, length, true, System.Globalization.CultureInfo.InvariantCulture); #endif } #endregion #region strpos, strrpos, stripos, strripos #region Stubs /// /// Retrieves the index of the first occurrence of the in the . /// /// See for details. /// Thrown if is empty string. [ImplementsFunction("strpos"), EditorBrowsable(EditorBrowsableState.Never)] [return: CastToFalse] public static int Strpos(string haystack, object needle) { return Strpos(haystack, needle, 0, false); } /// /// Retrieves the index of the first occurrence of the in the . /// The search starts at the specified character position. /// /// The string to search in. /// /// The string or the ordinal value of character to search for. /// If non-string is passed as a needle then it is converted to an integer (modulo 256) and the character /// with such ordinal value (relatively to the current encoding set in the configuration) is searched. /// /// The position where to start searching. Should be between 0 and a length of the including. /// /// Non-negative integer on success, -1 otherwise. /// is out of bounds or is empty string. [ImplementsFunction("strpos"), EditorBrowsable(EditorBrowsableState.Never)] [return: CastToFalse] public static int Strpos(string haystack, object needle, int offset) { return Strpos(haystack, needle, offset, false); } /// /// Retrieves the index of the first occurrence of the in the /// (case insensitive). /// /// See for details. /// Thrown if is empty string. [ImplementsFunction("stripos"), EditorBrowsable(EditorBrowsableState.Never)] [return: CastToFalse] public static int Stripos(string haystack, object needle) { return Strpos(haystack, needle, 0, true); } /// /// Retrieves the index of the first occurrence of the in the /// (case insensitive). /// /// See for details. /// Thrown if is out of bounds or is empty string. [ImplementsFunction("stripos"), EditorBrowsable(EditorBrowsableState.Never)] [return: CastToFalse] public static int Stripos(string haystack, object needle, int offset) { return Strpos(haystack, needle, offset, true); } /// /// Retrieves the index of the last occurrence of the in the . /// /// See for details. [ImplementsFunction("strrpos"), EditorBrowsable(EditorBrowsableState.Never)] [return: CastToFalse] public static int Strrpos(string haystack, object needle) { return Strrpos(haystack, needle, 0, false); } /// /// Retrieves the index of the last occurrence of the in the . /// The search starts at the specified character position. /// /// The string to search in. /// The string or the ordinal value of character to search for. /// If non-string is passed as a needle then it is converted to an integer (modulo 256) and the character /// with such ordinal value (relatively to the current encoding set in the configuration) is searched. /// /// The position where to start searching (is non-negative) or a negative number of characters /// prior the end where to stop searching (if negative). /// /// Non-negative integer on success, -1 otherwise. /// Thrown if is out of bounds or is empty string. [ImplementsFunction("strrpos"), EditorBrowsable(EditorBrowsableState.Never)] [return: CastToFalse] public static int Strrpos(string haystack, object needle, int offset) { return Strrpos(haystack, needle, offset, false); } /// /// Retrieves the index of the last occurrence of the in the /// (case insensitive). /// /// See for details. [ImplementsFunction("strripos"), EditorBrowsable(EditorBrowsableState.Never)] [return: CastToFalse] public static int Strripos(string haystack, string needle) { return Strrpos(haystack, needle, 0, true); } /// /// Retrieves the index of the last occurrence of the in the /// (case insensitive). /// /// See for details. /// Thrown if is out of bounds or is empty string. [ImplementsFunction("strripos"), EditorBrowsable(EditorBrowsableState.Never)] [return: CastToFalse] public static int Strripos(string haystack, object needle, int offset) { return Strrpos(haystack, needle, offset, true); } #endregion /// /// Implementation of str[i]pos functions. /// public static int Strpos(string haystack, object needle, int offset, bool ignoreCase) { if (String.IsNullOrEmpty(haystack)) return -1; if (offset < 0 || offset >= haystack.Length) { if (offset != haystack.Length) PhpException.InvalidArgument("offset", LibResources.GetString("arg:out_of_bounds")); return -1; } string str_needle = PhpVariable.AsString(needle); if (str_needle != null) { if (str_needle == String.Empty) { PhpException.InvalidArgument("needle", LibResources.GetString("arg:empty")); return -1; } if (ignoreCase) return haystack.IndexOf(str_needle, offset, StringComparison.OrdinalIgnoreCase); else return haystack.IndexOf(str_needle, offset, StringComparison.Ordinal); } else { if (ignoreCase) return haystack.IndexOf(ChrUnicode(Core.Convert.ObjectToInteger(needle) % 256), offset, StringComparison.OrdinalIgnoreCase); else return haystack.IndexOf(ChrUnicode(Core.Convert.ObjectToInteger(needle) % 256), offset, StringComparison.Ordinal); } } /// /// Implementation of strr[i]pos functions. /// public static int Strrpos(string haystack, object needle, int offset, bool ignoreCase) { if (String.IsNullOrEmpty(haystack)) return -1; int end = haystack.Length - 1; if (offset > end || offset < -end - 1) { PhpException.InvalidArgument("offset", LibResources.GetString("arg:out_of_bounds")); return -1; } string str_needle = PhpVariable.AsString(needle); if (offset < 0) { end += offset + (str_needle != null ? str_needle.Length : 1); offset = 0; } if (str_needle != null) { if (str_needle.Length == 0) { PhpException.InvalidArgument("needle", LibResources.GetString("arg:empty")); return -1; } if (ignoreCase) return haystack.LastIndexOf(str_needle, end, end - offset + 1, StringComparison.OrdinalIgnoreCase); else return haystack.LastIndexOf(str_needle, end, end - offset + 1, StringComparison.Ordinal); } else { if (ignoreCase) return haystack.LastIndexOf(ChrUnicode(Core.Convert.ObjectToInteger(needle) % 256), end, end - offset + 1, StringComparison.OrdinalIgnoreCase); else return haystack.LastIndexOf(ChrUnicode(Core.Convert.ObjectToInteger(needle) % 256), end, end - offset + 1, StringComparison.Ordinal); } } #endregion #region strstr, stristr, strchr, strrchr #region Stubs /// /// Finds first occurrence of a string. /// /// The string to search in. /// The substring to search for. /// Part of string from the first occurrence of to the end /// of or null if is not found. /// Thrown when is empty. [ImplementsFunction("strstr"), EditorBrowsable(EditorBrowsableState.Never)] [return: CastToFalse] public static string Strstr(string haystack, object needle) { return StrstrImpl(haystack, needle, false, false); } /// /// Finds first occurrence of a string. /// /// The string to search in. /// The substring to search for. /// If TRUE, strstr() returns the part of the haystack before the first occurrence of the needle. /// Part of string from the first occurrence of to the end /// of or null if is not found. /// Thrown when is empty. [ImplementsFunction("strstr"), EditorBrowsable(EditorBrowsableState.Never)] [return: CastToFalse] public static string Strstr(string haystack, object needle, bool beforeNeedle /*= false*/) { return StrstrImpl(haystack, needle, false, beforeNeedle); } /// /// Finds first occurrence of a string. Alias of . /// /// See for details. /// Thrown when is empty. [ImplementsFunction("strchr"), EditorBrowsable(EditorBrowsableState.Never)] public static string Strchr(string haystack, object needle) { return StrstrImpl(haystack, needle, false, false); } /// /// Case insensitive version of . /// /// Thrown when is empty. [ImplementsFunction("stristr"), EditorBrowsable(EditorBrowsableState.Never)] [return: CastToFalse] public static string Stristr(string haystack, object needle) { return StrstrImpl(haystack, needle, true, false); } /// /// Case insensitive version of . /// /// /// /// If TRUE, strstr() returns the part of the haystack before the first occurrence of the needle. /// Thrown when is empty. [ImplementsFunction("stristr"), EditorBrowsable(EditorBrowsableState.Never)] [return: CastToFalse] public static string Stristr(string haystack, object needle, bool beforeNeedle /*= false*/) { return StrstrImpl(haystack, needle, true, beforeNeedle); } #endregion /// /// This function returns the portion of haystack which starts at the last occurrence of needle and goes until the end of haystack . /// /// The string to search in. /// /// If needle contains more than one character, only the first is used. This behavior is different from that of strstr(). /// If needle is not a string, it is converted to an integer and applied as the ordinal value of a character. /// /// This function returns the portion of string, or FALSE if needle is not found. /// Thrown when is empty. [ImplementsFunction("strrchr"), EditorBrowsable(EditorBrowsableState.Never)] [return: CastToFalse] public static string Strrchr(string haystack, object needle) { if (haystack == null) return null; char charToFind; string str_needle; if ((str_needle = PhpVariable.AsString(needle)) != null) { if (str_needle.Length == 0) { PhpException.InvalidArgument("needle", LibResources.GetString("arg:empty")); return null; } charToFind = str_needle[0]; } else { charToFind = ChrUnicode(Core.Convert.ObjectToInteger(needle) % 256)[0]; } int index = haystack.LastIndexOf(charToFind); if (index < 0) return null; return haystack.Substring(index); } /// /// Implementation of str[i]{chr|str} functions. /// internal static string StrstrImpl(string haystack, object needle, bool ignoreCase, bool beforeNeedle) { if (haystack == null) return null; int index; string str_needle = PhpVariable.AsString(needle); if (str_needle != null) { if (str_needle == String.Empty) { PhpException.InvalidArgument("needle", LibResources.GetString("arg:empty")); return null; } if (ignoreCase) index = haystack.ToLower().IndexOf(str_needle.ToLower()); else index = haystack.IndexOf(str_needle); } else { if (ignoreCase) index = haystack.ToLower().IndexOf(ChrUnicode(Core.Convert.ObjectToInteger(needle) % 256).ToLower()); else index = haystack.IndexOf(ChrUnicode(Core.Convert.ObjectToInteger(needle) % 256)); } return (index == -1) ? null : (beforeNeedle ? haystack.Substring(0, index) : haystack.Substring(index)); } #endregion #region strpbrk /// /// Finds first occurence of any of given characters. /// /// The string to search in. /// The characters to search for given as a string. /// Part of string from the first occurrence of any of characters contained /// in to the end of or null if no character is /// found. /// Thrown when is empty. [ImplementsFunction("strpbrk")] [return: CastToFalse] public static string Strpbrk(string haystack, string charList) { if (charList == null) { PhpException.InvalidArgument("charList", LibResources.GetString("arg:empty")); return null; } if (haystack == null) return null; int index = haystack.IndexOfAny(charList.ToCharArray()); return (index >= 0 ? haystack.Substring(index) : null); } #endregion #region strtolower, strtoupper, strlen /// /// Returns string with all alphabetic characters converted to lowercase. /// Note that 'alphabetic' is determined by the current culture. /// /// The string to convert. /// The lowercased string or empty string if is null. [ImplementsFunction("strtolower")] public static string ToLower(string str) { return (str == null) ? String.Empty : str.ToLower(Locale.GetCulture(Locale.Category.CType)); } /// /// Returns string with all alphabetic characters converted to lowercase. /// Note that 'alphabetic' is determined by the current culture. /// /// The string to convert. /// The lowercased string or empty string if is null. [ImplementsFunction("strtoupper")] public static string ToUpper(string str) { return (str == null) ? String.Empty : str.ToUpper(Locale.GetCulture(Locale.Category.CType)); } /// /// Returns the length of a string. /// /// The string (either or ). /// The length of the string. [ImplementsFunction("strlen"/*, FunctionImplOptions.Special*/)] [PureFunction] [EditorBrowsable(EditorBrowsableState.Never)] public static int Length(object x) { string str = x as string; if (str != null) return str.Length; PhpBytes bytes = x as PhpBytes; if (bytes != null) return bytes.Length; PhpString phpstr = x as PhpString; if (phpstr != null) return phpstr.Length; return Core.Convert.ObjectToString(x).Length; } #endregion #region Helpers /// /// Converts object to . /// In case if bunary string, the conversion routine respects given . /// /// Object to be converted. /// Character set used to encode binary string to . /// String representation of . internal static string ObjectToString(object obj, string charSet) { if (obj != null && obj.GetType() == typeof(PhpBytes)) { var encoding = Encoding.GetEncoding(charSet); if (encoding == null) throw new ArgumentException(string.Format(Strings.arg_invalid_value, "charSet", charSet), "charSet"); return encoding.GetString(((PhpBytes)obj).ReadonlyData); } else { return Core.Convert.ObjectToString(obj); } } #endregion } } ================================================ FILE: Source/ClassLibrary/Strings.resx ================================================ text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Option '{0}' has already been registered. Serializer '{0}' has already been registered. Serialization of type {0} is not supported by PhpFormatter. Unexpected character in the stream. Unexpected end of stream. Invalid data encountered in the stream (bad length marker). Invalid data encountered in the stream (the specified data type is invalid in this context). Invalid data encountered in the stream (bad back reference marker). Unable to instantiate class '{0}'. PhpFormatter does not support serialization binders. PhpFormatter does not support streaming context. PhpFormatter does not support surrogate selectors. Nothing to repeat - duplicate quantifier at offset {0} in matching part of regular expression. Class {0} has no unserializer {0}::serialize() must return a string or NULL Headers has already been sent; modification of cookies or other HTTP headers are not allowed Additional parameters not supported Number of elements must be positive Number of repetitions must be non-negative Not a valid URL, unable to parse ({0}) Invalid source charser Invalid destination charser Limit is less than 1 Ranges cannot share an endpoint Range not allowed here (first endpoint may be illeagal) First endpoint of range cannot be a character class Word boundary must be single bracket expression Collating element representing more than one character cannot be the first endpoint of range Equivalence class cannot be endpoint of range (first endpoint here) Ranges for current page encoding are not supported Range: first character code is greater than second Unknown character class name Character class cannot be an endpoint of range (second endpoint here) Equivalence class cannot be an endpoint of a range (second endpoint here) Quantifier '?' following nothing (after '(') Regular expression cannot end with '\\' Regular expression cannot end with '(' Unenclosed bracket expression Invalid '{0}'-range, no character to the left of '{0}' Invalid '{0}'-range, no character to the right of '{0}' Invalid '{0}'-range, '{0}'-range needs to be incrementing Can't force cut when width is zero Invalid name of type The number of items is {0} but it must be between 1 and array item count {1} Can {0} only string and integer values Uninitialized string offset '{0}' This function is deprecated, use the call_user_func variety with the array(&$obj, "method") syntax instead {0} should be specified Cannot send the mail due to error: '{0}' Email address '{0}' is not valid Header '{0}' not supported and has been ignored Requested host not responding HTTP request failed with message '{0}' Extensions cannot be loaded by script. Use configuration files instead. Configuration option '{0}' cannot be set or restored since it is read only Configuration option '{0}' is not supported Configuration option '{0}' is not known The segment length must be greater then zero Zero is not a valid argument number No prefix specified - possible security hazard String containg Unicode characters greater than '\u0800' are not supported Invalid scan conversion character "{0}" The number of variables ({0}) differs from the number of format specifiers ({1}) Unmatched [ in format string PREG_PATTERN_ORDER and PREG_SET_ORDER flags are mutually exclusive Replacement cannot be an array if pattern is not an array Empty regular expression Delimiter must not be alphanumeric or backslash Ignoring unsupported pattern modifier '{0}' in perl regular expression Ignoring unknown pattern modifier '{0}' in perl regular expression Pattern modifier '{0}' is ignored due to use of modifier '{1}' in perl regular expression No ending delimiter '{0}' found Invalid calendar id '{0}' Session doesn't not exist Function not allowed in web server context Parse error on position {0} near '{1}' Serializer '{0}' is unknown. It hasn't been registered by any loaded library Deserialization failed: {0} at offset {1} of {2} bytes Serialization failed: {0} Parse error on line {0} Path '{0}' is invalid Recursion detected Unknown time zone '{0}' specified by 'TZ' environment variable Unknown time zone '{0}' Using system time zone settings which may be inaccurate ('{0}' zone selected) The given parameter is not a valid uuencoded string Descriptor #{0} is not supported Descriptor item #{0} must be either an array or a resource Descriptor item #{0} should contain handle qualifier and parameters Missing mode parameter from descriptor item #{0} Invalid mode for descriptor item #{0} Missing file name parameter from descriptor item #{0} '{0}' is not a valid handle qualifier Invalid process resource An error occured while terminating process {0} (pid = {1}): {2} An error occured while starting process: {0} An error occured while waiting for process exit: {0} Attempted {0} variable override '{0}' is not a valid value for cache limiter Invalid base64 encoded data Type '{0}': unknown format code Type '{0}': '*' ignored Type '{0}': not enough arguments Type '{0}': not enough characters in string Type '{0}': outside of string Type '{0}': binary data length has overflown integer size Type '{0}': multi-byte characters are not supported Type '{0}': illegal hex digit '{0}' {0} unused arguments Type '{0}': not enough input, need {1}, have {2} Invalid session save path '{0}'. User session handler operation '{0}' failed (sid = '{1}', save_path = '{2}') Supplied resource is not a valid Directory listing resource Supplied resource is not a valid Stream-Context resource The directory '{0}' does not exist The destination wrapper is different from the source one; use copy instead File type not recognized Error connecting '{0}': {0} Connect timeout: {0} did not respond Number of connections reached the limit ({0}) Cannot open connection: {0} Error occured while closing the connection: {0} Command execution failed: {0} Database selection failed: {0} Cannot retrieve schema information Field (column) of name '{0}' doesn't exist in the result Field index {0} is invalid for {1} resource #{2} Row index {0} is invalid for {1} resource #{2} Parameter '{0}' has already been bound Invalid stored procedure resource Invalid connection resource Invalid query result resource Invalid port number '{0}' Invalid argument '{0}' Too few arguments Second argument is not an object or class name Argument #{0} should be an array or a sort flag Argument #{0} specifies a sorting flag which has already been specified for the array Argument #{0} should be an array Argument '{0}' must be an integer indexed array '{0}' should not be negative '{0}' should be positive '{0}' should not be zero '{0}' should not be null nor empty '{0}' should not be empty '{0}' is out of bounds '{0}' not an object or class name Value '{1}' is invalid for argument '{0}' Argument '{0}' has invalid length Phalanger: Error report Number of seconds must be greater than or equal to 0 Length value {0} exceeds string length Offset value {0} exceeds string length Length should be greater than 0 Offset should be greater than or equal to 0 {0} must be greater than or equal to 0 expects parameter {0} to be {1}, {2} given '{0}' option missing From header was not specified. By changing ASP.NET session ID, all the session data created during this request will be lost. New session will start in the next request. Resources\WindowsTZ.xml;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;windows-1250 ================================================ FILE: Source/ClassLibrary/UUEncoding.cs ================================================ /* Copyright (c) 2005-2006 Tomas Matousek. The use and distribution terms for this software are contained in the file named License.txt, which can be found in the root of the Phalanger distribution. By using this software in any fashion, you are agreeing to be bound by the terms of this license. You must not remove this notice from this software. */ using System; using System.IO; using System.Text; using PHP.Core; #if SILVERLIGHT using MathEx = PHP.CoreCLR.MathEx; #else using MathEx = System.Math; using System.Diagnostics; #endif namespace PHP.Library { /// /// Provides methods for strings UU-encoding and UU-decoding. /// /// /// /// Uuencode repeatedly takes in a group of three bytes, adding trailing zeros if there are fewer /// than three bytes left. These 24 bits are split into four groups of six which are treated as /// numbers between 0 and 63. Decimal 32 is added to each number and they are output as ASCII /// characters which will lie in the range 32 (space) to 32+63 = 95 (underscore). ASCII characters /// greater than 95 may also be used; however, only the six right-most bits are relevant. /// /// /// Each group of sixty output characters (corresponding to 45 input bytes) is output as a separate /// line preceded by an encoded character giving the number of encoded bytes on that line. /// For all lines except the last, this will be the character 'M' (ASCII code 77 = 32+45). /// If the input is not evenly divisible by 45, the last line will contain the remaining N /// output characters, preceded by the character whose code is 32+N. Finally, a line containing just /// a single space (or grave character) is output, followed by one line containing the string "end". /// /// /// Sometimes each data line has extra dummy characters (often the grave accent) added to avoid /// problems with mailers that strip trailing spaces. These characters are ignored by uudecode. /// The grave accent ('`') is used in place of a space character. /// When stripped of their high bits they both decode to 100000. /// /// public static class UUEncoder { private const char UUEncodeZero = '`'; /// /// Encodes an array of bytes using UU-encode algorithm. /// /// Array of bytes to be encoded. /// Encoded output writer. public static void Encode(byte[]/*!*/ input, TextWriter/*!*/ output) { if (input == null) throw new ArgumentNullException("input"); if (output == null) throw new ArgumentNullException("output"); if (input.Length == 0) return; const int max_bytes_per_line = 45; int remains; int full_lines = MathEx.DivRem(input.Length, max_bytes_per_line, out remains); int input_offset = 0; // encode full lines: for (int i = 0; i < full_lines; i++) { output.Write(EncodeByte(max_bytes_per_line)); for (int j = 0; j < max_bytes_per_line / 3; j++) { EncodeWriteTriplet(output, input[input_offset], input[input_offset + 1], input[input_offset + 2]); input_offset += 3; } output.Write('\n'); } // encode remaining bytes (if any): if (remains > 0) { output.Write(EncodeByte(remains)); // ceil(remains/3)*4 int full_triplets = MathEx.DivRem(remains, 3, out remains); // full triplets: for (int i = 0; i < full_triplets; i++) { EncodeWriteTriplet(output, input[input_offset], input[input_offset + 1], input[input_offset + 2]); input_offset += 3; } // remaining bytes: if (remains == 1) { EncodeWriteTriplet(output, input[input_offset], 0, 0); } else if (remains == 2) { EncodeWriteTriplet(output, input[input_offset], input[input_offset + 1], 0); } output.Write('\n'); } output.Write('`'); output.Write('\n'); } private static char EncodeByte(int b) { Debug.Assert(b <= 0x3f); return (b == 0) ? '`' : (char)(0x20 + b); } private static byte DecodeChar(int c) { return (byte)((c - 0x20) & 0x3f); } private static void EncodeWriteTriplet(TextWriter/*!*/ output, int a, int b, int c) { output.Write(EncodeByte(a >> 2)); output.Write(EncodeByte(((a << 4) | (b >> 4)) & 0x3f)); output.Write(EncodeByte(((b << 2) | (c >> 6)) & 0x3f)); output.Write(EncodeByte(c & 0x3f)); } /// /// Decodes textual data using UU-encode algorithm. /// /// Textual data reader. /// Binary output writer. /// Whether input data has correct format. public static bool Decode(TextReader/*!*/ input, MemoryStream/*!*/ output) { if (input == null) throw new ArgumentNullException("input"); if (output == null) throw new ArgumentNullException("output"); // empty input: if (input.Peek() == -1) return true; for (; ; ) { int line_length = input.Read(); if (line_length == -1) return false; line_length = DecodeChar((char)line_length); // stopped by '`' on the last line: if (line_length == 0) return input.Read() == (int)'\n'; int remains; int full_triplets = MathEx.DivRem(line_length, 3, out remains); for (int i = 0; i < full_triplets; i++) { int a = DecodeChar(input.Read()); int b = DecodeChar(input.Read()); int c = DecodeChar(input.Read()); int d = input.Read(); if (d == -1) return false; d = DecodeChar(d); output.WriteByte((byte)((a << 2 | b >> 4) & 0xff)); output.WriteByte((byte)((b << 4 | c >> 2) & 0xff)); output.WriteByte((byte)((c << 6 | d) & 0xff)); } if (remains > 0) { int a = DecodeChar(input.Read()); int b = DecodeChar(input.Read()); int c = DecodeChar(input.Read()); int d = input.Read(); if (d == -1) return false; d = DecodeChar(d); output.WriteByte((byte)(a << 2 | b >> 4)); if (remains == 2) output.WriteByte((byte)(b << 4 | c >> 2)); } if (input.Read() != (int)'\n') return false; } } /// /// Encodes a string using UU-encode algorithm. /// /// String of bytes to be encoded. /// The encoded string. [ImplementsFunction("convert_uuencode")] public static string Encode(PhpBytes bytes) { byte[] data = (bytes != null) ? bytes.ReadonlyData : ArrayUtils.EmptyBytes; StringBuilder result = new StringBuilder((int)(data.Length * 1.38 + data.Length + 1)); Encode(data, new StringWriter(result)); return result.ToString(); } /// /// Decodes a uu-encoded string. /// /// Data to be decoded. /// Decoded bytes. [ImplementsFunction("convert_uudecode")] public static PhpBytes Decode(string data) { if (data == null) data = ""; MemoryStream result = new MemoryStream((int)(data.Length * 0.75) + 2); if (!Decode(new StringReader(data), result)) PhpException.Throw(PhpError.Warning, LibResources.GetString("invalid_uuencoded_string")); return new PhpBytes(result.ToArray()); } } } ================================================ FILE: Source/ClassLibrary/UrlRewriter.CLR.cs ================================================ /* Copyright (c) 2006 Tomas Matousek. The use and distribution terms for this software are contained in the file named License.txt, which can be found in the root of the Phalanger distribution. By using this software in any fashion, you are agreeing to be bound by the terms of this license. You must not remove this notice from this software. TODO: filter - see url_scanner_ex.c session starts rewriter (session.use_trans_sid) url_rewriter.tags */ using System; using System.Web; using System.Net; using System.Text; using System.Text.RegularExpressions; using System.Collections; using System.Collections.Generic; using PHP.Core; using System.Diagnostics; namespace PHP.Library { public sealed class UrlRewriter { #region Construction and Properties private UrlRewriter() { } private Dictionary Variables { get { if (_variables == null) _variables = new Dictionary(); return _variables; } } private Dictionary _variables; // GENERICS private PhpCallback filterCallback; private PhpCallback/*!*/ GetOrCreateFilterCallback(ScriptContext/*!*/ context) { if (filterCallback == null) filterCallback = new PhpCallback(new RoutineDelegate(Filter), context); return filterCallback; } #endregion #region object #endregion #region Filter /// /// Tags parser, modifies the specified elements in the HTML code. /// private class TagsUrlRewriter: UrlRewriterTagsParser { public TagsUrlRewriter(UrlRewriter rewriter) { this.rewriter = rewriter; } private readonly UrlRewriter rewriter; Regex protocolPattern = new Regex(@"^[a-zA-Z]+:(\\|//).*", RegexOptions.Compiled); protected override void OnTagAttribute(string tagName, ref string attributeName, ref string attributeValue, ref char attributeValueQuote) { string[] attrs; if (ScriptContext.CurrentContext.Config.Session.UrlRewriterTags.TryGetValue(tagName.ToLower(), out attrs)) { for (int i = 0; i < attrs.Length; i++) { if (string.Equals(attrs[i], attributeName, StringComparison.InvariantCultureIgnoreCase)) { if (protocolPattern.IsMatch(attributeValue)) return; // the URL must NOT be an absolute URL (not start with the protocol name) // modify attribute value if (attributeValue.Contains("?")) attributeValue += "&"; else attributeValue += "?"; bool bFirst = true; foreach (KeyValuePair item in rewriter.Variables) { if (bFirst) bFirst = false; else attributeValue += "&"; attributeValue += item.Key + "=" + item.Value; } return; } } } } protected override void OnTagElement(string tagName, ref string tagString) { // modify the "form" element const string strFormTag = "form"; if ( string.Compare(tagName, strFormTag, StringComparison.InvariantCultureIgnoreCase) == 0 && ScriptContext.CurrentContext.Config.Session.UrlRewriterTags.ContainsKey(strFormTag) ) { foreach (KeyValuePair item in rewriter.Variables) tagString += string.Format("", item.Key, item.Value); } } } private TagsUrlRewriter parser; private TagsUrlRewriter.ParserState parserState = new TagsUrlRewriter.ParserState(); private object Filter(object instance, PhpStack/*!*/ stack) { StringBuilder result = new StringBuilder(); Debug.Assert(stack.ArgCount >= 1, "Called by output buffering, so should be ok"); string data = PhpVariable.AsString(stack.PeekValueUnchecked(1)); stack.RemoveFrame(); // parse the text if (parser == null) parser = new TagsUrlRewriter(this); return parser.ParseHtml(parserState, data); } #endregion #region output_add_rewrite_var, output_reset_rewrite_vars [ImplementsFunction("output_add_rewrite_var")] public static bool AddRewriteVariable(string name, string value) { if (String.IsNullOrEmpty(name)) { PhpException.InvalidArgument("name", LibResources.GetString("arg:null_or_empty")); return false; } ScriptContext context = ScriptContext.CurrentContext; UrlRewriter rewriter = context.Properties.GetOrCreateProperty(() => new UrlRewriter()); BufferedOutput output = context.BufferedOutput; // some output flush output.Flush(); rewriter.Variables[name] = value; // start UrlRewriter filtering if not yet if (output.FindLevelByFilter( rewriter.filterCallback ) < 0) { // create new output buffer level (URL-Rewriter is not started yet) int Level = output.IncreaseLevel(); output.SetFilter(rewriter.GetOrCreateFilterCallback(context), Level); output.SetLevelName(Level, "URL-Rewriter"); } context.IsOutputBuffered = true; // turn on output buffering if not yet return true; } [ImplementsFunction("output_reset_rewrite_vars")] public static bool ResetRewriteVariables() { /*PhpException.FunctionNotSupported(); return false;*/ ScriptContext context = ScriptContext.CurrentContext; UrlRewriter rewriter; if (context.Properties.TryGetProperty(out rewriter) == false) return false; BufferedOutput output = context.BufferedOutput; if (output.Level == 0 || output.GetFilter() != rewriter.filterCallback) return false; // some output flush output.Flush(); rewriter.Variables.Clear(); output.DecreaseLevel(false); if (output.Level == 0) context.IsOutputBuffered = false; return true; } #endregion } } ================================================ FILE: Source/ClassLibrary/UrlRewriter.TagsParser.cs ================================================ using System; using System.Collections.Generic; using System.Text; namespace PHP.Library { /// /// Parsing of HTML tags, /// primarily targeted for parsing and replacing URLs within output buffering. /// /// Parses the input text and calls several events, when specified HTML elements are found. /// public class UrlRewriterTagsParser { #region HTML elements found events /// /// Called when tag attribute is found and parsed. /// Allows to modify the attribute. /// /// The tag name, where the attribute was found. /// The attribute name. Can be modified. /// The attribute value. Can be modified. /// The attribute value quote character. Can be modified. virtual protected void OnTagAttribute(string tagName, ref string attributeName, ref string attributeValue, ref char attributeValueQuote) { // modify attributeName // modify attributeValue // modify attributeValueQuote } /// /// Called when the whole tag is found and parsed. /// /// The tag name. /// The whole tag input string. Can be modified. virtual protected void OnTagElement(string tagName, ref string tagString) { // modify tagString } #endregion #region Parser states /// /// Internal parser states. /// public enum ParserStateNum { OuterText = 0, // not in any HTML tag, waiting for < TagOpening, // < TagClosing, // > TagName, // InnerTagSpace, // \s | \t ... AttributeName, // AttributePreAssigning, // AttributeAssigning, // = AttributeValueOpening, // " | ' AttributeValueClosing, // " | ' AttributeValue, // } /// /// Internal parser state. /// public class ParserState { public ParserStateNum state = ParserStateNum.OuterText; // tag public StringBuilder lastTagName; public StringBuilder lastTagString; // attribute public StringBuilder lastAttributeName; public char lastAttributeValueQuote; public StringBuilder lastAttributeValue; } #endregion #region Parsing HTML tags private bool IsWhiteSpace(char c) { return (c == ' ' || c == '\n' || c == '\t' || c == '\r'); } /// /// Parses the given text, using the given current parser state. /// /// /// public string ParseHtml( ParserState state, string text ) { StringBuilder result = new StringBuilder(); foreach (char c in text) { switch (state.state) { case ParserStateNum.OuterText: // -> TagOpening if (c == '<') { state.state = ParserStateNum.TagOpening; state.lastTagString = new StringBuilder(); } break; case ParserStateNum.TagOpening: // -> TagClosing, TagName if (c == '>') { state.state = ParserStateNum.TagClosing; } else { state.state = ParserStateNum.TagName; state.lastTagName = new StringBuilder(); } break; case ParserStateNum.TagClosing: // not reachable throw new InvalidOperationException("This state should not be reachable."); case ParserStateNum.TagName: // -> InnerTagSpace, TagClosing if (IsWhiteSpace(c) || c == '/') state.state = ParserStateNum.InnerTagSpace; else if (c == '>') state.state = ParserStateNum.TagClosing; break; case ParserStateNum.InnerTagSpace: // -> TagClosing, AttributeName if (c == '>') state.state = ParserStateNum.TagClosing; else if (c == '/') {} else if (!IsWhiteSpace(c)) { state.state = ParserStateNum.AttributeName; state.lastAttributeName = new StringBuilder(); } break; case ParserStateNum.AttributeName: // -> AttributeAssigning, AttributePreAssigning, TagClosing if (c == '=') { state.lastAttributeValue = new StringBuilder(); state.state = ParserStateNum.AttributeAssigning; } else if (IsWhiteSpace(c)) { state.state = ParserStateNum.AttributePreAssigning; } else if (c == '>') { state.lastTagString.Append(state.lastAttributeName); state.state = ParserStateNum.TagClosing; } break; case ParserStateNum.AttributePreAssigning: // -> AttributeAssigning, TagClosing, AttributeName if (c == '=') { state.lastAttributeValue = new StringBuilder(); state.state = ParserStateNum.AttributeAssigning; } else if (IsWhiteSpace(c)) {} else if (c == '>') { state.lastTagString.Append(state.lastAttributeName); state.state = ParserStateNum.TagClosing; } else { state.lastTagString.Append(state.lastAttributeName); state.lastTagString.Append(' '); // attribute name without value state.state = ParserStateNum.AttributeName; state.lastAttributeName = new StringBuilder(); } break; case ParserStateNum.AttributeAssigning: // -> AttributeValueOpening, AttributeValue, TagClosing if (c == '\'' || c == '\"') { state.lastAttributeValueQuote = c; state.state = ParserStateNum.AttributeValueOpening; } else if (!IsWhiteSpace(c)) { state.lastAttributeValueQuote = '\0'; state.state = ParserStateNum.AttributeValue; } else if (c == '>') { state.lastTagString.Append(state.lastAttributeName); // attribute name without value state.state = ParserStateNum.TagClosing; } break; case ParserStateNum.AttributeValueOpening: throw new InvalidOperationException("This state should not be reachable."); case ParserStateNum.AttributeValueClosing: throw new InvalidOperationException("This state should not be reachable."); case ParserStateNum.AttributeValue: // -> AttributeValueClosing, TagClosing if ( c == state.lastAttributeValueQuote || (state.lastAttributeValueQuote == '\0' && IsWhiteSpace(c)) ) { state.state = ParserStateNum.AttributeValueClosing; } else if (state.lastAttributeValueQuote == '\0' && c == '>') { Parse_AttributeValueClosing(state, c, result); state.state = ParserStateNum.TagClosing; } break; } switch (state.state) { case ParserStateNum.OuterText: Parse_OuterText(state, c, result); break; case ParserStateNum.TagOpening: Parse_TagOpening(state, c, result); break; case ParserStateNum.TagClosing: Parse_TagClosing(state, c, result); break; case ParserStateNum.TagName: Parse_TagName(state, c, result); break; case ParserStateNum.InnerTagSpace: Parse_InnerTagSpace(state, c, result); break; case ParserStateNum.AttributeName: Parse_AttributeName(state, c, result); break; case ParserStateNum.AttributePreAssigning: Parse_AttributePreAssigning(state, c, result); break; case ParserStateNum.AttributeAssigning: Parse_AttributeAssigning(state, c, result); break; case ParserStateNum.AttributeValueOpening: Parse_AttributeValueOpening(state, c, result); break; case ParserStateNum.AttributeValueClosing: Parse_AttributeValueClosing(state, c, result); break; case ParserStateNum.AttributeValue: Parse_AttributeValue(state, c, result); break; } } return result.ToString(); } private void Parse_OuterText( ParserState state, char c, StringBuilder result ) { result.Append(c); } private void Parse_TagOpening(ParserState state, char c, StringBuilder result) { state.lastTagString.Append(c); } private void Parse_TagClosing(ParserState state, char c, StringBuilder result) { state.lastTagString.Append(c); string tagString = state.lastTagString.ToString(); OnTagElement(state.lastTagName.ToString(), ref tagString); result.Append(tagString); state.state = ParserStateNum.OuterText; } private void Parse_TagName(ParserState state, char c, StringBuilder result) { state.lastTagString.Append(c); state.lastTagName.Append(c); } private void Parse_InnerTagSpace(ParserState state, char c, StringBuilder result) { state.lastTagString.Append(c); } private void Parse_AttributeName(ParserState state, char c, StringBuilder result) { state.lastAttributeName.Append(c); } private void Parse_AttributePreAssigning(ParserState state, char c, StringBuilder result) {} private void Parse_AttributeAssigning(ParserState state, char c, StringBuilder result) {} private void Parse_AttributeValueOpening(ParserState state, char c, StringBuilder result) { state.state = ParserStateNum.AttributeValue; } private void Parse_AttributeValueClosing(ParserState state, char c, StringBuilder result) { string attName = state.lastAttributeName.ToString(), attValue = state.lastAttributeValue.ToString(); OnTagAttribute(state.lastTagName.ToString(), ref attName, ref attValue, ref state.lastAttributeValueQuote); state.lastTagString.Append(attName); state.lastTagString.Append('='); if (state.lastAttributeValueQuote != '\0') state.lastTagString.Append(state.lastAttributeValueQuote); state.lastTagString.Append(attValue); if (state.lastAttributeValueQuote != '\0') state.lastTagString.Append(state.lastAttributeValueQuote); state.state = ParserStateNum.InnerTagSpace; } private void Parse_AttributeValue(ParserState state, char c, StringBuilder result) { state.lastAttributeValue.Append(c); } #endregion } } ================================================ FILE: Source/ClassLibrary/Utils.CoreCLR.cs ================================================ using System; using System.Net; using System.Windows; using System.Windows.Controls; using System.Windows.Documents; using System.Windows.Ink; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Shapes; using System.Windows.Markup; using PHP.Core; using PHP.Core.Reflection; namespace PHP.Library { public static class Utils { [ImplementsFunction("loadfile")] public static void LoadFile(string path, PhpCallback function) { string file = string.Empty; if (function == null) { PhpException.ArgumentNull("function"); return; } if (function.IsInvalid) return; WebClient webclient = new WebClient(); webclient.DownloadStringCompleted += new DownloadStringCompletedEventHandler( delegate(object sender, DownloadStringCompletedEventArgs downEventArgs) { var canvas = ((ClrObject)ScriptContext.CurrentContext.AutoGlobals.Canvas.Value).RealObject as System.Windows.Controls.Canvas; canvas.Dispatcher.BeginInvoke(() => { function.Invoke(downEventArgs.Result); }); } ); var source_root = ((ClrObject)ScriptContext.CurrentContext.AutoGlobals.Addr.Value).RealObject as string; Uri baseUri = new Uri(source_root + "/", UriKind.Absolute); Uri uriFile = new Uri(path, UriKind.RelativeOrAbsolute); Uri uri = new Uri(baseUri, uriFile); webclient.DownloadStringAsync(uri); //downloadFinished.WaitOne(); //return XamlReader.Load(file); } } } ================================================ FILE: Source/ClassLibrary/Variables.cs ================================================ /* Copyright (c) 2004-2006 Tomas Matousek. The use and distribution terms for this software are contained in the file named License.txt, which can be found in the root of the Phalanger distribution. By using this software in any fashion, you are agreeing to be bound by the terms of this license. You must not remove this notice from this software. */ using System; using System.IO; using System.Text; using System.Collections; using System.ComponentModel; using System.Runtime.Serialization; using PHP.Core; using System.Collections.Generic; #if SILVERLIGHT using PHP.CoreCLR; #else using System.Web; using System.Runtime.Serialization.Formatters.Binary; using System.Diagnostics; #endif namespace PHP.Library { #region Enumerations /// /// Type of extraction . /// [Flags] public enum ExtractType { /// PHP constant: EXTR_OVERWRITE [ImplementsConstant("EXTR_OVERWRITE")] Overwrite, /// PHP constant: EXTR_SKIP [ImplementsConstant("EXTR_SKIP")] Skip, /// PHP constant: EXTR_PREFIX_SAME [ImplementsConstant("EXTR_PREFIX_SAME")] PrefixSame, /// PHP constant: EXTR_PREFIX_ALL [ImplementsConstant("EXTR_PREFIX_ALL")] PrefixAll, /// PHP constant: EXTR_PREFIX_INVALID [ImplementsConstant("EXTR_PREFIX_INVALID")] PrefixInvalid, /// PHP constant: EXTR_PREFIX_IF_EXISTS [ImplementsConstant("EXTR_PREFIX_IF_EXISTS")] PrefixIfExists, /// PHP constant: EXTR_IF_EXISTS [ImplementsConstant("EXTR_IF_EXISTS")] IfExists, /// PHP constant: EXTR_REFS [ImplementsConstant("EXTR_REFS")] Refs = 256, /// A value masking all options but (0xff). [EditorBrowsable(EditorBrowsableState.Never)] NonFlags = 0xff } /// /// File upload errors. /// [ImplementsExtension(LibraryDescriptor.ExtCore)] public enum FileUploadError { /// /// No error. /// [ImplementsConstant("UPLOAD_ERR_OK")] None, /// /// The uploaded file exceeds the "upload_max_filesize" configuration option. /// [ImplementsConstant("UPLOAD_ERR_INI_SIZE")] SizeExceededOnServer, /// /// The uploaded file exceeds the "MAX_FILE_SIZE" value specified in the form. /// [ImplementsConstant("UPLOAD_ERR_FORM_SIZE")] SizeExceededOnClient, /// /// The uploaded file was only partially uploaded. /// [ImplementsConstant("UPLOAD_ERR_PARTIAL")] Partial, /// /// No file was uploaded. /// [ImplementsConstant("UPLOAD_ERR_NO_FILE")] NoFile, /// /// Missing a temporary folder /// [ImplementsConstant("UPLOAD_ERR_NO_TMP_DIR")] NoTempDirectory, /// /// Missing a temporary folder /// [ImplementsConstant("UPLOAD_ERR_CANT_WRITE")] CantWrite, /// /// A PHP extension stopped the file upload /// [ImplementsConstant("UPLOAD_ERR_EXTENSION")] ErrorExtension } #endregion /// /// Provides means for PHP variables handling. /// /// public static class PhpVariables { #region Constants /// /// Recursive counting. /// [ImplementsConstant("COUNT_RECURSIVE")] public const int CountRecursive = 1; /// /// Non-recursive counting. /// [ImplementsConstant("COUNT_NORMAL")] public const int CountNormal = 0; #endregion #region count, sizeof /// /// Counts items in a variable. /// /// The variable which items to count. /// The number of items. /// The same as . [ImplementsFunction("sizeof")] public static int SizeOf(object variable) { return Count(variable, CountNormal); } /// /// Counts items in a variable. /// /// The variable which items to count. /// Whether to count recursively. /// The number of items in all arrays contained recursivelly in . /// If any item of the contains infinite recursion /// skips items that are repeating because of such recursion. /// [ImplementsFunction("sizeof")] public static int SizeOf(object variable, int mode) { return Count(variable, mode); } /// /// Counts items in a variable. /// /// The variable which items to count. /// The number of items. [ImplementsFunction("count")] public static int Count(object variable) { return Count(variable, CountNormal); } /// /// Counts items in a variable. /// /// The variable which items to count. /// Whether to count recursively. /// The number of items in all arrays contained recursivelly in . /// If any item of the contains infinite recursion /// skips items that are repeating because of such recursion. /// [ImplementsFunction("count")] public static int Count(object variable, int mode) { // null or uninitialized variable: if (variable == null) return 0; // // hashtable // PhpHashtable ht; if ((ht = variable as PhpHashtable) != null) { // non recursive count: if (mode != CountRecursive) return ht.Count; // recursive count: int result = 0; using (PhpHashtable.RecursiveEnumerator iterator = ht.GetRecursiveEnumerator(true,true)) { while (iterator.MoveNext()) result++; } return result; } // // SPL.Countable // recursive count not supported (not even in PHP) // SPL.Countable countable; if ((countable = variable as SPL.Countable) != null) { object cnt = countable.count(ScriptContext.CurrentContext); return (cnt != null) ? PHP.Core.Convert.ObjectToInteger(cnt) : 0; } PHP.Core.Reflection.DObject dobj; if ((dobj = variable as PHP.Core.Reflection.DObject) != null) { if (dobj.RealObject is SPL.Countable) { object cnt = dobj.InvokeMethod("count", null, ScriptContext.CurrentContext); return (cnt != null) ? PHP.Core.Convert.ObjectToInteger(cnt) : 0; } else if (dobj.RealObject is ICollection) { return ((ICollection)dobj.RealObject).Count; } } // count not supported return 1; } #endregion #region doubleval, floatval, intval, strval, settype, gettype, boolval /// /// Converts to double. /// /// The variable. /// The converted value. [ImplementsFunction("doubleval")] [PureFunction] public static double DoubleVal(object variable) { return PHP.Core.Convert.ObjectToDouble(variable); } /// /// Converts to double. /// /// The variable. /// The converted value. [ImplementsFunction("floatval")] [PureFunction] public static double FloatVal(object variable) { return PHP.Core.Convert.ObjectToDouble(variable); } /// /// Converts to integer. /// /// The variable. /// The converted value. [ImplementsFunction("intval")] [PureFunction] public static int IntVal(object variable) { return PHP.Core.Convert.ObjectToInteger(variable); } /// /// Converts to integer using a specified base. /// /// The variable. /// The base. /// The converted value. [ImplementsFunction("intval")] [PureFunction] public static int IntVal(object variable, int @base) { // TODO: base // The integer value of var on success, or 0 on failure. Empty arrays and objects return 0, non-empty arrays and objects return 1. // The maximum value depends on the system. 32 bit systems have a maximum signed integer range of -2147483648 to 2147483647. So for example on such a system, intval('1000000000000') will return 2147483647. The maximum signed integer value for 64 bit systems is 9223372036854775807. return PHP.Core.Convert.ObjectToInteger(variable); } /// /// Converts to string. /// /// The variable. /// The converted value. [ImplementsFunction("strval")] [PureFunction] public static string StrVal(object variable) { return PHP.Core.Convert.ObjectToString(variable); } /// /// Converts to boolean. /// /// The variable. /// The converted value. [ImplementsFunction("boolval")] [PureFunction] public static bool BoolVal(object variable) { return PHP.Core.Convert.ObjectToBoolean(variable); } /// /// Sets variable's type. /// /// The variable. /// The string identifying a new type. See PHP manual for details. /// Whether is valid type identifier. /// has invalid value. [ImplementsFunction("settype")] public static bool SetType(ref object variable, string type) { switch (System.Globalization.CultureInfo.InvariantCulture.TextInfo.ToLower(type)) // we don't need Unicode characters to be lowercased properly // CurrentCulture is slow { case "bool": case "boolean": variable = PHP.Core.Convert.ObjectToBoolean(variable); return true; case "int": case "integer": variable = PHP.Core.Convert.ObjectToInteger(variable); return true; case "float": case "double": variable = PHP.Core.Convert.ObjectToDouble(variable); return true; case "string": variable = PHP.Core.Convert.ObjectToString(variable); return true; case "array": variable = PHP.Core.Convert.ObjectToPhpArray(variable); return true; case "object": variable = PHP.Core.Convert.ObjectToDObject(variable, ScriptContext.CurrentContext); return true; case "null": variable = null; return true; default: PhpException.InvalidArgument("type", LibResources.GetString("invalid_type_name")); return false; } } /// /// Retrieves name of a variable type. /// /// The variable. /// The string type identifier. See PHP manual for details. [ImplementsFunction("gettype")] [PureFunction] public static string GetType(object variable) { // works well on references: return PhpVariable.GetTypeName(variable); } #endregion #region is_ /// /// Checks whether a dereferenced variable is integer. /// /// The variable. /// Whether is integer. [ImplementsFunction("is_int")] [PureFunction] public static bool IsInt(object variable) { return variable is int; } /// /// Checks whether a dereferenced variable is integer. /// Alias for is_int(). /// /// The variable. /// Whether is integer. [ImplementsFunction("is_integer")] [PureFunction] public static bool IsInteger(object variable) { return variable is int; } /// /// Checks whether a dereferenced variable is long. /// TODO: Alias for is_int(). But not in Phalanger. /// /// The variable. /// Whether is long. [ImplementsFunction("is_long")] [PureFunction] public static bool IsLong(object variable) { return variable is long;//IsInt(variable); } /// /// Checks whether a dereferenced variable is boolean. /// /// The variable. /// Whether is boolean. [ImplementsFunction("is_bool")] [PureFunction] public static bool IsBool(object variable) { return variable is bool; } /// /// Checks whether a dereferenced variable is double. /// /// The variable. /// Whether is double. [ImplementsFunction("is_float")] [PureFunction] public static bool IsFloat(object variable) { return variable is double; } /// /// Checks whether a dereferenced variable is double. /// Alias for is_float(). /// /// The variable. /// Whether is double. [ImplementsFunction("is_double")] [PureFunction] public static bool IsDouble(object variable) { return variable is double; } /// /// Checks whether a dereferenced variable is double. /// Alias for is_float(). /// /// The variable. /// Whether is double. [ImplementsFunction("is_real")] [PureFunction] public static bool IsReal(object variable) { return variable is double; } /// /// Checks whether a dereferenced variable is string. /// /// The variable. /// Whether is string. [ImplementsFunction("is_string")] [PureFunction] public static bool IsString(object variable) { return PhpVariable.IsString(variable); } /// /// Checks whether a dereferenced variable is an . /// /// The variable. /// Whether is . [ImplementsFunction("is_array")] public static bool IsArray(object variable) { return variable is PhpArray; } /// /// Checks whether a dereferenced variable is . /// /// The variable. /// Whether is . [ImplementsFunction("is_object")] public static bool IsObject(object variable) { return (variable is Core.Reflection.DObject && !(variable is __PHP_Incomplete_Class)); } /// /// Checks whether a dereferenced variable is a valid . /// /// The variable. /// Whether is a valid . [ImplementsFunction("is_resource")] public static bool IsResource(object variable) { PhpResource res = variable as PhpResource; return res != null && res.IsValid; } /// /// Checks whether a dereferenced variable is a null reference. /// /// The variable. /// Whether is a null reference. [ImplementsFunction("is_null")] [PureFunction] public static bool IsNull(object variable) { return variable == null; } #endregion #region is_scalar, is_numeric, is_callable, get_resource_type /// /// Checks whether a dereferenced variable is a scalar. /// /// The variable. /// Whether is an integer, a double, a bool or a string after dereferencing. [ImplementsFunction("is_scalar")] [PureFunction] public static bool IsScalar(object variable) { return PhpVariable.IsScalar(variable); } /// /// Checks whether a dereferenced variable is numeric. /// /// The variable. /// Whether is integer, double or numeric string. /// [ImplementsFunction("is_numeric")] [PureFunction] public static bool IsNumeric(object variable) { if (variable == null) return false; // real numbers if (variable.GetType() == typeof(int) || variable.GetType() == typeof(long) || variable.GetType() == typeof(double)) return true; // string if (variable.GetType() == typeof(string)) return IsNumericString((string)variable); if (variable.GetType() == typeof(PhpBytes)) return IsNumericString(variable.ToString()); // some .NET types: if (variable is Core.Reflection.IClrValue) { // decimal ? } // anything else: return false; } /// /// Checks whether given string can be converted to a number. /// /// A string value. /// True if the string represents a number. Otherwise false. private static bool IsNumericString(string str) { int ival; long lval; double dval; return (Core.Convert.StringToNumber(str, out ival, out lval, out dval) & Core.Convert.NumberInfo.IsNumber) != 0; } /// /// Verifies that the contents of a variable can be called as a function. /// /// Current class context. /// The variable. /// true if denotes a function, false /// otherwise. [ImplementsFunction("is_callable", FunctionImplOptions.NeedsClassContext)] public static bool IsCallable(PHP.Core.Reflection.DTypeDesc caller, object variable) { return IsCallable(caller, variable, false); } /// /// Verifies that the contents of a variable can be called as a function. /// /// Current class context. /// The variable. /// If true, it is only checked that has /// a valid structure to be used as a callback. if false, the existence of the function (or /// method) is also verified. /// true if denotes a function, false /// otherwise. [ImplementsFunction("is_callable", FunctionImplOptions.NeedsClassContext)] public static bool IsCallable(PHP.Core.Reflection.DTypeDesc caller, object variable, bool syntaxOnly) { return Operators.IsCallable(variable, caller, syntaxOnly); } /// /// Verifies that the contents of a variable can be called as a function. /// /// Current class context. /// The variable. /// If true, it is only checked that has /// a valid structure to be used as a callback. if false, the existence of the function (or /// method) is also verified. /// Receives the name of the function or method (for example /// SomeClass::SomeMethod). /// true if denotes a function, false /// otherwise. [ImplementsFunction("is_callable", FunctionImplOptions.NeedsClassContext)] public static bool IsCallable(PHP.Core.Reflection.DTypeDesc caller, object variable, bool syntaxOnly, out string callableName) { PhpCallback callback = PHP.Core.Convert.ObjectToCallback(variable, true); if (callback == null || callback.IsInvalid) { callableName = PHP.Core.Convert.ObjectToString(variable); return false; } callableName = ((IPhpConvertible)callback).ToString(); return (syntaxOnly ? true : callback.Bind(true, caller, null)); } /// /// Returns the type of a resource. /// /// The resource. /// The resource type name or null if is null. [ImplementsFunction("get_resource_type")] [return: CastToFalse] public static string GetResourceType(PhpResource resource) { return (resource != null ? resource.TypeName : null); } #endregion #region serialize, unserialize (CLR only) #if !SILVERLIGHT /// /// Serializes a graph of connected objects to a byte array using the PHP serializer. /// /// DTypeDesc of the caller's class context if it is known or UnknownTypeDesc if it should be determined lazily. /// The variable to serialize. /// The serialized representation of the . [ImplementsFunction("serialize", FunctionImplOptions.NeedsClassContext)] public static PhpBytes Serialize(PHP.Core.Reflection.DTypeDesc caller, object variable) { LibraryConfiguration config = LibraryConfiguration.GetLocal(ScriptContext.CurrentContext); return config.Serialization.DefaultSerializer.Serialize(variable, caller); } /// /// Deserializes a graph of connected object from a byte array using the PHP serializer. /// /// DTypeDesc of the caller's class context if it is known or UnknownTypeDesc if it should be determined lazily. /// The byte array to deserialize the graph from. /// The deserialized object graph. [ImplementsFunction("unserialize", FunctionImplOptions.NeedsClassContext)] public static PhpReference Unserialize(PHP.Core.Reflection.DTypeDesc caller, PhpBytes bytes) { if (bytes == null || bytes.Length == 0) return new PhpReference(false); LibraryConfiguration config = LibraryConfiguration.GetLocal(ScriptContext.CurrentContext); return config.Serialization.DefaultSerializer.Deserialize(bytes, caller); } #endif #endregion #region compact, extract /// /// Creates array containing variables and their values. /// /// The table of defined variables. /// Names of the variables - each chan be either /// or . Names are retrived recursively from an array. /// The which keys are names of variables and values are deep copies of /// their values. /// /// Items in which are neither of type nor /// are ignored. /// is a null reference. [ImplementsFunction("compact", FunctionImplOptions.NeedsVariables)] public static PhpArray Compact(Dictionary localVariables, params object[] names) { if (names == null) { PhpException.ArgumentNull("names"); return null; } PhpArray globals = (localVariables != null) ? null : ScriptContext.CurrentContext.GlobalVariables; PhpArray result = new PhpArray(); for (int i = 0; i < names.Length; i++) { string name; PhpArray array; if ((name = PhpVariable.AsString(names[i])) != null) { // if variable exists adds a copy of its current value to the result: object value; if (PhpHashtable.TryGetValue(globals, localVariables, name, out value)) result.Add(name, PhpVariable.DeepCopy(value)); } else if ((array = names[i] as PhpArray) != null) { // recursively searches for string variable names: using (PhpHashtable.RecursiveEnumerator iterator = array.GetRecursiveEnumerator(false,true)) { while (iterator.MoveNext()) { if ((name = PhpVariable.AsString(iterator.Current.Value)) != null) { // if variable exists adds a copy of its current value to the result: object value; if (PhpHashtable.TryGetValue(globals, localVariables, name, out value)) result.Add(name, PhpVariable.DeepCopy(value)); } } } } } return result; } /// /// Import variables into the current variables table from an array. /// /// The table of defined variables. /// The containing names of variables and values to be assigned to them. /// The number of variables actually affected by the extraction. /// or is a null reference. /// Some key of is not type of . /// The same as with empty prefix and /// option. /// [ImplementsFunction("extract", FunctionImplOptions.NeedsVariables)] public static int Extract(Dictionary definedVariables, PhpArray vars) { // GENERICS: IDictionary return Extract(definedVariables, vars, ExtractType.Overwrite, null); } /// /// Import variables into the current variables table from an array. /// /// The table of defined variables. /// The containing names of variables and values to be assigned to them. /// The type of the extraction. /// The number of variables actually affected by the extraction. /// is invalid. /// or is a null reference. /// compels presence of prefix (see ). /// Some key of is not type of . /// See for details. [ImplementsFunction("extract", FunctionImplOptions.NeedsVariables)] public static int Extract(Dictionary definedVariables, PhpArray vars, ExtractType type) { // GENERICS: IDictionary switch (type & ExtractType.NonFlags) { case ExtractType.PrefixSame: case ExtractType.PrefixAll: case ExtractType.PrefixInvalid: case ExtractType.PrefixIfExists: PhpException.InvalidArgument("prefix", LibResources.GetString("should_be_specified", "prefix")); return 0; } return Extract(definedVariables, vars, type, null); } /// /// Import variables into the current variables table from an array. /// /// The table of defined variables. /// The containing names of variables and values to be assigned to them. /// The type of the extraction. /// The prefix (can be a null reference) of variables names. /// The number of variables actually affected by the extraction. /// is invalid. /// is a null reference. /// Some key of is not type of . /// [ImplementsFunction("extract", FunctionImplOptions.NeedsVariables)] public static int Extract(Dictionary localVariables, PhpArray/*!*/ vars, ExtractType type, string prefix) { if (vars == null) { PhpException.ArgumentNull("vars"); return 0; } if (vars.Count == 0) return 0; // unfortunately, type contains flags are combined with enumeration: bool refs = (type & ExtractType.Refs) != 0; type &= ExtractType.NonFlags; // // construct the action used to set the variable into the locals/globals // Action updateVariableFn; // function that writes the value to locals/globals Predicate containsFn; // function that checks if variable exists PhpArray globals = (localVariables != null) ? null : ScriptContext.CurrentContext.GlobalVariables; #region select function that writes the variable if (refs) { // makes a reference and writes it back (deep copy is not necessary, "no duplicate pointers" rule preserved): if (localVariables != null) { updateVariableFn = (name, value) => { localVariables[name] = vars[name] = PhpVariable.MakeReference(value); }; } else { updateVariableFn = (name, value) => { globals[name] = vars[name] = PhpVariable.MakeReference(value); }; } } else { if (localVariables != null) { updateVariableFn = (name, value) => { // deep copy the value value = PhpVariable.DeepCopy(PhpVariable.Dereference(value)); // put into locals object item; PhpReference ref_item; if (localVariables.TryGetValue(name, out item) && (ref_item = item as PhpReference) != null) ref_item.Value = value; else localVariables[name] = value; }; } else { updateVariableFn = (name, value) => { // deep copy the value value = PhpVariable.DeepCopy(PhpVariable.Dereference(value)); // set the value to globals object item; PhpReference ref_item; if (globals.TryGetValue(name, out item) && (ref_item = item as PhpReference) != null) ref_item.Value = value; else globals[name] = value; }; } } #endregion Debug.Assert(updateVariableFn != null); #region select function that checks if variable exists if (localVariables != null) containsFn = (name) => localVariables.ContainsKey(name); else containsFn = (name) => globals.ContainsKey(name); #endregion Debug.Assert(containsFn != null); // // // int extracted_count = 0; foreach (KeyValuePair entry in vars) { string name = entry.Key.ToString(); if (String.IsNullOrEmpty(name) && type != ExtractType.PrefixInvalid) continue; switch (type) { case ExtractType.Overwrite: // anything is overwritten: break; case ExtractType.Skip: // skips existing name: if (containsFn(name)) continue; break; case ExtractType.IfExists: // skips nonexistent name: if (!containsFn(name)) continue; break; case ExtractType.PrefixAll: // prefix anything: name = String.Concat(prefix, "_", name); break; case ExtractType.PrefixInvalid: // prefixes invalid, others are overwritten: if (!PhpVariable.IsValidName(name)) name = String.Concat(prefix, "_", name); break; case ExtractType.PrefixSame: // prefixes existing, others are overwritten: if (containsFn(name)) name = String.Concat(prefix, "_", name); break; case ExtractType.PrefixIfExists: // prefixes existing, others are skipped: if (containsFn(name)) name = String.Concat(prefix, "_", name); else continue; break; default: PhpException.InvalidArgument("type", LibResources.GetString("arg:invalid_value")); return 0; } // invalid names are skipped: if (PhpVariable.IsValidName(name)) { // write the value to locals or globals: updateVariableFn(name, entry.Value); extracted_count++; } } return extracted_count; } #endregion #region get_defined_vars, import_request_variables (CLR only) #if !SILVERLIGHT /// /// Retrieves an array containing copies of currently defined variables. /// /// The table of defined variables. /// The which keys are the name of variables and values are /// deep copies of their values. [ImplementsFunction("get_defined_vars", FunctionImplOptions.NeedsVariables)] public static PhpArray GetDefinedVariables(Dictionary localVariables) { PhpArray globals = (localVariables != null) ? null : ScriptContext.CurrentContext.GlobalVariables; PhpArray result = new PhpArray((localVariables != null) ? localVariables.Count : globals.Count); foreach (KeyValuePair entry in PhpArray.GetEnumerator(globals, localVariables)) result.Add(entry.Key, PhpVariable.DeepCopy(entry.Value)); return result; } /// /// Imports request variables to the $GLOBALS array. /// [ImplementsFunction("import_request_variables")] public static bool ImportRequestVariables(string gpcOrder) { return ImportRequestVariables(gpcOrder, null); } /// /// Imports request variables to the $GLOBALS array. /// /// /// Order of addition. A string containing 'G', 'P', 'C' letters. /// GET, POST, COOKIE variables are set to the $GLOBALS array for each such letter, respectively, /// overwriting variables of the same name that are already there. /// /// /// String to prefix variables names with. /// It's recommanded to specify some to prevent overriding existing global variables. /// /// /// Whether any variables has been added. /// /// No prefix specified - security hazard (Notice). /// Attempt to override $GLOBALS variable (Warning). [ImplementsFunction("import_request_variables")] public static bool ImportRequestVariables(string gpcOrder, string prefix) { if (String.IsNullOrEmpty(gpcOrder)) return false; if (prefix == null || prefix == String.Empty) PhpException.Throw(PhpError.Notice, LibResources.GetString("no_prefix_security_hazard")); HttpContext http_context = HttpContext.Current; if (http_context == null) return false; ScriptContext context = ScriptContext.CurrentContext; PhpArray globals_array = context.GlobalVariables; PhpArray get_array, post_array, cookie_array; string httprawpost_array; AutoGlobals.InitializeGetPostVariables(context.Config, http_context.Request, out get_array, out post_array, out httprawpost_array); AutoGlobals.InitializeCookieVariables(context.Config, http_context.Request, out cookie_array); for (int i = 0; i < gpcOrder.Length; i++) { switch (Char.ToUpper(gpcOrder[i])) { case 'G': AddGpcVariables(globals_array, get_array, prefix); break; case 'P': AddGpcVariables(globals_array, post_array, prefix); break; case 'C': AddGpcVariables(globals_array, cookie_array, prefix); break; } } return true; } private static void AddGpcVariables(PhpArray/*!*/ globals, PhpArray/*!*/ gpcArray, string prefix) { foreach (KeyValuePair entry in gpcArray) { string name = prefix + entry.Key.ToString(); if (name == VariableName.GlobalsName) { PhpException.Throw(PhpError.Warning, LibResources.GetString("attempted_variable_override", VariableName.GlobalsName)); } else { globals[name] = PhpVariable.DeepCopy(entry.Value); } } } #endif #endregion #region print_r, var_export, var_dump /// /// Outputs human-readable information about a variable. /// /// The variable. [ImplementsFunction("print_r")] public static object Print(object expression) { return Print(expression, false); } /// /// Outputs or returns human-readable information about a variable. /// /// The variable. /// Whether to return a string representation. /// A string representation or TRUE if is false. [ImplementsFunction("print_r")] public static object Print(object expression, bool returnString) { if (returnString) { // output to a string: StringWriter output = new StringWriter(); PhpVariable.Print(output, expression); return output.ToString(); } else { // output to script context: PhpVariable.Print(ScriptContext.CurrentContext.Output, expression); return true; } } /// /// Dumps variables. /// /// Variables to be dumped. [ImplementsFunction("var_dump")] public static void Dump(params object[] variables) { TextWriter output = ScriptContext.CurrentContext.Output; foreach (object variable in variables) PhpVariable.Dump(output, variable); } /// /// Outputs a pars-able string representation of a variable. /// /// The variable. [ImplementsFunction("var_export")] public static string Export(object variable) { return Export(variable, false); } /// /// Outputs or returns a pars-able string representation of a variable. /// /// The variable. /// Whether to return a string representation. /// A string representation or a null reference if is false. [ImplementsFunction("var_export")] public static string Export(object variable, bool returnString) { if (returnString) { // output to a string: StringWriter output = new StringWriter(); PhpVariable.Export(output, variable); return output.ToString(); } else { // output to script context: PhpVariable.Export(ScriptContext.CurrentContext.Output, variable); return null; } } #endregion } } ================================================ FILE: Source/ClassLibrary/Web.CLR.cs ================================================ /* Copyright (c) 2004006- Tomas Matousek, Jan Benda and Ladislav Prosek. The use and distribution terms for this software are contained in the file named License.txt, which can be found in the root of the Phalanger distribution. By using this software in any fashion, you are agreeing to be bound by the terms of this license. You must not remove this notice from this software. TODO: Changed get_headers() to retrieve headers also from non-200 responses. (PHP 5.1.3) Changed get_headers() to use the default context. (PHP 5.1.3) */ using System; using System.Text; using System.IO; using System.ComponentModel; using System.Collections; using System.Net; using System.Text.RegularExpressions; using System.Reflection.Emit; using PHP.Core; using System.Collections.Generic; #if SILVERLIGHT using PHP.CoreCLR; #else using System.Web; using System.Collections.Specialized; using System.Diagnostics; #endif namespace PHP.Library { /// /// Web related methods (URL, HTTP, cookies, headers, connection etc.). /// /// public static partial class Web { #region Helpers /// /// Ensures that current associted with the thread is not a null reference. /// /// The current request context. /// Whether the request context is available. /// Web server variables are not available (Warning). internal static bool EnsureRequestContext(out RequestContext context) { context = RequestContext.CurrentContext; if (context == null) { PhpException.Throw(PhpError.Warning, LibResources.GetString("web_server_not_available")); return false; } return true; } /// /// Ensures that current is not a null reference. /// /// The current context. /// Whether the HTTP context is available. /// Web server variables are not available (Warning). internal static bool EnsureHttpContext(out HttpContext context) { context = HttpContext.Current; if (context == null) { PhpException.Throw(PhpError.Warning, LibResources.GetString("web_server_not_available")); return false; } return true; } /// /// Ensures that current is not a null reference. /// /// Whether the HTTP context is available. /// Web server variables are not available (Warning). internal static bool EnsureHttpContext() { HttpContext context; return Web.EnsureHttpContext(out context); } /// /// Ensures that headers has not been sent. /// /// The current context. /// Whether the HTTP context is available and headers has not been sent. /// Web server variables are not available (Warning). /// Headers has already been sent (Warning). internal static bool EnsureHeadersNotSent(out HttpContext context) { bool result = HeadersSent(); if (result) PhpException.Throw(PhpError.Warning, LibResources.GetString("headers_has_been_sent")); context = HttpContext.Current; return !result && context != null; } /// /// Puts together elements of HTTP status line. /// internal static string MakeHttpStatusLine(Version version, int code, string message) { return String.Format("HTTP/{0}.{1} {2} {3}", version.Major, version.Minor, code, message); } #endregion #region setcookie, setrawcookie /// /// Sends a cookie with specified name. /// /// The name of the cookie to send. /// Whether a cookie has been successfully send. [ImplementsFunction("setcookie")] public static bool SetCookie(string name) { return SetCookieInternal(name, null, 0, null, null, false, false, false); } /// /// Sends a cookie with specified name and value. /// /// The name of the cookie to send. /// The value of the cookie. The value will be d. /// Whether a cookie has been successfully send. [ImplementsFunction("setcookie")] public static bool SetCookie(string name, string value) { return SetCookieInternal(name, value, 0, null, null, false, false, false); } /// /// Sends a cookie with specified name, value and expiration timestamp. /// /// The name of the cookie to send. /// The value of the cookie. The value will be d. /// The time (Unix timestamp) when the cookie expiers. /// Whether a cookie has been successfully send. [ImplementsFunction("setcookie")] public static bool SetCookie(string name, string value, int expire) { return SetCookieInternal(name, value, expire, null, null, false, false, false); } /// /// Sends a cookie with specified name, value and expiration timestamp. /// /// The name of the cookie to send. /// The value of the cookie. The value will be d. /// The time (Unix timestamp) when the cookie expiers. /// The virtual path on server in which context is the cookie valid. /// Whether a cookie has been successfully send. [ImplementsFunction("setcookie")] public static bool SetCookie(string name, string value, int expire, string path) { return SetCookieInternal(name, value, expire, path, null, false, false, false); } /// /// Sends a cookie with specified name, value and expiration timestamp. /// /// The name of the cookie to send. /// The value of the cookie. The value will be d. /// The time (Unix timestamp) when the cookie expiers. /// The virtual path on server in which is the cookie valid. /// The domain where the cookie is valid. /// Whether a cookie has been successfully send. [ImplementsFunction("setcookie")] public static bool SetCookie(string name, string value, int expire, string path, string domain) { return SetCookieInternal(name, value, expire, path, domain, false, false, false); } /// /// Sends a cookie with specified name, value and expiration timestamp. /// /// The name of the cookie to send. /// The value of the cookie. The value will be d. /// The time (Unix timestamp) when the cookie expires. /// The virtual path on server in which is the cookie valid. /// The domain where the cookie is valid. /// Whether to transmit the cookie securely (that is, over HTTPS only). /// Whether a cookie has been successfully send. [ImplementsFunction("setcookie")] public static bool SetCookie(string name, string value, int expire, string path, string domain, bool secure) { return SetCookieInternal(name, value, expire, path, domain, secure, false, false); } /// /// Sends a cookie with specified name, value and expiration timestamp. /// /// The name of the cookie to send. /// The value of the cookie. The value will be d. /// The time (Unix timestamp) when the cookie expires. /// The virtual path on server in which is the cookie valid. /// The domain where the cookie is valid. /// Whether to transmit the cookie securely (that is, over HTTPS only). /// When TRUE the cookie will be made accessible only through the HTTP protocol. /// This means that the cookie won't be accessible by scripting languages, such as JavaScript. /// This setting can effectively help to reduce identity theft through XSS attacks /// (although it is not supported by all browsers). /// Whether a cookie has been successfully send. [ImplementsFunction("setcookie")] public static bool SetCookie(string name, string value, int expire, string path, string domain, bool secure, bool httponly) { return SetCookieInternal(name, value, expire, path, domain, secure, httponly, false); } /// /// The same as except for that value is not d. /// [ImplementsFunction("setrawcookie")] public static bool SetRawCookie(string name) { return SetCookieInternal(name, null, 0, null, null, false, false, true); } /// /// The same as except for that value is not d. /// [ImplementsFunction("setrawcookie")] public static bool SetRawCookie(string name, string value) { return SetCookieInternal(name, value, 0, null, null, false, false, true); } /// /// The same as except for that value is not d. /// [ImplementsFunction("setrawcookie")] public static bool SetRawCookie(string name, string value, int expire) { return SetCookieInternal(name, value, expire, null, null, false, false, true); } /// /// The same as except for that value is not d. /// [ImplementsFunction("setrawcookie")] public static bool SetRawCookie(string name, string value, int expire, string path) { return SetCookieInternal(name, value, expire, path, null, false, false, true); } /// /// The same as except for that value is not d. /// [ImplementsFunction("setrawcookie")] public static bool SetRawCookie(string name, string value, int expire, string path, string domain) { return SetCookieInternal(name, value, expire, path, domain, false, false, true); } /// /// The same as except for that value is not d. /// [ImplementsFunction("setrawcookie")] public static bool SetRawCookie(string name, string value, int expire, string path, string domain, bool secure) { return SetCookieInternal(name, value, expire, path, domain, secure, false, true); } /// /// The same as except for that value is not d. /// [ImplementsFunction("setrawcookie")] public static bool SetRawCookie(string name, string value, int expire, string path, string domain, bool secure, bool httponly) { return SetCookieInternal(name, value, expire, path, domain, secure, httponly, true); } /// /// Internal version common for and . /// internal static bool SetCookieInternal(string name, string value, int expire, string path, string domain, bool secure, bool httponly, bool raw) { HttpContext context; if (!EnsureHeadersNotSent(out context)) return false; HttpCookie cookie = new HttpCookie(name, raw ? value : UrlEncode(value)); if (expire > 0) { cookie.Expires = DateTimeUtils.UnixTimeStampToUtc(expire).ToLocalTime(); } cookie.Path = path; cookie.Domain = domain; cookie.Secure = secure; cookie.HttpOnly = httponly; context.Response.Cookies.Add(cookie); return true; } #endregion #region header, header_remove /// /// Adds a specified header to the current response. /// /// The header to be added. /// Web server variables are not available (Warning). /// Headers has already been sent (Warning). [ImplementsFunction("header")] public static void Header(string str) { Header(str, false, 0); } /// /// Adds a specified header to the current response. /// /// The header to be added. /// Whether the header should be replaced if there is already one with the same name (ignored since 5.1.2) /// Web server variables are not available (Warning). /// Headers has already been sent (Warning). /// is true (Warning). [ImplementsFunction("header")] public static void Header(string str, bool replace) { Header(str, replace, 0); } /// /// Adds a specified header to the current response. /// /// The header to be added. /// Whether the header should be replaced if there is already one with the same name. /// Replacement not supported (ignored since 5.1.2) /// Sets the response status code. /// /// /// If is positive than the response status code is set to this value. /// Otherwise, if has format "{spaces}HTTP/{no spaces} {response code}{whatever}" /// then the response code is set to the {responce code} and the method returns. /// /// /// If has format "{name}:{value}" then the respective header is set (both name and value /// are trimmed) and an appropriate action associated with this header by ASP.NET is performed. /// /// /// Not: Since PHP 4.4.2 and PHP 5.1.2 this function prevents more than one header to be sent at once as /// a protection against header injection attacks (which means that header is always replaced). /// /// /// Web server variables are not available (Warning). /// Headers has already been sent (Warning). /// is true (Warning). /// has invalid format (Warning). [ImplementsFunction("header")] public static void Header(string str, bool replace, int httpResponseCode) { if (str == null) return; HttpContext context; if (!EnsureHeadersNotSent(out context)) return; // response code is not forced => checks for initial HTTP/ and the status code in "str": if (httpResponseCode <= 0) { Match m = Regex.Match(str, "[ ]*HTTP/[^ ]* ([0-9]{1,3}).*", RegexOptions.IgnoreCase); if (m.Success) { context.Response.StatusCode = Int32.Parse(m.Groups[1].Value); return; } } else { // sets response status code: context.Response.StatusCode = httpResponseCode; } // adds a header if it has a correct form (i.e. "name: value"): // store header in collection associated with current context - headers can be // replaced and are flushed automatically (in BeforeHeadersSent event :-)) on IIS Classic Mode. HttpHeaders headers = ScriptContext.CurrentContext.Headers; int i = str.IndexOf(':'); if (i > 0) { string name = str.Substring(0, i).Trim(); if (!string.IsNullOrEmpty(name)) headers[name] = str.Substring(i + 1).Trim(); } } /// /// RemoveRemoves an HTTP header previously set using header(). /// [ImplementsFunction("header_remove")] public static void HeaderRemove() { // remove all headers HeaderRemove(null); } /// /// Removes an HTTP header previously set using header(). /// /// The header name to be removed. /// Note: This parameter is case-insensitive. /// /// Caution: This function will remove all headers set by PHP, including cookies, session and the X-Powered-By headers. [ImplementsFunction("header_remove")] public static void HeaderRemove(string name) { if (name == null) ScriptContext.CurrentContext.Headers.Clear(); else ScriptContext.CurrentContext.Headers[name] = null; //PhpException.FunctionNotSupported(); // see remarks, remove specified header (can be cookie, content-type, content-encoding or any other header) // TODO: cookies, session } /// /// http_response_code will get the current status code. /// /// Current status code [ImplementsFunction("http_response_code")] public static int HttpResponseCode() { HttpContext context; if (EnsureHttpContext(out context)) { return context.Response.StatusCode; } return -1; // FALSE ? } /// /// http_response_code will set the current status code. /// /// New status code. /// Current status code. [ImplementsFunction("http_response_code")] public static int HttpResponseCode(int status) { HttpContext context; if (EnsureHttpContext(out context)) { var oldstatus = context.Response.StatusCode; context.Response.StatusCode = status; return oldstatus; } return -1; // FALSE ? } #endregion #region get_headers /// /// Fetches headers sent by the server in response to a HTTP request. /// /// The URL where to send a request (e.g. http://www.mff.cuni.cz). /// The same as where format is false. [ImplementsFunction("get_headers")] public static PhpArray GetHeaders(string url) { return GetHeaders(url, false); } /// /// Fetches headers sent by the server in response to a HTTP request. /// /// The URL where to send a request (e.g. http://www.mff.cuni.cz). /// Whether to parse a response and set the result's keys to header names. /// /// Either an array with integer keys indexed from 0 and values set to raw headers /// ( is false). Or an array which each key is a name of a header and /// a value is either an appropriate header's value or an array of values if the header has more than one /// value. In both cases the first item (always with key 0) will be the HTTP response status line. /// [ImplementsFunction("get_headers")] public static PhpArray GetHeaders(string url, bool format) { HttpWebRequest request; HttpWebResponse response; // creates a HTTP request: try { request = (HttpWebRequest)WebRequest.Create(url); } catch (System.Exception) { PhpException.Throw(PhpError.Warning, LibResources.GetString("invalid_url", FileSystemUtils.StripPassword(url))); return null; } // fetches response: try { response = (HttpWebResponse)request.GetResponse(); } catch (WebException e) { response = (HttpWebResponse)e.Response; PhpException.Throw(PhpError.Warning, LibResources.GetString("http_request_failed", (response != null) ? String.Format("({0}) {1}", (int)response.StatusCode, response.StatusDescription) : null)); return null; } catch (System.Exception) { PhpException.Throw(PhpError.Warning, LibResources.GetString("host_not_responding")); return null; } WebHeaderCollection headers = response.Headers; PhpArray result = (format) ? new PhpArray(1, headers.Count) : new PhpArray(headers.Count + 1, 0); // adds the first entry (0 => HTTP status line): result.Add(0, MakeHttpStatusLine(response.ProtocolVersion, (int)response.StatusCode, response.StatusDescription)); // creates an array {
=> }: if (format) { foreach (string header in headers) { // gets all values with specified header: string[] values = headers.GetValues(header); // puts values into an subarray if header has more than one value: if (values.Length > 1) { PhpArray values_array = new PhpArray(values.Length, 0); // fills subarray with values: for (int i = 0; i < values.Length; i++) values_array.Add(values[i]); result.Add(header, values_array); } else { result.Add(header, values[0]); } } } else // create an array { =>
: }: { foreach (string header in headers) result.Add(String.Concat(header, ": ", headers[header])); } return result; } #endregion #region headers_sent, headers_list /// /// Checks whether all headers has been sent. /// /// Whether headers has already been sent. /// Web server variables are not available (Warning). [ImplementsFunction("headers_sent")] public static bool HeadersSent() { HttpContext context; if (!EnsureHttpContext(out context)) return false; try { // a trick (StatusCodes's setter checks whether or not headers has been sent): context.Response.StatusCode = context.Response.StatusCode; } catch (HttpException) { return true; } return false; } /// /// Checks whether all headers has been sent. /// /// The name of a source file which has sent headers or an empty string /// headers has not been sent yet. Not supported. /// Whether headers has already been sent. /// Web server variables are not available (Warning). /// Function is not supported in this version (Warning). [ImplementsFunction("headers_sent")] public static bool HeadersSent(out string file) { PhpException.FunctionNotSupported(); file = String.Empty; return HeadersSent(); } /// /// Checks whether all headers has been sent. /// /// The name of a source file which has sent headers or an empty string if /// headers has not been sent yet. Not supported. /// The line in a source file where headers has been sent or 0 if /// headers has not been sent yet. Not supported. /// Whether headers has already been sent. /// Web server variables are not available (Warning). /// Function is not supported in this version (Warning). [ImplementsFunction("headers_sent")] public static bool HeadersSent(out string file, out int line) { PhpException.FunctionNotSupported(); file = String.Empty; line = 0; return HeadersSent(); } /// /// headers_list() will return a list of headers to be sent to the browser / client. /// To determine whether or not these headers have been sent yet, use headers_sent(). /// [ImplementsFunction("headers_list")] public static PhpArray HeadersList() { HttpContext context; if (!EnsureHttpContext(out context)) return null; var list = new PhpArray(); foreach (var x in ScriptContext.CurrentContext.Headers) list.Add(x.Key + ": " + x.Value); /*foreach (var x in context.Response.Cookies.AllKeys) { var cookie = context.Response.Cookies[x]; list.Add("set-cookie: " + cookie.Name + "=" + cookie.Value); // TODO: full cookie spec }*/ // TODO: cookies, session return list; } #endregion #region http_build_query, get_browser /// /// Generates a URL-encoded query string from the associative (or indexed) array provided. /// /// /// The array form may be a simple one-dimensional structure, or an array of arrays /// (who in turn may contain other arrays). /// /// Returns a URL-encoded string. [ImplementsFunction("http_build_query")] public static string HttpBuildQuery(PhpArray formData) { return PHP.Library.Web.HttpBuildQuery(formData, null, "&", null); } /// /// Generates a URL-encoded query string from the associative (or indexed) array provided. /// /// /// The array form may be a simple one-dimensional structure, or an array of arrays /// (who in turn may contain other arrays). /// /// /// If numeric indices are used in the base array and this parameter is provided, /// it will be prepended to the numeric index for elements in the base array only. /// This is meant to allow for legal variable names when the data is decoded by PHP /// or another CGI application later on. /// /// Returns a URL-encoded string. [ImplementsFunction("http_build_query")] public static string HttpBuildQuery(PhpArray formData, string numericPrefix) { return PHP.Library.Web.HttpBuildQuery(formData, numericPrefix, "&", null); } /// /// Generates a URL-encoded query string from the associative (or indexed) array provided. /// /// /// The array form may be a simple one-dimensional structure, or an array of arrays /// (who in turn may contain other arrays). /// /// /// If numeric indices are used in the base array and this parameter is provided, /// it will be prepended to the numeric index for elements in the base array only. /// This is meant to allow for legal variable names when the data is decoded by PHP /// or another CGI application later on. /// /// /// arg_separator.output is used to separate arguments, unless this parameter is /// specified, and is then used. /// /// Returns a URL-encoded string [ImplementsFunction("http_build_query")] public static string HttpBuildQuery(PhpArray formData, string numericPrefix, string argSeparator) { return HttpBuildQuery(formData, numericPrefix, argSeparator, null); } /// /// Generates a URL-encoded query string from the associative (or indexed) array provided. /// /// /// The array form may be a simple one-dimensional structure, or an array of arrays /// (who in turn may contain other arrays). /// /// /// If numeric indices are used in the base array and this parameter is provided, /// it will be prepended to the numeric index for elements in the base array only. /// This is meant to allow for legal variable names when the data is decoded by PHP /// or another CGI application later on. /// /// /// arg_separator.output is used to separate arguments, unless this parameter is /// specified, and is then used. /// /// Default is null, otherwise it is a name of the array to be used instead /// of regular parameter name. Then the parameter name is used as an index. /// /// This argument must be URL encoded. /// Returns a URL-encoded string private static string HttpBuildQuery(PhpArray formData, string numericPrefix, string argSeparator, string indexerPrefix) { StringBuilder str_builder = new StringBuilder(64); // statistically the length of the result StringWriter result = new StringWriter(str_builder); bool isNotFirst = false; foreach (KeyValuePair item in formData) { // the query parameter name (key name) // the parameter name is URL encoded string keyName = null; if (item.Key.IsInteger) keyName = UrlEncode(numericPrefix) + item.Key.Integer.ToString(); else keyName = UrlEncode(item.Key.String); if (indexerPrefix != null) { keyName = indexerPrefix + "%5B" + keyName + "%5D"; // == prefix[key] (url encoded brackets) } // write the query element PhpArray valueArray = item.Value as PhpArray; if (valueArray != null) { // value is an array, emit query recursively, use current keyName as an array variable name string queryStr = HttpBuildQuery(valueArray, null, argSeparator, keyName); // emit the query recursively if (queryStr != null && queryStr.Length > 0) { if (isNotFirst) result.Write(argSeparator); result.Write(queryStr); } } else { // simple value, emit query in a form of (key=value), URL encoded ! if (isNotFirst) result.Write(argSeparator); if (item.Value != null) { result.Write(keyName + "=" + UrlEncode(PHP.Core.Convert.ObjectToString(item.Value))); // == "keyName=keyValue" } else { result.Write(keyName + "="); // == "keyName=" } } // separator will be used in next loop isNotFirst = true; } result.Flush(); return str_builder.ToString(); } /// /// Attempts to determine the capabilities of the user's browser, by looking up the browser's information in the browscap.ini file. /// /// /// The information is returned in an object or an array which will contain various data elements representing, /// for instance, the browser's major and minor version numbers and ID string; TRUE/FALSE values for features /// such as frames, JavaScript, and cookies; and so forth. /// The cookies value simply means that the browser itself is capable of accepting cookies and does not mean /// the user has enabled the browser to accept cookies or not. The only way to test if cookies are accepted is /// to set one with setcookie(), reload, and check for the value. /// [ImplementsFunction("get_browser")] public static object GetBrowser() { return GetBrowser(null, false); } /// /// Attempts to determine the capabilities of the user's browser, by looking up the browser's information in the browscap.ini file. /// /// /// The User Agent to be analyzed. By default, the value of HTTP User-Agent header is used; however, you can alter this (i.e., look up another browser's info) by passing this parameter. /// You can bypass this parameter with a NULL value. /// /// /// The information is returned in an object or an array which will contain various data elements representing, /// for instance, the browser's major and minor version numbers and ID string; TRUE/FALSE values for features /// such as frames, JavaScript, and cookies; and so forth. /// The cookies value simply means that the browser itself is capable of accepting cookies and does not mean /// the user has enabled the browser to accept cookies or not. The only way to test if cookies are accepted is /// to set one with setcookie(), reload, and check for the value. /// [ImplementsFunction("get_browser")] public static object GetBrowser(string user_agent) { return GetBrowser(user_agent, false); } /// /// Attempts to determine the capabilities of the user's browser, by looking up the browser's information in the browscap.ini file. /// /// /// The User Agent to be analyzed. By default, the value of HTTP User-Agent header is used; however, you can alter this (i.e., look up another browser's info) by passing this parameter. /// You can bypass this parameter with a NULL value. /// /// If set to TRUE, this function will return an array instead of an object . /// /// The information is returned in an object or an array which will contain various data elements representing, /// for instance, the browser's major and minor version numbers and ID string; TRUE/FALSE values for features /// such as frames, JavaScript, and cookies; and so forth. /// The cookies value simply means that the browser itself is capable of accepting cookies and does not mean /// the user has enabled the browser to accept cookies or not. The only way to test if cookies are accepted is /// to set one with setcookie(), reload, and check for the value. /// [ImplementsFunction("get_browser")] public static object GetBrowser(string user_agent, bool return_array /*= false*/) { HttpBrowserCapabilities browserCaps = GetBrowserCaps(user_agent); // this is container for information given from Request and browscap.ini, which is placed in Win systems by default if (browserCaps == null) return null; // some special fields /*if (browserCaps.Browsers != null) for (int ib = 0; ib < browserCaps.Browsers.Count; ++ib) if (browserCaps.Browsers[ib].ToString().ToLower() == browserCaps.Browser.ToLower()) { if (ib > 0) caps["parent"] = browserCaps.Browsers[ib - 1].ToString(); break; }*/ // create an array of browser capabilities: var caps = new PhpArray(browserCaps.Capabilities.Count); foreach (var x in browserCaps.Capabilities.Keys) caps.Add(x, browserCaps.Capabilities[x]); if (return_array) return caps; // create an object of browser capabilities: return new stdClass() { RuntimeFields = caps }; } private static HttpBrowserCapabilities GetBrowserCaps(string user_agent) { if (String.IsNullOrEmpty(user_agent)) { HttpContext context; if (!EnsureHttpContext(out context)) return null; return context.Request.Browser; } else { NameValueCollection headers = new NameValueCollection(); headers["User-Agent"] = user_agent; HttpBrowserCapabilities browserCaps = new HttpBrowserCapabilities(); Hashtable hashtable = new Hashtable(180, StringComparer.OrdinalIgnoreCase); hashtable[string.Empty] = user_agent; // The actual method uses client target browserCaps.Capabilities = hashtable; //var capsFactory = new System.Web.Configuration.BrowserCapabilitiesFactory(); //capsFactory.ConfigureBrowserCapabilities(headers, browserCaps); //capsFactory.ConfigureCustomCapabilities(headers, browserCaps); // use System.Web.Configuration.BrowserCapabilitiesFactory dynamically since Mono does not have this defined // Following code emits DynamicMethod delegate lazily and performs code commented above. // Note: absolutely no performance overhead. // This should be removed when the type will be defined on Mono. var configureCapsMethod = ConfigureCapsMethod; if (configureCapsMethod != null) configureCapsMethod(headers, browserCaps); return browserCaps; } } #region System.Web.Configuration.BrowserCapabilitiesFactory /// /// Get DynamicMethod that configures capabilities on systems, where System.Web.Configuration.BrowserCapabilitiesFactory is defined. /// /// /// The method performs following code: /// { /// var capsFactory = new System.Web.Configuration.BrowserCapabilitiesFactory(); /// capsFactory.ConfigureBrowserCapabilities(headers, browserCaps); /// capsFactory.ConfigureCustomCapabilities(headers, browserCaps); /// } /// private static Action ConfigureCapsMethod { get { if (configureCapsMethod == null && configureCapsMethodAvailable) lock (configureCapsLocker) // double checked lock if (configureCapsMethod == null && configureCapsMethodAvailable) { // find the type dynamically Type browserCapabilitiesFactoryType = null; foreach (var ass in AppDomain.CurrentDomain.GetAssemblies()) if ((browserCapabilitiesFactoryType = ass.GetType("System.Web.Configuration.BrowserCapabilitiesFactory")) != null) break; //Type browserCapabilitiesFactoryType = Type.GetType("System.Web.Configuration.BrowserCapabilitiesFactory", false); if (browserCapabilitiesFactoryType != null) configureCapsMethod = BuildConfigureCapsMethod(browserCapabilitiesFactoryType); else configureCapsMethodAvailable = false; // TODO: declare another Type with required methods and BuildConfigureCapsMethod() with this Type } return configureCapsMethod; } } private static Action configureCapsMethod = null; private static bool configureCapsMethodAvailable = true; private static object configureCapsLocker = new object(); /// /// Create DynamicMethod that configures capabilities using System.Web.Configuration.BrowserCapabilitiesFactory (or similar) type. /// /// Type with ConfigureBrowserCapabilities and ConfigureCustomCapabilities methods. /// /// Generated method performs following code: /// { /// var capsFactory = new System.Web.Configuration.BrowserCapabilitiesFactory(); /// capsFactory.ConfigureBrowserCapabilities(headers, browserCaps); /// capsFactory.ConfigureCustomCapabilities(headers, browserCaps); /// } /// private static Action BuildConfigureCapsMethod(Type/*!*/BrowserCapabilitiesFactoryType) { Debug.Assert(BrowserCapabilitiesFactoryType != null); var method_ctor = BrowserCapabilitiesFactoryType.GetConstructor(Type.EmptyTypes); var method_ConfigureBrowserCapabilities = BrowserCapabilitiesFactoryType.GetMethod("ConfigureBrowserCapabilities"); var method_ConfigureCustomCapabilities = BrowserCapabilitiesFactoryType.GetMethod("ConfigureCustomCapabilities"); if (method_ctor == null) throw new InvalidOperationException(string.Format("{0} does not implement .ctor.", BrowserCapabilitiesFactoryType.ToString())); if (method_ConfigureBrowserCapabilities == null) throw new InvalidOperationException(string.Format("{0} does not implement {1}.", BrowserCapabilitiesFactoryType.ToString(), "ConfigureBrowserCapabilities")); if (method_ConfigureCustomCapabilities == null) throw new InvalidOperationException(string.Format("{0} does not implement {1}.", BrowserCapabilitiesFactoryType.ToString(), "ConfigureCustomCapabilities")); var method = new DynamicMethod(".BrowserCapabilitiesFactory", typeof(void), new Type[] { typeof(NameValueCollection), typeof(HttpBrowserCapabilities) }); var il = new PHP.Core.Emit.ILEmitter(method); method.DefineParameter(1, System.Reflection.ParameterAttributes.None, "headers"); method.DefineParameter(2, System.Reflection.ParameterAttributes.None, "browserCaps"); // var capsFactory = new System.Web.Configuration.BrowserCapabilitiesFactory(); var loc_factory = il.DeclareLocal(BrowserCapabilitiesFactoryType); il.Emit(OpCodes.Newobj, method_ctor); il.Stloc(loc_factory); // capsFactory.ConfigureBrowserCapabilities(headers, browserCaps); il.Ldloc(loc_factory); il.Ldarg(0); il.Ldarg(1); il.Emit(OpCodes.Callvirt, method_ConfigureBrowserCapabilities); // capsFactory.ConfigureCustomCapabilities(headers, browserCaps); il.Ldloc(loc_factory); il.Ldarg(0); il.Ldarg(1); il.Emit(OpCodes.Callvirt, method_ConfigureCustomCapabilities); // ret il.Emit(OpCodes.Ret); // done return (Action)method.CreateDelegate(typeof(Action)); } #endregion #endregion #region connection_aborted, connection_timeout, connection_status /// /// Checks whether a client is still connected. /// /// Whether a client is still connected. [ImplementsFunction("connection_aborted")] public static bool IsClientDisconnected() { HttpContext context; if (!EnsureHttpContext(out context)) return false; // we needn't to check for abortion because the abortion implies disconnection: return !context.Response.IsClientConnected; } /// /// Checks whether a client is still connected. /// /// Whether a client is still connected. [ImplementsFunction("connection_timeout")] public static bool ConnectionTimeout() { return ScriptContext.CurrentContext.ExecutionTimedOut; } /// /// Retrieves a connection status. /// /// The connection status bitfield. /// /// Works also out of HTTP context (i.e. in console and windows apps). /// In that cases, only flag is relevant. /// [ImplementsFunction("connection_status")] public static int GetConnectionStatus() { ConnectionStatus result = ConnectionStatus.Normal; if (ScriptContext.CurrentContext.ExecutionTimedOut) result |= ConnectionStatus.Timeout; HttpContext context = HttpContext.Current; if (context != null && !context.Response.IsClientConnected) result |= ConnectionStatus.Aborted; return (int)result; } #endregion #region is_uploaded_file, move_uploaded_file /// /// Tells whether the file was uploaded via HTTP POST. /// /// /// [ImplementsFunction("is_uploaded_file")] public static bool IsUploadedFile(string path) { if (path == null) return false; return RequestContext.CurrentContext.IsTemporaryFile(path); } /// /// Moves an uploaded file to a new location. /// /// /// /// [ImplementsFunction("move_uploaded_file")] public static bool MoveUploadedFile(string path, string destination) { RequestContext context = RequestContext.CurrentContext; if (path == null || !context.IsTemporaryFile(path)) return false; if (PhpFile.Exists(destination)) PhpFile.Delete(destination); if (!PhpFile.Rename(path, destination)) return false; context.RemoveTemporaryFile(path); return true; } #endregion } } ================================================ FILE: Source/ClassLibrary/Web.cs ================================================ /* Copyright (c) 2004006- Tomas Matousek, Jan Benda and Ladislav Prosek. The use and distribution terms for this software are contained in the file named License.txt, which can be found in the root of the Phalanger distribution. By using this software in any fashion, you are agreeing to be bound by the terms of this license. You must not remove this notice from this software. TODO: Changed get_headers() to retrieve headers also from non-200 responses. (PHP 5.1.3) Changed get_headers() to use the default context. (PHP 5.1.3) */ using System; using System.Text; using System.IO; using System.ComponentModel; using System.Collections; using System.Net; using System.Text.RegularExpressions; using System.Runtime.CompilerServices; using PHP.Core; using System.Collections.Generic; #if SILVERLIGHT using PHP.CoreCLR; using System.Windows.Browser; #else using System.Web; using System.Diagnostics; #endif namespace PHP.Library { /// /// Web related methods (URL, HTTP, cookies, headers, connection etc.). /// /// public static partial class Web { public enum UrlComponent { [ImplementsConstant("PHP_URL_SCHEME")] Scheme = 0, [ImplementsConstant("PHP_URL_HOST")] Host = 1, [ImplementsConstant("PHP_URL_PORT")] Port = 2, [ImplementsConstant("PHP_URL_USER")] User = 3, [ImplementsConstant("PHP_URL_PASS")] Password = 4, [ImplementsConstant("PHP_URL_PATH")] Path = 5, [ImplementsConstant("PHP_URL_QUERY")] Query = 6, [ImplementsConstant("PHP_URL_FRAGMENT")] Fragment = 7 } #region Enumerations /// /// Connection status. /// [Flags] public enum ConnectionStatus { [ImplementsConstant("CONNECTION_NORMAL")] Normal = 0, [ImplementsConstant("CONNECTION_ABORTED")] Aborted = 1, [ImplementsConstant("CONNECTION_TIMEOUT")] Timeout = 2 } #endregion #region base64_decode, base64_encode [ImplementsFunction("base64_decode"), EditorBrowsable(EditorBrowsableState.Never)] [return: CastToFalse] public static PhpBytes DecodeBase64(string encoded_data) { return DecodeBase64(encoded_data, false); } [ImplementsFunction("base64_decode"), EditorBrowsable(EditorBrowsableState.Never)] [return: CastToFalse] public static PhpBytes DecodeBase64(string encoded_data, bool strict /* = false*/) { if (encoded_data == null) return null; try { return new PhpBytes(System.Convert.FromBase64String(encoded_data)); } catch (FormatException) { PhpException.Throw(PhpError.Warning, LibResources.GetString("invalid_base64_encoded_data")); return null; } } [ImplementsFunction("base64_encode"), EditorBrowsable(EditorBrowsableState.Never)] public static string EncodeBase64(PhpBytes data_to_encode) { if (data_to_encode == null) return null; return System.Convert.ToBase64String(data_to_encode.ReadonlyData); } #endregion #region parse_url, parse_str #region Helper parse_url() methods internal static class ParseUrlMethods { /// /// Regular expression for parsing URLs (via parse_url()) /// public static Regex ParseUrlRegEx { get { return (_parseUrlRegEx) ?? (_parseUrlRegEx = new Regex(@"^((?[^:]+):(?/{0,2}))?((?[^:@/?#\[\]]*)(:(?[^@/?#\[\]]*))?@)?(?([^/:?#\[\]]+)|(\[[^\[\]]+\]))?(:(?[0-9]*))?(?/[^\?#]*)?(\?(?[^#]+)?)?(#(?.*))?$", #if !SILVERLIGHT RegexOptions.Compiled | #endif RegexOptions.Singleline | RegexOptions.CultureInvariant | RegexOptions.IgnoreCase )); } } private static Regex _parseUrlRegEx = null; /// /// Determines matched group value or null if the group was not matched. /// /// /// public static string MatchedString(Group/*!*/g) { Debug.Assert(g != null); return (g.Success && g.Value.Length > 0) ? g.Value : null; } /// /// Replace all the occurrences of control characters (see iscntrl() C++ function) with the specified character. /// /// /// /// public static string ReplaceControlCharset(string/*!*/str, char newChar) { Debug.Assert(str != null); StringBuilder sb = new StringBuilder(str.Length); foreach (char c in str) { sb.Append(Char.IsControl(c) ? newChar : c); } return sb.ToString(); } } #endregion /// /// Parses an URL and returns its components. /// /// /// The URL string with format /// {scheme}://{user}:{pass}@{host}:{port}{path}?{query}#{fragment} /// or {schema}:{path}?{query}#{fragment}. /// /// /// An array which keys are names of components (stated in URL string format in curly braces, e.g."schema") /// and values are components themselves. /// [ImplementsFunction("parse_url")] public static PhpArray ParseUrl(string url) { Match match = ParseUrlMethods.ParseUrlRegEx.Match(url ?? string.Empty); if (match == null || !match.Success || match.Groups["port"].Value.Length > 5) // not matching or port number too long { PhpException.Throw(PhpError.Warning, LibResources.GetString("invalid_url", FileSystemUtils.StripPassword(url))); return null; } string scheme = ParseUrlMethods.MatchedString(match.Groups["scheme"]); string user = ParseUrlMethods.MatchedString(match.Groups["user"]); string pass = ParseUrlMethods.MatchedString(match.Groups["pass"]); string host = ParseUrlMethods.MatchedString(match.Groups["host"]); string port = ParseUrlMethods.MatchedString(match.Groups["port"]); string path = ParseUrlMethods.MatchedString(match.Groups["path"]); string query = ParseUrlMethods.MatchedString(match.Groups["query"]); string fragment = ParseUrlMethods.MatchedString(match.Groups["fragment"]); string scheme_separator = match.Groups["scheme_separator"].Value; // cannot be null int tmp; // some exceptions if (host != null && scheme != null && scheme_separator.Length == 0 && int.TryParse(host, out tmp)) { // domain:port/path port = host; host = scheme; scheme = null; } else if (scheme_separator.Length != 2 && host != null) { // mailto:user@host // st:xx/zzz // mydomain.com/path // mydomain.com:port/path // dismiss user and pass if (user != null || pass != null) { if (pass != null) user = user + ":" + pass; host = user + "@" + host; user = null; pass = null; } // dismiss port if (port != null) { host += ":" + port; port = null; } // everything as a path path = scheme_separator + host + path; host = null; } PhpArray result = new PhpArray(0, 8); const char neutralChar = '_'; // store segments into the array (same order as it is in PHP) if (scheme != null) result["scheme"] = ParseUrlMethods.ReplaceControlCharset(scheme, neutralChar); if (host != null) result["host"] = ParseUrlMethods.ReplaceControlCharset(host, neutralChar); if (port != null) result["port"] = (int)unchecked((ushort)uint.Parse(port)); // PHP overflows in this way if (user != null) result["user"] = ParseUrlMethods.ReplaceControlCharset(user, neutralChar); if (pass != null) result["pass"] = ParseUrlMethods.ReplaceControlCharset(pass, neutralChar); if (path != null) result["path"] = ParseUrlMethods.ReplaceControlCharset(path, neutralChar); if (query != null) result["query"] = ParseUrlMethods.ReplaceControlCharset(query, neutralChar); if (fragment != null) result["fragment"] = ParseUrlMethods.ReplaceControlCharset(fragment, neutralChar); return result; } [ImplementsFunction("parse_url")] public static object ParseUrl(string url, UrlComponent component) { PhpArray array = ParseUrl(url); if (array == null) return null; switch (component) { case UrlComponent.Fragment: return (string)array["fragment"]; case UrlComponent.Host: return (string)array["host"]; case UrlComponent.Password: return (string)array["pass"]; case UrlComponent.Path: return (string)array["path"]; case UrlComponent.Port: object port = array["port"]; if (port != null) return (int)port; else return null; case UrlComponent.Query: return (string)array["query"]; case UrlComponent.Scheme: return (string)array["scheme"]; case UrlComponent.User: return (string)array["user"]; default: PhpException.Throw(PhpError.Warning, LibResources.GetString("arg:invalid_value", "component", component)); return null; } } /// /// Parses a string as if it were the query string passed via an URL. /// /// Only to comply with Phalanger Class Library rules - all overloads of the same /// function has to have the same implementation options. Can be null reference. /// The string to parse. /// The array to store the variable found in to. [ImplementsFunction("parse_str", FunctionImplOptions.NeedsVariables), EditorBrowsable(EditorBrowsableState.Never)] public static void ParseUrlQuery(Dictionary definedVariables, string str, out PhpArray result) { result = new PhpArray(); AutoGlobals.LoadFromCollection(result, HttpUtility.ParseQueryString(str)); } /// /// Parses a string as if it were the query string passed via an URL and sets variables in the /// current scope. /// /// The where to store variables and its values. /// The string to parse. [ImplementsFunction("parse_str", FunctionImplOptions.NeedsVariables)] public static void ParseUrlQuery(Dictionary localVariables, string str) { if (str == null) return; PhpArray globals = (localVariables != null) ? null : ScriptContext.CurrentContext.GlobalVariables; AutoGlobals.LoadFromCollection(globals, HttpUtility.ParseQueryString(str)); } private static void ParseUrlQuery_InitVariable(PhpArray globals, Dictionary localVariables, string key, object value) { if (key.EndsWith("[]")) { key = key.Substring(0, key.Length - 2); object ov; if (PhpArray.TryGetValue(globals, localVariables, key, out ov)) { if (ov is PhpArray) { PhpArray a = (PhpArray)ov; a.Add(value); } else { PhpArray.Set(globals, localVariables, HttpUtility.UrlDecode(key), PhpArray.New(ov, value)); } } else { PhpArray.Set(globals, localVariables, HttpUtility.UrlDecode(key), PhpArray.New(value)); } } else { PhpArray.Set(globals, localVariables, HttpUtility.UrlDecode(key), value); } } #endregion #region rawurlencode, rawurldecode, urlencode, urldecode /// /// Decode URL-encoded strings /// /// The URL string (e.g. "hello%20from%20foo%40bar"). /// Decoded string (e.g. "hello from foo@bar") [ImplementsFunction("rawurldecode")] public static string RawUrlDecode(string str) { if (str == null) return null; return HttpUtility.UrlDecode(str.Replace("+", "%2B")); // preserve '+' } /// /// Encodes a URL string keeping spaces in it. Spaces are encoded as '%20'. /// /// The string to be encoded. /// The encoded string. [ImplementsFunction("rawurlencode")] public static string RawUrlEncode(string str) { if (str == null) return null; return UpperCaseEncodedChars(HttpUtility.UrlEncode(str)).Replace("+", "%20"); // ' ' => '+' => '%20' } /// /// Decodes a URL string. /// [ImplementsFunction("urldecode")] public static string UrlDecode(string str) { return HttpUtility.UrlDecode(str); } /// /// Encodes a URL string. Spaces are encoded as '+'. /// [ImplementsFunction("urlencode")] public static string UrlEncode(string str) { return UpperCaseEncodedChars(HttpUtility.UrlEncode(str)); } private static string UpperCaseEncodedChars(string encoded) { char[] temp = encoded.ToCharArray(); for (int i = 0; i < temp.Length - 2; i++) { if (temp[i] == '%') { temp[i + 1] = temp[i + 1].ToUpperAsciiInvariant(); temp[i + 2] = temp[i + 2].ToUpperAsciiInvariant(); } } return new string(temp); } //#if !SILVERLIGHT // /// // /// Encodes a Unicode URL string. // /// // [ImplementsFunction("urlencode_unicode")] // public static string UrlEncodeUnicode(string str) // { // return HttpUtility.UrlEncodeUnicode(str);//TODO: implement this in PhpHttpUtility // } //#endif #endregion #region get_meta_tags /// /// Lazily initialized <meta> tag regex. /// private static volatile Regex getMetaTagsRegex = null; /// /// Extracts all meta tag content attributes from a file and returns an array. /// /// The file to search for meta tags in. /// Array with keys set to values of the name property and values set to values of the /// content property. /// The parsing stops at the </head> tag. [ImplementsFunction("get_meta_tags")] [return: CastToFalse] public static PhpArray GetMetaTags(string fileName) { return GetMetaTags(fileName, FileOpenOptions.Empty); } /// /// Extracts all meta tag content attributes from a file and returns an array. /// /// The file to search for meta tags in. /// If true, the file specified by should be sought /// for along the standard include path. /// Array with keys set to values of the name property and values set to values of the /// content property. /// The parsing stops at the </head> tag. [ImplementsFunction("get_meta_tags")] [return: CastToFalse] public static PhpArray GetMetaTags(string fileName, FileOpenOptions flags) { PhpArray result = new PhpArray(); ScriptContext context = ScriptContext.CurrentContext; if (getMetaTagsRegex == null) { getMetaTagsRegex = new Regex(@"^meta\s+name\s*=\s*(?:(\w*)|'([^']*)'|\u0022([^\u0022]*)\u0022)\s+" + @"content\s*=\s*(?:(\w*)|'([^']*)'|\u0022([^\u0022]*)\u0022)\s*/?$", RegexOptions.IgnoreCase | RegexOptions.CultureInvariant); } try { PhpStream stream = PhpStream.Open(fileName, "rt", PhpFile.ProcessOptions(flags)); StringBuilder tag = new StringBuilder(); bool in_brackets = false; int in_quotes = 0; // 1 = ', 2 = " int in_comment = 0; // 1 = <, 2 = ': { if (in_brackets && in_quotes == 0 && in_comment != 4 && in_comment != 5) { in_brackets = false; in_comment = 0; if (start_index < i) tag.Append(line, start_index, i - start_index); string str = tag.ToString(); tag.Length = 0; // did we reach the end of ? if (str.Equals("/head", StringComparison.InvariantCultureIgnoreCase)) return result; // try to match the tag with the regex Match match = getMetaTagsRegex.Match(str); if (match.Success) { string name = null, value = null; for (int j = 1; j <= 3; j++) if (match.Groups[j].Success) { name = match.Groups[j].Value; break; } if (name != null) { for (int j = 4; j <= 6; j++) if (match.Groups[j].Success) { value = match.Groups[j].Value; break; } result[name] = (value == null ? String.Empty : Core.Convert.Quote(value, context)); } } } break; } case '\'': { if (in_quotes == 0) in_quotes = 1; else if (in_quotes == 1) in_quotes = 0; break; } case '"': { if (in_quotes == 0) in_quotes = 2; else if (in_quotes == 2) in_quotes = 0; break; } case '!': if (in_comment == 1) in_comment = 2; break; case '-': if (in_comment >= 2 && in_comment < 6) in_comment++; break; default: { // reset comment state machine if (in_comment < 4) in_comment = 0; if (in_comment > 4) in_comment = 4; break; } } } if (in_brackets && start_index < line.Length) tag.Append(line, start_index, line.Length - start_index); } } catch (IOException) { return null; } return result; } #endregion } } ================================================ FILE: Source/ClassLibrary/web.config.install.xdt ================================================ ================================================ FILE: Source/ClassLibrary/web.config.uninstall.xdt ================================================ ================================================ FILE: Source/ClassLibrary.Tests/ArraysTests.cs ================================================ using System; using Microsoft.VisualStudio.TestTools.UnitTesting; using PHP.Core; namespace PHP.Library.Tests { [TestClass] public class ArraysTests { [TestMethod] public void TestRandomKeys() { PhpArray a = PhpArray.Keyed("Server1", 1, "Server2", 2, "Server3", 3); PhpVariable.Dump(a); string result = PhpArrays.RandomKeys(a) as string; Assert.IsTrue(result == "Server1" || result == "Server2" || result == "Server3"); } } } ================================================ FILE: Source/ClassLibrary.Tests/ClassLibrary.Tests.csproj ================================================  Debug AnyCPU {D2388680-0C99-467F-9C17-68E1E6E4F1C0} Library Properties PHP.Library.Tests PhpNet.ClassLibrary.Tests v4.5 512 {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} 10.0 $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) $(ProgramFiles)\Common Files\microsoft shared\VSTT\$(VisualStudioVersion)\UITestExtensionPackages False UnitTest SAK SAK SAK SAK true full false bin\Debug\ DEBUG;TRACE prompt 4 pdbonly true bin\Release\ TRACE prompt 4 true ClassLibrary.Tests.snk {d515e8f4-357c-4caf-87c1-97d64c5f865a} ClassLibrary {581f1486-5062-459e-bae6-a41886584f81} Core.Parsers {9a2867a2-981c-4b5a-a1c5-eaccc80b5148} Core False False False False ================================================ FILE: Source/ClassLibrary.Tests/PhpDateTimeTests.cs ================================================ using System; using Microsoft.VisualStudio.TestTools.UnitTesting; using PHP.Core; namespace PHP.Library.Tests { [TestClass] public class PhpDateTimeTests { private static TimeZoneInfo/*!*/NepalTimeZone { get { return PhpTimeZone.GetTimeZone("Asia/Katmandu"); } }// = TimeZoneInfo.FindSystemTimeZoneById("Nepal Standard Time");// new _NepalTimeZone(); private static TimeZoneInfo/*!*/PacificTimeZone { get { return PhpTimeZone.GetTimeZone("America/Los_Angeles"); } }// = TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time");//new _PacificTimeZone(); private static TimeZoneInfo/*!*/GmtTimeZone { get { return PhpTimeZone.GetTimeZone("Etc/GMT"); } }// = TimeZoneInfo.FindSystemTimeZoneById("GTM"); [TestMethod] public void TestGetTimeOfDay() { PhpArray result; result = PhpDateTime.GetTimeOfDay(new DateTime(2005, 10, 1), PacificTimeZone); Assert.AreEqual((int)result["minuteswest"], 480); Assert.AreEqual((int)result["dsttime"], 1); result = PhpDateTime.GetTimeOfDay(new DateTime(2005, 11, 1), PacificTimeZone); Assert.AreEqual((int)result["minuteswest"], 480); Assert.AreEqual((int)result["dsttime"], 1); result = PhpDateTime.GetTimeOfDay(new DateTime(2005, 11, 1), NepalTimeZone); Assert.AreEqual((int)result["minuteswest"], -345); Assert.AreEqual((int)result["dsttime"], 0); result = PhpDateTime.GetTimeOfDay(new DateTime(2005, 10, 1), GmtTimeZone); Assert.AreEqual((int)result["minuteswest"], 0); Assert.AreEqual((int)result["dsttime"], 1); result = PhpDateTime.GetTimeOfDay(new DateTime(2005, 11, 1), GmtTimeZone); Assert.AreEqual((int)result["minuteswest"], 0); Assert.AreEqual((int)result["dsttime"], 1); result = PhpDateTime.GetTimeOfDay(new DateTime(2005, 11, 1), DateTimeUtils.UtcTimeZone); Assert.AreEqual((int)result["minuteswest"], 0); Assert.AreEqual((int)result["dsttime"], 0); } [TestMethod] public void TestGetLocalTime() { #if DEBUG PhpArray result1, result2; PhpTimeZone.CurrentTimeZone = PhpTimeZone.GetTimeZone("UTC"); DateTime dt = new DateTime(2005, 11, 4, 5, 4, 3, 132); result1 = PhpDateTime.GetLocalTime(dt, false); result2 = PhpDateTime.GetLocalTime(dt, true); Assert.AreEqual((int)result1[0], 3); Assert.AreEqual((int)result1[1], 4); Assert.AreEqual((int)result1[2], 5); Assert.AreEqual((int)result1[3], 4); Assert.AreEqual((int)result1[4], 10); Assert.AreEqual((int)result1[5], 105); Assert.AreEqual((int)result1[6], 5); Assert.AreEqual((int)result1[7], 307); Assert.AreEqual((int)result1[8], 0); Assert.AreEqual((int)result1[0], (int)result2["tm_sec"]); Assert.AreEqual((int)result1[1], (int)result2["tm_min"]); Assert.AreEqual((int)result1[2], (int)result2["tm_hour"]); Assert.AreEqual((int)result1[3], (int)result2["tm_mday"]); Assert.AreEqual((int)result1[4], (int)result2["tm_mon"]); Assert.AreEqual((int)result1[5], (int)result2["tm_year"]); Assert.AreEqual((int)result1[6], (int)result2["tm_wday"]); Assert.AreEqual((int)result1[7], (int)result2["tm_yday"]); Assert.AreEqual((int)result1[8], (int)result2["tm_isdst"]); #endif } struct StringToTimeCase { public string String; public int StartTime; public string Result; public TimeZoneInfo[] Zones; public StringToTimeCase(string str, int start, string result, TimeZoneInfo[] zones) { this.String = str; this.StartTime = start; this.Result = result; this.Zones = zones; } public StringToTimeCase(string str, string result, TimeZoneInfo[] zones) : this(str, 0, result, zones) { } public StringToTimeCase(string str, int locMonth, int locDay, int locYear, TimeZoneInfo zone, string result, TimeZoneInfo[] zones) : this(str, DateTimeUtils.UtcToUnixTimeStamp(TimeZoneInfo.ConvertTimeToUtc(new DateTime(locYear, locMonth, locDay), zone)), result, zones) { } public StringToTimeCase(string str, DateTime local, TimeZoneInfo zone, string result, TimeZoneInfo[] zones) : this(str, DateTimeUtils.UtcToUnixTimeStamp(TimeZoneInfo.ConvertTimeToUtc(local, zone)), result, zones) { } } [TestMethod] public void TestStringToTime() { TimeZoneInfo[] all_zones = { NepalTimeZone, PacificTimeZone, GmtTimeZone }; var utc_zone = DateTimeUtils.UtcTimeZone; var nep_zone = NepalTimeZone; var pac_zone = PacificTimeZone; TimeZoneInfo[] utc_zones = { utc_zone }; TimeZoneInfo[] nep_zones = { nep_zone }; TimeZoneInfo[] pac_zones = { pac_zone }; DateTime time1 = new DateTime(2005, 11, 13, 17, 41, 43); // mktime(17,41,43,11,13,2005); StringToTimeCase[] cases = { new StringToTimeCase("10 September 2000", time1,pac_zone, "", pac_zones), new StringToTimeCase("+0545", time1,pac_zone, "", pac_zones), // new StringToTimeCase("+0545", time1,pac_zone, "11:56:43 11/13/2005", pac_zones), // new StringToTimeCase("11/31/2005", time1,pac_zone, "17:41:43 11/13/2005", pac_zones), // new StringToTimeCase("-1 month +0545",11,01,2005,pac_zone, "20:15:00 09-30-2005", pac_zones), // new StringToTimeCase("@-1519789808",null,pac_zones), // new StringToTimeCase( "1/1/1900", null, all_zones), // new StringToTimeCase("11/1/2005", "00:00:00 11/01/2005", nep_zones), // // // note: goes over daylight savings change date: // new StringToTimeCase( "+1 month", 10,01,2005,utc_zone, "00:00:00 11/01/2005", utc_zones), // new StringToTimeCase( "+1 month", 10,01,2005,nep_zone, "00:00:00 11/01/2005", nep_zones), // new StringToTimeCase( "+1 month", 10,01,2005,pac_zone, "00:00:00 11/01/2005", pac_zones), // new StringToTimeCase( "-1 month", 11,01,2005,utc_zone, "00:00:00 10/01/2005", utc_zones), // new StringToTimeCase( "-1 month", 11,01,2005,nep_zone, "00:00:00 10/01/2005", nep_zones), // new StringToTimeCase( "-1 month", 11,01,2005,pac_zone, "00:00:00 10/01/2005", pac_zones), // // new StringToTimeCase("now", time1,pac_zone, "17:41:43 11/13/2005", pac_zones), // new StringToTimeCase("10 September 2000", time1,pac_zone, "00:00:00 09/10/2000", pac_zones), // new StringToTimeCase("+1 day", time1,pac_zone, "17:41:43 11/14/2005", pac_zones), // new StringToTimeCase("+1 week", time1,pac_zone, "17:41:43 11/20/2005", pac_zones), // new StringToTimeCase("+1 week 2 days 4 hours 2 seconds", time1,pac_zone, "21:41:45 11/22/2005", pac_zones), // new StringToTimeCase("next Thursday", time1,pac_zone, "00:00:00 11/17/2005", pac_zones), // new StringToTimeCase("last Monday", time1,pac_zone, "00:00:00 11/07/2005", pac_zones), // new StringToTimeCase("2004-12-31", time1,pac_zone, "00:00:00 12/31/2004", pac_zones), // new StringToTimeCase("2005-04-15", time1,pac_zone, "00:00:00 04/15/2005", pac_zones), // new StringToTimeCase("last Wednesday", time1,pac_zone, "00:00:00 11/09/2005", pac_zones), // new StringToTimeCase("04/05/2005", time1,pac_zone, "00:00:00 04/05/2005", pac_zones), // new StringToTimeCase("Thu, 31 Jul 2003 13:02:39 -0700", time1,pac_zone, "13:02:39 07/31/2003", pac_zones), // new StringToTimeCase("today 00:00:00", time1,pac_zone, "00:00:00 11/13/2005", pac_zones), // new StringToTimeCase("last Friday", time1,pac_zone, "00:00:00 11/11/2005", pac_zones), // new StringToTimeCase("2004-12-01", time1,pac_zone, "00:00:00 12/01/2004", pac_zones), // new StringToTimeCase("- 1week", time1,pac_zone, "16:00:00 12/31/1969", pac_zones), // new StringToTimeCase("2004-06-13 09:20:00.0", time1,pac_zone, "09:20:00 06/13/2004", pac_zones), // new StringToTimeCase("+10 seconds", time1,pac_zone, "17:41:53 11/13/2005", pac_zones), // new StringToTimeCase("2004-04-04 02:00:00 GMT", time1,pac_zone, "18:00:00 04/03/2004", pac_zones), // new StringToTimeCase("2004-04-04 01:59:59 UTC", time1,pac_zone, "16:00:00 12/31/1969", pac_zones), // new StringToTimeCase("2004-06-13 09:20:00.0", time1,pac_zone, "09:20:00 06/13/2004", pac_zones), // new StringToTimeCase("2004-04-04 02:00:00", time1,pac_zone, "03:00:00 04/04/2004", pac_zones), // new StringToTimeCase("last sunday 12:00:00", time1,pac_zone, "12:00:00 11/06/2005", pac_zones), // new StringToTimeCase("last sunday", time1,pac_zone, "00:00:00 11/06/2005", pac_zones), // new StringToTimeCase("01-jan-70 01:00", time1,pac_zone, "01:00:00 01/01/1970", pac_zones), // new StringToTimeCase("01-jan-70 02:00", time1,pac_zone, "02:00:00 01/01/1970", pac_zones), }; foreach (StringToTimeCase c in cases) { foreach (var zone in c.Zones) { //DateTimeUtils.SetCurrentTimeZone(zone); object timestamp = PhpDateTime.StringToTime(c.String, c.StartTime); // string str = null; // if (timestamp is int) // str = FormatDate("H:i:s m/d/Y",(int)timestamp); else // Debug.Assert(!(bool)timestamp); // // if (str!=c.Result) // Debug.Fail(); } } } } } ================================================ FILE: Source/ClassLibrary.Tests/Properties/AssemblyInfo.cs ================================================ using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; // General Information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information // associated with an assembly. [assembly: AssemblyTitle("ClassLibrary.Tests")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("ClassLibrary.Tests")] [assembly: AssemblyCopyright("Copyright © 2014")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] // Setting ComVisible to false makes the types in this assembly not visible // to COM components. If you need to access a type in this assembly from // COM, set the ComVisible attribute to true on that type. [assembly: ComVisible(false)] // The following GUID is for the ID of the typelib if this project is exposed to COM [assembly: Guid("a7e1cfb9-4e1d-40e9-9150-c39ce661cc33")] // Version information for an assembly consists of the following four values: // // Major Version // Minor Version // Build Number // Revision // // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] [assembly: AssemblyVersion("1.0.0.0")] [assembly: AssemblyFileVersion("1.0.0.0")] ================================================ FILE: Source/ClassLibrary.Tests/RegExpPerlTests.cs ================================================ using System; using Microsoft.VisualStudio.TestTools.UnitTesting; using PHP.Core; using System.Text; using System.Text.RegularExpressions; using PHP.Library; using System.Collections.Generic; namespace PHP.Library.Tests { [TestClass] public class RegExpPerlTests { [TestMethod] public void TestUnicodeMatch() { int m; m = PerlRegExp.Match ( new PhpBytes(Encoding.UTF8.GetBytes("/[ř]/u")), new PhpBytes(Encoding.UTF8.GetBytes("12ščř45")) ); Assert.AreEqual(m, 1); Encoding enc = Configuration.Application.Globalization.PageEncoding; m = PerlRegExp.Match ( new PhpBytes(enc.GetBytes("/[ř]/")), new PhpBytes("12ščř45") ); Assert.AreEqual(m, 1); // binary cache test: m = PerlRegExp.Match ( new PhpBytes(enc.GetBytes("/[ř]/")), new PhpBytes("12ščř45") ); Assert.AreEqual(m, 1); int count; object r = PerlRegExp.Replace ( ScriptContext.CurrentContext, null, null, new PhpBytes(Encoding.UTF8.GetBytes("/[řš]+/u")), "|žýř|", new PhpBytes(Encoding.UTF8.GetBytes("Hešovářřřříčkořš hxx")), 1000, out count ); Assert.AreEqual(r as string, "He|žýř|ová|žýř|íčko|žýř| hxx"); Assert.AreEqual(count, 3); } [TestMethod] public void TestConvertRegex() { IEnumerable> tests = new Tuple[] { new Tuple( @"?a+sa?s (?:{1,2})", "??a+?sa??s (?:{1,2}?)", PerlRegexOptions.Ungreedy), new Tuple( @"(X+)(?:\|(.+?))?]](.*)$", @"(X+?)(?:\|(.+))??]](.*?)$", PerlRegexOptions.Ungreedy), new Tuple( @"([X$]+)$", @"([X$]+)\z", PerlRegexOptions.DollarMatchesEndOfStringOnly) }; foreach (var test in tests) { var result = PerlRegExpConverter.ConvertRegex(test.Item1, test.Item3, Encoding.UTF8); Assert.AreEqual(result, test.Item2); } } } } ================================================ FILE: Source/ClassLibrary.Tests/TimeZonesTests.cs ================================================ using System; using Microsoft.VisualStudio.TestTools.UnitTesting; using PHP.Library; namespace PHP.Library.Tests { [TestClass] public class TimeZonesTests { // //[Test(true)] // static void SortZones() // { // InitTables(); //#if !SILVERLIGHT // Array.Sort(zones, CaseInsensitiveComparer.DefaultInvariant); //#else // Array.Sort(zones, StringComparer.InvariantCultureIgnoreCase); //#endif // Console.WriteLine(); // foreach (string z in zones) // { // Console.WriteLine("\"{0}\",", z); // } // } // [Test] // static void TestSorted() // { // InitTables(); // string[] sorted = (string[])zones.Clone(); //#if !SILVERLIGHT // Array.Sort(sorted, CaseInsensitiveComparer.DefaultInvariant); //#else // Array.Sort(sorted, StringComparer.InvariantCultureIgnoreCase); //#endif // for (int i = 0; i < zones.Length; i++) // Debug.Assert(sorted[i] == zones[i]); // } [TestMethod] public void TestGetTimeZone() { TimeZoneInfo zone; zone = PhpTimeZone.GetTimeZone("Europe/Prague"); Assert.IsTrue(zone != null && zone.Id == "Europe/Prague"); zone = PhpTimeZone.GetTimeZone("europe/prague"); Assert.IsTrue(zone != null && zone.Id == "Europe/Prague"); zone = PhpTimeZone.GetTimeZone("foo"); Assert.IsNull(zone); } } } ================================================ FILE: Source/ClassLibrary.Tests/UUEncodingTests.cs ================================================ using System; using Microsoft.VisualStudio.TestTools.UnitTesting; using PHP.Core; using System.Text; namespace PHP.Library.Tests { [TestClass] public class UUEncodingTests { [TestMethod] public void TestUUEncodeDecode() { string[,] cases = { {"x", "!>```\n`\n"}, {"xx", "\">'@`\n`\n"}, {"xxx", "#>'AX\n`\n"}, {"test\ntext text\r\n", "0=&5S=`IT97AT('1E>'0-\"@``\n`\n"}, {"The algorithm that shall be used for lines in","M5&AE(&%L9V]R:71H;2!T:&%T('-H86QL(&)E('5S960@9F]R(&QI;F5S(&EN\n`\n"}, {"The algorithm that shall be used for lines i","L5&AE(&%L9V]R:71H;2!T:&%T('-H86QL(&)E('5S960@9F]R(&QI;F5S(&D`\n`\n"}, {"The algorithm that shall be used for lines in ","M5&AE(&%L9V]R:71H;2!T:&%T('-H86QL(&)E('5S960@9F]R(&QI;F5S(&EN\n!(```\n`\n"}, {"",""}, {@"The algorithm that shall be used for lines in between begin and end takes three octets as input and writes four characters of output by splitting the input at six-bit intervals into four octets, containing data in the lower six bits only. These octets shall be converted to characters by adding a value of 0x20 to each octet, so that each octet is in the range [0x20,0x5f], and then it shall be assumed to represent a printable character in the ISO/IEC 646:1991 standard encoded character set. It then shall be translated into the corresponding character codes for the codeset in use in the current locale. (For example, the octet 0x41, representing 'A', would be translated to 'A' in the current codeset, such as 0xc1 if it were EBCDIC.) Where the bits of two octets are combined, the least significant bits of the first octet shall be shifted left and combined with the most significant bits of the second octet shifted right. Thus the three octets A, B, C shall be converted into the four octets: These octets then shall be translated into the local character set. Each encoded line contains a length character, equal to the number of characters to be decoded plus 0x20 translated to the local character set as described above, followed by the encoded characters. The maximum number of octets to be encoded on each line shall be 45.", @"M5&AE(&%L9V]R:71H;2!T:&%T('-H86QL(&)E('5S960@9F]R(&QI;F5S(&EN M(&)E='=E96X@8F5G:6X@86YD(&5N9""!T86ME#(P+#!X-69=+""!A;F0@=&AE;B!I=""!S:&%L;""!B92!A /// Gets instance to compiler manager that manages script libraries, WebPages.dll and scripts compiled dynamically in runtime. /// internal WebServerCompilerManager/*!*/ RuntimeCompilerManager { get { if (webServerCompilerManager == null) lock (this) if (webServerCompilerManager == null) webServerCompilerManager = new WebServerCompilerManager(this); return webServerCompilerManager; } } #endregion } #region AssemblyLoader public sealed partial class AssemblyLoader { /// /// Loads assemblies whose paths or full names are listed in references. /// /// Enumeration of paths to or full names of assemblies to load. /// is a null reference. /// An error occured while loading a library. public void Load(IEnumerable/*!*/ references) { if (references == null) throw new ArgumentNullException("references"); foreach (var reference in references) { LoadReference(reference.Reference, reference.LibraryRoot); } } /// /// Loads single reference. /// /// Path to or full name of references assembly. /// If the reference represents a script library, this optional parameter can move scripts in the loaded library to a subdirectory. private void LoadReference(string reference, string libraryRoot) { Assembly realAssembly; if (System.IO.File.Exists(reference)) // TODO: look if this can be simplified realAssembly = LoadRealAssemblyFrom(reference); else realAssembly = LoadRealAssembly(reference); if (realAssembly == null) { throw new ConfigurationErrorsException (CoreResources.GetString("library_assembly_loading_failed", reference), (Exception)null); } DAssemblyAttribute attr = DAssemblyAttribute.Reflect(realAssembly); // TODO: this special case should be removed after WebPages functionality is passed to script libraries if (attr is ScriptAssemblyAttribute && ((ScriptAssemblyAttribute)attr).IsMultiScript) { //load this as script library LoadScriptLibrary(realAssembly, libraryRoot); return; } Load(realAssembly, null); } /// /// Loads assembly as script library, adding all scripts it contains into script library database. /// /// Long assembly name (see ) or a null reference. /// Assembly file absolute URI or a null reference. /// Root offset of the script library. All scripts will be loaded with this offset. /// Strict behavior forbids conflicts between scriptLibrary and filesystem, all conflicts will be reported as errors. /// This is used in the runtime (dynamic include), compiler currently ignores filesystem. /// public DAssembly LoadScriptLibrary(string assemblyName, Uri assemblyUrl, string libraryRoot) { if (assemblyName == null && assemblyUrl == null) throw new ArgumentNullException("assemblyName"); if (assemblyUrl != null && !assemblyUrl.IsAbsoluteUri) throw new ArgumentException("Absolute URL expected", "assemblyUrl"); string target = null; try { if (assemblyName != null) { // load assembly by full name: target = assemblyName; return LoadScriptLibrary(LoadRealAssembly(target), libraryRoot); } else { // load by URI: target = HttpUtility.UrlDecode(assemblyUrl.AbsoluteUri); return LoadScriptLibrary(LoadRealAssemblyFrom(target), libraryRoot); } } catch (Exception e) { throw new ConfigurationErrorsException (CoreResources.GetString("script_library_assembly_loading_failed", target) + " " + e.Message, e); } } /// /// Loads assembly as script library, adding all scripts it contains into script library database. /// /// Script assembly that is to be loaded. /// Root offset of the script library. All scripts will be loaded with this offset. /// Strict behavior forbids conflicts between scriptLibrary and filesystem, all conflicts will be reported as errors. /// This is used in the runtime (dynamic include), compiler currently ignores filesystem. /// public DAssembly LoadScriptLibrary(Assembly/*!*/ realAssembly, string libraryRoot) { ScriptAssembly scriptAssembly; lock (this) { if (loadedAssemblies.ContainsKey(realAssembly)) return loadedAssemblies[realAssembly]; scriptAssembly = ScriptAssembly.LoadFromAssembly(applicationContext, realAssembly, libraryRoot); loadedAssemblies.Add(realAssembly, scriptAssembly); } applicationContext.ScriptLibraryDatabase.ReflectLibraryNoLock(scriptAssembly); return scriptAssembly; } } #endregion AssemblyLoader #region ScriptLibraryDatabase /// /// Database of library scripts. These scripts are contained in assemblies listed in scriptLibrary configuration section. /// Used by DynamicInclude. /// internal sealed class ScriptLibraryDatabase { #region Entry /// /// Single entry in the database. /// private class Entry { public FullPath Path; public ScriptModule ScriptModule; public ScriptAssembly ContainingAssembly; public Entry(FullPath path, ScriptModule scriptModule, ScriptAssembly containingAssembly) { ScriptModule = scriptModule; ContainingAssembly = containingAssembly; Path = path; } } #endregion #region Prepared to be loaded lazily /// /// Description of the script library to be loaded later lazily. /// internal class ScriptLibraryConfigurationNode { /// /// The full name of the assembly. If assemblyUri is not provided. /// public AssemblyName assemblyName; /// /// The full path to the assembly. If assemblyName is not provided. /// public Uri assemblyUrl; /// /// Relative root path to the scripts in library. Default is ".". /// public string libraryRootPath; /// /// Value of the url attribute to allow removing the library /// by this value within the nested configuration. /// public string urlNodeValue; /// /// Compares two ScriptLibraryConfigurationNode objects. /// /// /// public override bool Equals(object obj) { var node = obj as ScriptLibraryConfigurationNode; if (node != null) { if (string.Equals(node.urlNodeValue, this.urlNodeValue, StringComparison.Ordinal)) return true; if (node.assemblyName != null && this.assemblyName != null) return AssemblyName.ReferenceMatchesDefinition(node.assemblyName, this.assemblyName); if (node.assemblyUrl != null && this.assemblyUrl != null) return node.assemblyUrl == this.assemblyUrl; return false; } return object.ReferenceEquals(this, obj); } public override int GetHashCode() { return base.GetHashCode(); } } /// /// List of libraries to be loaded lazily. /// private List libraries = null; /// /// Check if the given library was already and returns its index within . /// private int FindAddedLibrary(ScriptLibraryConfigurationNode/*!*/ desc) { return libraries.IndexOf(desc); } /// /// Adds new library to the script library. /// /// True if library was added, false if the library was not added. public bool AddLibrary(string assemblyName, Uri assemblyUrl, string urlNodeValue, string libraryRootPath) { return AddLibrary( new ScriptLibraryDatabase.ScriptLibraryConfigurationNode() { assemblyUrl = assemblyUrl, assemblyName = (assemblyName != null) ? new AssemblyName(assemblyName) : null, urlNodeValue = urlNodeValue, libraryRootPath = libraryRootPath }); } /// /// Removes specified library from the list of libraries to be loaded lazily. /// /// True if library was removed. public bool RemoveLibrary(string assemblyName, Uri assemblyUrl, string urlNodeValue, string libraryRootPath) { var existing = FindAddedLibrary( new ScriptLibraryDatabase.ScriptLibraryConfigurationNode() { assemblyUrl = assemblyUrl, assemblyName = (assemblyName != null) ? new AssemblyName(assemblyName) : null, urlNodeValue = urlNodeValue, libraryRootPath = libraryRootPath }); if (existing >= 0) { libraries.RemoveAt(existing); return true; } else { return false; } } /// /// Clear the list of libraries to be loaded lazily. /// public void ClearLibraries() { libraries = null; } /// /// Adds new library to the script library. /// /// Configuration of script library to be added and reflected later. /// True if library was added, false if the library was not added. private bool AddLibrary(ScriptLibraryConfigurationNode/*!*/ desc) { Debug.Assert(desc != null); if (libraries == null) { libraries = new List(); } else { // check for duplicity if (FindAddedLibrary(desc) >= 0) return false; } // add the library configuration to be loaded lazily libraries.Add(desc); return true; } /// /// Ensures that libraries are reflected. /// internal void EnsureLibrariesReflected() { if (libraries != null) lock (this) if (libraries != null) // double checked lock { foreach (var lib in libraries) { applicationContext.AssemblyLoader.LoadScriptLibrary( (lib.assemblyName != null) ? lib.assemblyName.FullName : null, lib.assemblyUrl, lib.libraryRootPath); } libraries = null; } } #endregion #region Fields and Properties /// /// Database of the library scripts. Cannot be null. /// private readonly Dictionary/*!*/entries = new Dictionary(); /// /// Amount of scripts in the database. /// public int Count { get { EnsureLibrariesReflected(); return entries.Count; } } /// /// Owning application context. /// private readonly ApplicationContext applicationContext; #endregion #region Construction /// /// Creates new ScriptLibraryDatabase object. /// /// Owning application context. public ScriptLibraryDatabase(ApplicationContext context) { applicationContext = context; } #endregion #region ScriptLibrary methods /// /// Reflect given scriptAssembly and add its modules into entries. /// /// ScriptAssembly to be reflected. internal void ReflectLibraryNoLock(ScriptAssembly scriptAssembly) { foreach (ScriptModule module in scriptAssembly.GetModules()) { FullPath fullPath = new FullPath(module.RelativeSourcePath, Configuration.Application.Compiler.SourceRoot); Entry entry = new Entry(fullPath, module, scriptAssembly); if (!entries.ContainsKey(fullPath)) { entries.Add(fullPath, entry); } } } /// /// Gets a known library script. /// /// Application config-dependent path of the script. /// Library script corresponding to the supplied path, or null if there is no such script present in the script library. public ScriptModule GetScriptModule(FullPath path) { EnsureLibrariesReflected(); Entry entry; if (entries.TryGetValue(path, out entry) && entry != null) return entry.ScriptModule; return null; } /// /// Returns a value indicating whether the script library database contains given script. /// /// Application config-dependent path of the script. /// True if the script is contained within the script library. Otherwise false. public bool ContainsScript(FullPath path) { EnsureLibrariesReflected(); return entries.ContainsKey(path); } #endregion } #endregion } ================================================ FILE: Source/Core/ApplicationContext.cs ================================================ /* Copyright (c) 2006 Tomas Matousek. The use and distribution terms for this software are contained in the file named License.txt, which can be found in the root of the Phalanger distribution. By using this software in any fashion, you are agreeing to be bound by the terms of this license. You must not remove this notice from this software. */ using System; using System.Collections.Generic; using System.Text; using System.Collections; using System.Reflection; using System.Xml; using System.Configuration; using PHP.Core.Reflection; using PHP.Core.Emit; using System.Diagnostics; #if SILVERLIGHT using PHP.CoreCLR; using System.Windows.Browser; #else using System.Web; #endif namespace PHP.Core { [DebuggerNonUserCode] public sealed partial class ApplicationContext { #region Properties /// /// Whether full reflection of loaded libraries should be postponed until really needed. /// Set to false by command line compiler (phpc) and web server manager as they both need /// to compile source files. /// public bool LazyFullReflection { get { return lazyFullReflection; } } private bool lazyFullReflection; public Dictionary/*!*/ Types { get { Debug.Assert(types != null); return types; } } private readonly Dictionary types; public Dictionary/*!*/ Functions { get { Debug.Assert(functions != null); return functions; } } private readonly Dictionary functions; public DualDictionary/*!*/ Constants { get { Debug.Assert(constants != null); return constants; } } private readonly DualDictionary constants; /// /// Associated assembly loader. /// /// Context is readonly. public AssemblyLoader/*!*/ AssemblyLoader { get { Debug.Assert(assemblyLoader != null, "Empty application context doesn't have a loader."); return assemblyLoader; } } private readonly AssemblyLoader assemblyLoader; /// /// Assembly builder where compiled pieces of eval'd code are stored. /// internal TransientAssemblyBuilder/*!*/ TransientAssemblyBuilder { get { if (transientAssemblyBuilder == null) throw new InvalidOperationException(); return transientAssemblyBuilder; } } private readonly TransientAssemblyBuilder transientAssemblyBuilder; public bool HasTransientAssemblyBuilder { get { return transientAssemblyBuilder != null; } } /// /// Delegate checking for script existance. Created lazily, valid across all the requests on this . /// private Predicate fileExists = null; #endregion #region Default Contexts private static object/*!*/ mutex = new object(); /// /// Default context. /// public static ApplicationContext/*!*/ Default { get { if (_defaultContext == null) DefineDefaultContext(true, false, true); return _defaultContext; } } private static ApplicationContext _defaultContext; // lazy public static bool DefineDefaultContext(bool lazyFullReflection, bool reflectionOnly, bool createTransientBuilder) { bool created = false; if (_defaultContext == null) { lock (mutex) { if (_defaultContext == null) { _defaultContext = new ApplicationContext(lazyFullReflection, reflectionOnly, createTransientBuilder); created = true; } } } return created; } internal static readonly ApplicationContext/*!*/ Empty = new ApplicationContext(); #endregion #region Construction private ApplicationContext() { } public ApplicationContext(bool lazyFullReflection, bool reflectionOnly, bool createTransientBuilder) { this.lazyFullReflection = lazyFullReflection; this.assemblyLoader = new AssemblyLoader(this, reflectionOnly); this.transientAssemblyBuilder = createTransientBuilder ? new TransientAssemblyBuilder(this) : null; this.types = new Dictionary(StringComparer.OrdinalIgnoreCase); this.functions = new Dictionary(StringComparer.OrdinalIgnoreCase); this.constants = new DualDictionary(null, StringComparer.OrdinalIgnoreCase); #if !SILVERLIGHT this.scriptLibraryDatabase = new ScriptLibraryDatabase(this); #endif PopulateTables(); } #endregion #region Initialization private void PopulateTables() { // primitive types (prefixed by '@' to prevent ambiguities with identifiers, e.g. i'Array'): types.Add("@" + QualifiedName.Integer.Name.Value, DTypeDesc.IntegerTypeDesc); types.Add("@" + QualifiedName.Boolean.Name.Value, DTypeDesc.BooleanTypeDesc); types.Add("@" + QualifiedName.LongInteger.Name.Value, DTypeDesc.LongIntegerTypeDesc); types.Add("@" + QualifiedName.Double.Name.Value, DTypeDesc.DoubleTypeDesc); types.Add("@" + QualifiedName.String.Name.Value, DTypeDesc.StringTypeDesc); types.Add("@" + QualifiedName.Resource.Name.Value, DTypeDesc.ResourceTypeDesc); types.Add("@" + QualifiedName.Array.Name.Value, DTypeDesc.ArrayTypeDesc); types.Add("@" + QualifiedName.Object.Name.Value, DTypeDesc.ObjectTypeDesc); // types implemented in Core Func addType = (x) => { var typedesc = DTypeDesc.Create(x); types.Add(x.Name, typedesc); return typedesc; }; addType(typeof(Library.stdClass)); addType(typeof(Library.__PHP_Incomplete_Class)); addType(typeof(Library.EventClass<>)); addType(typeof(Library.SPL.Countable)); addType(typeof(Library.SPL.ArrayAccess)); addType(typeof(Library.SPL.SplFixedArray)); addType(typeof(Library.SPL.ArrayObject)); addType(typeof(Library.SPL.Serializable)); addType(typeof(Library.SPL.SplObjectStorage)); addType(typeof(Library.SPL.SplObserver)); addType(typeof(Library.SPL.SplSubject)); addType(typeof(Library.SPL.Closure)); // Reflection: AddExportMethod(addType(typeof(Library.SPL.Reflector))); addType(typeof(Library.SPL.Reflection)); addType(typeof(Library.SPL.ReflectionClass)); addType(typeof(Library.SPL.ReflectionFunctionAbstract)); addType(typeof(Library.SPL.ReflectionFunction)); addType(typeof(Library.SPL.ReflectionMethod)); addType(typeof(Library.SPL.ReflectionProperty)); addType(typeof(Library.SPL.ReflectionException)); // Iterators: addType(typeof(Library.SPL.Traversable)); addType(typeof(Library.SPL.Iterator)); addType(typeof(Library.SPL.IteratorAggregate)); addType(typeof(Library.SPL.SeekableIterator)); addType(typeof(Library.SPL.OuterIterator)); addType(typeof(Library.SPL.RecursiveIterator)); addType(typeof(Library.SPL.ArrayIterator)); addType(typeof(Library.SPL.EmptyIterator)); addType(typeof(Library.SPL.IteratorIterator)); addType(typeof(Library.SPL.AppendIterator)); addType(typeof(Library.SPL.FilterIterator)); addType(typeof(Library.SPL.RecursiveArrayIterator)); addType(typeof(Library.SPL.RecursiveIteratorIterator)); // Exception: addType(typeof(Library.SPL.Exception)); addType(typeof(Library.SPL.RuntimeException)); addType(typeof(Library.SPL.ErrorException)); addType(typeof(Library.SPL.LogicException)); addType(typeof(Library.SPL.InvalidArgumentException)); addType(typeof(Library.SPL.OutOfRangeException)); addType(typeof(Library.SPL.BadFunctionCallException)); addType(typeof(Library.SPL.BadMethodCallException)); addType(typeof(Library.SPL.LengthException)); addType(typeof(Library.SPL.RangeException)); addType(typeof(Library.SPL.OutOfBoundsException)); addType(typeof(Library.SPL.OverflowException)); addType(typeof(Library.SPL.UnderflowException)); addType(typeof(Library.SPL.UnexpectedValueException)); addType(typeof(Library.SPL.DomainException)); // primitive constants constants.Add("TRUE", GlobalConstant.True.ConstantDesc, true); constants.Add("FALSE", GlobalConstant.False.ConstantDesc, true); constants.Add("NULL", GlobalConstant.Null.ConstantDesc, true); // the constants are same for all platforms (Phalanger use Int32 for integers in PHP): constants.Add("PHP_INT_SIZE", GlobalConstant.PhpIntSize.ConstantDesc, false); constants.Add("PHP_INT_MAX", GlobalConstant.PhpIntMax.ConstantDesc, false); } #region HACK HACK HACK !!! /// /// We have to inject export method into interface, since it cannot be written in C# /// (abstract public static method with implementation in an interface). It could be declared in pure IL, but it would be ugly. /// /// corresponding to . private void AddExportMethod(DTypeDesc/*!*/typedesc) { Debug.Assert(typedesc != null); Debug.Assert(typedesc.RealType == typeof(Library.SPL.Reflector)); // public static object export( ScriptContext context ){ return null; } AddMethodToType(typedesc, PhpMemberAttributes.Public | PhpMemberAttributes.Static | PhpMemberAttributes.Abstract, "export", null); } #endregion internal void LoadModuleEntries(DModule/*!*/ module) { module.Reflect(!lazyFullReflection, types, functions, constants); } #endregion #region Libraries public List/*!*/ GetLoadedAssemblies() { return assemblyLoader.GetLoadedAssemblies(); } public IEnumerable/*!*/ GetLoadedLibraries() { foreach (PhpLibraryAssembly library in assemblyLoader.GetLoadedAssemblies()) yield return library; } public IEnumerable/*!*/ GetLoadedExtensions() { //if (assemblyLoader.ReflectionOnly) // throw new InvalidOperationException("Cannot retrieve list of extensions loaded for reflection only"); foreach (PhpLibraryAssembly library in assemblyLoader.GetLoadedAssemblies()) { foreach (string name in library.ImplementedExtensions) yield return name; } } /// /// Finds a library among currently loaded ones that implements an extension with a specified name. /// /// The name of the extension to look for. /// The library descriptor. /// Not thread-safe. Not available at compilation domain. public PhpLibraryDescriptor/*!*/ GetExtensionImplementor(string name) { if (assemblyLoader.ReflectionOnly) throw new InvalidOperationException("Cannot retrieve list of extensions loaded for reflection only"); foreach (PhpLibraryAssembly library in assemblyLoader.GetLoadedAssemblies()) { if (CollectionUtils.ContainsString(library.ImplementedExtensions, name, true)) return library.Descriptor; } return null; } #endregion #region Helpers public DRoutine GetFunction(QualifiedName qualifiedName, ref string/*!*/ fullName) { if (fullName == null) fullName = qualifiedName.ToString(); DRoutineDesc desc; return (functions.TryGetValue(fullName, out desc)) ? desc.Routine : null; } public DType GetType(QualifiedName qualifiedName, ref string/*!*/ fullName) { if (fullName == null) fullName = qualifiedName.ToString(); DTypeDesc desc; return (types.TryGetValue(fullName, out desc)) ? desc.Type : null; } public GlobalConstant GetConstant(QualifiedName qualifiedName, ref string/*!*/ fullName) { if (fullName == null) fullName = qualifiedName.ToString(); DConstantDesc desc; return (constants.TryGetValue(fullName, out desc)) ? desc.GlobalConstant : null; } /// /// Declares a PHP type globally. Replaces any previous declaration. /// To be called from the compiled scripts before library loading; libraries should check for conflicts. /// [Emitted] public void DeclareType(DTypeDesc/*!*/ typeDesc, string/*!*/ fullName) { types[fullName] = typeDesc; } /// /// Declares a PHP type globally. Replaces any previous declaration. /// To be called from the compiled scripts before library loading; libraries should check for conflicts. /// [Emitted] public void DeclareType(RuntimeTypeHandle/*!*/ typeHandle, string/*!*/ fullName) { types[fullName] = DTypeDesc.Create(typeHandle); } /// /// Declares a PHP function globally. Replaces any previous declaration. /// To be called from the compiled scripts before library loading; libraries should check for conflicts. /// [Emitted] public void DeclareFunction(RoutineDelegate/*!*/ arglessStub, string/*!*/ fullName, PhpMemberAttributes memberAttributes, MethodInfo argfull) { var desc = new PhpRoutineDesc(memberAttributes, arglessStub, true); if (argfull != null) // only if we have the argfull new PurePhpFunction(desc, fullName, argfull); // writes desc.Member functions[fullName] = desc; } /// /// Declares a PHP constant globally. Replaces any previous declaration. /// To be called from the compiled scripts before library loading; libraries should check for conflicts. /// [Emitted] public void DeclareConstant(string/*!*/ fullName, object value) { constants[fullName, false] = new DConstantDesc(UnknownModule.RuntimeModule, PhpMemberAttributes.None, value); } /// /// Checkes whether a type is transient. /// public bool IsTransientRealType(Type/*!*/ realType) { return transientAssemblyBuilder.IsTransientRealType(realType); } /// /// Build the delegate checking if the given script specified by its FullPath exists on available locations. /// /// Function determinig the given script existance or null if no script can be included with current configuration. internal Predicate BuildFileExistsDelegate() { if (this.fileExists == null) { RequestContext context = RequestContext.CurrentContext; Predicate file_exists = null; // 1. ScriptLibrary database var database = ScriptLibraryDatabase; if (database != null && database.Count > 0) file_exists = file_exists.OrElse((path) => database.ContainsScript(path)); // file_exists can really be null if (context != null) { // on web, check following locations too: // 2. bin/WebPages.dll var msas = context.GetPrecompiledAssemblies(); file_exists = file_exists.OrElse((path) => { foreach (var msa in msas) if (msa.ScriptExists(path)) return true; // path was not found in any msa return false; }); } else { // on non-web application, only script library should be checked } if (Configuration.IsBuildTime || !Configuration.Application.Compiler.OnlyPrecompiledCode) { // 3. file system file_exists = file_exists.OrElse((path) => path.FileExists); } // remember in ApplicationContext this.fileExists = file_exists; } return this.fileExists; } /// /// Add at runtime a method to a type /// /// Type to modify /// New method attributes /// Method name /// Method body /// Used by PDO_SQLITE public void AddMethodToType(DTypeDesc typedesc, PhpMemberAttributes attributes, string func_name, Func callback) { Debug.Assert(typedesc != null); var name = new Name(func_name); var method_desc = new PhpRoutineDesc(typedesc, attributes); if (!typedesc.Methods.ContainsKey(name)) { typedesc.Methods.Add(name, method_desc); // assign member: if (method_desc.Member == null) { Func dummyArgFullCallback = DummyArgFull; PhpMethod method = new PhpMethod(name, (PhpRoutineDesc)method_desc, dummyArgFullCallback.Method, (callback != null) ? callback.Method : null); method.WriteUp(PhpRoutineSignature.FromArgfullInfo(method, dummyArgFullCallback.Method)); method_desc.Member = method; } } } /// /// Add at runtime a constant to a type /// /// Type to modify /// New const attributes /// Const name /// Const value /// Used by PDO_MYSQL public void AddConstantToType(DTypeDesc typedesc, PhpMemberAttributes attributes, string const_name, object value) { Debug.Assert(typedesc != null); VariableName name = new VariableName(const_name); DConstantDesc const_desc = new DConstantDesc(typedesc, attributes, value); if (!typedesc.Constants.ContainsKey(name)) { typedesc.Constants.Add(name, const_desc); } } [NeedsArgless] private static object DummyArgFull(ScriptContext context) { Debug.Fail("This function should not be called thru argfull!"); return null; } #endregion } #region AssemblyLoader public sealed partial class AssemblyLoader { /// /// The owning AC. /// private readonly ApplicationContext/*!*/ applicationContext; public bool ReflectionOnly { get { return reflectionOnly; } } private readonly bool reflectionOnly; public bool ClrReflectionOnly { get { return clrReflectionOnly; } } private readonly bool clrReflectionOnly; /// /// Loaded assemblies. Contains all instances loaded by the loader. Synchronized. /// private readonly Dictionary/*!!*/ loadedAssemblies = new Dictionary(); internal AssemblyLoader(ApplicationContext/*!*/ applicationContext, bool reflectionOnly) { this.applicationContext = applicationContext; this.reflectionOnly = reflectionOnly; // not supported yet: this.clrReflectionOnly = false; } internal Assembly LoadRealAssembly(string/*!*/ target) { #if SILVERLIGHT return Assembly.Load(target); #else return (clrReflectionOnly) ? Assembly.ReflectionOnlyLoad(target) : Assembly.Load(target); #endif } internal Assembly LoadRealAssemblyFrom(string/*!*/ target) { #if SILVERLIGHT return Assembly.LoadFrom(target); #else return (clrReflectionOnly) ? Assembly.ReflectionOnlyLoadFrom(target) : Assembly.LoadFrom(target); #endif } public List GetLoadedAssemblies() where T : DAssembly { lock (this) { List result = new List(loadedAssemblies.Count); foreach (DAssembly loaded_assembly in loadedAssemblies.Values) { T assembly = loaded_assembly as T; if (assembly != null) result.Add(assembly); } return result; } } /// /// Loads a library assembly given its name and configuration node. /// /// Long assembly name (see ) or a null reference. /// Assembly file absolute URI or a null reference. /// Configuration node describing the assembly to load (or a null reference). /// An error occured while loading the library. public DAssembly/*!*/ Load(string assemblyName, Uri assemblyUrl, LibraryConfigStore config) { if (assemblyName == null && assemblyUrl == null) throw new ArgumentNullException("assemblyName"); if (assemblyUrl != null && !assemblyUrl.IsAbsoluteUri) throw new ArgumentException("Absolute URL expected", "assemblyUrl"); string target = null; try { if (assemblyName != null) { // load assembly by full name: target = assemblyName; return Load(LoadRealAssembly(target), config); } else { // load by URI: target = HttpUtility.UrlDecode(assemblyUrl.AbsoluteUri); return Load(LoadRealAssemblyFrom(target), config); } } catch (Exception e) { throw new ConfigurationErrorsException (CoreResources.GetString("library_assembly_loading_failed", target) + " " + e.Message, e); } } public DAssembly/*!*/ Load(Assembly/*!*/ realAssembly, LibraryConfigStore config) { Debug.Assert(realAssembly != null); DAssembly assembly; lock (this) { if (loadedAssemblies.TryGetValue(realAssembly, out assembly)) return assembly; assembly = DAssembly.CreateNoLock(applicationContext, realAssembly, config); // load the members contained in the assembly to the global tables: applicationContext.LoadModuleEntries(assembly.ExportModule); // add the assembly into loaded assemblies list now, so if LoadModuleEntries throws, assembly is not skipped within the next request! loadedAssemblies.Add(realAssembly, assembly); } if (!reflectionOnly) assembly.LoadCompileTimeReferencedAssemblies(this); return assembly; } } #endregion } ================================================ FILE: Source/Core/AssemblyInfo.cs ================================================ /* Copyright (c) 2006- DEVSENSE Copyright (c) 2005-2006 Tomas Matousek, Ladislav Prosek, Vaclav Novak, Pavel Novak, Jan Benda and Martin Maly. The use and distribution terms for this software are contained in the file named License.txt, which can be found in the root of the Phalanger distribution. By using this software in any fashion, you are agreeing to be bound by the terms of this license. You must not remove this notice from this software. */ using System.Reflection; using System.Security; using System.Runtime.CompilerServices; using System; #if !SILVERLIGHT [assembly: AssemblyTitle("Phalanger Core")] [assembly: AssemblyDescription("Phalanger Core Functionality")] //[assembly: AllowPartiallyTrustedCallers] #else [assembly: AssemblyTitle("Phalanger Core (Silverlight)")] [assembly: AssemblyDescription("Phalanger Core Functionality (Silverlight)")] #endif //[assembly: InternalsVisibleTo("PhpNetClasslibrary, PublicKey=0024000004800000940000000602000000240000525341310004000001000100611b1c313d77d51b5ac4d5b309e8712919634a716ae826dd133e722fe5e4f10012a8b96c40b7098d669ac5f78581b83cfa412d1a436a65450fac212d0d2dca824f8b1ab51b98af6d44d14ffd9a7aacd21e23557971564886df047070ca34d51869f3eddfb343739ee014e1b117772885fbc0758232461c5db7c659ca98b981a9")] [assembly: InternalsVisibleTo("PhpNet.Core.CodeDom, PublicKey=0024000004800000940000000602000000240000525341310004000001000100e3c182f57d3158a916b477e7fbdb05d2733bf65c53e5ad976bd1af240211998dd8ffb116d73e2d2059909f1578a4031b3a33c0dc892d22834960f413ca1ebbe0cfe631c84d4ba26cb5f44f4fd8785a08260d44600fa6b6fddd8a4ace4d7d86a9f5d7884539b343973d8b4ac305ccffda775c493326aee5284e8b963b297a7eb9")] [assembly: InternalsVisibleTo("PhpNet.Core.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100cfbcc1fd851a8a7bdbea1fcd2a974e9b30d66e78bd559ee4b6601165b95bf88fa560523627862acffc0480b1ed91ee84220e76473a3f93e394fb3f452dea4928b915f3f994d26a5863956f1ccf5f772176a70371cac2a9ace9dfc756cc4033ef192b880bac533ee800ccdea929c5d51dbfc7e5003f23753916438f3dd6d7889d")] [assembly: InternalsVisibleTo("Phalanger.LanguageService, PublicKey=0024000004800000940000000602000000240000525341310004000001000100b74f6114dcb75b60485b38820a516d1592ba89587f8449feac300570596bddac07226721e06178a9d2f8fbf0887bde659421378186cf0bfa31908b8f1965cc2cebeba22c9b232fb6cf5183eb12588bbdd61f0df0b390352f8be981f950642fedb8ad7cb241808f233cecb8ebaa2eb45b657744e95200c51ec39b686c66ad2eb6")] [assembly: InternalsVisibleTo("ControlFlow, PublicKey=00240000048000009400000006020000002400005253413100040000010001007f76493bf62c3a11fc4aedde33c9767dc38c5300dd9c3e7df13a766f4a0abc85fdee440584ba1d122cc9a0d220a78dd3532b4d7e4a4365d5347d183fc9bceacdc18336c66bb71b5f0a02ede53a080136f39f44482c35a4f96c8dece4a9953c4ec7234e6609d57754c1069efcd96f1c3e32be0cb8f3a97f48a426472e5e0c02ba")] [assembly: InternalsVisibleTo("ControlFlow.Tests, PublicKey=00240000048000009400000006020000002400005253413100040000010001003d5731df28b262d8074a2f2b55dcf9a636fc1f2d3728dcad1f79f62d6f1bbccf2e3c958db6d2fe63091addd056ffb2bed42f585b8e1b15e2d86d6514946bd97a9e52e43ac6c93282e68e6253e3491fd300f07d817b523bd772697fd40e1ed488cf7808724dfaacb8bfead864a084a62ed13a367ef066d69649e5a427ea8d49be")] ================================================ FILE: Source/Core/Attributes.cs ================================================ /* Copyright (c) 2004-2006 Tomas Matousek and Ladislav Prosek. The use and distribution terms for this software are contained in the file named License.txt, which can be found in the root of the Phalanger distribution. By using this software in any fashion, you are agreeing to be bound by the terms of this license. You must not remove this notice from this software. */ using System; using System.Collections; using System.Diagnostics; using PHP.Core.Reflection; using System.Collections.Generic; using System.Reflection.Emit; using System.Reflection; using System.Linq; using PHP.Core.Emit; #if SILVERLIGHT using PHP.CoreCLR; #endif namespace PHP.Core { #region Assemblies [Serializable] public abstract class DAssemblyAttribute : Attribute { internal static DAssemblyAttribute Reflect(Assembly/*!*/ assembly) { #if !SILVERLIGHT Debug.Assert(!assembly.ReflectionOnly); #endif object[] attrs = assembly.GetCustomAttributes(typeof(DAssemblyAttribute), false); return (attrs.Length == 1) ? (DAssemblyAttribute)attrs[0] : null; } } [Serializable] public abstract class PhpAssemblyAttribute : DAssemblyAttribute { } /// /// Identifies PHP library assembly or extension. /// [Serializable] [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = false, Inherited = false)] public class PhpLibraryAttribute : DAssemblyAttribute { /// /// Name of the type describing the assembly. /// Either a name of the type in the declaring assembly, a fully qualified name containing an assembly name /// or a null reference if a default descriptor can be used. /// public Type Descriptor { get { return descriptor; } } private readonly Type descriptor; public bool IsPure { get { return isPure; } } private readonly bool isPure; public bool ContainsDynamicStubs { get { return containsDynamicStubs; } } private readonly bool containsDynamicStubs; public string/*!*/ Name { get { return name; } } private readonly string/*!*/ name; public string[]/*!*/ ImplementsExtensions { get { return implementsExtensions; } } private readonly string[]/*!*/ implementsExtensions; /// /// Used by hand-written libraries in PHP. /// /// The type derived from PhpLibraryDescriptor class. Can be null to use default implementation. /// The human readable name of the extension. /// List of implemented extensions ImplementsExtensions is an empty array. Extensions using /// this attribute does not populate any list of implemented PHP extensions. public PhpLibraryAttribute(Type descriptor, string/*!*/ name) : this(descriptor, name, ArrayUtils.EmptyStrings, false, false) { } /// /// Used by hand-written libraries. /// public PhpLibraryAttribute(Type descriptor, string/*!*/ name, string[]/*!*/implementsExtensions) : this(descriptor, name, implementsExtensions, false, false) { } /// /// Used by hand-written libraries. /// public PhpLibraryAttribute(Type descriptor, string/*!*/ name, string[]/*!*/implementsExtensions, bool isPure, bool containsDynamicStubs) { // descriptor can be null, default descriptor is used then, needed at least for the Extension PHP project //if (descriptor == null) // throw new ArgumentNullException("descriptorName"); if (descriptor != null && !typeof(PhpLibraryDescriptor).IsAssignableFrom(descriptor)) throw new ArgumentNullException("descriptor", "The type must be derived from PHP.Core.PhpLibraryDescriptor class."); if (name == null) throw new ArgumentNullException("name"); if (implementsExtensions == null) throw new ArgumentNullException("implementsExtensions"); this.descriptor = descriptor; this.isPure = isPure; this.containsDynamicStubs = containsDynamicStubs; this.name = name; this.implementsExtensions = implementsExtensions; } /* * TODO: Not needed??? * public static PhpLibraryAttribute/*!* / Reflect(CustomAttributeData/*!* / data) { if (data == null) throw new ArgumentNullException("data"); switch (data.ConstructorArguments.Count) { case 2: return new PhpLibraryAttribute( (Type)data.ConstructorArguments[0].Value, (string)data.ConstructorArguments[1].Value); case 3: return new PhpLibraryAttribute( (Type)data.ConstructorArguments[0].Value, (string)data.ConstructorArguments[1].Value, (bool)data.ConstructorArguments[2].Value, (bool)data.ConstructorArguments[3].Value); } throw new ArgumentException(); }*/ } /// /// Identifies PHP extension written in PHP pure mode. /// It has only PHP literals as parameters and it has dynamic stubs contained already. /// [Serializable] [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = false, Inherited = false)] public class PhpExtensionAttribute : PhpLibraryAttribute { public PhpExtensionAttribute(string/*!*/name) :base(null, name, ArrayUtils.EmptyStrings, false, true) { } } /// /// Marks Phalanger compiled PHP script assemblies. /// [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = false, Inherited = false)] public sealed class ScriptAssemblyAttribute : PhpAssemblyAttribute { /// /// Determines whether there are multiple scripts stored in the assembly. /// public bool IsMultiScript { get { return isMultiScript; } } private readonly bool isMultiScript; /// /// of a <Script> class in case of SingleScriptAssembly. /// public Type SSAScriptType { get { return ssaScriptType; } } private readonly Type ssaScriptType; public ScriptAssemblyAttribute(bool isMultiScript, Type ssaScriptType) { this.isMultiScript = isMultiScript; this.ssaScriptType = ssaScriptType; } internal new static ScriptAssemblyAttribute Reflect(Assembly/*!*/ assembly) { #if !SILVERLIGHT Debug.Assert(!assembly.ReflectionOnly); #endif object[] attrs = assembly.GetCustomAttributes(typeof(ScriptAssemblyAttribute), false); return (attrs.Length == 1) ? (ScriptAssemblyAttribute)attrs[0] : null; } } /// /// Marks Phalanger compiled pure assemblies. /// [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = false, Inherited = false)] public sealed class PurePhpAssemblyAttribute : PhpAssemblyAttribute { public string[]/*!*/ ReferencedAssemblies { get { return referencedAssemblies; } } private string[]/*!*/ referencedAssemblies; public PurePhpAssemblyAttribute(string[]/*!*/ referencedAssemblies) { this.referencedAssemblies = referencedAssemblies; } /* TODO: Not needed? public static PurePhpAssemblyAttribute/*!* / Reflect(CustomAttributeData/*!* / data) { if (data == null) throw new ArgumentNullException("data"); switch (data.ConstructorArguments.Count) { case 1: return new PurePhpAssemblyAttribute((string[])data.ConstructorArguments[0].Value); } throw new ArgumentException(); }*/ internal new static PurePhpAssemblyAttribute Reflect(Assembly/*!*/ assembly) { #if !SILVERLIGHT Debug.Assert(!assembly.ReflectionOnly); #endif object[] attrs = assembly.GetCustomAttributes(typeof(PurePhpAssemblyAttribute), false); return (attrs.Length == 1) ? (PurePhpAssemblyAttribute)attrs[0] : null; } } #endregion #region Language /// /// Marks types of the Class Library which should be viewed as PHP classes or interfaces. /// [AttributeUsage(AttributeTargets.Class | AttributeTargets.Interface, AllowMultiple = false, Inherited = false)] public sealed class ImplementsTypeAttribute : Attribute { /// /// If not null, defines the PHP type name instead of the reflected name. CLR notation of namespaces. /// public readonly string PHPTypeName; /// /// Initialized new instance of specifying that /// the type is visible in PHP code and the type is named using the reflected . /// public ImplementsTypeAttribute() { } /// /// Initialized new instance of with PHP type name specified. /// /// If not null, defines the PHP type name instead of the reflected name. Uses CLR notation of namespaces. /// This overload is only valid within class library types. public ImplementsTypeAttribute(string PHPTypeName) { Debug.Assert(!string.IsNullOrWhiteSpace(PHPTypeName)); Debug.Assert(!PHPTypeName.Contains(QualifiedName.Separator)); this.PHPTypeName = PHPTypeName; } internal static ImplementsTypeAttribute Reflect(Type/*!*/type) { Debug.Assert(type != null); var attrs = type.GetCustomAttributes(typeof(ImplementsTypeAttribute), false); return (attrs != null && attrs.Length == 1) ? (ImplementsTypeAttribute)attrs[0] : null; } } /// /// An attibute storing PHP formal argument type hints. /// [AttributeUsage(AttributeTargets.Parameter | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] public sealed class DTypeSpecAttribute : Attribute { internal DTypeSpec TypeSpec { get { return typeSpec; } } private DTypeSpec typeSpec; public DTypeSpecAttribute(int data0, int data1) { typeSpec = new DTypeSpec(new int[] { data0, data1 }); } public DTypeSpecAttribute(int[]/*!*/ data) { typeSpec = new DTypeSpec(data); } public DTypeSpecAttribute(int data0, int data1, byte[]/*!*/ strings) { typeSpec = new DTypeSpec(new int[] { data0, data1 }, strings); } public DTypeSpecAttribute(int[]/*!*/ data, byte[]/*!*/ strings) { typeSpec = new DTypeSpec(data, strings); } internal static DTypeSpecAttribute Reflect(ICustomAttributeProvider/*!*/ parameterInfo) { object[] attrs = parameterInfo.GetCustomAttributes(typeof(DTypeSpecAttribute), false); return (attrs.Length == 1) ? (DTypeSpecAttribute)attrs[0] : null; } } [AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = false)] public sealed class RoutineAttribute : Attribute { private RoutineProperties properties; public RoutineAttribute(RoutineProperties properties) { this.properties = properties; } public RoutineProperties Properties { get { return properties; } } } /// /// Marks namespace-private PHP types and functions. /// /// Attribute is used by . [AttributeUsage(AttributeTargets.Class | AttributeTargets.Interface | AttributeTargets.Method, AllowMultiple = false, Inherited = false)] public sealed class PhpNamespacePrivateAttribute : Attribute { } /// /// Marks CLR type representing a PHP trait. /// /// Attribute is used by . [AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = false)] public sealed class PhpTraitAttribute : Attribute { } /// /// CLI does not allow static final methods. If a static method is declared as /// final, it is marked with this attribute. /// [AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = false)] public sealed class PhpFinalAttribute : Attribute { } /// /// CLI does not allow static abstract methods. If a static method is declared as /// abstract, it is marked with this attribute. /// [AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = false)] public sealed class PhpAbstractAttribute : Attribute { } /// /// Class field that have an init value is marked with this attribute. /// /// Attribute is used by . [AttributeUsage(AttributeTargets.Field, AllowMultiple = false, Inherited = false)] public sealed class PhpHasInitValueAttribute : Attribute { } /// /// Interface method marked by this attribute can be implemented without adhering to its return type. /// /// /// An interface method returning by reference (&) that is decorated by this attribute /// can be implemented by a method that does not return by reference. /// Attribute is used by . /// [AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = false)] public sealed class AllowReturnValueOverrideAttribute : Attribute { } /// /// Interface method marked by this attribute can be implemented without adhering to its parameters. /// /// Attribute is used by . [AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = false)] public sealed class AllowParametersOverrideAttribute : Attribute { } /// /// PHP allows increasing visibility of fields that are declared as protected /// in ancestor class. A class that increases the visibility declares no field /// but is marked with that attribute. /// /// Attribute is used by . [AttributeUsage(AttributeTargets.Field, AllowMultiple = false, Inherited = false)] public sealed class PhpPublicFieldAttribute : Attribute { private string fieldName; private bool isStatic; private bool hasInitValue; public PhpPublicFieldAttribute(string fieldName, bool isStatic, bool hasInitValue) { this.fieldName = fieldName; this.isStatic = isStatic; this.hasInitValue = hasInitValue; } public string FieldName { get { return fieldName; } } public bool IsStatic { get { return isStatic; } } public bool HasInitValue { get { return hasInitValue; } } } public abstract class PseudoCustomAttribute : Attribute { } [AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Class | AttributeTargets.Interface | AttributeTargets.Constructor | AttributeTargets.Method | AttributeTargets.Field | AttributeTargets.Property, AllowMultiple = false, Inherited = false)] public sealed class ExportAttribute : PseudoCustomAttribute { internal static readonly ExportAttribute/*!*/ Default = new ExportAttribute(); public ExportAttribute() { } } [AttributeUsage(AttributeTargets.Field, AllowMultiple = false, Inherited = false)] public sealed class AppStaticAttribute : PseudoCustomAttribute { public AppStaticAttribute() { } } #endregion #region Class Library and Extensions /// /// Options of the function implementation. /// [Flags] public enum FunctionImplOptions : ushort { /// /// No options defined. /// None = 0, /// /// of declared variables will be passed to the first argument. /// NeedsVariables = 1, /// /// Whether the function accesses currently executed PHP function arguments. /// NeedsFunctionArguments = 2, /// /// Whether the function needs to access instance of the object calling the function ($this reference) /// NeedsThisReference = 4, ///// ///// Whether the function is special for compiler. Setting this flag implies changes in compiler so ///// only compiler writers should set it. ///// //Special = 8, /// /// Function is not supported. /// NotSupported = 16, /// /// Function is internal. /// Internal = 32, /// /// Captures eval to the current . /// The captured values has to be reset immediately before the method returns. /// CaptureEvalInfo = 64, /// /// Whether the function uses the current naming context. /// NeedsNamingContext = 128, /// /// Needs DTypeDesc class context of the caller. /// NeedsClassContext = 256, /// /// Needs DTypeDesc class context of the late static binding. /// NeedsLateStaticBind = 512, } /// /// Marks static methods of the Class Library which implements PHP functions. /// [AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = false)] public sealed class ImplementsFunctionAttribute : Attribute { /// /// Creates an instance of the attribute. /// /// The name of the PHP function implemented by marked method. public ImplementsFunctionAttribute(string name) : this(name, FunctionImplOptions.None) { } /// /// Creates an instance of the attribute. /// /// The name of the PHP function implemented by marked method. /// Options. public ImplementsFunctionAttribute(string name, FunctionImplOptions options) { this.name = name; this.options = options; } /// /// The name of the PHP function. /// public string Name { get { return name; } } private string name; /// /// Options. /// public FunctionImplOptions Options { get { return options; } } private FunctionImplOptions options; internal static ImplementsFunctionAttribute Reflect(MethodBase/*!*/ method) { object[] attributes = method.GetCustomAttributes(Emit.Types.ImplementsFunctionAttribute, false); return (attributes.Length == 1) ? (ImplementsFunctionAttribute)attributes[0] : null; } /// /// Reflects an assembly, but also supports a case where Phalanger is reflecting /// Silverlight version of the assembly (and so the type of attribute is different) /// /// /// /// internal static ImplementsFunctionAttribute ReflectDynamic(Type/*!*/ attrType, MethodBase/*!*/ method) { object[] attributes = method.GetCustomAttributes(attrType, false); if (attributes.Length == 1) { string name = (string)attrType.GetProperty("Name").GetValue(attributes[0], ArrayUtils.EmptyObjects); object options = attrType.GetProperty("Options").GetValue(attributes[0], ArrayUtils.EmptyObjects); int opt = System.Convert.ToInt32(options); return new ImplementsFunctionAttribute(name, (FunctionImplOptions)opt); } else return null; } } /// /// Marks class library function that the specified method is pure. Therefore it can be evaluated at the compilation time. /// [AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = false)] public sealed class PureFunctionAttribute : Attribute { /// /// True if special method must be called for compile-time evaluation. /// public bool CallSpecialMethod { get { return SpecialMethodType != null && SpecialMethodName != null; } } /// /// MethodInfo of the method to be used during the compile-time evaluation. /// public MethodInfo SpecialMethod { get { Debug.Assert(CallSpecialMethod); return SpecialMethodType.GetMethod(SpecialMethodName, BindingFlags.Static | BindingFlags.Public); } } /// /// Type containing special method to be called for compile-time evaluation. /// private Type SpecialMethodType { get; set; } /// /// Special method name to be called for compile-time evaluation. /// private string SpecialMethodName { get; set; } /// /// Creates an instance of the attribute. Used if the method can be called during the compile-time evaluation. /// public PureFunctionAttribute() : this(null, null) { } /// /// Creates an instance of the attribute. Used if another method must be called during the compile-time evaluation. /// /// Type containing special method to be called for compile-time evaluation. /// Special method name to be called for compile-time evaluation. public PureFunctionAttribute(Type specialMethodType, string specialMethodName) { this.SpecialMethodType = specialMethodType; this.SpecialMethodName = specialMethodName; } /// /// Reflect the given MethodBase to fund the PureFunctionAttribute. /// /// The method where to find PureFunctionAttribute. /// PureFunctionAttribute of the method or null if the attribute was not found. internal static PureFunctionAttribute Reflect(MethodBase/*!*/ method) { object[] attributes = method.GetCustomAttributes(typeof(PureFunctionAttribute), false); return (attributes.Length == 1) ? (PureFunctionAttribute)attributes[0] : null; } } /// /// Marks the pseudo-this parameter of a class library method. /// /// /// The method should be static and the parameter marked by this attribute should have the /// enclosing type. Use this attribute when the method must be callable both using an instance /// and statically (e.g. DOMDocument::load). /// [AttributeUsage(AttributeTargets.Parameter, AllowMultiple = false, Inherited = false)] public sealed class ThisAttribute : Attribute { public ThisAttribute() { } } /// /// Marks a nullable parameter of a class library method. /// /// /// When a parameter of a reference type is marked by this attribute, null is also a legal /// argument value. /// [AttributeUsage(AttributeTargets.Parameter, AllowMultiple = false, Inherited = false)] public sealed class NullableAttribute : Attribute { public NullableAttribute() { } } /// /// Marks methods of the Class Library which implement PHP methods. /// [AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = false)] public sealed class ImplementsMethodAttribute : Attribute { public ImplementsMethodAttribute() { } } /// /// Marks properties/methods of Class Library types which should be exposed to PHP. /// [AttributeUsage(AttributeTargets.Property | AttributeTargets.Method, AllowMultiple = false, Inherited = false)] public sealed class PhpVisibleAttribute : Attribute { public PhpVisibleAttribute() { } internal static PhpVisibleAttribute Reflect(MemberInfo/*!*/ info) { object[] attributes = info.GetCustomAttributes(typeof(PhpVisibleAttribute), false); return (attributes.Length == 1) ? (PhpVisibleAttribute)attributes[0] : null; } } /// /// Marks constants and items of enumerations in the Class Library which represent PHP constants. /// [AttributeUsage(AttributeTargets.Field, AllowMultiple = false, Inherited = false)] public sealed class ImplementsConstantAttribute : Attribute { /// /// Creates an instance of the attribute. /// /// The name of the PHP constant implemented by marked constant or enum item. public ImplementsConstantAttribute(string name) { this.name = name; this.caseInsensitive = false; } /// /// The name of the PHP constant. /// public string Name { get { return name; } } private string name; /// /// Whether the constant name is not case sensitive. /// public bool CaseInsensitive { get { return caseInsensitive; } set { caseInsensitive = value; } } private bool caseInsensitive; internal static ImplementsConstantAttribute Reflect(FieldInfo/*!*/ field) { object[] attributes = field.GetCustomAttributes(typeof(ImplementsConstantAttribute), false); return (attributes.Length == 1) ? (ImplementsConstantAttribute)attributes[0] : null; } } /// /// Marks classes in the Class Library which implements a part or entire PHP extension. /// /// /// Libraries which implements more than one extension should use the attribute /// to distinguish which types belongs to which extension. If the library implements a single extension /// it is not required to use the attribute. /// [AttributeUsage(AttributeTargets.Class | AttributeTargets.Enum | AttributeTargets.Interface, AllowMultiple = false, Inherited = false)] public sealed class ImplementsExtensionAttribute : Attribute { /// /// Creates an instance of the attribute. /// /// The name of the PHP extension. public ImplementsExtensionAttribute(string name) { this.name = name; } /// /// The name of the PHP extension. /// public string Name { get { return name; } } private string name; } /// /// Marks return values of methods implementing PHP functions which returns false on error /// but has other return type than or . /// /// /// Compiler takes care of converting a return value of a method into false if necessary. /// An attribute can be applied only on return values of type (-1 is converted to false) /// or of a reference type (null is converted to false). /// [AttributeUsage(AttributeTargets.ReturnValue, AllowMultiple = false, Inherited = false)] public sealed class CastToFalseAttribute : Attribute { public CastToFalseAttribute() { } /// /// Determine wheter the attribute is defined for given . /// /// to check for the attribute. /// True iff given has . internal static bool IsDefined(MethodInfo/*!*/ method) { return method.ReturnTypeCustomAttributes.IsDefined(typeof(CastToFalseAttribute), false); } } /// /// If a parameter or a return value is marked by this attribute compiler should /// generate deep-copy code before or after the method's call respectively. /// [AttributeUsage(AttributeTargets.Parameter | AttributeTargets.ReturnValue, AllowMultiple = false, Inherited = false)] public sealed class PhpDeepCopyAttribute : Attribute { } /// /// Marks arguments having by-value argument pass semantics and data of the value can be changed by a callee. /// [AttributeUsage(AttributeTargets.Parameter, AllowMultiple = false, Inherited = false)] public sealed class PhpRwAttribute : Attribute { internal static bool IsDefined(ParameterInfo/*!*/ param) { return param != null && param.IsDefined(typeof(PhpRwAttribute), false); } } /// /// Marks argless stubs in (dynamic) wrappers which consumes . /// [AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = false)] public sealed class NeedsVariablesAttribute : Attribute { } /// /// ExternalCallbackAttribute marks methods which are intended to be called by some PHP extension module. /// /// /// Informative only. Not used so far. /// [AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = false)] public sealed class ExternalCallbackAttribute : Attribute { /// /// Creates an instance of the attribute. /// /// The name the callback. public ExternalCallbackAttribute(string callbackName) { name = callbackName; } /// The name of the callback. public string Name { get { return name; } } /// The name of the callback. private string name; } #endregion #region Scripts /// /// An attribute associated with the persistent script type. /// [AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = false)] public sealed class ScriptAttribute : Attribute { /// /// A timestamp of the source file when the script builder is created. /// public DateTime SourceTimestamp { get { return new DateTime(sourceTimestamp, DateTimeKind.Utc); } } private readonly long sourceTimestamp; /// /// Source file relative path. /// public string/*!*/RelativePath { get { return relativePath; } } private readonly string/*!*/relativePath; /// /// Used in SSA/MSA (target web and dll). Contains info needed for compile-time/runtime reflection. /// /// A timestamp of the source file when the script builder is created. /// Source file relative path. public ScriptAttribute(long sourceTimestamp, string relativePath) { this.sourceTimestamp = sourceTimestamp; this.relativePath = relativePath; } /// /// Determine the [ScriptInfoAttribute] attribute of given script type. /// /// The script type to reflect from. /// Script attribute associated with the given type or null. internal static ScriptAttribute Reflect(Type/*!*/ type) { object[] attrs = type.GetCustomAttributes(typeof(ScriptAttribute), false); return (attrs.Length == 1) ? (ScriptAttribute)attrs[0] : null; } } /// /// An attribute associated with the persistent script type. /// [AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = false)] public sealed class ScriptIncludersAttribute : Attribute { /// /// Array of Scripts that statically include this script within current assembly. /// Script is represented as type token to the Script type resolved within current module. /// public int[]/*!*/ Includers { get { return includers ?? ArrayUtils.EmptyIntegers; } } private readonly int[] includers; /// /// Used in SSA/MSA (target web and dll). Contains info needed for compile-time/runtime reflection. /// /// /// Array of Scripts that statically include this script within current assembly. /// Script is represented as type token to the Script type. /// public ScriptIncludersAttribute(int[] includers) { this.includers = includers; } /// /// Determine the [ScriptIncludersAttribute] attribute of given script type. /// /// The script type to reflect from. /// Script attribute associated with the given type or null. internal static ScriptIncludersAttribute Reflect(Type/*!*/ type) { object[] attrs = type.GetCustomAttributes(typeof(ScriptIncludersAttribute), false); return (attrs.Length == 1) ? (ScriptIncludersAttribute)attrs[0] : null; } } /// /// An attribute associated with the persistent script type. /// [AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = false)] public sealed class ScriptIncludeesAttribute : Attribute { /// /// Array of statically included Scripts. /// Script is represented as type token to the Script type resolved within current module. /// public int[]/*!*/ Inclusions { get { return inclusions ?? ArrayUtils.EmptyIntegers; } } private readonly int[] inclusions; /// /// Get bit array with flags determining if static inclusion on specific index is included conditionally. /// public BitArray/*!*/InclusionsConditionalFlags { get { return new BitArray(inclusionsConditionalFlag ?? ArrayUtils.EmptyBytes); } } /// /// Bit array. Bit is set to 1 if inclusion on specified bit index is conditional. /// private readonly byte[] inclusionsConditionalFlag; /// /// Used in SSA/MSA (target web and dll). Contains info needed for compile-time/runtime reflection. /// /// /// Array of statically included Scripts. /// Script is represented as type token to the Script type. /// /// /// Array with bit flags determining if static inclusion on specific index is included conditionally. /// public ScriptIncludeesAttribute(int[] inclusions, byte[] inclusionsConditionalFlag) { this.inclusions = inclusions; this.inclusionsConditionalFlag = inclusionsConditionalFlag; } /// /// Convert array of bools into array of bytes. /// Note: BitArray cannot be used, missing method ToBytes. /// /// An array to convert. /// Bytes with particular bits set or null of array is null or empty. internal static byte[] ConvertBoolsToBits(bool[] array) { if (array == null || array.Length == 0) return null; // construct the bit array from given array int bytesCount = array.Length / 8; if ((array.Length % 8) != 0) bytesCount++; byte[] bits = new byte[bytesCount]; for (int i = 0; i < array.Length; ++i) if (array[i]) bits[i / 8] |= (byte)(1 << (i % 8)); return bits; } /// /// Determine the [ScriptIncludesAttribute] attribute of given script type. /// /// The script type to reflect from. /// Script attribute associated with the given type or null. internal static ScriptIncludeesAttribute Reflect(Type/*!*/ type) { object[] attrs = type.GetCustomAttributes(typeof(ScriptIncludeesAttribute), false); return (attrs.Length == 1) ? (ScriptIncludeesAttribute)attrs[0] : null; } } /// /// An attribute associated with the persistent script type. /// [AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = false)] public sealed class ScriptDeclaresAttribute : Attribute { /// /// Array of Types that are statically declared by this Script. /// Type is represented as type token to the Type resolved within current module. /// public int[]/*!*/ DeclaredTypes { get { return declaredTypes ?? ArrayUtils.EmptyIntegers; } } private readonly int[] declaredTypes; /// /// Used in SSA/MSA (target web and dll). Contains info needed for compile-time/runtime reflection. /// /// /// Array of Types that are statically declared by this Script. /// Type is represented as type token to the Type resolved within current module. /// public ScriptDeclaresAttribute(int[] declaredTypes) { this.declaredTypes = declaredTypes; } /// /// Determine the [ScriptIncludersAttribute] attribute of given script type. /// /// The script type to reflect from. /// Script attribute associated with the given type or null. internal static ScriptDeclaresAttribute Reflect(Type/*!*/ type) { object[] attrs = type.GetCustomAttributes(typeof(ScriptDeclaresAttribute), false); return (attrs.Length == 1) ? (ScriptDeclaresAttribute)attrs[0] : null; } } /// /// Stores information about scripts directly included by a module which is decorated by this attribute. /// [AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = false)] public sealed class IncludesAttribute : Attribute { /// /// Creates a new instance of the attribute with a specified source path and a conditionality flag. /// /// Relative path remainder. /// Relative path level. /// Whether the inclusion is conditional. /// True if the include is include_once or require_once. public IncludesAttribute(string relativeSourcePath, sbyte level, bool isConditional, bool once) { this.relativeSourceFile = new RelativePath(level, relativeSourcePath); this.isConditional = isConditional; this.once = once; } /// /// An included script's canonical source path relative to the application source root. /// public RelativePath RelativeSourceFile { get { return relativeSourceFile; } } private RelativePath relativeSourceFile; /// /// Whether the inclusion is conditional. /// public bool IsConditional { get { return isConditional; } } private bool isConditional; /// /// Whether the inclusion is include_once or require_once. /// public bool Once { get { return once; } } private bool once; } /// /// Associates a class with an eval id. /// [AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = false)] public class PhpEvalIdAttribute : Attribute { public PhpEvalIdAttribute(int id) { this.id = id; } internal static PhpEvalIdAttribute Reflect(Type/*!*/ type) { object[] attrs = type.GetCustomAttributes(typeof(PhpEvalIdAttribute), false); return (attrs.Length == 1) ? (PhpEvalIdAttribute)attrs[0] : null; } #if DEBUG public override string ToString() { //EvalInfo info = (EvalInfo)EvalCompilerManager.Default.GetEvalInfo(id); //return String.Format("PhpEvalId(id={4},parent={5},kind={0},line={2},column={3},file={1})", // info.Kind, // (info.File != null) ? "@\"" + info.File + "\"" : "null", // info.Line, // info.Column, // id, // info.ParentId); return "TODO"; } #endif /// /// Eval id. /// public int Id { get { return id; } } private int id; } #endregion #region Miscellaneous /// /// Specifies that a target field, property, or class defined in the configuration record /// is not displayd by PHP info. /// [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property | AttributeTargets.Class, AllowMultiple = false, Inherited = false)] public class NoPhpInfoAttribute : Attribute { } /// /// Used for marking Core members that are emitted to the user code. /// [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Method | AttributeTargets.Constructor | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] internal class EmittedAttribute : Attribute { } /// /// Attribute specifying that function should be called statically with valid PhpStack. Such a function needs function arguments, /// e.g. it calls func_num_args() or func_get_arg() inside. /// [AttributeUsage(AttributeTargets.Method | AttributeTargets.Constructor, AllowMultiple = false, Inherited = false)] public class NeedsArglessAttribute : Attribute { /// /// Determines if given method has [NeedsArgless] attribute set. /// /// The method to reflect from. /// True if the method is marked. internal static bool IsSet(MethodInfo/*!*/method) { object[] attrs; return (attrs = method.GetCustomAttributes(typeof(NeedsArglessAttribute), false)) != null && attrs.Length > 0; } } /// /// Attribute specifying that function contains usage of static (late static binding), /// runtime should pass type used to call a static method into script context, so it can be used by late static binding. /// [AttributeUsage(AttributeTargets.Method | AttributeTargets.Constructor, AllowMultiple = false, Inherited = false)] public class UsesLateStaticBindingAttribute : Attribute { /// /// Determines if given method has [UsesLateStaticBinding] attribute set. /// /// The method to reflect from. /// True if the method is marked. internal static bool IsSet(MethodInfo/*!*/method) { object[] attrs; return (attrs = method.GetCustomAttributes(typeof(UsesLateStaticBindingAttribute), false)) != null && attrs.Length > 0; } } #endregion } ================================================ FILE: Source/Core/Binders/Binder.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Runtime.CompilerServices; using PHP.Core; using PHP.Core.Emit; using PHP.Core.Reflection; using System.Threading; namespace PHP.Core.Binders { /// /// Manages run time binders. /// public static class Binder { #region BinderFlags /// /// Requested binder options. /// [Flags] public enum BinderFlags : int { None = 0, /// /// The return value is required. Object is expected as the return value type. /// ResultWanted = 1, /// /// PhpReference of the return value is expected. Return type must be PhpReference and the value must not be null. /// ResultAsPhpReferenceWanted = 2 | ResultWanted, } #endregion #region Fields /// /// Binders cache. Alows to share binders for the same operations. /// TODO: Slit different binders into different dictionaries. /// private static readonly Dictionary invokeMemberBinders = new Dictionary(); /// /// Get*Property* binders. /// TODO: Slit different binders into different dictionaries. /// private static readonly Dictionary/*!*/getMemberBinders = new Dictionary(); #endregion #region MethodCall, StaticMethodCall (same signature) /// /// Get the instance method call binder. /// /// The method name. It is null iff this is not known at compile time. /// The class context of the call site. It can be null or an instance of . /// If the class context is not constant, its is true. /// Type arguments count. /// Parameters count. /// CallSite return value type. /// An instance of requested binder. [Emitted] public static CallSiteBinder/*!*/MethodCall(string methodName, int genericParamsCount, int paramsCount, DTypeDesc classContext, Type/*!*/returnType) { // CallSite< Func< CallSite, object /*target instance*/, ScriptContext, {args}*/*method call arguments*/, (DTypeDesc)?/*class context, iff .IsUnknown*/, (object)?/*method name, iff ==null*/, > > PhpInvokeBinderKey key = new PhpInvokeBinderKey(methodName, genericParamsCount, paramsCount, classContext, returnType); lock (invokeMemberBinders) { PhpInvokeMemberBinder res; if (!invokeMemberBinders.TryGetValue(key.ToString(), out res)) { invokeMemberBinders[key.ToString()] = res = PhpBaseInvokeMemberBinder.Create(methodName, genericParamsCount, paramsCount, classContext, returnType); } return res; } } /// /// Get the static method call binder. /// /// The method name. It is null iff this is not known at compile time. /// The class context of the call site. It can be null or an instance of . /// If the class context is not constant, its is true. /// Type arguments count. /// Parameters count. /// CallSite return value type. /// An instance of requested binder. [Emitted] public static CallSiteBinder/*!*/StaticMethodCall(string methodName, int genericParamsCount, int paramsCount, DTypeDesc classContext, Type/*!*/returnType) { // CallSite< Func< CallSite, DTypeDesc /*target type*/, ScriptContext, {args}*/*method call arguments*/, DObject/*type*/, (DTypeDesc)?/*class context, iff .IsUnknown*/, (object)?/*method name, iff ==null*/, > > throw new NotImplementedException(); } #endregion #region GetProperty, StaticGetProperty [Emitted] public static CallSiteBinder/*!*/GetProperty(string fieldName, DTypeDesc classContext, bool issetSemantics, Type/*!*/returnType) { // the binder cache key string key = string.Format("{0}'{1}'{2}'{3}", fieldName ?? "$", (classContext != null) ? (classContext.GetHashCode().ToString()) : string.Empty, issetSemantics ? "1" : "0", returnType.FullName ); lock (getMemberBinders) { PhpGetMemberBinder binder; if (!getMemberBinders.TryGetValue(key, out binder)) getMemberBinders[key] = binder = new PhpGetMemberBinder(fieldName, classContext, issetSemantics, returnType); return binder; } throw new NotImplementedException(); } [Emitted] public static CallSiteBinder/*!*/StaticGetProperty(string fieldName, DTypeDesc classContext, bool issetSemantics, Type/*!*/returnType) { throw new NotImplementedException(); } #endregion } } ================================================ FILE: Source/Core/Binders/BinderHelper.cs ================================================ using System; using System.Collections.Generic; using System.Diagnostics; using System.Dynamic; using System.Linq; using System.Linq.Expressions; using System.Reflection; using System.Reflection.Emit; using System.Text; using PHP.Core.Emit; using PHP.Core.Reflection; namespace PHP.Core.Binders { internal static class BinderHelper { #region PhpException.Throw public static Expression/*!*/ ThrowError(string id) { return Expression.Call(Methods.PhpException.Throw, Expression.Constant(PhpError.Error), Expression.Constant(CoreResources.GetString(id))); } public static Expression/*!*/ ThrowError(string id, object arg) { return Expression.Call(Methods.PhpException.Throw, Expression.Constant(PhpError.Error), Expression.Constant(CoreResources.GetString(id, arg))); } public static Expression/*!*/ ThrowError(string id, object arg1, object arg2) { return Expression.Call(Methods.PhpException.Throw, Expression.Constant(PhpError.Error), Expression.Constant(CoreResources.GetString(id, arg1, arg2))); } public static Expression/*!*/ ThrowError(string id, object arg1, object arg2, object arg3) { return Expression.Call(Methods.PhpException.Throw, Expression.Constant(PhpError.Error), Expression.Constant(CoreResources.GetString(id, arg1, arg2, arg3))); } public static Expression/*!*/ ThrowWarning(string id) { return Expression.Call(Methods.PhpException.Throw, Expression.Constant(PhpError.Warning), Expression.Constant(CoreResources.GetString(id))); } public static Expression/*!*/ ThrowWarning(string id, object arg) { return Expression.Call(Methods.PhpException.Throw, Expression.Constant(PhpError.Warning), Expression.Constant(CoreResources.GetString(id, arg))); } public static Expression/*!*/ ThrowWarning(string id, object arg1, object arg2) { return Expression.Call(Methods.PhpException.Throw, Expression.Constant(PhpError.Warning), Expression.Constant(CoreResources.GetString(id, arg1, arg2))); } /// /// Generates Expression that throws a 'Protected method called' or 'Private method called' . /// /// The . /// The caller that was passed to method lookup or null /// if it should be determined by this method (by tracing the stack). /// /// This method is intended to be called after has returned /// while performing a method lookup. /// public static Expression/*!*/ ThrowVisibilityError(DRoutineDesc/*!*/ method, DTypeDesc/*!*/ callerContext) { if (method.IsProtected) { return ThrowError("protected_method_called", method.DeclaringType.MakeFullName(), method.MakeFullName(), callerContext == null ? String.Empty : callerContext.MakeFullName()); } else if (method.IsPrivate) { return ThrowError("private_method_called", method.DeclaringType.MakeFullName(), method.MakeFullName(), callerContext == null ? String.Empty : callerContext.MakeFullName()); } throw new NotImplementedException(); } public static Expression/*!*/ ThrowMissingArgument(int argIndex, string calleeName) { if (calleeName != null) return ThrowWarning("missing_argument_for", argIndex, calleeName); else return ThrowWarning("missing_argument", argIndex); } public static Expression/*!*/ ThrowMissingTypeArgument(int argIndex, string calleeName) { if (calleeName != null) return ThrowWarning("missing_type_argument_for", argIndex, calleeName); else return ThrowWarning("missing_type_argument", argIndex); } public static Expression/*!*/ ThrowArgumentNotPassedByRef(int argIndex, string calleeName) { if (calleeName != null) return ThrowWarning("argument_not_passed_byref_to", argIndex, calleeName); else return ThrowWarning("argument_not_passed_byref", argIndex); } #endregion #region (ClrObject, IClrValue) /// /// Builds that properly wraps given expression to return valid PHP type. /// It does not perform any conversion for PHP primitive types. Byte array is wrapped into and /// anything else is wrapped using method. /// /// Expression returning an object/value. /// returning valid PHP object. public static Expression/*!*/ClrObjectWrapDynamic(Expression/*!*/expression) { Debug.Assert(expression != null); var type = expression.Type; if (type.IsGenericParameter) type = Types.Object[0]; // PHP types as they are: if (PhpVariable.IsPrimitiveType(type) || /*Types.DObject[0].IsAssignableFrom(type) || */typeof(IPhpVariable).IsAssignableFrom(type)) return expression; // (byte[]) -> PhpBytes( ) // (byte[])null -> null if (type == typeof(byte[])) { var value = Expression.Variable(typeof(byte[])); return Expression.Block(Types.PhpBytes[0], new[] { value }, Expression.Condition( Expression.Equal(Expression.Assign(value, expression),Expression.Constant(null)), Expression.Constant(null, Types.PhpBytes[0]), Expression.New(Constructors.PhpBytes_ByteArray, value) )); } // from Emit/ClrOverloadBuilder.cs, ClrOverloadBuilder.EmitConvertToPhp: switch (Type.GetTypeCode(type)) { case TypeCode.Boolean: return Expression.Convert(expression, Types.Bool[0]); // coercion: case TypeCode.SByte: case TypeCode.Int16: case TypeCode.Byte: case TypeCode.UInt16: case TypeCode.Int32: return Expression.Convert(expression, Types.Int[0]); case TypeCode.Int64: case TypeCode.UInt32: return Expression.Convert(expression, Types.LongInt[0]); case TypeCode.UInt64: case TypeCode.Single: case TypeCode.Double: return Expression.Convert(expression, Types.Double[0]); case TypeCode.Char: return Expression.Call(Expression.Convert(expression, Types.Object[0]), Methods.Object_ToString); case TypeCode.DBNull: return Expression.Constant(null, Types.Object[0]); } // value type -> ClrValue // ref type -> ClrObject return Expression.Call(null, type == Types.Object[0] ? Methods.ClrObject_WrapDynamic : // expression can represent anything, check type in run time and wrap dynamically Methods.ClrObject_WrapRealObject, // expression is surely not PHP primitive type, DObject nor byte[], wrap into ClrObject or IClrValue Expression.Convert(expression, Types.Object[0])); } /// /// Unwraps or from or . /// /// Original target of binding operation. /// Expected of the operation. /// getting the real object wrapped into given target. public static Expression/*!*/ClrRealObject(DynamicMetaObject/*!*/target, Type/*!*/realType) { Debug.Assert(target != null); Debug.Assert(realType != null); var obj = target.Value as DObject; Debug.Assert(obj != null, "Not DObject!"); Debug.Assert(realType.IsAssignableFrom(obj.RealType), "Not compatible types!"); if (obj is ClrObject) { // ()((DObject)target).RealObject: // TODO: access ClrObject.realObject directly return Expression.Convert( Expression.Property(Expression.Convert(target.Expression, Types.DObject[0]), Properties.DObject_RealObject), realType); } else if (obj is IClrValue) // => obj is ClrValue { var ClrValue_Type = obj.GetType(); // ClrValue'1 var ClrValue_ValueField = ClrValue_Type.GetField("realValue"); // ClrValue'1.realValue // (T)((ClrValue)target).realValue: return Expression.Field(Expression.Convert(target.Expression, ClrValue_Type), ClrValue_ValueField); } else throw new NotImplementedException(); } #endregion #region PhpReference /// /// Ensures the expression returns . If not the expression is wrapped to a new instance of . /// /// The to be wrapped. /// Expression representing PhpReference. public static Expression/*!*/MakePhpReference(Expression/*!*/expression) { // PhpReference already: if (Types.PhpReference[0].IsAssignableFrom(expression.Type)) return expression; // void -> new PhpReference(): if (expression.Type == Types.Void) return Expression.New(Constructors.PhpReference_Void); // object -> PhpReference(object): return Expression.New(Constructors.PhpReference_Object, Expression.Convert(expression, Types.Object[0])); } #endregion public static Expression[]/*!*/ CombineArguments(Expression/*!*/ arg, Expression/*!*/[]/*!*/ args) { Expression[] arguments = new Expression[1 + args.Length]; arguments[0] = arg; for (int i = 0; i < args.Length; ++i) arguments[1 + i] = args[i]; return arguments; } public static DynamicMetaObject[]/*!*/ CombineArguments(DynamicMetaObject/*!*/ arg, DynamicMetaObject/*!*/[]/*!*/ args) { DynamicMetaObject[] arguments = new DynamicMetaObject[1 + args.Length]; arguments[0] = arg; for (int i = 0; i < args.Length; ++i) arguments[1 + i] = args[i]; return arguments; } public static BindingRestrictions GetSimpleInvokeRestrictions(DynamicMetaObject/*!*/ target, DynamicMetaObject[]/*!*/ args) { BindingRestrictions restrictions = BindingRestrictions.GetTypeRestriction(target.Expression, target.LimitType); foreach (var arg in args) { if (arg.RuntimeType != null) restrictions = restrictions.Merge(BindingRestrictions.GetTypeRestriction(arg.Expression, arg.LimitType)); else restrictions = restrictions.Merge(BindingRestrictions.GetInstanceRestriction(arg.Expression, null));//(MB) is it } return restrictions; } private static object AssertNotPhpReferenceMethod(object obj) { Debug.Assert(!(obj is PhpReference)); return obj; } public static Expression/*!*/ AssertNotPhpReference(Expression objEx) { #if DEBUG return Expression.Call(null, new Func(AssertNotPhpReferenceMethod).Method, objEx); #else return objEx; #endif } public static BindingRestrictions ValueTypeRestriction( this DynamicMetaObject target) { return (target.HasValue && target.Value == null) ? BindingRestrictions.GetInstanceRestriction(target.Expression, null) : BindingRestrictions.GetTypeRestriction(target.Expression, target.LimitType); } /// /// Create static that wraps call of given . The call is performed statically, method's overrides are not called. /// /// to be called statically. /// New representing static method stub. public static MethodInfo/*!*/WrapInstanceMethodCall(MethodInfo/*!*/mi) { Debug.Assert(mi != null); Debug.Assert(!mi.IsStatic, "'mi' must not be static!"); var parameters = mi.GetParameters(); // array of parameters type // Type[]{ , , ..., } var paramTypes = new Type[parameters.Length + 1]; // = new Type[]{ mi.DeclaringType }.Concat(parameters.Select(p => p.ParameterType)).ToArray(); paramTypes[0] = mi.DeclaringType; for (int i = 0; i < parameters.Length; i++) paramTypes[i + 1] = parameters[i].ParameterType; // create static dynamic method that calls given MethodInfo statically DynamicMethod stub = new DynamicMethod("<^>." + mi.Name, mi.ReturnType, paramTypes, mi.DeclaringType); ILEmitter il = new ILEmitter(stub); // return ( instance, arg_1, arg_2, ..., arg_n ): for (int i = 0; i <= parameters.Length; i++) il.Ldarg(i); il.Emit(OpCodes.Call, mi); il.Emit(OpCodes.Ret); // return stub; } /// /// Converts first #length elements from a given array of DynamicMetaObject to array of Expression /// /// Array of DynamicMetaObject to be converted to Expression[] /// Index of first argument that's going to be converted /// Count of arguments that are going to be converted /// Expression[] of values of DynamicMetaObject array public static Expression[]/*!*/ PackToExpressions(DynamicMetaObject/*!*/[]/*!*/ args, int startIndex, int length) { int top = startIndex + length; Expression[] arguments = new Expression[length]; for (int i = 0; i < length; ++i) arguments[i] = args[i + startIndex].Expression; return arguments; } public static Expression[]/*!*/ PackToExpressions(DynamicMetaObject/*!*/[]/*!*/ args) { return PackToExpressions(args, 0, args.Length); } } } ================================================ FILE: Source/Core/Binders/InteropBinder.cs ================================================ using System; using System.Collections.Generic; using System.Diagnostics; using System.Dynamic; using System.Linq; using System.Linq.Expressions; using System.Text; using PHP.Core.Emit; using PHP.Core.Reflection; namespace PHP.Core.Binders { internal static class InteropBinder { public static Expression WrapDynamic(Expression arg) { return Expression.Call(Methods.ClrObject_WrapDynamic, Expression.Convert(arg, Types.Object[0])); } public static Expression Unwrap(Expression arg) { return Expression.Call(Methods.PhpVariable.Unwrap, Expression.Convert(arg, Types.Object[0])); } internal sealed class InvokeMember : DynamicMetaObjectBinder { #region Php -> DLR public override DynamicMetaObject Bind(DynamicMetaObject target, DynamicMetaObject[] args) { throw new NotImplementedException(); } #endregion #region DLR -> Php public static DynamicMetaObject/*!*/ Bind(InvokeMemberBinder/*!*/ binder, DynamicMetaObject/*!*/ target, DynamicMetaObject/*!*/[]/*!*/ args, Func/*!*/ fallback) { return Bind(binder.Name, binder.CallInfo, binder, target, args, fallback); } public static DynamicMetaObject/*!*/ Bind(string/*!*/ methodName, CallInfo/*!*/ callInfo, DynamicMetaObjectBinder/*!*/ binder, DynamicMetaObject/*!*/ target, DynamicMetaObject/*!*/[]/*!*/ args, Func/*!*/ fallback) { Debug.Assert(fallback != null); //create DMO var phpInvokeBinder = Binder.MethodCall(methodName, 0, callInfo.ArgumentCount, null, Types.Object[0]) as PhpBaseInvokeMemberBinder; if (phpInvokeBinder != null) { //Add ScriptContext.CurrentContext var context = new DynamicMetaObject(Expression.Call(Methods.ScriptContext.GetCurrentContext), BindingRestrictions.Empty); var restrictions = BinderHelper.GetSimpleInvokeRestrictions(target, args); //Value type arguments have to be boxed DynamicMetaObject[] arguments = new DynamicMetaObject[1 + args.Length]; arguments[0] = context; for (int i = 0; i < args.Length; ++i) arguments[1 + i] = new DynamicMetaObject(WrapDynamic(args[i].Expression), args[i].Restrictions); var result = phpInvokeBinder.Bind(target, arguments); //Unwrap result var res = new DynamicMetaObject(Unwrap(result.Expression), restrictions); return res; } else return fallback(target, args);//this will never happen } #endregion } internal sealed class Invoke : InvokeBinder { public Invoke(CallInfo callInfo) :base(callInfo) { } #region Php->DLR public override DynamicMetaObject FallbackInvoke(DynamicMetaObject target, DynamicMetaObject[] args, DynamicMetaObject errorSuggestion) { throw new NotImplementedException(); } #endregion #region DLR -> Php public static DynamicMetaObject/*!*/ Bind(InvokeBinder/*!*/ binder, DynamicMetaObject/*!*/ target, DynamicMetaObject/*!*/[]/*!*/ args) { //Convert.ObjectToCallback(target).Invoke(args) var callback = Expression.Call(Methods.Convert.ObjectToCallback, Expression.Convert( target.Expression, Types.DObject[0])); //restriction: target is Type BindingRestrictions restrictions = BindingRestrictions.GetTypeRestriction(target.Expression, target.LimitType); //args -> new object[](args) var convertedArgs = Array.ConvertAll(args, (x) => Expression.Convert(x.Expression, Types.Object[0])); var argsArray = Expression.NewArrayInit(Types.Object[0], convertedArgs); return new DynamicMetaObject( Unwrap(/*TODO: deref*/Expression.Call(callback, Methods.PhpCallback_Invoke, argsArray)), restrictions); } #endregion } internal sealed class GetMember : GetMemberBinder { internal GetMember(string/*!*/ name) : base(name, false) { } #region DLR -> Php public static DynamicMetaObject/*!*/ Bind(GetMemberBinder/*!*/ binder, DynamicMetaObject/*!*/ target, Func/*!*/ fallback) { Debug.Assert(fallback != null); //create DMO var phpGetMemberBinder = Binder.GetProperty(binder.Name, null, false, Types.Object[0]) as PhpGetMemberBinder; if (phpGetMemberBinder != null) { // Get ClassContext of actual object var args = new DynamicMetaObject[]{ new DynamicMetaObject(Expression.Field(Expression.Convert( target.Expression, Types.DObject[0]), Fields.DObject_TypeDesc), BindingRestrictions.Empty) }; var res = phpGetMemberBinder.Bind(target, args); return new DynamicMetaObject(Unwrap(res.Expression), res.Restrictions); } else return fallback(target);//this will never happen } #endregion #region Php -> DLR public override DynamicMetaObject FallbackGetMember(DynamicMetaObject target, DynamicMetaObject errorSuggestion) { throw new NotImplementedException(); } #endregion } internal sealed class SetMember : DynamicMetaObjectBinder { #region DLR -> Php public static DynamicMetaObject/*!*/ Bind(SetMemberBinder/*!*/ binder, DynamicMetaObject/*!*/ target, DynamicMetaObject/*!*/ value, Func/*!*/ fallback) { Debug.Assert(target.HasValue && target.LimitType != Types.PhpReference[0], "Target should not be PhpReference!"); Debug.Assert(fallback != null); BindingRestrictions restrictions = BindingRestrictions.GetTypeRestriction(target.Expression, target.LimitType); //target.Restrictions; //wrap reference return new DynamicMetaObject( Expression.Block( Expression.Call(Expression.Convert(target.Expression, Types.DObject[0]), Methods.DObject_SetProperty, Expression.Constant(binder.Name), WrapDynamic(value.Expression), Expression.Constant(null, Types.DTypeDesc[0])), Expression.Constant(null, Types.Object[0])), restrictions ); } #endregion #region Php -> DLR public override DynamicMetaObject Bind(DynamicMetaObject target, DynamicMetaObject[] args) { throw new NotImplementedException(); } #endregion } } } ================================================ FILE: Source/Core/Binders/PhpBinder.cs ================================================ #if DLR_OVERLOAD_RESOLUTION using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Dynamic; using PHP.Core.Reflection; using System.Reflection; using Microsoft.Scripting.Actions; using Microsoft.Scripting.Actions.Calls; using Microsoft.Scripting.Runtime; using Microsoft.Scripting.Utils; using System.Linq.Expressions; using PHP.Core.Emit; namespace PHP.Core.Binders { class PhpBinder : DefaultBinder { internal static readonly PhpBinder Instance = new PhpBinder(); public DynamicMetaObject CallClrMethod(ClrMethod method, DynamicMetaObject target, DynamicMetaObject[] args) { CallSignature signature = new CallSignature(args.Length); return Call(signature,null,new DefaultOverloadResolverFactory(this), method, target, args); } /// /// Provides default binding for performing a call on the specified meta objects. /// /// The signature describing the call /// The meta object to be called. /// /// Additional meta objects are the parameters for the call as specified by the CallSignature in the CallAction. /// /// Overload resolver factory. /// The result should the object be uncallable. /// A MetaObject representing the call or the error. public DynamicMetaObject Call(CallSignature signature, DynamicMetaObject errorSuggestion, OverloadResolverFactory resolverFactory,ClrMethod method, DynamicMetaObject target, params DynamicMetaObject[] args) { ContractUtils.RequiresNotNullItems(args, "args"); ContractUtils.RequiresNotNull(resolverFactory, "resolverFactory"); TargetInfo targetInfo = GetTargetInfo(method, target, args); if (targetInfo != null) { // we're calling a well-known MethodBase DynamicMetaObject res = MakeMetaMethodCall(signature, resolverFactory, targetInfo); if (res.Expression.Type.IsValueType) { if (res.Expression.Type == Types.Void) res = new DynamicMetaObject( Expression.Block(Types.Object[0], res.Expression, Expression.Constant(null)), res.Restrictions ); else res = new DynamicMetaObject( Expression.Convert(res.Expression, typeof(object)), res.Restrictions ); } return res; } else { // we can't call this object return errorSuggestion ?? MakeCannotCallRule(target, target.GetLimitType()); } } /// /// Gets a TargetInfo object for performing a call on this object. /// private TargetInfo GetTargetInfo(ClrMethod method, DynamicMetaObject target, DynamicMetaObject[] args) { Debug.NotNull(method); Debug.Assert(target.HasValue); object objTarget = target.Value; List foundTargets = new List(method.Overloads.Count); foreach (PHP.Core.Reflection.ClrMethod.Overload overload in method.Overloads) { foundTargets.Add(overload.Method); } return new TargetInfo(target, args, target.Restrictions, foundTargets.ToArray()); } } } #endif ================================================ FILE: Source/Core/Binders/PhpDynamicMetaObjects.cs ================================================ using System; using System.Collections.Generic; using System.Diagnostics; using System.Dynamic; using System.Linq; using System.Linq.Expressions; using System.Text; using PHP.Core.Emit; using PHP.Core.Reflection; namespace PHP.Core.Binders { //TODO:(MB) Implement IDynamicMetaObject provider to DObject internal class PhpReferenceDynamicMetaObject : DynamicMetaObject { //Restriction: (obj isinst PhpReference) && ( ref.Value.GetType() == |typeof(obj.Value)|) public PhpReferenceDynamicMetaObject(DynamicMetaObject dynamic): base(Expression.Field(Expression.Convert(dynamic.Expression, Types.PhpReference[0]), Fields.PhpReference_Value), BindingRestrictions.GetTypeRestriction(dynamic.Expression,Types.PhpReference[0]) // TODO: PhpSmartReference /*.Merge( BindingRestrictions.GetTypeRestriction( Expression.Field(Expression.Convert(dynamic.Expression, Types.PhpReference[0]), Fields.PhpReference_Value), ((PhpReference)dynamic.Value).Value.GetType()))*/, ((PhpReference)dynamic.Value).Value ) { Debug.Assert(Types.PhpReference[0] == dynamic.LimitType); } } internal class PhpSmartReferenceDynamicMetaObject : DynamicMetaObject { //Restriction: (obj isinst PhpReference) && ( ref.Value.GetType() == |typeof(obj.Value)|) public PhpSmartReferenceDynamicMetaObject(DynamicMetaObject dynamic) : base(Expression.Field(Expression.Convert(dynamic.Expression, Types.PhpSmartReference[0]), Fields.PhpReference_Value), BindingRestrictions.GetTypeRestriction(dynamic.Expression, Types.PhpSmartReference[0]) // TODO: PhpSmartReference /*.Merge( BindingRestrictions.GetTypeRestriction( Expression.Field(Expression.Convert(dynamic.Expression, Types.PhpReference[0]), Fields.PhpReference_Value), ((PhpReference)dynamic.Value).Value.GetType()))*/, ((PhpReference)dynamic.Value).Value ) { Debug.Assert(Types.PhpSmartReference[0] == dynamic.LimitType); } } internal class ClrDynamicMetaObject : DynamicMetaObject { //Restriction: (obj is ClrObject) && (obj.RealType == |typeof(obj.RealType)|)) public ClrDynamicMetaObject(DynamicMetaObject dynamic) : base(Expression.Property(Expression.Convert(dynamic.Expression, typeof(ClrObject)), Properties.DObject_RealObject), BindingRestrictions.GetTypeRestriction(dynamic.Expression, typeof(ClrObject)) .Merge(// TODO: this has to be turned off for DLR overload resolution, because instance is argument for method and DLR creates its restriction BindingRestrictions.GetExpressionRestriction( Expression.Equal( Expression.Property(Expression.Convert(dynamic.Expression, typeof(ClrObject)), Properties.DObject_RealType), Expression.Constant(((ClrObject)dynamic.Value).RealType)))), ((ClrObject)dynamic.Value).RealObject ) { Debug.Assert(typeof(ClrObject) == dynamic.LimitType); } } internal class ClrValueDynamicMetaObject : DynamicMetaObject { public ClrValueDynamicMetaObject(DynamicMetaObject dynamic) : base(dynamic.Expression, BindingRestrictions.GetTypeRestriction(dynamic.Expression, dynamic.LimitType), dynamic.Value ) { } } internal class WrappedClrDynamicMetaObject : DynamicMetaObject { public WrappedClrDynamicMetaObject(DynamicMetaObject dynamic) : base(dynamic.Expression, BindingRestrictions.GetTypeRestriction(dynamic.Expression, dynamic.LimitType), ClrObject.WrapRealObject(dynamic.Value) ) { Debug.Assert(!Types.DObject[0].IsAssignableFrom(dynamic.LimitType) && dynamic.Value != null && Configuration.Application.Compiler.ClrSemantics); } public Expression WrapIt() { return Expression.Assign(Expression, Expression.Call( Methods.ClrObject_WrapRealObject, Expression)); } } internal class PhpDynamicMetaObject : DynamicMetaObject { public PhpDynamicMetaObject(DynamicMetaObject dynamic) : base(dynamic.Expression, // Restriction: typeof(target) == |target.TypeDesc.RealType| BindingRestrictions.GetTypeRestriction(dynamic.Expression, ((PhpObject)dynamic.Value).TypeDesc.RealType), //TODO: it's sufficient to use typeof(targetObj), but this is faster dynamic.Value ) { Debug.Assert(Types.PhpObject[0].IsAssignableFrom(dynamic.LimitType)); } } } ================================================ FILE: Source/Core/Binders/PhpGetMemberBinder.cs ================================================ using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Text; using System.Dynamic; using System.Linq.Expressions; using System.Reflection; using PHP.Core.Emit; using PHP.Core.Reflection; namespace PHP.Core.Binders { /// /// /// public class PhpGetMemberBinder : DynamicMetaObjectBinder { #region Fields protected readonly string _fieldName; protected readonly DTypeDesc _classContext; protected readonly bool _issetSemantics; protected readonly Type/*!*/_returnType; #endregion #region Properties protected bool ClassContextIsKnown { get { return _classContext == null || !_classContext.IsUnknown; } } protected bool IsIndirect { get { return _fieldName == null; } } protected bool WantReference { get { return this._returnType == Types.PhpReference[0]; } } #endregion public PhpGetMemberBinder(string fieldName, DTypeDesc classContext, bool issetSemantics, Type/*!*/returnType) { this._fieldName = fieldName; this._classContext = classContext; this._issetSemantics = issetSemantics; this._returnType = returnType; } public override Type ReturnType { get { return this._returnType; } } public override DynamicMetaObject Bind(DynamicMetaObject target, DynamicMetaObject[] args) { if (target.Value is IDynamicMetaObjectProvider) { //throw new NotImplementedException(); //Translate arguments to DLR standard //TODO: Create DlrCompatibilityInvokeBinder because it has to be derived from GetMemberBinder //return target.BindGetMember(this,args); } return FallbackInvokeMember(target, args); } static PhpReference notsetOperation(DObject self, string name, DTypeDesc caller, PhpReference refrnc) { bool getter_exists; // the CT property has been unset -> try to invoke __get PhpReference get_ref = self.InvokeGetterRef(name, caller, out getter_exists); if (getter_exists) return get_ref ?? new PhpReference(); Debug.Assert(refrnc != null); refrnc.IsAliased = true; refrnc.IsSet = true; return refrnc; } private DynamicMetaObject/*!*/ FallbackInvokeMember(DynamicMetaObject target/*!*/, DynamicMetaObject/*!*/[]/*!*/ args) { // determine run time values and additional restrictions: DTypeDesc classContext = this._classContext; string fieldName = this._fieldName; BindingRestrictions restrictions = BindingRestrictions.GetTypeRestriction(target.Expression, target.LimitType); //target.Restrictions; int currentArg = 0; if (!ClassContextIsKnown) { Debug.Assert(args.Length > currentArg, "Not enough arguments!"); Debug.Assert(args[currentArg].Value == null || Types.DTypeDesc[0].IsAssignableFrom(args[currentArg].LimitType), "Wrong class context type!"); classContext = (DTypeDesc)args[currentArg].Value; Debug.Assert(classContext == null || !classContext.IsUnknown, "Class context should be known at run time!"); restrictions = restrictions.Merge(BindingRestrictions.GetInstanceRestriction(args[currentArg].Expression, classContext)); currentArg++; } if (IsIndirect) { Debug.Assert(args.Length > currentArg, "Not enough arguments!"); Debug.Assert(Types.String[0].IsAssignableFrom(args[currentArg].LimitType), "Wrong field name type!"); fieldName = (string)args[currentArg].Value; restrictions = restrictions.Merge( BindingRestrictions.GetExpressionRestriction( Expression.Equal( args[currentArg].Expression, Expression.Constant(fieldName, Types.String[0])))); currentArg++; } // ////Debug.Assert(!(var is PhpReference) && name != null); Debug.Assert(target.HasValue && target.LimitType != Types.PhpReference[0], "Target should not be PhpReference!"); ////if (ReferenceEquals(obj, ScriptContext.SetterChainSingletonObject)) ////{ //// ScriptContext.CurrentContext.AbortSetterChain(false); //// return new PhpReference(); ////} if (WantReference && ReferenceEquals(target.Value, ScriptContext.SetterChainSingletonObject)) { // GetObjectPropertyRef: Func abortSetterChain = () => { ScriptContext.CurrentContext.AbortSetterChain(false); return new PhpReference(); }; return new DynamicMetaObject( Expression.Call(abortSetterChain.Method), BindingRestrictions.GetInstanceRestriction(target.Expression, ScriptContext.SetterChainSingletonObject) ); } DObject obj; ////// a property of a DObject: if ((obj = target.Value as DObject) != null) { if (obj is ClrObject /*|| obj is IClrValue // IClrValue -> ClrValue -> already in restriction */) { // ((DObject)target).RealType == .RealType restrictions = restrictions.Merge( BindingRestrictions.GetInstanceRestriction( Expression.Property(Expression.Convert(target.Expression, Types.DObject[0]), Properties.DObject_RealType), obj.RealType)); } //// return GetObjectProperty(obj, name, caller, quiet); DPropertyDesc property; GetMemberResult result = obj.TypeDesc.GetInstanceProperty(new VariableName(fieldName), classContext, out property); switch (result) { case GetMemberResult.OK: ////object value = property.Get(this); ////PhpReference reference = value as PhpReference; if (property.Member is PhpField || property.Member is PhpVisibleProperty) { var realType = property.DeclaringType.RealType; FieldInfo realField = (property.Member is PhpField) ? property.PhpField.RealField : null; PropertyInfo realProperty = (property.Member is PhpVisibleProperty) ? ((PhpVisibleProperty)property.Member).RealProperty : null; Debug.Assert(realField != null ^ realProperty != null); MemberExpression getter = null; if (realField != null) getter = Expression.Field(Expression.Convert(target.Expression, realType), realField); else if (realProperty != null) getter = Expression.Property(Expression.Convert(target.Expression, realType), realProperty); if (Types.PhpReference[0].IsAssignableFrom(getter.Type)) { var reference = Expression.Variable(Types.PhpReference[0]); var assignment = Expression.Assign(reference, getter); if (WantReference) { ////value = property.Get(this); ////reference = value as PhpReference; var returnLabel = Expression.Label(this._returnType); ////if (reference != null && reference.IsSet) ////{ //// reference.IsAliased = true; //// return reference; ////} var isset = Expression.IfThen( Expression.Property(assignment, Properties.PhpReference_IsSet), Expression.Block( Expression.Assign(Expression.Property(reference, Properties.PhpReference_IsAliased), Expression.Constant(true)), Expression.Return(returnLabel, reference))); ////// the CT property has been unset -> try to invoke __get ////PhpReference get_ref = InvokeGetterRef(name, caller, out getter_exists); ////if (getter_exists) return (get_ref == null ? new PhpReference() : get_ref); ////if (reference == null) ////{ //// reference = new PhpReference(value); //// property.Set(this, reference); ////} ////else ////{ //// reference.IsAliased = true; //// reference.IsSet = true; ////} ////return reference; return new DynamicMetaObject( Expression.Block(this._returnType, new[]{reference}, new Expression[]{ isset, Expression.Label(returnLabel, Expression.Call(null, new Func(notsetOperation).Method, Expression.Convert(target.Expression, Types.DObject[0]), Expression.Constant(fieldName), Expression.Constant(classContext, Types.DTypeDesc[0]), reference)) }), restrictions); } else { ////if (reference != null && !reference.IsSet) ////{ //// // the property is CT but has been unset //// if (issetSemantics) //// { //// bool handled; //// return PropertyIssetHandler(name, caller, out handled); //// } //// else return GetRuntimeField(name, caller); ////} ////else return value; var notsetOperation = _issetSemantics ? (Func)GetMemberRuntimeFld : GetMemberIsSet; var value = Expression.Block(this._returnType, new[] { reference }, Expression.Condition( Expression.Property(assignment, Properties.PhpReference_IsSet), Expression.Field(reference, Fields.PhpReference_Value), Expression.Call(null, notsetOperation.Method, Expression.Convert(target.Expression, Types.DObject[0]), Expression.Constant(fieldName), Expression.Constant(classContext, Types.DTypeDesc[0])) )); return new DynamicMetaObject(value, restrictions); } } else { if (WantReference) { return new DynamicMetaObject( Expression.New(Constructors.PhpReference_Object, Expression.Convert(getter, Types.Object[0])), restrictions); } else { return new DynamicMetaObject( Expression.Call(Methods.PhpVariable.Dereference, Expression.Convert(getter, Types.Object[0])), restrictions); } } } else if (property.Member is ClrProperty) { var realType = property.DeclaringType.RealType; var realProperty = property.ClrProperty.RealProperty; // (target.{RealObject|realValue}). Expression value = Expression.Convert( BinderHelper.ClrObjectWrapDynamic( Expression.Property( BinderHelper.ClrRealObject(target, realType), realProperty)), Types.Object[0]); if (WantReference) value = BinderHelper.MakePhpReference(value); return new DynamicMetaObject(value, restrictions); } else if (property.Member is ClrField) { var realType = property.DeclaringType.RealType; var realField = property.ClrField.FieldInfo; // (target.{RealObject|realValue}). Expression value = Expression.Convert( BinderHelper.ClrObjectWrapDynamic( Expression.Field( BinderHelper.ClrRealObject(target, realType), realField)), Types.Object[0]); if (WantReference) value = BinderHelper.MakePhpReference(value); return new DynamicMetaObject(value, restrictions); } else if (property.Member is ClrEvent) { var clrEvent = (ClrEvent)property.Member; var realType = property.DeclaringType.RealType; // emit stub that Wraps event as [ ClrEventObject.Wrap(, , , ) ] var stub = new System.Reflection.Emit.DynamicMethod( string.Format("event<{0}>",fieldName), Types.DObject[0], new[] { realType }, realType); var il = new ILEmitter(stub); clrEvent.EmitGetEventObject( il, new Place(null, Properties.ScriptContext_CurrentContext), new IndexedPlace(PlaceHolder.Argument, 0), false); il.Emit(System.Reflection.Emit.OpCodes.Ret); Expression value = Expression.Call(stub, BinderHelper.ClrRealObject(target, realType)); if (WantReference) value = BinderHelper.MakePhpReference(value); return new DynamicMetaObject(value, restrictions); } else throw new NotImplementedException(); case GetMemberResult.NotFound: if (WantReference) { return new DynamicMetaObject( Expression.Call(null, new Func(GetRefMemberNotFound).Method, Expression.Convert(target.Expression, Types.DObject[0]), Expression.Constant(fieldName), Expression.Constant(classContext, Types.DTypeDesc[0])), restrictions); } else { ////if (issetSemantics) ////{ //// OrderedHashtable.Element element; //// if (RuntimeFields != null && (element = RuntimeFields.GetElement(name)) != null) //// { //// return element.Value; //// } //// else //// { //// bool handled; //// return PropertyIssetHandler(name, caller, out handled); //// } ////} ////else return GetRuntimeField(name, caller); if (_issetSemantics) { return new DynamicMetaObject( Expression.Call(Methods.PhpVariable.Dereference, Expression.Call(null, new Func(GetMemberNotFoundIsSet).Method, Expression.Convert(target.Expression, Types.DObject[0]), Expression.Constant(fieldName), Expression.Constant(classContext, Types.DTypeDesc[0]))), restrictions); } else { return new DynamicMetaObject( Expression.Call( Methods.PhpVariable.Dereference, Expression.Call( Expression.Convert(target.Expression, Types.DObject[0]), Methods.DObject_GetRuntimeField, Expression.Constant(fieldName), Expression.Constant(classContext, Types.DTypeDesc[0]))), restrictions); }; } case GetMemberResult.BadVisibility: { ////PhpException.PropertyNotAccessible( //// property.DeclaringType.MakeFullName(), //// name.ToString(), //// (caller == null ? String.Empty : caller.MakeFullName()), //// property.IsProtected); string stringResourceKey = property.IsProtected ? "protected_property_accessed" : "private_property_accessed"; return new DynamicMetaObject( Expression.Block(this._returnType, Expression.Call(null, Methods.PhpException.Throw, Expression.Constant(PhpError.Error, Types.PhpError_String[0]), Expression.Constant(CoreResources.GetString(stringResourceKey, property.DeclaringType.MakeFullName(), fieldName, (classContext == null ? String.Empty : classContext.MakeFullName())))), WantReference ? (Expression)Expression.New(Constructors.PhpReference_Void) : Expression.Constant(null) ), restrictions); } } } ////// warnings: ////if (!quiet) // not in isset() operator only ////{ if (!_issetSemantics) { //// if (PhpVariable.IsEmpty(var)) //// // empty: //// PhpException.Throw(PhpError.Notice, CoreResources.GetString("empty_used_as_object")); //// else //// // PhpArray, string, scalar type: //// PhpException.VariableMisusedAsObject(var, false); Action error = (var) => { if (PhpVariable.IsEmpty(var)) // empty: PhpException.Throw(PhpError.Notice, CoreResources.GetString("empty_used_as_object")); else // PhpArray, string, scalar type: PhpException.VariableMisusedAsObject(var, false); }; return new DynamicMetaObject( Expression.Block(this._returnType, Expression.Call(error.Method, target.Expression), WantReference ? (Expression)Expression.New(Constructors.PhpReference_Void) : Expression.Constant(null)), (target.HasValue && target.Value == null) ? BindingRestrictions.GetInstanceRestriction(target.Expression, null) : BindingRestrictions.GetTypeRestriction(target.Expression, target.LimitType)); } ////} ////// property does not exist ////return null; return new DynamicMetaObject( Expression.Constant(null), (target.HasValue && target.Value == null) ? BindingRestrictions.GetInstanceRestriction(target.Expression, null) : BindingRestrictions.GetTypeRestriction(target.Expression, target.LimitType)); } static object GetMemberRuntimeFld(DObject self, string name, DTypeDesc caller) { return PhpVariable.Dereference(self.GetRuntimeField(name, caller)); } static object GetMemberIsSet(DObject self, string name, DTypeDesc caller) { return PhpVariable.Dereference(self.GetRuntimeField(name, caller)); } static PhpReference GetRefMemberNotFound(DObject self, string name, DTypeDesc caller) { PhpReference reference; bool getter_exists; // search in RT fields if (self.RuntimeFields != null && self.RuntimeFields.ContainsKey(name)) { var namekey = new IntStringKey(name); return self.RuntimeFields.table._ensure_item_ref(ref namekey, self.RuntimeFields); } // property is not present -> try to invoke __get reference = self.InvokeGetterRef(name, caller, out getter_exists); if (getter_exists) return (reference == null) ? new PhpReference() : reference; // (no notice/warning/error thrown by PHP) // add the field reference = new PhpReference(); if (self.RuntimeFields == null) self.RuntimeFields = new PhpArray(); self.RuntimeFields[name] = reference; return reference; } static object GetMemberNotFoundIsSet(DObject self, string name, DTypeDesc caller) { if (self.RuntimeFields != null) { object value; if (self.RuntimeFields.TryGetValue(name, out value)) return value; } bool handled; return self.PropertyIssetHandler(name, caller, out handled); } } } ================================================ FILE: Source/Core/Binders/PhpInvokeBinderKey.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using System.Text; using PHP.Core.Reflection; namespace PHP.Core.Binders { public struct PhpInvokeBinderKey : IEquatable { /// /// Number of arguments in the signature. /// private readonly int argumentCount; /// /// Number of generic type arguments in the signature. /// private readonly int genericArgumentCount; /// /// Binding flags /// private readonly Type returnType; /// /// Method name /// private readonly string methodName; /// /// Method name /// private readonly DTypeDesc callerClassContext; private readonly string stringKey; #region Construction public PhpInvokeBinderKey(string methodName, int genericParamsCount, int paramsCount, DTypeDesc callerClassContext, Type returnType) { this.methodName = methodName; this.genericArgumentCount = genericParamsCount; this.argumentCount = paramsCount; this.callerClassContext = callerClassContext; this.returnType = returnType; StringBuilder sb = new StringBuilder(( methodName != null ? methodName.Length : 0) + returnType.Name + 16); sb.Append(methodName); sb.Append("|"); sb.Append(argumentCount); sb.Append("|"); sb.Append(genericArgumentCount); sb.Append("|"); sb.Append(returnType.Name); sb.Append("|"); if (callerClassContext != null) sb.Append(callerClassContext.GetHashCode()); stringKey = sb.ToString(); } #endregion #region IEquatable Members public bool Equals(PhpInvokeBinderKey other) { if (methodName != other.methodName) return false; if (argumentCount != other.argumentCount) return false; if (genericArgumentCount != other.genericArgumentCount) return false; if (returnType != other.returnType) return false; if (callerClassContext != other.callerClassContext) return false; return true; } #endregion //public override int GetHashCode() //{ // int result = 1254645177; // for (int i = 0; i < types.Length; i++) // result ^= types[i].GetHashCode(); // return result; //} public override string ToString() { return stringKey; } } } ================================================ FILE: Source/Core/Binders/PhpInvokeMemberBinder.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Dynamic; using System.Linq.Expressions; using System.Diagnostics; using PHP.Core.Emit; using PHP.Core.Reflection; namespace PHP.Core.Binders { //TODO: // - implement IDynamicMetaObjectProvider for DObject, PhpObject, ClrObject, ClrValue // - if library function is called with wrong number of arguments throw PhpException.InvalidArgumentCount /// /// /// public abstract class PhpBaseInvokeMemberBinder : DynamicMetaObjectBinder { #region Fields protected readonly string _methodName; protected readonly int _genericParamsCount; protected readonly int _paramsCount; protected readonly DTypeDesc _classContext; protected readonly Type _returnType; #endregion #region Properties protected bool ClassContextIsKnown { get { return _classContext == null || !_classContext.IsUnknown; } } /// /// The result type of the invoke operation. /// public override Type ReturnType { get { return _returnType; } } /// /// This binder binds indirect method calls /// public bool IsIndirect { get { return _methodName == null; } } /// /// Name of the method /// protected abstract string ActualMethodName { get; } public int RealMethodArgumentCount { get { //ScriptContext + generic parameters count + parameters count return 1 + _genericParamsCount + _paramsCount; } } #endregion #region Construction /// /// Creates appropriate binder according to paramaters specified /// /// Name of the method known during binder creation. /// Number of generic type arguments of the method /// Number of arguments of the method /// TypeDesc of the class that is calling this method /// Type which is expected from the call site to return /// Return appropriate binder derived from PhpInvokeMemberBinder public static PhpInvokeMemberBinder Create(string methodName, int genericParamsCount, int paramsCount, DTypeDesc callerClassContext, Type returnType) { if (methodName == null) { return new PhpIndirectInvokeMemberBinder(genericParamsCount, paramsCount, callerClassContext, returnType); } else { return new PhpInvokeMemberBinder(methodName, genericParamsCount, paramsCount, callerClassContext, returnType); } } protected PhpBaseInvokeMemberBinder(string methodName, int genericParamsCount, int paramsCount, DTypeDesc callerClassContext, Type returnType) { this._methodName = methodName; this._genericParamsCount = genericParamsCount; this._paramsCount = paramsCount; this._classContext = callerClassContext; this._returnType = returnType; } #endregion #region Methods /// /// Php invoke call site signature is non-standard for DLR. If the object implements IDynamicMetaObjectProvider /// a call has to be transleted to arguments that can understand. If it's object comming from Phalanger /// for now we just fallback to FallbackInvokeMember method. /// /// /// /// CallSite< Func< CallSite, /// object /*target instance*/, /// ScriptContext, /// {args}*/*method call arguments*/, /// (DTypeDesc)?/*class context, /// iff {classContext}.IsUnknown*/, /// (object)?/*method name, /// iff {methodName}==null*/, {returnType} > > /// /// public override DynamicMetaObject/*!*/ Bind(DynamicMetaObject/*!*/ target, DynamicMetaObject/*!*/[]/*!*/ args) { Debug.Assert(args.Length > 0); if (target.Value is IDynamicMetaObjectProvider) { //Translate arguments to DLR standard //TODO: Create DlrCompatibilityInvokeBinder because it has to be derived from InvokeMemberBinder //return target.BindInvokeMember(this,args); } //target = target.ToPhpDynamicMetaObject(); return FallbackInvokeMember(target, args); } protected abstract DynamicMetaObject/*!*/ FallbackInvokeMember(DynamicMetaObject target/*!*/, DynamicMetaObject/*!*/[]/*!*/ args); protected static DynamicMetaObject[]/*!*/ GetArgumentsRange(DynamicMetaObject/*!*/[]/*!*/ args, int startIndex, int length) { int top = startIndex + length; DynamicMetaObject[] arguments = new DynamicMetaObject[length]; for (int i = 0; i < length; ++i) arguments[i] = args[i + startIndex]; return arguments; } protected DynamicMetaObject GetRuntimeClassContext(DynamicMetaObject[] args) { if (args.Length > this._genericParamsCount + this._paramsCount + 1) return args[this._genericParamsCount + this._paramsCount + 1]; return null; } /// /// Returns ClassContext that was supplied during creation of binder or if it wasn't available that time, it selects it from supplied arguments /// /// Arguments supplied during run time bind process /// protected DTypeDesc GetActualClassContext(DynamicMetaObject[] args) { if (this._classContext == null) return null; if (!this._classContext.IsUnknown) return this._classContext; var dmoClassContext = GetRuntimeClassContext(args); return dmoClassContext.Value != null ? (DTypeDesc)dmoClassContext.Value : null; } /// /// Handles the return argument of the method /// /// /// Caller needs as returned type /// 1.) void /// => result /// 2.) PhpReference /// a.) if method returns PhpReference => result /// b.) otherwise => PhpVariable.MakeReference(PhpVariable.Copy(result, CopyReason.ReturnedByCopy)); /// 3.) otherwise /// a.) if method returns PhpReference = > result.Value /// b.) otherwise => PhpVariable.Dereference(PhpVariable.Copy(result, CopyReason.ReturnedByCopy)); /// /// Result to be handled /// Type of the return argument the method /// Dereference will be generated. protected Expression/*!*/ HandleResult(Expression/*!*/ result, Type/*!*/ methodReturnType, bool dereference = true) { if (_returnType == Types.Void) { // do nothing return result; } else if (_returnType == Types.PhpReference[0]) { if (methodReturnType == Types.PhpReference[0]) return result; else { result = CopyByReturn(result); return Expression.Call(Methods.PhpVariable.MakeReference, result); } } else /*if (_returnType != Types.PhpReference[0])*/ { result = CopyByReturn(result); if (methodReturnType == Types.PhpReference[0]) return Expression.Field(Expression.Convert(result, Types.PhpReference[0]), Fields.PhpReference_Value); else if (dereference) { return Expression.Call(Methods.PhpVariable.Dereference, result); } else { // We don't need to dereference at all in this point(for argfull overload only!) // To make sure result = BinderHelper.AssertNotPhpReference(result); return result; } } } private static Expression CopyByReturn(Expression result) { result = Expression.Call(Methods.PhpVariable.Copy, result, Expression.Constant(CopyReason.ReturnedByCopy)); return result; } protected DynamicMetaObject DoAndReturnDefault(Expression rule, BindingRestrictions restrictions) { return new DynamicMetaObject( Expression.Block( rule, _returnType == Types.PhpReference[0] ? (Expression)Expression.New(Constructors.PhpReference_Void) : Expression.Constant(null)), restrictions); } #endregion } public class PhpInvokeMemberBinder : PhpBaseInvokeMemberBinder { #region Fields private ParameterExpression argsArrayVariable; private ParameterExpression retValVariable; #endregion #region Properties /// /// Name of the method /// protected override string ActualMethodName { get { return this._methodName; } } #endregion #region Construction internal PhpInvokeMemberBinder(string methodName, int genericParamsCount, int paramsCount, DTypeDesc callerClassContext, Type returnType) : base(methodName, genericParamsCount, paramsCount, callerClassContext, returnType) { } #endregion #region Methods protected override DynamicMetaObject/*!*/ FallbackInvokeMember(DynamicMetaObject target/*!*/, DynamicMetaObject/*!*/[]/*!*/ args) { Expression invokeMethodExpr; DObject obj = target.Value as DObject;// target.Value can be something else which isn't DObject ? WrappedClrDynamicMetaObject wrappedTarget = null; bool invokeCallMethod = false; // Restrictions BindingRestrictions restrictions; BindingRestrictions classContextRestrictions = BindingRestrictions.Empty; BindingRestrictions defaultRestrictions = BindingRestrictions.GetTypeRestriction(target.Expression, target.LimitType); DTypeDesc classContext = this._classContext; if (!ClassContextIsKnown)//ClassContext wasn't supplied during creation of binder => put it into restriction { Debug.Assert(args.Length > RealMethodArgumentCount, "Not enough arguments!"); DynamicMetaObject dmoRuntimeClassContext = GetRuntimeClassContext(args); Debug.Assert(dmoRuntimeClassContext.Value == null || Types.DTypeDesc[0].IsAssignableFrom(dmoRuntimeClassContext.LimitType), "Wrong class context type!"); classContext = (DTypeDesc)dmoRuntimeClassContext.Value; Debug.Assert(classContext == null || !classContext.IsUnknown, "Class context should be known at run time!"); classContextRestrictions = BindingRestrictions.GetInstanceRestriction(dmoRuntimeClassContext.Expression, classContext); defaultRestrictions = defaultRestrictions.Merge(classContextRestrictions); } if (obj == null) { if (target.Value != null && Configuration.Application.Compiler.ClrSemantics) { // TODO: some normalizing conversions (PhpString, PhpBytes -> string): target = new WrappedClrDynamicMetaObject(target); obj = target.Value as DObject; wrappedTarget = target as WrappedClrDynamicMetaObject; Debug.Assert(obj != null); } else { //defaultRestrictions = defaultRestrictions.Merge(BindingRestrictions.GetTypeRestriction if (target.Value == null) defaultRestrictions = BindingRestrictions.GetInstanceRestriction(target.Expression, null); return DoAndReturnDefault( BinderHelper.ThrowError("method_called_on_non_object", ActualMethodName), defaultRestrictions); } } // obtain the appropriate method table DTypeDesc type_desc = obj.TypeDesc; // perform method lookup DRoutineDesc method; GetMemberResult result = type_desc.GetMethod(new Name(ActualMethodName), classContext, out method); //PhpStack stack = context.Stack; if (result == GetMemberResult.NotFound) { if ((result = type_desc.GetMethod(Name.SpecialMethodNames.Call, classContext, out method)) == GetMemberResult.NotFound) { return DoAndReturnDefault( Expression.Call(Methods.PhpException.UndefinedMethodCalled, Expression.Constant(obj.TypeName), Expression.Constant(ActualMethodName)), defaultRestrictions );// TODO: alter restrictions } else { invokeCallMethod = true; } } // throw an error if the method was found but the caller is not allowed to call it due to its visibility if (result == GetMemberResult.BadVisibility) { return DoAndReturnDefault( BinderHelper.ThrowVisibilityError(method, classContext), defaultRestrictions); } if (invokeCallMethod) { InvokeCallMethod(target, args, obj, method, out restrictions, out invokeMethodExpr); return new DynamicMetaObject(invokeMethodExpr, restrictions.Merge(classContextRestrictions)); } else { // we are invoking the method // PhpRoutine (function or method) if (method.Member is PhpRoutine) { InvokePhpMethod(target, args, method.PhpRoutine, out restrictions, out invokeMethodExpr); return new DynamicMetaObject(invokeMethodExpr, restrictions.Merge(classContextRestrictions)); } // ClrMethod else if (method.Member is ClrMethod) { var targetwrapper = (target.LimitType == typeof(ClrObject)) ? (DynamicMetaObject)new ClrDynamicMetaObject(target) : // ((ClrObject)target).RealType restriction (DynamicMetaObject)new ClrValueDynamicMetaObject(target); // simple type restriction, IClrValue or any .NET class inheriting PhpObject InvokeClrMethod(targetwrapper, args, method, out restrictions, out invokeMethodExpr); if (wrappedTarget != null) { return new DynamicMetaObject(Expression.Block(wrappedTarget.WrapIt(), invokeMethodExpr), wrappedTarget.Restrictions.Merge(classContextRestrictions)); } return new DynamicMetaObject(invokeMethodExpr, restrictions.Merge(classContextRestrictions)); } } throw new NotImplementedException(); } private void InvokeClrMethod(DynamicMetaObject target, DynamicMetaObject/*!*/[] args, DRoutineDesc method, out BindingRestrictions restrictions, out Expression invokeMethodExpr) { DynamicMetaObject scriptContext = args[0]; //Select arguments without scriptContext DynamicMetaObject[] realArgs = GetArgumentsRange(args, 1, RealMethodArgumentCount - 1); #if DLR_OVERLOAD_RESOLUTION // Convert arguments DynamicMetaObject[] realArgsConverted = Array.ConvertAll(realArgs, (x) => { return x.ToPhpDynamicMetaObject(); }); //DLR overload resolution DynamicMetaObject res = PhpBinder.Instance.CallClrMethod(method.ClrMethod, target, realArgsConverted); restriction = res.Restriction; invokeMethodExpr = res.Rule; #else // Old overload resolution // TODO: in case of zero-parameters, we can call via ArgFull InvokeArgLess(target, scriptContext, method, realArgs, out restrictions, out invokeMethodExpr); #endif } private void InvokeArgLess(DynamicMetaObject target, DynamicMetaObject scriptContext, DRoutineDesc method, DynamicMetaObject[] args, out BindingRestrictions restrictions, out Expression invokeMethodExpr) { int argsWithoutScriptContext = RealMethodArgumentCount - 1; System.Reflection.MethodInfo miAddFrame = Methods.PhpStack.AddFrame.Overload(argsWithoutScriptContext); Expression[] argsExpr = null; if (miAddFrame == Methods.PhpStack.AddFrame.N) { //Create array of arguments argsExpr = new Expression[1]; argsExpr[0] = Expression.NewArrayInit(Types.Object[0], BinderHelper.PackToExpressions(args, 0, argsWithoutScriptContext)); } else { //call overload with < N arguments //argsExpr = new Expression[argsWithoutScriptContext]; argsExpr = BinderHelper.PackToExpressions(args, 0, argsWithoutScriptContext); } var stack = Expression.Field(scriptContext.Expression, Fields.ScriptContext_Stack); // scriptContext.PhpStack // PhpStack.Add( args ) // call argless stub invokeMethodExpr = Expression.Block(_returnType, Expression.Call( stack, miAddFrame, argsExpr), Expression.Assign( Expression.Field(stack, Fields.PhpStack_AllowProtectedCall), Expression.Constant(true, Types.Bool[0])), HandleResult( Expression.Call(method.ArglessStubMethod, target.Expression, stack), method.ArglessStubMethod.ReturnType)); restrictions = target.Restrictions; } private void InvokeCallMethod(DynamicMetaObject target, DynamicMetaObject/*!*/[] args, DObject/*!*/ obj, DRoutineDesc/*!*/ method, out BindingRestrictions restrictions, out Expression invokeMethodExpr) { var insideCaller = Expression.Property( Expression.Convert(target.Expression, Types.DObject[0]), Properties.DObject_InsideCaller); if (argsArrayVariable == null) argsArrayVariable = Expression.Parameter(Types.PhpArray[0], "args"); if (retValVariable == null) retValVariable = Expression.Parameter(Types.Object[0], "retVal"); ParameterExpression[] vars = new ParameterExpression[] { argsArrayVariable, retValVariable }; // Just select real method arguments without ScriptContext and generic type arguments var justParams = BinderHelper.PackToExpressions(args, 1 + _genericParamsCount, _paramsCount); // Expression which calls ((PhpArray)argArray).add method on each real method argument. var initArgsArray = Array.ConvertAll(justParams, (x) => Expression.Call(argsArrayVariable, Methods.PhpHashtable_Add, x)); // Argfull __call signature: (ScriptContext, object, object)->object var callerMethodArgs = new DynamicMetaObject[3] { args[0], new DynamicMetaObject(Expression.Constant(ActualMethodName),BindingRestrictions.Empty), new DynamicMetaObject(argsArrayVariable, BindingRestrictions.Empty) }; // what if method.PhpRoutine is null InvokePhpMethod(target, callerMethodArgs, /*(PhpObject)target.Value, */method.PhpRoutine, out restrictions, out invokeMethodExpr); //Expression: // if (target.insideCaller) // throw new UndefinedMethodException(); // // args = new PhpArray(paramsCount, 0); // // args.Add(arg0); // . // . // args.Add(paramsCount); // // target.insideCaller = true; // try // { // ret_val = target.__call( scriptContext, methodName, args); // } // finally // { // target.insideCaller = false; // } // return ret_val; // invokeMethodExpr = Expression.Block( vars,//local variables Expression.IfThen(Expression.Property( Expression.Convert(target.Expression, Types.DObject[0]), Properties.DObject_InsideCaller), Expression.Call(Methods.PhpException.UndefinedMethodCalled, Expression.Constant(obj.TypeName), Expression.Constant(ActualMethodName))), Expression.Assign( argsArrayVariable, Expression.New(Constructors.PhpArray.Int32_Int32, Expression.Constant(_paramsCount), Expression.Constant(0))), ((initArgsArray.Length == 0) ? (Expression)Expression.Empty() : Expression.Block(initArgsArray)), Expression.Assign(insideCaller, Expression.Constant(true)), Expression.TryFinally( //__call(caller,args) Expression.Assign(retValVariable, invokeMethodExpr), //Finally part: Expression.Assign(insideCaller, Expression.Constant(false)) ), HandleResult(retValVariable, method.PhpRoutine.ArgFullInfo.ReturnType, false)); } /// /// This method binds rules for PhpMethod /// private void InvokePhpMethod(DynamicMetaObject/*!*/ target, DynamicMetaObject[]/*!!*/ args, /*object targetObj,*/ PhpRoutine/*!*/ routine, out BindingRestrictions restrictions, out Expression invokeMethodExpr) { Debug.Assert(target != null && target.Value != null); Debug.Assert(!(target.Value is IClrValue), "PhpRoutine should not be declared on CLR value type!"); /*if (target.Value is PhpObject) { // Restriction: typeof(target) == |target.TypeDesc.RealType| var targetPhpObj = (PhpObject)target.Value; Debug.Assert(targetPhpObj.TypeDesc.RealType == target.LimitType); Debug.Assert(target.Value.GetType() == target.LimitType); restrictions = BindingRestrictions.GetTypeRestriction(target.Expression, targetPhpObj.TypeDesc.RealType); } else*/ Debug.Assert(typeof(ClrObject).IsSealed); // just to ensure following condition is correct if (target.Value.GetType() == typeof(ClrObject)) { target = new ClrDynamicMetaObject(target); // unwrap the real object, get restrictions restrictions = target.Restrictions; } else { Debug.Assert(target.Value.GetType() == target.LimitType); // just for sure Debug.Assert(!(target.Value is PhpObject) || ((PhpObject)target.Value).TypeDesc.RealType == target.LimitType); restrictions = BindingRestrictions.GetTypeRestriction(target.Expression, target.LimitType); } BindingRestrictions argumentsRestrictions; Expression[] arguments; if (routine.Name != Name.SpecialMethodNames.Call) { args = GetArgumentsRange(args, 0, RealMethodArgumentCount);// This can't be done when _call method is invoked //Check if method has ArgAware attribute if ((routine.Properties & RoutineProperties.IsArgsAware) != 0 || routine.IsStatic)// this is because of hack in PHP.Library.XML library static methods that can be also called like instance methods { DynamicMetaObject scriptContext = args[0]; //Select arguments without scriptContext DynamicMetaObject[] realArgs = GetArgumentsRange(args, 1, RealMethodArgumentCount - 1); InvokeArgLess(target, scriptContext, routine.RoutineDesc, realArgs, out argumentsRestrictions, out invokeMethodExpr); restrictions = restrictions.Merge(argumentsRestrictions); return; } arguments = routine.PrepareArguments(args, _genericParamsCount, _paramsCount, out argumentsRestrictions); restrictions = restrictions.Merge(argumentsRestrictions); } else { arguments = BinderHelper.PackToExpressions(args); } //((PhpObject)target)) var realObjEx = Expression.Convert(target.Expression, routine.ArgFullInfo.DeclaringType);//targetObj.TypeDesc.RealType); //ArgFull( ((PhpObject)target), ScriptContext, args, ... ) invokeMethodExpr = Expression.Call(BinderHelper.WrapInstanceMethodCall(routine.ArgFullInfo), BinderHelper.CombineArguments(realObjEx, arguments)); invokeMethodExpr = ReturnArgumentHelpers.ReturnValueConversion(routine.ArgFullInfo, invokeMethodExpr); invokeMethodExpr = HandleResult(invokeMethodExpr, routine.ArgFullInfo.ReturnType, false); } #endregion } #region PhpIndirectInvokeMemberBinder public sealed class PhpIndirectInvokeMemberBinder : PhpInvokeMemberBinder { #region Fields private string actualMethodName; #endregion #region Properties /// /// Name of the actual method. /// /// /// Can change in the begining of the each binding /// protected override string ActualMethodName { get { return this.actualMethodName; } } #endregion #region Construction internal PhpIndirectInvokeMemberBinder(int genericParamsCount, int paramsCount, DTypeDesc callerClassContext, Type returnType) : base(null, genericParamsCount, paramsCount, callerClassContext, returnType) { } #endregion #region Methods ///// ///// Returns methodName from Args ///// ///// ///// //protected DynamicMetaObject GetRuntimeMethodName(DynamicMetaObject[] args) //{ // //if (args.Length == this.genericParamsCount + this.paramsCount + 3) // args contains ClassContext // // return args[this.genericParamsCount + this.paramsCount + 2]; // //else if (args.Length == this.genericParamsCount + this.paramsCount + 2) // // return args[this.genericParamsCount + this.paramsCount + 1]; // //throw new InvalidOperationException(); // return args[args.Length - 1]; //} protected override DynamicMetaObject/*!*/ FallbackInvokeMember( DynamicMetaObject target, DynamicMetaObject[] args) { Debug.Assert(Types.String[0].IsAssignableFrom(args[args.Length - 1].LimitType), "Wrong field name type!"); DynamicMetaObject dmoMethodName = args[args.Length - 1]; string name = PhpVariable.AsString(dmoMethodName.Value); if (name == null) { //PhpException.Throw(PhpError.Error, CoreResources.GetString("invalid_method_name")); //return new PhpReference() | null; return DoAndReturnDefault( BinderHelper.ThrowError("invalid_method_name"), target.Restrictions); throw new NotImplementedException(); } else { // Restriction: PhpVariable.AsString(methodName) == |methodName| BindingRestrictions restrictions = BindingRestrictions.GetExpressionRestriction( Expression.Equal( Expression.Call(Methods.PhpVariable.AsString, dmoMethodName.Expression), Expression.Constant(dmoMethodName.Value, Types.String[0]))); actualMethodName = name; //transform arguments that it doesn't contains methodName Array.Resize(ref args, args.Length - 1); DynamicMetaObject result = base.FallbackInvokeMember(target, args); return new DynamicMetaObject( result.Expression, result.Restrictions.Merge(restrictions));//TODO: Creation of this can be saved } } #endregion } #endregion } ================================================ FILE: Source/Core/Binders/PhpOverloadResolver.cs ================================================ #if DLR_OVERLOAD_RESOLUTION using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Text; using Microsoft.Scripting.Actions; using Microsoft.Scripting.Actions.Calls; using System.Dynamic; using Microsoft.Scripting.Runtime; using System.Reflection; using PHP.Core.Reflection; namespace PHP.Core.Binders { //public class PhpOverloadResolver : DefaultOverloadResolver //{ //} } #endif ================================================ FILE: Source/Core/Binders/PhpRoutineExtensions.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Dynamic; using System.Linq.Expressions; using PHP.Core.Emit; using PHP.Core.Reflection; namespace PHP.Core.Binders { internal static class PhpRoutineExtensions { /// /// Prepares arguments for argfull overload. /// /// Routine for which arguments should be prepared /// Arguments to be prepared for the routine /// Amount of generic arguments provided by call site. /// Amount of value arguments provided by call site. /// Type restrictions for the arguments /// Array of prepared arguments to be called with routine /// /// This is basically substitute for everything important that was done in argless overload (except it doesn't use PhpStack but evaluation stack). /// It adopts the arguments according to routine. e.g. dereference reference if value is needed, supplies default argument, etc. /// public static Expression[] PrepareArguments(this PhpRoutine routine, DynamicMetaObject[] arguments, int genericArguments, int regularArguments, out BindingRestrictions restrictions) { const int scriptContextIndex = 0; DynamicMetaObject arg; int result_offset = 0; int argument_offset = 0; Expression[] result = new Expression[1 + routine.Signature.GenericParamCount + routine.Signature.ParamCount];//ScriptContext + all arguments = actual arguments to be passed to argfull overload restrictions = BindingRestrictions.Empty; result[scriptContextIndex] = arguments[scriptContextIndex].Expression; ++result_offset; ++argument_offset; // peek pseudo-generic arguments: for (int i = 0; i < routine.Signature.GenericParamCount; ++i) { if (i < genericArguments) { arg = arguments[argument_offset + i]; } else { arg = null; } result[result_offset + i] = GeneratePeekPseudoGenericArgument(routine, arguments[scriptContextIndex], arg, i); // it isn't necessary to add restriction for type argument, it is always DTypeDesc } result_offset += routine.Signature.GenericParamCount; argument_offset += genericArguments; // peek regular arguments: // skip first one ScriptContext and generic parameters for (int i = 0; i < routine.Signature.ParamCount; ++i) { if (i < regularArguments) { arg = arguments[argument_offset + i]; if (arg.RuntimeType != null) restrictions = restrictions.Merge(BindingRestrictions.GetTypeRestriction(arguments[argument_offset + i].Expression, arguments[argument_offset + i].LimitType)); else restrictions = restrictions.Merge(BindingRestrictions.GetInstanceRestriction(arguments[argument_offset + i].Expression, null));//(MB) is it necessary? } else { arg = null; } result[result_offset + i] = GeneratePeekArgument(routine, arguments[scriptContextIndex], arg, i); } return result; } private static Expression/*!*/ GeneratePeekPseudoGenericArgument(PhpRoutine routine, DynamicMetaObject scriptContext, DynamicMetaObject arg, int index) { bool optional = index >= routine.Signature.MandatoryGenericParamCount; int indexTransformed = index + 1; // in PHP indexes of arguments starts from index 1 if (optional) return PeekTypeOptional(routine, scriptContext, arg, indexTransformed); else return PeekType(routine, scriptContext, arg, indexTransformed); } /// /// Generates expression for a given argument to fit formal argument of the give routine. /// /// Routine for which argument will be supplied. /// ScriptContext DynamicMetaObject /// Actual argument to be supplied to be supplied to routine. /// Index of the argument in a routine(not counting ScriptContext argument). /// The expression of an argument that is prepared to be supplied as an argument to the routine. private static Expression/*!*/ GeneratePeekArgument(PhpRoutine routine, DynamicMetaObject scriptContext, DynamicMetaObject arg, int argIndex) { bool optional = argIndex >= routine.Signature.MandatoryParamCount; int argIndexTransformed = argIndex + 1; // in PHP indexes of arguments starts from index 1 if (routine.Signature.IsAlias(argIndex)) { if (optional) return PeekReferenceOptional(routine, scriptContext, arg, argIndexTransformed); else return PeekReference(routine, scriptContext, arg, argIndexTransformed); } else { if (optional) return PeekValueOptional(routine, scriptContext, arg, argIndexTransformed); else return PeekValue(routine, scriptContext, arg, argIndexTransformed); } } private static Expression/*!*/ PeekValue(PhpRoutine routine, DynamicMetaObject scriptContext, DynamicMetaObject arg, int argIndex) { if (arg != null) { // peeks the value: return PeekValueUnchecked(routine, scriptContext, arg, argIndex); } else { return Expression.Block( BinderHelper.ThrowMissingArgument(argIndex, routine.FullName), Expression.Constant(null)); } } private static Expression/*!*/ PeekValueOptional(PhpRoutine routine, DynamicMetaObject scriptContext, DynamicMetaObject arg, int argIndex) { if (arg != null) { // peeks the value: return PeekValueUnchecked(routine, scriptContext, arg, argIndex); } else { // default value: return Expression.Constant(Arg.Default); } } private static Expression/*!*/ PeekValueUnchecked(PhpRoutine routine, DynamicMetaObject scriptContext, DynamicMetaObject arg, int argIndex) { // caller may have pushed a reference even if a formal argument is not reference => dereference it: if (Types.PhpReference[0].IsAssignableFrom(arg.LimitType)) // what about SmartReference { //object result = ((PhpReference)arg_i).Value; return Expression.Field(Expression.Convert(arg.Expression, Types.PhpReference[0]), Fields.PhpReference_Value); } else // caller may have pushed a runtime chain => evaluate it: if (arg.LimitType == Types.PhpRuntimeChain[0]) { //result = php_chain.GetValue(Context); return Expression.Call( Expression.Convert(arg.Expression, Types.PhpRuntimeChain[0]), Methods.PhpRuntimeChain.GetValue, scriptContext.Expression); } else { return arg.Expression; } } private static Expression/*!*/ PeekReference(PhpRoutine routine, DynamicMetaObject scriptContext, DynamicMetaObject arg, int argIndex) { if (arg != null) { // peeks the reference: return PeekReferenceUnchecked(routine, scriptContext, arg, argIndex); } else { return Expression.Block( BinderHelper.ThrowMissingArgument(argIndex, routine.FullName), Expression.New(Constructors.PhpReference_Void)); } } private static Expression/*!*/ PeekReferenceOptional(PhpRoutine routine, DynamicMetaObject scriptContext, DynamicMetaObject arg, int argIndex) { if (arg != null) { // peeks the value: return PeekReferenceUnchecked(routine, scriptContext, arg, argIndex); } else { // default value: return Expression.Constant(Arg.Default,Types.PhpReference[0]); } } private static Expression/*!*/ PeekReferenceUnchecked(PhpRoutine routine, DynamicMetaObject scriptContext, DynamicMetaObject arg, int argIndex) { // the caller may not pushed a reference although the formal argument is a reference: // it doesn't matter if called by callback: if (!Types.PhpReference[0].IsAssignableFrom(arg.LimitType)) { // caller may have pushed a runtime chain => evaluate it: if (arg.LimitType == Types.PhpRuntimeChain[0]) { //result = php_chain.GetReference(Context); return Expression.Call( Expression.Convert(arg.Expression, Types.PhpRuntimeChain[0]), Methods.PhpRuntimeChain.GetReference, scriptContext.Expression); } else { // the reason of copy is not exactly known (it may be returning by copy as well as passing by copy): // result = new PhpReference(PhpVariable.Copy(arg_i, CopyReason.Unknown)); ParameterExpression resultVariable = Expression.Parameter(Types.PhpReference[0], "result"); ParameterExpression[] vars = new ParameterExpression[] { resultVariable }; return Expression.Block(vars, Expression.Assign( resultVariable, Expression.New(Constructors.PhpReference_Object, Expression.Call(Methods.PhpVariable.Copy, arg.Expression, Expression.Constant(CopyReason.Unknown)))), BinderHelper.ThrowArgumentNotPassedByRef(argIndex, routine.FullName), resultVariable); //(MB) I'm not sure if it's necessary to execute these two in this order //Original code // //(MB) I don't have to solve this now, PhpCallback is called in a old manner. So I can just throw exception always now. // // Reports an error in the case that we are not called by callback. // Although, this error is fatal one can switch throwing exceptions off. // If this is the case the afterwards behavior will be the same as if callback was called. //if (!Callback) //{ // // warning (can invoke user code => we have to save and restore callstate): // CallState call_state = SaveCallState(); // PhpException.ArgumentNotPassedByRef(i, CalleeName); // RestoreCallState(call_state); //} } } else { return Expression.Convert(arg.Expression, arg.LimitType); } } private static Expression/*!*/ PeekType(PhpRoutine routine, DynamicMetaObject scriptContext, DynamicMetaObject arg, int argIndex) { if (arg != null) { // peeks the value: return Expression.Convert(arg.Expression, arg.LimitType); } else { return Expression.Block( BinderHelper.ThrowMissingTypeArgument(argIndex, routine.FullName), Expression.Constant(DTypeDesc.ObjectTypeDesc, Types.DTypeDesc[0])); } } private static Expression/*!*/ PeekTypeOptional(PhpRoutine routine, DynamicMetaObject scriptContext, DynamicMetaObject arg, int argIndex) { if (arg != null) { // peeks the value: return Expression.Convert(arg.Expression, arg.LimitType); } else { // default value: return Expression.Constant(Arg.DefaultType, Types.DTypeDesc[0]); } } } } ================================================ FILE: Source/Core/Binders/ReturnArgumentHelpers.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Linq.Expressions; using System.Reflection; using PHP.Core.Emit; namespace PHP.Core.Binders { internal static class ReturnArgumentHelpers { #region Return Value Conversion public static Expression/*!*/ ReturnValueConversion(MethodInfo method, Expression/*!*/ returnExpr) { Type returnType = method.ReturnType; if (returnType == null || returnType == Types.Void) return returnExpr; // nothing to be converted // whether to emit cast to false: if (method.ReturnTypeCustomAttributes.IsDefined(typeof(CastToFalseAttribute), false)) { var tmp = Expression.Variable(Types.Object[0]); ParameterExpression[] vars = new ParameterExpression[] { tmp }; if (returnType == typeof(int)) { return Expression.Block(Types.Object[0], vars, Expression.Assign(tmp, returnExpr), Expression.Condition(Expression.Equal( Expression.Convert(tmp,Types.Int[0]), Expression.Constant(-1)), Expression.Convert(Expression.Constant(false), Types.Object[0]), tmp)); } else { return Expression.Block(Types.Object[0], vars, Expression.Assign(tmp, returnExpr), Expression.Condition(Expression.Equal( tmp, Expression.Constant(null)), Expression.Convert(Expression.Constant(false),Types.Object[0]), tmp)); } } //TODO: else // deep copy: // if (method.ReturnTypeCustomAttributes.IsDefined(typeof(PhpDeepCopyAttribute), false) && !returnType.IsValueType) // { // // returnValue = ()PhpVariable.Copy(returnValue,CopyReason.ReturnedByCopy); // } return returnExpr; } #endregion } } ================================================ FILE: Source/Core/Comparisons.cs ================================================ /* Copyright (c) 2004-2006 Tomas Matousek and Ladislav Prosek. The use and distribution terms for this software are contained in the file named License.txt, which can be found in the root of the Phalanger distribution. By using this software in any fashion, you are agreeing to be bound by the terms of this license. You must not remove this notice from this software. */ using System; using System.Collections; using System.Diagnostics; using System.Globalization; using PHP.Core; using System.Collections.Generic; namespace PHP.Core { #region Interfaces /// /// Defines comparison methods which are used to compare PHP.NET types. /// public interface IPhpComparable { /// /// Compares the current instance with another object using default comparer. /// /// Object to compare with. /// -1,0,+1 /// Incomparable objects have been compared. int CompareTo(object obj); /// /// Compares the current instance with another object. /// /// /// Incomparable objects have been compared. int CompareTo(object obj, IComparer/*!*/ comparer); } /// /// Defines comparer which can be used to compare entries of a disctionary collection. /// public interface IDictionaryComparer { /// /// Compares two entries of a dictionary collection. /// /// int Compare(object keyA, object valueA, object keyB, object valueB); } #endregion #region Dictionary Comparers /// /// Compares keys of dictionary entries by specified comparer. /// public class KeyComparer : IComparer> { /// Regular comparer. public static readonly KeyComparer Default = new KeyComparer(PhpComparer.Default, false); /// Numeric comparer. public static readonly KeyComparer Numeric = new KeyComparer(PhpNumericComparer.Default, false); /// String comparer. public static readonly KeyComparer String = new KeyComparer(PhpStringComparer.Default, false); /// Array keys comparer. public static readonly KeyComparer ArrayKeys = new KeyComparer(PhpArrayKeysComparer.Default, false); /// Regular comparer with reverse order. public static readonly KeyComparer Reverse = new KeyComparer(PhpComparer.Default, true); /// Numeric comparer with reverse order. public static readonly KeyComparer ReverseNumeric = new KeyComparer(PhpNumericComparer.Default, true); /// String comparer with reverse order. public static readonly KeyComparer ReverseString = new KeyComparer(PhpStringComparer.Default, true); /// Locale string comparer with reverse order. public static readonly KeyComparer ReverseArrayKeys = new KeyComparer(PhpArrayKeysComparer.Default, true); /// /// The comparer which will be used to compare keys. /// private readonly IComparer/*!*/ comparer; // TODO: /// /// Plus or minus 1 depending on whether the comparer compares reversly. /// private readonly int reverse; /// /// Creates a new instance of the . /// /// The comparer which will be used to compare keys. /// Whether to compare reversly. public KeyComparer(IComparer/*!*/ comparer, bool reverse) // TODO: { if (comparer == null) throw new ArgumentNullException("comparer"); this.comparer = comparer; this.reverse = reverse ? -1 : +1; } ///// ///// Compares keys only. Values are not used to compare so their order will not change if sorting is stable. ///// ///// //public int Compare(object keyA, object valueA, object keyB, object valueB) //{ // return reverse * comparer.Compare(keyA, keyB); //} #region IComparer> Members public int Compare(KeyValuePair x, KeyValuePair y) { return reverse * comparer.Compare(x.Key.Object, y.Key.Object); } #endregion } /// /// Compares values of dictionary entries by specified comparer. /// public class ValueComparer : IComparer>/*!*/ { /// Regular comparer. public static readonly ValueComparer Default = new ValueComparer(PhpComparer.Default, false); /// Numeric comparer. public static readonly ValueComparer Numeric = new ValueComparer(PhpNumericComparer.Default, false); /// String comparer. public static readonly ValueComparer String = new ValueComparer(PhpStringComparer.Default, false); /// Regular comparer with reverse order. public static readonly ValueComparer Reverse = new ValueComparer(PhpComparer.Default, true); /// Numeric comparer with reverse order. public static readonly ValueComparer ReverseNumeric = new ValueComparer(PhpNumericComparer.Default, true); /// String comparer with reverse order. public static readonly ValueComparer ReverseString = new ValueComparer(PhpStringComparer.Default, true); /// The comparer which will be used to compare values. private IComparer/*!*/ comparer; /// Plus or minus 1 depending on whether the comparer compares reversly. private int reverse; /// /// Creates a new instance of the . /// /// The comparer which will be used to compare values. /// Whether to compare reversly. public ValueComparer(IComparer/*!*/ comparer, bool reverse) { if (comparer == null) throw new ArgumentNullException("comparer"); this.comparer = comparer; this.reverse = reverse ? -1 : +1; } ///// ///// Compares values only. Keys are not used to compare so their order will not change if sorting is stable. ///// ///// //public int Compare(object keyA,object valueA,object keyB,object valueB) //{ // return reverse*comparer.Compare(valueA,valueB); //} #region IComparer> Members public int Compare(KeyValuePair x, KeyValuePair y) { return reverse * comparer.Compare(x.Value, y.Value); } #endregion } /// /// Compares dictionary entries using specified value and key comparers. /// public class EntryComparer : IComparer> { private readonly IComparer/*!*/ keyComparer; // TODO: private readonly IComparer/*!*/ valueComparer; private readonly int keyReverse; private readonly int valueReverse; /// /// Creates a new instance of with specified value and key comparers. /// /// The comparer used on keys. /// Whether the the result of the key comparer is inversed. /// The comparer used on values. /// Whether the the result of the value comparer is inversed public EntryComparer(IComparer/*!*/ keyComparer, bool keyReverse, IComparer/*!*/ valueComparer, bool valueReverse) { // TODO: key: if (keyComparer == null) throw new ArgumentNullException("keyComparer"); if (valueComparer == null) throw new ArgumentNullException("valueComparer"); this.keyComparer = keyComparer; this.valueComparer = valueComparer; this.keyReverse = keyReverse ? -1 : +1; this.valueReverse = valueReverse ? -1 : +1; } ///// ///// Compares two entries. ///// ///// The first entry key. ///// The first entry value. ///// The second entry key. ///// The second entry value. ///// -1, 0, +1 //public int Compare(object keyA, object valueA, object keyB, object valueB) //{ // int kcmp = keyReverse*keyComparer.Compare(keyA,keyB); // if (kcmp!=0) return kcmp; // return valueReverse*valueComparer.Compare(valueA,valueB); //} #region IComparer> Members public int Compare(KeyValuePair x, KeyValuePair y) { int kcmp = keyReverse * keyComparer.Compare(x.Key.Object, y.Key.Object); if (kcmp != 0) return kcmp; return valueReverse * valueComparer.Compare(x.Value, y.Value); } #endregion } /// /// Implements equality comparer of objects, using given . /// public class ObjectEqualityComparer : IEqualityComparer { /// /// to use. /// private readonly IComparer/*!*/ comparer; public ObjectEqualityComparer(IComparer/*!*/ comparer) { if (comparer == null) throw new ArgumentNullException("comparer"); this.comparer = comparer; } #region IEqualityComparer bool IEqualityComparer.Equals(object x, object y) { return comparer.Compare(x, y) == 0; } int IEqualityComparer.GetHashCode(object obj) { return (obj != null) ? obj.GetHashCode() : 0; } #endregion } #endregion #region Regular Comparer /// /// Implements PHP regular comparison. /// public class PhpComparer : IComparer // TODO: , IComparer { /// Prevents from creating instances of this class. private PhpComparer() { } /// /// Default comparer used to compare objects where no other comparer is provided by user. /// public static readonly PhpComparer/*!*/ Default = new PhpComparer(); #region Compare /// /// Compares two objects in a manner of the PHP regular comparison. /// /// /// /// If true, functions throws ArgumentException for incomparable objects. /// public static int CompareOp(object x, object y, bool throws) { // the following trick is used when comparing booleans: // F,F = 1-1 = 0 => F==F // F,T = 1-2 = -1 => F T>F // T,T = 2-2 = 0 => T==T // code marked as OBSOLETE is implementing NULL comparison such that NULL is considered as 0/0.0/false/"" // actual PHP comparison treats NULL as less or equal to any value if (x == null) { if (y == null) return 0; // x == null if (y.GetType() == typeof(int)) return ((int)y == 0) ? 0 : -1; // obsolete: -Math.Sign((int)y); // x == 0 if (y.GetType() == typeof(long)) return ((long)y == 0) ? 0 : -1; if (y.GetType() == typeof(double)) return ((double)y == 0.0) ? 0 : -1;// obsolete: CompareDouble(0.0,(double)y); // x == 0.0 if (y.GetType() == typeof(string)) return ((string)y == "") ? 0 : -1; // obsolete: sy==String.Empty ? 0:-1; // x == "" if (y.GetType() == typeof(bool)) return ((bool)y == false) ? 0 : -1;// obsolete: (bool)y ? 1:0; // x == false } else if (x.GetType() == typeof(int)) { if (y == null) return ((int)x == 0) ? 0 : 1; // obsolete: Math.Sign((int)x); // y == 0 if (y.GetType() == typeof(int)) return ((int)x < (int)y ? -1 : ((int)x > (int)y ? 1 : 0)); if (y.GetType() == typeof(long)) return ((int)x < (long)y ? -1 : ((int)x > (long)y ? 1 : 0)); if (y.GetType() == typeof(double)) return CompareDouble((int)x, (double)y); if (y.GetType() == typeof(string)) return -CompareString((string)y, (int)x); if (y.GetType() == typeof(bool)) return ((int)x != 0 ? 2 : 1) - ((bool)y ? 2 : 1); } else if (x.GetType() == typeof(long)) { if (y == null) return ((long)x == 0) ? 0 : 1; // obsolete: Math.Sign((int)x); // y == 0 if (y.GetType() == typeof(int)) return ((long)x < (int)y ? -1 : ((long)x > (int)y ? 1 : 0)); if (y.GetType() == typeof(long)) return ((long)x < (long)y ? -1 : ((long)x > (long)y ? 1 : 0)); if (y.GetType() == typeof(double)) return CompareDouble((long)x, (double)y); if (y.GetType() == typeof(string)) return -CompareString((string)y, (long)x); if (y.GetType() == typeof(bool)) return ((long)x != 0 ? 2 : 1) - ((bool)y ? 2 : 1); } else if (x.GetType() == typeof(double)) { if (y == null) return ((double)x == 0.0) ? 0 : 1; // obsolete: CompareDouble((double)x,0.0); // y == 0.0 if (y.GetType() == typeof(double)) return CompareDouble((double)x, (double)y); if (y.GetType() == typeof(int)) return CompareDouble((double)x, (int)y); if (y.GetType() == typeof(long)) return CompareDouble((double)x, (long)y); if (y.GetType() == typeof(string)) return -CompareString((string)y, (double)x); if (y.GetType() == typeof(bool)) return ((double)x != 0.0 ? 2 : 1) - ((bool)y ? 2 : 1); } else if (x.GetType() == typeof(string)) { if (y == null) return (string)x == "" ? 0 : 1; // y == "" if (y.GetType() == typeof(string)) return CompareString((string)x, (string)y); if (y.GetType() == typeof(int)) return CompareString((string)x, (int)y); if (y.GetType() == typeof(long)) return CompareString((string)x, (long)y); if (y.GetType() == typeof(double)) return CompareString((string)x, (double)y); if (y.GetType() == typeof(bool)) return (Convert.StringToBoolean((string)x) ? 2 : 1) - ((bool)y ? 2 : 1); } else if (x.GetType() == typeof(bool)) { return ((bool)x ? 2 : 1) - (Convert.ObjectToBoolean(y) ? 2 : 1); } try { return CompareOp_Nonliterals(x, y); } catch (ArgumentException) { if (throws) throw; PhpException.Throw(PhpError.Warning, CoreResources.GetString("incomparable_objects_compared")); return 0; } } /// /// Compare given objects, assuming they are IPhpComparable (PhpReference, PhpArray, PhpObject, PhpResource, PhpBytes). Otherwise it compares references. /// /// /// /// /// If x and y are incomparable, ArgumentException is thrown. private static int CompareOp_Nonliterals(object x, object y) { IPhpComparable cmp; // PHP variables: if ((cmp = x as IPhpComparable) != null) return cmp.CompareTo(y, Default); if ((cmp = y as IPhpComparable) != null) return -cmp.CompareTo(x, Default); if (x != y) CompareOp_ThrowHelper(x, y); return 0; } /// /// Throws with information about arguments type. /// /// Left operand. /// Right operand. /// Always throws. private static void CompareOp_ThrowHelper(object x, object y) { throw new ArgumentException( string.Format(CoreResources.incomparable_objects_compared_exception, (x != null) ? x.GetType().ToString() : PhpVariable.TypeNameNull, (y != null) ? y.GetType().ToString() : PhpVariable.TypeNameNull)); } public static int CompareOp(int x, int y) { return (x < y ? -1 : (x > y ? 1 : 0)); } public static int CompareOp(object x, int y, bool throws) { // copied from CompareOp(object,object,bool) if (x == null) { return ((int)y == 0) ? 0 : -1; // obsolete: -Math.Sign((int)y); // x == 0 } else if (x.GetType() == typeof(int)) { return ((int)x < (int)y ? -1 : ((int)x > (int)y ? 1 : 0)); } else if (x.GetType() == typeof(long)) { return ((long)x < (int)y ? -1 : ((long)x > (int)y ? 1 : 0)); } else if (x.GetType() == typeof(double)) { return CompareDouble((double)x, (int)y); } else if (x.GetType() == typeof(string)) { return CompareString((string)x, (int)y); } else if (x.GetType() == typeof(bool)) { return ((bool)x ? 2 : 1) - (Convert.ObjectToBoolean(y) ? 2 : 1); } try { return CompareOp_Nonliterals(x, y); } catch (ArgumentException) { if (throws) throw; PhpException.Throw(PhpError.Warning, CoreResources.GetString("incomparable_objects_compared")); return 0; } } public static int CompareOp(int x, object y, bool throws) { // copied from CompareOp(object,object,bool) //if (x is int) { if (y == null) return ((int)x == 0) ? 0 : 1; // obsolete: Math.Sign((int)x); // y == 0 if (y.GetType() == typeof(int)) return ((int)x < (int)y ? -1 : ((int)x > (int)y ? 1 : 0)); if (y.GetType() == typeof(long)) return ((int)x < (long)y ? -1 : ((int)x > (long)y ? 1 : 0)); if (y.GetType() == typeof(double)) return CompareDouble((int)x, (double)y); if (y.GetType() == typeof(string)) return -CompareString((string)y, (int)x); if (y.GetType() == typeof(bool)) return ((int)x != 0 ? 2 : 1) - ((bool)y ? 2 : 1); } try { return CompareOp_Nonliterals(x, y); } catch (ArgumentException) { if (throws) throw; PhpException.Throw(PhpError.Warning, CoreResources.GetString("incomparable_objects_compared")); return 0; } } /// /// Compares two objects in a manner of the PHP regular comparison. /// /// public int Compare(object x, object y) { return CompareOp(x, y, true); } #endregion #region CompareEq /// /// Compares two objects for equality in a manner of the PHP regular comparison. /// /// The first object. /// The second object. /// Whether the values of operands are the same. /// Faster than Compare(x,y) == 0. [Emitted] public static bool CompareEq(object x, object y) { if (x == null) { if (y == null) return true; // y == null if (y.GetType() == typeof(int)) return (int)y == 0; // y == 0 if (y.GetType() == typeof(long)) return (long)y == 0; // y == 0 if (y.GetType() == typeof(double)) return (double)y == 0.0; // y == 0.0 if (y.GetType() == typeof(string)) return (string)y == String.Empty; // y == "" if (y.GetType() == typeof(bool)) return !(bool)y; // y == false } else if (x.GetType() == typeof(int)) { if (y == null) return (int)x == 0; // y == 0 if (y.GetType() == typeof(int)) return (int)x == (int)y; if (y.GetType() == typeof(long)) return (long)(int)x == (long)y; if (y.GetType() == typeof(double)) return (double)(int)x == (double)y; if (y.GetType() == typeof(string)) return CompareStringEq((string)y, (int)x); if (y.GetType() == typeof(bool)) return ((int)x != 0) == (bool)y; } else if (x.GetType() == typeof(long)) { if (y == null) return (long)x == 0; // y == 0 if (y.GetType() == typeof(long)) return (long)x == (long)y; if (y.GetType() == typeof(int)) return (long)x == (long)(int)y; if (y.GetType() == typeof(double)) return (double)(long)x == (double)y; if (y.GetType() == typeof(string)) return CompareStringEq((string)y, (long)x); if (y.GetType() == typeof(bool)) return ((long)x != 0) == (bool)y; } else if (x.GetType() == typeof(double)) { if (y == null) return (double)x == 0.0; // y == 0.0 if (y.GetType() == typeof(double)) return (double)x == (double)y; if (y.GetType() == typeof(int)) return (double)x == (double)(int)y; if (y.GetType() == typeof(long)) return (double)x == (double)(long)y; if (y.GetType() == typeof(string)) return CompareStringEq((string)y, (double)x); if (y.GetType() == typeof(bool)) return ((double)x != 0.0) == (bool)y; } else if (x.GetType() == typeof(string)) { if (y == null) return (string)x == String.Empty; // y == "" if (y.GetType() == typeof(string)) return CompareString((string)x, (string)y) == 0; if (y.GetType() == typeof(int)) return CompareString((string)x, (int)y) == 0; if (y.GetType() == typeof(long)) return CompareString((string)x, (long)y) == 0; if (y.GetType() == typeof(double)) return CompareStringEq((string)x, (double)y); if (y.GetType() == typeof(bool)) return Convert.StringToBoolean((string)x) == (bool)y; } else if (x.GetType() == typeof(bool)) { return (bool)x == Convert.ObjectToBoolean(y); } try { return (CompareOp_Nonliterals(x, y) == 0); } catch (ArgumentException) { return false; } } /// /// Compares two objects for equality in a manner of the PHP regular comparison. /// /// The first object. /// The second object. /// Whether the values of operands are the same. /// Faster than Compare(x,y) == 0. [Emitted] public static bool CompareEq(object x, string/*!*/y) { Debug.Assert(y != null); if (x == null) { if (y == null) return true; return string.IsNullOrEmpty(y); } else if (x.GetType() == typeof(string)) { if (y == null) return (string)x == string.Empty; return CompareString((string)x, (string)y) == 0; } else if (x.GetType() == typeof(int)) { if (y == null) return (int)x == 0; return CompareStringEq((string)y, (int)x); } else if (x.GetType() == typeof(long)) { if (y == null) return (long)x == 0; return CompareStringEq((string)y, (long)x); } else if (x.GetType() == typeof(double)) { if (y == null) return (double)x == 0.0; return CompareStringEq((string)y, (double)x); } else if (x.GetType() == typeof(bool)) { return (bool)x == Convert.StringToBoolean(y); } try { return (CompareOp_Nonliterals(x, y) == 0); } catch (ArgumentException) { return false; } } /// /// Compares two objects for equality in a manner of the PHP regular comparison. /// /// The first object. /// The second object. /// Whether the values of operands are the same. /// Faster than Compare(x,y) == 0. [Emitted] public static bool CompareEq(object x, int y) { if (x == null) { return y == 0; // y == 0 } else if (x.GetType() == typeof(int)) { return (int)x == y; } else if (x.GetType() == typeof(long)) { return (long)x == (long)y; } else if (x.GetType() == typeof(double)) { return (double)x == (double)y; } else if (x.GetType() == typeof(string)) { return CompareString((string)x, y) == 0; } else if (x.GetType() == typeof(bool)) { return (bool)x == (y != 0); } try { return (CompareOp_Nonliterals(x, y) == 0); } catch (ArgumentException) { return false; } } #endregion #region Auxiliary comparisons /// /// Compares two double values. /// /// (+1,0,-1) /// We cannot used on x - y since the result can be NaN. public static int CompareDouble(double x, double y) { return (x > y) ? +1 : (x < y ? -1 : 0); } /// /// Compares two integer values. /// /// (+1,0,-1) /// We cannot used on x - y since the result can overflow. public static int CompareInteger(int x, int y) { return (x > y) ? +1 : (x < y ? -1 : 0); } /// /// Compares two long integer values. /// /// (+1,0,-1) public static int CompareLongInteger(long x, long y) { return (x > y) ? +1 : (x < y ? -1 : 0); } /// /// Compares string in a manner of PHP. /// /// /// Note that this comparison is not transitive (e.g. {"2","10","10a"} leads to a contradiction). public static int CompareString(string/*!*/ x, string/*!*/ y) { Debug.Assert(x != null && y != null); int ix, iy; long lx, ly; double dx, dy; Convert.NumberInfo info_x, info_y; info_x = Convert.StringToNumber(x, out ix, out lx, out dx); // an operand is not entirely convertable to numbers => string comparison is performed: if ((info_x & Convert.NumberInfo.IsNumber) == 0) return String.CompareOrdinal(x, y); info_y = Convert.StringToNumber(y, out iy, out ly, out dy); // an operand is not entirely convertable to numbers => string comparison is performed: if ((info_y & Convert.NumberInfo.IsNumber) == 0) return String.CompareOrdinal(x, y); // at least one operand has been converted to double: if (((info_x | info_y) & Convert.NumberInfo.Double) != 0) return CompareDouble(dx, dy); // compare integers: return CompareLongInteger(lx, ly); } /// /// Compares a with . /// /// public static int CompareString(string/*!*/ x, int y) { Debug.Assert(x != null); int ix; double dx; long lx; switch (Convert.StringToNumber(x, out ix, out lx, out dx) & Convert.NumberInfo.TypeMask) { case Convert.NumberInfo.Double: return CompareDouble(dx, y); case Convert.NumberInfo.Integer: return CompareInteger(ix, y); case Convert.NumberInfo.LongInteger: return CompareLongInteger(lx, y); default: Debug.Fail(null); throw null; } } /// /// Compares a with . /// /// public static int CompareString(string/*!*/ x, long y) { Debug.Assert(x != null); int ix; double dx; long lx; switch (Convert.StringToNumber(x, out ix, out lx, out dx) & Convert.NumberInfo.TypeMask) { case Convert.NumberInfo.Double: return CompareDouble(dx, y); case Convert.NumberInfo.Integer: return CompareLongInteger(ix, y); case Convert.NumberInfo.LongInteger: return CompareLongInteger(lx, y); default: Debug.Fail(null); throw null; } } /// /// Compares a with . /// /// public static int CompareString(string/*!*/ x, double y) { Debug.Assert(x != null); int ix; double dx; long lx; switch (Convert.StringToNumber(x, out ix, out lx, out dx) & Convert.NumberInfo.TypeMask) { case Convert.NumberInfo.Double: return CompareDouble(dx, y); case Convert.NumberInfo.Integer: return CompareDouble(ix, y); case Convert.NumberInfo.LongInteger: return CompareDouble(lx, y); default: Debug.Fail(null); throw null; } } /// /// Compares two objects for equality in a manner of the PHP regular comparison. /// /// The first object. /// The second object. /// Whether the values of operands are the same. public static bool CompareStringEq(string/*!*/ x, int y) { Debug.Assert(x != null); int ix; double dx; long lx; switch (Convert.StringToNumber(x, out ix, out lx, out dx) & Convert.NumberInfo.TypeMask) { case Convert.NumberInfo.Double: return dx == y; case Convert.NumberInfo.Integer: return ix == y; case Convert.NumberInfo.LongInteger: return lx == y; default: Debug.Fail(null); throw null; } } /// /// Compares two objects for equality in a manner of the PHP regular comparison. /// /// The first object. /// The second object. /// Whether the values of operands are the same. public static bool CompareStringEq(string/*!*/ x, long y) { Debug.Assert(x != null); int ix; double dx; long lx; switch (Convert.StringToNumber(x, out ix, out lx, out dx) & Convert.NumberInfo.TypeMask) { case Convert.NumberInfo.Double: return dx == y; case Convert.NumberInfo.Integer: return ix == y; case Convert.NumberInfo.LongInteger: return lx == y; default: Debug.Fail(null); throw null; } } /// /// Compares two objects for equality in a manner of the PHP regular comparison. /// /// The first object. /// The second object. /// Whether the values of operands are the same. public static bool CompareStringEq(string/*!*/ x, double y) { Debug.Assert(x != null); int ix; double dx; long lx; switch (Convert.StringToNumber(x, out ix, out lx, out dx) & Convert.NumberInfo.TypeMask) { case Convert.NumberInfo.Double: return dx == y; case Convert.NumberInfo.Integer: return ix == y; case Convert.NumberInfo.LongInteger: return lx == y; default: Debug.Fail(null); throw null; } } #endregion } #endregion #region Numeric Comparer /// /// Implements PHP numeric comparison. /// public class PhpNumericComparer : IComparer { /// Prevents from creating instances of this class. private PhpNumericComparer() { } /// /// Default comparer used to compare objects where no other comparer is provided by user. /// public static readonly PhpNumericComparer/*!*/ Default = new PhpNumericComparer(); /// /// Compares two objects in a manner of PHP numeric comparison. /// /// public int Compare(object x, object y) { int ix, iy; long lx, ly; double dx, dy; Convert.NumberInfo info_x, info_y; info_x = Convert.ObjectToNumber(x, out ix, out lx, out dx); info_y = Convert.ObjectToNumber(y, out iy, out ly, out dy); // at least one operand has been converted to double: if (((info_x | info_y) & Convert.NumberInfo.Double) != 0) return PhpComparer.CompareDouble(dx, dy); // compare integers: return PhpComparer.CompareLongInteger(lx, ly); } } #endregion #region String Comparer /// /// Implements PHP string comparison. /// public class PhpStringComparer : IComparer { /// Prevents from creating instances of this class. private PhpStringComparer() { } /// /// Default comparer used to compare objects where no other comparer is provided by user. /// public static readonly PhpStringComparer Default = new PhpStringComparer(); /// /// Compares two objects in a manner of PHP string comparison. /// /// public int Compare(object x, object y) { return String.CompareOrdinal(Convert.ObjectToString(x), Convert.ObjectToString(y)); } } #endregion #region Locale String Comparer /// /// Implements PHP locale string comparison. /// public class PhpLocaleStringComparer : IComparer { /// /// A culture used for comparison. /// public CultureInfo Culture { get { return culture; } } private readonly CultureInfo culture; /// /// Whether the comparer is ignoring case. /// public bool IgnoreCase { get { return ignoreCase; } } private readonly bool ignoreCase; /// /// Creates a new string comparer with a specified culture. /// public PhpLocaleStringComparer(CultureInfo culture, bool ignoreCase) { this.culture = (culture != null) ? culture : CultureInfo.InvariantCulture; this.ignoreCase = ignoreCase; } /// /// Compares two objects in a manner of PHP string comparison. /// /// public int Compare(object x, object y) { #if SILVERLIGHT return String.Compare(Convert.ObjectToString(x), Convert.ObjectToString(y), culture, ignoreCase?CompareOptions.IgnoreCase:CompareOptions.None); #else return String.Compare(Convert.ObjectToString(x), Convert.ObjectToString(y), ignoreCase, culture); #endif } } #endregion #region ArrayKeys Comparer /// /// Implements comparison of PHP array keys. /// public class PhpArrayKeysComparer : IComparer, IComparer { /// Prevents from creating instances of this class. private PhpArrayKeysComparer() { } /// /// Default comparer. /// public static readonly PhpArrayKeysComparer Default = new PhpArrayKeysComparer(); /// /// Compares keys of an array. /// /// /// /// Keys are compared as strings if at least one of them is a string /// otherwise they have to be integers and so they are compared as integers. /// public int Compare(IntStringKey x, IntStringKey y) { return x.CompareTo(y); } #region IComparer Members public int Compare(object x, object y) { IntStringKey keyx = (x is IntStringKey ? (IntStringKey)x : new IntStringKey(x)); IntStringKey keyy = (y is IntStringKey ? (IntStringKey)y : new IntStringKey(y)); return Compare(keyx, keyy); } #endregion } #endregion #region Natural Comparer /// /// Implements PHP natural comparison. /// public class PhpNaturalComparer : IComparer { /// Whether comparisons will be case insensitive. private bool caseInsensitive; /// Default case sensitive comparer. public static readonly PhpNaturalComparer Default = new PhpNaturalComparer(false); /// Case insensitive comparer. public static readonly PhpNaturalComparer CaseInsensitive = new PhpNaturalComparer(true); /// Prevents from creating instances of this class. /// Whether comparisons will be case insensitive. public PhpNaturalComparer(bool caseInsensitive) { this.caseInsensitive = caseInsensitive; } /// /// Compares two objects using the natural ordering. /// /// public int Compare(object x, object y) { return CompareStrings(Convert.ObjectToString(x), Convert.ObjectToString(y)); } /// /// Compares two strings using the natural ordering. /// /// public int CompareStrings(string x, string y) { if (x == null) x = String.Empty; if (y == null) y = String.Empty; int length_l = x.Length, length_g = y.Length; if (length_l == 0 || length_g == 0) return length_l - length_g; int i = 0, j = 0; do { char lc = x[i], gc = y[j]; // skip white spaces if (Char.IsWhiteSpace(lc)) { i++; continue; } if (Char.IsWhiteSpace(gc)) { j++; continue; } if (Char.IsDigit(lc) && Char.IsDigit(gc)) { // compare numbers int result = (lc == '0' || gc == '0') ? CompareLeft(x, y, ref i, ref j) : CompareRight(x, y, ref i, ref j); if (result != 0) return result; } else { // compare letters if (caseInsensitive) { lc = Char.ToLower(lc); gc = Char.ToLower(gc); } if (lc < gc) return -1; if (lc > gc) return 1; i++; j++; } } while (i < length_l && j < length_g); if (i < length_l) return 1; if (j < length_g) return -1; return 0; } /// /// Compares two strings with left-aligned numbers, the first to have a different value wins. /// /// String that contains the first number. /// String that contains the second number. /// Index in where the first number begins. Is set to the index /// immediately following the number after returning from this method. /// Index in where the second number begins. Is set to the index /// immediately following the number after returning from this method. /// /// Negative integer if the first number is less than the second number, /// zero if the two numbers are equal and /// positive integer if the first number is greater than the second number. /// Assumes neither nor parameter is null. private int CompareLeft(string x, string y, ref int i, ref int j) { Debug.Assert(x != null && y != null); int length_l = x.Length, length_g = y.Length; while (true) { bool bl = (i == length_l || !Char.IsDigit(x[i])); bool bg = (j == length_g || !Char.IsDigit(y[j])); if (bl && bg) return 0; if (bl) return -1; if (bg) return 1; if (x[i] < y[j]) return -1; if (x[i] > y[j]) return 1; i++; j++; } } /// /// Compares two strings with right-aligned numbers, The longest run of digits wins. /// /// String that contains the first number. /// String that contains the second number. /// Index in where the first number begins. Is set to the index /// immediately following the number after returning from this method. /// Index in where the second number begins. Is set to the index /// immediately following the number after returning from this method. /// /// Negative integer if the first number is less than the second number, /// zero if the two numbers are equal and /// positive integer if the first number is greater than the second number. /// Assumes neither nor parameter is null. internal int CompareRight(string x, string y, ref int i, ref int j) { Debug.Assert(x != null && y != null); int length_l = x.Length, length_g = y.Length; // That aside, the greatest value wins, but we can't know that it will until we've scanned both numbers to // know that they have the same magnitude, so we remember it in "bias". int bias = 0; while (true) { bool bl = (i == length_l || !Char.IsDigit(x[i])); bool bg = (j == length_g || !Char.IsDigit(y[j])); if (bl && bg) return bias; if (bl) return -1; if (bg) return 1; if (x[i] < y[j]) { if (bias == 0) bias = -1; } else if (x[i] > y[j]) { if (bias == 0) bias = 1; } i++; j++; } } } #endregion #region User Comparer /// /// Implements PHP numeric comparison. /// public class PhpUserComparer : IComparer { /// User defined PHP method used to compare given objects. private PhpCallback compare; /// /// Creates a new instance of a comparer using for comparisons. /// /// User callback which provides comparing functionality. /// /// /// Callback should have the signature object(object,object) and should already be bound. /// /// /// The result of calback's invocation is converted to a double by /// and than the sign is taken as a result of the comparison. /// /// is a null reference. /// callback is not bound. public PhpUserComparer(PhpCallback compare) { if (compare == null) throw new ArgumentNullException("compare"); if (!compare.IsBound) throw new ArgumentException(CoreResources.GetString("callback_not_bound"), "compare"); this.compare = compare; } /// /// Compares two objects in a manner of PHP numeric comparison. /// /// public int Compare(object x, object y) { return PhpComparer.CompareDouble(Convert.ObjectToDouble(compare.Invoke(x, y)), 0.0); } } #endregion } ================================================ FILE: Source/Core/Compiler/AST/ArrayEx.cs ================================================ /* Copyright (c) 2013 DEVSENSE The use and distribution terms for this software are contained in the file named License.txt, which can be found in the root of the Phalanger distribution. By using this software in any fashion, you are agreeing to be bound by the terms of this license. You must not remove this notice from this software. */ using System; using System.Collections; using System.Collections.Generic; using System.Reflection.Emit; using System.Diagnostics; using PHP.Core; using PHP.Core.AST; using PHP.Core.Emit; using PHP.Core.Parsers; namespace PHP.Core.Compiler.AST { partial class NodeCompilers { [NodeCompiler(typeof(ArrayEx))] sealed class ArrayExCompiler : VarLikeConstructUseCompiler { #region Analysis public override Evaluation Analyze(ArrayEx node, Analyzer analyzer, ExInfoFromParent info) { access = info.Access; foreach (var i in node.Items) if (i != null) i.NodeCompiler().Analyze(i, analyzer); return new Evaluation(node); } #endregion #region Code Emission /// It suffice to make a copy only if assignment nesting level is 1 or above (we are starting from 0). public override bool IsDeeplyCopied(ArrayEx node, CopyReason reason, int nestingLevel) { return nestingLevel > 0; } public override PhpTypeCode Emit(ArrayEx node, CodeGenerator codeGenerator) { Debug.Assert(access == AccessType.Read || access == AccessType.None); ILEmitter il = codeGenerator.IL; // count integer and string keys: int int_count = 0; int string_count = 0; DetermineCapacities(node, out int_count, out string_count); // array = new PhpArray(, ); il.Emit(OpCodes.Ldc_I4, int_count); il.Emit(OpCodes.Ldc_I4, string_count); il.Emit(OpCodes.Newobj, Constructors.PhpArray.Int32_Int32); if (codeGenerator.Context.Config.Compiler.Debug) { il.Emit(OpCodes.Nop); il.Emit(OpCodes.Nop); il.Emit(OpCodes.Nop); } foreach (var item in node.Items) { var itemcompiler = item.NodeCompiler(); // CALL array.SetArrayItemRef(z, p); // CALL array.SetArrayItem(x, PhpVariable.Copy(y, CopyReason.Assigned)); // CALL array.SetArrayItem(PhpVariable.Copy(x, CopyReason.Assigned)) // CALL array.AddToEnd(x) il.Emit(OpCodes.Dup); PhpTypeCode index_type_code = itemcompiler.EmitIndex(item, codeGenerator); itemcompiler.EmitValue(item, codeGenerator); codeGenerator.EmitSetArrayItem(index_type_code, item.Index, item is RefItem, true); } switch (this.access) { case AccessType.Read: // keep array on the stack return PhpTypeCode.PhpArray; case AccessType.None: // pop array from the stack il.Emit(OpCodes.Pop); return PhpTypeCode.Void; } throw new InvalidOperationException(); //return PhpTypeCode.Invalid; } private void DetermineCapacities(ArrayEx node, out int intCount, out int stringCount) { intCount = 0; stringCount = 0; foreach (var item in node.Items) { if (item.HasKey) { if (item.IsIndexStringLiteral) stringCount++; else intCount++; // Item is IntLiteral, Variable, Constant, etc. } else intCount++; } } #endregion } #region ItemCompiler abstract class ItemCompiler : INodeCompiler { internal virtual void Analyze(Item/*!*/node, Analyzer/*!*/ analyzer) { if (node.Index != null) node.Index = node.Index.Analyze(analyzer, ExInfoFromParent.DefaultExInfo).Literalize(); } /// /// Emit IL instructions that load the value of array index at the stack. /// internal PhpTypeCode EmitIndex(Item/*!*/node, CodeGenerator/*!*/ codeGenerator) { return codeGenerator.EmitArrayKey(null, node.Index); } internal abstract PhpTypeCode EmitValue(Item/*!*/node, CodeGenerator/*!*/ codeGenerator); } #endregion #region ValueItemCompiler [NodeCompiler(typeof(ValueItem), Singleton = true)] sealed class ValueItemCompiler : ItemCompiler { internal override void Analyze(Item node, Analyzer analyzer) { var valueitem = (ValueItem)node; base.Analyze(node, analyzer); valueitem.ValueExpr = valueitem.ValueExpr.Analyze(analyzer, ExInfoFromParent.DefaultExInfo).Literalize(); } /// /// Emit IL instructions that load the value of array item at the stack and make a copy /// of it if necessary. /// internal override PhpTypeCode EmitValue(Item/*!*/node, CodeGenerator/*!*/ codeGenerator) { var valueitem = (ValueItem)node; Debug.Assert(valueitem.ValueExpr != null); Statistics.AST.AddNode("Array.ValueItem"); codeGenerator.EmitBoxing(valueitem.ValueExpr.Emit(codeGenerator)); codeGenerator.EmitVariableCopy(CopyReason.Assigned, valueitem.ValueExpr); return PhpTypeCode.Object; } } #endregion #region RefItemCompiler /// /// Reference to a variable containing the value of an array item defined by array constructor. /// [NodeCompiler(typeof(RefItem), Singleton = true)] sealed class RefItemCompiler : ItemCompiler { internal override void Analyze(Item node, Analyzer analyzer) { ExInfoFromParent info = new ExInfoFromParent(node); info.Access = AccessType.ReadRef; ((RefItem)node).RefToGet.Analyze(analyzer, info); base.Analyze(node, analyzer); } /// /// Emit IL instructions that load the value of array item at the stack and make a copy /// of it if necessary. /// /// Instance. /// /// /// This node represents the item x=>&y in PHP notation. See /// for more details. internal override PhpTypeCode EmitValue(Item node, CodeGenerator codeGenerator) { Debug.Assert(((RefItem)node).RefToGet != null); Statistics.AST.AddNode("Array.RefItem"); // Emit refToGet return ((RefItem)node).RefToGet.Emit(codeGenerator); } } #endregion } } ================================================ FILE: Source/Core/Compiler/AST/AssignEx.cs ================================================ /* Copyright (c) 2004-2006 Tomas Matousek, Vaclav Novak and Martin Maly. The use and distribution terms for this software are contained in the file named License.txt, which can be found in the root of the Phalanger distribution. By using this software in any fashion, you are agreeing to be bound by the terms of this license. You must not remove this notice from this software. */ using System; using System.Reflection.Emit; using System.Diagnostics; using PHP.Core.AST; using PHP.Core.Emit; using PHP.Core.Parsers; namespace PHP.Core.Compiler.AST { partial class NodeCompilers { abstract class AssignExCompiler : ExpressionCompiler { /// /// Whether an expression represented by this node should be stored to a temporary local if assigned. /// public override bool StoreOnAssignment(AssignEx node) { return false; } } #region ValueAssignEx [NodeCompiler(typeof(ValueAssignEx))] sealed class ValueAssignExCompiler : AssignExCompiler { /// /// Instance. /// /// The copy-on-assignment value of the right hand side. /// public override bool IsDeeplyCopied(AssignEx node, CopyReason reason, int nestingLevel) { return true; // J: once assigned value must be copied again // rvalue.IsDeeplyCopied(reason, nestingLevel + 1); } #region Analysis public override Evaluation Analyze(AssignEx node, Analyzer analyzer, ExInfoFromParent info) { access = info.Access; var valueassignex = (ValueAssignEx)node; ExInfoFromParent lvalue_info = new ExInfoFromParent(node); // x[] = y if (node.LValue is ItemUse && ((ItemUse)node.LValue).Index == null) if (node.Operation != Operations.AssignValue) { var oldop = node.Operation; valueassignex.operation = Operations.AssignValue; // x[] .= y -> x[] = null . y if (oldop == Operations.AssignAppend) valueassignex.rvalue = new BinaryEx(node.Span, Operations.Concat, new NullLiteral(node.Span), valueassignex.rvalue); // x[] += y -> x[] = 0 + y else if (oldop == Operations.AssignAdd) valueassignex.rvalue = new BinaryEx(node.Span, Operations.Add, new NullLiteral(node.Span), valueassignex.rvalue); // x[] -= y -> x[] = 0 - y else if (oldop == Operations.AssignSub) valueassignex.rvalue = new BinaryEx(node.Span, Operations.Sub, new NullLiteral(node.Span), valueassignex.rvalue); // x[] *= y -> x[] = 0 * y else if (oldop == Operations.AssignMul) valueassignex.rvalue = new BinaryEx(node.Span, Operations.Mul, new NullLiteral(node.Span), valueassignex.rvalue); // x[] **= y -> x[] = 0 * y else if (oldop == Operations.AssignPow) valueassignex.rvalue = new BinaryEx(node.Span, Operations.Pow, new NullLiteral(node.Span), valueassignex.rvalue); // x[] /= y -> x[] = 0 / y else if (oldop == Operations.AssignDiv) valueassignex.rvalue = new BinaryEx(node.Span, Operations.Div, new NullLiteral(node.Span), valueassignex.rvalue); // x[] &= y -> x[] = 0 & y else if (oldop == Operations.AssignAnd) valueassignex.rvalue = new BinaryEx(node.Span, Operations.BitAnd, new NullLiteral(node.Span), valueassignex.rvalue); else { Debug.Fail("Unhandled operation " + oldop.ToString() + " must be reduced!"); valueassignex.operation = oldop; // change it back, this will result in compile time exception } } // stop evaluation: valueassignex.rvalue = valueassignex.rvalue.Analyze(analyzer, ExInfoFromParent.DefaultExInfo).Literalize(); if (node.Operation == Operations.AssignValue) { // elimination of $x = $x . expr var concat = valueassignex.rvalue as ConcatEx; DirectVarUse vur; DirectVarUse vul = valueassignex.lvalue as DirectVarUse; if (concat != null && concat.Expressions.Length >= 2 && vul != null && vul.IsMemberOf == null) { if ((vur = concat.Expressions[0] as DirectVarUse) != null && vur.VarName.Equals(vul.VarName) && vur.IsMemberOf == null) { // $x = $x.a.b.c // => // $x .= a.b.c valueassignex.operation = Operations.AssignAppend; lvalue_info.Access = AccessType.ReadAndWrite; //rvalue = concat.RightExpr; concat.Expressions = concat.Expressions.TakeArray(1, concat.Expressions.Length - 1); } else if ((vur = concat.Expressions[concat.Expressions.Length - 1] as DirectVarUse) != null && vur.VarName.Equals(vul.VarName) && vur.IsMemberOf == null) { // $x = a.b.c.$x // => // $x =. a.b.c valueassignex.operation = Operations.AssignPrepend; lvalue_info.Access = AccessType.ReadAndWrite; //rvalue = (Expression)concat.LeftExpr; concat.Expressions = concat.Expressions.TakeArray(0, concat.Expressions.Length - 1); } else lvalue_info.Access = AccessType.Write; } else lvalue_info.Access = AccessType.Write; } else lvalue_info.Access = AccessType.ReadAndWrite; // If this ValueAssignEx is actual param that is to be passed by reference, // AccessType of the destVar has to be changed, because its reference will be // (potencially) passeed ActualParam ap = info.Parent as ActualParam; if (ap != null) { if (analyzer.ActParamDeclIsUnknown()) { if (lvalue_info.Access == AccessType.Write) lvalue_info.Access = AccessType.WriteAndReadUnknown; else lvalue_info.Access = AccessType.ReadAndWriteAndReadUnknown; } else if (analyzer.ActParamPassedByRef()) { if (lvalue_info.Access == AccessType.Write) lvalue_info.Access = AccessType.WriteAndReadRef; else lvalue_info.Access = AccessType.ReadAndWriteAndReadRef; } } valueassignex.lvalue.Analyze(analyzer, lvalue_info); //retval not needed ... return new Evaluation(node); } #endregion /// /// Emits assignment. /// /// /// Pattern: a op= b /// /// PREPARE a (prepared) /// LOAD a (prepared,a) /// LOAD b (prepared,a,b) /// OP (prepared,result) /// *DUP (prepared,result,result) /// *STORE tmp (prepared,result) must be this stack here! /// STORE a () /// *LOAD tmp (result) /// /// * only if the resulting value needs to be propagated to the right /// /// Note: There is a possible improvement: some store operations (SetVariable) may return the value set /// which would replace DUP and second temp op. /// public override PhpTypeCode Emit(AssignEx node, CodeGenerator codeGenerator) { Debug.Assert(access == AccessType.Read || access == AccessType.None || access == AccessType.ReadRef || access == AccessType.ReadUnknown); Statistics.AST.AddNode("Assign.Value"); AccessType old_selector = codeGenerator.AccessSelector; codeGenerator.ChainBuilder.Create(); PhpTypeCode result; if (node.Operation == Operations.AssignValue) { // // Access Type = ReadRef/ReadUnknown // --------------------------------- // // f(&$x) { } // // f($a = $b); // f($a = $b =& $c); // // Destination variable $a is prepared for reference write. // A new reference is created and its value set to a deep copy of the result of RHS ($b, $b =& $c). // RHS has Read access => it has been dereferenced. // // PREPARE a: codeGenerator.AccessSelector = AccessType.Write; node.lvalue.Emit(codeGenerator); codeGenerator.AccessSelector = AccessType.None; PhpTypeCode src_type_code = EmitSourceValRead((ValueAssignEx)node, codeGenerator); // RHS should have Read access => should be dereferenced Debug.Assert(src_type_code != PhpTypeCode.PhpReference); // LOAD BOX b codeGenerator.EmitBoxing(src_type_code); // makes a copy if necessary: if (PhpTypeCodeEnum.IsDeeplyCopied(src_type_code)) codeGenerator.EmitVariableCopy(CopyReason.Assigned, ((ValueAssignEx)node).rvalue); } else { // PREPARE a: codeGenerator.AccessSelector = AccessType.Write; node.LValue.Emit(codeGenerator); codeGenerator.AccessSelector = AccessType.None; // LOAD b,a (rvalue must be processed first, than +-*/ with lvalue, since lvalu can be changed by rvalue expression) //must be the second operand// EmitDestVarRead(codeGenerator); PhpTypeCode right_type = EmitSourceValRead((ValueAssignEx)node, codeGenerator); var rvalue_tmp = codeGenerator.IL.GetTemporaryLocal(PhpTypeCodeEnum.ToType(right_type), false); codeGenerator.IL.Emit(OpCodes.Stloc, rvalue_tmp); EmitDestVarRead(node, codeGenerator); codeGenerator.IL.Emit(OpCodes.Ldloc, rvalue_tmp); codeGenerator.IL.ReturnTemporaryLocal(rvalue_tmp); switch (node.Operation) { #region Arithmetic case Operations.AssignAdd: { switch (right_type) { case PhpTypeCode.Integer: result = codeGenerator.EmitMethodCall(Methods.Operators.Add.Object_Int32); break; case PhpTypeCode.Double: result = codeGenerator.EmitMethodCall(Methods.Operators.Add.Object_Double); break; default: codeGenerator.EmitBoxing(right_type); result = codeGenerator.EmitMethodCall(Methods.Operators.Add.Object_Object); break; } break; } case Operations.AssignSub: { switch (right_type) { case PhpTypeCode.Integer: result = codeGenerator.EmitMethodCall(Methods.Operators.Subtract.Object_Int); break; default: codeGenerator.EmitBoxing(right_type); result = codeGenerator.EmitMethodCall(Methods.Operators.Subtract.Object_Object); break; } break; } case Operations.AssignDiv: { switch (right_type) { case PhpTypeCode.Integer: result = codeGenerator.EmitMethodCall(Methods.Operators.Divide.Object_Int32); break; case PhpTypeCode.Double: result = codeGenerator.EmitMethodCall(Methods.Operators.Divide.Object_Double); break; default: codeGenerator.EmitBoxing(right_type); result = codeGenerator.EmitMethodCall(Methods.Operators.Divide.Object_Object); break; } break; } case Operations.AssignMul: { switch (right_type) { case PhpTypeCode.Integer: result = codeGenerator.EmitMethodCall(Methods.Operators.Multiply.Object_Int32); break; case PhpTypeCode.Double: result = codeGenerator.EmitMethodCall(Methods.Operators.Multiply.Object_Double); break; default: codeGenerator.EmitBoxing(right_type); result = codeGenerator.EmitMethodCall(Methods.Operators.Multiply.Object_Object); break; } break; } case Operations.AssignPow: codeGenerator.EmitBoxing(right_type); result = codeGenerator.EmitMethodCall(Methods.Operators.Pow.Object_Object); break; case Operations.AssignMod: if (right_type == PhpTypeCode.Integer) { result = codeGenerator.EmitMethodCall(Methods.Operators.Remainder.Object_Int32); } else { codeGenerator.EmitBoxing(right_type); result = codeGenerator.EmitMethodCall(Methods.Operators.Remainder.Object_Object); } break; #endregion #region Bitwise case Operations.AssignAnd: codeGenerator.EmitBoxing(right_type); codeGenerator.IL.Emit(OpCodes.Ldc_I4, (int)Operators.BitOp.And); result = codeGenerator.EmitMethodCall(Methods.Operators.BitOperation); break; case Operations.AssignOr: codeGenerator.EmitBoxing(right_type); codeGenerator.IL.Emit(OpCodes.Ldc_I4, (int)Operators.BitOp.Or); result = codeGenerator.EmitMethodCall(Methods.Operators.BitOperation); break; case Operations.AssignXor: codeGenerator.EmitBoxing(right_type); codeGenerator.IL.Emit(OpCodes.Ldc_I4, (int)Operators.BitOp.Xor); result = codeGenerator.EmitMethodCall(Methods.Operators.BitOperation); break; case Operations.AssignShiftLeft: codeGenerator.EmitBoxing(right_type); result = codeGenerator.EmitMethodCall(Methods.Operators.ShiftLeft); break; case Operations.AssignShiftRight: codeGenerator.EmitBoxing(right_type); result = codeGenerator.EmitMethodCall(Methods.Operators.ShiftRight); break; #endregion #region String case Operations.AssignAppend: { if (right_type == PhpTypeCode.String) { result = codeGenerator.EmitMethodCall(Methods.Operators.Append.Object_String); } else if (right_type == PhpTypeCode.PhpBytes) { result = codeGenerator.EmitMethodCall(Methods.PhpBytes.Append_Object_PhpBytes); } else { codeGenerator.EmitBoxing(right_type); result = codeGenerator.EmitMethodCall(Methods.Operators.Append.Object_Object); } break; } case Operations.AssignPrepend: { if (right_type == PhpTypeCode.String) { result = codeGenerator.EmitMethodCall(Methods.Operators.Prepend.Object_String); } else { codeGenerator.EmitBoxing(right_type); result = codeGenerator.EmitMethodCall(Methods.Operators.Prepend.Object_Object); } break; } #endregion default: throw new InvalidOperationException(); } codeGenerator.IL.EmitBoxing(result); } switch (access) { case AccessType.Read: { // DUP codeGenerator.IL.Emit(OpCodes.Dup); // STORE tmp codeGenerator.IL.Stloc(codeGenerator.IL.GetAssignmentLocal()); // STORE prepared, result codeGenerator.AccessSelector = AccessType.Write; result = VariableUseHelper.EmitAssign(node.LValue, codeGenerator); codeGenerator.AccessSelector = AccessType.None; Debug.Assert(result == PhpTypeCode.Void); // LOAD result codeGenerator.IL.Ldloc(codeGenerator.IL.GetAssignmentLocal()); result = PhpTypeCode.Object; break; } case AccessType.ReadRef: case AccessType.ReadUnknown: // STORE prepared,result codeGenerator.AccessSelector = AccessType.Write; result = VariableUseHelper.EmitAssign(node.LValue, codeGenerator); codeGenerator.AccessSelector = AccessType.None; Debug.Assert(result == PhpTypeCode.Void); // loads a reference on the LHS variable: codeGenerator.AccessSelector = access; codeGenerator.ChainBuilder.Create(); result = node.LValue.Emit(codeGenerator); codeGenerator.ChainBuilder.EndRef(); codeGenerator.AccessSelector = AccessType.None; break; case AccessType.None: // STORE a: codeGenerator.AccessSelector = AccessType.Write; result = VariableUseHelper.EmitAssign(node.LValue, codeGenerator); codeGenerator.AccessSelector = AccessType.None; Debug.Assert(result == PhpTypeCode.Void); break; default: Debug.Fail("Invalid access type."); result = PhpTypeCode.Invalid; break; } codeGenerator.ChainBuilder.End(); codeGenerator.AccessSelector = old_selector; return result; } private PhpTypeCode EmitDestVarRead(AssignEx/*!*/node, CodeGenerator codeGenerator) { PhpTypeCode result; codeGenerator.AccessSelector = AccessType.Read; codeGenerator.ChainBuilder.Create(); result = node.LValue.Emit(codeGenerator); codeGenerator.ChainBuilder.End(); codeGenerator.AccessSelector = AccessType.None; return result; } /// /// Emits the RHS of assignment. /// /// Instance. /// A code generator. /// of the RHS. private PhpTypeCode EmitSourceValRead(ValueAssignEx/*!*/node, CodeGenerator/*!*/ codeGenerator) { PhpTypeCode result; codeGenerator.ChainBuilder.Create(); result = node.RValue.Emit(codeGenerator); codeGenerator.ChainBuilder.End(); return result; } } #endregion #region RefAssignEx [NodeCompiler(typeof(RefAssignEx))] sealed class RefAssignExCompiler : AssignExCompiler { public override Evaluation Analyze(AssignEx node, Analyzer analyzer, ExInfoFromParent info) { access = info.Access; ExInfoFromParent lvalue_info = new ExInfoFromParent(node); ExInfoFromParent rvalue_info = new ExInfoFromParent(node); lvalue_info.Access = AccessType.WriteRef; rvalue_info.Access = AccessType.ReadRef; var refassignex = (RefAssignEx)node; node.lvalue = (VariableUse)node.LValue.Analyze(analyzer, lvalue_info).Expression; refassignex.rvalue = refassignex.RValue.Analyze(analyzer, rvalue_info).Literalize(); if (refassignex.RValue is NewEx) { //PhpException.Throw(PhpError.Deprecated, CoreResources.GetString("assign_new_as_ref_is_deprecated")); analyzer.ErrorSink.Add(Warnings.AssignNewByRefDeprecated, analyzer.SourceUnit, node.Span); } return new Evaluation(node); } public override PhpTypeCode Emit(AssignEx node, CodeGenerator codeGenerator) { Debug.Assert(access == AccessType.None || access == AccessType.Read || access == AccessType.ReadRef || access == AccessType.ReadUnknown); Statistics.AST.AddNode("Assign.Ref"); //ChainBuilder.RefErrorLabelInfo labelInfo; // Strict Standards: Only variables should be assigned by reference /*if (rvalue is FunctionCall)//TODO: only variables (but also variables given by function call return value!) { il.LdcI4( (int)PhpError.Strict ); il.Emit(OpCodes.Ldstr, CoreResources.GetString("only_vars_assign ed_by_ref")); codeGenerator.EmitPhpException(il,Methods.PhpException.Throw); }*/ // PREPARE: codeGenerator.ChainBuilder.Create(); node.LValue.Emit(codeGenerator); // LOAD : codeGenerator.ChainBuilder.Create(); ((RefAssignEx)node).RValue.Emit(codeGenerator); codeGenerator.ChainBuilder.End(); PhpTypeCode result; // Dup source value if assignment is read switch (access) { case AccessType.Read: case AccessType.ReadUnknown: case AccessType.ReadRef: { // DUP codeGenerator.IL.Emit(OpCodes.Dup); // STORE tmp codeGenerator.IL.Stloc(codeGenerator.IL.GetAssignmentLocalRef()); // STORE prepared,result VariableUseHelper.EmitAssign(node.LValue, codeGenerator); // LOAD DEREF tmp codeGenerator.IL.Ldloc(codeGenerator.IL.GetAssignmentLocalRef()); if (access == AccessType.Read) { codeGenerator.IL.Emit(OpCodes.Ldfld, Fields.PhpReference_Value); result = PhpTypeCode.Object; } else { result = PhpTypeCode.PhpReference; } break; } case AccessType.None: VariableUseHelper.EmitAssign(node.LValue, codeGenerator); result = PhpTypeCode.Void; break; default: throw new InvalidOperationException(); //result = PhpTypeCode.Invalid; //break; } codeGenerator.ChainBuilder.End(); return result; } } #endregion } } ================================================ FILE: Source/Core/Compiler/AST/AstNodeExtension.cs ================================================ /* Copyright (c) 2013 DEVSENSE The use and distribution terms for this software are contained in the file named License.txt, which can be found in the root of the Phalanger distribution. By using this software in any fashion, you are agreeing to be bound by the terms of this license. You must not remove this notice from this software. */ using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Text; using PHP.Core.Reflection; using PHP.Core.AST; namespace PHP.Core.Compiler.AST { /// /// extension methods. /// [DebuggerNonUserCode] internal static class AstNodeExtension { #region INodeCompiler instantiation /// /// Reflected information about specific node compiler. /// public struct NodeCompilerInfo { [Flags] private enum Flags : byte { HasDefaultCtor = 1, IsSingleton = 2, } private object data; private Flags flags; public bool IsSingleton { get { return (flags & Flags.IsSingleton) != 0; } } public bool HasDefaultCtor { get { return (flags & Flags.HasDefaultCtor) != 0; } } public NodeCompilerInfo(Type type, bool hasDefaultCtor, bool isSingleton) { Debug.Assert(type != null); Debug.Assert(!isSingleton || hasDefaultCtor); // isSingleton => hasDefaultCtor data = type; flags = (Flags)0; if (hasDefaultCtor) flags |= Flags.HasDefaultCtor; if (isSingleton) flags |= Flags.IsSingleton; } /// /// Type of to be used. In case of , this property is invalid. /// public Type/*!*/NodeCompilerType { get { Debug.Assert(!IsSingleton); return (Type)data; } } /// /// Instance of is case of is true. /// public INodeCompiler/*!*/NodeCompilerSingleton { get { Debug.Assert(IsSingleton); var result = data as INodeCompiler; if (result == null && IsSingleton) { Debug.Assert(HasDefaultCtor); Debug.Assert(data is Type); // lazily create instance of INodeCompiler data = result = (INodeCompiler)Activator.CreateInstance((Type)data); } return result; } } #if DEBUG internal void Test() { var type = data as Type; if (type == null) return; // determine whether NodeCompilerAttribute should have Singleton = true bool hasFields = false; for (var t = type; t != null && t != typeof(Object); t = t.BaseType) hasFields |= t.GetFields(System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Public).Length != 0; if (IsSingleton) Debug.Assert(!hasFields, "Singleton should not have instance fields."); else Debug.Assert(hasFields, type.ToString() + " should be marked as Singleton."); } #endif } /// /// Gets map of types corresponding to types. /// internal static Dictionary/*!*/AstNodeExtensionTypes { get { if (_astNodeExtensionTypes == null) lock (typeof(AstNodeExtension)) if (_astNodeExtensionTypes == null) _astNodeExtensionTypes = NodeCompilers.CreateNodeExtensionTypes(); return _astNodeExtensionTypes; } } private static Dictionary _astNodeExtensionTypes = null; /// /// Key to referencing its . /// private static object AstNodeCompilerKey = typeof(INodeCompiler); /// /// Gets (or creates new) associated with given . /// /// instance. /// Associuated instance. public static T/*!*/NodeCompiler(this AstNode/*!*/node) where T : class { var obj = node.Properties[AstNodeCompilerKey] as T; if (obj == null) { node.Properties[AstNodeCompilerKey] = obj = CreateNodeCompiler(node) as T; Debug.Assert(obj != null, "AstNode " + node.GetType().ToString() + " does not implement INodeCompiler of type " + typeof(T).ToString()); } return obj; } /// /// Creates instance for given . /// /// Corresponding instance. /// instance for given . private static INodeCompiler/*!*/CreateNodeCompiler(AstNode/*!*/node) { var compilerinfo = AstNodeExtensionTypes[node.GetType()]; if (compilerinfo.IsSingleton) return compilerinfo.NodeCompilerSingleton; if (compilerinfo.HasDefaultCtor) return (INodeCompiler)Activator.CreateInstance(compilerinfo.NodeCompilerType); else return (INodeCompiler)Activator.CreateInstance(compilerinfo.NodeCompilerType, node); } /// /// Gets (or creates) associatd with given expression. /// private static IExpressionCompiler/*!*/ExpressionCompiler(this Expression/*!*/expr) { return NodeCompiler(expr); } #endregion #region Expression public static AccessType GetAccess(this Expression/*!*/node) { return node.ExpressionCompiler().Access; } public static bool HasValue(this Expression/*!*/node) { return node.ExpressionCompiler().HasValue(node); } public static object GetValue(this Expression/*!*/node) { return node.ExpressionCompiler().GetValue(node); } public static PhpTypeCode GetValueTypeCode(this Expression/*!*/node) { return node.ExpressionCompiler().GetValueTypeCode(node); } public static Evaluation EvaluatePriorAnalysis(this Expression/*!*/node, CompilationSourceUnit/*!*/sourceUnit) { var nodecompiler = node.ExpressionCompiler(); return nodecompiler.EvaluatePriorAnalysis(node, sourceUnit); } public static Evaluation Analyze(this Expression/*!*/node, Analyzer/*!*/ analyzer, ExInfoFromParent info) { var nodecompiler = node.ExpressionCompiler(); return nodecompiler.Analyze(node, analyzer, info); } public static object Evaluate(this Expression/*!*/node, object value) { var nodecompiler = node.ExpressionCompiler(); return nodecompiler.Evaluate(node, value); } public static object Evaluate(this Expression/*!*/node, object leftValue, object rightValue) { var nodecompiler = node.ExpressionCompiler(); return nodecompiler.Evaluate(node, leftValue, rightValue); } public static PhpTypeCode Emit(this Expression/*!*/node, CodeGenerator/*!*/ codeGenerator) { var nodecompiler = node.ExpressionCompiler(); return nodecompiler.Emit(node, codeGenerator); } public static bool IsDeeplyCopied(this Expression/*!*/node, CopyReason reason, int nestingLevel) { var nodecompiler = node.ExpressionCompiler(); return nodecompiler.IsDeeplyCopied(node, reason, nestingLevel); } public static bool IsCustomAttributeArgumentValue(this Expression/*!*/node) { var nodecompiler = node.ExpressionCompiler(); return nodecompiler.IsCustomAttributeArgumentValue(node); } /// /// Whether an expression represented by this node should be stored to a temporary local if assigned. /// public static bool StoreOnAssignment(this Expression/*!*/node) { var nodecompiler = node.ExpressionCompiler(); return nodecompiler.StoreOnAssignment(node); } #endregion } } ================================================ FILE: Source/Core/Compiler/AST/BinaryEx.cs ================================================ /* Copyright (c) 2004-2006 Tomas Matousek, Vaclav Novak and Martin Maly. The use and distribution terms for this software are contained in the file named License.txt, which can be found in the root of the Phalanger distribution. By using this software in any fashion, you are agreeing to be bound by the terms of this license. You must not remove this notice from this software. */ using System; using System.Diagnostics; using System.Reflection.Emit; using PHP.Core.AST; using PHP.Core.Emit; using PHP.Core.Parsers; using PHP.Core.Reflection; namespace PHP.Core.Compiler.AST { partial class NodeCompilers { [NodeCompiler(typeof(BinaryEx))] sealed class BinaryExCompiler : ExpressionCompiler { #region Analysis public override Evaluation EvaluatePriorAnalysis(BinaryEx node, CompilationSourceUnit sourceUnit) { Evaluation left_eval = node.LeftExpr.EvaluatePriorAnalysis(sourceUnit); Evaluation right_eval = node.RightExpr.EvaluatePriorAnalysis(sourceUnit); return Evaluation.ReadOnlyEvaluate(node, left_eval, right_eval); } public override Evaluation Analyze(BinaryEx node, Analyzer analyzer, ExInfoFromParent info) { access = info.Access; ExInfoFromParent operand_info = ExInfoFromParent.DefaultExInfo; Evaluation left_eval = node.LeftExpr.Analyze(analyzer, operand_info); Evaluation right_eval; // Boolean expression evaluation semantics: if (node.Operation == Operations.Or) { analyzer.EnterConditionalCode(); right_eval = node.RightExpr.Analyze(analyzer, operand_info); analyzer.LeaveConditionalCode(); } else { right_eval = node.RightExpr.Analyze(analyzer, operand_info); } Expression rightTmp, leftTmp; Evaluation result = Evaluation.Evaluate(node, left_eval, out leftTmp, right_eval, out rightTmp); node.LeftExpr = leftTmp; node.RightExpr = rightTmp; // division by zero check: if ((node.Operation == Operations.Div || node.Operation == Operations.Mod) && result.HasValue && result.Value is bool && (bool)result.Value == false) { analyzer.ErrorSink.Add(Warnings.DivisionByZero, analyzer.SourceUnit, node.RightExpr.Span); } else if ((node.Operation == Operations.Div || node.Operation == Operations.Mod) && right_eval.HasValue && right_eval.Value is int && (int)right_eval.Value == 0) { result = new Evaluation(node, false); analyzer.ErrorSink.Add(Warnings.DivisionByZero, analyzer.SourceUnit, node.RightExpr.Span); } return result; } public override object Evaluate(BinaryEx node, object leftValue, object rightValue) { switch (node.Operation) { case Operations.Xor: return Convert.ObjectToBoolean(leftValue) ^ Convert.ObjectToBoolean(rightValue); case Operations.Or: return Convert.ObjectToBoolean(leftValue) || Convert.ObjectToBoolean(rightValue); case Operations.And: return Convert.ObjectToBoolean(leftValue) && Convert.ObjectToBoolean(rightValue); case Operations.BitOr: return Operators.BitOperation(leftValue, rightValue, Operators.BitOp.Or); case Operations.BitXor: return Operators.BitOperation(leftValue, rightValue, Operators.BitOp.Xor); case Operations.BitAnd: return Operators.BitOperation(leftValue, rightValue, Operators.BitOp.And); case Operations.Equal: return PhpComparer./*Default.*/CompareEq(leftValue, rightValue); case Operations.NotEqual: return !PhpComparer./*Default.*/CompareEq(leftValue, rightValue); case Operations.Identical: return Operators.StrictEquality(leftValue, rightValue); case Operations.NotIdentical: return !Operators.StrictEquality(leftValue, rightValue); case Operations.LessThan: return PhpComparer.Default.Compare(leftValue, rightValue) < 0; case Operations.GreaterThan: return PhpComparer.Default.Compare(leftValue, rightValue) > 0; case Operations.LessThanOrEqual: return PhpComparer.Default.Compare(leftValue, rightValue) <= 0; case Operations.GreaterThanOrEqual: return PhpComparer.Default.Compare(leftValue, rightValue) >= 0; case Operations.ShiftRight: return Operators.ShiftRight(leftValue, rightValue); // int case Operations.ShiftLeft: return Operators.ShiftLeft(leftValue, rightValue); // int case Operations.Add: return Operators.Add(leftValue, rightValue); case Operations.Sub: return Operators.Subtract(leftValue, rightValue); case Operations.Mul: return Operators.Multiply(leftValue, rightValue); case Operations.Pow: return Operators.Pow(leftValue, rightValue); case Operations.Div: return Operators.Divide(leftValue, rightValue); case Operations.Mod: return Operators.Remainder(leftValue, rightValue); case Operations.Concat: return Operators.Concat(leftValue, rightValue); default: throw null; } } #endregion #region Code emission /// /// Whether the result of binary expression should be deeply copied. /// /// /// Instance. /// All operators returns immutable values. Hence, returns false. public override bool IsDeeplyCopied(BinaryEx node, CopyReason reason, int nestingLevel) { switch (node.Operation) { // respective operators returns immutable values: case Operations.Xor: case Operations.Or: case Operations.And: case Operations.BitOr: case Operations.BitXor: case Operations.BitAnd: case Operations.Equal: case Operations.NotEqual: case Operations.Identical: case Operations.NotIdentical: case Operations.LessThan: case Operations.GreaterThan: case Operations.LessThanOrEqual: case Operations.GreaterThanOrEqual: case Operations.ShiftLeft: case Operations.ShiftRight: case Operations.Add: case Operations.Sub: case Operations.Mul: case Operations.Pow: case Operations.Div: case Operations.Mod: case Operations.Concat: return false; } Debug.Fail("Illegal operation type."); return true; } /// /// Nothing is expected at the evaluation stack. If AST node is read by other node, /// the operation result is left at the stack, otherwise it is poped from the stack. /// public override PhpTypeCode Emit(BinaryEx node, CodeGenerator codeGenerator) { Debug.Assert(access == AccessType.None || access == AccessType.Read); Statistics.AST.AddNode("BinaryEx"); PhpTypeCode returned_typecode; PhpTypeCode lo_typecode; PhpTypeCode ro_typecode; switch (node.Operation) { #region Arithmetic Operations case Operations.Add: // Template: x + y : Operators.Add(x,y) [overloads] switch (lo_typecode = node.LeftExpr.Emit(codeGenerator)) { case PhpTypeCode.Double: switch (ro_typecode = node.RightExpr.Emit(codeGenerator)) { case PhpTypeCode.Integer: codeGenerator.IL.Emit(OpCodes.Conv_R8); goto case PhpTypeCode.Double; // fallback: case PhpTypeCode.Double: codeGenerator.IL.Emit(OpCodes.Add); returned_typecode = PhpTypeCode.Double; break; default: codeGenerator.EmitBoxing(ro_typecode); returned_typecode = codeGenerator.EmitMethodCall(Methods.Operators.Add.Double_Object); break; } break; default: codeGenerator.EmitBoxing(lo_typecode); ro_typecode = node.RightExpr.Emit(codeGenerator); switch (ro_typecode) { case PhpTypeCode.Integer: returned_typecode = codeGenerator.EmitMethodCall(Methods.Operators.Add.Object_Int32); break; case PhpTypeCode.Double: returned_typecode = codeGenerator.EmitMethodCall(Methods.Operators.Add.Object_Double); break; default: codeGenerator.EmitBoxing(ro_typecode); returned_typecode = codeGenerator.EmitMethodCall(Methods.Operators.Add.Object_Object); break; } break; } break; case Operations.Sub: //Template: "x - y" Operators.Subtract(x,y) [overloads] lo_typecode = node.LeftExpr.Emit(codeGenerator); switch (lo_typecode) { case PhpTypeCode.Integer: codeGenerator.EmitBoxing(node.RightExpr.Emit(codeGenerator)); returned_typecode = codeGenerator.EmitMethodCall(Methods.Operators.Subtract.Int32_Object); break; case PhpTypeCode.Double: switch (ro_typecode = node.RightExpr.Emit(codeGenerator)) { case PhpTypeCode.Integer: codeGenerator.IL.Emit(OpCodes.Conv_R8); goto case PhpTypeCode.Double; // fallback: case PhpTypeCode.Double: codeGenerator.IL.Emit(OpCodes.Sub); returned_typecode = PhpTypeCode.Double; break; default: codeGenerator.EmitBoxing(ro_typecode); returned_typecode = codeGenerator.EmitMethodCall(Methods.Operators.Subtract.Double_Object); break; } break; default: codeGenerator.EmitBoxing(lo_typecode); ro_typecode = node.RightExpr.Emit(codeGenerator); if (ro_typecode == PhpTypeCode.Integer) { returned_typecode = codeGenerator.EmitMethodCall(Methods.Operators.Subtract.Object_Int); } else { codeGenerator.EmitBoxing(ro_typecode); returned_typecode = codeGenerator.EmitMethodCall(Methods.Operators.Subtract.Object_Object); } break; } break; case Operations.Div: //Template: "x / y" Operators.Divide(x,y) lo_typecode = node.LeftExpr.Emit(codeGenerator); switch (lo_typecode) { case PhpTypeCode.Integer: codeGenerator.EmitBoxing(node.RightExpr.Emit(codeGenerator)); returned_typecode = codeGenerator.EmitMethodCall(Methods.Operators.Divide.Int32_Object); break; case PhpTypeCode.Double: switch (ro_typecode = node.RightExpr.Emit(codeGenerator)) { case PhpTypeCode.Double: codeGenerator.IL.Emit(OpCodes.Div); returned_typecode = PhpTypeCode.Double; break; default: codeGenerator.EmitBoxing(ro_typecode); returned_typecode = codeGenerator.EmitMethodCall(Methods.Operators.Divide.Double_Object); break; } break; default: codeGenerator.EmitBoxing(lo_typecode); ro_typecode = node.RightExpr.Emit(codeGenerator); switch (ro_typecode) { case PhpTypeCode.Integer: returned_typecode = codeGenerator.EmitMethodCall(Methods.Operators.Divide.Object_Int32); break; case PhpTypeCode.Double: returned_typecode = codeGenerator.EmitMethodCall(Methods.Operators.Divide.Object_Double); break; default: codeGenerator.EmitBoxing(ro_typecode); returned_typecode = codeGenerator.EmitMethodCall(Methods.Operators.Divide.Object_Object); break; } break; } break; case Operations.Mul: switch (lo_typecode = node.LeftExpr.Emit(codeGenerator)) { case PhpTypeCode.Double: // "x * (double)y" // Operators.Multiply((double)x,(object)y) switch (ro_typecode = node.RightExpr.Emit(codeGenerator)) { case PhpTypeCode.Integer: codeGenerator.IL.Emit(OpCodes.Conv_R8); goto case PhpTypeCode.Double; // fallback: case PhpTypeCode.Double: codeGenerator.IL.Emit(OpCodes.Mul); returned_typecode = PhpTypeCode.Double; break; default: codeGenerator.EmitBoxing(ro_typecode); returned_typecode = codeGenerator.EmitMethodCall(Methods.Operators.Multiply.Double_Object); break; } break; default: //Template: "x * y" Operators.Multiply((object)x,y) [overloads] codeGenerator.EmitBoxing(lo_typecode); ro_typecode = node.RightExpr.Emit(codeGenerator); switch (ro_typecode) { case PhpTypeCode.Integer: returned_typecode = codeGenerator.EmitMethodCall(Methods.Operators.Multiply.Object_Int32); break; case PhpTypeCode.Double: returned_typecode = codeGenerator.EmitMethodCall(Methods.Operators.Multiply.Object_Double); break; default: codeGenerator.EmitBoxing(ro_typecode); returned_typecode = codeGenerator.EmitMethodCall(Methods.Operators.Multiply.Object_Object); break; } break; } break; case Operations.Pow: codeGenerator.EmitBoxing(node.LeftExpr.Emit(codeGenerator)); codeGenerator.EmitBoxing(node.RightExpr.Emit(codeGenerator)); returned_typecode = codeGenerator.EmitMethodCall(Methods.Operators.Pow.Object_Object); break; case Operations.Mod: //Template: "x % y" Operators.Remainder(x,y) codeGenerator.EmitBoxing(node.LeftExpr.Emit(codeGenerator)); ro_typecode = node.RightExpr.Emit(codeGenerator); switch (ro_typecode) { case PhpTypeCode.Integer: returned_typecode = codeGenerator.EmitMethodCall(Methods.Operators.Remainder.Object_Int32); break; default: codeGenerator.EmitBoxing(ro_typecode); returned_typecode = codeGenerator.EmitMethodCall(Methods.Operators.Remainder.Object_Object); break; } break; case Operations.ShiftLeft: // LOAD Operators.ShiftLeft(box left, box right); codeGenerator.EmitBoxing(node.LeftExpr.Emit(codeGenerator)); codeGenerator.EmitBoxing(node.RightExpr.Emit(codeGenerator)); returned_typecode = codeGenerator.EmitMethodCall(Methods.Operators.ShiftLeft); break; case Operations.ShiftRight: // LOAD Operators.ShiftRight(box left, box right); codeGenerator.EmitBoxing(node.LeftExpr.Emit(codeGenerator)); codeGenerator.EmitBoxing(node.RightExpr.Emit(codeGenerator)); returned_typecode = codeGenerator.EmitMethodCall(Methods.Operators.ShiftRight); break; #endregion #region Boolean and Bitwise Operations case Operations.And: returned_typecode = EmitBinaryBooleanOperation(node, codeGenerator, true); break; case Operations.Or: returned_typecode = EmitBinaryBooleanOperation(node, codeGenerator, false); break; case Operations.Xor: // LOAD <(bool) leftSon> == <(bool) rightSon>; codeGenerator.EmitConversion(node.LeftExpr, PhpTypeCode.Boolean); codeGenerator.EmitConversion(node.RightExpr, PhpTypeCode.Boolean); codeGenerator.IL.Emit(OpCodes.Ceq); codeGenerator.IL.Emit(OpCodes.Ldc_I4_0); codeGenerator.IL.Emit(OpCodes.Ceq); returned_typecode = PhpTypeCode.Boolean; break; case Operations.BitAnd: returned_typecode = EmitBitOperation(node, codeGenerator, Operators.BitOp.And); break; case Operations.BitOr: returned_typecode = EmitBitOperation(node, codeGenerator, Operators.BitOp.Or); break; case Operations.BitXor: returned_typecode = EmitBitOperation(node, codeGenerator, Operators.BitOp.Xor); break; #endregion #region Comparing Operations case Operations.Equal: // LOAD PhpComparer.Default.CompareEq returned_typecode = EmitComparison(node, codeGenerator, true); break; case Operations.NotEqual: // LOAD PhpComparer.Default.CompareEq == false EmitComparison(node, codeGenerator, true); codeGenerator.IL.Emit(OpCodes.Ldc_I4_0); codeGenerator.IL.Emit(OpCodes.Ceq); returned_typecode = PhpTypeCode.Boolean; break; case Operations.GreaterThan: // LOAD PhpComparer.Default.Compare > 0; EmitComparison(node, codeGenerator, false); codeGenerator.IL.Emit(OpCodes.Ldc_I4_0); codeGenerator.IL.Emit(OpCodes.Cgt); returned_typecode = PhpTypeCode.Boolean; break; case Operations.LessThan: // LOAD PhpComparer.Default.Compare < 0; EmitComparison(node, codeGenerator, false); codeGenerator.IL.Emit(OpCodes.Ldc_I4_0); codeGenerator.IL.Emit(OpCodes.Clt); returned_typecode = PhpTypeCode.Boolean; break; case Operations.GreaterThanOrEqual: // LOAD PhpComparer.Default.Compare >= 0 (not less than) EmitComparison(node, codeGenerator, false); codeGenerator.IL.Emit(OpCodes.Ldc_I4_0); codeGenerator.IL.Emit(OpCodes.Clt); codeGenerator.IL.Emit(OpCodes.Ldc_I4_0); codeGenerator.IL.Emit(OpCodes.Ceq); returned_typecode = PhpTypeCode.Boolean; break; case Operations.LessThanOrEqual: // LOAD PhpComparer.Default.Compare >= 0 (not greater than) EmitComparison(node, codeGenerator, false); codeGenerator.IL.Emit(OpCodes.Ldc_I4_0); codeGenerator.IL.Emit(OpCodes.Cgt); codeGenerator.IL.Emit(OpCodes.Ldc_I4_0); codeGenerator.IL.Emit(OpCodes.Ceq); returned_typecode = PhpTypeCode.Boolean; break; case Operations.Identical: // LOAD Operators.StrictEquality(box left,box right); returned_typecode = EmitStrictEquality(node, codeGenerator); break; case Operations.NotIdentical: // LOAD Operators.StrictEquality(box left,box right) == false; EmitStrictEquality(node, codeGenerator); codeGenerator.IL.Emit(OpCodes.Ldc_I4_0); codeGenerator.IL.Emit(OpCodes.Ceq); returned_typecode = PhpTypeCode.Boolean; break; #endregion case Operations.Concat: returned_typecode = ConcatExCompiler.EmitConcat(codeGenerator, node.LeftExpr, node.RightExpr); break; default: throw null; } switch (access) { case AccessType.Read: // Result is read, do nothing. break; case AccessType.None: // Result is not read, pop the result codeGenerator.IL.Emit(OpCodes.Pop); returned_typecode = PhpTypeCode.Void; break; } return returned_typecode; } /// /// Emits bit operation OP . /// /// Instance. /// A code generator. /// The operation. /// A type code of the result. private static PhpTypeCode EmitBitOperation(BinaryEx/*!*/node, CodeGenerator/*!*/ codeGenerator, Operators.BitOp op) { ILEmitter il = codeGenerator.IL; // LOAD Operators.BitOperation(box , box ); codeGenerator.EmitBoxing(node.LeftExpr.Emit(codeGenerator)); codeGenerator.EmitBoxing(node.RightExpr.Emit(codeGenerator)); il.Emit(OpCodes.Ldc_I4, (int)op); il.Emit(OpCodes.Call, Methods.Operators.BitOperation); return PhpTypeCode.Object; } /// /// Emits binary boolean operation (AND or OR). /// /// Instance. /// A code generator. /// Whether to emit AND. /// A type code of the result. private static PhpTypeCode EmitBinaryBooleanOperation(BinaryEx/*!*/node, CodeGenerator codeGenerator, bool isAnd) { ILEmitter il = codeGenerator.IL; Label partial_eval_label = il.DefineLabel(); Label end_label = il.DefineLabel(); // IF [!]<(bool) leftSon> THEN GOTO partial_eval; codeGenerator.EmitConversion(node.LeftExpr, PhpTypeCode.Boolean); il.Emit(isAnd ? OpCodes.Brfalse : OpCodes.Brtrue, partial_eval_label); // LOAD <(bool) leftSon>; codeGenerator.EmitConversion(node.RightExpr, PhpTypeCode.Boolean); il.Emit(OpCodes.Br, end_label); il.MarkLabel(partial_eval_label, true); il.LdcI4(isAnd ? 0 : 1); il.MarkLabel(end_label, true); return PhpTypeCode.Boolean; } /// /// Emits call to a default comparator method. /// /// Instance. /// A code generator. /// Whether to emit equality comparison (or generic comparison otherwise). /// A type code of the result. private static PhpTypeCode EmitComparison(BinaryEx/*!*/node, CodeGenerator codeGenerator, bool equality) { PhpTypeCode x, y; // PhpComparer.Default.(box left, box right <|, false>); /*changed to static method*/ //codeGenerator.IL.Emit(OpCodes.Ldsfld, Fields.PhpComparer_Default); if (equality) { return codeGenerator.EmitCompareEq(cg => node.LeftExpr.Emit(cg), cg => node.RightExpr.Emit(cg)); } else { x = node.LeftExpr.Emit(codeGenerator); if (x == PhpTypeCode.Integer) { y = node.RightExpr.Emit(codeGenerator); // int, ? if (y == PhpTypeCode.Integer) { // int, int codeGenerator.IL.Emit(OpCodes.Call, Methods.CompareOp_int_int); return PhpTypeCode.Integer; } else { codeGenerator.EmitBoxing(y); // int, object codeGenerator.IL.LdcI4(0); // throws = false codeGenerator.IL.Emit(OpCodes.Call, Methods.CompareOp_int_object_bool); return PhpTypeCode.Integer; } } else { codeGenerator.EmitBoxing(x); y = node.RightExpr.Emit(codeGenerator); // object, ? if (y == PhpTypeCode.Integer) { // object, int codeGenerator.IL.LdcI4(0); // throws = false codeGenerator.IL.Emit(OpCodes.Call, Methods.CompareOp_object_int_bool); return PhpTypeCode.Integer; } else { codeGenerator.EmitBoxing(y); // object, object codeGenerator.IL.LdcI4(0); // throws = false codeGenerator.IL.Emit(OpCodes.Call, Methods.CompareOp_object_object_bool); return PhpTypeCode.Integer; } } } } /// /// Emits strict equality operation. /// /// Instance. /// A code generator. /// A type code of the result (boolean). private static PhpTypeCode EmitStrictEquality(BinaryEx/*!*/node, CodeGenerator codeGenerator) { if (IsEmptyArrayEx(node.LeftExpr)) { EmitEmptyArrayStrictEquality(codeGenerator, node.RightExpr); } else if (IsEmptyArrayEx(node.RightExpr)) { EmitEmptyArrayStrictEquality(codeGenerator, node.LeftExpr); } else { // LOAD Operators.StrictEquality(box left,box right); codeGenerator.EmitBoxing(node.LeftExpr.Emit(codeGenerator)); codeGenerator.EmitBoxing(node.RightExpr.Emit(codeGenerator)); codeGenerator.IL.Emit(OpCodes.Call, Methods.Operators.StrictEquality); } return PhpTypeCode.Boolean; } /// /// Emits strict equality to empty PHP array. /// /// A code generator. /// Expression to be compared against. private static void EmitEmptyArrayStrictEquality(CodeGenerator/*!*/codeGenerator, Expression/*!*/expr) { if (IsEmptyArrayEx(expr)) { // array() === array() // LOAD true codeGenerator.IL.LoadBool(true); } else if (expr is Literal) { // array() === NULL|int|double|string|... // LOAD false codeGenerator.IL.LoadBool(false); } else { // array() === // LOAD var exprTypeCode = expr.Emit(codeGenerator); // check whether type can be an array switch (exprTypeCode) { case PhpTypeCode.Boolean: case PhpTypeCode.DObject: case PhpTypeCode.Double: case PhpTypeCode.Integer: case PhpTypeCode.LongInteger: case PhpTypeCode.PhpBytes: case PhpTypeCode.PhpString: case PhpTypeCode.String: // always FALSE codeGenerator.IL.Emit(OpCodes.Pop); codeGenerator.IL.LoadBool(false); break; case PhpTypeCode.PhpArray: // compare (PhpArray) with array() codeGenerator.IL.Emit(OpCodes.Call, Methods.Operators.StrictEmptyPhpArrayEquality_PhpArray); break; default: // compare with array() codeGenerator.EmitBoxing(exprTypeCode); codeGenerator.IL.Emit(OpCodes.Call, Methods.Operators.StrictEmptyPhpArrayEquality); break; } } } /// /// Determines whether given represents an empty array (array() or []). /// /// Expression to be checked. /// True if is an empty array expression. private static bool IsEmptyArrayEx(Expression/*!*/expr) { Debug.Assert(expr != null); return expr.GetType() == typeof(ArrayEx) && ((ArrayEx)expr).Items.Empty(); } #endregion } } } ================================================ FILE: Source/Core/Compiler/AST/BuiltInFunctions.cs ================================================ /* Copyright (c) 2013 DEVSENSE The use and distribution terms for this software are contained in the file named License.txt, which can be found in the root of the Phalanger distribution. By using this software in any fashion, you are agreeing to be bound by the terms of this license. You must not remove this notice from this software. */ using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.Reflection.Emit; using PHP.Core.AST; using PHP.Core.Emit; using PHP.Core.Parsers; using PHP.Core.Reflection; namespace PHP.Core.Compiler.AST { partial class NodeCompilers { #region IncludingEx [NodeCompiler(typeof(IncludingEx))] sealed class IncludingExCompiler : ExpressionCompiler, IIncludingExCompiler { #region IIncludingExCompiler /// /// Static inclusion info or null reference if target cannot be determined statically. /// Set during inclusion graph building, before the analysis takes place. /// public StaticInclusion Inclusion { get { return inclusion; } /* CompilationUnit */ set { inclusion = value; } } private StaticInclusion inclusion; /// /// Set during inclusion graph building, before the analysis takes place. /// public Characteristic Characteristic { get { return characteristic; } set { characteristic = value; } } private Characteristic characteristic; #endregion public override Evaluation Analyze(IncludingEx node, Analyzer analyzer, ExInfoFromParent info) { access = info.Access; // if the expression should be emitted: if (characteristic == Characteristic.Dynamic || characteristic == Characteristic.StaticArgEvaluated) { node.Target = node.Target.Analyze(analyzer, ExInfoFromParent.DefaultExInfo).Literalize(); } analyzer.AddCurrentRoutineProperty(RoutineProperties.ContainsInclude); analyzer.CurrentScope = node.Scope; return new Evaluation(node); } public override PhpTypeCode Emit(IncludingEx node, CodeGenerator codeGenerator) { PhpTypeCode result; // emits inclusion and Main() call: if (inclusion != null) result = EmitStaticInclusion(node, codeGenerator); else result = EmitDynamicInclusion(node, codeGenerator); // return value conversion: codeGenerator.EmitReturnValueHandling(node, false, ref result); return result; } /// /// Emits a static inclusion. /// private PhpTypeCode EmitStaticInclusion(IncludingEx node, CodeGenerator/*!*/ codeGenerator) { ILEmitter il = codeGenerator.IL; Label endif_label = il.DefineLabel(); Label else_label = il.DefineLabel(); MethodInfo method; // if the expression should be emitted: if (characteristic == Characteristic.StaticArgEvaluated) { if (!(node.Target is StringLiteral || node.Target is BinaryStringLiteral)) { // emits expression evaluation and ignores the result: node.Target.Emit(codeGenerator); il.Emit(OpCodes.Pop); } } if (characteristic == Characteristic.StaticAutoInclusion) { // calls the Main routine only if this script is the main one: il.Ldarg(ScriptBuilder.ArgIsMain); } else { RelativePath relativePath = new RelativePath(inclusion.Includee.RelativeSourcePath); // normalize the relative path // CALL context.StaticInclude(,,); codeGenerator.EmitLoadScriptContext(); il.Emit(OpCodes.Ldc_I4, (int)relativePath.Level); il.Emit(OpCodes.Ldstr, relativePath.Path); il.Emit(OpCodes.Ldtoken, inclusion.Includee.ScriptClassType); il.LoadLiteral(node.InclusionType); il.Emit(OpCodes.Call, Methods.ScriptContext.StaticInclude); } // IF (STACK) il.Emit(OpCodes.Brfalse, else_label); if (true) { // emits a call to the main helper of the included script: method = inclusion.Includee.MainHelper; // CALL
(context, variables, self, includer, false): codeGenerator.EmitLoadScriptContext(); codeGenerator.EmitLoadRTVariablesTable(); codeGenerator.EmitLoadSelf(); codeGenerator.EmitLoadClassContext(); il.Emit(OpCodes.Ldc_I4_0); il.Emit(OpCodes.Call, method); il.Emit(OpCodes.Br, endif_label); } // ELSE il.MarkLabel(else_label); if (true) { // LOAD ; il.LoadLiteral(ScriptModule.SkippedIncludeReturnValue); il.Emit(OpCodes.Box, ScriptModule.SkippedIncludeReturnValue.GetType()); } il.MarkLabel(endif_label); // END IF return PhpTypeCode.Object; } /// /// Emits dynamic inclusion. /// private PhpTypeCode EmitDynamicInclusion(IncludingEx node, CodeGenerator/*!*/ codeGenerator) { // do not generate dynamic auto inclusions: if (InclusionTypesEnum.IsAutoInclusion(node.InclusionType)) return PhpTypeCode.Void; ILEmitter il = codeGenerator.IL; // CALL context.DynamicInclude(,,variables,self,includer); codeGenerator.EmitLoadScriptContext(); codeGenerator.EmitConversion(node.Target, PhpTypeCode.String); il.Emit(OpCodes.Ldstr, codeGenerator.SourceUnit.SourceFile.RelativePath.ToString()); codeGenerator.EmitLoadRTVariablesTable(); codeGenerator.EmitLoadSelf(); codeGenerator.EmitLoadClassContext(); il.LoadLiteral(node.InclusionType); il.Emit(OpCodes.Call, Methods.ScriptContext.DynamicInclude); return PhpTypeCode.Object; } } #endregion #region IssetEx [NodeCompiler(typeof(IssetEx))] sealed class IssetExCompiler : ExpressionCompiler { public override Evaluation Analyze(IssetEx node, Analyzer analyzer, ExInfoFromParent info) { access = info.Access; var vars = node.VarList; for (int i = 0; i < vars.Count; i++) vars[i].Analyze(analyzer, ExInfoFromParent.DefaultExInfo); return new Evaluation(node); } public override PhpTypeCode Emit(IssetEx node, CodeGenerator codeGenerator) { Debug.Assert(access == AccessType.None || access == AccessType.Read); Statistics.AST.AddNode("IssetEx"); ILEmitter il = codeGenerator.IL; codeGenerator.ChainBuilder.Create(); codeGenerator.ChainBuilder.QuietRead = true; var vars = node.VarList; if (vars.Count == 1) { codeGenerator.EmitBoxing(VariableUseHelper.EmitIsset(vars[0], codeGenerator, false)); // Compare the result with "null" il.CmpNotNull(); } else { // Define labels Label f_label = il.DefineLabel(); Label x_label = il.DefineLabel(); // Get first variable codeGenerator.EmitBoxing(VariableUseHelper.EmitIsset(vars[0], codeGenerator, false)); // Compare the result with "null" il.CmpNotNull(); // Process following variables and include branching for (int i = 1; i < vars.Count; i++) { il.Emit(OpCodes.Brfalse, f_label); codeGenerator.EmitBoxing(VariableUseHelper.EmitIsset(vars[i], codeGenerator, false)); // Compare the result with "null" codeGenerator.IL.CmpNotNull(); } il.Emit(OpCodes.Br, x_label); il.MarkLabel(f_label, true); il.Emit(OpCodes.Ldc_I4_0); il.MarkLabel(x_label, true); } codeGenerator.ChainBuilder.End(); if (access == AccessType.None) { il.Emit(OpCodes.Pop); return PhpTypeCode.Void; } return PhpTypeCode.Boolean; } } #endregion #region EmptyEx [NodeCompiler(typeof(EmptyEx))] sealed class EmptyExCompiler : ExpressionCompiler { public override Evaluation Analyze(EmptyEx node, Analyzer analyzer, ExInfoFromParent info) { access = info.Access; var expression = node.Expression; var evaluation = expression .Analyze(analyzer, ExInfoFromParent.DefaultExInfo) .Evaluate(node, out expression); node.Expression = expression; return evaluation; } public override object Evaluate(EmptyEx node, object value) { return !Convert.ObjectToBoolean(value); } /// /// Instance. /// /// Nothing is expected on the evaluation stack. The result value is left on the /// evaluation stack. /// public override PhpTypeCode Emit(EmptyEx node, CodeGenerator codeGenerator) { Debug.Assert(access == AccessType.Read || access == AccessType.None); Statistics.AST.AddNode("EmptyEx"); var variable = node.Expression as VariableUse; // codeGenerator.ChainBuilder.Create(); if (variable != null) { // legacy isset behaviour (before PHP 5.5) codeGenerator.ChainBuilder.QuietRead = true; // call EmitIsset in order to evaluate the variable quietly codeGenerator.EmitBoxing(variable.EmitIsset(codeGenerator, true)); codeGenerator.IL.Emit(OpCodes.Call, Methods.PhpVariable.IsEmpty); } else { codeGenerator.EmitObjectToBoolean(node.Expression, true); } // codeGenerator.ChainBuilder.End(); if (access == AccessType.None) { codeGenerator.IL.Emit(OpCodes.Pop); return PhpTypeCode.Void; } return PhpTypeCode.Boolean; } public override bool IsDeeplyCopied(EmptyEx node, CopyReason reason, int nestingLevel) { return false; } } #endregion #region EvalEx, AssertEx [NodeCompiler(typeof(EvalEx), Singleton = true)] sealed class EvalExCompiler : ExpressionCompiler { #region Analysis public override Evaluation Analyze(EvalEx node, Analyzer analyzer, ExInfoFromParent info) { access = info.Access; node.Code = node.Code.Analyze(analyzer, ExInfoFromParent.DefaultExInfo).Literalize(); analyzer.AddCurrentRoutineProperty(RoutineProperties.ContainsEval); return new Evaluation(node); } #endregion #region Emission public override PhpTypeCode Emit(EvalEx node, CodeGenerator codeGenerator) { // not emitted in release mode: Debug.Assert(access == AccessType.None || access == AccessType.Read || access == AccessType.ReadRef); Debug.Assert(codeGenerator.RTVariablesTablePlace != null, "Function should have variables table."); Statistics.AST.AddNode("EvalEx"); PhpTypeCode result = codeGenerator.EmitEval(EvalKinds.ExplicitEval, node.Code, node.Span, null, null); // handles return value according to the access type: codeGenerator.EmitReturnValueHandling(node, false, ref result); return result; } #endregion } [NodeCompiler(typeof(AssertEx))] sealed class AssertExCompiler : ExpressionCompiler { /// /// Contains the code string literal that has been inlined. /// private string _inlinedCode; #region Analysis public override Evaluation Analyze(AssertEx node, Analyzer analyzer, ExInfoFromParent info) { access = info.Access; // assertion: if (analyzer.Context.Config.Compiler.Debug) { Evaluation code_evaluation = node.CodeEx.Analyze(analyzer, ExInfoFromParent.DefaultExInfo); //Evaluation desc_evaluation = node.DescriptionEx.Analyze(analyzer, ExInfoFromParent.DefaultExInfo); // string parameter is parsed and converted to an expression: if (code_evaluation.HasValue) { _inlinedCode = Convert.ObjectToString(code_evaluation.Value); if (!string.IsNullOrEmpty(_inlinedCode)) { const string prefix = "return "; // the position of the last character before the parsed string: var statements = analyzer.BuildAst(node.CodeEx.Span.Start - prefix.Length + 1, String.Concat(prefix, _inlinedCode, ";")); // code is unevaluable: if (statements == null) return new Evaluation(node, true); if (statements.Length > 1) analyzer.ErrorSink.Add(Warnings.MultipleStatementsInAssertion, analyzer.SourceUnit, node.Span); Debug.Assert(statements.Length > 0 && statements[0] is JumpStmt); node.CodeEx = ((JumpStmt)statements[0]).Expression; } else { // empty assertion: return new Evaluation(node, true); } } else { node.CodeEx = code_evaluation.Expression; analyzer.AddCurrentRoutineProperty(RoutineProperties.ContainsEval); } // node.CodeEx = node.CodeEx.Analyze(analyzer, ExInfoFromParent.DefaultExInfo).Literalize(); return new Evaluation(node); } else { // replace with "true" value in release mode: return new Evaluation(node, true); } } #endregion #region Emission public override PhpTypeCode Emit(AssertEx node, CodeGenerator codeGenerator) { // not emitted in release mode: Debug.Assert(codeGenerator.Context.Config.Compiler.Debug, "Assert should be cut off in release mode."); Debug.Assert(access == AccessType.None || access == AccessType.Read || access == AccessType.ReadRef); Debug.Assert(_inlinedCode != null || codeGenerator.RTVariablesTablePlace != null, "Function should have variables table."); Statistics.AST.AddNode("AssertEx"); ILEmitter il = codeGenerator.IL; PhpTypeCode result; if (_inlinedCode != null) { Label endif_label = il.DefineLabel(); Label else_label = il.DefineLabel(); // IF DynamicCode.PreAssert(context) THEN codeGenerator.EmitLoadScriptContext(); il.Emit(OpCodes.Call, Methods.DynamicCode.PreAssert); il.Emit(OpCodes.Brfalse, else_label); if (true) { // LOAD ; codeGenerator.EmitBoxing(((Expression)node.CodeEx).Emit(codeGenerator)); // CALL DynamicCode.PostAssert(context); codeGenerator.EmitLoadScriptContext(); il.Emit(OpCodes.Call, Methods.DynamicCode.PostAssert); // LOAD bool CheckAssertion(STACK, , context, , line, column); var position = new Text.TextPoint(codeGenerator.SourceUnit.LineBreaks, node.Span.Start); il.Emit(OpCodes.Ldstr, _inlinedCode); codeGenerator.EmitLoadScriptContext(); il.Emit(OpCodes.Ldstr, codeGenerator.SourceUnit.SourceFile.RelativePath.ToString()); il.LdcI4(position.Line); il.LdcI4(position.Column); codeGenerator.EmitLoadNamingContext(); il.Emit(OpCodes.Call, Methods.DynamicCode.CheckAssertion); // GOTO END IF; il.Emit(OpCodes.Br, endif_label); } // ELSE il.MarkLabel(else_label); if (true) { // LOAD true; il.Emit(OpCodes.Ldc_I4_1); } // END IF; il.MarkLabel(endif_label); result = PhpTypeCode.Object; } else { result = codeGenerator.EmitEval(EvalKinds.Assert, node.CodeEx, node.Span, null, null); } // handles return value according to the access type: codeGenerator.EmitReturnValueHandling(node, false, ref result); return result; } #endregion } #endregion #region ExitEx [NodeCompiler(typeof(ExitEx))] sealed class ExitExCompiler : ExpressionCompiler { public override Evaluation Analyze(ExitEx node, Analyzer analyzer, ExInfoFromParent info) { access = info.Access; if (node.ResulExpr != null) node.ResulExpr = node.ResulExpr.Analyze(analyzer, ExInfoFromParent.DefaultExInfo).Literalize(); analyzer.EnterUnreachableCode(); return new Evaluation(node); } public override PhpTypeCode Emit(ExitEx node, CodeGenerator codeGenerator) { Debug.Assert(access == AccessType.None || access == AccessType.Read); Statistics.AST.AddNode("ExitEx"); codeGenerator.EmitLoadScriptContext(); if (node.ResulExpr == null) { codeGenerator.IL.Emit(OpCodes.Ldnull); } else { codeGenerator.EmitBoxing(node.ResulExpr.Emit(codeGenerator)); } codeGenerator.IL.Emit(OpCodes.Call, Methods.ScriptContext.Die); if (access == AccessType.Read) { codeGenerator.IL.Emit(OpCodes.Ldnull); return PhpTypeCode.Object; } else return PhpTypeCode.Void; } } #endregion } /// /// IncludingExCompiler members to be accessed by compiler. /// internal interface IIncludingExCompiler : INodeCompiler { StaticInclusion Inclusion { get; set; } Characteristic Characteristic { get; set; } } } ================================================ FILE: Source/Core/Compiler/AST/CallSignature.cs ================================================ /* Copyright (c) 2013 DEVSENSE The use and distribution terms for this software are contained in the file named License.txt, which can be found in the root of the Phalanger distribution. By using this software in any fashion, you are agreeing to be bound by the terms of this license. You must not remove this notice from this software. */ using System; using System.IO; using System.Text; using System.Collections.Generic; using System.Reflection; using System.Reflection.Emit; using System.Diagnostics; using System.Collections; using PHP.Core.AST; using PHP.Core.Emit; using PHP.Core.Parsers; using PHP.Core.Reflection; namespace PHP.Core.Compiler.AST { partial class NodeCompilers { #region ActualParam [NodeCompiler(typeof(ActualParam), Singleton = true)] sealed class ActualParamCompiler : INodeCompiler, IActualParamCompiler { public void Analyze(ActualParam/*!*/node, Analyzer/*!*/ analyzer, bool isBaseCtorCallConstrained) { // TODO: isBaseCtorCallConstrained ExInfoFromParent info = new ExInfoFromParent(node); analyzer.EnterActParam(); if (node.IsVariadic) throw new NotImplementedException(); if (analyzer.ActParamDeclIsUnknown()) { // we don't know whether the parameter will be passed by reference at run-time: if (node.Expression.AllowsPassByReference) { info.Access = AccessType.ReadUnknown; // Although we prepare to pass reference, value can be really passed. // That's why we report warning when user use '&' in calling, // because it has no influence. if (node.Ampersand) analyzer.ErrorSink.Add(Warnings.ActualParamWithAmpersand, analyzer.SourceUnit, node.Span); } else { info.Access = AccessType.Read; } } else { if (analyzer.ActParamPassedByRef()) { if (node.Expression.AllowsPassByReference) { info.Access = AccessType.ReadRef; } else { analyzer.ErrorSink.Add(Errors.NonVariablePassedByRef, analyzer.SourceUnit, node.Expression.Span); analyzer.LeaveActParam(); return; } } else { info.Access = AccessType.Read; if (node.Ampersand) analyzer.ErrorSink.Add(Warnings.ActualParamWithAmpersand, analyzer.SourceUnit, node.Span); } } node._expression = node.Expression.Analyze(analyzer, info).Literalize(); // TODO: if signature is known, act. param has type hint and expression has known type; check if type hint matches expression analyzer.LeaveActParam(); } public PhpTypeCode Emit(ActualParam/*!*/node, CodeGenerator/*!*/ codeGenerator, bool ensureChainWritable = false) { codeGenerator.ChainBuilder.Create(); if (ensureChainWritable) codeGenerator.ChainBuilder.EnsureWritable = true; try { return node.Expression.Emit(codeGenerator); } finally { codeGenerator.ChainBuilder.End(); } } } #endregion #region NamedActualParam [NodeCompiler(typeof(NamedActualParam))] public sealed class NamedActualParamCompiler : INodeCompiler, INamedActualParamCompiler { public DProperty Property { get { return property; } } private DProperty property; public void Analyze(NamedActualParam/*!*/node, Analyzer/*!*/ analyzer, DType/*!*/ propertiesDeclarer) { // TODO: Named parameters can target the non-static, public, and read-write fields // or properties of the attribute class bool visibility_check; if (!propertiesDeclarer.IsUnknown) { property = analyzer.ResolveProperty(propertiesDeclarer, node.Name, node.Span, false, null, null, out visibility_check); } node.expression = node.Expression.Analyze(analyzer, ExInfoFromParent.DefaultExInfo).Literalize(); } } #endregion #region CallSignature [NodeCompiler(typeof(CallSignature), Singleton = true)] sealed class CallSignatureCompiler : INodeCompiler, ICallSignatureCompiler { /// /// Gets true if all the Parameters (after the analysis) have the value and could be evaluated during the compilation time. /// public bool AllParamsHaveValue(CallSignature/*!*/node) { foreach (var p in node.Parameters) if (!p.Expression.HasValue()) return false; return true; } public void Analyze(CallSignature/*!*/node, Analyzer/*!*/ analyzer, RoutineSignature/*!*/ signature, ExInfoFromParent info, bool isBaseCtorCallConstrained) { // generic: foreach (var p in node.GenericParams) TypeRefHelper.Analyze(p, analyzer); // regular: analyzer.EnterActualParams(signature, node.Parameters.Length); foreach (var p in node.Parameters) p.NodeCompiler().Analyze(p, analyzer, isBaseCtorCallConstrained); analyzer.LeaveActualParams(); } /// /// Builds with call signature parameters. /// /// public ArrayEx/*!*/BuildPhpArray(CallSignature/*!*/node) { Debug.Assert(node.GenericParams.Empty()); List arrayItems = new List(node.Parameters.Length); var pos = Text.Span.Invalid; foreach (var p in node.Parameters) { arrayItems.Add(new ValueItem(null, p.Expression)); if (pos.IsValid) pos = p.Span; else pos = Text.Span.FromBounds(pos.Start, p.Span.End); } return new ArrayEx(pos, arrayItems); } #region Emission /// /// Emits IL instructions that load actual parameters and optionally add a new stack frame to /// current . /// /// Instance. /// Code generator. /// /// Nothing is expected on the evaluation stack. Nothing is left on the evaluation stack. /// public void EmitLoadOnPhpStack(CallSignature/*!*/node, CodeGenerator/*!*/ codeGenerator) { var parameters = node.Parameters; var genericParams = node.GenericParams; PhpStackBuilder.EmitAddFrame(codeGenerator.IL, codeGenerator.ScriptContextPlace, genericParams.Length, parameters.Length, delegate(ILEmitter il, int i) { // generic arguments: genericParams[i].EmitLoadTypeDesc(codeGenerator, ResolveTypeFlags.UseAutoload | ResolveTypeFlags.ThrowErrors); }, delegate(ILEmitter il, int i) { // regular arguments: var p = parameters[i]; codeGenerator.EmitBoxing(p.NodeCompiler().Emit(p, codeGenerator)); } ); } /// /// Emits IL instructions that load actual parameters on the evaluation stack. /// /// Instance. /// Code generator. /// PHP method being called. /// /// /// The function has mandatory and optional formal arguments. /// Mandatory arguments are those formal arguments which are not preceded by /// any formal argument with default value. The others are optional. /// If a formal argument without default value is declared beyond the last mandatory argument /// it is treated as optional one by the caller. The callee checks this and throws warning. /// /// Missing arguments handling: /// /// missing mandatory argument - WARNING; LOAD(null); /// missing optional argument - LOAD(Arg.Default); /// superfluous arguments are ignored /// /// public void EmitLoadOnEvalStack(CallSignature/*!*/node, CodeGenerator/*!*/ codeGenerator, PhpRoutine/*!*/ routine) { EmitLoadTypeArgsOnEvalStack(node, codeGenerator, routine); EmitLoadArgsOnEvalStack(node, codeGenerator, routine); } internal void EmitLoadTypeArgsOnEvalStack(CallSignature/*!*/node, CodeGenerator/*!*/ codeGenerator, PhpRoutine/*!*/ routine) { ILEmitter il = codeGenerator.IL; int mandatory_count = (routine.Signature != null) ? routine.Signature.MandatoryGenericParamCount : 0; int formal_count = (routine.Signature != null) ? routine.Signature.GenericParamCount : 0; int actual_count = node.GenericParams.Length; // loads all actual parameters which are not superfluous: for (int i = 0; i < Math.Min(actual_count, formal_count); i++) node.GenericParams[i].EmitLoadTypeDesc(codeGenerator, ResolveTypeFlags.UseAutoload | ResolveTypeFlags.ThrowErrors); // loads missing mandatory arguments: for (int i = actual_count; i < mandatory_count; i++) { // CALL PhpException.MissingTypeArgument(,); il.LdcI4(i + 1); il.Emit(OpCodes.Ldstr, routine.FullName); codeGenerator.EmitPhpException(Methods.PhpException.MissingTypeArgument); // LOAD DTypeDesc.ObjectTypeDesc; il.Emit(OpCodes.Ldsfld, Fields.DTypeDesc.ObjectTypeDesc); } // loads missing optional arguments: for (int i = Math.Max(mandatory_count, actual_count); i < formal_count; i++) { // LOAD Arg.DefaultType; il.Emit(OpCodes.Ldsfld, Fields.Arg_DefaultType); } } internal void EmitLoadArgsOnEvalStack(CallSignature/*!*/node, CodeGenerator/*!*/ codeGenerator, PhpRoutine/*!*/ routine) { ILEmitter il = codeGenerator.IL; int mandatory_count = (routine.Signature != null) ? routine.Signature.MandatoryParamCount : 0; int formal_count = (routine.Signature != null) ? routine.Signature.ParamCount : 0; int actual_count = node.Parameters.Length; PhpTypeCode param_type; // loads all actual parameters which are not superfluous: for (int i = 0; i < Math.Min(actual_count, formal_count); i++) { var p = node.Parameters[i]; codeGenerator.EmitBoxing(param_type = p.NodeCompiler().Emit(p, codeGenerator)); // Actual param emitter should emit "boxing" to a reference if its access type is ReadRef. // That's why no operation is needed here and references should match. Debug.Assert((routine.Signature == null || routine.Signature.IsAlias(i)) == (param_type == PhpTypeCode.PhpReference)); } // loads missing mandatory arguments: for (int i = actual_count; i < mandatory_count; i++) { // CALL PhpException.MissingArgument(,); il.LdcI4(i + 1); il.Emit(OpCodes.Ldstr, routine.FullName); codeGenerator.EmitPhpException(Methods.PhpException.MissingArgument); // LOAD null; if (routine.Signature.IsAlias(i)) il.Emit(OpCodes.Newobj, Constructors.PhpReference_Void); else il.Emit(OpCodes.Ldnull); } // loads missing optional arguments: for (int i = Math.Max(mandatory_count, actual_count); i < formal_count; i++) { // LOAD Arg.Default; il.Emit(OpCodes.Ldsfld, Fields.Arg_Default); } } /// /// Emits parameter loading. /// /// Instance. /// Emitter. /// The index of the parameter starting from 0. /// Code generator. /// Target . /// The type of the actual argument or its value if it is a leteral. public object EmitLibraryLoadArgument(CallSignature/*!*/node, ILEmitter/*!*/ il, int index, object/*!*/ codeGenerator, ParameterInfo param) { Debug.Assert(codeGenerator != null); Debug.Assert(index < node.Parameters.Length, "Missing arguments prevents code generation"); // returns value if the parameter is evaluable at compile time: if (node.Parameters[index].Expression.HasValue()) return node.Parameters[index].Expression.GetValue(); // emits parameter evaluation: var p = node.Parameters[index]; return PhpTypeCodeEnum.ToType(p.NodeCompiler().Emit(p, (CodeGenerator)codeGenerator, PhpRwAttribute.IsDefined(param))); } /// /// Emits load of optional parameters array on the evaluation stack. /// /// Instance. /// An overloads builder. /// An index of the first optional parameter to be loaded into the array (indices start from 0). /// /// A of the formal parameter of the target method where the array will be passed. /// This information influences conversions all optional parameters. /// /// Optional argument count (unused). public void EmitLibraryLoadOptArguments(CallSignature/*!*/node, OverloadsBuilder/*!*/ builder, int start, ParameterInfo/*!*/ param, IPlace optArgCount) { Debug.Assert(start >= 0 && builder != null && param != null && builder.Aux is CodeGenerator); ILEmitter il = builder.IL; Type elem_type = param.ParameterType.GetElementType(); Type array_type = elem_type.MakeArrayType(); // NEW [] il.LdcI4(node.Parameters.Length - start); il.Emit(OpCodes.Newarr, elem_type); // loads each optional parameter into the appropriate bucket of the array: for (int i = start; i < node.Parameters.Length; i++) { // [i - start] il.Emit(OpCodes.Dup); il.LdcI4(i - start); // object type_or_value = EmitLibraryLoadArgument(node, il, i, builder.Aux, param); builder.EmitArgumentConversion(elem_type, type_or_value, false, param, 3); // [i - start] = ; il.Stelem(elem_type); } // } #endregion } #endregion } #region INamedActualParamCompiler internal interface INamedActualParamCompiler { DProperty Property { get; } void Analyze(NamedActualParam/*!*/node, Analyzer/*!*/ analyzer, DType/*!*/ propertiesDeclarer); } internal static class NamedActualParamCompilerHelper { public static DProperty GetProperty(this NamedActualParam node) { return node.NodeCompiler().Property; } public static void Analyze(this NamedActualParam/*!*/node, Analyzer/*!*/ analyzer, DType/*!*/ propertiesDeclarer) { node.NodeCompiler().Analyze(node, analyzer, propertiesDeclarer); } } #endregion #region IActualParamCompiler internal interface IActualParamCompiler { PhpTypeCode Emit(ActualParam/*!*/node, CodeGenerator/*!*/ codeGenerator, bool ensureChainWritable); } internal static class ActualParamCompilerHelper { public static PhpTypeCode Emit(this ActualParam/*!*/node, CodeGenerator/*!*/ codeGenerator, bool ensureChainWritable = false) { return node.NodeCompiler().Emit(node, codeGenerator, ensureChainWritable); } } #endregion #region ICallSignatureCompiler internal interface ICallSignatureCompiler { bool AllParamsHaveValue(CallSignature/*!*/node); ArrayEx/*!*/BuildPhpArray(CallSignature/*!*/node); void Analyze(CallSignature/*!*/node, Analyzer/*!*/ analyzer, RoutineSignature/*!*/ signature, ExInfoFromParent info, bool isBaseCtorCallConstrained); void EmitLoadOnPhpStack(CallSignature/*!*/node, CodeGenerator/*!*/ codeGenerator); void EmitLoadOnEvalStack(CallSignature/*!*/node, CodeGenerator/*!*/ codeGenerator, PhpRoutine/*!*/ routine); object EmitLibraryLoadArgument(CallSignature/*!*/node, ILEmitter/*!*/ il, int index, object/*!*/ codeGenerator, ParameterInfo param); void EmitLibraryLoadOptArguments(CallSignature/*!*/node, OverloadsBuilder/*!*/ builder, int start, ParameterInfo/*!*/ param, IPlace optArgCount); } internal static class CallSignatureHelpers { public static bool AllParamsHaveValue(this CallSignature/*!*/node) { return node.NodeCompiler().AllParamsHaveValue(node); } public static ArrayEx/*!*/BuildPhpArray(this CallSignature/*!*/node) { return node.NodeCompiler().BuildPhpArray(node); } public static void Analyze(this CallSignature/*!*/node, Analyzer/*!*/ analyzer, RoutineSignature/*!*/ signature, ExInfoFromParent info, bool isBaseCtorCallConstrained) { node.NodeCompiler().Analyze(node, analyzer, signature, info, isBaseCtorCallConstrained); } public static void EmitLoadOnPhpStack(this CallSignature/*!*/node, CodeGenerator/*!*/ codeGenerator) { node.NodeCompiler().EmitLoadOnPhpStack(node, codeGenerator); } public static void EmitLoadOnEvalStack(this CallSignature/*!*/node, CodeGenerator/*!*/ codeGenerator, PhpRoutine/*!*/ routine) { node.NodeCompiler().EmitLoadOnEvalStack(node, codeGenerator, routine); } public static object EmitLibraryLoadArgument(this CallSignature/*!*/node, ILEmitter/*!*/ il, int index, object/*!*/ codeGenerator, ParameterInfo param) { return node.NodeCompiler().EmitLibraryLoadArgument(node, il, index, codeGenerator, param); } public static void EmitLibraryLoadOptArguments(this CallSignature/*!*/node, OverloadsBuilder/*!*/ builder, int start, ParameterInfo/*!*/ param, IPlace optArgCount) { node.NodeCompiler().EmitLibraryLoadOptArguments(node, builder, start, param, optArgCount); } } #endregion } ================================================ FILE: Source/Core/Compiler/AST/ConcatEx.cs ================================================ /* Copyright (c) 2013 DEVSENSE The use and distribution terms for this software are contained in the file named License.txt, which can be found in the root of the Phalanger distribution. By using this software in any fashion, you are agreeing to be bound by the terms of this license. You must not remove this notice from this software. */ using System; using System.Collections.Generic; using System.Linq; using System.Reflection.Emit; using System.Diagnostics; using PHP.Core.AST; using PHP.Core.Emit; using PHP.Core.Parsers; namespace PHP.Core.Compiler.AST { partial class NodeCompilers { [NodeCompiler(typeof(ConcatEx))] sealed class ConcatExCompiler : ExpressionCompiler { #region Analysis private static IList ChainConcatenations(IList/*!*/ expressions) { //return expressions; List newExpressions = null; ConcatEx expr; for (int index = 0; index < expressions.Count; index++) { if ((expr = expressions[index] as ConcatEx) != null) { if (newExpressions == null) { newExpressions = new List(index); newExpressions.AddRange(expressions.Take(index)); // initial list of expressions (that were not ConcatEx) } newExpressions.AddRange(expr.Expressions); } else if (newExpressions != null) { newExpressions.Add(expressions[index]); } } // something was chained ?? or not return (IList)newExpressions ?? expressions; } /// /// Analyze the list of expressions and separate them into a list of chunks. (HasValue and !HasValue together) /// /// List of chunks - expressions chunked by that, if they are evaluable during compilation. Cannot return null. private static List AnalyzeChunks(Analyzer/*!*/ analyzer, IList/*!*/expressions) { Debug.Assert(expressions.Any()); List chunks = new List(); ConcatChunk lastChunk = null; // flattern concatenation expressions: expressions = ChainConcatenations(expressions); // analyze chunks foreach (var expr in expressions) { var evaluation = expr.Analyze(analyzer, ExInfoFromParent.DefaultExInfo); // skip empty evaluated expressions if (evaluation.HasValue && ( evaluation.Value == null || (evaluation.Value is string && ((string)evaluation.Value) == string.Empty) || Convert.ObjectToPhpBytes(evaluation.Value).Length == 0 )) { continue; // empty literal => skip } // add chunk if (lastChunk == null || lastChunk.HasValue != evaluation.HasValue) { chunks.Add(lastChunk = new ConcatChunk(expr.Span, evaluation)); } else if (evaluation.HasValue) { lastChunk.Value = Operators.Concat(lastChunk.Value, evaluation.Value); lastChunk.Position = Text.Span.Combine(lastChunk.Position, expr.Span); } else//if (!evaluation.HasValue) { lastChunk.Expressions.Add(evaluation.Expression); lastChunk.Position = Text.Span.Combine(lastChunk.Position, expr.Span); } } // there must be at least one expression if (chunks.Count == 0) { var position = Text.Span.Invalid; if (expressions.Count > 0) position = expressions[0].Span; chunks.Add(new ConcatChunk(position, string.Empty)); } // return chunks; } /// /// Expressions from ConcatChunks, Values are transformed into corresponding literals. /// private static IEnumerable ChunkExpressions(IEnumerable/*!*/concatChunks) { Debug.Assert(concatChunks != null); foreach (var chunk in concatChunks) { if (chunk.HasValue) { yield return LiteralUtils.Create(chunk.Position, chunk.Value, AccessType.Read); } else { foreach (var expr in chunk.Expressions) yield return expr; } } } public override Evaluation Analyze(ConcatEx node, Analyzer analyzer, ExInfoFromParent info) { Debug.Assert(node.Expressions.Length > 0); access = info.Access; var concatChunks = AnalyzeChunks(analyzer, node.Expressions); node.Expressions = ChunkExpressions(concatChunks).ToArray(); // replace expressions with optimized one if (concatChunks.Count == 1 && concatChunks[0].HasValue) return new Evaluation(node, concatChunks[0].Value); // can be resolved during compilation time else return new Evaluation(node); } public override object Evaluate(ConcatEx node, object leftValue, object rightValue) { return Operators.Concat(leftValue, rightValue); } /// /// Piece of analyzed ConcatEx expressions list. /// private class ConcatChunk { public ConcatChunk(Text.Span position, Evaluation evaluation) { if ((this.HasValue = evaluation.HasValue) == true) this.Value = evaluation.Value; else this.Expressions = new List() { evaluation.Expression }; this.Position = position; } public ConcatChunk(Text.Span position, object value) { this.HasValue = true; this.Value = value; this.Position = position; } public bool HasValue; /// /// If HasValue is true, the Value of the chunk. /// public object Value; /// /// Position of the within the source code. /// public Text.Span Position; /// /// If HasValue is false, list of expression to be emitted. /// public List Expressions; } #endregion #region Emission public override bool IsDeeplyCopied(ConcatEx node, CopyReason reason, int nestingLevel) { return false; } public override PhpTypeCode Emit(ConcatEx node, CodeGenerator codeGenerator) { Debug.Assert(access == AccessType.Read || access == AccessType.None); Statistics.AST.AddNode("Class.Concat." + node.Expressions.Length); PhpTypeCode result; // // For low numbers call specialized methods var/*!*/expressions = node.Expressions; switch (expressions.Length) { case 1: result = expressions[0].Emit(codeGenerator); if (result != PhpTypeCode.PhpBytes && result != PhpTypeCode.String) { var lbl = codeGenerator.IL.DefineLabel(); codeGenerator.EmitBoxing(result); codeGenerator.IL.Emit(OpCodes.Dup); codeGenerator.IL.Emit(OpCodes.Isinst, typeof(PhpBytes)); // IF (STACK) codeGenerator.IL.Emit(OpCodes.Brtrue_S, lbl); if (true) { codeGenerator.IL.Emit(OpCodes.Call, Methods.Convert.ObjectToString); } // ELSE codeGenerator.IL.MarkLabel(lbl, true); //END IF result = PhpTypeCode.Object; } break; case 2: result = EmitConcat(codeGenerator, expressions[0], expressions[1]); break; default: codeGenerator.EmitObjectArrayPopulation(expressions); codeGenerator.IL.Emit(OpCodes.Call, Methods.Operators.Concat.ObjectArray); result = PhpTypeCode.Object; // string, PhpBytes break; } switch (access) { case AccessType.Read: // do nothing break; case AccessType.None: // pop result from stack codeGenerator.IL.Emit(OpCodes.Pop); result = PhpTypeCode.Void; break; } return result; } /// /// Emits concatenation of a pair of expressions. /// /// A code generator. /// The first expression. /// The second expression. /// The resulting type code. internal static PhpTypeCode EmitConcat(CodeGenerator/*!*/ codeGenerator, Expression/*!*/ x, Expression/*!*/ y) { PhpTypeCode type_code_x = EmitConcatExpressionLoad(codeGenerator, x); PhpTypeCode type_code_y = EmitConcatExpressionLoad(codeGenerator, y); if (type_code_x == PhpTypeCode.String) { if (type_code_y == PhpTypeCode.String) { // string.string: codeGenerator.IL.Emit(OpCodes.Call, Methods.String_Concat_String_String); return PhpTypeCode.String; } else if (type_code_y == PhpTypeCode.PhpBytes) { // check the return type: Debug.Assert(Methods.PhpBytes.Concat_Object_PhpBytes.ReturnType == typeof(PhpBytes)); // string.PhpBytes: codeGenerator.IL.Emit(OpCodes.Call, Methods.PhpBytes.Concat_Object_PhpBytes); return PhpTypeCode.PhpBytes; } else { // string.object: codeGenerator.IL.Emit(OpCodes.Call, Methods.Operators.Concat.String_Object); return PhpTypeCode.Object; } } else if (type_code_x == PhpTypeCode.PhpBytes) { if (type_code_y == PhpTypeCode.PhpBytes) { // check the return type: Debug.Assert(Methods.PhpBytes.Concat_PhpBytes_PhpBytes.ReturnType == typeof(PHP.Core.PhpBytes)); // PhpBytes.PhpBytes codeGenerator.IL.Emit(OpCodes.Call, Methods.PhpBytes.Concat_PhpBytes_PhpBytes); } else { // check the return type: Debug.Assert(Methods.PhpBytes.Concat_PhpBytes_Object.ReturnType == typeof(PHP.Core.PhpBytes)); // PhpBytes.object: codeGenerator.IL.Emit(OpCodes.Call, Methods.PhpBytes.Concat_PhpBytes_Object); } return PhpTypeCode.PhpBytes; } else { if (type_code_y == PhpTypeCode.String) { // check the return type: //Debug.Assert(Methods.Operators.Concat.Object_String.ReturnType == typeof(object)); // object.string: codeGenerator.IL.Emit(OpCodes.Call, Methods.Operators.Concat.Object_String); return PhpTypeCode.Object; } else if (type_code_y == PhpTypeCode.PhpBytes) { // check the return type: Debug.Assert(Methods.PhpBytes.Concat_Object_PhpBytes.ReturnType == typeof(PhpBytes)); // object.PhpBytes: codeGenerator.IL.Emit(OpCodes.Call, Methods.PhpBytes.Concat_Object_PhpBytes); return PhpTypeCode.PhpBytes; } else { // object.object: codeGenerator.IL.Emit(OpCodes.Call, Methods.Operators.Concat.Object_Object); return PhpTypeCode.Object; } } } /// /// Emits load of an argument of a concatenation. /// private static PhpTypeCode EmitConcatExpressionLoad(CodeGenerator/*!*/ codeGenerator, Expression/*!*/ expression) { // tries to evaluate the expression: if (expression.HasValue()) { var value = expression.GetValue(); if (value is PhpBytes) { codeGenerator.IL.LoadLiteral(value); return PhpTypeCode.PhpBytes; } else { // evaluated expression is converted to a string if necessary: codeGenerator.IL.Emit(OpCodes.Ldstr, Convert.ObjectToString(value)); return PhpTypeCode.String; } } else { // emits non-evaluable expression: PhpTypeCode result = expression.Emit(codeGenerator); // the result should be converted to string: (so we know the type for the further analysis) if (result != PhpTypeCode.String && // string already result != PhpTypeCode.Object && // object can contain PhpBytes, should be converted just when we know we need string result != PhpTypeCode.PhpBytes // keep PhpBytes ) { codeGenerator.EmitBoxing(result); // in case of value-type codeGenerator.IL.Emit(OpCodes.Call, Methods.Convert.ObjectToString); result = PhpTypeCode.String; } return result; } } #endregion } } } ================================================ FILE: Source/Core/Compiler/AST/ConstantUse.cs ================================================ /* Copyright (c) 2004-2006 Tomas Matousek, Vaclav Novak and Martin Maly. The use and distribution terms for this software are contained in the file named License.txt, which can be found in the root of the Phalanger distribution. By using this software in any fashion, you are agreeing to be bound by the terms of this license. You must not remove this notice from this software. */ using System; using System.Reflection.Emit; using System.Diagnostics; using PHP.Core.AST; using PHP.Core.Emit; using PHP.Core.Parsers; using PHP.Core.Reflection; namespace PHP.Core.Compiler.AST { partial class NodeCompilers { #region ConstantUse abstract class ConstantUseCompiler : ExpressionCompiler where T : ConstantUse { protected DConstant constant; internal abstract void ResolveName(T/*!*/node, Analyzer/*!*/ analyzer); /// /// Determines behavior on assignment. /// /// Always false, since constants contain immutable objects only. public override bool IsDeeplyCopied(T node, CopyReason reason, int nestingLevel) { return false; } public override Evaluation Analyze(T node, Analyzer analyzer, ExInfoFromParent info) { bool already_resolved = constant != null; if (!already_resolved) { access = info.Access; ResolveName(node, analyzer); } if (constant.IsUnknown) return new Evaluation(node); KnownConstant known_const = (KnownConstant)constant; if (known_const.HasValue) { // constant value is known: return new Evaluation(node, known_const.Value); } else if (already_resolved) { // circular definition: constant.ReportCircularDefinition(analyzer.ErrorSink); return new Evaluation(node); } else { // value is not known yet, try to resolve it: if (known_const.Node != null) known_const.Node.Analyze(analyzer); return (known_const.HasValue) ? new Evaluation(node, known_const.Value) : new Evaluation(node); } } } #endregion #region GlobalConstUse [NodeCompiler(typeof(GlobalConstUse))] sealed class GlobalConstUseCompiler : ConstantUseCompiler { public override Evaluation EvaluatePriorAnalysis(GlobalConstUse node, CompilationSourceUnit sourceUnit) { constant = sourceUnit.TryResolveGlobalConstantGlobally(node.Name); return (constant != null && constant.HasValue) ? new Evaluation(node, constant.Value) : new Evaluation(node); } internal override void ResolveName(GlobalConstUse/*!*/node, Analyzer/*!*/ analyzer) { if (constant == null) constant = analyzer.ResolveGlobalConstantName(node.Name, node.Span); } /// /// Instance. /// /// Emits IL instructions to load the value of the constant. If the value is known at compile /// time (constant is system), its value is loaded on the stack. Otherwise the value is /// obtained at runtime by calling . /// public override PhpTypeCode Emit(GlobalConstUse node, CodeGenerator codeGenerator) { Debug.Assert(access == AccessType.Read || access == AccessType.None); Statistics.AST.AddNode("ConstantUse.Global"); // loads constant only if its value is read: if (access == AccessType.Read) { return constant.EmitGet(codeGenerator, null, false, node.FallbackName.HasValue ? node.FallbackName.Value.ToString() : null); } else { // to satisfy debugger; sequence point has already been defined: if (codeGenerator.Context.Config.Compiler.Debug) codeGenerator.IL.Emit(OpCodes.Nop); } return PhpTypeCode.Void; } } #endregion #region ClassConstUse /// /// Class constant use. /// [NodeCompiler(typeof(ClassConstUse))] class ClassConstUseCompiler : ConstantUseCompiler where T : ClassConstUse { protected DType/*!A*/type; bool runtimeVisibilityCheck; public override Evaluation EvaluatePriorAnalysis(T node, CompilationSourceUnit sourceUnit) { var className = node.ClassName; if (!string.IsNullOrEmpty(className.QualifiedName.Name.Value)) constant = sourceUnit.TryResolveClassConstantGlobally(className, node.Name); return (constant != null && constant.HasValue) ? new Evaluation(node, constant.Value) : new Evaluation(node); } internal override void ResolveName(T node, Analyzer analyzer) { var typeRef = node.TypeRef; TypeRefHelper.Analyze(typeRef, analyzer); this.type = TypeRefHelper.ResolvedTypeOrUnknown(typeRef); // analyze constructed type (we are in the full analysis): analyzer.AnalyzeConstructedType(type); constant = analyzer.ResolveClassConstantName(type, node.Name, node.Span, analyzer.CurrentType, analyzer.CurrentRoutine, out runtimeVisibilityCheck); } public override PhpTypeCode Emit(T node, CodeGenerator codeGenerator) { Debug.Assert(access == AccessType.None || access == AccessType.Read); Statistics.AST.AddNode("ConstantUse.Class"); if (access == AccessType.Read) { return constant.EmitGet(codeGenerator, type as ConstructedType, runtimeVisibilityCheck, null); } else { // to satisfy debugger; sequence point has already been defined: if (codeGenerator.Context.Config.Compiler.Debug) codeGenerator.IL.Emit(OpCodes.Nop); } return PhpTypeCode.Void; } } #endregion #region PseudoClassConstUseCompiler [NodeCompiler(typeof(PseudoClassConstUse))] sealed class PseudoClassConstUseCompiler : ClassConstUseCompiler { private string TryGetValue(PseudoClassConstUse/*!*/node) { switch (node.Type) { case PseudoClassConstUse.Types.Class: var className = node.ClassName; if (string.IsNullOrEmpty(className.QualifiedName.Name.Value) || className.QualifiedName.IsStaticClassName || className.QualifiedName.IsSelfClassName) return null; return className.QualifiedName.ToString(); default: throw new InvalidOperationException(); } } internal override void ResolveName(PseudoClassConstUse node, Analyzer analyzer) { if (this.type != null) return; var typeRef = node.TypeRef; typeRef.Analyze(analyzer); this.type = typeRef.ResolvedTypeOrUnknown(); // analyze constructed type (we are in the full analysis): analyzer.AnalyzeConstructedType(type); // this.constant = null; } public override Evaluation EvaluatePriorAnalysis(PseudoClassConstUse node, CompilationSourceUnit sourceUnit) { var value = TryGetValue(node); if (value != null) return new Evaluation(node, value); else return base.EvaluatePriorAnalysis(node, sourceUnit); } public override Evaluation Analyze(PseudoClassConstUse node, Analyzer analyzer, ExInfoFromParent info) { access = info.access; var value = TryGetValue(node); if (value != null) return new Evaluation(node, value); // this.ResolveName(node, analyzer); // return new Evaluation(node); } public override PhpTypeCode Emit(PseudoClassConstUse node, CodeGenerator codeGenerator) { switch (node.Type) { case PseudoClassConstUse.Types.Class: this.type.EmitLoadTypeDesc(codeGenerator, ResolveTypeFlags.ThrowErrors | ResolveTypeFlags.UseAutoload); codeGenerator.IL.Emit(OpCodes.Call, Methods.Operators.GetFullyQualifiedName); return PhpTypeCode.String; default: throw new InvalidOperationException(); } } } #endregion #region PseudoConstUse [NodeCompiler(typeof(PseudoConstUse))] sealed class PseudoConstUseCompiler : ExpressionCompiler { #region Analysis /// /// Get the value indicating if the given constant is evaluable in compile time. /// /// /// private bool IsEvaluable(PseudoConstUse.Types type) { switch (type) { case PseudoConstUse.Types.File: case PseudoConstUse.Types.Dir: return false; default: return true; } } public override Evaluation Analyze(PseudoConstUse node, Analyzer analyzer, ExInfoFromParent info) { access = info.access; if (IsEvaluable(node.Type)) return new Evaluation(node, Evaluate(node, analyzer)); else return new Evaluation(node); } /// /// Gets value of __LINE__, __FUNCTION__, __METHOD__, __CLASS__, __NAMESPACE__ used in source code. /// Doesn't get value for __FILE__ and __DIR__. This value is combined from relative path and the current source root /// at run-time. /// /// /// Analyzer maintains during AST walk information about its position in AST /// and that information uses (among others) to provide values of the pseudo constants. /// private object Evaluate(PseudoConstUse node, Analyzer/*!*/ analyzer) { switch (node.Type) { case PseudoConstUse.Types.Line: return (int)new Text.TextPoint(analyzer.SourceUnit, node.Span.Start).Line; // __LINE__ is of type Integer in PHP case PseudoConstUse.Types.Class: if (analyzer.CurrentType != null) return analyzer.CurrentType.FullName; return string.Empty; case PseudoConstUse.Types.Trait: if (analyzer.CurrentType != null && analyzer.CurrentType.TypeDesc.IsTrait) return analyzer.CurrentType.FullName; return string.Empty; case PseudoConstUse.Types.Function: if (analyzer.CurrentRoutine != null) return analyzer.CurrentRoutine.FullName; return string.Empty; case PseudoConstUse.Types.Method: if (analyzer.CurrentRoutine != null) { if (analyzer.CurrentRoutine.IsMethod) { return ((KnownType)analyzer.CurrentRoutine.DeclaringType).QualifiedName.ToString( ((PhpMethod)analyzer.CurrentRoutine).Name, false); } else return analyzer.CurrentRoutine.FullName; } return string.Empty; case PseudoConstUse.Types.Namespace: return analyzer.CurrentNamespace.HasValue ? analyzer.CurrentNamespace.Value.NamespacePhpName : string.Empty; case PseudoConstUse.Types.File: case PseudoConstUse.Types.Dir: Debug.Fail("Evaluated at run-time."); return null; default: throw null; } } #endregion /// /// Emit /// CALL Operators.ToAbsoluteSourcePath(relative source path level, remaining relative source path); /// /// Code generator. /// Type code of value that is on the top of the evaluation stack as the result of call of emitted code. private PhpTypeCode EmitToAbsoluteSourcePath(CodeGenerator/*!*/ codeGenerator) { ILEmitter il = codeGenerator.IL; // CALL Operators.ToAbsoluteSourcePath(, ); RelativePath relative_path = codeGenerator.SourceUnit.SourceFile.RelativePath; il.LdcI4(relative_path.Level); il.Emit(OpCodes.Ldstr, relative_path.Path); il.Emit(OpCodes.Call, Methods.Operators.ToAbsoluteSourcePath); // return PhpTypeCode.String; } public override PhpTypeCode Emit(PseudoConstUse node, CodeGenerator codeGenerator) { switch (node.Type) { case PseudoConstUse.Types.File: EmitToAbsoluteSourcePath(codeGenerator); break; case PseudoConstUse.Types.Dir: ILEmitter il = codeGenerator.IL; // CALL Path.GetDirectory( Operators.ToAbsoluteSourcePath(...) ) EmitToAbsoluteSourcePath(codeGenerator); il.Emit(OpCodes.Call, Methods.Path.GetDirectoryName); break; default: Debug.Fail("Pseudo constant " + node.Type.ToString() + " expected to be already evaluated."); throw null; } return PhpTypeCode.String; } } #endregion } } ================================================ FILE: Source/Core/Compiler/AST/CustomAttributes.cs ================================================ /* Copyright (c) 2013 DEVSENSE. Copyright (c) 2006 Tomas Matousek. The use and distribution terms for this software are contained in the file named License.txt, which can be found in the root of the Phalanger distribution. By using this software in any fashion, you are agreeing to be bound by the terms of this license. You must not remove this notice from this software. */ using System; using System.Collections.Generic; using System.Text; using System.Linq; using System.Reflection.Emit; using System.Reflection; using PHP.Core.AST; using PHP.Core.Parsers; using PHP.Core.Reflection; using System.Diagnostics; namespace PHP.Core.Compiler.AST { internal interface IPhpCustomAttributeProvider { PhpAttributeTargets AttributeTarget { get; } AttributeTargets AcceptsTargets { get; } int GetAttributeUsageCount(DType/*!*/ type, CustomAttribute.TargetSelectors selector); void ApplyCustomAttribute(SpecialAttributes kind, Attribute attribute, CustomAttribute.TargetSelectors selector); void EmitCustomAttribute(CustomAttributeBuilder/*!*/ builder, CustomAttribute.TargetSelectors selector); } #region SpecialCustomAttribute internal static class SpecialCustomAttribute { // Is it correct to create ClrType here as the mscorlib reflection only creates type-desc via the cache. // the ClrType is created lazily and only if not yet created (which won't be the case). public static readonly DType/*!*/ AppStaticAttribute = new ClrType(DTypeDesc.Create(typeof(AppStaticAttribute)), new QualifiedName(Name.AppStaticName)); public static readonly DType/*!*/ ExportAttribute = new ClrType(DTypeDesc.Create(typeof(ExportAttribute)), new QualifiedName(Name.ExportName)); public static readonly DType/*!*/ DllImportAttribute = new ClrType(DTypeDesc.Create(typeof(System.Runtime.InteropServices.DllImportAttribute)), new QualifiedName(Name.DllImportName)); public static readonly DType/*!*/ OutAttribute = new ClrType(DTypeDesc.Create(typeof(System.Runtime.InteropServices.OutAttribute)), new QualifiedName(Name.OutName)); } #endregion #region ICustomAttributesCompiler internal interface ICustomAttributesCompiler : INodeCompiler { void AnalyzeMembers(CustomAttributes/*!*/node, Analyzer/*!*/ analyzer, Scope referringScope); void Analyze(CustomAttributes/*!*/node, Analyzer/*!*/ analyzer, IPhpCustomAttributeProvider/*!*/ target); int Count(CustomAttributes/*!*/node, DType/*!*/ attributeType, CustomAttribute.TargetSelectors selector); void Emit(CustomAttributes/*!*/node, CodeGenerator/*!*/ codeGenerator, IPhpCustomAttributeProvider/*!*/ target); } internal static class CustomAttributesCompilerHelper { private static ICustomAttributesCompiler/*!*/Compiler(this CustomAttributes/*!*/node) { return node.NodeCompiler(); } public static void AnalyzeMembers(this CustomAttributes/*!*/node, Analyzer/*!*/ analyzer, Scope referringScope) { node.Compiler().AnalyzeMembers(node, analyzer, referringScope); } public static void Analyze(this CustomAttributes/*!*/node, Analyzer/*!*/ analyzer, IPhpCustomAttributeProvider/*!*/ target) { node.Compiler().Analyze(node, analyzer, target); } public static int Count(this CustomAttributes/*!*/node, DType/*!*/ attributeType, CustomAttribute.TargetSelectors selector) { return node.Compiler().Count(node, attributeType, selector); } public static void Emit(this CustomAttributes/*!*/node, CodeGenerator/*!*/ codeGenerator, IPhpCustomAttributeProvider/*!*/ target) { node.Compiler().Emit(node, codeGenerator, target); } } #endregion #region ICustomAttributeCompiler internal interface ICustomAttributeCompiler : INodeCompiler { DType/*!MA*/ ResolvedType { get; } void AnalyzeMembers(Analyzer/*!*/ analyzer, Scope referringScope); void Analyze(Analyzer/*!*/ analyzer, IPhpCustomAttributeProvider/*!*/ target, ref bool duplicateFound); void Emit(CodeGenerator/*!*/ codeGen, IPhpCustomAttributeProvider/*!*/ target); void Emit(CodeGenerator/*!*/ codeGen, IPhpCustomAttributeProvider/*!*/ target, bool force); } internal static class CustomAttributeCompilerHelper { private static ICustomAttributeCompiler/*!*/Compiler(this CustomAttribute/*!*/node) { return node.NodeCompiler(); } public static DType GetResolvedType(this CustomAttribute/*!*/node) { return node.Compiler().ResolvedType; } public static void AnalyzeMembers(this CustomAttribute/*!*/node, Analyzer/*!*/ analyzer, Scope referringScope) { node.Compiler().AnalyzeMembers(analyzer, referringScope); } public static void Analyze(this CustomAttribute/*!*/node, Analyzer/*!*/ analyzer, IPhpCustomAttributeProvider/*!*/ target, ref bool duplicateFound) { node.Compiler().Analyze(analyzer, target, ref duplicateFound); } public static void Emit(this CustomAttribute/*!*/node, CodeGenerator/*!*/ codeGen, IPhpCustomAttributeProvider/*!*/ target) { node.Compiler().Emit(codeGen, target); } public static void Emit(this CustomAttribute/*!*/node, CodeGenerator/*!*/ codeGen, IPhpCustomAttributeProvider/*!*/ target, bool force) { node.Compiler().Emit(codeGen, target, force); } } #endregion partial class NodeCompilers { #region CustomAttributes [NodeCompiler(typeof(CustomAttributes), Singleton = true)] sealed class CustomAttributesCompiler : ICustomAttributesCompiler { public void AnalyzeMembers(CustomAttributes/*!*/node, Analyzer/*!*/ analyzer, Scope referringScope) { if (node.Attributes == null) return; foreach (CustomAttribute attribute in node.Attributes) attribute.AnalyzeMembers(analyzer, referringScope); } public void Analyze(CustomAttributes/*!*/node, Analyzer/*!*/ analyzer, IPhpCustomAttributeProvider/*!*/ target) { if (node.Attributes == null) return; bool duplicate_found = false; foreach (CustomAttribute attribute in node.Attributes) attribute.Analyze(analyzer, target, ref duplicate_found); } public int Count(CustomAttributes/*!*/node, DType/*!*/ attributeType, CustomAttribute.TargetSelectors selector) { if (node.Attributes == null) return 0; int count = 0; foreach (CustomAttribute attribute in node.Attributes) { if (attribute.TargetSelector == selector && attribute.GetResolvedType().Equals(attributeType)) count++; } return count; } public void Emit(CustomAttributes/*!*/node, CodeGenerator/*!*/ codeGenerator, IPhpCustomAttributeProvider/*!*/ target) { if (node.Attributes == null) return; foreach (CustomAttribute attribute in node.Attributes) attribute.Emit(codeGenerator, target); } } #endregion #region CustomAttribute [NodeCompiler(typeof(CustomAttribute))] sealed class CustomAttributeCompiler : ICustomAttributeCompiler, IPostAnalyzable { private readonly CustomAttribute/*!*/node; public DType/*!MA*/ ResolvedType { get { return type; } } private DType/*!MA*/ type; private RoutineSignature/*!A*/ overload; private IPhpCustomAttributeProvider/*!MA*/ target; private bool isEmitted; public CustomAttributeCompiler(CustomAttribute/*!*/node) { this.node = node; } #region Analysis /// /// Analyzes the attribute type. Parameters are left to the full analysis as we want to resolve global and class /// constants used there. Resolving attribute type during member analysis enables to them to influence the /// member and full analysis of their respective targets. /// public void AnalyzeMembers(Analyzer/*!*/ analyzer, Scope referringScope) { // resolve attribute type: type = analyzer.ResolveCustomAttributeType(node.QualifiedName, referringScope, node.Span); // let the Assembly Builder know that this attribute is defined on it; // we need the Builder to be able to count the defined attributes in analysis: if (node.TargetSelector == CustomAttribute.TargetSelectors.Assembly || node.TargetSelector == CustomAttribute.TargetSelectors.Module) { analyzer.SourceUnit.CompilationUnit.ModuleBuilder.AssemblyBuilder.CustomAttributeDefined(analyzer.ErrorSink, node); } } /// /// Analyses attribute parameters, resolves the constructor, the fields, and the properties /// assigned in the parameters. /// public void Analyze(Analyzer/*!*/ analyzer, IPhpCustomAttributeProvider/*!*/ target, ref bool duplicateFound) { Debug.Assert(type != null); this.target = target; // check selector: if (((int)target.AcceptsTargets & (int)node.TargetSelector) == 0) { analyzer.ErrorSink.Add(Errors.InvalidAttributeTargetSelector, analyzer.SourceUnit, node.Span, node.TargetSelector.ToString().ToLower(System.Globalization.CultureInfo.InvariantCulture)); } // resolve constructor for the regular attributes: if (!ResolveConstructor(analyzer)) return; // evaluate actual arguments: bool all_evaluable; AnalyzeActualArguments(analyzer, out all_evaluable); // check usage: if (!CheckAttributeUsage(analyzer, ref duplicateFound)) return; if (!all_evaluable) return; // process special and pseudo-attributes: ApplySpecialAttributes(analyzer); } private void ApplySpecialAttributes(Analyzer/*!*/ analyzer) { if (type.Equals(SpecialCustomAttribute.AppStaticAttribute)) { Debug.Assert(node.CallSignature.Parameters.Empty(), "Should be checked by ResolveOverload"); ApplySpecialAttribute(analyzer, SpecialAttributes.AppStatic, null); isEmitted = false; } else if (type.Equals(SpecialCustomAttribute.ExportAttribute)) { Debug.Assert(node.CallSignature.Parameters.Empty(), "Should be checked by ResolveOverload"); if (!analyzer.SourceUnit.CompilationUnit.IsPure) { analyzer.ErrorSink.Add(Errors.ExportAttributeInNonPureUnit, analyzer.SourceUnit, node.Span); } else { ApplySpecialAttribute(analyzer, SpecialAttributes.Export, Core.ExportAttribute.Default); } isEmitted = false; } else if (type.Equals(SpecialCustomAttribute.OutAttribute)) { Debug.Assert(node.CallSignature.Parameters.Empty(), "Should be checked by ResolveOverload"); ApplySpecialAttribute(analyzer, SpecialAttributes.Out, new System.Runtime.InteropServices.OutAttribute()); isEmitted = true; } else if (type.Equals(SpecialCustomAttribute.DllImportAttribute)) { isEmitted = false; } else if (ReferenceEquals(type.TypeDesc, DTypeDesc.AttributeUsageAttributeTypeDesc)) { // set usage of the attribute defined by this attribute's target // Debug.Assert(node.CallSignature.Parameters.Empty(), "Missing arguments should be checked by ResolveOverload"); int valid_on = Convert.ObjectToInteger(node.CallSignature.Parameters[0].Expression.GetValue()); AttributeUsageAttribute usage = new AttributeUsageAttribute((AttributeTargets)valid_on); foreach (NamedActualParam param in node.NamedParameters) { if (param.Name.Equals("AllowMultiple")) { usage.AllowMultiple = Convert.ObjectToBoolean(param.Expression.GetValue()); } else if (param.Name.Equals("Inherited")) { usage.Inherited = Convert.ObjectToBoolean(param.Expression.GetValue()); } } ApplySpecialAttribute(analyzer, SpecialAttributes.AttributeUsage, usage); isEmitted = true; } else { isEmitted = true; } } private void ApplySpecialAttribute(Analyzer/*!*/ analyzer, SpecialAttributes kind, Attribute attribute) { switch (node.TargetSelector) { case CustomAttribute.TargetSelectors.Assembly: case CustomAttribute.TargetSelectors.Module: analyzer.SourceUnit.CompilationUnit.ModuleBuilder.AssemblyBuilder.ApplyCustomAttribute(kind, attribute, node.TargetSelector); break; default: target.ApplyCustomAttribute(kind, attribute, node.TargetSelector); break; } } private bool ResolveConstructor(Analyzer/*!*/ analyzer) { if (!type.IsDefinite) { // attribute type has to be known definitely: analyzer.ErrorSink.Add(Errors.UnknownCustomAttribute, analyzer.SourceUnit, node.Span, type.FullName, type.FullName + "Attribute"); return false; } if (!type.IsCustomAttributeType) { analyzer.ErrorSink.Add(Errors.NotCustomAttributeClass, analyzer.SourceUnit, node.Span, type.FullName); return false; } // resolve ctor overload in global context (only public ctors are visible): bool check_visibility; DRoutine constructor = analyzer.ResolveConstructor(type, node.Span, null, null, out check_visibility); Debug.Assert(!check_visibility); if (constructor.ResolveOverload(analyzer, node.CallSignature, node.Span, out overload) == DRoutine.InvalidOverloadIndex) { analyzer.ErrorSink.Add(Errors.ClassHasNoVisibleCtor, analyzer.SourceUnit, node.Span, type.FullName); return false; } return true; } private void AnalyzeActualArguments(Analyzer/*!*/ analyzer, out bool allEvaluable) { node.CallSignature.Analyze(analyzer, overload, ExInfoFromParent.DefaultExInfo, false); allEvaluable = true; // parameters: foreach (ActualParam param in node.CallSignature.Parameters) { if (!param.Expression.IsCustomAttributeArgumentValue()) { // expression has to be evaluable: analyzer.ErrorSink.Add(Errors.InvalidAttributeExpression, analyzer.SourceUnit, param.Span); allEvaluable = false; } } // named parameters: foreach (NamedActualParam param in node.NamedParameters) { param.Analyze(analyzer, type); if (!param.Expression.IsCustomAttributeArgumentValue()) { // expression has to be evaluable: analyzer.ErrorSink.Add(Errors.InvalidAttributeExpression, analyzer.SourceUnit, param.Span); allEvaluable = false; } } } private bool CheckAttributeUsage(Analyzer/*!*/ analyzer, ref bool duplicateFound) { // check usage target of this attribute: bool is_usage_definite; AttributeUsageAttribute specific_usage = type.GetCustomAttributeUsage(out is_usage_definite); if (is_usage_definite) { if (!CheckAttributeUsage(analyzer, specific_usage, ref duplicateFound)) return false; } else { // usage constraints cannot be determined now; ckeck the usage later during post-analysis: analyzer.PostAnalyzed.Add(this); } return true; } private bool CheckAttributeUsage(Analyzer/*!*/ analyzer, AttributeUsageAttribute usage, ref bool duplicateFound) { if (usage != null && (target.AcceptsTargets & usage.ValidOn) == 0) { analyzer.ErrorSink.Add(Errors.InvalidAttributeUsage, analyzer.SourceUnit, node.Span, node.QualifiedName.ToString()); return false; } // check duplicate usage of this attribute: if (!duplicateFound && (usage == null || !usage.AllowMultiple) && target.GetAttributeUsageCount(type, node.TargetSelector) > 1) { analyzer.ErrorSink.Add(Errors.DuplicateAttributeUsage, analyzer.SourceUnit, node.Span, node.QualifiedName.ToString()); duplicateFound = true; return false; } return true; } void IPostAnalyzable.PostAnalyze(Analyzer/*!*/ analyzer) { // Note, usage needn't to be definite even now (it is not set unless the [AttributeUsage] is explicitly specified) bool is_usage_definite; bool duplicateFound = false; // TODO: duplicates should be tracked!!! CheckAttributeUsage(analyzer, type.GetCustomAttributeUsage(out is_usage_definite), ref duplicateFound); } #endregion #region Emission public void Emit(CodeGenerator/*!*/ codeGen, IPhpCustomAttributeProvider/*!*/ target) { Emit(codeGen, target, false); } public void Emit(CodeGenerator/*!*/ codeGen, IPhpCustomAttributeProvider/*!*/ target, bool force) { // skip attributes that are not emitted: if (!isEmitted && !force) return; ConstructorInfo real_ctor; // TODO: type conversions (in analysis during overload resolution?) var parameters = node.CallSignature.Parameters; Type[] real_ctor_parameter_types = new Type[parameters.Length]; if (type is ClrType) { real_ctor = (ConstructorInfo)((ClrMethod.Overload)overload).Method; var real_params = real_ctor.GetParameters(); for (int i = 0; i < real_ctor_parameter_types.Length; i++) real_ctor_parameter_types[i] = real_params[i].ParameterType; } else { Debug.Assert(type is PhpType); real_ctor = ((PhpType)type).ClrConstructorInfos[0]; // Do not try to call GetParameters(), all parameters are of type object, // GetParameters() of not baked PhpType throws. for (int i = 0; i < real_ctor_parameter_types.Length; i++) real_ctor_parameter_types[i] = PHP.Core.Emit.Types.Object[0]; } // ctor args: object[] ctor_args = new object[parameters.Length]; for (int i = 0; i < parameters.Length; i++) { Expression expr = parameters[i].Expression; TypeOfEx type_of = expr as TypeOfEx; if (type_of != null) { ctor_args[i] = type_of.ClassNameRef.ResolvedType().RealType; } else { ctor_args[i] = ConvertToClr.ObjectToType(expr.GetValue(), real_ctor_parameter_types[i]); } } List fields = new List(); List properties = new List(); List field_values = new List(); List prop_values = new List(); foreach (NamedActualParam param in node.NamedParameters) { object value = param.Expression.GetValue(); MemberInfo real_member = param.GetProperty().RealMember; FieldInfo real_field; PropertyInfo real_property; if ((real_property = real_member as PropertyInfo) != null || // regular CLR property (param.GetProperty() is PhpField && (real_property = ((PhpField)param.GetProperty()).ExportedProperty) != null)) // or PHP property (real field below is PhpReference, we have to use its export stub) { properties.Add(real_property); prop_values.Add(ConvertToClr.ObjectToType(value, real_property.PropertyType)); } else if ((real_field = real_member as FieldInfo) != null) { fields.Add(real_field); field_values.Add(ConvertToClr.ObjectToType(value, real_field.FieldType)); } else { Debug.Fail("Cannot resolve attribute named parameter!"); } } CustomAttributeBuilder builder = new CustomAttributeBuilder(real_ctor, ctor_args, properties.ToArray(), prop_values.ToArray(), fields.ToArray(), field_values.ToArray()); switch (node.TargetSelector) { case CustomAttribute.TargetSelectors.Assembly: case CustomAttribute.TargetSelectors.Module: codeGen.CompilationUnit.ModuleBuilder.AssemblyBuilder.EmitCustomAttribute(builder, node.TargetSelector); break; default: target.EmitCustomAttribute(builder, node.TargetSelector); break; } } #endregion } #endregion } } ================================================ FILE: Source/Core/Compiler/AST/DirectVariableUse.cs ================================================ /* Copyright (c) 2004-2006 Tomas Matousek, Ladislav Prosek, Vaclav Novak and Martin Maly. The use and distribution terms for this software are contained in the file named License.txt, which can be found in the root of the Phalanger distribution. By using this software in any fashion, you are agreeing to be bound by the terms of this license. You must not remove this notice from this software. */ using System; using System.IO; using System.Diagnostics; using System.Reflection.Emit; using PHP.Core.AST; using PHP.Core.Emit; using PHP.Core.Parsers; using PHP.Core.Reflection; namespace PHP.Core.Compiler.AST { partial class NodeCompilers { [NodeCompiler(typeof(DirectVarUse))] sealed class DirectVarUseCompiler : SimpleVarUseCompiler { #region Analysis public override Evaluation Analyze(DirectVarUse node, Analyzer analyzer, ExInfoFromParent info) { bool var_shall_be_ref; access = info.Access; base.Analyze(node, analyzer, info); var_shall_be_ref = !(access == AccessType.Read || access == AccessType.Write || access == AccessType.ReadAndWrite || access == AccessType.None); //If this VarUse is in GlobalCode, value of var_shall_be_ref does not matter. //All global vars are refs. //$this has special meaning, but $a->this has NOT if (node.VarName.IsThisVariableName && node.IsMemberOf == null) { // report misuse of $this if we are sure about it, that is in a static routine: if (analyzer.CurrentRoutine != null && analyzer.CurrentRoutine.IsStatic) { analyzer.ErrorSink.Add(Warnings.ThisOutOfMethod, analyzer.SourceUnit, node.Span); } if (!(info.Parent is VarLikeConstructUse) // $this->a = 1; is ok, but $this has write AT && !(access == AccessType.None || access == AccessType.Read || access == AccessType.ReadRef || access == AccessType.ReadUnknown)) { analyzer.ErrorSink.Add(Warnings.ThisInWriteContext, analyzer.SourceUnit, node.Span); } } if (node.IsMemberOf == null) { if (analyzer.CurrentVarTable == null) { Debug.Assert(analyzer.SourceUnit.CompilationUnit.IsPure); // variables used in global context when we do not have global variable table: analyzer.ErrorSink.Add(Errors.GlobalCodeInPureUnit, analyzer.SourceUnit, node.Span); } else analyzer.CurrentVarTable.Set(node.VarName, var_shall_be_ref); } return new Evaluation(node); } #endregion #region Code emitting public override PhpTypeCode Emit(DirectVarUse node, CodeGenerator codeGenerator) { Statistics.AST.AddNode("VariableUse.Direct"); PhpTypeCode result = PhpTypeCode.Invalid; switch (codeGenerator.SelectAccess(access)) { // This case occurs everytime we want to get current variable value // All we do is push the value onto the IL stack case AccessType.Read: // Push value onto a IL stack result = EmitNodeRead(node, codeGenerator); break; // This case occurs when the varible is written ($a = $b, then $a has Write mark) // We only prepare the stack for storing, the work will be done later, // by EmitAssign() case AccessType.Write: result = EmitNodeWrite(node, codeGenerator); break; case AccessType.None: result = EmitNodeRead(node, codeGenerator); codeGenerator.IL.Emit(OpCodes.Pop); break; case AccessType.ReadRef: // if the selector is set to the ReadRef, the chain is emitted as if it was written // (chained nodes are marked as ReadAndWrite): if (codeGenerator.AccessSelector == AccessType.ReadRef) codeGenerator.AccessSelector = AccessType.Write; result = EmitNodeReadRef(node, codeGenerator); Debug.Assert(result == PhpTypeCode.PhpReference); break; case AccessType.ReadUnknown: result = EmitNodeReadUnknown(node, codeGenerator); break; case AccessType.WriteRef: result = EmitNodeWriteRef(node, codeGenerator); break; } return result; } internal override PhpTypeCode EmitAssign(DirectVarUse node, CodeGenerator codeGenerator) { PhpTypeCode result; switch (access) { case AccessType.None: result = PhpTypeCode.Void; break; case AccessType.Read: result = PhpTypeCode.Object; break; case AccessType.ReadRef: result = PhpTypeCode.PhpReference; break; case AccessType.Write: case AccessType.WriteAndReadRef: case AccessType.WriteAndReadUnknown: case AccessType.ReadAndWrite: case AccessType.ReadAndWriteAndReadRef: case AccessType.ReadAndWriteAndReadUnknown: result = EmitNodeWriteAssign(node, codeGenerator); Debug.Assert(result == PhpTypeCode.Void); break; case AccessType.WriteRef: EmitNodeWriteRefAssign(node, codeGenerator); result = PhpTypeCode.PhpReference; break; default: result = PhpTypeCode.Invalid; Debug.Fail(null); break; } return result; } internal override PhpTypeCode EmitReadFieldOfThisInInstanceMethod(DirectVarUse node, CodeGenerator codeGenerator, bool wantRef) { PhpType type = codeGenerator.LocationStack.PeekMethodDecl().Type; DProperty property; if (type.GetProperty((node).VarName, type, out property) == GetMemberResult.OK && !property.IsStatic) { // ask the DProperty to emit code that reads the field return property.EmitGet(codeGenerator, IndexedPlace.ThisArg, wantRef, null, false); } else { return base.EmitReadFieldOfThisInInstanceMethod(node, codeGenerator, wantRef); } } internal override AssignmentCallback EmitWriteFieldOfThisInInstanceMethod(DirectVarUse node, CodeGenerator/*!*/ codeGenerator, bool writeRef) { PhpType type = codeGenerator.LocationStack.PeekMethodDecl().Type; DProperty property; if (type.GetProperty(node.VarName, type, out property) == GetMemberResult.OK && !property.IsStatic) { // ask the DProperty to emit code that writes the field return property.EmitSet(codeGenerator, IndexedPlace.ThisArg, writeRef, null, false); } else { return base.EmitWriteFieldOfThisInInstanceMethod(node, codeGenerator, writeRef); } } internal override void EmitUnset(DirectVarUse node, CodeGenerator codeGenerator) { //Template: "unset(x)" x = null Debug.Assert(access == AccessType.Read); // Cases 1, 4, 5, 6, 9 never reached Debug.Assert(codeGenerator.ChainBuilder.IsMember == false); // Case 3 never reached Debug.Assert(codeGenerator.ChainBuilder.IsArrayItem == false); codeGenerator.ChainBuilder.QuietRead = true; // 2, 7, 8 if (node.IsMemberOf != null) { // 2: $b->a // 8: b[]->a codeGenerator.ChainBuilder.Create(); codeGenerator.ChainBuilder.Begin(); codeGenerator.ChainBuilder.QuietRead = true; EmitUnsetField(node, codeGenerator); codeGenerator.ChainBuilder.End(); return; } // 7: $a // Check if the variable is auto-global ILEmitter il = codeGenerator.IL; if (codeGenerator.VariableIsAutoGlobal(node.VarName)) { codeGenerator.EmitAutoGlobalStorePrepare(node.VarName); il.Emit(OpCodes.Ldnull); codeGenerator.EmitAutoGlobalStoreAssign(); return; } // Unset this variable if (codeGenerator.OptimizedLocals) { // Template: // unset(x) x = null // unset(p) p.value = null <- this case isn't valid. When p is reference just create a new PhpReference VariablesTable.Entry entry = codeGenerator.CurrentVariablesTable[node.VarName]; if (entry.IsPhpReference) { il.Emit(OpCodes.Newobj, Constructors.PhpReference_Void); entry.Variable.EmitStore(il); } else { il.Emit(OpCodes.Ldnull); entry.Variable.EmitStore(il); } } else { // CALL Operators.UnsetVariable( PHPT Phalanger Tester ''); $fp = fopen($file, "rb") or error("Cannot open test file: $file"); if (!feof($fp)) { $line = fgets($fp); if ($line === false) { error("cannot read test '$file'"); } } else { error("empty test '$file'"); } if (strncmp('--TEST--', $line, 8)) { error("tests '$file' must start with --TEST--"); } $section = 'TEST'; $secfile = false; $secdone = false; while (!feof($fp)) { $line = fgets($fp); if ($line === false) break; // Match the beginning of a section. if (preg_match(b'/^--([_A-Z]+)--/', $line, $r)) { $section = $r[1]; settype($section, 'string'); if (isset($section_text[$section])) error("duplicated $section section"); $section_text[$section] = binary_section($section) ? b'' : ''; $secfile = $section == 'FILE' || $section == 'FILEEOF' || $section == 'FILE_EXTERNAL'; $secdone = false; continue; } if (!binary_section($section)) { $line = (binary)$line; if ($line == false) { error("cannot read test '$file'"); break; } } // Add to the section text. if (!$secdone) { if ($section == 'EXPECTF') { // modify Phalangers different error message format, ", column %d" at the end. if (StartsWith($line, 'Warning:') || StartsWith($line,'Notice:') || StartsWith($line,'Error:')) $line = substr($line,0,7) . "%s\n"; //', column %d.'; } $section_text[$section] .= $line; } // End of actual test? if ($secfile && preg_match(b'/^===DONE===\s*$/', $line)) { $secdone = true; } } // the redirect section allows a set of tests to be reused outside of // a given test dir if (@count($section_text['REDIRECTTEST']) == 1) { //if ($IN_REDIRECT) { //$borked = true; //$bork_info = "Can't redirect a test from within a redirected test"; //} else { //$borked = false; //} } else { if (@count($section_text['FILE']) + @count($section_text['FILEEOF']) + @count($section_text['FILE_EXTERNAL']) != 1) { error("missing section --FILE-- in '$file'"); } if (@count($section_text['FILEEOF']) == 1) { $section_text['FILE'] = preg_replace(b"/[\r\n]+$/", b'', $section_text['FILEEOF']); unset($section_text['FILEEOF']); } if (@count($section_text['FILE_EXTERNAL']) == 1) { // don't allow tests to retrieve files from anywhere but this subdirectory $section_text['FILE_EXTERNAL'] = dirname($file) . '/' . trim(str_replace('..', '', $section_text['FILE_EXTERNAL'])); if (file_exists($section_text['FILE_EXTERNAL'])) { $section_text['FILE'] = _file_get_contents($section_text['FILE_EXTERNAL'], FILE_BINARY, null, &$dummyheaders); unset($section_text['FILE_EXTERNAL']); } else { error("could not load --FILE_EXTERNAL-- " . dirname($file) . '/' . trim($section_text['FILE_EXTERNAL']) . " in test '$file'"); } } if ((@count($section_text['EXPECT']) + @count($section_text['EXPECTF']) + @count($section_text['EXPECTREGEX'])) != 1) { error("missing section --EXPECT--, --EXPECTF-- or --EXPECTREGEX-- in '$file'"); } } fclose($fp); // return sections return $section_text; } function _file_get_contents($path, $flags, $context, &$headers) { $result = file_get_contents($path, $flags, $context); $headers = @$http_response_header; return $result; } function try_skip($file, $www, &$section_text) { if (array_key_exists('SKIPIF', $section_text)) { $skiphtml = "SKIP"; $info = ''; $warn = false; if (trim($section_text['SKIPIF'])) { $temp_skipif = replace_extension($file,'skipif.php'); save_text($temp_skipif, $section_text['SKIPIF']); // Create a stream $output = _file_get_contents( $www . $temp_skipif, false, null, &$dummyheaders ); if (!strncasecmp('skip', ltrim($output), 4)) { if (preg_match('/^\s*skip\s*(.+)\s*/i', $output, $m)) { show_result($skiphtml, $file, ", reason: $m[1]"); } else { show_result($skiphtml, $file, ''); } } if (!strncasecmp('info', ltrim($output), 4)) { if (preg_match('/^\s*info\s*(.+)\s*/i', $output, $m)) { $info = " (info: $m[1])"; } } if (!strncasecmp('warn', ltrim($output), 4)) { if (preg_match('/^\s*warn\s*(.+)\s*/i', $output, $m)) { $warn = true; /* only if there is a reason */ $info = " (warn: $m[1])"; } } } } } function try_redirect($file, $www, &$section_text) { if (@count($section_text['REDIRECTTEST']) == 1) { error("Redirect not supported yet in '$file'"); } } function try_clean($file, $www, &$section_text) { if (array_key_exists('CLEAN', $section_text)) { if (trim($section_text['CLEAN'])) { $cleanfile = replace_extension($file,'clean.php'); save_text($cleanfile, trim($section_text['CLEAN'])); $clean_params = array(); _file_get_contents($www . $cleanfile, false, null, &$dummyheaders); @unlink($cleanfile); } } } function get_ini_code($ini_settings) { if (count($ini_settings) == 0) return ''; $code = ''; foreach ($ini_settings as $key => $value) { $code .= "@ini_set('$key', '$value');"; } return ""; } function replace_extension($filename, $new_extension) { return preg_replace('/\..+$/', '.' . $new_extension, $filename); } function run_test($file,$www) { // parse the test '$file' $section_text = parse_file($file); // setup environment if (EndsWith( $www, '.php')) $www = dirname($www); if (!EndsWith( $www, '/')) $www .= '/'; $phpfile = replace_extension($file,'php'); $tested = trim($section_text['TEST']); $env = array('HTTP_CONTENT_ENCODING'=>''); $opts = array( 'http'=>array( 'method'=> "GET", 'header'=> '' )); if (!empty($section_text['ENV'])) { foreach(explode("\n", trim($section_text['ENV'])) as $e) { $e = explode('=', trim($e), 2); if (!empty($e[0]) && isset($e[1])) { $env[$e[0]] = $e[1]; } } } // Default ini settings $ini_settings = array(); // put additional INI settings here // Any special ini settings, these may overwrite the test defaults... if (array_key_exists('INI', $section_text)) { if (strpos($section_text['INI'], '{PWD}') !== false) { $section_text['INI'] = str_replace('{PWD}', dirname(realpath($file)), $section_text['INI']); } settings2array(preg_split( "/[\n\r]+/", $section_text['INI']), $ini_settings); } // prepend custom ini settings if (count($ini_settings) > 0) $section_text['FILE'] = get_ini_code($ini_settings) . $section_text['FILE']; // skip this test ? try_skip($file, $www, $section_text); // redirect test ? try_redirect($file, $www, $section_text); // request .php script save_text($phpfile, $section_text['FILE']); if (array_key_exists('GET', $section_text)) $query_string = trim($section_text['GET']); else $query_string = ''; $env['QUERY_STRING'] = $query_string; if (array_key_exists('COOKIE', $section_text)) { $env['HTTP_COOKIE'] = trim($section_text['COOKIE']); $opts["http"]["header"] .= "Cookie: " . $env['HTTP_COOKIE'] . "\r\n"; } else { $env['HTTP_COOKIE'] = ''; } $args = isset($section_text['ARGS']) ? ' -- ' . $section_text['ARGS'] : ''; if (array_key_exists('POST_RAW', $section_text) && !empty($section_text['POST_RAW'])) { $post = trim($section_text['POST_RAW']); $raw_lines = explode("\n", $post); $request = ''; $started = false; foreach ($raw_lines as $line) { if (empty($env['CONTENT_TYPE']) && preg_match('/^Content-Type:(.*)/i', $line, $res)) { $env['CONTENT_TYPE'] = trim(str_replace("\r", '', $res[1])); continue; } if ($started) { $request .= "\n"; } $started = true; $request .= $line; } $env['CONTENT_LENGTH'] = strlen($request); $env['REQUEST_METHOD'] = 'POST'; $opts["http"]["method"] = "POST"; $opts["http"]["header"] .= "Content-type: " . $env['CONTENT_TYPE'] . "\r\n"; $opts["http"]["content"] = $request; if (empty($request)) error("POST empty in '$file'"); } else if (array_key_exists('POST', $section_text) && !empty($section_text['POST'])) { $post = trim($section_text['POST']); if (array_key_exists('GZIP_POST', $section_text) && function_exists('gzencode')) { $post = gzencode($post, 9, FORCE_GZIP); $env['HTTP_CONTENT_ENCODING'] = 'gzip'; } else if (array_key_exists('DEFLATE_POST', $section_text) && function_exists('gzcompress')) { $post = gzcompress($post, 9); $env['HTTP_CONTENT_ENCODING'] = 'deflate'; } //save_text($tmp_post, $post); $content_length = strlen($post); $env['REQUEST_METHOD'] = 'POST'; $env['CONTENT_TYPE'] = 'application/x-www-form-urlencoded'; $env['CONTENT_LENGTH'] = $content_length; $opts["http"]["method"] = "POST"; $opts["http"]["header"] .= "Content-type: " . $env['CONTENT_TYPE'] . "\r\n"; $opts["http"]["header"] .= "Content-encoding: ". $env['HTTP_CONTENT_ENCODING'] . "\r\n"; $opts["http"]["header"] .= "Content-length: ". $content_length . "\r\n"; $opts["http"]["content"] = $post; } else { $env['REQUEST_METHOD'] = 'GET'; $env['CONTENT_TYPE'] = ''; $env['CONTENT_LENGTH'] = ''; } $context = stream_context_create($opts); $out = _file_get_contents($www . $phpfile, false, $context, &$headers); if ($out === FALSE) { echo '
'; error("See $phpfile, exception "); } if ((StartsWith($out,"\r\nCompileError") || StartsWith($out,"\r\nCompileWarning"))) show_result("SKIP", $file, ", Script generates CompileError or CompileWarning, so it cannot be compared with PHP. Try the script
$out
"); // perform clean try_clean($file, $www, $section_text); // compare .php response with expected output // Does the output match what is expected? $output = preg_replace(b"/\r\n/", b"\n", trim($out)); $output = str_replace("string[binary](","string(",$output); $failed_headers = false; if (isset($section_text['EXPECTHEADERS'])) { $want = array(); $wanted_headers = array(); $lines = preg_split(b"/[\n\r]+/", (binary) $section_text['EXPECTHEADERS']); foreach($lines as $line) { if (strpos($line, b':') !== false) { $line = explode(b':', $line, 2); $want[trim($line[0])] = trim($line[1]); $wanted_headers[] = trim($line[0]) . b': ' . trim($line[1]); } } $org_headers = $headers; $headers = array(); $output_headers = array(); foreach($want as $k => $v) { if (isset($org_headers[$k])) { $headers = $org_headers[$k]; $output_headers[] = $k . b': ' . $org_headers[$k]; } if (!isset($org_headers[$k]) || $org_headers[$k] != $v) { $failed_headers = true; } } ksort($wanted_headers); $wanted_headers = join(b"\n", $wanted_headers); ksort($output_headers); $output_headers = join(b"\n", $output_headers); } if (isset($section_text['EXPECTF']) || isset($section_text['EXPECTREGEX'])) { if (isset($section_text['EXPECTF'])) { $wanted = trim($section_text['EXPECTF']); } else { $wanted = trim($section_text['EXPECTREGEX']); } $wanted_re = preg_replace(b'/\r\n/', b"\n", $wanted); if (isset($section_text['EXPECTF'])) { // do preg_quote, but miss out any %r delimited sections $temp = b""; $r = b"%r"; $startOffset = 0; $length = strlen($wanted_re); while($startOffset < $length) { $start = strpos($wanted_re, $r, $startOffset); if ($start !== false) { // we have found a start tag $end = strpos($wanted_re, $r, $start+2); if ($end === false) { // unbalanced tag, ignore it. $end = $start = $length; } } else { // no more %r sections $start = $end = $length; } // quote a non re portion of the string $temp = $temp . preg_quote(substr($wanted_re, $startOffset, ($start - $startOffset)), b'/'); // add the re unquoted. if ($end > $start) { $temp = $temp . b'(' . substr($wanted_re, $start+2, ($end - $start-2)). b')'; } $startOffset = $end + 2; } $wanted_re = $temp; $wanted_re = str_replace( array(b'%binary_string_optional%'), version_compare(PHP_VERSION, '6.0.0-dev') == -1 ? b'string' : b'binary string', $wanted_re ); $wanted_re = str_replace( array(b'%unicode_string_optional%'), version_compare(PHP_VERSION, '6.0.0-dev') == -1 ? b'string' : b'Unicode string', $wanted_re ); $wanted_re = str_replace( array(b'%unicode\|string%', b'%string\|unicode%'), version_compare(PHP_VERSION, '6.0.0-dev') == -1 ? b'string' : b'unicode', $wanted_re ); $wanted_re = str_replace( array(b'%u\|b%', b'%b\|u%'), version_compare(PHP_VERSION, '6.0.0-dev') == -1 ? b'' : b'u', $wanted_re ); // Stick to basics $wanted_re = str_replace(b'%e', b'\\' . '\\', $wanted_re); $wanted_re = str_replace(b'%s', b'[^\r\n]+', $wanted_re); $wanted_re = str_replace(b'%S', b'[^\r\n]*', $wanted_re); $wanted_re = str_replace(b'%a', b'.+', $wanted_re); $wanted_re = str_replace(b'%A', b'.*', $wanted_re); $wanted_re = str_replace(b'%w', b'\s*', $wanted_re); $wanted_re = str_replace(b'%i', b'[+-]?\d+', $wanted_re); $wanted_re = str_replace(b'%d', b'\d+', $wanted_re); $wanted_re = str_replace(b'%x', b'[0-9a-fA-F]+', $wanted_re); $wanted_re = str_replace(b'%f', b'[+-]?\.?\d+\.?\d*(?:[Ee][+-]?\d+)?', $wanted_re); $wanted_re = str_replace(b'%c', b'.', $wanted_re); // %f allows two points "-.0.0" but that is the best *simple* expression } /* DEBUG YOUR REGEX HERE var_dump($wanted_re); print(str_repeat('=', 80) . "\n"); var_dump($output); */ if (preg_match(b"/^$wanted_re\$/s", $output)) { @unlink($phpfile); show_result("PASS", "$file", ''); } } else { $wanted = (binary) trim($section_text['EXPECT']); $wanted = preg_replace(b'/\r\n/',b"\n", $wanted); // compare and leave on success if (!strcmp($output, $wanted)) { @unlink($phpfile); show_result("PASS", $file, ''); } $wanted_re = null; } // Test failed so we need to report details. if ($failed_headers) { $passed = false; $wanted = (binary) $wanted_headers . b"\n--HEADERS--\n" . (binary) $wanted; $output = (binary) $output_headers . b"\n--HEADERS--\n" . (binary) $output; if (isset($wanted_re)) { $wanted_re = preg_quote($wanted_headers . "\n--HEADERS--\n", '/') . $wanted_re; } } /*if ($leaked) { $restype[] = 'LEAK'; } if ($warn) { $restype[] = 'WARN'; } if (!$passed) { if (isset($section_text['XFAIL'])) $restype[] = 'XFAIL'; else $restype[] = 'FAIL'; }*/ // // if (!$passed) { // write .exp if (file_put_contents($file . '.exp', (binary) $wanted, FILE_BINARY) === false) { error("Cannot create expected test output '$file.exp'"); } // write .out if (file_put_contents($file . '.out', (binary) $output, FILE_BINARY) === false) { error("Cannot create test output - '$file.out'"); } // write .diff $diff = generate_diff($wanted, $wanted_re, $output); if (file_put_contents($file.'.diff', (binary) $diff, FILE_BINARY) === false) { error("Cannot create test diff - '$file.diff'"); } $resultid = "result_" . strlen($phpfile) . '_' . crc32($phpfile); $sourceid = "source_" . strlen($phpfile) . '_' . crc32($phpfile); show_result( "FAIL", $file, ", Try the script" . ", source" . ", details" . "" . "" ); // write .sh //if (strpos($log_format, 'S') !== false && file_put_contents($sh_filename, b"#!/bin/sh{$cmd}", FILE_BINARY) === false) { //error("Cannot create test shell script - $sh_filename"); //} //chmod($sh_filename, 0755); } /*foreach ($restype as $type) { $PHP_FAILED_TESTS[$type.'ED'][] = array ( 'name' => $file, 'test_name' => (is_array($IN_REDIRECT) ? $IN_REDIRECT['via'] : '') . $tested . " [$tested_file]", 'output' => $output_filename, 'diff' => $diff_filename, 'info' => $info, ); }*/ } function save_text($filename, $text, $filename_copy = null) { if (file_put_contents($filename, (binary) $text, FILE_BINARY) === false) { error("Cannot open file '" . $filename . "' (save_text)"); } if ($filename_copy && $filename_copy != $filename) save_text($filename_copy, $text); } function comp_line($l1, $l2, $is_reg) { if ($is_reg) { return preg_match(b'/^'. (binary) $l1 . b'$/s', (binary) $l2); } else { return !strcmp((binary) $l1, (binary) $l2); } } function count_array_diff(&$ar1, &$ar2, $is_reg, &$w, $idx1, $idx2, $cnt1, $cnt2, $steps) { $equal = 0; while ($idx1 < $cnt1 && $idx2 < $cnt2 && comp_line($ar1[$idx1], $ar2[$idx2], $is_reg)) { $idx1++; $idx2++; $equal++; $steps--; } if (--$steps > 0) { $eq1 = 0; $st = $steps / 2; for ($ofs1 = $idx1 + 1; $ofs1 < $cnt1 && $st-- > 0; $ofs1++) { $eq = @count_array_diff($ar1, $ar2, $is_reg, $w, $ofs1, $idx2, $cnt1, $cnt2, $st); if ($eq > $eq1) { $eq1 = $eq; } } $eq2 = 0; $st = $steps; for ($ofs2 = $idx2 + 1; $ofs2 < $cnt2 && $st-- > 0; $ofs2++) { $eq = @count_array_diff($ar1, $ar2, $is_reg, $w, $idx1, $ofs2, $cnt1, $cnt2, $st); if ($eq > $eq2) { $eq2 = $eq; } } if ($eq1 > $eq2) { $equal += $eq1; } else if ($eq2 > 0) { $equal += $eq2; } } return $equal; } function generate_array_diff(&$ar1, &$ar2, $is_reg, &$w) { $idx1 = 0; $ofs1 = 0; $cnt1 = @count($ar1); $idx2 = 0; $ofs2 = 0; $cnt2 = @count($ar2); $diff = array(); $old1 = array(); $old2 = array(); while ($idx1 < $cnt1 && $idx2 < $cnt2) { if (comp_line($ar1[$idx1], $ar2[$idx2], $is_reg)) { $idx1++; $idx2++; continue; } else { $c1 = @count_array_diff($ar1, $ar2, $is_reg, $w, $idx1+1, $idx2, $cnt1, $cnt2, 10); $c2 = @count_array_diff($ar1, $ar2, $is_reg, $w, $idx1, $idx2+1, $cnt1, $cnt2, 10); if ($c1 > $c2) { $old1[$idx1] = (binary) sprintf("%03d- ", $idx1+1) . $w[$idx1++]; $last = 1; } else if ($c2 > 0) { $old2[$idx2] = (binary) sprintf("%03d+ ", $idx2+1) . $ar2[$idx2++]; $last = 2; } else { $old1[$idx1] = (binary) sprintf("%03d- ", $idx1+1) . $w[$idx1++]; $old2[$idx2] = (binary) sprintf("%03d+ ", $idx2+1) . $ar2[$idx2++]; } } } reset($old1); $k1 = key($old1); $l1 = -2; reset($old2); $k2 = key($old2); $l2 = -2; while ($k1 !== null || $k2 !== null) { if ($k1 == $l1 + 1 || $k2 === null) { $l1 = $k1; $diff[] = current($old1); $k1 = next($old1) ? key($old1) : null; } else if ($k2 == $l2 + 1 || $k1 === null) { $l2 = $k2; $diff[] = current($old2); $k2 = next($old2) ? key($old2) : null; } else if ($k1 < $k2) { $l1 = $k1; $diff[] = current($old1); $k1 = next($old1) ? key($old1) : null; } else { $l2 = $k2; $diff[] = current($old2); $k2 = next($old2) ? key($old2) : null; } } while ($idx1 < $cnt1) { $diff[] = (binary) sprintf("%03d- ", $idx1 + 1) . $w[$idx1++]; } while ($idx2 < $cnt2) { $diff[] = (binary) sprintf("%03d+ ", $idx2 + 1) . $ar2[$idx2++]; } return $diff; } function generate_diff($wanted, $wanted_re, $output) { $w = explode(b"\n", $wanted); $o = explode(b"\n", $output); $r = is_null($wanted_re) ? $w : explode(b"\n", $wanted_re); $diff = generate_array_diff($r, $o, !is_null($wanted_re), $w); return implode(b"\r\n", $diff); } function error($message) { die("ERROR: {$message} in ".$_GET['test'].""); } function show_result($state, $file, $text) { $testurl = "?test=".$_GET['test']."&location=".$_GET['location']."&displaystandalone=1"; if (isset($_GET['displaystandalone'])) echo ''; echo "
$state
$state: ".$_GET['test']."$text"; exit(1); } function settings2array($settings, &$ini_settings) { foreach($settings as $setting) { if (strpos($setting, '=') !== false) { $setting = explode("=", $setting, 2); $name = trim(strtolower($setting[0])); $value = trim($setting[1]); if ($name == 'extension') { if (!isset($ini_settings[$name])) { $ini_settings[$name] = array(); } $ini_settings[$name][] = $value; } else { $ini_settings[$name] = $value; } } } } function settings2params(&$ini_settings) { $settings = ''; foreach($ini_settings as $name => $value) { if (is_array($value)) { foreach($value as $val) { $val = addslashes($val); $settings .= " -d \"$name=$val\""; } } else { if (substr(PHP_OS, 0, 3) == "WIN" && !empty($value) && $value{0} == '"') { $len = strlen($value); if ($value{$len - 1} == '"') { $value{0} = "'"; $value{$len - 1} = "'"; } } else { $value = addslashes($value); } $settings .= " -d \"$name=$value\""; } } $ini_settings = $settings; } function binary_section($section) { return /*PHP_MAJOR_VERSION < 6 || */ ( $section == 'FILE' || $section == 'FILEEOF' || $section == 'EXPECT' || $section == 'EXPECTF' || $section == 'EXPECTREGEX' || $section == 'EXPECTHEADERS' || $section == 'SKIPIF' || $section == 'CLEAN' ); } /** * StartsWith * Tests if a text starts with an given string. * * @param string * @param string * @return bool */ function StartsWith($Haystack, $Needle){ // Recommended version, using strpos return strpos($Haystack, $Needle) === 0; } function EndsWith($Haystack,$Needle) { $end = strlen($Haystack) - strlen($Needle); return strpos($Haystack, $Needle, $end) == $end; } ?> ================================================ FILE: Testing/PHPT/web/tests.js ================================================ var files = []; var files_requested = 0; var pending_requests = 0; var max_requests = 1; var paused = true; // if true, no new tests are started function start_test() { while (do_next_tests()); // try more tests after some time if (files_requested < files.length) setTimeout("start_test()", 5000); else { $('#infotxt').text("PHPT: Done! " + files.length + ' files tested.'); $('#list').after("
DONE
"); $('#startbtn').unbind('click').css('color','#333'); } } function decreasePending() { if (pending_requests > 0) pending_requests--; setTimeout("decreasePending()", 30000); } function do_next_tests() { if (pending_requests >= max_requests || files_requested >= files.length || paused) return false; pending_requests++; var url = document.location.origin + document.location.pathname; var jqxhr = $.get(url + '?location=' + escape(url) + '&test=' + escape(files[files_requested++])) .success(function (data, textStatus) { $('#list').append("
  • " + data + "
  • "); }) .error(function (data) { $('#list').append("
  • Request Error
  • "); }) .complete(function () { pending_requests--; do_next_tests(); }); $('#infotxt').text("Progress: " + files_requested + "/" + files.length); return true; } // get query param value function gup( name ) { name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]"); var regexS = "[\\?&]"+name+"=([^&#]*)"; var regex = new RegExp( regexS ); var results = regex.exec( window.location.href ); if( results == null ) return ""; else return results[1]; } $().ready( function(){ // time to time decrease pending requests, since they can timeout and not complete ? decreasePending(); // top bar with filters and buttons var body = $('body'); body.css('margin-top',"34px"); body.prepend( '
    ' + 'Start testing! | ' + 'Filter tests: | ' + ' | ' + '
    '); // $('#infotxt').text(files.length + " tests to go"); $('#startbtn').click(function(){ paused = !paused; if (!files_requested) start_test(); $(this).text(paused ? "Continue" : "Pause"); return false; }); var filter = $('#filterval'); filter.val(gup('filter')); filter.keyup(function(e) { if(e.keyCode == 13) { pause = true; document.location = document.location.origin + document.location.pathname + '?filter=' + filter.val(); } }); } ); ================================================ FILE: Testing/PHPT/web/web.config ================================================ ================================================ FILE: Testing/Tests/@PHP/classes/Phalanger.inc ================================================ ================================================ FILE: Testing/Tests/@PHP/classes/__call_001.php ================================================ [expect php] [file] x; } } $foo = new Caller(); $a = $foo->test(1, '2', 3.4, true); __var_dump($a); ?> ================================================ FILE: Testing/Tests/@PHP/classes/__call_002.php.error ================================================ [expect php] [file] --EXPECTF-- Fatal error: Method Test::__call() must take exactly 2 arguments in %s__call_002.php on line %d ================================================ FILE: Testing/Tests/@PHP/classes/__set__get_001.php ================================================ [expect php] [file] 1, 'b' => 2, 'c' => 3); function __get($nm) { echo "Getting [$nm]\n"; if (isset($this->x[$nm])) { $r = $this->x[$nm]; echo "Returning: $r\n"; return $r; } else { echo "Nothing!\n"; } } function __set($nm, $val) { echo "Setting [$nm] to $val\n"; if (isset($this->x[$nm])) { $this->x[$nm] = $val; echo "OK!\n"; } else { echo "Not OK!\n"; } } } $foo = new Setter(); // this doesn't go through __set()... should it? $foo->n = 1; // the rest are fine... $foo->a = 100; $foo->a++; $foo->z++; __var_dump($foo); ?> ================================================ FILE: Testing/Tests/@PHP/classes/__set__get_002.php.error ================================================ [expect php] [file] --EXPECTF-- Fatal error: Method Test::__get() must take exactly 1 argument in %s__set__get_002.php on line %d ================================================ FILE: Testing/Tests/@PHP/classes/__set__get_003.php.error ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/classes/__set__get_004.php ================================================ [expect php] [file] x[$name])) { return $this->x[$name]; } else { return NULL; } } function __set($name, $val) { $this->x[$name] = $val; } } $foo = new Test(); $bar = new Test(); $bar->baz = "Check"; $foo->bar = $bar; __var_dump($bar->baz); __var_dump($foo->bar->baz); ?> ================================================ FILE: Testing/Tests/@PHP/classes/__set__get_005.php ================================================ [expect php] [file] x[$name])) { return $this->x[$name]; } else { return NULL; } } function __set($name, $val) { echo __METHOD__ . "\n"; $this->x[$name] = $val; } } class AutoGen { protected $x; function __get($name) { echo __METHOD__ . "\n"; if (!isset($this->x[$name])) { $this->x[$name] = new Test(); } return $this->x[$name]; } function __set($name, $val) { echo __METHOD__ . "\n"; $this->x[$name] = $val; } } $foo = new AutoGen(); $foo->bar->baz = "Check"; __var_dump($foo->bar); __var_dump($foo->bar->baz); ?> ================================================ FILE: Testing/Tests/@PHP/classes/__set_data_corrupt.php ================================================ [expect php] [file] null); function bar() { echo $this->t ='f'; } function __get($prop) { return $this->pp[$prop]; } function __set($prop, $val) { echo "__set"; $this->pp[$prop] = ''; } } $f = new foo; $f->bar(); ?> --EXPECT-- __setf ================================================ FILE: Testing/Tests/@PHP/classes/abstract.php.error ================================================ [expect php] [file] show(); $t->error(); echo "Done\n"; // shouldn't be displayed ?> --EXPECTF-- Call to function show() Fatal error: Cannot call abstract method fail::show() in %s on line %d ================================================ FILE: Testing/Tests/@PHP/classes/abstract_class.php.error ================================================ [expect php] [file] show(); $t = new fail(); $t->show(); echo "Done\n"; // shouldn't be displayed ?> --EXPECTF-- Call to function show() Fatal error: Cannot instantiate abstract class fail in %s on line %d ================================================ FILE: Testing/Tests/@PHP/classes/abstract_derived.php.error ================================================ [expect php] [file] --EXPECTF-- Fatal error: Class derived contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (derived::show) in %sabstract_derived.php on line %d ================================================ FILE: Testing/Tests/@PHP/classes/abstract_final.php.error ================================================ [expect php] [file] --EXPECTF-- Fatal error: Cannot use the final modifier on an abstract class member in %s on line %d ================================================ FILE: Testing/Tests/@PHP/classes/abstract_inherit.php.error ================================================ [expect php] [file] --EXPECTF-- Fatal error: Cannot instantiate abstract class fail in %s on line %d ================================================ FILE: Testing/Tests/@PHP/classes/abstract_not_declared.php.error ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/classes/abstract_redeclare.php.error ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/classes/abstract_static.php.error ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/classes/array_access_001.php ================================================ [expect php] [file] '3rd', '4th'=>4); function offsetExists($index) { echo __METHOD__ . "($index)\n"; return array_key_exists($index, $this->a); } function offsetGet($index) { echo __METHOD__ . "($index)\n"; return $this->a[$index]; } function offsetSet($index, $newval) { echo __METHOD__ . "($index,$newval)\n"; return $this->a[$index] = $newval; } function offsetUnset($index) { echo __METHOD__ . "($index)\n"; unset($this->a[$index]); } } $obj = new Object; __var_dump($obj->a); echo "===EMPTY===\n"; __var_dump(empty($obj[0])); __var_dump(empty($obj[1])); __var_dump(empty($obj[2])); __var_dump(empty($obj['4th'])); __var_dump(empty($obj['5th'])); __var_dump(empty($obj[6])); echo "===isset===\n"; __var_dump(isset($obj[0])); __var_dump(isset($obj[1])); __var_dump(isset($obj[2])); __var_dump(isset($obj['4th'])); __var_dump(isset($obj['5th'])); __var_dump(isset($obj[6])); echo "===offsetGet===\n"; __var_dump($obj[0]); __var_dump($obj[1]); __var_dump($obj[2]); __var_dump($obj['4th']); @__var_dump($obj['5th']); @__var_dump($obj[6]); echo "===offsetSet===\n"; echo "WRITE 1\n"; $obj[1] = 'Changed 1'; __var_dump($obj[1]); echo "WRITE 2\n"; $obj['4th'] = 'Changed 4th'; __var_dump($obj['4th']); echo "WRITE 3\n"; $obj['5th'] = 'Added 5th'; __var_dump($obj['5th']); echo "WRITE 4\n"; $obj[6] = 'Added 6'; __var_dump($obj[6]); __var_dump($obj[0]); __var_dump($obj[2]); $x = $obj[6] = 'changed 6'; __var_dump($obj[6]); __var_dump($x); echo "===unset===\n"; __var_dump($obj->a); unset($obj[2]); unset($obj['4th']); unset($obj[7]); unset($obj['8th']); __var_dump($obj->a); ?> ================================================ FILE: Testing/Tests/@PHP/classes/array_access_002.php ================================================ [expect php] [file] '3rd', '4th'=>4); function offsetExists($index) { echo __METHOD__ . "($index)\n"; return array_key_exists($index, $this->a); } function offsetGet($index) { echo __METHOD__ . "($index)\n"; return $this->a[$index]; } function offsetSet($index, $newval) { echo __METHOD__ . "($index,$newval)\n"; /*return*/ $this->a[$index] = $newval; } function offsetUnset($index) { echo __METHOD__ . "($index)\n"; unset($this->a[$index]); } } $obj = new Object; __var_dump($obj->a); echo "===EMPTY===\n"; __var_dump(empty($obj[0])); __var_dump(empty($obj[1])); __var_dump(empty($obj[2])); __var_dump(empty($obj['4th'])); __var_dump(empty($obj['5th'])); __var_dump(empty($obj[6])); echo "===isset===\n"; __var_dump(isset($obj[0])); __var_dump(isset($obj[1])); __var_dump(isset($obj[2])); __var_dump(isset($obj['4th'])); __var_dump(isset($obj['5th'])); __var_dump(isset($obj[6])); echo "===offsetGet===\n"; __var_dump($obj[0]); __var_dump($obj[1]); __var_dump($obj[2]); __var_dump($obj['4th']); @__var_dump($obj['5th']); @__var_dump($obj[6]); echo "===offsetSet===\n"; echo "WRITE 1\n"; $obj[1] = 'Changed 1'; __var_dump($obj[1]); echo "WRITE 2\n"; $obj['4th'] = 'Changed 4th'; __var_dump($obj['4th']); echo "WRITE 3\n"; $obj['5th'] = 'Added 5th'; __var_dump($obj['5th']); echo "WRITE 4\n"; $obj[6] = 'Added 6'; __var_dump($obj[6]); __var_dump($obj[0]); __var_dump($obj[2]); $x = $obj[6] = 'changed 6'; __var_dump($obj[6]); __var_dump($x); echo "===unset===\n"; __var_dump($obj->a); unset($obj[2]); unset($obj['4th']); unset($obj[7]); unset($obj['8th']); __var_dump($obj->a); ?> ================================================ FILE: Testing/Tests/@PHP/classes/array_access_003.php ================================================ [expect php] [file] '3rd', '4th'=>4); function offsetExists($index) { echo __METHOD__ . "($index)\n"; return array_key_exists($index, $this->a); } function offsetGet($index) { echo __METHOD__ . "($index)\n"; switch($index) { case 1: $a = 'foo'; return $a . 'Bar'; case 2: static $a=1; return $a; } return $this->a[$index]; } function offsetSet($index, $newval) { echo __METHOD__ . "($index,$newval)\n"; if ($index==3) { $this->cnt = $newval; } return $this->a[$index] = $newval; } function offsetUnset($index) { echo __METHOD__ . "($index)\n"; unset($this->a[$index]); } } $obj = new Object; __var_dump($obj[1]); __var_dump($obj[2]); // PHP fatal error: $obj[2]++; __var_dump($obj[2]); ?> ================================================ FILE: Testing/Tests/@PHP/classes/array_access_004.php ================================================ [expect php] [file] '3rd', '4th'=>4); function offsetExists($index) { echo __METHOD__ . "($index)\n"; return array_key_exists($index, $this->a); } function offsetGet($index) { echo __METHOD__ . "($index)\n"; switch($index) { case 1: $a = 'foo'; return $a . 'Bar'; case 2: static $a=1; return $a; } return $this->a[$index]; } function offsetSet($index, $newval) { echo __METHOD__ . "($index,$newval)\n"; if ($index==3) { $this->cnt = $newval; } return $this->a[$index] = $newval; } function offsetUnset($index) { echo __METHOD__ . "($index)\n"; unset($this->a[$index]); } } $obj = new Object; __var_dump($obj[1]); __var_dump($obj[2]); // PHP fatal error: $obj[2]++; __var_dump($obj[2]); ?> ================================================ FILE: Testing/Tests/@PHP/classes/array_access_005.php ================================================ [expect php] [file] person = array(array('name'=>'Joe')); } function offsetExists($index) { return array_key_exists($this->person, $index); } function offsetGet($index) { return $this->person[$index]; } function offsetSet($index, $value) { $this->person[$index] = $value; } function offsetUnset($index) { unset($this->person[$index]); } } $people = new Peoples; __var_dump($people->person[0]['name']); $people->person[0]['name'] = $people->person[0]['name'] . 'Foo'; __var_dump($people->person[0]['name']); $people->person[0]['name'] .= 'Bar'; __var_dump($people->person[0]['name']); echo "---ArrayOverloading---\n"; $people = new Peoples; __var_dump($people[0]); __var_dump($people[0]['name']); // PHP disability: __var_dump($people->person[0]['name'] . 'Foo'); // impossible to assign this since we don't return references here $x = $people[0]; // creates a copy // PHP disability: $x['name'] .= 'Foo'; $people[0] = $x; __var_dump($people[0]); // PHP disability: $people[0]['name'] = 'JoeFoo'; __var_dump($people[0]['name']); // PHP disability: $people[0]['name'] = 'JoeFooBar'; __var_dump($people[0]['name']); ?> ================================================ FILE: Testing/Tests/@PHP/classes/array_access_006.php ================================================ [expect php] [file] realArray = array(1,2,3); } function offsetExists($index) { return array_key_exists($this->realArray, $index); } function offsetGet($index) { return $this->realArray[$index]; } function offsetSet($index, $value) { $this->realArray[$index] = $value; } function offsetUnset($index) { unset($this->realArray[$index]); } } $a = new OverloadedArray; $a[1] += 10; __var_dump($a[1]); echo "---Done---\n"; ?> ================================================ FILE: Testing/Tests/@PHP/classes/array_access_007.php ================================================ [expect php] [file] realArray = array(); } function offsetExists($index) { return array_key_exists($this->realArray, $index); } function offsetGet($index) { return $this->realArray[$index]; } function offsetSet($index, $value) { if (is_null($index)) { $this->realArray[] = $value; } else { $this->realArray[$index] = $value; } } function offsetUnset($index) { unset($this->realArray[$index]); } function dump() { __var_dump($this->realArray); } } $a = new OverloadedArray; $a[] = 1; $a[1] = 2; $a[2] = 3; $a[] = 4; $a->dump(); ?> ================================================ FILE: Testing/Tests/@PHP/classes/array_access_008.php ================================================ [expect php] [file] person = array(array('name'=>'Foo')); } function offsetExists($index) { return array_key_exists($this->person, $index); } function offsetGet($index) { return $this->person[$index]; } function offsetSet($index, $value) { $this->person[$index] = $value; } function offsetUnset($index) { unset($this->person[$index]); } } $people = new Peoples; __var_dump($people->person[0]['name']); $people->person[0]['name'] = $people->person[0]['name'] . 'Bar'; __var_dump($people->person[0]['name']); $people->person[0]['name'] .= 'Baz'; __var_dump($people->person[0]['name']); echo "===ArrayOverloading===\n"; $people = new Peoples; __var_dump($people[0]['name']); // PHP disability: $people[0]['name'] = 'FooBar'; __var_dump($people[0]['name']); // PHP disability: $people[0]['name'] = $people->person[0]['name'] . 'Bar'; __var_dump($people[0]['name']); // PHP disability: $people[0]['name'] .= 'Baz'; __var_dump($people[0]['name']); ?> ================================================ FILE: Testing/Tests/@PHP/classes/array_access_009.php ================================================ [expect php] [file] offsetExists($element)) { $object[$element] = array(); } $this->object = $object; $this->element = $element; } function offsetExists($index) { echo __METHOD__ . "($this->element, $index)\n"; return array_key_exists($index, $this->object->proxyGet($this->element)); } function offsetGet($index) { echo __METHOD__ . "($this->element, $index)\n"; $tmp = $this->object->proxyGet($this->element); return isset($tmp[$index]) ? $tmp[$index] : NULL; } function offsetSet($index, $value) { echo __METHOD__ . "($this->element, $index, $value)\n"; $this->object->proxySet($this->element, $index, $value); } function offsetUnset($index) { echo __METHOD__ . "($this->element, $index)\n"; $this->object->proxyUnset($this->element, $index); } } class Peoples implements ArrayProxyAccess { public $person; function __construct() { $this->person = array(array('name'=>'Foo')); } function offsetExists($index) { return array_key_exists($index, $this->person); } function offsetGet($index) { return new ArrayProxy($this, $index); } function offsetSet($index, $value) { $this->person[$index] = $value; } function offsetUnset($index) { unset($this->person[$index]); } function proxyGet($element) { return $this->person[$element]; } function proxySet($element, $index, $value) { $this->person[$element][$index] = $value; } function proxyUnset($element, $index) { unset($this->person[$element][$index]); } } $people = new Peoples; __var_dump($people->person[0]['name']); $people->person[0]['name'] = $people->person[0]['name'] . 'Bar'; __var_dump($people->person[0]['name']); $people->person[0]['name'] .= 'Baz'; __var_dump($people->person[0]['name']); echo "===ArrayOverloading===\n"; $people = new Peoples; __var_dump($people[0]); __var_dump($people[0]['name']); $people[0]['name'] = 'FooBar'; __var_dump($people[0]['name']); $people[0]['name'] = $people->person[0]['name'] . 'Bar'; __var_dump($people[0]['name']); // Phalanger calls one more constructor here: $people[0]['name'] .= 'Baz'; __var_dump($people[0]['name']); unset($people[0]['name']); __var_dump($people[0]); __var_dump($people[0]['name']); $people[0]['name'] = 'BlaBla'; __var_dump($people[0]['name']); ?> ================================================ FILE: Testing/Tests/@PHP/classes/array_access_010.php ================================================ [expect php] [file] object = $object; $this->element = &$element; } function offsetExists($index) { echo __METHOD__ . "(".gettype($this->element).", $index)\n"; return array_key_exists($index, $this->element); } function offsetGet($index) { echo __METHOD__ . "(".gettype($this->element).", $index)\n"; return isset($this->element[$index]) ? $this->element[$index] : NULL; } function offsetSet($index, $value) { echo __METHOD__ . "(".gettype($this->element).", $index, $value)\n"; $this->element[$index] = $value; } function offsetUnset($index) { echo __METHOD__ . "(".gettype($this->element).", $index)\n"; unset($this->element[$index]); } } class Peoples implements ArrayAccess { public $person; function __construct() { $this->person = array(array('name'=>'Foo')); } function offsetExists($index) { return array_key_exists($index, $this->person); } function offsetGet($index) { return new ArrayReferenceProxy($this, $this->person[$index]); } function offsetSet($index, $value) { $this->person[$index] = $value; } function offsetUnset($index) { unset($this->person[$index]); } } $people = new Peoples; __var_dump($people->person[0]['name']); $people->person[0]['name'] = $people->person[0]['name'] . 'Bar'; __var_dump($people->person[0]['name']); $people->person[0]['name'] .= 'Baz'; __var_dump($people->person[0]['name']); echo "===ArrayOverloading===\n"; $people = new Peoples; __var_dump($people[0]); __var_dump($people[0]['name']); $people[0]['name'] = 'FooBar'; __var_dump($people[0]['name']); $people[0]['name'] = $people->person[0]['name'] . 'Bar'; __var_dump($people[0]['name']); // Phalanger invokes one more ctor: $people[0]['name'] .= 'Baz'; __var_dump($people[0]['name']); unset($people[0]['name']); __var_dump($people[0]); __var_dump($people[0]['name']); $people[0]['name'] = 'BlaBla'; __var_dump($people[0]['name']); ?> ================================================ FILE: Testing/Tests/@PHP/classes/array_access_011.php ================================================ [expect php] [file] object = $object; $this->oarray = &$array; $this->element = $element; } function offsetExists($index) { echo __METHOD__ . "($this->element, $index)\n"; return array_key_exists($index, $this->oarray[$this->element]); } function offsetGet($index) { echo __METHOD__ . "($this->element, $index)\n"; return isset($this->oarray[$this->element][$index]) ? $this->oarray[$this->element][$index] : NULL; } function offsetSet($index, $value) { echo __METHOD__ . "($this->element, $index, $value)\n"; $this->oarray[$this->element][$index] = $value; } function offsetUnset($index) { echo __METHOD__ . "($this->element, $index)\n"; unset($this->oarray[$this->element][$index]); } } class Peoples implements ArrayAccess { public $person; function __construct() { $this->person = array(array('name'=>'Foo')); } function offsetExists($index) { return array_key_exists($index, $this->person); } function offsetGet($index) { if (is_array($this->person[$index])) { return new ArrayAccessReferenceProxy($this, $this->person, $index); } else { return $this->person[$index]; } } function offsetSet($index, $value) { $this->person[$index] = $value; } function offsetUnset($index) { unset($this->person[$index]); } } $people = new Peoples; __var_dump($people->person[0]['name']); $people->person[0]['name'] = $people->person[0]['name'] . 'Bar'; __var_dump($people->person[0]['name']); $people->person[0]['name'] .= 'Baz'; __var_dump($people->person[0]['name']); echo "===ArrayOverloading===\n"; $people = new Peoples; __var_dump($people[0]); __var_dump($people[0]['name']); $people[0]['name'] = 'FooBar'; __var_dump($people[0]['name']); $people[0]['name'] = $people->person[0]['name'] . 'Bar'; __var_dump($people[0]['name']); // Phalanger calls one more constructor here: $people[0]['name'] .= 'Baz'; __var_dump($people[0]['name']); unset($people[0]['name']); __var_dump($people[0]); __var_dump($people[0]['name']); $people[0]['name'] = 'BlaBla'; __var_dump($people[0]['name']); ?> ================================================ FILE: Testing/Tests/@PHP/classes/array_access_012.php.notest ================================================ [expect php] [file] data[$index] = $value; } public function offsetGet($index) { return $this->data[$index]; } public function offsetExists($index) { return isset($this->data[$index]); } } $data = new ArrayAccessImpl(); $test = 'some data'; $data['element'] = NULL; // prevent notice $data['element'] = &$test; ?> ================================================ FILE: Testing/Tests/@PHP/classes/array_access_013.php ================================================ [expect php] [file] getMessage() . "()\n"; } try { echo $t[0]; } catch(Exception $e) { echo "Caught in " . $e->getMessage() . "()\n"; } try { $t[0] = 1; } catch(Exception $e) { echo "Caught in " . $e->getMessage() . "()\n"; } try { unset($t[0]); } catch(Exception $e) { echo "Caught in " . $e->getMessage() . "()\n"; } ?> ================================================ FILE: Testing/Tests/@PHP/classes/assign_op_property_001.php ================================================ [expect php] [file] real_a = $value; } } function __get($property) { if ($property = "a") { return $this->real_a; } } } $obj = new Test; echo ($obj->a),"\n"; $obj->a += 2; echo ($obj->a),"\n"; echo "---Done---\n"; ?> ================================================ FILE: Testing/Tests/@PHP/classes/autoload_001.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/classes/autoload_002.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/classes/autoload_003.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/classes/autoload_004.php.kb ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/classes/autoload_005.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/classes/autoload_006.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/classes/autoload_derived.p5c ================================================ class autoload_derived extends autoload_root { } ================================================ FILE: Testing/Tests/@PHP/classes/autoload_implements.p5c ================================================ class autoload_implements implements autoload_interface { function testFunction() { return true; } } ================================================ FILE: Testing/Tests/@PHP/classes/autoload_interface.p5c ================================================ interface autoload_interface { function testFunction(); } ================================================ FILE: Testing/Tests/@PHP/classes/autoload_root.p5c ================================================ class autoload_root { function testFunction() { return true; } } ================================================ FILE: Testing/Tests/@PHP/classes/bug23951.php ================================================ [expect php] [file] 'foo1_value', FOO2=>'foo2_value'); } class B extends A { public $b_var = 'foo'; } $a = new A; $b = new B; __var_dump($a); __var_dump($b->a_var); __var_dump($b->b_var); ?> ================================================ FILE: Testing/Tests/@PHP/classes/bug24399.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/classes/bug24445.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/classes/bug26737.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/classes/bug27468.php ================================================ [expect php] [file] x as $x); } } new foo(); echo 'OK'; ?> ================================================ FILE: Testing/Tests/@PHP/classes/bug27504.php ================================================ [expect php] [file] bar('1'); } private function bar ( $param ) { echo 'Called function foo:bar('.$param.')'."\n"; } } $foo = new foo(); call_user_func_array( array( $foo , 'bar' ) , array( '2' ) ); $foo->bar('3'); echo "NR"; ?> ================================================ FILE: Testing/Tests/@PHP/classes/bug29446.php.error ================================================ --TEST-- Bug #29446 (ZE allows multiple declarations of the same class constant) --FILE-- --EXPECTF-- Fatal error: Cannot redefine class constant testClass::TEST_CONST in %s on line 5 ================================================ FILE: Testing/Tests/@PHP/classes/class_abstract.php.error ================================================ --TEST-- ZE2 An abstract class cannot be instanciated --SKIPIF-- --FILE-- show(); $t = new base(); $t->show(); echo "Done\n"; // shouldn't be displayed ?> --EXPECTF-- base Fatal error: Cannot instantiate abstract class base in %s on line %d ================================================ FILE: Testing/Tests/@PHP/classes/class_example.php ================================================ [expect php] [file] first_name."\n"; echo "Family name:\t ".$this->family_name."\n"; echo "Address:\t ".$this->address."\n"; echo "Phone:\t\t ".$this->phone_num."\n"; echo "\n\n"; } function initialize($first_name,$family_name,$address,$phone_num) { $this->first_name = $first_name; $this->family_name = $family_name; $this->address = $address; $this->phone_num = $phone_num; } }; function test($u) { /* one can pass classes as arguments */ $u->display(); $t = $u; $t->address = "New address..."; return $t; /* and also return them as return values */ } $user1 = new user; $user2 = new user; $user1->initialize("Zeev","Suraski","Ben Gourion 3, Kiryat Bialik, Israel","+972-4-8713139"); $user2->initialize("Andi","Gutmans","Haifa, Israel","+972-4-8231621"); $user1->display(); $user2->display(); $tmp = test($user2); $tmp->display(); ?> ================================================ FILE: Testing/Tests/@PHP/classes/class_final.php.error ================================================ --TEST-- ZE2 A final class cannot be inherited --SKIPIF-- --FILE-- --EXPECTF-- Fatal error: Class derived may not inherit from final class (base) in %s on line %d ================================================ FILE: Testing/Tests/@PHP/classes/class_stdclass.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/classes/clone_001.php ================================================ [expect php] [file] p2 = 'A'; $obj->p3 = 'B'; $copy = clone $obj; $copy->p3 = 'C'; echo "object\n"; __var_dump($obj); echo "Clown\n"; __var_dump($copy); echo "Done\n"; ?> ================================================ FILE: Testing/Tests/@PHP/classes/clone_002.php ================================================ [expect php] [file] p2 = 'A'; $obj->p3 = 'B'; $copy = clone $obj; $copy->p3 = 'C'; echo "object\n"; __var_dump($obj); echo "Clown\n"; __var_dump($copy); echo "Done\n"; ?> ================================================ FILE: Testing/Tests/@PHP/classes/clone_003.php ================================================ [expect php] [file] p5 = 'clone:5'; } } $obj = new test; $obj->p4 = 'A'; $copy = clone $obj; echo "object\n"; __var_dump($obj); echo "Clown\n"; __var_dump($copy); echo "Done\n"; ?> ================================================ FILE: Testing/Tests/@PHP/classes/clone_004.php ================================================ [expect php] [file] a = array(1,2); $o1->b = array(3,4); $o1->show(); echo "Clone\n"; $o2 = clone $o1; $o2->show(); echo "Modify\n"; $o2->a = 5; $o2->b = 6; $o2->show(); echo "Done\n"; ?> ================================================ FILE: Testing/Tests/@PHP/classes/clone_005.php.error ================================================ --TEST-- ZE2 object cloning, 5 --FILE-- --EXPECTF-- Fatal error: Cannot override final method base::__clone() in %sclone_005.php on line %d ================================================ FILE: Testing/Tests/@PHP/classes/clone_006.php ================================================ [expect php] [file] id = self::$id++; } function __clone() { $this->address = "New York"; $this->id = self::$id++; } } $original = new MyCloneable(); $original->name = "Hello"; $original->address = "Tel-Aviv"; echo $original->id . "\n"; $clone = clone $original; echo $clone->id . "\n"; echo $clone->name . "\n"; echo $clone->address . "\n"; ?> ================================================ FILE: Testing/Tests/@PHP/classes/constants_scope_001.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/classes/ctor_dtor.php ================================================ [expect php] [file] early(); unset($t); $t = new late(); //unset($t); delay to end of script echo "Done\n"; ?> ================================================ FILE: Testing/Tests/@PHP/classes/ctor_dtor_inheritance.php ================================================ [expect php] [file] name = 'base'; __var_dump($this); } function __destruct() { // Phalanger ND: echo __CLASS__ . "::" . __FUNCTION__ . "\n"; //__var_dump($this); } } class derived extends base { public $other; function __construct() { $this->name = 'init'; $this->other = 'other'; __var_dump($this); parent::__construct(); echo __CLASS__ . "::" . __FUNCTION__ . "\n"; $this->name = 'derived'; __var_dump($this); } function __destruct() { parent::__destruct(); // Phalanger ND: echo __CLASS__ . "::" . __FUNCTION__ . "\n"; // Phalanger ND: __var_dump($this); } } echo "Testing class base\n"; $t = new base(); unset($t); echo "Testing class derived\n"; $t = new derived(); unset($t); echo "Done\n"; ?> ================================================ FILE: Testing/Tests/@PHP/classes/ctor_failure.php.kb ================================================ [expect php] [file] getMessage() . ")\n"; } ?> ================================================ FILE: Testing/Tests/@PHP/classes/ctor_name_clash.php ================================================ [expect php] [file] base(); ?> ================================================ FILE: Testing/Tests/@PHP/classes/dereferencing_001.php ================================================ [expect php] [file] name = $_name; } function display() { echo $this->name . "\n"; } } class Person { private $name; function person($_name, $_address) { $this->name = new Name($_name); } function getName() { return $this->name; } } $person = new Person("John", "New York"); $person->getName()->display(); ?> ================================================ FILE: Testing/Tests/@PHP/classes/destructor_and_echo.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/classes/destructor_and_exceptions.php.notest ================================================ [expect php] [file] getMessage() . "\n"; } class FatalException extends Exception { function __construct($what) { echo __METHOD__ . "\n"; $o = new FailClass; unset($o); echo "Done: " . __METHOD__ . "\n"; } } try { throw new FatalException("Damn"); } catch(Exception $e) { echo "Caught Exception: " . $e->getMessage() . "\n"; } catch(FatalException $e) { echo "Caught FatalException: " . $e->getMessage() . "\n"; } ?> ================================================ FILE: Testing/Tests/@PHP/classes/destructor_and_globals.php.notest ================================================ [expect php] [file] id = $test_num++; } public function Show() { echo 'Id: '.$this->id."\n"; } // try protected here public function __destruct() { global $test_cnt; $test_cnt--; } static public function destroy(&$obj) { $obj = NULL; } } Show(); $obj1 = new counter; $obj1->Show(); Show(); $obj2 = new counter; $obj2->Show(); Show(); counter::destroy($obj1); Show(); // or uncomment this line and it works //counter::destroy($obj2); echo "Done\n"; ?> ================================================ FILE: Testing/Tests/@PHP/classes/destructor_and_references.php ================================================ [expect php] [file] x = &$o4; $r1 = &$o1; class once {} $o = new once; echo "Done\n"; ?> ================================================ FILE: Testing/Tests/@PHP/classes/destructor_inheritance.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/classes/destructor_visibility_001.php.notest ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/classes/destructor_visibility_002.php.notest ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/classes/destructor_visibility_003.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/classes/factory_001.php ================================================ [expect php] [file] draw(); ShapeFactoryMethod("Square")->draw(); ?> ================================================ FILE: Testing/Tests/@PHP/classes/factory_and_singleton_001.php ================================================ [expect php] [file] x = $x; } static function destroy() { test::$test = NULL; } protected function __destruct() { test::$cnt--; } public function get() { return $this->x; } static public function getX() { if (test::$test) { return test::$test->x; } else { return NULL; } } static public function count() { return test::$cnt; } } echo "Access static members\n"; __var_dump(test::getX()); __var_dump(test::count()); echo "Create x and y\n"; $x = test::factory(1); $y = test::factory(2); __var_dump(test::getX()); __var_dump(test::count()); __var_dump($x->get()); __var_dump($y->get()); echo "Destruct x\n"; $x = NULL; __var_dump(test::getX()); __var_dump(test::count()); __var_dump($y->get()); echo "Destruct y\n"; $y = NULL; __var_dump(test::getX()); __var_dump(test::count()); echo "Destruct static\n"; test::destroy(); __var_dump(test::getX()); //commented out as it relies on deterministic destruction: //__var_dump(test::count()); echo "Done\n"; ?> ================================================ FILE: Testing/Tests/@PHP/classes/factory_and_singleton_002.php ================================================ [expect php] [file] x = $x; } static function destroy() { test::$test = NULL; } protected function __destruct() { test::$cnt--; } public function get() { return $this->x; } static public function getX() { if (test::$test) { return test::$test->x; } else { return NULL; } } static public function count() { return test::$cnt; } } echo "Access static members\n"; __var_dump(test::getX()); __var_dump(test::count()); echo "Create x and y\n"; $x = test::factory(1); $y = test::factory(2); __var_dump(test::getX()); __var_dump(test::count()); __var_dump($x->get()); __var_dump($y->get()); echo "Destruct x\n"; $x = NULL; __var_dump(test::getX()); __var_dump(test::count()); __var_dump($y->get()); echo "Destruct y\n"; $y = NULL; __var_dump(test::getX()); __var_dump(test::count()); //echo "Destruct static\n"; //test::destroy(); //__var_dump(test::getX()); //__var_dump(test::count()); echo "Done\n"; error_reporting(0); ?> ================================================ FILE: Testing/Tests/@PHP/classes/factory_and_singleton_003.php.error ================================================ --TEST-- ZE2 factory and singleton, test 3 --SKIPIF-- --FILE-- --EXPECTF-- Fatal error: Call to protected test::__construct() from context '' %sfactory_and_singleton_003.php on line %d ================================================ FILE: Testing/Tests/@PHP/classes/factory_and_singleton_004.php.error ================================================ --TEST-- ZE2 factory and singleton, test 4 --SKIPIF-- --FILE-- --EXPECTF-- Fatal error: Call to private test::__construct() from context '' %sfactory_and_singleton_004.php on line %d ================================================ FILE: Testing/Tests/@PHP/classes/factory_and_singleton_005.php.error ================================================ [expect php] [file] --EXPECTF-- Fatal error: Call to protected test::__destruct() from context '' in %sfactory_and_singleton_005.php on line %d ================================================ FILE: Testing/Tests/@PHP/classes/factory_and_singleton_006.php.error ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/classes/factory_and_singleton_007.php.error ================================================ [expect php] [file] --EXPECTF-- Fatal error: Call to protected test::__clone() from context '' %sfactory_and_singleton_007.php on line %d ================================================ FILE: Testing/Tests/@PHP/classes/factory_and_singleton_008.php.error ================================================ [expect php] [file] --EXPECTF-- Fatal error: Call to private test::__clone() from context '' %sfactory_and_singleton_008.php on line %d ================================================ FILE: Testing/Tests/@PHP/classes/factory_and_singleton_009.php.error ================================================ [expect php] [file] ===DONE=== --EXPECTF-- ===DONE=== Warning: Call to protected test::__destruct() from context '' during shutdown ignored in Unknown on line 0 ================================================ FILE: Testing/Tests/@PHP/classes/factory_and_singleton_010.php.error ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/classes/final.php ================================================ [expect php] [file] show(); class second extends first { final function show() { echo "Call to function second::show()\n"; } } $t2 = new second(); $t2->show(); echo "Done\n"; ?> ================================================ FILE: Testing/Tests/@PHP/classes/final_abstract.php.error ================================================ [expect php] [file] --EXPECTF-- Fatal error: Cannot use the final modifier on an abstract class member in %s ================================================ FILE: Testing/Tests/@PHP/classes/final_ctor1.php.error ================================================ [expect php] [file] --EXPECTF-- Fatal error: Cannot override final Base::__construct() with Extended::Extended() in %sfinal_ctor1.php on line %d ================================================ FILE: Testing/Tests/@PHP/classes/final_ctor2.php.error ================================================ [expect php] [file] --EXPECTF-- Fatal error: Cannot override final Base::Base() with Extended::__construct() in %sfinal_ctor2.php on line %d ================================================ FILE: Testing/Tests/@PHP/classes/final_redeclare.php.error ================================================ [expect php] [file] --EXPECTF-- Fatal error: Cannot override final method pass::show() in %s on line %d ================================================ FILE: Testing/Tests/@PHP/classes/incdec_property_001.php ================================================ [expect php] [file] real_a = $value; } } function __get($property) { if ($property = "a") { return $this->real_a; } } } $obj = new Test; __var_dump($obj->a); $obj->a++; __var_dump($obj->a); echo "---Done---\n"; ?> ================================================ FILE: Testing/Tests/@PHP/classes/incdec_property_002.php ================================================ [expect php] [file] real_a = $value; } } function __get($property) { if ($property = "a") { return $this->real_a; } } } $obj = new Test; __var_dump($obj->a); $t1 = $obj->a++; __var_dump($obj->a); echo "---Done---\n"; ?> ================================================ FILE: Testing/Tests/@PHP/classes/incdec_property_003.php ================================================ [expect php] [file] real_a = $value; } } function __get($property) { if ($property = "a") { return $this->real_a; } } } $obj = new Test; __var_dump($obj->a); ++$obj->a; __var_dump($obj->a); echo "---Done---\n"; ?> ================================================ FILE: Testing/Tests/@PHP/classes/incdec_property_004.php ================================================ [expect php] [file] real_a = $value; } } function __get($property) { if ($property = "a") { return $this->real_a; } } } $obj = new Test; __var_dump($obj->a); $t1 = ++$obj->a; __var_dump($obj->a); echo "---Done---\n"; ?> ================================================ FILE: Testing/Tests/@PHP/classes/inheritance.php ================================================ [expect php] [file] a."\n"; echo "b = ".$this->b."\n"; } function mul() { return $this->a*$this->b; } }; class bar extends foo { public $c; function display() { /* alternative display function for class bar */ echo "This is class bar\n"; echo "a = ".$this->a."\n"; echo "b = ".$this->b."\n"; echo "c = ".$this->c."\n"; } }; $foo1 = new foo; $foo1->a = 2; $foo1->b = 5; $foo1->display(); echo $foo1->mul()."\n"; echo "-----\n"; $bar1 = new bar; $bar1->a = 4; $bar1->b = 3; $bar1->c = 12; $bar1->display(); echo $bar1->mul()."\n"; ?> ================================================ FILE: Testing/Tests/@PHP/classes/inheritance_002.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/classes/interface_and_extends.php.error ================================================ --TEST-- ZE2 a class cannot extend an interface --SKIPIF-- --FILE-- show(); ?> ===DONE=== --EXPECTF-- Fatal error: Class Tester cannot extend from interface Test in %sinterface_and_extends.php on line %d ================================================ FILE: Testing/Tests/@PHP/classes/interface_class.php.error ================================================ --TEST-- ZE2 A class can only implement interfaces --SKIPIF-- --FILE-- --EXPECTF-- Fatal error: derived cannot implement base - it is not an interface in %s on line %d ================================================ FILE: Testing/Tests/@PHP/classes/interface_construct.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/classes/interface_doubled.php ================================================ [expect php] [file] test('if_a'); echo $t->test('if_b'); echo $t->test('if_c'); echo $t->test('if_d'); echo $t->test('if_e'); echo "class_b\n"; class class_b extends base implements if_a, if_b { function f_a() {} function f_b() {} function f_c() {} function f_d() {} function f_e() {} } $t = new class_b(); echo $t->test('if_a'); echo $t->test('if_b'); echo $t->test('if_c'); echo $t->test('if_d'); echo $t->test('if_e'); echo "class_c\n"; class class_c extends base implements if_c { function f_a() {} function f_b() {} function f_c() {} function f_d() {} function f_e() {} } $t = new class_c(); echo $t->test('if_a'); echo $t->test('if_b'); echo $t->test('if_c'); echo $t->test('if_d'); echo $t->test('if_e'); echo "class_d\n"; class class_d extends base implements if_d{ function f_a() {} function f_b() {} function f_c() {} function f_d() {} function f_e() {} } $t = new class_d(); echo $t->test('if_a'); echo $t->test('if_b'); echo $t->test('if_c'); echo $t->test('if_d'); echo $t->test('if_e'); echo "class_e\n"; class class_e extends base implements if_a, if_b, if_c, if_d { function f_a() {} function f_b() {} function f_c() {} function f_d() {} function f_e() {} } $t = new class_e(); echo $t->test('if_a'); echo $t->test('if_b'); echo $t->test('if_c'); echo $t->test('if_d'); echo $t->test('if_e'); echo "class_f\n"; class class_f extends base implements if_e { function f_a() {} function f_b() {} function f_c() {} function f_d() {} function f_e() {} } $t = new class_f(); echo $t->test('if_a'); echo $t->test('if_b'); echo $t->test('if_c'); echo $t->test('if_d'); echo $t->test('if_e'); echo "class_g\n"; class class_g extends base implements if_f { function f_a() {} function f_b() {} function f_c() {} function f_d() {} function f_e() {} } $t = new class_g(); echo $t->test('if_a'); echo $t->test('if_b'); echo $t->test('if_c'); echo $t->test('if_d'); echo $t->test('if_e'); ?> ================================================ FILE: Testing/Tests/@PHP/classes/interface_implemented.php ================================================ [expect php] [file] _is_a('base'); echo $this->_is_a('derived_a'); echo $this->_is_a('derived_b'); echo $this->_is_a('derived_c'); echo $this->_is_a('derived_d'); echo $this->_is_a('if_a'); echo $this->_is_a('if_b'); echo "\n"; } } class derived_a extends base implements if_a { function f_a() {} } class derived_b extends base implements if_a, if_b { function f_a() {} function f_b() {} } class derived_c extends derived_a implements if_b { function f_b() {} } class derived_d extends derived_c { } $t = new base(); $t->test(); $t = new derived_a(); $t->test(); $t = new derived_b(); $t->test(); $t = new derived_c(); $t->test(); $t = new derived_d(); $t->test(); ?> ================================================ FILE: Testing/Tests/@PHP/classes/interface_instantiate.php.error ================================================ --TEST-- ZE2 An interface cannot be instantiated --SKIPIF-- --FILE-- --EXPECTF-- Fatal error: Cannot instantiate interface if_a in %s on line %d ================================================ FILE: Testing/Tests/@PHP/classes/interface_member.php.error ================================================ --TEST-- ZE2 An interface cannot have properties --SKIPIF-- --FILE-- --EXPECTF-- Fatal error: Interfaces may not include member variables in %s on line %d ================================================ FILE: Testing/Tests/@PHP/classes/interface_method.php.error ================================================ --TEST-- ZE2 An interface method must be abstract --SKIPIF-- --FILE-- --EXPECTF-- Fatal error: Interface function if_a::err() cannot contain body %s on line %d ================================================ FILE: Testing/Tests/@PHP/classes/interface_method_final.php.error ================================================ --TEST-- ZE2 An interface method cannot be final --SKIPIF-- --FILE-- --EXPECTF-- Fatal error: Cannot use the final modifier on an abstract class member in %s on line %d ================================================ FILE: Testing/Tests/@PHP/classes/interface_method_private.php.error ================================================ --TEST-- ZE2 An interface method cannot be private --SKIPIF-- --FILE-- --EXPECTF-- Fatal error: Access type for interface method if_a::err() must be omitted in %s on line %d ================================================ FILE: Testing/Tests/@PHP/classes/interface_must_be_implemented.php.error ================================================ --TEST-- ZE2 An interface must be implemented --SKIPIF-- --FILE-- --EXPECTF-- Fatal error: Class derived_a contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (if_a::f_a) in %s on line %d ================================================ FILE: Testing/Tests/@PHP/classes/interface_optional_arg.php.kb ================================================ [expect php] [file] bar(); ?> ================================================ FILE: Testing/Tests/@PHP/classes/interface_optional_arg.removed.phpt.kb ================================================ --TEST-- ZE2 An interface method allows additional default arguments --FILE-- bar(); ?> ================================================ FILE: Testing/Tests/@PHP/classes/interfaces_001.php ================================================ [expect php] [file] foo; } } $foo = new Exception_foo; echo $foo->getMessage() . "\n"; ?> ================================================ FILE: Testing/Tests/@PHP/classes/interfaces_002.php.error ================================================ --TEST-- ZE2 interface with an unimplemented method --SKIPIF-- --FILE-- foo; } } // this should die -- Exception class must be abstract... $foo = new Exception_foo; echo "Message: " . $foo->getMessage() . "\n"; ?> ===DONE=== --EXPECTF-- Fatal error: Class Exception_foo contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (Throwable::getErrno) in %s on line %d ================================================ FILE: Testing/Tests/@PHP/classes/interfaces_003.php.error ================================================ --TEST-- ZE2 interface and __construct --FILE-- ===DONE=== --EXPECTF-- Fatal error: Argument 1 passed to MyTestClass::__construct() must be an object of class Object, called in %sinterfaces_003.php on line %d ================================================ FILE: Testing/Tests/@PHP/classes/iterators_001.php ================================================ [expect php] [file] num = 0; $this->obj = $obj; } function rewind() { } function valid() { $more = $this->num < $this->obj->max; echo __METHOD__ . ' = ' .($more ? 'true' : 'false') . "\n"; return $more; } function current() { echo __METHOD__ . "\n"; return $this->num; } function next() { echo __METHOD__ . "\n"; $this->num++; } function key() { echo __METHOD__ . "\n"; switch($this->num) { case 0: return "1st"; case 1: return "2nd"; case 2: return "3rd"; default: return "???"; } } } class c implements IteratorAggregate { public $max = 3; function getIterator() { echo __METHOD__ . "\n"; return new c_iter($this); } } echo "===Array===\n"; $a = array(0,1,2); foreach($a as $v) { echo "array:$v\n"; } echo "===Manual===\n"; $t = new c(); for ($iter = $t->getIterator(); $iter->valid(); $iter->next()) { echo $iter->current() . "\n"; } echo "===foreach/std===\n"; foreach($t as $v) { echo "object:$v\n"; } echo "===foreach/rec===\n"; foreach($t as $v) { foreach($t as $w) { echo "double:$v:$w\n"; } } echo "===foreach/key===\n"; foreach($t as $i => $v) { echo "object:$i=>$v\n"; } echo "Done\n"; exit(0); ?> ================================================ FILE: Testing/Tests/@PHP/classes/iterators_002.php ================================================ [expect php] [file] obj = $obj; } function rewind() { echo __METHOD__ . "\n"; $this->num = 0; } function valid() { $more = $this->num < $this->obj->max; echo __METHOD__ . ' = ' .($more ? 'true' : 'false') . "\n"; return $more; } function current() { echo __METHOD__ . "\n"; return $this->num; } function next() { echo __METHOD__ . "\n"; $this->num++; } function key() { echo __METHOD__ . "\n"; switch($this->num) { case 0: return "1st"; case 1: return "2nd"; case 2: return "3rd"; default: return "???"; } } function __destruct() { // destructor calls are non-deterministic in Phalanger: echo __METHOD__ . "\n"; } } class c implements IteratorAggregate { public $max = 3; function getIterator() { echo __METHOD__ . "\n"; return new c_iter($this); } function __destruct() { // destructor calls are non-deterministic in Phalanger: echo __METHOD__ . "\n"; } } $t = new c(); foreach($t as $k => $v) { foreach($t as $w) { echo "double:$v:$w\n"; break; } } unset($t); echo "Done\n"; ?> ================================================ FILE: Testing/Tests/@PHP/classes/iterators_003.php ================================================ [expect php] [file] obj = $obj; } function rewind() { echo __METHOD__ . "\n"; } function valid() { $more = $this->num < $this->obj->max; echo __METHOD__ . ' = ' .($more ? 'true' : 'false') . "\n"; return $more; } function current() { echo __METHOD__ . "\n"; return $this->num; } function next() { echo __METHOD__ . "\n"; $this->num++; } function key() { return $this->num; } } class c implements IteratorAggregate { public $max = 4; function getIterator() { echo __METHOD__ . "\n"; return new c_iter($this); } } $t = new c(); foreach($t as $v) { if ($v == 0) { echo "continue outer\n"; continue; } foreach($t as $w) { if ($w == 1) { echo "continue inner\n"; continue; } if ($w == 2) { echo "break inner\n"; break; } echo "double:$v:$w\n"; } if ($v == 2) { echo "break outer\n"; break; } } echo "Done\n"; ?> ================================================ FILE: Testing/Tests/@PHP/classes/iterators_004.php ================================================ [expect php] [file] num; } function next() { echo __METHOD__ . "\n"; $this->num++; } function valid() { echo __METHOD__ . "\n"; return $this->num < $this->max; } function key() { echo __METHOD__ . "\n"; switch($this->num) { case 0: return "1st"; case 1: return "2nd"; case 2: return "3rd"; default: return "???"; } } } $obj = new c2(); foreach($obj as $v => $w) { echo "object:$v=>$w\n"; } echo "Done\n"; ?> ================================================ FILE: Testing/Tests/@PHP/classes/iterators_005.php.error ================================================ [expect php] [file] --EXPECTF-- Fatal error: Class test must implement interface Traversable as part of either Iterator or IteratorAggregate in %s on line %d ================================================ FILE: Testing/Tests/@PHP/classes/iterators_006.php ================================================ [expect php] [file] array = array('foo', 'bar', 'baz'); } function rewind() { reset($this->array); $this->next(); } function valid() { return $this->key !== NULL; } function key() { return $this->key; } function current() { return $this->current; } function next() { list($this->key, $this->current) = each($this->array); // list($key, $current) = each($this->array); // $this->key = $key; // $this->current = $current; } } class a implements IteratorAggregate { public function getIterator() { return new ai(); } } $array = new a(); foreach ($array as $property => $value) { print "$property: $value\n"; } #$array = $array->getIterator(); #$array->rewind(); #$array->valid(); #var_dump($array->key()); #var_dump($array->current()); echo "===2nd===\n"; $array = new ai(); foreach ($array as $property => $value) { print "$property: $value\n"; } echo "===3rd===\n"; foreach ($array as $property => $value) { print "$property: $value\n"; } ?> ================================================ FILE: Testing/Tests/@PHP/classes/iterators_007.php ================================================ [expect php] [file] x == 0) throw new Exception(__METHOD__); reset($this->arr); } public function current() { if ($this->x == 1) throw new Exception(__METHOD__); return current($this->arr); } public function key() { if ($this->x == 2) throw new Exception(__METHOD__); return key($this->arr); } public function next() { if ($this->x == 3) throw new Exception(__METHOD__); next($this->arr); } public function valid() { if ($this->x == 4) throw new Exception(__METHOD__); return (key($this->arr) !== NULL); } } $t = new Test(); while($t->x < 5) { try { foreach($t as $k => $v) { echo "Current\n"; } } catch(Exception $e) { echo "Caught in " . $e->getMessage() . "()\n"; } $t->x++; } ?> ================================================ FILE: Testing/Tests/@PHP/classes/object_reference_001.php ================================================ [expect php] [file] name = "I'm Foo!\n"; } } $foo = new Foo; echo $foo->name; $bar = $foo; $bar->name = "I'm Bar!\n"; // In ZE1, we would expect "I'm Foo!" echo $foo->name; ?> ================================================ FILE: Testing/Tests/@PHP/classes/private_001.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/classes/private_002.php ================================================ [expect ct-error] [file] ================================================ FILE: Testing/Tests/@PHP/classes/private_003.php ================================================ [expect ct-error] [file] ================================================ FILE: Testing/Tests/@PHP/classes/private_003b.php ================================================ [expect php] [file] show(); } } class fail extends pass { public function ok() { $this->good(); } public function not_ok() { $this->show(); } } $t = new fail(); $t->ok(); $t->not_ok(); // calling a private function echo "Done\n"; // shouldn't be displayed ?> ================================================ FILE: Testing/Tests/@PHP/classes/private_004.php ================================================ [expect ct-error] [file] ================================================ FILE: Testing/Tests/@PHP/classes/private_004b.php ================================================ [expect php] [file] show(); } } class fail extends pass { function do_show() { $this->show(); } } $t = new pass(); $t->do_show(); $t2 = new fail(); $t2->do_show(); echo "Done\n"; // shouldn't be displayed ?> ================================================ FILE: Testing/Tests/@PHP/classes/private_005.php ================================================ [expect ct-error] [file] ================================================ FILE: Testing/Tests/@PHP/classes/private_005b.php ================================================ [expect php] [file] show(); } } class fail extends pass { function do_show() { $this->show(); } } $t = new pass(); $t->do_show(); $t2 = new fail(); $t2->do_show(); echo "Done\n"; // shouldn't be displayed ?> ================================================ FILE: Testing/Tests/@PHP/classes/private_006.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/classes/private_006b.php ================================================ [expect php] [file] show(); } } $t1 = new first(); $t1->do_show(); class second extends first { } //$t2 = new second(); //$t2->do_show(); class third extends second { private function show() { echo "Call show()\n"; } } $t3 = new third(); $t3->do_show(); echo "Done\n"; ?> ================================================ FILE: Testing/Tests/@PHP/classes/private_007.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/classes/private_007b.php ================================================ [expect php] [file] priv(); } private function priv() { echo "Bar::priv()\n"; } } class Foo extends Bar { public function priv() { echo "Foo::priv()\n"; } } $obj = new Foo(); $obj->pub(); $obj->priv(); echo "Done\n"; ?> ================================================ FILE: Testing/Tests/@PHP/classes/private_members.php ================================================ [expect php] [file] member = 'base::member'; $this->test(); echo __METHOD__ . "(end)\n"; } function test() { echo __METHOD__ . "\n"; __var_dump($this); } } class derived extends base { public $member = 'derived::member (default)'; function __construct() { echo __METHOD__ . "(begin)\n"; parent::__construct(); parent::test(); $this->test(); $this->member = 'derived::member'; echo __METHOD__ . "(end)\n"; } function test() { parent::test(); echo __METHOD__ . "\n"; __var_dump($this); } } $t = new derived; $t->test(); unset($t); echo "Done\n"; ?> ================================================ FILE: Testing/Tests/@PHP/classes/private_redeclare.php ================================================ [expect ct-error] [file] show(); } } $t = new base(); $t->test(); class derived extends base { function show() { echo "derived\n"; } function test() { echo "test\n"; $this->show(); parent::test(); parent::show(); } } $t = new derived(); $t->test(); echo "Not reached"; ?> ================================================ FILE: Testing/Tests/@PHP/classes/protected_001.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/classes/protected_001b.php ================================================ [expect php] [file] fail(); } } $t = new pass(); $t->good(); $t->fail();// must fail because we are calling from outside of class pass echo "Done\n"; // shouldn't be displayed ?> ================================================ FILE: Testing/Tests/@PHP/classes/protected_002.php ================================================ [expect ct-error] [file] ================================================ FILE: Testing/Tests/@PHP/classes/serialize_001.php ================================================ [expect php] [file] data = $data; } function serialize() { echo __METHOD__ . "({$this->data})\n"; return $this->data; } function unserialize($serialized) { echo __METHOD__ . "($serialized)\n"; $this->data = $serialized; __var_dump($this); } } $tests = array('String', NULL, 42, false); foreach($tests as $data) { try { echo "==========\n"; __var_dump($data); $ser = serialize(new Test($data)); __var_dump(unserialize($ser)); } catch(Exception $e) { echo 'Exception: ' . gettype($e) . "\n"; } } ?> ================================================ FILE: Testing/Tests/@PHP/classes/singleton_001.php ================================================ [expect php] [file] counter; echo "\n"; } } class SingletonCounter { private static $m_instance = NULL; static function Instance() { if (self::$m_instance == NULL) { self::$m_instance = new Counter(); } return self::$m_instance; } } SingletonCounter::Instance()->increment_and_print(); SingletonCounter::Instance()->increment_and_print(); SingletonCounter::Instance()->increment_and_print(); ?> --EXPECT-- 1 2 3 ================================================ FILE: Testing/Tests/@PHP/classes/static_mix_1.php.error ================================================ [expect php] [file] --EXPECTF-- Fatal error: Cannot make static method pass::show() non static in class fail in %s on line %d ================================================ FILE: Testing/Tests/@PHP/classes/static_mix_2.php.error ================================================ [expect php] [file] show(); fail::show(); echo "Done\n"; // shouldn't be displayed ?> --EXPECTF-- Fatal error: Cannot make non static method pass::show() static in class fail in %s on line %d ================================================ FILE: Testing/Tests/@PHP/classes/static_properties_001.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/classes/static_this.php.kb ================================================ [expect php] [file] Test1(); } static function Test1() { __var_dump($this); } static function Test2($this) { __var_dump($this); } } $obj = new TestClass; TestClass::Test2(new stdClass); ?> ================================================ FILE: Testing/Tests/@PHP/classes/tostring.php.notest ================================================ [expect php] [file] __toString()] = "ERROR"; echo $ar[$o]; echo "====test8====\n"; @__var_dump(trim($o)); __var_dump(trim((string)$o)); echo "====test9====\n"; echo sprintf("%s", $o); ?> ================================================ FILE: Testing/Tests/@PHP/classes/type_hinting_001.php ================================================ [expect php] [file] a($b); $a->b($b); echo "Not reached\n"; ?> ================================================ FILE: Testing/Tests/@PHP/classes/type_hinting_002.php.error ================================================ --TEST-- ZE2 class type hinting non existing class --SKIPIF-- --FILE-- a($o); ?> --EXPECTF-- Fatal error: Class 'NonExisting' not found in %stype_hinting_002.php on line %d ================================================ FILE: Testing/Tests/@PHP/classes/type_hinting_003.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/classes/visibility_000a.php.error ================================================ [expect php] [file] --EXPECTF-- Fatal error: Access level to fail::f0() must be public (as in class same) in %s on line %d ================================================ FILE: Testing/Tests/@PHP/classes/visibility_000b.php.error ================================================ [expect php] [file] --EXPECTF-- Fatal error: Access level to fail::f0() must be public (as in class same) in %s on line %d ================================================ FILE: Testing/Tests/@PHP/classes/visibility_000c.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/classes/visibility_001a.php.error ================================================ [expect php] [file] --EXPECTF-- Fatal error: Access level to fail::f1() must be public (as in class same) in %s on line %d ================================================ FILE: Testing/Tests/@PHP/classes/visibility_001b.php.error ================================================ [expect php] [file] --EXPECTF-- Fatal error: Access level to fail::f1() must be public (as in class same) in %s on line %d ================================================ FILE: Testing/Tests/@PHP/classes/visibility_001c.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/classes/visibility_002a.php.error ================================================ --TEST-- ZE2 A redeclared method must have the same or higher visibility --SKIPIF-- --FILE-- --EXPECTF-- Fatal error: Access level to fail::f2() must be public (as in class same) in %s on line %d ================================================ FILE: Testing/Tests/@PHP/classes/visibility_002b.php.error ================================================ --TEST-- ZE2 A redeclared method must have the same or higher visibility --SKIPIF-- --FILE-- --EXPECTF-- Fatal error: Access level to fail::f2() must be public (as in class same) in %s on line %d ================================================ FILE: Testing/Tests/@PHP/classes/visibility_002c.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/classes/visibility_003a.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/classes/visibility_003b.php.error ================================================ [expect php] [file] --EXPECTF-- Fatal error: Access level to fail::f3() must be protected (as in class same) or weaker in %s on line %d ================================================ FILE: Testing/Tests/@PHP/classes/visibility_003c.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/classes/visibility_004a.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/classes/visibility_004b.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/classes/visibility_004c.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/classes/visibility_005.php ================================================ [expect php] [file] $v) { echo "$k=>$v\n"; } } } class derived extends base { } $o = new base; $o->d = 4; echo "===base::function===\n"; $o->f(); echo "===base,foreach===\n"; foreach($o as $k=>$v) { echo "$k=>$v\n"; } /* PHP bug: $o = new derived; $o->d = 4; echo "===derived::function===\n"; $o->f(); echo "===derived,foreach===\n"; foreach($o as $k=>$v) { echo "$k=>$v\n"; } */ ?> ================================================ FILE: Testing/Tests/@PHP/date/002.php.kb ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/date/Phalanger.inc ================================================ ================================================ FILE: Testing/Tests/@PHP/date/bug13142.php.kb ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/date/bug14561.php.kb ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/date/bug17988.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/date/bug20382-1.php.kb ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/date/bug20382-2.php.kb ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/date/bug21399.php.kb ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/date/bug21966.php.kb ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/date/bug26090.php.kb ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/date/bug26198.php.kb ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/date/bug26317.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/date/bug26320.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/date/bug26694.php.kb ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/date/bug27719.php.kb ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/date/bug27780.php.kb ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/date/bug28024.php.kb ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/date/bug28088.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/date/bug28599.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/date/bug29150.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/date/bug29585.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/date/bug29595.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/date/bug30096.php.kb ================================================ [expect php] [file] dst\n"; $ts = -1; gm_date_check(01,00,00,03,27,2005); gm_date_check(02,00,00,03,27,2005); gm_date_check(03,00,00,03,27,2005); gm_date_check(04,00,00,03,27,2005); echo "\ndst --> no dst\n"; $ts = -1; gm_date_check(01,00,00,10,30,2005); gm_date_check(02,00,00,10,30,2005); gm_date_check(03,00,00,10,30,2005); gm_date_check(04,00,00,10,30,2005); function gm_date_check($hour, $minute, $second, $month, $day, $year) { global $ts, $tsold; echo "gmmktime($hour,$minute,$second,$month,$day,$year): "; $tsold = $ts; $ts = gmmktime($hour, $minute, $second, $month, $day, $year); echo $ts, " | gmdate('r', $ts):", gmdate('r', $ts); if ($tsold > 0) { echo " | Diff: " . ($ts - $tsold); } echo "\n"; } ?> ================================================ FILE: Testing/Tests/@PHP/date/bug30532.php.kb ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/date/bug32086.php.kb ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/date/bug32270.php.kb ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/date/bug32555.php.kb ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/date/bug32588.php.kb ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/date/bug33056.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/date/bug33414-1.php.kb ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/date/bug33414-2.php.kb ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/date/bug33415-1.php.kb ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/date/bug33415-2.php.kb ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/date/bug33452.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/date/bug33532.php.kb ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/date/bug33536.php.kb ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/date/bug33562.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/date/bug33563.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/date/bug33578.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/date/bug33869.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/date/bug33957.php.kb ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/date/bug34087.php.kb ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/date/bug34304.php.kb ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/date/bug34676.php ================================================ [expect php] [file] %s\n", $test, date(DATE_ISO8601, $t)); } ?> ================================================ FILE: Testing/Tests/@PHP/date/bug34771.php ================================================ [expect php] [file] %s\n", $test, date(DATE_ISO8601, $t)); } ?> ================================================ FILE: Testing/Tests/@PHP/date/bug35143.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/date/bug35218.php.kb ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/date/bug35414.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/date/bug35422.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/date/bug35425.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/date/bug35456.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/date/bug35499.php.kb ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/date/bug35624.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/date/bug35630.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/date/bug35699.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/date/bug35705.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/date/bug35885.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/date/bug35887.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/date/date.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/date/date_create-1.php ================================================ [expect php] [file] format(DateTime::ISO8601), "\n"; } ?> ================================================ FILE: Testing/Tests/@PHP/date/date_create-2.php ================================================ [expect php] [file] format(DateTime::RFC822), "\n"; ?> ================================================ FILE: Testing/Tests/@PHP/date/date_default_timezone_get-1.php.notest ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/date/date_default_timezone_get-2.php.notest ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/date/date_default_timezone_get-3.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/date/date_default_timezone_set-1.php.kb ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/date/date_modify-1.php ================================================ [expectf] Thu, 19 Aug 93 23:59:59 -1200 Sat, 21 Aug 93 00:00:00 +1200 Sun, 27 Mar 05 01:59:59 +0100 Sun, 27 Mar 05 03:00:00 +0200 Sun, 30 Oct 05 01:59:59 +0200 Sun, 30 Oct 05 03:00:00 +0100 [file] modify("+1 second"); echo date_format($ts, DateTime::RFC822), "\n"; date_default_timezone_set("Europe/Amsterdam"); $ts = date_create("Sun Mar 27 01:59:59 2005"); echo date_format($ts, DateTime::RFC822), "\n"; $ts->modify("+1 second"); echo date_format($ts, DateTime::RFC822), "\n"; $ts = date_create("Sun Oct 30 01:59:59 2005"); echo date_format($ts, DateTime::RFC822), "\n"; $ts->modify("+ 1 hour 1 second"); echo date_format($ts, DateTime::RFC822), "\n"; ?> ================================================ FILE: Testing/Tests/@PHP/date/date_modify-2.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/date/date_modify-3.phpt ================================================ --TEST-- DateTime: Skip invalid date/time. --SKIPIF-- --FILE-- modify("+1 second"); echo date_format($ts, DateTime::RFC822), "\n"; ?> ===DONE=== --EXPECTF-- Sun, 27 Mar 05 01:59:59 +0100 Sun, 27 Mar 05 03:00:00 +0200 ===DONE=== ================================================ FILE: Testing/Tests/@PHP/date/default-timezone-1.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/date/default-timezone-2.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/date/format-negative-timestamp.php ================================================ [expect php] [file] $max_2) $new_tm *= -1; if (strtotime("@$new_tm") != $new_tm) { echo "Error when parsing: @$new_tm\n"; } } echo "done!"; ?> ================================================ FILE: Testing/Tests/@PHP/date/mktime-1.php.kb ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/date/mktime-2.php.kb ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/date/mktime-3.php.kb ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/date/strtotime.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/date/timezone-configuration.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/doc_examples/Phalanger.inc ================================================ ================================================ FILE: Testing/Tests/@PHP/doc_examples/a.inc ================================================ ================================================ FILE: Testing/Tests/@PHP/doc_examples/function_foo.inc ================================================ ================================================ FILE: Testing/Tests/@PHP/doc_examples/noreturn.inc ================================================ ================================================ FILE: Testing/Tests/@PHP/doc_examples/return.inc ================================================ ================================================ FILE: Testing/Tests/@PHP/doc_examples/test001.php ================================================ [expect php] [file] This is true. This is false. ================================================ FILE: Testing/Tests/@PHP/doc_examples/test002.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/doc_examples/test003.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/doc_examples/test004.php ================================================ [expect php] [file] This is an example. The header above will say 'This is an example'. ================================================ FILE: Testing/Tests/@PHP/doc_examples/test005.php ================================================ [expect ct-error] Syntax error [file] ================================================ FILE: Testing/Tests/@PHP/doc_examples/test006.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/doc_examples/test007.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/doc_examples/test008.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/doc_examples/test009.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/doc_examples/test010.php ================================================ [expect] integer(2147483647) int64(2147483648) int64(2147483648) int64(50000000000) [file] ================================================ FILE: Testing/Tests/@PHP/doc_examples/test011.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/doc_examples/test012.php.notest ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/doc_examples/test013.php ================================================ [expect exact] 1.234 1200 7E-10 [file] ================================================ FILE: Testing/Tests/@PHP/doc_examples/test014.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/doc_examples/test015.php ================================================ [expect php] [file] foo = 'Foo'; $this->bar = array('Bar1', 'Bar2', 'Bar3'); } } $foo = new foo(); $name = 'MyName'; echo <<foo. Now, I am printing some {$foo->bar[1]}. This should print a capital 'A': \x41 EOT; ?> ================================================ FILE: Testing/Tests/@PHP/doc_examples/test016.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/doc_examples/test017.php ================================================ [expect ct-error] Syntax error [file] 'red', 'banana' => 'yellow'); // Works but note that this works differently outside string-quotes echo "A banana is $fruits[banana]."; // Works echo "A banana is {$fruits['banana']}."; // Works but PHP looks for a constant named banana first // as described below. echo "A banana is {$fruits[banana]}."; // Won't work, use braces. This results in a parse error. echo "A banana is $fruits['banana']."; // Works echo "A banana is " . $fruits['banana'] . "."; // Works echo "This square is $square->width meters broad."; // Won't work. For a solution, see the complex syntax. echo "This square is $square->width00 centimeters broad."; ?> ================================================ FILE: Testing/Tests/@PHP/doc_examples/test018.php ================================================ [expect php] [file] array(3 => "ahoj"), "foo" => array(3 => "nazdar")); $great = 'fantastic'; $name = "great"; class C { public $values; } $obj = new C(); $obj->values = array(3 => $square); // Won't work, outputs: This is { fantastic} echo "This is { $great}"; // Works, outputs: This is fantastic echo "This is {$great}"; echo "This is ${great}"; // Works echo "This square is {$square->width}00 centimeters broad."; // Works echo "This works: {$arr[4][3]}"; // This is wrong for the same reason as $foo[bar] is wrong // outside a string. In other words, it will still work but // because PHP first looks for a constant named foo, it will // throw an error of level E_NOTICE (undefined constant). // echo "This is wrong: {$arr[foo][3]}"; // Works. When using multi-dimensional arrays, always use // braces around arrays when inside of strings echo "This works: {$arr['foo'][3]}"; // Works. echo "This works: " . $arr['foo'][3]; echo "You can even write {$obj->values[3]->width}"; echo "This is the value of the var named $name: {${$name}}"; ?> ================================================ FILE: Testing/Tests/@PHP/doc_examples/test019.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/doc_examples/test020.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/doc_examples/test021.php ================================================ [expect php] [file] "bar", 12 => true); echo $arr["foo"]; // bar echo $arr[12]; // 1 ?> ================================================ FILE: Testing/Tests/@PHP/doc_examples/test022.php ================================================ [expect php] [file] array(6 => 5, 13 => 9, "a" => 42)); echo $arr["somearray"][6]; // 5 echo $arr["somearray"][13]; // 9 echo $arr["somearray"]["a"]; // 42 ?> ================================================ FILE: Testing/Tests/@PHP/doc_examples/test023.php ================================================ [expect] true true true true [expect] Notice [expect] Notice [expect] true [file] 43, 32, 56, "b" => 12); // ...this array $y = array(5 => 43, 6 => 32, 7 => 56, "b" => 12); echo $x[5] == $y[5] ? "true " : "false "; echo $x[6] == $y[6] ? "true " : "false "; echo $x[7] == $y[7] ? "true " : "false "; echo $x["b"] == $y["b"] ? "true " : "false "; echo $x["non existing key"] == $y["non existing key"] ? "true " : "false "; ?> ================================================ FILE: Testing/Tests/@PHP/doc_examples/test024.php ================================================ [expect] 1256 [expect] Notice [expect] Notice [expect] Notice [file] 1, 12 => 2); $arr[] = 56; // This is the same as $arr[13] = 56; // at this point of the script $arr["x"] = 42; // This adds a new element to // the array with key "x" echo $arr[5]; echo $arr[12]; echo $arr[13]; echo $arr[14]; unset($arr[5]); // This removes the element from the array echo $arr[5]; unset($arr); // This deletes the whole array echo $arr; ?> ================================================ FILE: Testing/Tests/@PHP/doc_examples/test025.php ================================================ [expect php] [file] $value) { unset($array[$i]); } print_r($array); // Append an item (note that the new key is 5, instead of 0 as you // might expect). $array[] = 6; print_r($array); // Re-index: $array = array_values($array); $array[] = 7; print_r($array); ?> ================================================ FILE: Testing/Tests/@PHP/doc_examples/test026.php ================================================ [expect php] [file] 'one', 2 => 'two', 3 => 'three'); unset($a[2]); /* will produce an array that would have been defined as $a = array(1 => 'one', 3 => 'three'); and NOT $a = array(1 => 'one', 2 =>'three'); */ print_r($a); $b = array_values($a); // Now $b is array(0 => 'one', 1 =>'three') print_r($b); ?> ================================================ FILE: Testing/Tests/@PHP/doc_examples/test027.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/doc_examples/test028.php ================================================ [expect ct-error] Syntax error [file] 'apple', 'veggie' => 'carrot'); // Correct print $arr['fruit']; // apple print $arr['veggie']; // carrot // Incorrect. This works but also throws a PHP error of // level E_NOTICE because of an undefined constant named fruit // // Notice: Use of undefined constant fruit - assumed 'fruit' in... print $arr[fruit]; // apple // Let's define a constant to demonstrate what's going on. We // will assign value 'veggie' to a constant named fruit. define('fruit', 'veggie'); // Notice the difference now print $arr['fruit']; // apple print $arr[fruit]; // carrot // The following is okay as it's inside a string. Constants are not // looked for within strings so no E_NOTICE error here print "Hello $arr[fruit]"; // Hello apple // With one exception, braces surrounding arrays within strings // allows constants to be looked for print "Hello {$arr[fruit]}"; // Hello carrot print "Hello {$arr['fruit']}"; // Hello apple // This will not work, results in a parse error such as: // Parse error: parse error, expecting T_STRING' or T_VARIABLE' or T_NUM_STRING' // This of course applies to using autoglobals in strings as well print "Hello $arr['fruit']"; print "Hello $_GET['foo']"; // Concatenation is another option print "Hello " . $arr['fruit']; // Hello apple ?> ================================================ FILE: Testing/Tests/@PHP/doc_examples/test029.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/doc_examples/test030.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/doc_examples/test031.php ================================================ [expect php] [file] 'red', 'taste' => 'sweet', 'shape' => 'round', 'name' => 'apple', 4 // key will be 0 ); print_r($a); // is completely equivalent with $a['color'] = 'red'; $a['taste'] = 'sweet'; $a['shape'] = 'round'; $a['name'] = 'apple'; $a[] = 4; // key will be 0 print_r($a); $b[] = 'a'; $b[] = 'b'; $b[] = 'c'; // will result in the array array(0 => 'a' , 1 => 'b' , 2 => 'c'), // or simply array('a', 'b', 'c') print_r($b); ?> ================================================ FILE: Testing/Tests/@PHP/doc_examples/test032.php ================================================ [expect php] [file] 4, 'OS' => 'Linux', 'lang' => 'english', 'short_tags' => true ); print_r($map); // strictly numerical keys $array = array( 7, 8, 0, 156, -10 ); // this is the same as array(0 => 7, 1 => 8, ...) print_r($array); $switching = array( 10, // key = 0 5 => 6, 3 => 7, 'a' => 4, 11, // key = 6 (maximum of integer-indices was 5) '8' => 2, // key = 8 (integer!) '02' => 77, // key = '02' 0 => 12 // the value 10 will be overwritten by 12 ); print_r($switching); // empty array $empty = array(); print_r($empty); ?> ================================================ FILE: Testing/Tests/@PHP/doc_examples/test033.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/doc_examples/test034.php ================================================ [expect php] [file] $color) { // won't work: //$color = strtoupper($color); // works: $colors[$key] = strtoupper($color); } print_r($colors); ?> $color) { // won't work: $color = strtoupper($color); // works: //$colors[$key] = strtoupper($color); } print_r($colors); ?> ================================================ FILE: Testing/Tests/@PHP/doc_examples/test035.php ================================================ [expect php] [file] 'January', 'February', 'March'); print_r($firstquarter); ?> ================================================ FILE: Testing/Tests/@PHP/doc_examples/test036.php ================================================ [expect php] [file] $value) { echo "[$key]: $value\n"; } ?> ================================================ FILE: Testing/Tests/@PHP/doc_examples/test037.php ================================================ [expect php] [file] array ( "a" => "orange", "b" => "banana", "c" => "apple" ), "numbers" => array ( 1, 2, 3, 4, 5, 6 ), "holes" => array ( "first", 5 => "second", "third" ) ); // Some examples to address values in the array above echo $fruits["holes"][5]; // prints "second" echo $fruits["fruits"]["a"]; // prints "orange" unset($fruits["holes"][0]); // remove "first" // Create a new multi-dimensional array $juices["apple"]["green"] = "good"; ?> ================================================ FILE: Testing/Tests/@PHP/doc_examples/test038.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/doc_examples/test039.php ================================================ [expect php] [file] do_foo(); ?> ================================================ FILE: Testing/Tests/@PHP/doc_examples/test040.php ================================================ [expect php] [file] scalar; // outputs 'ciao' ?> ================================================ FILE: Testing/Tests/@PHP/doc_examples/test041.php ================================================ [expect] hello world! [expect] call_user_func(): [expect] should not be called statically [expect] Hello World!Hello World! [file] ================================================ FILE: Testing/Tests/@PHP/doc_examples/test042.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/doc_examples/test043.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/doc_examples/test044.php ================================================ [expect exact] bool(true) [file] ================================================ FILE: Testing/Tests/@PHP/doc_examples/test045.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/doc_examples/test046.php ================================================ [expect ct-error] Syntax error [file] ================================================ FILE: Testing/Tests/@PHP/doc_examples/test047.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/doc_examples/test048.php ================================================ [expect ct-error] Syntax error [file] ================================================ FILE: Testing/Tests/@PHP/doc_examples/test049.php ================================================ [expect exact] 25 [file] ================================================ FILE: Testing/Tests/@PHP/doc_examples/test050.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/doc_examples/test051.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/doc_examples/test052.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/doc_examples/test053.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/doc_examples/test054.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/doc_examples/test055.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/doc_examples/test056.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/doc_examples/test057.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/doc_examples/test058.php ================================================ [expect ct-error] Syntax error [file] ================================================ FILE: Testing/Tests/@PHP/doc_examples/test059.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/doc_examples/test060.php ================================================ [expect php] [file] property++; return $obj; } function get_instance_noref() { static $obj; echo "Static object: "; var_dump($obj); if (!isset($obj)) { // Assign the object to the static variable $obj = new stdclass; } $obj->property++; return $obj; } error_reporting(E_ALL & ~E_NOTICE); // turn off notices $obj1 = get_instance_ref(); $still_obj1 = get_instance_ref(); echo "\n"; $obj2 = get_instance_noref(); $still_obj2 = get_instance_noref(); ?> ================================================ FILE: Testing/Tests/@PHP/doc_examples/test061.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/doc_examples/test062.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/doc_examples/test063.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/doc_examples/test064.php ================================================ [expect php] [file] f(); ?> ================================================ FILE: Testing/Tests/@PHP/doc_examples/test065.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/doc_examples/test066.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/doc_examples/test067.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/doc_examples/test068.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/doc_examples/test069.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/doc_examples/test070.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/doc_examples/test071.php ================================================ [expect php] [file] $output"; $output = `type non_existing_file`; echo "
    $output
    "; ?> ================================================ FILE: Testing/Tests/@PHP/doc_examples/test072.php ================================================ [expect php] [file] "; $a = 5; echo "Should be 5: " . $a++ . "
    \n"; echo "Should be 6: " . $a . "
    \n"; echo "Preincrement
    "; $a = 5; echo "Should be 6: " . ++$a . "
    \n"; echo "Should be 6: " . $a . "
    \n"; echo "Postdecrement
    "; $a = 5; echo "Should be 5: " . $a-- . "
    \n"; echo "Should be 4: " . $a . "
    \n"; echo "Predecrement
    "; $a = 5; echo "Should be 4: " . --$a . "
    \n"; echo "Should be 4: " . $a . "
    \n"; ?> ================================================ FILE: Testing/Tests/@PHP/doc_examples/test073.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/doc_examples/test074.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/doc_examples/test075.php ================================================ [expect php] [file] "apple", "b" => "banana"); $b = array("a" => "pear", "b" => "strawberry", "c" => "cherry"); $c = $a + $b; // Union of $a and $b echo "Union of \$a and \$b: \n"; var_dump($c); $c = $b + $a; // Union of $b and $a echo "Union of \$b and \$a: \n"; var_dump($c); ?> ================================================ FILE: Testing/Tests/@PHP/doc_examples/test076.php ================================================ [expect exact] bool(true) bool(false) [file] "banana", "0" => "apple"); var_dump($a == $b); // bool(true) var_dump($a === $b); // bool(false) ?> ================================================ FILE: Testing/Tests/@PHP/doc_examples/test077.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/doc_examples/test078.php ================================================ [expect php] [file] $b) echo "a is bigger than b"; $a = 3; if ($a > $b) echo "a is bigger than b"; ?> ================================================ FILE: Testing/Tests/@PHP/doc_examples/test079.php ================================================ [expect php] [file] $b) { echo "a is bigger than b"; } else { echo "a is NOT bigger than b"; } ?> ================================================ FILE: Testing/Tests/@PHP/doc_examples/test080.php ================================================ [expect php] [file] $b) { echo "a is bigger than b"; } elseif ($a == $b) { echo "a is equal to b"; } else { echo "a is smaller than b"; } ?> ================================================ FILE: Testing/Tests/@PHP/doc_examples/test081.php ================================================ [expect php] [file] A is equal to 5 A is equal to 5 ================================================ FILE: Testing/Tests/@PHP/doc_examples/test082.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/doc_examples/test083.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/doc_examples/test084.php ================================================ [expect php] [file] 0); ?> ================================================ FILE: Testing/Tests/@PHP/doc_examples/test085.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/doc_examples/test086.php ================================================ [expect php] [file] 10) { break; } echo $i; } /* example 3 */ $i = 1; for (; ; ) { if ($i > 10) { break; } echo $i; $i++; } /* example 4 */ for ($i = 1; $i <= 10; print $i, $i++); ?> ================================================ FILE: Testing/Tests/@PHP/doc_examples/test087.php ================================================ [expect php] [file] \n"; } foreach ($arr as $value) { echo "Value: $value
    \n"; } ?> ================================================ FILE: Testing/Tests/@PHP/doc_examples/test088.php ================================================ [expect php] [file] \n"; } echo "Foreach\n"; foreach ($arr as $key => $value) { echo "Key: $key; Value: $value
    \n"; } ?> ================================================ FILE: Testing/Tests/@PHP/doc_examples/test089.php ================================================ [expect php] [file] $v.\n"; $i++; } /* foreach example 3: key and value */ $a = array( "one" => 1, "two" => 2, "three" => 3, "seventeen" => 17 ); foreach ($a as $k => $v) { echo "\$a[$k] => $v.\n"; } /* foreach example 4: multi-dimensional arrays */ $a = array(); $a[0][0] = "a"; $a[0][1] = "b"; $a[1][0] = "y"; $a[1][1] = "z"; foreach ($a as $v1) { foreach ($v1 as $v2) { echo "$v2\n"; } } /* foreach example 5: dynamic arrays */ foreach (array(1, 2, 3, 4, 5) as $v) { echo "$v\n"; } ?> ================================================ FILE: Testing/Tests/@PHP/doc_examples/test090.php ================================================ [expect php] [file] \n"; } /* Using the optional argument. */ $i = 0; while (++$i) { switch ($i) { case 5: echo "At 5
    \n"; break 1; /* Exit only the switch. */ case 10: echo "At 10; quitting
    \n"; break 2; /* Exit the switch and the while. */ default: break; } } ?> ================================================ FILE: Testing/Tests/@PHP/doc_examples/test091.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/doc_examples/test092.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/doc_examples/test093.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/doc_examples/test094.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/doc_examples/test095.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/doc_examples/test096.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/doc_examples/test097.php ================================================ [expect ct-error] The 'declare' construct is not supported [file] ================================================ FILE: Testing/Tests/@PHP/doc_examples/test098.php ================================================ [expect] [file] ================================================ FILE: Testing/Tests/@PHP/doc_examples/test099.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/doc_examples/test100.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/doc_examples/test102.php ================================================ [expect exact] 1 2 3 [file] ================================================ FILE: Testing/Tests/@PHP/doc_examples/test103.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/doc_examples/test104.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/doc_examples/test105.php ================================================ [expect exact] ahoj [file] ================================================ FILE: Testing/Tests/@PHP/doc_examples/test107.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/doc_examples/test108.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/doc_examples/test109.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/doc_examples/test110.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/doc_examples/test111.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/doc_examples/test112.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/doc_examples/test113.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/doc_examples/test114.php ================================================ [expect] Warning: [expect] Missing argument #2 [expect] Making a bowl of raspberry . [file] ================================================ FILE: Testing/Tests/@PHP/doc_examples/test115.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/doc_examples/test116.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/doc_examples/test117.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/doc_examples/test118.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/doc_examples/test119.php ================================================ [expect php] [file] x; } } $a = new c(2); $a->foo(); function &returns_reference(&$x) { $x->foo(); $x->x = 5; return $x; } $newref =& returns_reference($a); $newref->foo(); ?> ================================================ FILE: Testing/Tests/@PHP/doc_examples/test120.php ================================================ [expect php] [file] \n"; } function bar($arg = '') { echo "In bar(); argument was '$arg'.
    \n"; } // This is a wrapper function around echo function echoit($string) { echo $string; } $func = 'foo'; $func(); // This calls foo() $func = 'bar'; $func('test'); // This calls bar() $func = 'echoit'; $func('test'); // This calls echoit() ?> ================================================ FILE: Testing/Tests/@PHP/doc_examples/test121.php ================================================ [expect php] [file] $name(); // This calls the Bar() method } function Bar() { echo "This is Bar"; } } $foo = new Foo(); $funcname = "Variable"; $foo->$funcname(); // This calls $foo->Variable() ?> ================================================ FILE: Testing/Tests/@PHP/doc_examples/test122.php ================================================ [expect] Notice: [expect] Undefined offset (1) [expect] 1 [file] items[$artnr] += $num; } // Take $num articles of $artnr out of the cart function remove_item($artnr, $num) { if ($this->items[$artnr] > $num) { $this->items[$artnr] -= $num; return true; } else { return false; } } } $c = new Cart(); $c->add_item(1, 5); $b = $c->remove_item(1, 6); echo $b; $b = $c->remove_item(1,4); echo $b; ?> ================================================ FILE: Testing/Tests/@PHP/doc_examples/test123.php ================================================ [expect ct-error] Syntax error [file] ================================================ FILE: Testing/Tests/@PHP/doc_examples/test124.php ================================================ [expect php] [file] items[$artnr] += $num; } // Take $num articles of $artnr out of the cart function remove_item($artnr, $num) { if ($this->items[$artnr] > $num) { $this->items[$artnr] -= $num; return true; } else { return false; } } } ?> add_item("10", 1); $another_cart = new Cart; $another_cart->add_item("0815", 3); ?> items = array("10" => 2); var_dump($cart->items); // invalid, because $cart->$items becomes $cart->"" //$cart->$items = array("10" => 1); // correct, but may or may not be what was intended: // $cart->$myvar becomes $cart->items $myvar = 'items'; $cart->$myvar = array("10" => 1); var_dump($cart->items); ?> ================================================ FILE: Testing/Tests/@PHP/doc_examples/test125.php ================================================ [expect] kris [expect] Notice [expect] Undefined offset (10) [file] items[$artnr] += $num; } // Take $num articles of $artnr out of the cart function remove_item($artnr, $num) { if ($this->items[$artnr] > $num) { $this->items[$artnr] -= $num; return true; } else { return false; } } } ?> owner = $name; } } ?> set_owner("kris"); // Name that cart print $ncart->owner; // print the cart owners name $ncart->add_item("10", 1); // (inherited functionality from cart) ?> ================================================ FILE: Testing/Tests/@PHP/doc_examples/test126.php ================================================ [expect php] [file] \n"; } function B() { echo "I am a regular function named B in class A.
    \n"; echo "I am not a constructor in A.
    \n"; } } class B extends A { function C() { echo "I am a regular function.
    \n"; } } // This will call A() as a constructor. $b = new B; ?> ================================================ FILE: Testing/Tests/@PHP/doc_examples/test127.php ================================================ [expect] I am the original function A::example(). [expect] I am the redefined function B::example(). [expect] I am the original function A::example(). [file] A::example(); // create an object of class B. $b = new B; // this will print // I am the redefined function B::example().
    // I am the original function A::example().
    $b->example(); ?> ================================================ FILE: Testing/Tests/@PHP/doc_examples/test128.php ================================================ [expect] I am B::example() and provide additional functionality. [expect] I am A::example() and provide basic functionality. [file] \n"; } } class B extends A { function example() { echo "I am B::example() and provide additional functionality.
    \n"; parent::example(); } } $b = new B; // This will call B::example(), which will in turn call A::example(). $b->example(); ?> ================================================ FILE: Testing/Tests/@PHP/doc_examples/test129.php ================================================ [expect] 1 [file] one; } } $a = new A; $s = serialize($a); // store $s somewhere where page2.php can find it. $fp = fopen("store", "w"); fwrite($fp, $s); fclose($fp); $s = implode("", @file("store")); $a = unserialize($s); // now use the function show_one() of the $a object. $a->show_one(); ?> ================================================ FILE: Testing/Tests/@PHP/doc_examples/test130.php ================================================ [expect php] [file] setName($name); // and put it out $this->echoName(); } function echoName() { echo "
    ", $this->name; } function setName($name) { $this->name = $name; } } ?> echoName(); $globalref[0]->echoName(); /* output: set in constructor set in constructor set in constructor */ $bar2 =& new Foo('set in constructor'); $bar2->echoName(); $globalref[1]->echoName(); /* output: set in constructor set in constructor set in constructor */ ?> setName('set from outside'); // as mentioned before this is not the case. $bar1->echoName(); $globalref[0]->echoName(); /* output: set from outside set in constructor */ // let us see what is different with $bar2 and $globalref[1] $bar2->setName('set from outside'); // luckily they are not only equal, they are the same variable // thus $bar2->name and $globalref[1]->name are the same too $bar2->echoName(); $globalref[1]->echoName(); /* output: set from outside set from outside */ ?> ================================================ FILE: Testing/Tests/@PHP/doc_examples/test131.php ================================================ [expect php] [file] value = $i; // try to figure out why we do not need a reference here $this->b = new B($this); } function createRef() { $this->c = new B($this); } function echoValue() { echo "
    ","class ",get_class($this),': ',$this->value; } } class B { function B(&$a) { $this->a = &$a; } function echoValue() { echo "
    ","class ",get_class($this),': ',$this->a->value; } } // try to understand why using a simple copy here would yield // in an undesired result in the *-marked line $a =& new A(10); $a->createRef(); $a->echoValue(); $a->b->echoValue(); $a->c->echoValue(); $a->value = 11; $a->echoValue(); $a->b->echoValue(); // * $a->c->echoValue(); ?> ================================================ FILE: Testing/Tests/@PHP/doc_examples/test132.php ================================================ [expect php] [file] flag = $flag; } } class SwitchableFlag extends Flag { function turnOn() { $this->flag = true; } function turnOff() { $this->flag = false; } } $o = new Flag(); $p = new Flag(false); $q = new Flag(); $r = new SwitchableFlag(); echo "Compare instances created with the same parameters\n"; compareObjects($o, $q); echo "\nCompare instances created with different parameters\n"; compareObjects($o, $p); echo "\nCompare an instance of a parent class with one from a subclass\n"; compareObjects($o, $r); ?> ================================================ FILE: Testing/Tests/@PHP/doc_examples/test133.php ================================================ [expect] Composite objects u(o,p) and v(q,p) o1 == o2 : TRUE o1 != o2 : FALSE o1 === o2 : FALSE o1 !== o2 : TRUE u(o,p) and w(q) o1 == o2 : FALSE o1 != o2 : TRUE o1 === o2 : FALSE o1 !== o2 : TRUE [file] set = $flagArr; } function addFlag($name, $flag) { $this->set[$name] = $flag; } function removeFlag($name) { if (array_key_exists($name, $this->set)) { unset($this->set[$name]); } } } $o = $p = $q = null; $u = new FlagSet(); $u->addFlag('flag1', $o); $u->addFlag('flag2', $p); $v = new FlagSet(array('flag1'=>$q, 'flag2'=>$p)); $w = new FlagSet(array('flag1'=>$q)); echo "\nComposite objects u(o,p) and v(q,p)\n"; compareObjects($u, $v); echo "\nu(o,p) and w(q)\n"; compareObjects($u, $w); ?> ================================================ FILE: Testing/Tests/@PHP/doc_examples/test134.php ================================================ [expect] In BaseClass constructor [expect] In BaseClass constructor [expect] In SubClass constructor [file] ================================================ FILE: Testing/Tests/@PHP/doc_examples/test136.php ================================================ [expect php] [file] private; print "MyClass::printHello() " . $this->protected; print "MyClass::printHello() " . $this->protected2; } } class MyClass2 extends MyClass { protected $protected = "MyClass2::protected!\n"; function printHello() { MyClass::printHello(); print "MyClass2::printHello() " . $this->public; print "MyClass2::printHello() " . $this->protected; print "MyClass2::printHello() " . $this->protected2; /* Will result in a Fatal Error: */ //print "MyClass2::printHello() " . $this->private; /* Fatal Error */ } } $obj = new MyClass(); print "Main:: " . $obj->public; //print $obj->private; /* Fatal Error */ //print $obj->protected; /* Fatal Error */ //print $obj->protected2; /* Fatal Error */ $obj->printHello(); /* Should print */ $obj2 = new MyClass2(); print "Main:: " . $obj2->private; /* Undefined */ //print $obj2->protected; /* Fatal Error */ //print $obj2->protected2; /* Fatal Error */ $obj2->printHello(); ?> ================================================ FILE: Testing/Tests/@PHP/doc_examples/test137.php ================================================ [expect php] [file] test(); ?> ================================================ FILE: Testing/Tests/@PHP/doc_examples/test138.php ================================================ [expect php] [file] id = self::$id++; } function __clone() { $this->address = "New York"; $this->id = self::$id++; } } $obj = new MyCloneable(); $obj->name = "Hello"; $obj->address = "Tel-Aviv"; print $obj->id . "\n"; $obj_cloned = clone $obj; print $obj_cloned->id . "\n"; print $obj_cloned->name . "\n"; print $obj_cloned->address . "\n"; ?> ================================================ FILE: Testing/Tests/@PHP/doc_examples/test139.php ================================================ [expect] Two instances of the same class o1 == o2 : TRUE o1 != o2 : FALSE o1 === o2 : FALSE o1 !== o2 : TRUE [expect] Two references to the same instance o1 == o2 : TRUE o1 != o2 : FALSE o1 === o2 : TRUE o1 !== o2 : FALSE [expect] Instances of two different classes o1 == o2 : FALSE o1 != o2 : TRUE o1 === o2 : FALSE o1 !== o2 : TRUE [file] flag = $flag; } } class OtherFlag { var $flag; function OtherFlag($flag=true) { $this->flag = $flag; } } $o = new Flag(); $p = new Flag(); $q = $o; $r = new OtherFlag(); echo "Two instances of the same class\n"; compareObjects($o, $p); echo "\nTwo references to the same instance\n"; compareObjects($o, $q); echo "\nInstances of two different classes\n"; @compareObjects($o, $r); ?> ================================================ FILE: Testing/Tests/@PHP/doc_examples/test148.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/doc_examples/test149.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/doc_examples/test150.php ================================================ [expect exact] 6 [file] ================================================ FILE: Testing/Tests/@PHP/doc_examples/test151.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/doc_examples/test152.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/doc_examples/test153.php ================================================ [expect php] [file] 'apple', 'veggie' => 'carrot'); // Correct print $arr['fruit']; // apple print $arr['veggie']; // carrot // Incorrect. This works but also throws a PHP error of // level E_NOTICE because of an undefined constant named fruit // // Notice: Use of undefined constant fruit - assumed 'fruit' in... //print $arr[fruit]; // apple // Let's define a constant to demonstrate what's going on. We // will assign value 'veggie' to a constant named fruit. define('fruit', 'veggie'); // Notice the difference now print $arr['fruit']; // apple print $arr[fruit]; // carrot // The following is okay as it's inside a string. Constants are not // looked for within strings so no E_NOTICE error here print "Hello $arr[fruit]"; // Hello apple // With one exception, braces surrounding arrays within strings // allows constants to be looked for print "Hello {$arr[fruit]}"; // Hello carrot print "Hello {$arr['fruit']}"; // Hello apple // This will not work, results in a parse error such as: // Parse error: parse error, expecting T_STRING' or T_VARIABLE' or T_NUM_STRING' // This of course applies to using autoglobals in strings as well //print "Hello $arr['fruit']"; //print "Hello $_GET['foo']"; // Concatenation is another option print "Hello " . $arr['fruit']; // Hello apple ?> ================================================ FILE: Testing/Tests/@PHP/doc_examples/test154.php ================================================ [expect php] [file] 'red', 'banana' => 'yellow'); // Works but note that this works differently outside string-quotes echo "A banana is $fruits[banana]."; // Works echo "A banana is {$fruits['banana']}."; // Works but PHP looks for a constant named banana first // as described below. echo @"A banana is {$fruits[banana]}."; // Won't work, use braces. This results in a parse error. //echo "A banana is $fruits['banana']."; // Works echo "A banana is " . $fruits['banana'] . "."; $square->width = 1; // Works echo "This square is $square->width meters broad."; // Won't work. For a solution, see the complex syntax. //echo "This square is $square->width00 centimeters broad."; ?> ================================================ FILE: Testing/Tests/@PHP/doc_examples/test155.php ================================================ [expect ct-error] Syntax error [file] ================================================ FILE: Testing/Tests/@PHP/doc_examples/test156.php ================================================ [expect] Notice [file] ================================================ FILE: Testing/Tests/@PHP/doc_examples/test158.php ================================================ [expect ct-error] Only variables can be passed by reference [file] ================================================ FILE: Testing/Tests/@PHP/doc_examples/xyz.inc ================================================ ================================================ FILE: Testing/Tests/@PHP/lang/001.php ================================================ --TEST-- Simple If condition test --FILE-- 0) { echo "Yes"; } ?> --EXPECT-- Yes ================================================ FILE: Testing/Tests/@PHP/lang/002.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/lang/003.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/lang/004.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/lang/005.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/lang/006.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/lang/007.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/lang/008.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/lang/009.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/lang/010.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/lang/011.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/lang/012.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/lang/013.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/lang/014.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/lang/015.inc ================================================ ================================================ FILE: Testing/Tests/@PHP/lang/015.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/lang/016.inc ================================================ ================================================ FILE: Testing/Tests/@PHP/lang/016.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/lang/017.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/lang/018.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/lang/019.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/lang/020.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/lang/021.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/lang/022.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/lang/023-1.inc ================================================ *** Testing assignments and variable aliasing: ***
    This should read "blah": \n"; ?> This should read "this is nifty": \n"; ?> *************************************************
    *** Testing integer operators ***
    Correct result - 8:
    Correct result - 8:
    Correct result - 2:
    Correct result - -2:
    Correct result - 15:
    Correct result - 15:
    Correct result - 2:
    Correct result - 3:
    *********************************
    *** Testing real operators ***
    Correct result - 8:
    Correct result - 8:
    Correct result - 2:
    Correct result - -2:
    Correct result - 15:
    Correct result - 15:
    Correct result - 2:
    Correct result - 3:
    *********************************
    *** Testing if/elseif/else control ***
    \n"; } elseif ($a == "5") { echo "This "." works
    \n"; $a = 6; if ("andi" == ($test = "andi")) { echo "this_still_works
    \n"; } elseif (1) { echo "should_not_print
    \n"; } else { echo "should_not_print
    \n"; } if (44 == 43) { echo "should_not_print
    \n"; } else { echo "should_print
    \n"; } } elseif ($a == 6) { echo "this "."broken
    \n"; if (0) { echo "this_should_not_print
    \n"; } else { echo "TestingDanglingElse_This_Should_not_print
    \n"; } } else { echo "This "."does "." not"." work
    \n"; } ?> *** Seriously nested if's test ***
    ** spelling correction by kluzz ** \n"; if (0) { /* this code is not supposed to be executed */ echo "hmm, this shouldn't be displayed #1
    \n"; $j++; if (1) { $i += $j; if (0) { $j = ++$i; if (1) { $j *= $i; echo "damn, this shouldn't be displayed
    \n"; } else { $j /= $i; ++$j; echo "this shouldn't be displayed either
    \n"; } } elseif (1) { $i++; $j++; echo "this isn't supposed to be displayed
    \n"; } } elseif (0) { $i++; echo "this definitely shouldn't be displayed
    \n"; } else { --$j; echo "and this too shouldn't be displayed
    \n"; while ($j>0) { $j--; } } } elseif (2-2) { /* as long as 2-2==0, this isn't supposed to be executed either */ $i = ++$j; echo "hmm, this shouldn't be displayed #2
    \n"; if (1) { $j = ++$i; if (0) { $j = $i*2+$j*($i++); if (1) { $i++; echo "damn, this shouldn't be displayed
    \n"; } else { $j++; echo "this shouldn't be displayed either
    \n"; } } else if (1) { ++$j; echo "this isn't supposed to be displayed
    \n"; } } elseif (0) { $j++; echo "this definitely shouldn't be displayed
    \n"; } else { $i++; echo "and this too shouldn't be displayed
    \n"; } } else { $j=$i++; /* this should set $i to 1, but shouldn't change $j (it's assigned $i's previous values, zero) */ echo "this should be displayed. should be: \$i=1, \$j=0. is: \$i=$i, \$j=$j
    \n"; if (1) { $j += ++$i; /* ++$i --> $i==2, $j += 2 --> $j==2 */ if (0) { $j += 40; if (1) { $i += 50; echo "damn, this shouldn't be displayed
    \n"; } else { $j += 20; echo "this shouldn't be displayed either
    \n"; } } else if (1) { $j *= $i; /* $j *= 2 --> $j == 4 */ echo "this is supposed to be displayed. should be: \$i=2, \$j=4. is: \$i=$i, \$j=$j
    \n"; echo "3 loop iterations should follow:
    \n"; while ($i<=$j) { echo $i++." $j
    \n"; } } } elseif (0) { echo "this definitely shouldn't be displayed
    \n"; } else { echo "and this too shouldn't be displayed
    \n"; } echo "**********************************
    \n"; } ?> *** C-style else-if's ***
    \n"; } else if ($a++) { echo "This shouldn't be displayed either
    \n"; } else if (--$a) { echo "No, this neither
    \n"; } else if (++$a) { echo "This should be displayed
    \n"; } else { echo "This shouldn't be displayed at all
    \n"; } ?> *************************
    *** WHILE tests ***
    $j) { echo "$i is greater than $j
    \n"; } else if ($i==$j) { echo "$i equals $j
    \n"; } else { echo "$i is smaller than $j
    \n"; } $i++; } ?> *******************
    *** Nested WHILEs ***
    \n"; $i=0; while ($i<$arr_len) { $j=0; while ($j<$arr_len) { $k=0; while ($k<$arr_len) { echo "\${test$i$j}[$k] = ".${"test$i$j"}[$k]."
    \n"; $k++; } $j++; } $i++; } ?> *********************
    *** hash test... ***
    \n"; } */ echo "commented out..."; ?> **************************
    *** Hash resizing test ***
    0) { $a = $a . 'a'; echo "$a
    \n"; $resize[$a] = $i; $i--; } $i = 10; $a = 'b'; while ($i > 0) { $a = $a . 'a'; echo "$a
    \n"; echo $resize[$a]."
    \n"; $i--; } ?> **************************
    *** break/continue test ***
    \n"; while ($i<5) { if ($i>2) { break; } $j=0; echo "\$j should go from 3 to 4, and \$q should go from 3 to 4
    \n"; while ($j<5) { if ($j<=2) { $j++; continue; } echo " \$j=$j
    \n"; for ($q=0; $q<=10; $q++) { if ($q<3) { continue; } if ($q>4) { break; } echo " \$q=$q
    \n"; } $j++; } $j=0; echo "\$j should go from 0 to 2
    \n"; while ($j<5) { if ($j>2) { $k=0; echo "\$k should go from 0 to 2
    \n"; while ($k<5) { if ($k>2) { break 2; } echo " \$k=$k
    \n"; $k++; } } echo " \$j=$j
    \n"; $j++; } echo "\$i=$i
    \n"; $i++; } ?> ***********************
    *** Nested file include test ***
    ********************************
    \n"; # testing some PHP style comment... } ?> ================================================ FILE: Testing/Tests/@PHP/lang/023-2.inc ================================================ This is Finish.phtml. This file is supposed to be included from regression_test.phtml. This is normal HTML. ================================================ FILE: Testing/Tests/@PHP/lang/023.php ================================================ [expect php] [file] 0) { $days = $time_left/(24*3600); $time_left -= $days*24*3600; $hours = $time_left/3600; $time_left -= $hours*3600; $minutes = $time_left/60; echo "Limor Ullmann is getting married on ".($wedding_date=date("l, F dS, Y",$wedding_timestamp)).",\nwhich is $days days, $hours hours and $minutes minutes from now.\n"; echo "Her hashed wedding date is $wedding_date.\n"; } else { echo "Limor Ullmann is now Limor Baruch :I\n"; } ?> ================================================ FILE: Testing/Tests/@PHP/lang/024.php ================================================ [expect php] [file] *** Testing assignments and variable aliasing: *** This should read "blah": This should read "this is nifty": ************************************************* *** Testing integer operators *** Correct result - 8: Correct result - 8: Correct result - 2: Correct result - -2: Correct result - 15: Correct result - 15: Correct result - 2: Correct result - 3: ********************************* *** Testing real operators *** Correct result - 8: Correct result - 8: Correct result - 2: Correct result - -2: Correct result - 15: Correct result - 15: Correct result - 2: Correct result - 3: ********************************* *** Testing if/elseif/else control *** *** Seriously nested if's test *** ** spelling correction by kluzz ** 0) { $j--; } } } elseif (2-2) { /* as long as 2-2==0, this isn't supposed to be executed either */ $i = ++$j; echo "hmm, this shouldn't be displayed #2\n"; if (1) { $j = ++$i; if (0) { $j = $i*2+$j*($i++); if (1) { $i++; echo "damn, this shouldn't be displayed\n"; } else { $j++; echo "this shouldn't be displayed either\n"; } } else if (1) { ++$j; echo "this isn't supposed to be displayed\n"; } } elseif (0) { $j++; echo "this definitely shouldn't be displayed\n"; } else { $i++; echo "and this too shouldn't be displayed\n"; } } else { $j=$i++; /* this should set $i to 1, but shouldn't change $j (it's assigned $i's previous values, zero) */ echo "this should be displayed. should be: \$i=1, \$j=0. is: \$i=$i, \$j=$j\n"; if (1) { $j += ++$i; /* ++$i --> $i==2, $j += 2 --> $j==2 */ if (0) { $j += 40; if (1) { $i += 50; echo "damn, this shouldn't be displayed\n"; } else { $j += 20; echo "this shouldn't be displayed either\n"; } } else if (1) { $j *= $i; /* $j *= 2 --> $j == 4 */ echo "this is supposed to be displayed. should be: \$i=2, \$j=4. is: \$i=$i, \$j=$j\n"; echo "3 loop iterations should follow:\n"; while ($i<=$j) { echo $i++." $j\n"; } } } elseif (0) { echo "this definitely shouldn't be displayed\n"; } else { echo "and this too shouldn't be displayed\n"; } echo "**********************************\n"; } ?> *** C-style else-if's *** ************************* *** WHILE tests *** $j) { echo "$i is greater than $j\n"; } else if ($i==$j) { echo "$i equals $j\n"; } else { echo "$i is smaller than $j\n"; } $i++; } ?> ******************* *** Nested WHILEs *** ********************* *** hash test... *** ************************** *** Hash resizing test *** 0) { $a = $a . "a"; echo "$a\n"; $resize[$a] = $i; $i--; } $i = 10; $a = "b"; while ($i > 0) { $a = $a . "a"; echo "$a\n"; echo $resize[$a]."\n"; $i--; } ?> ************************** *** break/continue test *** 2) { break; } $j=0; echo "\$j should go from 3 to 4, and \$q should go from 3 to 4\n"; while ($j<5) { if ($j<=2) { $j++; continue; } echo " \$j=$j\n"; for ($q=0; $q<=10; $q++) { if ($q<3) { continue; } if ($q>4) { break; } echo " \$q=$q\n"; } $j++; } $j=0; echo "\$j should go from 0 to 2\n"; while ($j<5) { if ($j>2) { $k=0; echo "\$k should go from 0 to 2\n"; while ($k<5) { if ($k>2) { break 2; } echo " \$k=$k\n"; $k++; } } echo " \$j=$j\n"; $j++; } echo "\$i=$i\n"; $i++; } ?> *********************** *** Nested file include test *** ******************************** ================================================ FILE: Testing/Tests/@PHP/lang/025.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/lang/026.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/lang/027.php ================================================ [expect php] [file] 0); ?> ================================================ FILE: Testing/Tests/@PHP/lang/028.php ================================================ [expect php] [file] myname = "Dafna"; } function GetMyName() { return $this->myname; } function SetMyName($name) { $this->myname = $name; } }; for ($i=0; $i<200; $i++): print "$i\n"; call_user_func("dafna"); call_user_func("print_stuff","Hey there!!\n"); print "$i\n"; endfor; $dafna = new dafna_class(); print $name=call_user_func(array(&$dafna,"GetMyName")); print "\n"; ?> ================================================ FILE: Testing/Tests/@PHP/lang/030.php ================================================ [expect php] [file] Name = $name; $GLOBALS['List']->echoName(); } function echoName() { $GLOBALS['names'][]=$this->Name; } } function &foo2(&$foo) { return $foo; } $bar1 =new foo('constructor'); $bar1->Name = 'outside'; $bar1->echoName(); $List->echoName(); $bar1 =& foo2(new foo('constructor')); $bar1->Name = 'outside'; $bar1->echoName(); $List->echoName(); print ($names==array('constructor','outside','outside','constructor','outside','outside')) ? 'success':'failure'; ?> ================================================ FILE: Testing/Tests/@PHP/lang/031.php.notest ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/lang/032.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/lang/036.php ================================================ [expect php] [file] id; } }; class chld extends par { public $id = "bar"; function displayHim() { parent::displayMe(); } }; $obj = new chld(); $obj->displayHim(); ?> ================================================ FILE: Testing/Tests/@PHP/lang/037.php ================================================ [expect php] [file] displayChild(); } }; class chld extends par { private $id = "bar"; function displayChild() { print $this->id; } }; $obj = new chld(); $obj->displayMe(); ?> ================================================ FILE: Testing/Tests/@PHP/lang/038.php ================================================ [expect php] [file] file = $errfile; $this->line = $errline; } } function Error2Exception($errno, $errstr, $errfile, $errline) { throw new MyException($errstr, $errno);//, $errfile, $errline); } $err_msg = 'no exception'; set_error_handler('Error2Exception'); try { $con = fopen("/tmp/a_file_that_does_not_exist",'r'); } catch (Exception $e) { $trace = $e->getTrace(); echo ($trace[0]['function']),"\n"; echo ($trace[1]['function']),"\n"; } ?> ================================================ FILE: Testing/Tests/@PHP/lang/039.php ================================================ [expect php] [file] file = $errfile; $this->line = $errline; } } function Error2Exception($errno, $errstr, $errfile, $errline) { throw new MyException($errstr, $errno, $errfile, $errline); } $err_msg = 'no exception'; set_error_handler('Error2Exception'); try { $con = fopen('/tmp/a_file_that_does_not_exist','r'); } catch (Catchable $e) { echo "Catchable\n"; } catch (Exception $e) { echo "Exception\n"; } ?> ================================================ FILE: Testing/Tests/@PHP/lang/040.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/lang/Phalanger.inc ================================================ ================================================ FILE: Testing/Tests/@PHP/lang/bison1.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/lang/bug17115.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/lang/bug18872.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/lang/bug19566.php.notest ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/lang/bug19943.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/lang/bug20175.php ================================================ [expect php] [file] oop_name = 'oop:' . ++$oop_global; } } class oop_test { static $oop_value; function oop_test() { echo "oop_test()\n"; } function oop_static() { echo "oop_static()\n"; if (!isset(self::$oop_value)) { self::$oop_value = & new oop_class; } echo self::$oop_value->oop_name; } } print foo_static()."\n"; print foo_static()."\n"; print bar_static()."\n"; print bar_static()."\n"; //print wow_static()."\n"; //print wow_static()."\n"; echo "wow_static() wow_global() wow:1 wow_static() wow:1 "; $oop_tester = new oop_test; print $oop_tester->oop_static()."\n"; print $oop_tester->oop_static()."\n"; $oop_tester = new oop_test; // repeated. print $oop_tester->oop_static()."\n"; ?> ================================================ FILE: Testing/Tests/@PHP/lang/bug21094.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/lang/bug21600.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/lang/bug21669.php ================================================ [expect php] [file] name; /* Parse error */ return $obj; } } $factory = new Factory; $test = $factory->create(); $test->say_hello(); ?> ================================================ FILE: Testing/Tests/@PHP/lang/bug21820.php.notest ================================================ --TEST-- Bug #21820 ("$arr['foo']" generates bogus E_NOTICE, should be E_PARSE) --FILE-- 'bar'); echo "$arr['foo']"; ?> ================================================ FILE: Testing/Tests/@PHP/lang/bug21849.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/lang/bug21961.php ================================================ [expect php] [file] name = 'Mr. X'; $this->bars = array(); } function getdrunk($where) { $this->bars[] = new bar($where); } function getName() { return $this->name; } } class bar extends man { public $name; function bar($w) { $this->name = $w; } function getName() { return $this->name; } function whosdrunk() { $who = get_parent_class($this); if($who == NULL) { return 'nobody'; } return eval("return ".$who.'::getName();'); } } $x = new man; $x->getdrunk('The old Tavern'); __var_dump($x->bars[0]->whosdrunk()); ?> ================================================ FILE: Testing/Tests/@PHP/lang/bug22231.php ================================================ [expect php] [file] fubar); unset($bar); $bar = &foo(); __var_dump($bar->fubar); $foo = &foo(); __var_dump($foo); __var_dump($foo->fubar); unset($foo); $foo = &foo(); __var_dump($foo->fubar); ?> ================================================ FILE: Testing/Tests/@PHP/lang/bug22367.php ================================================ [expect php] [file] test)); return $this->test[$arg]; } function b() { @$this->c(); $zero = $this->test[0]; $one = $this->test[1]; $two = $this->test[2]; $three = $this->test[3]; $four = $this->test[4]; return array($zero, $one, $two, $three, $four); } function c() { return $this->a($this->d()); } function d() {} } class bar extends foo { public $i = 0; public $idx; function bar($idx) { $this->idx = $idx; } function &a($arg){ return parent::a($arg); } function d(){ return $this->idx; } } $a = new bar(5); __var_dump($a->idx); $a->c(); $b = $a->b(); __var_dump($b); __var_dump($a->test); $a = new bar(2); __var_dump($a->idx); @$a->c(); $b = $a->b(); __var_dump($b); __var_dump($a->test); ?> ================================================ FILE: Testing/Tests/@PHP/lang/bug22510.php ================================================ [expect php] [file] list; } function &method1() { print __CLASS__."::".__FUNCTION__."\n"; return @$this->foo; } function &method2() { print __CLASS__."::".__FUNCTION__."\n"; return $this->foo; } function method3() { print __CLASS__."::".__FUNCTION__."\n"; return @$this->foo; } } class bar { function run1() { print __CLASS__."::".__FUNCTION__."\n"; $this->instance = new foo(); $this->instance->method1($this); $this->instance->method1($this); } function run2() { print __CLASS__."::".__FUNCTION__."\n"; $this->instance = new foo(); $this->instance->method2($this); $this->instance->method2($this); } function run3() { print __CLASS__."::".__FUNCTION__."\n"; $this->instance = new foo(); $this->instance->method3($this); $this->instance->method3($this); } } function ouch(&$bar) { print __FUNCTION__."\n"; @$a = $a; $bar->run1(); } function ok1(&$bar) { print __FUNCTION__."\n"; $bar->run1(); } function ok2(&$bar) { print __FUNCTION__."\n"; @$a = $a; $bar->run2(); } function ok3(&$bar) { print __FUNCTION__."\n"; @$a = $a; $bar->run3(); } $bar = &new bar(); ok1($bar); $bar->instance->finalize(); print "done!\n"; ok2($bar); $bar->instance->finalize(); print "done!\n"; ok3($bar); $bar->instance->finalize(); print "done!\n"; ouch($bar); $bar->instance->finalize(); print "I'm alive!\n"; ?> ================================================ FILE: Testing/Tests/@PHP/lang/bug22592.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/lang/bug22690.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/lang/bug23279.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/lang/bug23384.php ================================================ [expect php] [file] 'ten'); static $arr = array(Foo::HUN => 'ten'); __var_dump($arr); __var_dump($arr2); __var_dump($x); } } @Foo::test(); echo Foo::HUN."\n"; ?> ================================================ FILE: Testing/Tests/@PHP/lang/bug23489.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/lang/bug23524.php ================================================ [expect php] [file] THE_CONST)) { __var_dump($a); } f(); f(); f(); echo "Done"; ?> ================================================ FILE: Testing/Tests/@PHP/lang/bug23584.php.notest ================================================ --TEST-- Bug #23584 (error line numbers off by one when using #!php) --FILE-- #!php --EXPECTREGEX-- Notice: Undefined variable:.*foo in .* on line 6 ================================================ FILE: Testing/Tests/@PHP/lang/bug23624.php.kb ================================================ [expect php] [file] $value); __var_dump(current($arr)); ?> ================================================ FILE: Testing/Tests/@PHP/lang/bug23922.php ================================================ [expect php] [file] foo == 1'); } function as_expr() { assert($this->foo == 1); } } $foo = new foo(); $foo->as_expr(); $foo->as_string(); ?> ================================================ FILE: Testing/Tests/@PHP/lang/bug24054.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/lang/bug24396.php ================================================ [expect php] [file] 1, 'b' => 2, 'c' => 3); foreach($arr as $k=>$v) { global $$k; // comment this out and it works in PHP 5 too.. echo "($k => $v)\n"; $$k = $v; } ?> ================================================ FILE: Testing/Tests/@PHP/lang/bug24403.php ================================================ [expect php] [file] a) ? '\'.\$p[\'\\1\'].\'' : '\'.\$r[\'\\1\'].\'')", "{a} b {c}"); } } new a(); ?> ================================================ FILE: Testing/Tests/@PHP/lang/bug24436.php ================================================ [expect php] [file] test[0][0])) { print "test1";} if (!isset($this->test[0][0])) { print "test2";} } } $test1 = new test(); ?> ================================================ FILE: Testing/Tests/@PHP/lang/bug24499.php ================================================ [expect php] [file] id = "bar"; } } $id = new Id(); @$obj->foo = "bar"; $id->tester($obj); __var_dump($obj); ?> ================================================ FILE: Testing/Tests/@PHP/lang/bug24573.php.notest ================================================ --TEST-- Bug #24573 (debug_backtrace() crashes if $this is set to null) --FILE-- Bar(); echo "OK\n"; ?> --EXPECTF-- Fatal error: Cannot re-assign $this in %s on line %d ================================================ FILE: Testing/Tests/@PHP/lang/bug24640.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/lang/bug24652.php ================================================ [expect php] [file] 0); __var_dump($f); __var_dump(array_key_exists(7, $f)); __var_dump(array_key_exists('7', $f)); print "----------\n"; /* This doesn't */ $f = array_flip(array('7')); __var_dump($f); __var_dump(array_key_exists(7, $f)); __var_dump(array_key_exists('7', $f)); ?> ================================================ FILE: Testing/Tests/@PHP/lang/bug24658.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/lang/bug24783.php ================================================ [expect php] [file] "foo\0bar"); foreach ($arr as $key => $val) { echo strlen($key), ': '; echo urlencode($key), ' => ', urlencode($val), "\n"; } ?> ================================================ FILE: Testing/Tests/@PHP/lang/bug24908.php.notest ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/lang/bug24926.php ================================================ [expect php] [file] functions['test'] = $function; print($this->functions['test']()); // werkt al niet meer } } $a = new foo (); ?> ================================================ FILE: Testing/Tests/@PHP/lang/bug24951.php.kb ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/lang/bug25145.php.notest ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/lang/bug25547.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/lang/bug25652.php ================================================ [expect php] [file] arr[0]('testvalue'); } } $a = new foo (); $a->bar (); ?> ================================================ FILE: Testing/Tests/@PHP/lang/bug25922.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/lang/bug26182.php ================================================ [expect php] [file] x)) { //just for demo } } } $t = new A (); __var_dump($t); ?> ================================================ FILE: Testing/Tests/@PHP/lang/bug26696.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/lang/bug26866.php ================================================ [expect php] [file] bar->get_name(); } catch (Exception $E) { echo "Exception raised!\n"; } ?> ================================================ FILE: Testing/Tests/@PHP/lang/bug26869.php ================================================ [expect php] [file] 1); __var_dump($a); __var_dump(isset($a[A])); ?> ================================================ FILE: Testing/Tests/@PHP/lang/bug27354.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/lang/bug27439.php ================================================ [expect php] [file] object = new test_props; } public function getArray() { return $this->array; } public function getString() { return $this->string; } public function case1() { foreach ($this->array as $foo) { echo $foo; } } public function case2() { foreach ($this->foobar as $foo); } public function case3() { foreach ($this->string as $foo); } public function case4() { foreach ($this->getArray() as $foo); } public function case5() { foreach ($this->getString() as $foo); } public function case6() { foreach ($this->object as $foo) { echo $foo; } } } $test = new test(); $test->case1(); $test->case2(); $test->case3(); $test->case4(); $test->case5(); $test->case6(); echo "\n"; echo "===DONE==="; ?> ================================================ FILE: Testing/Tests/@PHP/lang/bug27443.php.notest ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/lang/bug27535.php ================================================ [expect php] [file] storage = new Class1(); $this->storage->_Class2_obj = $this; } } $foo = new Class2(); ?> ================================================ FILE: Testing/Tests/@PHP/lang/bug28213.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/lang/bug28800.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/lang/bug29566.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/lang/bug29893.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/lang/bug29944.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/lang/bug30578.php.kb ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/lang/bug30638.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/lang/bug30726.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/lang/bug30862.php ================================================ [expect php] [file] "false", true=>"true"); } __var_dump(T::$a); define("X",0); define("Y",1); class T2 { static $a = array(X=>"false", Y=>"true"); } __var_dump(T2::$a); ?> ================================================ FILE: Testing/Tests/@PHP/lang/bug32828.php.kb ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/lang/bug32924.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/lang/bug35176.php.notest ================================================ --TEST-- Bug #35176 (include()/require()/*_once() produce wrong error messages about main()) --INI-- html_errors=1 error_reporting=4095 --FILE-- --EXPECTF--
    Warning: require_once(nonexisiting.php) [function.require-once.html]: failed to open stream: No such file or directory in %sbug35176.php on line 2

    Fatal error: require_once() [function.require.html]: Failed opening required 'nonexisiting.php' (%s) in %sbug35176.php on line 2
    ================================================ FILE: Testing/Tests/@PHP/lang/bug35382.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/lang/bug7515.php ================================================ [expect php] [file] root=new obj(); ob_start(); __var_dump($o); $x=ob_get_contents(); ob_end_clean(); $o->root->method(); ob_start(); __var_dump($o); $y=ob_get_contents(); ob_end_clean(); if ($x == $y) { print "success"; } else { print "failure x=$x y=$y "; } ?> ================================================ FILE: Testing/Tests/@PHP/lang/each_binary_safety.php ================================================ [expect php] [file] "foo\0bar"); while (list($key, $val) = each($arr)) { echo strlen($key), ': '; echo urlencode($key), ' => ', urlencode($val), "\n"; } ?> ================================================ FILE: Testing/Tests/@PHP/lang/error_2_exception_001.php ================================================ [expect php] [file] errno = $_errno; $this->errmsg = $_errmsg; } function getErrno() { return $this->errno; } function getErrmsg() { return $this->errmsg; } } function ErrorsToExceptions($errno, $errmsg) { throw new MyException($errno, $errmsg); } set_error_handler("ErrorsToExceptions"); // make sure it isn't catching exceptions that weren't // thrown... try { } catch (MyException $exception) { echo "There was an exception: " . $exception->getErrno() . ", '" . $exception->getErrmsg() . "'\n"; } try { trigger_error("I will become an exception", E_USER_ERROR); } catch (MyException $exception) { echo "There was an exception: " . $exception->getErrno() . ", '" . $exception->getErrmsg() . "'\n"; } ?> ================================================ FILE: Testing/Tests/@PHP/lang/foreach_with_object_001.php ================================================ [expect php] [file] c()->a as $value) { print "$value\n"; } ?> ================================================ FILE: Testing/Tests/@PHP/lang/foreach_with_references_001.php ================================================ [expect php] [file] "one", 2 => "two", 3 => "three"); foreach($arr as $key => $val) { $val = $key; } foreach($arr as $key => $val) echo "$key => $val\n"; foreach($arr as $key => &$val) { $val = $key; } foreach($arr as $key => $val) echo "$key => $val\n"; ?> ================================================ FILE: Testing/Tests/@PHP/lang/inc.inc ================================================ ================================================ FILE: Testing/Tests/@PHP/lang/type_hints_001.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/new/Phalanger.inc ================================================ ================================================ FILE: Testing/Tests/@PHP/new/phpt2php.cmd ================================================ rename *.phpt *.php ================================================ FILE: Testing/Tests/@PHP/standard/Phalanger.inc ================================================ ================================================ FILE: Testing/Tests/@PHP/standard/array/001.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/array/002.php.notest ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/array/003.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/array/004.php ================================================ [expect php] [file] 0, 5=>'test2', 'abc'=>'test10', 'test21' ); __var_dump($data); natsort($data); __var_dump($data); natcasesort($data); __var_dump($data); ?> ================================================ FILE: Testing/Tests/@PHP/standard/array/005.php ================================================ [expect php] [file] "foo", "4" => "bar", "5" => "fubar"); $c = array("a" => "foo", "b" => "bar", "c" => "fubar"); /* simple array */ echo array_shift($a), "\n"; __var_dump($a); /* numerical assoc indices */ echo array_shift($b), "\n"; __var_dump($b); /* assoc indices */ echo array_shift($c), "\n"; __var_dump($c); ?> ================================================ FILE: Testing/Tests/@PHP/standard/array/006.php.kb ================================================ [expect php] [file] "foo", "4" => "bar", "5" => "fubar"); $c = array("a" => "foo", "b" => "bar", "c" => "fubar"); /* simple array */ echo array_pop($a), "\n"; array_push($a, "foobar"); __var_dump($a); /* numerical assoc indices */ echo array_pop($b), "\n"; __var_dump($b); /* assoc indices */ echo array_pop($c), "\n"; __var_dump($c); // additional test by Phalanger: $a = array("a","b",100 => "x",200 => "c"); array_pop($a); $a[] = "1"; array_pop($a); $a[] = "2"; __var_dump($a); ?> ================================================ FILE: Testing/Tests/@PHP/standard/array/007.php.kb ================================================ [expect php] [file] 2,3,6,3,5,3,3,3,3,3,3,3,3,3,3); $b = array(2,2,3,3,3,3,3,3,3,3,3,3,3,3,3); $c = array(-1,1); echo '$a='.__var_dump($a,TRUE).";\n"; echo '$b='.__var_dump($b,TRUE).";\n"; echo '$c='.__var_dump($c,TRUE).";\n"; __var_dump(array_diff($a,$b,$c)); __var_dump(array_diff_assoc($a,$b,$c)); $a = array( 'a'=>2, 'b'=>'some', 'c'=>'done', 'z'=>'foo', 'f'=>5, 'fan'=>'fen', 7=>18, 9=>25, 11=>42, 12=>42, 45=>42, 73=>'foo', 95=>'some', 'som3'=>'some', 'want'=>'wanna'); $b = array( 'a'=>7, 7=>18, 9=>13, 11=>42, 45=>46, 'som3'=>'some', 'foo'=>'some', 'goo'=>'foo', 'f'=>5, 'z'=>'equal' ); $c = array( 73=>'foo', 95=>'some'); echo '$a='.__var_dump($a,TRUE).";\n"; echo '$b='.__var_dump($b,TRUE).";\n"; echo '$c='.__var_dump($c,TRUE).";\n"; echo "Results:\n\n"; __var_dump(array_diff($a,$b,$c)); __var_dump(array_diff_assoc($a,$b,$c)); echo "-=-=-=-=-=-=-=-=- New functionality from 5.0.0 -=-=-=-=-=-=-=-\n"; error_reporting(E_ALL); class cr { private $priv_member; public $public_member; function cr($val) { $this->priv_member = $val; $this->public_member = $val; } static function comp_func_cr($a, $b) { if ($a->priv_member === $b->priv_member) return 0; return ($a->priv_member > $b->priv_member)? 1:-1; } } function comp_func($a, $b) { if ($a === $b) return 0; return ($a > $b)? 1:-1; } function comp_func_cr($a, $b) { if ($a->public_member === $b->public_member) return 0; return ($a->public_member > $b->public_member)? 1:-1; } /* $a = array(1,"big"=>2,3,6,3,5,3,3,3,3,3,3,3,3,3,3); $b = array(2,2,3,3,3,3,3,3,3,3,3,3,3,3,3); $c = array(-1,1); echo '$a='.__var_dump($a,TRUE).";\n"; echo '$b='.__var_dump($b,TRUE).";\n"; echo '$c='.__var_dump($c,TRUE).";\n"; __var_dump(array_diff($a,$b,$c)); __var_dump(array_diff_assoc($a,$b,$c)); __var_dump(array_udiff($a, $b, $c, "comp_func")); __var_dump(array_diff_uassoc($a,$b,$c, "comp_func")); */ /* $a = array(new cr(9),new cr(12),new cr(23),new cr(4),new cr(-15),); $b = array(new cr(9),new cr(22),new cr( 3),new cr(4),new cr(-15),); __var_dump(array_udiff($a, $b, "comp_func_cr")); */ $a = array("0.1" => new cr(9), "0.5" => new cr(12), 0 => new cr(23), 1=> new cr(4), 2 => new cr(-15),); $b = array("0.2" => new cr(9), "0.5" => new cr(22), 0 => new cr( 3), 1=> new cr(4), 2 => new cr(-15),); echo '$a='.__var_dump($a,TRUE).";\n"; echo '$b='.__var_dump($b,TRUE).";\n"; echo '__var_dump(array_udiff_uassoc($a, $b, "comp_func_cr", "comp_func"));'."\n"; __var_dump(array_udiff_uassoc($a, $b, "comp_func_cr", "comp_func")); echo '$a='.__var_dump($a,TRUE).";\n"; echo '$b='.__var_dump($b,TRUE).";\n"; echo '__var_dump(array_udiff_uassoc($a, $b, array("cr", "comp_func_cr"), "comp_func"));'."\n"; __var_dump(array_udiff_uassoc($a, $b, array("cr", "comp_func_cr"), "comp_func")); echo '$a='.__var_dump($a,TRUE).";\n"; echo '$b='.__var_dump($b,TRUE).";\n"; echo '__var_dump(array_diff_assoc($a, $b));'."\n"; __var_dump(@array_diff_assoc($a, $b)); echo '$a='.__var_dump($a,TRUE).";\n"; echo '$b='.__var_dump($b,TRUE).";\n"; echo '__var_dump(array_udiff($a, $b, "comp_func_cr"));'."\n"; __var_dump(array_udiff($a, $b, "comp_func_cr")); echo '$a='.__var_dump($a,TRUE).";\n"; echo '$b='.__var_dump($b,TRUE).";\n"; echo '__var_dump(array_udiff_assoc($a, $b, "comp_func_cr"));'."\n"; __var_dump(array_udiff_assoc($a, $b, "comp_func_cr")); ?> ================================================ FILE: Testing/Tests/@PHP/standard/array/008.php ================================================ [expect php] [file] 2,2,6,3,5,3,3,454,'some_string',3,3,3,3,3,3,3,3,17); $b = array(2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,17,25,'some_string',7,8,9,109,78,17); $c = array(-1,2,1,15,25,17); echo str_repeat("-=",10)." TEST 1 ".str_repeat("-=",20)."\n"; echo '$a='.__var_dump($a,TRUE).";\n"; echo '$b='.__var_dump($b,TRUE).";\n"; echo '$c='.__var_dump($c,TRUE).";\n"; echo 'array_intersect($a,$b,$c);'."\n"; __var_dump(array_intersect($a,$b,$c)); echo 'array_intersect_assoc($a,$b,$c);'."\n"; __var_dump(array_intersect_assoc($a,$b,$c)); echo 'array_intersect($a,$b);'."\n"; __var_dump(array_intersect($a,$b)); echo 'array_intersect_assoc($a,$b);'."\n"; __var_dump(array_intersect_assoc($a,$b)); //-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-=- TEST 2 -=-=-=-=-=- $a = array( 'a'=>2, 'b'=>'some', 'c'=>'done', 'z'=>'foo', 'f'=>5, 'fan'=>'fen', 'bad'=>'bed', 'gate'=>'web', 7=>18, 9=>25, 11=>42, 12=>42, 45=>42, 73=>'foo', 95=>'some', 'som3'=>'some', 'want'=>'wanna'); $b = array( 'a'=>7, 7=>18, 9=>13, 11=>42, 45=>46, 'som3'=>'some', 'foo'=>'some', 'goo'=>'foo', 'f'=>5, 'z'=>'equal', 'gate'=>'web' ); $c = array( 'gate'=>'web', 73=>'foo', 95=>'some' ); echo str_repeat("-=",10)." TEST 2 ".str_repeat("-=",20)."\n"; echo '$a='.__var_dump($a,TRUE).";\n"; echo '$b='.__var_dump($b,TRUE).";\n"; echo '$c='.__var_dump($c,TRUE).";\n"; echo "\n\nResults:\n\n"; echo 'array_intersect($a,$b,$c);'."\n"; __var_dump(array_intersect($a,$b,$c)); echo 'array_intersect_assoc($a,$b,$c);'."\n"; __var_dump(array_intersect_assoc($a,$b,$c)); echo 'array_intersect($a,$b);'."\n"; __var_dump(array_intersect($a,$b)); echo 'array_intersect_assoc($a,$b);'."\n"; __var_dump(array_intersect_assoc($a,$b)); ?> ================================================ FILE: Testing/Tests/@PHP/standard/array/Phalanger.inc ================================================ ================================================ FILE: Testing/Tests/@PHP/standard/array/array_change_key_case.php ================================================ [expect php] [file] 1), array ("a" => 1), array ("Z" => 1), array ("one" => 1), array ("ONE" => 1), array ("OnE" => 1), array ("oNe" => 1), array ("one" => 1, "two" => 2), array ("ONE" => 1, "two" => 2), array ("OnE" => 1, "two" => 2), array ("oNe" => 1, "two" => 2), array ("one" => 1, "TWO" => 2), array ("ONE" => 1, "TWO" => 2), array ("OnE" => 1, "TWO" => 2), array ("oNe" => 1, "TWO" => 2), array ("one" => 1, "TwO" => 2), array ("ONE" => 1, "TwO" => 2), array ("OnE" => 1, "TwO" => 2), array ("oNe" => 1, "TwO" => 2), array ("one" => 1, "tWo" => 2), array ("ONE" => 1, "tWo" => 2), array ("OnE" => 1, "tWo" => 2), array ("oNe" => 1, "tWo" => 2), array ("one" => 1, 2), array ("ONE" => 1, 2), array ("OnE" => 1, 2), array ("oNe" => 1, 2), array ("ONE" => 1, "TWO" => 2, "THREE" => 3, "FOUR" => "four"), array ("one" => 1, "two" => 2, "three" => 3, "four" => "FOUR"), array ("ONE" => 1, "TWO" => 2, "three" => 3, "four" => "FOUR"), array ("one" => 1, "two" => 2, "THREE" => 3, "FOUR" => "four") ); foreach ($arrays as $item) { __var_dump(array_change_key_case($item)); __var_dump(array_change_key_case($item, CASE_UPPER)); __var_dump(array_change_key_case($item, CASE_LOWER)); echo "\n"; } echo "end\n"; ?> ================================================ FILE: Testing/Tests/@PHP/standard/array/array_chunk.php ================================================ [expect php] [file] 0), array (2 => 1), array (3 => -1), array (1 => 0, 2 => 2), array (1 => 1, 2 => 2, 3 => 3), array (0 => 0, 3 => 2), array (1 => 1, 5 => 2, 8 => 3), array (1, 2), array (0, 1, 2), array (1, 2, 3), array (0, 1, 2, 3), array (1, 2, 3, 4), array (0, 1, 2, 3, 4), array (1, 2, 3, 4, 5, 6, 7, 8, 9, 10), array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10), array ("a" => 1), array ("b" => 1, "c" => 2), array ("p" => 1, "q" => 2, "r" => 3, "s" => 4, "u" => 5, "v" => 6), array ("a" => "A"), array ("p" => "A", "q" => "B", "r" => "C", "s" => "D", "u" => "E", "v" => "F"), ); foreach ($arrays as $item) { echo "===========================================\n"; __var_dump ($item); echo "-------------------------------------------\n"; for ($i = 0; $i < (sizeof($item) + 1); $i++) { echo "[$i]\n"; __var_dump (@array_chunk ($item, $i)); __var_dump (@array_chunk ($item, $i, TRUE)); __var_dump (@array_chunk ($item, $i, FALSE)); echo "\n"; } echo "\n"; } echo "end\n"; ?> ================================================ FILE: Testing/Tests/@PHP/standard/array/array_count_values.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/array/array_diff_1.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/array/array_diff_key.php ================================================ [expect php] [file] &$a_f_el) { $a_f_el =$k*2;} foreach ($b_f as $k=> &$b_f_el) { $b_f_el =$k*2;} foreach ($c_f as $k=> &$c_f_el) { $c_f_el =$k*2;} foreach ($d_f as $k=> &$d_f_el) { $d_f_el =$k*2;} echo "------ Test $i --------\n";$i++;// 1 var_dump(array_diff_key($a_f, $b_f));// keys -> 1, 6, 15, 1200 var_dump(array_diff_ukey($a_f, $b_f, "comp_func"));// 1, 6, 15, 1200 echo "------ Test $i --------\n";$i++;// 2 var_dump(array_diff_key($a_f, $c_f));// keys -> 1, 15, 1200 var_dump(array_diff_ukey($a_f, $c_f, "comp_func"));// 1, 15, 1200 echo "------ Test $i --------\n";$i++;// 3 var_dump(array_diff_key($a_f, $d_f));// 1, 6, 2, 15, 1200, -2500 var_dump(array_diff_ukey($a_f, $d_f, "comp_func"));// 1, 6, 2, 15, 1200, -2500 echo "------ Test $i --------\n";$i++;// 4 var_dump(array_diff_key($a_f, $b_f, $c_f));// 1, 15, 1200 var_dump(array_diff_ukey($a_f, $b_f, $c_f, "comp_func"));// 1, 15, 1200 echo "------ Test $i --------\n";$i++;// 5 var_dump(array_diff_key($a_f, $b_f, $d_f));// 1, 6, 15, 1200 var_dump(array_diff_ukey($a_f, $b_f, $d_f, "comp_func"));// 1, 6, 15, 1200 echo "------ Test $i --------\n";$i++;// 6 var_dump(array_diff_key($a_f, $b_f, $c_f, $d_f));// 1, 15, 1200 var_dump(array_diff_ukey($a_f, $b_f, $c_f, $d_f, "comp_func"));//1, 15, 1200 echo "------ Test $i --------\n";$i++;// 7 var_dump(array_diff_key($b_f, $c_f));// 7, 11, 1100 var_dump(array_diff_ukey($b_f, $c_f, "comp_func"));//7, 11, 1100 echo "------ Test $i --------\n";$i++;// 8 var_dump(array_diff_key($b_f, $d_f));//0, 7, 2, 11, 1100, -2500 var_dump(array_diff_ukey($b_f, $d_f, "comp_func"));//0, 7, 2, 11, 1100, -2500 echo "------ Test $i --------\n";$i++;// 9 var_dump(array_diff_key($b_f, $c_f, $d_f));// 7, 11, 1100 var_dump(array_diff_ukey($b_f, $c_f, $d_f, "comp_func"));// 7, 11, 1000 function comp_func($a, $b) { if ($a === $b) return 0; return ($a > $b)? 1:-1; } ?> ================================================ FILE: Testing/Tests/@PHP/standard/array/array_intersect_1.php.kb ================================================ [expect php] [file] priv_member = $val; $this->public_member = $val; } static function comp_func_cr($a, $b) { if ($a->priv_member === $b->priv_member) return 0; return ($a->priv_member > $b->priv_member)? 1:-1; } } function comp_func($a, $b) { if ($a === $b) return 0; return ($a > $b)? 1:-1; } function comp_func_cr($a, $b) { if ($a->public_member === $b->public_member) return 0; return ($a->public_member > $b->public_member)? 1:-1; } $a = array("0.1" => new cr(9), "0.5" => new cr(12), 0 => new cr(23), 1=> new cr(4), 2 => new cr(-15),); $b = array("0.2" => new cr(9), "0.5" => new cr(22), 0 => new cr( 3), 1=> new cr(4), 2 => new cr(-15),); /* array_intersect() */ echo "begin ------------ array_intersect() ----------------------------\n"; echo '$a='.var_export($a,TRUE).";\n"; echo '$b='.var_export($b,TRUE).";\n"; echo '__var_dump(array_intersect($a, $b);'."\n"; __var_dump(@array_intersect($a, $b)); echo "end ------------ array_intersect() ----------------------------\n"; /* array_uintersect() */ echo "begin ------------ array_uintersect() ---------------------------\n"; echo '$a='.var_export($a,TRUE).";\n"; echo '$b='.var_export($b,TRUE).";\n"; echo '__var_dump(array_uintersect($a, $b, "comp_func_cr"));'."\n"; __var_dump(array_uintersect($a, $b, "comp_func_cr")); echo "end ------------ array_uintersect() ---------------------------\n"; /* array_intersect_assoc() */ echo "begin ------------ array_intersect_assoc() ----------------------\n"; echo '$a='.var_export($a,TRUE).";\n"; echo '$b='.var_export($b,TRUE).";\n"; echo '__var_dump(array_intersect_assoc($a, $b));'."\n"; __var_dump(@array_intersect_assoc($a, $b)); echo "end ------------ array_intersect_assoc() ----------------------\n"; /* array_uintersect_assoc() */ echo "begin ------------ array_uintersect_assoc() ---------------------\n"; echo '$a='.var_export($a,TRUE).";\n"; echo '$b='.var_export($b,TRUE).";\n"; echo '__var_dump(array_uintersect_assoc($a, $b, "comp_func_cr"));'."\n"; __var_dump(array_uintersect_assoc($a, $b, "comp_func_cr")); echo "end ------------ array_uintersect_assoc() ---------------------\n"; /* array_intersect_uassoc() */ echo "begin ------------ array_intersect_uassoc() ---------------------\n"; echo '$a='.var_export($a,TRUE).";\n"; echo '$b='.var_export($b,TRUE).";\n"; echo '__var_dump(array_intersect_uassoc($a, $b, "comp_func"));'."\n"; __var_dump(@array_intersect_uassoc($a, $b, "comp_func")); echo "end ------------ array_intersect_uassoc() ---------------------\n"; /* array_uintersect_uassoc() - with ordinary function */ echo "begin ------------ array_uintersect_uassoc() with ordinary func -\n"; echo '$a='.var_export($a,TRUE).";\n"; echo '$b='.var_export($b,TRUE).";\n"; echo '__var_dump(array_uintersect_uassoc($a, $b, "comp_func_cr", "comp_func"));'."\n"; __var_dump(array_uintersect_uassoc($a, $b, "comp_func_cr", "comp_func")); echo "end ------------ array_uintersect_uassoc() with ordinary func -\n"; /* array_uintersect_uassoc() - by method call */ echo "begin ------------ array_uintersect_uassoc() with method --------\n"; echo '$a='.var_export($a,TRUE).";\n"; echo '$b='.var_export($b,TRUE).";\n"; echo '__var_dump(array_uintersect_uassoc($a, $b, array("cr", "comp_func_cr"), "comp_func"));'."\n"; __var_dump(array_uintersect_uassoc($a, $b, array("cr", "comp_func_cr"), "comp_func")); echo "end ------------ array_uintersect_uassoc() with method --------\n"; ?> ================================================ FILE: Testing/Tests/@PHP/standard/array/array_intersect_key.php ================================================ [expect php] [file] &$a_f_el) { $a_f_el =$k*2;} foreach ($b_f as $k=> &$b_f_el) { $b_f_el =$k*2;} foreach ($c_f as $k=> &$c_f_el) { $c_f_el =$k*2;} foreach ($d_f as $k=> &$d_f_el) { $d_f_el =$k*2;} __var_dump(array_intersect_key($a_f, $b_f));// keys -> 2, -20, -2500 __var_dump(array_intersect_ukey($a_f, $b_f, "comp_func"));// 2, 20, -2500 __var_dump(array_intersect_key($a_f, $c_f));// keys -> 6, 2, -20, -2500 __var_dump(array_intersect_ukey($a_f, $c_f, "comp_func"));// 6, 2, -20, -2500 __var_dump(array_intersect_key($a_f, $d_f));// -20 __var_dump(array_intersect_ukey($a_f, $d_f, "comp_func"));// -20 __var_dump(array_intersect_key($a_f, $b_f, $c_f));// 2, -20, -2500 __var_dump(array_intersect_ukey($a_f, $b_f, $c_f, "comp_func"));// 2, -20, -2500 __var_dump(array_intersect_key($a_f, $b_f, $d_f));// -20 __var_dump(array_intersect_ukey($a_f, $b_f, $d_f, "comp_func"));// -20 __var_dump(array_intersect_key($a_f, $b_f, $c_f, $d_f));// -20 __var_dump(array_intersect_ukey($a_f, $b_f, $c_f, $d_f, "comp_func"));//-20 __var_dump(array_intersect_key($b_f, $c_f));// 0, 2, -20, -2500 __var_dump(array_intersect_ukey($b_f, $c_f, "comp_func"));//0, 2, -20, 2500 __var_dump(array_intersect_key($b_f, $d_f));// -20 __var_dump(array_intersect_ukey($b_f, $d_f, "comp_func"));// -20 __var_dump(array_intersect_key($b_f, $c_f, $d_f));// -20 __var_dump(array_intersect_ukey($b_f, $c_f, $d_f, "comp_func"));// -20 echo "----- Now testing array_intersect() ------- \n"; __var_dump(array_intersect($a, $b_f)); __var_dump(array_uintersect($a, $b, "comp_func")); __var_dump(array_intersect($a, $b, $c)); __var_dump(array_uintersect($a, $b, $c, "comp_func")); __var_dump(array_intersect($a, $b, $c, $d)); __var_dump(array_uintersect($a, $b, $c, $d, "comp_func")); /////////////////////////////////////////////////////////////////////// function comp_func($a, $b) { if ($a === $b) return 0; return ($a > $b)? 1:-1; } ?> ================================================ FILE: Testing/Tests/@PHP/standard/array/array_sum.php ================================================ [expect] integer(500500) int64(5000050000) [file] ================================================ FILE: Testing/Tests/@PHP/standard/array/array_walk_recursive.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/array/bug12776.php ================================================ [expect php] [file] 'v'); array_walk($arr,'test'); print "First value: ".$globalArray[0]; print "\nDone\n"; ?> ================================================ FILE: Testing/Tests/@PHP/standard/array/bug14580.php ================================================ [expect php] [file] "foo\0bar"); $key = key($arr); echo strlen($key), ': '; echo urlencode($key), "\n"; ?> ================================================ FILE: Testing/Tests/@PHP/standard/array/bug20381.php ================================================ [expect php] [file] 1, 'a2' => array( 1, 2, 3 ), 'a3' => array( 'a' => array( 10, 20, 30 ), 'b' => 'b' ) ); $b = array( 'a1' => 2, 'a2' => array( 3, 4, 5 ), 'a3' => array( 'c' => 'cc', 'a' => array( 10, 40 ) ) ); var_dump($a); $r = array_merge_recursive( $a, $b ); var_dump($a,$b,$r); ?> ================================================ FILE: Testing/Tests/@PHP/standard/array/bug20865.php ================================================ [expect] bool(true) [file] ================================================ FILE: Testing/Tests/@PHP/standard/array/bug21182.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/array/bug21918.php ================================================ [expect php] [file] 'a', '-2'=>'b', 3=>'c', '4'=>'d', 5=>'e', '6001'=>'f', '07'=>'g'); foreach($a as $k => $v) { __var_dump($k); __var_dump($v); } echo "==Normal==\n"; $b = array(); $b[] = 'a'; foreach($b as $k => $v) { __var_dump($k); __var_dump($v); } echo "==Negative==\n"; $c = array('-2' => 'a'); foreach($c as $k => $v) { __var_dump($k); __var_dump($v); } echo "==Done==\n"; ?> ================================================ FILE: Testing/Tests/@PHP/standard/array/bug21998.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/array/bug22088.php ================================================ [expect php] [file] 1, 'b' => 2, 'c' => 3); $last = array_shift ($a); $a[] = 'a'; __var_dump($a); ?> ================================================ FILE: Testing/Tests/@PHP/standard/array/bug22463.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/array/bug23581.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/array/bug23788.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/array/bug24198.php ================================================ [expect php] [file] 'aa','b' => 'bb'); var_dump(array_merge_recursive($c, $c)); ?> ================================================ FILE: Testing/Tests/@PHP/standard/array/bug24220.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/array/bug24766.php ================================================ [expect php] [file] 18, 2 => 52); $k = array_keys($a); $l = array_keys($b); $i=$k[0]; __var_dump($a[$i]); $i=$l[0]; __var_dump($b[$i]); ?> ================================================ FILE: Testing/Tests/@PHP/standard/array/bug24897.php ================================================ [expect php] [file] 2); shuffle($a); __var_dump($a); $a = array(1 => 2); array_multisort($a); __var_dump($a); ?> ================================================ FILE: Testing/Tests/@PHP/standard/array/bug24980.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/array/bug25359.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/array/bug25708.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/array/bug25758.php ================================================ [expect php] [file] array("quote'")); echo __var_dump($a, true); ?> ================================================ FILE: Testing/Tests/@PHP/standard/array/bug26458.php ================================================ [expect php] [file] "Hello world"); __var_dump($test); ?> ================================================ FILE: Testing/Tests/@PHP/standard/array/bug28739.php.kb ================================================ [expect php] [file] x=$x;} } function a(&$a, &$b){__var_dump(__FUNCTION__);return $a->x - $b->x;} function b(&$a, &$b){__var_dump(__FUNCTION__);return $a->x - $b->x;} $p1 = array(new p(2), new p(1), new p(0)); $p2 = array(new p(0), new p(2), new p(3)); uasort($p1, 'a'); __var_dump($p1); echo "Now diffing:\n"; __var_dump(array_udiff($p1,$p2, 'b')); ?> ================================================ FILE: Testing/Tests/@PHP/standard/array/bug28974.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/array/bug29253.php.kb ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/array/bug29493.php ================================================ [expect php] [file] 'aaa'); // refcount($a) = 1 // refcount($a['foo']) = 1 $b = $a; // refcount($a) = 2 // refcount($a['foo']) = 1 $b['foo'] = 'bbb'; // refcount($a) = 1 // refcount($a['foo']) = 1 __var_dump($a, $b); extract($a, EXTR_REFS); $foo = 'noo'; __var_dump($a, $b); } function t2() { $a = array('foo' => 'aaa'); // refcount($a) = 1 // refcount($a['foo']) = 1 $b = &$a; // refcount($a) = 2 // is_ref($a) = true // refcount($a['foo']) = 1 $b['foo'] = 'bbb'; // refcount($a) = 2 // refcount($a['foo']) = 1 __var_dump($a, $b); extract($a, EXTR_REFS); $foo = 'noo'; __var_dump($a, $b); } function t3() { $a = array('foo' => 'aaa'); // refcount($a) = 1 // refcount($a['foo']) = 1 $b = &$a; // refcount($a) = 2 // is_ref($a) = true // refcount($a['foo']) = 1 unset($b); // refcount($a) = 1 // is_ref($a) = true // refcount($a['foo']) = 1 __var_dump($a); extract($a, EXTR_REFS); $foo = 'noo'; __var_dump($a); } t1(); t2(); t3(); ?> ================================================ FILE: Testing/Tests/@PHP/standard/array/bug30266.php ================================================ [expect php] [file] b = $val; throw new Exception("Error"); } } $fruits = array ("d"=>"lemon", "a"=>"orange", "b"=>"banana", "c"=>"apple"); $myobj = new testc(); function test($item2, $key, $userd) { $userd->crash($item2); } try { array_walk($fruits, 'test', $myobj); } catch(Exception $e) { echo "Caught: " . $e->getMessage() . "\n"; } ?> ================================================ FILE: Testing/Tests/@PHP/standard/array/bug30833.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/array/bug31158.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/array/bug31213.php ================================================ [expects] integer(1) integer(1) integer(1) integer(2) integer(2) integer(2) array { ['_a'] => &integer(2) ['_b'] => &integer(2) } integer(1) integer(1) integer(1) integer(2) integer(2) integer(2) array { ['_a'] => &integer(2) ['_b'] => &integer(2) } [file] $a, '_b' => &$b ); var_dump($a, $b); if ($use_extract) { extract($arr, EXTR_REFS); } else { $_a = &$arr['_a']; $_b = &$arr['_b']; } $_a++; $_b++; var_dump($a, $b, $_a, $_b, $arr); } test(false); test(true); ?> ================================================ FILE: Testing/Tests/@PHP/standard/array/bug32021.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/array/bug33382.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/array/bug33940.php.kb ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/array/bug33989.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/array/bug34227.php ================================================ [expect php] [file] m2(); } function m2() { $this->m3(); } function m3() { $this->m4(); } function m4() { $this->m5(); } function m5() { $this->m6(); } function m6() { $this->m7(); } function m7() { $this->m8(); } function m8() { $this->m9(); } function m9() { $this->m10(); } function m10() { $this->m11(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); } function m11($a1, $a2, $a3, $a4, $a5, $a6, $a7, $a8, $a9, $a10) { $arr = explode('a', 'b'); } } function f($str) { $obj = new C; $obj->m1(); return TRUE; } function p5($a1, $a2, $a3, $a4, $a5, $a6, $a7, $a8, $a9, $a10, $a11, $a12) { $ret = array_filter(array(0), 'f'); } function p4() { p5(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12); } function p3() { p4(); } function p2() { p3(); } function p1() { p2(); } p1(); echo "ok\n"; ?> ================================================ FILE: Testing/Tests/@PHP/standard/array/bug34982.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/array/bug35014.php ================================================ [expect] integer(0) integer(0) integer(3) integer(9) double(1.0000000000) int64(9999999800000001) int64(8589934590) [file] ================================================ FILE: Testing/Tests/@PHP/standard/array/bug35022.php ================================================ [expect php] [file] 1, "two" => 2, "three" => 3); function foo( &$state ) { $contentDict = end( $state ); for ( $contentDict = end( $state ); $contentDict !== false; $contentDict = prev( $state ) ) { echo key($state) . " => " . current($state) . "\n"; } } foo($state); reset($state); __var_dump( key($state), current($state) ); ?> ================================================ FILE: Testing/Tests/@PHP/standard/array/bug35821.php ================================================ [expect php] [file] ThrowException(); } } $arr = array(new Element(), new Element(), new Element()); try { @array_map(array('Element', 'CallBack'), $arr); } catch (Exception $e) { } echo "Done\n"; ?> ================================================ FILE: Testing/Tests/@PHP/standard/array/count_recursive.php ================================================ [expect php] [file] 1, "b" => 2, array("c" => 3, array("d" => 5))); print "COUNT_NORMAL: should be 3, is ".count($arr, COUNT_NORMAL)."\n"; print "COUNT_RECURSIVE: should be 6, is ".count($arr, COUNT_RECURSIVE)."\n"; print "Testing strings...\n"; print "COUNT_NORMAL: should be 1, is ".count("string", COUNT_NORMAL)."\n"; print "COUNT_RECURSIVE: should be 1, is ".count("string", COUNT_RECURSIVE)."\n"; print "Testing various types with no second argument.\n"; print "COUNT_NORMAL: should be 1, is ".count("string")."\n"; print "COUNT_NORMAL: should be 2, is ".count(array("a", array("b")))."\n"; $arr = array('a'=>array(NULL, NULL, NULL), 1=>array(NULL=>1, 1=>NULL), array(array(array(array(array(NULL)))))); print "Testing really cool arrays ;)\n"; print "COUNT_NORMAL: should be 3, is ".count($arr, COUNT_NORMAL)."\n"; print "COUNT_RECURSIVE: should be 13, is ".count($arr, COUNT_RECURSIVE)."\n"; ?> ================================================ FILE: Testing/Tests/@PHP/standard/array/data.inc ================================================ 'PHP: Hypertext Preprocessor', 5=>'Test', 'test'=>27, 1000=>'test', "-1000"=>array('banana', 'orange'), 'monkey', $tmp=>-1/3 ); ?> ================================================ FILE: Testing/Tests/@PHP/standard/array/locale_sort.php ================================================ [expect php] [file] "Alberta", "BC" => "Colombie-Britannique", "MB" => "Manitoba", "NB" => "Nouveau-Brunswick", "NL" => "Terre-Neuve-et-Labrador", "NS" => "Nouvelle-cosse", "ON" => "Ontario", "PE" => "le-du-Prince-douard", "QC" => "Qubec", "SK" => "Saskatchewan", "NT" => "Territoires du Nord-Ouest", "NU" => "Nunavut", "YT" => "Territoire du Yukon"); asort($table, SORT_LOCALE_STRING); __var_dump($table); ?> ================================================ FILE: Testing/Tests/@PHP/standard/array/range.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/assert/Phalanger.inc ================================================ ================================================ FILE: Testing/Tests/@PHP/standard/assert/assert.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/general_functions/001.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/general_functions/002.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/general_functions/003.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/general_functions/004.data ================================================ name value comment true 1 boolean true false 0 boolean false empty nothing ================================================ FILE: Testing/Tests/@PHP/standard/general_functions/004.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/general_functions/005.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/general_functions/006.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/general_functions/007.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/general_functions/008.php.notest ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/general_functions/009.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/general_functions/Phalanger.inc ================================================ ================================================ FILE: Testing/Tests/@PHP/standard/general_functions/bug25038.php ================================================ [expect php] [file] getMessage()."\n"; } try { call_user_func('bar','second try'); } catch (Exception $e) { print $e->getMessage()."\n"; } ?> ================================================ FILE: Testing/Tests/@PHP/standard/general_functions/bug27678.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/general_functions/bug29038.php ================================================ [expect php] [file] 1),EXTR_PREFIX_SAME,"prefix"); echo "Extracted:"; __var_dump($c); __var_dump(get_defined_vars()); } function f2() { $a = 1; $c = extract(array("a" => 1),EXTR_PREFIX_SAME,"prefix"); echo "Extracted:"; __var_dump($c); __var_dump(get_defined_vars()); } function f3() { $a = 1; $c = extract(array("a" => 1),EXTR_PREFIX_ALL,"prefix"); echo "Extracted:"; __var_dump($c); __var_dump(get_defined_vars()); } function f4() { $c = extract(array("" => 1),EXTR_PREFIX_ALL,"prefix"); echo "Extracted:"; __var_dump($c); __var_dump(get_defined_vars()); } function f5() { $c = extract(array("111" => 1),EXTR_PREFIX_ALL,"prefix"); echo "Extracted:"; __var_dump($c); __var_dump(get_defined_vars()); } f1(); f2(); f3(); f4(); f5(); ?> ================================================ FILE: Testing/Tests/@PHP/standard/general_functions/bug31190.php ================================================ [expect php] [file] getMessage(); } try { call_user_func_array($array, array(1, 2)); } catch (Exception $e) { echo $e->getMessage(); } ?> ================================================ FILE: Testing/Tests/@PHP/standard/general_functions/bug32647.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/general_functions/bug35229.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/general_functions/getopt.php.kb ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/general_functions/highlight_heredoc.php.notest ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/general_functions/is_resource.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/general_functions/proc_open.php.notest ================================================ [expect php] [file] array("pipe", "r"), 1 => array("pipe", "w"), 2 => array("pipe", "w") ); $cat = proc_open( "/bin/cat", $ds, $pipes ); proc_close($cat); echo "I didn't segfault!\n"; ?> ================================================ FILE: Testing/Tests/@PHP/standard/general_functions/sunfuncts.php.kb ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/math/Phalanger.inc ================================================ ================================================ FILE: Testing/Tests/@PHP/standard/math/abs.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/math/bug21523.php.notest ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/math/bug24142.php ================================================ [expect php] [file] ".round($v, 2)."\n"; $v += 0.01; } ?> ================================================ FILE: Testing/Tests/@PHP/standard/math/bug25665.php.notest ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/math/bug25694.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/math/bug27646.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/math/bug28228.php.notest ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/math/bug30069.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/math/bug30695.php ================================================ [expect php] [file] > 6) & 0x1f)) . chr(0x80 | ($char_code & 0x3f)) ); break; case !($char_code & 0xffff0000): // 16 bit $char = ( chr(0xe0 | (($char_code >> 12) & 0x0f)) . chr(0x80 | (($char_code >> 6) & 0x3f)) . chr(0x80 | ($char_code & 0x3f)) ); break; case !($char_code & 0xffe00000): // 21 bit $char = ( chr(0xf0 | (($char_code >> 18) & 0x07)) . chr(0x80 | (($char_code >> 12) & 0x3f)) . chr(0x80 | (($char_code >> 6) & 0x3f)) . chr(0x80 | ($char_code & 0x3f)) ); break; case !($char_code & 0xfc000000): // 26 bit $char = ( chr(0xf8 | (($char_code >> 24) & 0x03)) . chr(0x80 | (($char_code >> 18) & 0x3f)) . chr(0x80 | (($char_code >> 12) & 0x3f)) . chr(0x80 | (($char_code >> 6) & 0x3f)) . chr(0x80 | ($char_code & 0x3f)) ); default: // 31 bit $char = ( chr(0xfc | (($char_code >> 30) & 0x01)) . chr(0x80 | (($char_code >> 24) & 0x3f)) . chr(0x80 | (($char_code >> 18) & 0x3f)) . chr(0x80 | (($char_code >> 12) & 0x3f)) . chr(0x80 | (($char_code >> 6) & 0x3f)) . chr(0x80 | ($char_code & 0x3f)) ); } return $char; } echo bin2hex(toUTF8(65)),"\n"; echo bin2hex(toUTF8(233)),"\n"; echo bin2hex(toUTF8(1252)), "\n"; echo bin2hex(toUTF8(20095)), "\n"; ?> ================================================ FILE: Testing/Tests/@PHP/standard/math/floorceil.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/math/hexdec.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/math/log.php ================================================ [expect php] [file] ($x - 2))) { $count++; } else { print "$x : $x2\n"; } } print $count . "\n"; // Now test the base form of log for ($base = 2; $base < 11; $base++) { for ($x = 0, $count= 0; $x < 50; $x++) { $x2 = (int) pow($base, log($x, $base)); // base ^ log(x) should be close in range to x if (($x2 < ($x + 2)) && ($x2 > ($x - 2))) { $count++; } else { print "base $base: $x : $x2\n"; } } print $count . "\n"; } ?> ================================================ FILE: Testing/Tests/@PHP/standard/math/pow.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/math/quicktester.inc ================================================ $test) { // ignore empty lines if (!$test) continue; // warn for trailing ; if (substr(trim($test), -1, 1) === ';') { echo "WARNING: trailing ';' found in test ".($n+1)."\n"; exit; } // try for operators $operators = array('===', '~=='); $operator = NULL; foreach ($operators as $a_operator) { if (strpos($test, $a_operator)!== FALSE) { $operator = $a_operator; list($left,$right) = explode($operator, $test); break; } } if (!$operator) { echo "WARNING: unknown operator in '$test' (1)\n"; exit; } $left = eval("return ($left );"); $right = eval("return ($right);"); switch (@$operator) { case '===': // exact match $result = $left === $right; break; case '~==': // may differ after 12th significant number if ( !is_float($left ) && !is_long($left ) && !is_int($left ) // test long and int, because it is not the same type in Phalanger || !is_float($right) && !is_long($right) && !is_int($right)) { $result = FALSE; break; } $result = abs(($left-$right) / $left) < 1e-12; break; default: echo "WARNING: unknown operator in '$test' (2)\n"; exit; } $success = $success && $result; if (!$result) { echo "\nAssert failed:\n"; echo "$test\n"; echo "Left: ";__var_dump($left ); echo "Right: ";__var_dump($right); } } if ($success) echo "OK"; ================================================ FILE: Testing/Tests/@PHP/standard/math/round.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/network/Phalanger.inc ================================================ ================================================ FILE: Testing/Tests/@PHP/standard/network/bug20134.php.kb ================================================ [expect php] [file] \n"; } else { /* Likewise, writes will always appear to succeed */ $x = fwrite($fp,"\n"); echo $x,"\n"; /* But reads should always fail */ $content = fread($fp, 40); echo($content),"\n"; fclose($fp); } ?> ================================================ FILE: Testing/Tests/@PHP/standard/network/tcp4loop.php.kb ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/network/tcp6loop.php.kb ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/network/udgloop.php.notest ================================================ --TEST-- Streams Based Unix Domain Datagram Loopback test --SKIPIF-- --FILE-- --EXPECT-- string(10) "ABCdef123 " ================================================ FILE: Testing/Tests/@PHP/standard/network/udp4loop.php.kb ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/network/udp6loop.php.kb ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/network/unixloop.php.notest ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/reg/001.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/reg/002.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/reg/003.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/reg/004.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/reg/005.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/reg/006.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/reg/007.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/reg/008.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/reg/009.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/reg/010.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/reg/011.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/reg/012.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/reg/013.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/reg/014.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/reg/015.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/reg/016.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/reg/Phalanger.inc ================================================ ================================================ FILE: Testing/Tests/@PHP/standard/serialize/001.php ================================================ [expect php] [file] a = "hallo"; } } class s { public $a; public $b; public $c; function s() { $this->a = "hallo"; $this->b = "php"; $this->c = "world"; $this->d = "!"; } function __sleep() { echo "__sleep called\n"; return array("a","c"); } function __wakeup() { echo "__wakeup called\n"; } } echo serialize(NULL)."\n"; echo serialize((bool) true)."\n"; echo serialize((bool) false)."\n"; echo serialize(1)."\n"; echo serialize(0)."\n"; echo serialize(-1)."\n"; echo serialize(2147483647)."\n"; echo serialize(-2147483647)."\n"; // bug? too many decimals: echo serialize(1.123456789)."\n"; echo serialize(1.0)."\n"; echo serialize(0.0)."\n"; echo serialize(-1.0)."\n"; // bug? too many decimals:echo serialize(-1.123456789)."\n"; echo serialize("hallo")."\n"; echo serialize(array(1,/*bug?: 1.1,*/"hallo",NULL,true,array()))."\n"; $t = new t(); $data = serialize($t); echo "$data\n"; $t = unserialize($data); __var_dump($t); $t = new s(); $data = serialize($t); echo "$data\n"; $t = unserialize($data); __var_dump($t); $a = array("a" => "test"); $a[ "b" ] = &$a[ "a" ]; __var_dump($a); $data = serialize($a); echo "$data\n"; $a = unserialize($data); __var_dump($a); ?> ================================================ FILE: Testing/Tests/@PHP/standard/serialize/002.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/serialize/003.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/serialize/004.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/serialize/005.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/serialize/006.php ================================================ [expect php] [file] ''); class { public $ = ''; } $foo = new (); __var_dump(serialize($foo)); __var_dump(unserialize(serialize($foo))); __var_dump(serialize($)); __var_dump(unserialize(serialize($))); ?> ================================================ FILE: Testing/Tests/@PHP/standard/serialize/Autoload.inc ================================================ ================================================ FILE: Testing/Tests/@PHP/standard/serialize/Phalanger.inc ================================================ ================================================ FILE: Testing/Tests/@PHP/standard/serialize/bug14293.php ================================================ [expect php] [file] a = 'hello'; } function __sleep() { echo "__sleep called\n"; return array('a','b'); } } $t = new t(); $data = serialize($t); echo "$data\n"; $t = unserialize($data); __var_dump($t); ?> ================================================ FILE: Testing/Tests/@PHP/standard/serialize/bug21957.php ================================================ [expect php] [file] a = 7; $this->b = 2; } function __sleep() { $this->b = 0; } } $t['one'] = 'ABC'; $t['two'] = new test(); __var_dump($t); $s = @serialize($t); echo $s . "\n"; __var_dump(unserialize($s)); ?> ================================================ FILE: Testing/Tests/@PHP/standard/serialize/bug23298.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/serialize/bug24063.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/serialize/bug25378.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/serialize/bug26762.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/serialize/bug27469.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/serialize/bug28325.php ================================================ [expect php] [file] b = new b(); $a->b->c = new c(); $a->b->c->d = $a; $s = serialize($a); echo $s === serialize(unserialize($s)) ? "OK" : "FAILED"; ?> ================================================ FILE: Testing/Tests/@PHP/standard/serialize/bug30234.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/serialize/bug31402.php ================================================ [expect php] [file] i = $i; } } class TestY { var $A = array(); var $B; function __construct() { $this->A[1] = new TestX(1); $this->A[2] = & new TestX(2); $this->A[3] = & $this->A[2]; $this->B = $this->A[1]; } } $before = new TestY(); $ser = serialize($before); $after = unserialize($ser); __var_dump($before, $after); ?> ================================================ FILE: Testing/Tests/@PHP/standard/serialize/bug31442.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/strings/004.php.notest ================================================ [expect php] [file] $v) print "$k: $v: " . sprintf('%0.3f', $v / $times) . "\n"; } $a = array(); $times = 90000; for ($i = 0; $i < $times; $i++) { $p = range(1,4); shuffle($p); $s = join('', $p); if (empty($a[$s])) $a[$s] = 0; $a[$s]++; } stats('shuffle', $a); $a = array(); $times = 90000; for ($i = 0; $i < $times; $i++) { $p = '1234'; $s = str_shuffle($p); if (empty($a[$s])) $a[$s] = 0; $a[$s]++; } stats('str_shuffle', $a); ?> --EXPECTREGEX-- shuffle 1234: 3[0-9][0-9][0-9]: 0.0[3-4][0-9] 1243: 3[0-9][0-9][0-9]: 0.0[3-4][0-9] 1324: 3[0-9][0-9][0-9]: 0.0[3-4][0-9] 1342: 3[0-9][0-9][0-9]: 0.0[3-4][0-9] 1423: 3[0-9][0-9][0-9]: 0.0[3-4][0-9] 1432: 3[0-9][0-9][0-9]: 0.0[3-4][0-9] 2134: 3[0-9][0-9][0-9]: 0.0[3-4][0-9] 2143: 3[0-9][0-9][0-9]: 0.0[3-4][0-9] 2314: 3[0-9][0-9][0-9]: 0.0[3-4][0-9] 2341: 3[0-9][0-9][0-9]: 0.0[3-4][0-9] 2413: 3[0-9][0-9][0-9]: 0.0[3-4][0-9] 2431: 3[0-9][0-9][0-9]: 0.0[3-4][0-9] 3124: 3[0-9][0-9][0-9]: 0.0[3-4][0-9] 3142: 3[0-9][0-9][0-9]: 0.0[3-4][0-9] 3214: 3[0-9][0-9][0-9]: 0.0[3-4][0-9] 3241: 3[0-9][0-9][0-9]: 0.0[3-4][0-9] 3412: 3[0-9][0-9][0-9]: 0.0[3-4][0-9] 3421: 3[0-9][0-9][0-9]: 0.0[3-4][0-9] 4123: 3[0-9][0-9][0-9]: 0.0[3-4][0-9] 4132: 3[0-9][0-9][0-9]: 0.0[3-4][0-9] 4213: 3[0-9][0-9][0-9]: 0.0[3-4][0-9] 4231: 3[0-9][0-9][0-9]: 0.0[3-4][0-9] 4312: 3[0-9][0-9][0-9]: 0.0[3-4][0-9] 4321: 3[0-9][0-9][0-9]: 0.0[3-4][0-9] str_shuffle 1234: 3[0-9][0-9][0-9]: 0.0[3-4][0-9] 1243: 3[0-9][0-9][0-9]: 0.0[3-4][0-9] 1324: 3[0-9][0-9][0-9]: 0.0[3-4][0-9] 1342: 3[0-9][0-9][0-9]: 0.0[3-4][0-9] 1423: 3[0-9][0-9][0-9]: 0.0[3-4][0-9] 1432: 3[0-9][0-9][0-9]: 0.0[3-4][0-9] 2134: 3[0-9][0-9][0-9]: 0.0[3-4][0-9] 2143: 3[0-9][0-9][0-9]: 0.0[3-4][0-9] 2314: 3[0-9][0-9][0-9]: 0.0[3-4][0-9] 2341: 3[0-9][0-9][0-9]: 0.0[3-4][0-9] 2413: 3[0-9][0-9][0-9]: 0.0[3-4][0-9] 2431: 3[0-9][0-9][0-9]: 0.0[3-4][0-9] 3124: 3[0-9][0-9][0-9]: 0.0[3-4][0-9] 3142: 3[0-9][0-9][0-9]: 0.0[3-4][0-9] 3214: 3[0-9][0-9][0-9]: 0.0[3-4][0-9] 3241: 3[0-9][0-9][0-9]: 0.0[3-4][0-9] 3412: 3[0-9][0-9][0-9]: 0.0[3-4][0-9] 3421: 3[0-9][0-9][0-9]: 0.0[3-4][0-9] 4123: 3[0-9][0-9][0-9]: 0.0[3-4][0-9] 4132: 3[0-9][0-9][0-9]: 0.0[3-4][0-9] 4213: 3[0-9][0-9][0-9]: 0.0[3-4][0-9] 4231: 3[0-9][0-9][0-9]: 0.0[3-4][0-9] 4312: 3[0-9][0-9][0-9]: 0.0[3-4][0-9] 4321: 3[0-9][0-9][0-9]: 0.0[3-4][0-9] ================================================ FILE: Testing/Tests/@PHP/standard/strings/Phalanger.inc ================================================ ================================================ FILE: Testing/Tests/@PHP/standard/strings/add-and-stripcslashes.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/strings/add-and-stripslashes.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/strings/basename.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/strings/bin2hex.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/strings/bug20108.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/strings/bug20169.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/strings/bug20261.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/strings/bug20927.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/strings/bug20934.php.notest ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/strings/bug21338.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/strings/bug21453.php ================================================ [expect php] [file] first cell before < first cell after second cell before < second cell after "; __var_dump(strip_tags($test)); ?> ================================================ FILE: Testing/Tests/@PHP/standard/strings/bug21730.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/strings/bug21744.php ================================================ [expect php] [file] test HERE; print strip_tags($test, ''); print strip_tags($test, ''); ?> ================================================ FILE: Testing/Tests/@PHP/standard/strings/bug22008.php ================================================ [expect php] [file] test PHP! HERE; echo trim(strip_tags($html, ''))."\n"; ?> ================================================ FILE: Testing/Tests/@PHP/standard/strings/bug22187.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/strings/bug22207.php.kb ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/strings/bug22224.php ================================================ [expect php] [file] &$a, 1=>&$a); @implode(",",$arr); __var_dump($arr) ?> ================================================ FILE: Testing/Tests/@PHP/standard/strings/bug22227.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/strings/bug22904.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/strings/bug23650.php ================================================ [expect php] [file] 2: 3: 4: 5:abc - def 6: HERE; echo strip_tags($str); echo strip_tags($str, ''); ?> ================================================ FILE: Testing/Tests/@PHP/standard/strings/bug23894.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/strings/bug24098.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/strings/bug24208.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/strings/bug24281.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/strings/bug24312.php.notest ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/strings/bug25671.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/strings/bug25707.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/strings/bug26817.php.kb ================================================ [expect php] [file] bar = 'meuh'; $this->foo = 'lala'; $this->test = 'test'; __var_dump(http_build_query($this)); } } $obj = new test(); $obj->foo(); __var_dump(http_build_query($obj)); ?> ================================================ FILE: Testing/Tests/@PHP/standard/strings/bug26819.php.kb ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/strings/bug26878.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/strings/bug26973.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/strings/bug27276.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/strings/bug27278.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/strings/bug27295.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/strings/bug27457.php ================================================ [expect php] [file] '0')); echo $test; $test = strtr($test, array('0' => '.')); echo $test; $test = strtr($test, '.', '0'); echo $test; $test = strtr($test, '0', '.'); echo $test; ?> ================================================ FILE: Testing/Tests/@PHP/standard/strings/bug27675.php ================================================ [expect php] [file] ', '', '/* I am a comment*/'); ?> ================================================ FILE: Testing/Tests/@PHP/standard/strings/bug28386.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/strings/bug33076.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/strings/chr_ord.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/strings/chunk_split.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/strings/count_chars.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/strings/crc32.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/strings/crypt.php.kb ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/strings/explode.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/strings/htmlentities.php.notest ================================================ --TEST-- HTML entities --INI-- output_handler= --FILE-- \"&\n"); echo $sc_encoded; $ent_encoded = htmlentities ("<>\"&\n"); echo $ent_encoded; echo html_entity_decode($sc_encoded); echo html_entity_decode($ent_encoded); ?> --EXPECT-- <>"& <>"&åÄ <>"& <>"& ================================================ FILE: Testing/Tests/@PHP/standard/strings/htmlentities01.php.notest ================================================ --TEST-- htmlentities() test 1 (cp1252) --INI-- output_handler= mbstring.internal_encoding=pass --FILE-- --EXPECT-- string(28) "‚†™Ÿ" string(32) "€¢£¤¥" ================================================ FILE: Testing/Tests/@PHP/standard/strings/htmlentities02.php.notest ================================================ --TEST-- htmlentities() test 2 (setlocale / fr_FR.ISO-8859-15) --SKIPIF-- --INI-- output_handler= default_charset= mbstring.internal_encoding=none --FILE-- --EXPECT-- string(20) "ŒœŸ" ================================================ FILE: Testing/Tests/@PHP/standard/strings/htmlentities03.php.notest ================================================ --TEST-- htmlentities() test 3 (setlocale / de_DE.ISO-8859-1) --SKIPIF-- --INI-- output_handler= default_charset= mbstring.internal_encoding=none --FILE-- --EXPECT-- string(18) "äöü" ================================================ FILE: Testing/Tests/@PHP/standard/strings/htmlentities04.php.notest ================================================ --TEST-- htmlentities() test 4 (setlocale / ja_JP.EUC-JP) --SKIPIF-- --INI-- output_handler= default_charset= mbstring.internal_encoding=none --FILE-- --EXPECT-- string(6) "" ================================================ FILE: Testing/Tests/@PHP/standard/strings/htmlentities05.php.notest ================================================ --TEST-- htmlentities() test 5 (mbstring / cp1252) --INI-- output_handler= --SKIPIF-- --FILE-- --EXPECT-- Windows-1252 string(28) "‚†™Ÿ" string(32) "€¢£¤¥" ================================================ FILE: Testing/Tests/@PHP/standard/strings/htmlentities06.php.notest ================================================ --TEST-- htmlentities() test 6 (mbstring / ISO-8859-15) --INI-- output_handler= --SKIPIF-- --FILE-- --EXPECT-- ISO-8859-15 string(20) "ŒœŸ" ================================================ FILE: Testing/Tests/@PHP/standard/strings/htmlentities07.php.notest ================================================ --TEST-- htmlentities() test 7 (mbstring / ISO-8859-1) --INI-- output_handler= --SKIPIF-- --FILE-- --EXPECT-- ISO-8859-1 string(18) "äöü" ================================================ FILE: Testing/Tests/@PHP/standard/strings/htmlentities08.php.notest ================================================ --TEST-- htmlentities() test 8 (mbstring / EUC-JP) --INI-- output_handler= --SKIPIF-- --FILE-- --EXPECT-- EUC-JP string(6) "" ================================================ FILE: Testing/Tests/@PHP/standard/strings/htmlentities09.php.notest ================================================ --TEST-- htmlentities() test 9 (mbstring / Shift_JIS) --INI-- output_handler= --SKIPIF-- --FILE-- --EXPECT-- SJIS string(6) "ABC" ================================================ FILE: Testing/Tests/@PHP/standard/strings/htmlentities10.php.notest ================================================ --TEST-- htmlentities() test 10 (default_charset / cp1252) --INI-- output_handler= mbstring.internal_encoding=pass default_charset=cp1252 --FILE-- --EXPECT-- cp1252 string(28) "‚†™Ÿ" string(32) "€¢£¤¥" ================================================ FILE: Testing/Tests/@PHP/standard/strings/htmlentities11.php.notest ================================================ --TEST-- htmlentities() test 11 (default_charset / ISO-8859-15) --INI-- output_handler= mbstring.internal_encoding=pass default_charset=ISO-8859-15 --FILE-- --EXPECT-- ISO-8859-15 string(20) "ŒœŸ" ================================================ FILE: Testing/Tests/@PHP/standard/strings/htmlentities12.php.notest ================================================ --TEST-- htmlentities() test 12 (default_charset / ISO-8859-1) --INI-- output_handler= mbstring.internal_encoding=pass default_charset=ISO-8859-1 --FILE-- --EXPECT-- ISO-8859-1 string(18) "äöü" ================================================ FILE: Testing/Tests/@PHP/standard/strings/htmlentities13.php.notest ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/strings/htmlentities14.php.notest ================================================ --TEST-- htmlentities() test 14 (default_charset / Shift_JIS) --INI-- output_handler= mbstring.internal_encoding=pass default_charset=Shift_JIS --FILE-- --EXPECT-- Shift_JIS string(6) "ABC" ================================================ FILE: Testing/Tests/@PHP/standard/strings/htmlentities15.php.notest ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/strings/htmlentities16.php.notest ================================================ --TEST-- htmlentities() test 16 (mbstring / cp1251) --INI-- output_handler= --SKIPIF-- --FILE-- --EXPECT-- string(11) "" string(75) "€©роскошный" ================================================ FILE: Testing/Tests/@PHP/standard/strings/htmlentities17.php.notest ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/strings/http_build_query.php.kb ================================================ [expect php] [file] "bar","baz"=>1,"test"=>"a ' \" ", "abc"); __var_dump(http_build_query($array)); __var_dump(http_build_query($array, 'foo')); __var_dump(http_build_query($array, 'foo', ';')); ?> ================================================ FILE: Testing/Tests/@PHP/standard/strings/implode.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/strings/md5.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/strings/md5raw.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/strings/nl2br.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/strings/quicktester.inc ================================================ $test) { // ignore empty lines if (!$test) continue; // warn for trailing ; if (substr(trim($test), -1, 1) === ';') { echo "WARNING: trailing ';' found in test ".($n+1)."\n"; exit; } // try for operators $operators = array('===', '~=='); $operator = NULL; foreach ($operators as $a_operator) { if (strpos($test, $a_operator)!== FALSE) { $operator = $a_operator; list($left,$right) = explode($operator, $test); break; } } if (!$operator) { echo "WARNING: unknown operator in '$test' (1)\n"; exit; } $left = eval("return ($left );"); $right = eval("return ($right);"); switch (@$operator) { case '===': // exact match $result = $left === $right; break; case '~==': // may differ after 12th significant number if ( !is_float($left ) && !is_int($left ) || !is_float($right) && !is_int($right)) { $result = FALSE; break; } $result = abs(($left-$right) / $left) < 1e-12; break; default: echo "WARNING: unknown operator in '$test' (2)\n"; exit; } $success = $success && $result; if (!$result) { echo "\nAssert failed:\n"; echo "$test\n"; echo "Left: ";__var_dump($left ); echo "Right: ";__var_dump($right); } } if ($success) echo "OK"; ================================================ FILE: Testing/Tests/@PHP/standard/strings/sha1.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/strings/sha1raw.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/strings/sprintf_f.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/strings/str_repeat.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/strings/str_shuffle.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/strings/str_word_count.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/strings/strcspn.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/strings/strings001.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/strings/strip_tags.php.kb ================================================ [expect php] [file] STUFF'); echo "\n"; echo strip_tags('NEAT blah ?> STUFF'); echo "\n"; echo strip_tags('NEAT STUFF'); echo "\n"; echo strip_tags('NEAT STUFF'); echo "\n"; echo strip_tags('NEAT STUFF'); echo "\n"; echo strip_tags('NEAT STUFF'); echo "\n"; echo strip_tags('TESTS ?!!?!?!!!?!!'); echo "\n"; ?> ================================================ FILE: Testing/Tests/@PHP/standard/strings/strpos.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/strings/strrev.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/strings/strripos.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/strings/strrpos.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/strings/strspn.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/strings/strstr.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/strings/strtoupper.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/strings/strtr.php ================================================ [expect php] [file] "hi", "hi"=>"hello", "a"=>"A", "world"=>"planet"); __var_dump(strtr("# hi all, I said hello world! #", $trans)); ?> ================================================ FILE: Testing/Tests/@PHP/standard/strings/strval.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/strings/substr_count.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/strings/substr_replace.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/strings/trim.php.kb ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/strings/url_t.php.kb ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/strings/wordwrap.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/standard/time/001.php ================================================ [expect php] [file] $last_t || ($time == $last_t && $micro >= $last_m)) { $passed++; } else if ($failed++ <=10) { $result .= sprintf('%06d', $i).": $time $micro < $last_t $last_m\n"; } $last_m = $micro; $last_t = $time; } echo "Passed: $passed\n"; echo "Failed: $failed\n"; echo $result; ?> ================================================ FILE: Testing/Tests/@PHP/standard/time/Phalanger.inc ================================================ ================================================ FILE: Testing/Tests/@PHP/standard/time/idate.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/strings/001.php ================================================ [expect php] [file] ?' . '@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_' . '`abcdefghijklmnopqrstuvwxyz{|}~' . "\0"; echo "Testing rawurlencode: "; $encoded = rawurlencode($raw); $correct = '%20%21%22%23%24%25%26%27%28%29%2A%2B%2C-.%2F0123456789%3A%3B%3C%3D%3E%3F' . '%40ABCDEFGHIJKLMNOPQRSTUVWXYZ%5B%5C%5D%5E_' . '%60abcdefghijklmnopqrstuvwxyz%7B%7C%7D%7E' . '%00'; if (rawurldecode($encoded) == $raw) { echo("passed\n"); } else { echo("failed!\n"); } echo "Testing rawurldecode: "; $decoded = rawurldecode($correct); if ($decoded == $raw) { echo("passed\n"); } else { echo("failed!\n"); } echo "Testing urlencode: "; $encoded = urlencode($raw); $correct = '+%21%22%23%24%25%26%27%28%29%2A%2B%2C-.%2F0123456789%3A%3B%3C%3D%3E%3F' . '%40ABCDEFGHIJKLMNOPQRSTUVWXYZ%5B%5C%5D%5E_' . '%60abcdefghijklmnopqrstuvwxyz%7B%7C%7D%7E' . '%00'; if (urldecode($encoded) == $raw) { // comparing the converted value does not work (casing, etc.) echo("passed\n"); } else { echo("failed!\n"); } echo "Testing urldecode: "; $decoded = urldecode($correct); if ($decoded == $raw) { echo("passed\n"); } else { echo("failed!\n"); } echo "Testing quotemeta: "; $raw = "a.\\+*?" . chr(91) . "^" . chr(93) . "b\$c"; $quoted = quotemeta($raw); if ($quoted == "a\\.\\\\\\+\\*\\?\\[\\^\\]b\\\$c") { echo("passed\n"); } else { echo("failed!\n"); } echo "Testing ufirst: "; $str = "fahrvergnuegen"; $uc = ucfirst($str); if ($uc == "Fahrvergnuegen") { echo("passed\n"); } else { echo("failed!\n"); } echo "Testing strtr: "; $str = "test abcdefgh"; $tr = strtr($str, "def", "456"); if ($tr == "t5st abc456gh") { echo("passed\n"); } else { echo("failed!\n"); } echo "Testing addslashes: "; $str = "\"\\'"; $as = addslashes($str); if ($as == "\\\"\\\\\\'") { echo("passed\n"); } else { echo("failed!\n"); } echo "Testing stripslashes: "; $str = "\$\\'"; $ss = stripslashes($str); if ($ss == "\$'") { echo("passed\n"); } else { echo("failed!\n"); } echo "Testing uniqid: "; $str = "prefix"; $ui1 = uniqid($str); $ui2 = uniqid($str); $len = strncasecmp(PHP_OS, 'CYGWIN', 6) ? 19 : 29; if (strlen($ui1) == strlen($ui2) && strlen($ui1) == $len && $ui1 != $ui2) { echo("passed\n"); } else { echo("failed!\n"); } ?> ================================================ FILE: Testing/Tests/@PHP/strings/002.php ================================================ [expect php] [file] \n", "foo"); printf("printf test 9:<%-20s>\n", "bar"); printf("printf test 10: 123456789012345\n"); printf("printf test 10:<%15s>\n", "hyesterettsjustitiarius"); printf("printf test 11: 123456789012345678901234567890\n"); printf("printf test 11:<%30s>\n", "hyesterettsjustitiarius"); printf("printf test 12:%5.2f\n", -12.34); printf("printf test 13:%5d\n", -12); printf("printf test 14:%c\n", 64); printf("printf test 15:%b\n", 170); printf("printf test 16:%x\n", 170); printf("printf test 17:%X\n", 170); printf("printf test 18:%16b\n", 170); printf("printf test 19:%16x\n", 170); printf("printf test 20:%16X\n", 170); printf("printf test 21:%016b\n", 170); printf("printf test 22:%016x\n", 170); printf("printf test 23:%016X\n", 170); printf("printf test 24:%.5s\n", "abcdefghij"); printf("printf test 25:%-2s\n", "gazonk"); printf("printf test 26:%2\$d %1\$d\n", 1, 2); printf("printf test 27:%3\$d %d %d\n", 1, 2, 3); printf("printf test 28:%2\$02d %1\$2d\n", 1, 2); printf("printf test 29:%2\$-2d %1\$2d\n", 1, 2); print("printf test 30:"); printf("%0\$s", 1); print("x\n"); vprintf("vprintf test 1:%2\$-2d %1\$2d\n", array(1, 2)); ?> ================================================ FILE: Testing/Tests/@PHP/strings/004.php.notest ================================================ --TEST-- highlight_string() buffering --INI-- highlight.string=#DD0000 highlight.comment=#FF9900 highlight.keyword=#007700 highlight.bg=#FFFFFF highlight.default=#0000BB highlight.html=#000000 --FILE--
    "); $var = highlight_string("

    ", TRUE); echo "\n[$var]\n"; ?> --EXPECT-- <br /><?php echo "foo"?><br /> [ <br /><?php echo "bar"?><br /> ] ================================================ FILE: Testing/Tests/@PHP/strings/Phalanger.inc ================================================ ================================================ FILE: Testing/Tests/@PHP/strings/bug22592.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/@PHP/strings/bug26703.php.notest ================================================ --TEST-- Bug #26703 (Certain characters inside strings incorrectly treated as keywords) --INI-- highlight.string=#DD0000 highlight.comment=#FF9900 highlight.keyword=#007700 highlight.bg=#FFFFFF highlight.default=#0000BB highlight.html=#000000 --FILE-- '); ?> --EXPECT-- <?php echo "foo[] $a \n"?> ================================================ FILE: Testing/Tests/Arrays/Phalanger.inc ================================================ ================================================ FILE: Testing/Tests/Arrays/array1.php ================================================ [expect php] [file] "foo", "foo"=>"bar"); echo $a["foo"]." ".$a[1]; ?> ================================================ FILE: Testing/Tests/Arrays/array_diff_intersect.php ================================================ [expect php] [file] "green", "red", "red", "blue", "blue", "blue"); $array2 = array("b" => "green", "yellow", "q" => "red", "red", "blue", "blue"); $array3 = array("b" => "green", "yellow", "yellow","blue", "blue","r" => "blue", "blue","blue", "blue"); $array4 = array("b" => "green", "yellow", "red", "hello", "blue"); print_r(array_diff($array1, $array2, $array3, $array4)); print_r(array_intersect($array1, $array2, $array3, $array4)); print_r(array_diff($array4, $array3, $array2, $array1)); print_r(array_intersect($array4, $array3, $array2, $array1)); print_r(array_diff_assoc($array1, $array2, $array3, $array4)); print_r(array_intersect_assoc($array1, $array2, $array3, $array4)); print_r(array_diff_assoc($array4, $array3, $array2, $array1)); print_r(array_intersect_assoc($array4, $array3, $array2, $array1)); $a = array(1,2,3); print_r(array_intersect($a, $a, $a)); print_r(array_diff($a, $a, $a)); $array1 = array(1,2,3); $array2 = array(1,1,1,1,1); $array3 = array(2,2,2,2,2); print_r(array_diff($array1, $array2, $array3)); print_r(array_intersect($array1, $array2, $array3)); ?> ================================================ FILE: Testing/Tests/Arrays/array_diff_intersect2.php ================================================ [expect php] [file] $b)? 1:-1; } class cr { private $priv_member; function cr($val) { $this->priv_member = $val; } function comp_func_cr($a, $b) { if ($a->priv_member === $b->priv_member) return 0; return ($a->priv_member > $b->priv_member)? 1:-1; } function comp_func_key($a, $b) { if ($a === $b) return 0; return ($a > $b)? 1:-1; } } $a = array("0.1" => new cr(9), "0.5" => new cr(12), 0 => new cr(23), 1=> new cr(4), 2 => new cr(-15),); $b = array("0.2" => new cr(9), "0.5" => new cr(22), 0 => new cr(3), 1=> new cr(4), 2 => new cr(-15),); $array1 = array("a" => "green", "b" => "brown", "c" => "blue", "red"); $array2 = array("a" => "green", "yellow", "red"); print_r(array_udiff($a, $b, array("cr", "comp_func_cr"))); print_r(array_udiff_assoc($a, $b, array("cr", "comp_func_cr"))); print_r(array_udiff_uassoc($a, $b, array("cr", "comp_func_cr"), array("cr", "comp_func_key"))); print_r(array_diff_uassoc($array1, $array2, "key_compare_func")); print("------------------------------------\n"); print_r(array_uintersect($a, $b, array("cr", "comp_func_cr"))); print_r(array_uintersect_assoc($a, $b, array("cr", "comp_func_cr"))); print_r(array_uintersect_uassoc($a, $b, array("cr", "comp_func_cr"), array("cr", "comp_func_key"))); print_r(array_intersect_uassoc($array1, $array2, "key_compare_func")); ?> ================================================ FILE: Testing/Tests/Arrays/array_diff_intersect3.php ================================================ [expect php] [file] $key2) return 1; else return -1; } $array1 = array('blue' => 1, 'red' => 2, 'green' => 3, 'purple' => 4); $array2 = array('green' => 5, 'blue' => 6, 'yellow' => 7, 'cyan' => 8); var_dump(array_diff_key($array1, $array2)); $array1 = array(1 => 2,2 => 3); $array2 = array("02" => 10); var_dump(array_diff_key($array1, $array2)); $array1 = array('blue' => 1, 'red' => 2, 'green' => 3, 'purple' => 4); $array2 = array('green' => 5, 'blue' => 6, 'yellow' => 7, 'cyan' => 8); var_dump(array_diff_ukey($array1, $array2, 'key_compare_func')); $array1 = array('blue' => 1, 'red' => 2, 'green' => 3, 'purple' => 4); $array2 = array('green' => 5, 'blue' => 6, 'yellow' => 7, 'cyan' => 8); var_dump(array_intersect_key($array1, $array2)); $array1 = array('blue' => 1, 'red' => 2, 'green' => 3, 'purple' => 4); $array2 = array('green' => 5, 'blue' => 6, 'yellow' => 7, 'cyan' => 8); var_dump(array_intersect_ukey($array1, $array2, 'key_compare_func')); ?> ================================================ FILE: Testing/Tests/Arrays/array_filter false entries #22016.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Arrays/array_instantiated.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Arrays/array_map.php ================================================ [expect php] [file] 1,10 => 2); print_r(array_map(null,$a,$b,$c)); print_r(array_map("f",$a,$b,$c)); print_r(array_map("g",$d)); print_r($a); print_r($b); print_r($c); print_r($d); ?> ================================================ FILE: Testing/Tests/Arrays/array_merge_recursive.php ================================================ [expect php] [file] array("favorite" => "red"), 1 => array(1,2,3), "q" => null); $ar2 = array(10, "color" => array("favorite" => "green", "blue"), 1 => array(4,5,6), "q" => null); $ar3 = array("q" => "x"); print_r(array_merge_recursive($ar1, $ar2, $ar3)); $x = array(1,2,3); $ar1 = array("a" => &$x); $ar2 = array("a" => "e"); $a = array_merge_recursive($ar1, $ar2); print_r($a); $x = "hello!"; print_r($a); $x = 1; $ar1 = array("a" => &$x); $ar2 = array("b" => 2); print_r($a = array_merge_recursive($ar1, $ar2)); $x = "xxx"; print_r($a); $ar1 = array("a" => &$ar1); $ar2 = array("a" => array(1,2,3)); print_r(array_merge_recursive($ar1, $ar2)); $ar1 = array("a" => array("b" => 1,"c" => 1)); $ar2 = array("a" => array("d" => 2,"b" => 1)); $ar3 = array("a" => array("d" => 3)); print_r(array_merge_recursive($ar1, $ar2, $ar3)); $x = null; $ar1 = array("a" => &$x); $ar2 = array("a" => null); print_r($a = array_merge_recursive($ar1, $ar2)); $x = "bye"; print_r($a); ?> ================================================ FILE: Testing/Tests/Arrays/array_op.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Arrays/array_reduce1.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Arrays/array_reduce2.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Arrays/array_slice.php ================================================ [expect php] [file] "a", "X" => "b", 2 => "c", "Y" => "d", 3 => "e"); print_r(array_slice($input, 2)); print_r(array_slice($input, -2, 1)); print_r(array_slice($input, 0, 3)); print_r(array_slice($input, 2, -1)); print_r(array_slice($input, 2, -1, true)); ?> ================================================ FILE: Testing/Tests/Arrays/array_splice.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Arrays/array_sumprod.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Arrays/array_unique.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Arrays/array_unset_add.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Arrays/array_unshift.php ================================================ [expect php] [file] 1, 4 => 2, "b" => 4, 3 => 1); array_unshift($queue, "apple", 1, "raspberry"); var_dump($queue); ?> ================================================ FILE: Testing/Tests/Arrays/array_walk.php ================================================ [expect] Before ...: d. lemon a. orange b. banana c. apple ... and after: d. fruit: lemon a. fruit: orange b. fruit: banana c. fruit: apple [file] "lemon", "a" => "orange", "b" => "banana", "c" => "apple"); function test_alter(&$item1, $key, $prefix) { $item1 = "$prefix: $item1"; } function test_print($item2, $key) { echo "$key. $item2\n"; } echo "Before ...:\n"; array_walk($fruits, 'test_print'); array_walk($fruits, 'test_alter', 'fruit'); echo "... and after:\n"; array_walk($fruits, 'test_print'); ?> ================================================ FILE: Testing/Tests/Arrays/array_walk_recursive.php ================================================ [expect php] [file] 'apple', 'b' => 'banana'); $fruits = array('sweet' => $sweet, 'x' =>& $sweet, 'sour' => 'lemon'); function test_print($item, $key) { echo "$key holds $item\n"; } array_walk_recursive($fruits, 'test_print'); ?> ================================================ FILE: Testing/Tests/Arrays/convert_array_key.php ================================================ [expect php] [file] 0, "123" => 0, "1b" => 0, "0123" => 0, "0" => 0, "000" => 0, "" => 0, "-" => 0, "-0" => 0, "-0123" => 0, "123456789" => 0, "1234567890" => 0, "12345678901" => 0, "-1234567890" => 0); foreach ($response as $k => $v) var_dump($k); ?> ================================================ FILE: Testing/Tests/Arrays/foreach_aliased.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Arrays/lazy_copy/001.php ================================================ [expect php] [file] $v) { if (!is_array($v)) echo "$k => $v\n"; unset($x[4]); } return $x; } function bar($x) { echo "array enumeration using current(), next(), reset(), end():"; while ($val = current($x)) { if (!is_array($val)) echo "- $val\n"; next($x); } echo "first: " . reset($x); echo "end: " . end($x); return $x; } function test($x) { $x['10'] = 10; $x['a'] = 'a'; $x['b'] = 'b'; $x['c'] = 'c'; $x = foo($x); $x = bar($x); return $x; } var_dump( test( array( 1,2,3, array( 4,5,6, array( 7,8,9 ) ) ) ) ); ?> ================================================ FILE: Testing/Tests/Arrays/lazy_copy/002.php ================================================ [expect php] [file] $v) { if (!is_array($v)) echo "$k => $v\n"; } return $x; } function bar($x) { echo "array enumeration using current(), next(), reset(), end():"; while ($val = current($x)) { if (!is_array($val)) echo "- $val\n"; next($x); } $x[] = "end";// ensure the end is not array, and perform lazy copy echo "first: " . reset($x); echo "end: " . end($x); return $x; } function test($x) { $x = foo($x); $x = bar($x); return $x; } var_dump( test( array( 1,2,3, array( 4,5,6, array( 7,8,9 ) ) ) ) ); ?> ================================================ FILE: Testing/Tests/Arrays/lazy_copy/003.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Arrays/lazy_copy/004.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Arrays/lazy_copy/005.php ================================================ [expect php] [file] $v) { if (!is_array($v)) { echo "$k => $v\n"; } } return $x; } function bar($x) { echo "array enumeration using current(), next(), reset(), end():\n"; while ($val = current($x)) { if (!is_array($val)) echo key($x) .": $val\n"; else { bar(foo($val)); } unset($x[key($x)]); // lazy copy next($x); } $x[] = "end";// ensure the end is not array, and perform lazy copy echo "first: " . reset($x) . "\n"; echo "end: " . end($x) . "\n"; return $x; } function test($x) { return bar($x); } $arr = array( 1,2,3, array( 4,5,6, array( 7,8,9 ) ) ); var_dump( test( $arr ) ); ?> ================================================ FILE: Testing/Tests/Arrays/lazy_copy/006.php ================================================ [expect php] [file] $v) { if (!is_array($v)) { echo "$k => $v\n"; } } return $x; } function bar($x, $prefix) { echo "array enumeration using current(), prev(), reset(), end():\n"; $first = reset($x); $end = end($x); echo "$prefix first: " . $first . "\n"; echo "$prefix end: " . (is_array($end) ? "{array}" : $end) . "\n"; while ($val = current($x)) { if (!is_array($val)) echo $prefix . key($x) .": $val\n"; else { bar($val, $prefix . " "); } if (key($x) % 2 == 0) unset($x[key($x)]); // lazy copy prev($x); } $x[] = "end"; return $x; } function test($x) { return bar($x, null); } $arr = array( 1,2,3, array( 4,5,6, array( 7,8,9 ) ) ); var_dump( test( $arr ) ); ?> ================================================ FILE: Testing/Tests/Arrays/multisort.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Arrays/multisort_empty.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Arrays/nonarray access #22019.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Arrays/optimizations.php ================================================ [expect php] [file] "b", "0" => "c", "10" => 4, 5 => 8); $s = "hello"; $a[1] = 3; $a["x"] = 4; $a["0"] = 5; $s[1] = 'a'; $s["2g"] = 'b'; $s["g"] = 'c'; echo $a[1], "\n", $a["x"], "\n", $a["0"], "\n", $s[1], "\n", $s["2g"], "\n", $s["g"], "\n"; echo strtolower($a), "\n", $s, "\n"; ?> ================================================ FILE: Testing/Tests/Arrays/recursion.php ================================================ [expect php] [file] &$ar1); $ar2 = array("a" => array(1,2,3)); $ar3 = array_merge_recursive($ar1, $ar2); $ar3[] = "w"; $ar3["a"][] = "x"; $ar3["a"]["a"][] = "y"; $ar3["a"]["a"]["a"][] = "z"; var_dump($ar3); } function f2() { $a = array("a" => &$a); $b = array_change_key_case($a,CASE_UPPER); $a[] = "z"; var_dump($b); } function f3() { $a = array("a" => &$a); sort($a); $a[] = "z"; var_dump($a); } function f4() { $x = array(1,2,3); $a = array("a" =>& $x); $c = array_merge_recursive($a,$a); var_dump($c); } function f5() { $a = array("a" => array(1,2,3)); $c = array_merge_recursive($a,$a); var_dump($c); } function f6() { $x = "xx"; $y =& $x; $a = array("a" =>& $x); $b = array("a" => 2); $c = array_merge_recursive($a,$b); var_dump($c); } function f7() { $a = array("a" => &$a); $b = array("a" => &$b); @$x = array_merge_recursive($a,$b); var_dump($x); } for($i=1;$i<=7;$i++) { $f = "f$i"; echo "$f:\n"; $f(); } ?> ================================================ FILE: Testing/Tests/Arrays/sort.php ================================================ [expect php] [file] "regular",SORT_NUMERIC => "numeric",SORT_STRING => "string",SORT_LOCALE_STRING => "locale"); $array = array("x" => 8,"z" => 1,"2b" => 1,"x10","10a" => 0,"10x","20x","x2","0x10","ach0","add1"); for ($i=0;$i $type_name) { echo "\n{$sorts[$i]} $type_name:\n"; $x = $array; $sorts[$i]($x,$type); print_r($x); } } echo "\nnatsort:\n"; $x = $array; natsort($x); print_r($x); ?> ================================================ FILE: Testing/Tests/Arrays/usort.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Bugs/class_incompletepart.php ================================================ [expect php] [file] test(); ?> ================================================ FILE: Testing/Tests/Bugs/division-by-zero.php ================================================ [expect ct-warning] PHP0150: Division by zero [expect ct-warning] PHP0150: Division by zero [expect ct-warning] PHP0150: Division by zero [expect ct-warning] PHP0150: Division by zero [expect php] [file] ================================================ FILE: Testing/Tests/Bugs/function-in-unknown-class.php ================================================ [expect exact] test 1 test 2 [file] run(); foo1(); $s = new unk2; $s->run(); $a = new a; $a->run(); foo2(); ?> ================================================ FILE: Testing/Tests/Bugs/if_if.php ================================================ [expect exact] ok [file] ================================================ FILE: Testing/Tests/Bugs/is_a_null_value.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Bugs/obj_instantiated.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Bugs/preg-named-groups.php ================================================ [expect php] [file] hej hola"; $matches = null; $numMatches = preg_match_all('/[1-6])(?P.*?'.'>)(?P
    .*?)<\/H[1-6] *>/i', $text, $matches); echo "FIRST\n"; echo $matches['header'][0]; $text = "

    hej hola

    "; $matches = null; $numMatches = preg_match_all('/[1-6])(?P.*?'.'>)(?P
    .*?)<\/H[1-6] *>/i', $text, $matches, PREG_SET_ORDER); echo "\nSECOND\n"; echo $matches[0]['header']; ?> ================================================ FILE: Testing/Tests/Bugs/preg-replace-advanced.php ================================================ [expect exact] ok [file] (?=.*<\\/sub>))|((?=.*<\\/sup>))|((?=.*<\\/del>))|(\\x5C{2}(?=\\s))|(\\x28\\x28(?=.*\\x29\\x29))|(~~INFO:\\w+~~)|(\\n[ \\t]*-{4,}[ \\t]*(?=\\n))|((?=.*<\\/nowiki>))|(%%(?=.*%%))|((?=.*<\\/php>))|((?=.*<\\/html>))|())|((?=.*<\\/file>))|(\\n>{1,})|(8-\\)|8-O|8-o|\\:-\\(|\\:-\\)|\\=\\)|\\:-\\/|\\:-\\\\|\\:-\\?|\\:-D|\\:-P|\\:-o|\\:-O|\\:-x|\\:-X|\\:-\\||;-\\)|\\^_\\^|\\:\\?\\:|\\:\\!\\:|LOL|FIXME|DELETEME)|((?<=^|[\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f])(?:ACL|AFAICS|AFAIK|AJAX|AIM|AOL|API|ASAP|ASCII|ASP|BTW|CGI|CMS|CSS|CVS|DBA|DHTML|DMCA|DNS|DOM|DTD|EOF|EOL|EOM|EOT|ESMTP|FAQ|FDL|FTP|FOSS|FLOSS|FUD|GB|GHz|GIF|GPL|GUI|HTML|HTTP|IANAL|ICANN|ICQ|IE5|IE6|IE|IIRC|IIS|IMAP|IMHO|IMO|IOW|IRC|IRL|ISO|ISP|JDK|JPEG|JPG|JS|KISS|LGPL|LOL|MathML|MB|MHz|MIME|MIT|MML|MP3|MPEG|MSDN|MS|NS4\\.7|NS4|NS6|NS7|OMG|OPML|OS|OSS|OTOH|P2P|PDA|PDF|Perl|PERL|PHP|PICS|PIN|PITA|PNG|POP3|POP|QoS|RAID|RDF|ROTFL|RPC|RSS|RTFM|RTF|SCSI|SDK|SGML|SMIL|SMTP|SOAP|spec|SQL|SSH|SSI|SSL|SVG|TIA|TIFF|TLD|TOC|URI|URL|URN|VBA|VB|W3C|WAN|WAP|WML|WTF\\?|WWW|WYSIWYG|XHTML|XML|XSD|XSL|XSLT|XUL|YMMV)(?=[\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]))|(\\<-\\>|-\\>|\\<-|\\<\\=\\>|\\=\\>|\\<\\=|\\>\\>|\\<\\<|---|--|\\(c\\)|\\(tm\\)|\\(r\\))|((?<=\\b)\\d+[xX]\\d+(?=\\b))|((?<=^|\\s)'(?=\\S))|((?<=^|\\S)')|((?<=^|\\s)\"(?=\\S))|((?<=^|\\S)\")|(\\[\\[.+?\\]\\])|(\\{\\{rss>[^\\}]+\\}\\})|(\\{\\{[^\\}]+\\}\\})|(\\b(?i)http(?-i):\\/\\/[\\w\\/\\#~:.?+=&%@!\\-.:?\\-;,]+?(?=[.:?\\-;,]*[^\\w\\/\\#~:.?+=&%@!\\-.:?\\-;,]))|(\\b(?i)https(?-i):\\/\\/[\\w\\/\\#~:.?+=&%@!\\-.:?\\-;,]+?(?=[.:?\\-;,]*[^\\w\\/\\#~:.?+=&%@!\\-.:?\\-;,]))|(\\b(?i)telnet(?-i):\\/\\/[\\w\\/\\#~:.?+=&%@!\\-.:?\\-;,]+?(?=[.:?\\-;,]*[^\\w\\/\\#~:.?+=&%@!\\-.:?\\-;,]))|(\\b(?i)gopher(?-i):\\/\\/[\\w\\/\\#~:.?+=&%@!\\-.:?\\-;,]+?(?=[.:?\\-;,]*[^\\w\\/\\#~:.?+=&%@!\\-.:?\\-;,]))|(\\b(?i)wais(?-i):\\/\\/[\\w\\/\\#~:.?+=&%@!\\-.:?\\-;,]+?(?=[.:?\\-;,]*[^\\w\\/\\#~:.?+=&%@!\\-.:?\\-;,]))|(\\b(?i)ftp(?-i):\\/\\/[\\w\\/\\#~:.?+=&%@!\\-.:?\\-;,]+?(?=[.:?\\-;,]*[^\\w\\/\\#~:.?+=&%@!\\-.:?\\-;,]))|(\\b(?i)ed2k(?-i):\\/\\/[\\w\\/\\#~:.?+=&%@!\\-.:?\\-;,]+?(?=[.:?\\-;,]*[^\\w\\/\\#~:.?+=&%@!\\-.:?\\-;,]))|(\\b(?i)irc(?-i):\\/\\/[\\w\\/\\#~:.?+=&%@!\\-.:?\\-;,]+?(?=[.:?\\-;,]*[^\\w\\/\\#~:.?+=&%@!\\-.:?\\-;,]))|(\\b(?i)ldap(?-i):\\/\\/[\\w\\/\\#~:.?+=&%@!\\-.:?\\-;,]+?(?=[.:?\\-;,]*[^\\w\\/\\#~:.?+=&%@!\\-.:?\\-;,]))|(\\b(?i)www?(?-i)\\.[\\w.:?\\-;,]+?\\.[\\w.:?\\-;,]+?[\\w\\/\\#~:.?+=&%@!\\-.:?\\-;,]+?(?=[.:?\\-;,]*[^\\w\\/\\#~:.?+=&%@!\\-.:?\\-;,]))|(\\b(?i)ftp?(?-i)\\.[\\w.:?\\-;,]+?\\.[\\w.:?\\-;,]+?[\\w\\/\\#~:.?+=&%@!\\-.:?\\-;,]+?(?=[.:?\\-;,]*[^\\w\\/\\#~:.?+=&%@!\\-.:?\\-;,]))|(<[\\w0-9\\-_.]+?@[\\w\\-]+\\.[\\w\\-\\.]+\\.*[\\w]+>)|(\\\\\\\\\\w+?(?:\\\\[\\w$]+)+)|(\\n)/msS"; $test = "\n**This** is my //new// wiki!\n"; preg_match($pattern, $test, $match); echo $match[0] == "\n"?"ok":"error"; ?> ================================================ FILE: Testing/Tests/Bugs/preg-replace-range.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Bugs/preg-replace.php ================================================ [expect exact] 3_ 4_ 2_ [file] ================================================ FILE: Testing/Tests/Bugs/preg-this-dynamic.php ================================================ [expect php] [file] foo('\\1',\$z)","ahoj lidi rozkladame"); } } new a(); // One more test - now using dynamic invoke $x = 'bbb'; $fn = 'preg_replace'; echo $fn('!([a-z]+)!sie',"'\\1'.\$x","zz zz zz"); ?> ================================================ FILE: Testing/Tests/Bugs/preg-this-dynamic2.php ================================================ [expect php] [file] foo('\\1',\$z)","ahoj lidi rozkladame"); // but this reference isn't captured :-( $fn = 'preg_replace'; $fn('!([a-z]+)!sie',"\$this->foo('\\1',\$z)","ahoj lidi rozkladame"); } } new a(); ?> ================================================ FILE: Testing/Tests/Bugs/preg-this.php ================================================ [expect php] [file] foo('\\1',\$z)","ahoj lidi rozkladame"); } } new a(); // test whether similar thing works in global context $x = 'aaa'; echo preg_replace('!([a-z]+)!sie',"'\\1'.\$x","zz zz zz"); ?> ================================================ FILE: Testing/Tests/Bugs/preg-ungreedy-bugs.php ================================================ [expect php] [file] |>|=|<))(\([^\n\)]+\)|\[[^\n\]]+\]|\{[^\n\}]+\}|(?:<>|>|=|<))??(\([^\n\)]+\)|\[[^\n\]]+\]|\{[^\n\}]+\}|(?:<>|>|=|<))??(\([^\n\)]+\)|\[[^\n\]]+\]|\{[^\n\}]+\}|(?:<>|>|=|<))??)\n)?(\*|\-|\+|\d+\.\ |\d+\)|[IVX]+\.\ |[IVX]+\)|[a-z]\)|[A-Z]\))(\n?)\ +\S.*$#mUm'; $matches = null; $ok = preg_match($expr, "- a\nb\n- c", $matches, PREG_OFFSET_CAPTURE, 4); echo ($matches[0][0] == "- c")?"ok":"error"; echo "\n"; echo ($matches[5][0] == "-")?"ok":"error"; ?> ================================================ FILE: Testing/Tests/Bugs/preg-unkn.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Bugs/trigger_error line number #2787.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/CLR/BaseTypes.php ================================================ [expect errors] error PHP1021 warning PHP0020 error PHP1022 error PHP1022 error PHP1020 warning PHP0020 warning PHP0020 error PHP1081 warning PHP0020 error PHP1081 error PHP1021 error PHP1022 error PHP1020 error PHP1092 error PHP1092 error PHP1092 [file] { } class E<:T:> { } interface I1 extends I {} interface I2 extends C {} interface I3 extends U {} class E1 extends D {} class E2 extends I {} class E3 extends I implements I,D,J { } class E4 extends D implements I,J { } class E5 extends U { } class E6 extends D implements U { } interface K2<:T:> extends I<:T:> { } interface K3<:T:> extends K<:T:> { } interface K4 extends K2<:I<:U:>:> { } interface K5 extends E<:int:> { } class F extends K<:E<:int:>:> implements E<:int:> { } ?> ================================================ FILE: Testing/Tests/CLR/ClrEvent.php ================================================ [clr] [expect exact] Works! DONE [file] DoWork->Add( new \System\ComponentModel\DoWorkEventHandler( array($handler, "DoWork") ) ); $bw->RunWorkerAsync(); while ($bw->IsBusy) { \System\Threading\Thread::Sleep(100); } } test(); echo "DONE" ?> ================================================ FILE: Testing/Tests/CLR/ConditionalDecls.php ================================================ [pure] [expect exact] T2::f g2 [file] f(); g(); } } ?> ================================================ FILE: Testing/Tests/CLR/ConditionalDecls2.php ================================================ [pure] [expect exact] object(T<:C:>)(0) { } [file] { function f(Q $x) { echo "T\n"; } } $t = new T; var_dump($t); } } ?> ================================================ FILE: Testing/Tests/CLR/Inheritance1.php ================================================ [expect error] error PHP2031 [file] ================================================ FILE: Testing/Tests/CLR/Inheritance2.php ================================================ [expect error] error PHP2031 [file] extends J2, J3<:T:>, J4 { } interface J2 { } interface J3<:T:> { } interface J4 extends J2, J1<:int:> { } ?> ================================================ FILE: Testing/Tests/CLR/Inheritance3.php ================================================ [expect error] error PHP2031 [file] extends J5<:T:> { } ?> ================================================ FILE: Testing/Tests/CLR/Inheritance4.php ================================================ [expect error] error PHP2031 [file] { } interface J2 { } interface J7<:T:> { } interface J6<:T:> extends J7<:J6<:int:>:> { } interface J8<:T:> extends J1<:J6<:J2:>:> { } // ok, but there is a bug in CLR: interface J<:T:> extends J7<:J<:J<:T:>:>:> { } ?> ================================================ FILE: Testing/Tests/CLR/Inheritance5.php ================================================ [expect] [file] ================================================ FILE: Testing/Tests/CLR/Inheritance6.php ================================================ [expect] [file] { abstract function mm(); } class DD<:T:> extends CC<:T:> { function Mm() {} } interface II0<:T:> { function mm(); } interface II1<:T:> { function Mm(); } class CCC<:T:> implements II0<:T:>, II1<:T:> { function MM(){} } interface I0<:T:> { function mm(); } interface I1<:T:> extends I0<:int:>, I0<:string:> { } interface I2<:T:> { function Mm(); } interface I3<:T:> { function mM(); } abstract class A<:T:> implements I1<:T:> { function MM() { } } abstract class B<:T:> extends A<:T:> implements I2<:T:> { } abstract class C<:T:> extends B<:T:> implements I3<:T:> { } class D<:T:> extends C<:T:> { function mm() { } } ?> ================================================ FILE: Testing/Tests/CLR/Inheritance7.php ================================================ [expect] [file] ================================================ FILE: Testing/Tests/CLR/Inheritance8.php ================================================ [expect] [file] ================================================ FILE: Testing/Tests/CLR/Inheritance9.php ================================================ [expect error] error PHP1018 [file] ================================================ FILE: Testing/Tests/CLR/Lambdas.php ================================================ [expect errors] warning PHP0020 warning PHP0020 [file] true, $Inherited => false)] class MyAttribute extends System:::Attribute { private $a, $b; public $c; public function __construct($a, $b) { $this->a = $a; $this->b = $b; } } [My(1,2)] class P { public static function Main() { create_function('$x','return $x + 1;'); create_function('int $x','return $x + 1;'); create_function('bool &$x','return $x + 1;'); create_function('C &$x','return $x + 1;'); create_function('U &$x','return $x + 1;'); create_function('[My(1,2)]U &$x','return $x + 1;'); create_function('$nested','return $nested . create_function(\'$z\',\'return $z + 1;\');'); } } ?> ================================================ FILE: Testing/Tests/CLR/NameResolving.php ================================================ [pure] [expect exact] bool(true) bool(true) object(Directory)(2) { ["handle"]=> NULL ["path"]=> NULL } [file] ================================================ FILE: Testing/Tests/CLR/foreach.php ================================================ [pure] [expect exact] 1, 2, 3, 4, 5, OK [file] ($vals) { $ret = new i'System\Collections\Generic\List'<:T:>; foreach($vals as $v) $ret->Add($v); return $ret; } public static function Main() { $l = self::CreateList<:\System\Int32:>(array(1,2,3,4,5)); // This causes Common Langauge Runtime // TODO: (J) keyed enumeration of non-keyed collection // foreach($l as $key => $value) echo "$value, "; foreach($l as $value) echo "$value, "; echo "OK"; } } ?> ================================================ FILE: Testing/Tests/CLR/handle_enum.php ================================================ [clr] [expect exact] int(2) DONE [file] DayOfWeek; var_dump($y); } foo(); echo 'DONE'; ?> ================================================ FILE: Testing/Tests/CLR/indexers1.php ================================================ [clr] [expect exact] OK [file] any non-PHP object causes an exception } function test() { $x = new System\Collections\Hashtable(); $y = new System\Collections\Hashtable(); $x->Add("key", $y); $y->Add("message", $y); Read($x); } test(); ?>OK ================================================ FILE: Testing/Tests/CLR/serialize clr.php ================================================ [clr] [expect exact] OK [file] ================================================ FILE: Testing/Tests/Compiler/Inclusions/6B.inc ================================================ ================================================ FILE: Testing/Tests/Compiler/Inclusions/6C.inc ================================================ ================================================ FILE: Testing/Tests/Compiler/Inclusions/Cycles/a03.inc ================================================ ================================================ FILE: Testing/Tests/Compiler/Inclusions/Cycles/b01.inc ================================================ ================================================ FILE: Testing/Tests/Compiler/Inclusions/Cycles/b02.inc ================================================ ================================================ FILE: Testing/Tests/Compiler/Inclusions/Cycles/b03.inc ================================================ ================================================ FILE: Testing/Tests/Compiler/Inclusions/Cycles/b04.inc ================================================ ================================================ FILE: Testing/Tests/Compiler/Inclusions/Cycles/b05.inc ================================================ ================================================ FILE: Testing/Tests/Compiler/Inclusions/Cycles/b06.inc ================================================ ================================================ FILE: Testing/Tests/Compiler/Inclusions/Cycles/c01.inc ================================================ ================================================ FILE: Testing/Tests/Compiler/Inclusions/Cycles/c02.inc ================================================ ================================================ FILE: Testing/Tests/Compiler/Inclusions/Cycles/c03.inc ================================================ ================================================ FILE: Testing/Tests/Compiler/Inclusions/Cycles/c04.inc ================================================ ================================================ FILE: Testing/Tests/Compiler/Inclusions/Cycles/c05.inc ================================================ ================================================ FILE: Testing/Tests/Compiler/Inclusions/Cycles/c06.inc ================================================ ================================================ FILE: Testing/Tests/Compiler/Inclusions/Cycles/d06.inc ================================================ ================================================ FILE: Testing/Tests/Compiler/Inclusions/Cycles/e06.inc ================================================ ================================================ FILE: Testing/Tests/Compiler/Inclusions/Cycles/t01.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Compiler/Inclusions/Cycles/t02.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Compiler/Inclusions/Cycles/t03.php ================================================ [expect] bcbc [file] ================================================ FILE: Testing/Tests/Compiler/Inclusions/Cycles/t04.php ================================================ [expec] bcbc [file] ================================================ FILE: Testing/Tests/Compiler/Inclusions/Cycles/t05.php ================================================ [expect] bcbc [file] ================================================ FILE: Testing/Tests/Compiler/Inclusions/Cycles/t06.php.notest ================================================ [expect] bdebdcec [expect ct-error] redeclares function d [file] ================================================ FILE: Testing/Tests/Compiler/Inclusions/Cycles/t07.php.notest ================================================ [expect] bdebdcec [expect ct-error] redeclares function d [file] ================================================ FILE: Testing/Tests/Compiler/Inclusions/Cycles/t08.php ================================================ [expect] bdebdcecbcde [file] ================================================ FILE: Testing/Tests/Compiler/Inclusions/Phalanger.inc ================================================ $v) { echo "$indent "; if (is_string($k)) echo "'$k'"; else echo "$k"; echo " => "; if (is_array($v) || is_object($v)) { echo "\n"; __var_dump_rec("$indent ", $v); } else { __var_dump_rec("", $v); } } echo "$indent}\n"; } else if (is_string($x)) echo "{$indent}'$x'\n"; else if (is_null($x)) echo "{$indent}NULL\n"; else if (is_bool($x)) echo $x ? "{$indent}TRUE\n" : "{$indent}FALSE\n"; else if (is_resource($x)) echo "{$indent}resource '".get_resource_type($x)."'\n"; else if (is_double($x)) printf("{$indent}%.10f\n",$x); else echo "{$indent}$x\n"; } ?> ================================================ FILE: Testing/Tests/Compiler/Inclusions/b.inc ================================================ x; } } ?> ================================================ FILE: Testing/Tests/Compiler/Inclusions/f.inc ================================================ ================================================ FILE: Testing/Tests/Compiler/Inclusions/function.inc ================================================ ================================================ FILE: Testing/Tests/Compiler/Inclusions/include2.php ================================================ [expect exact] ahoj [file] x = "ahoj"; $x->foo(); ?> ================================================ FILE: Testing/Tests/Compiler/Inclusions/include3.php ================================================ [expect exact] ahoj [file] ================================================ FILE: Testing/Tests/Compiler/Inclusions/include6.php ================================================ [expect php] [additional scripts] 6C.inc [file] ================================================ FILE: Testing/Tests/Compiler/Inclusions/include_test.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Compiler/Inclusions/include_test_a.inc ================================================ ================================================ FILE: Testing/Tests/Compiler/Inclusions/include_test_b.inc ================================================ ================================================ FILE: Testing/Tests/Compiler/Inclusions/script.php ================================================ [expect exact] ahoj [file] ================================================ FILE: Testing/Tests/Compiler/Inclusions/script2.inc ================================================ ================================================ FILE: Testing/Tests/Compiler/Namespaces/const1.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Compiler/Namespaces/constants1.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Compiler/Namespaces/extends1.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Compiler/Namespaces/extends2.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Compiler/Namespaces/function1.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Compiler/Namespaces/function2.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Compiler/Namespaces/namespace1.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Compiler/Namespaces/simple_syntax1.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Compiler/Namespaces/use1.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Compiler/Namespaces/use2.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Compiler/Namespaces/use3.php ================================================ [expect php] [file] bar(); } function bar() { echo __METHOD__; } } X::foo(); } ?> ================================================ FILE: Testing/Tests/Compiler/Namespaces/use4.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Compiler/Phalanger.inc ================================================ ================================================ FILE: Testing/Tests/Compiler/PseudoConst/_class_.php ================================================ [EXPECT] [FILE] f(); ?> ================================================ FILE: Testing/Tests/Compiler/PseudoConst/_function_.php ================================================ [expect php] [file] a; echo __FUNCTION__; } } $a = new A; $a->g(); } f(); ?> ================================================ FILE: Testing/Tests/Compiler/PseudoConst/parent.php ================================================ [EXPECT php] [FILE] f(); ?> ================================================ FILE: Testing/Tests/Compiler/PseudoConst/parent2.php ================================================ [EXPECT] [FILE] ================================================ FILE: Testing/Tests/Compiler/PseudoConst/self.php ================================================ [EXPECT php] [FILE] f(); ?> ================================================ FILE: Testing/Tests/Compiler/PseudoConst/t01.php ================================================ [EXPECT] B [FILE] ================================================ FILE: Testing/Tests/Compiler/PseudoConst/t02.php ================================================ [EXPECT] g [FILE] ================================================ FILE: Testing/Tests/Compiler/PseudoConst/t03.php ================================================ [EXPECT] g [FILE] ================================================ FILE: Testing/Tests/Compiler/PseudoConst/t04.php ================================================ [EXPECT] B [FILE] ================================================ FILE: Testing/Tests/Compiler/PseudoConst/t05.php ================================================ [EXPECT] g [FILE] ================================================ FILE: Testing/Tests/Compiler/PseudoConst/t06.php ================================================ [EXPECT] g [FILE] ================================================ FILE: Testing/Tests/Compiler/PseudoConst/t07.php ================================================ [EXPECT] [FILE] ================================================ FILE: Testing/Tests/Compiler/PseudoConst/t08.php ================================================ [EXPECT] v [FILE] ================================================ FILE: Testing/Tests/Compiler/PseudoConst/t09.php ================================================ [EXPECT] v [FILE] ================================================ FILE: Testing/Tests/Compiler/PseudoConst/t10.php ================================================ [expect] f [file] ================================================ FILE: Testing/Tests/Compiler/PseudoConst/t11.php ================================================ [expect] g [file] ================================================ FILE: Testing/Tests/Compiler/References/array_argument.php ================================================ [expect php] [file]
    checkpoint '; var_dump($checkpoint); ?> ================================================ FILE: Testing/Tests/Compiler/References/array_local.php ================================================ [expect php] [file]
    checkpoint '; var_dump($checkpoint); ?> ================================================ FILE: Testing/Tests/Compiler/References/array_ret_argument.php ================================================ [expect php] [file]
    checkpoint '; var_dump($checkpoint); ?> ================================================ FILE: Testing/Tests/Compiler/References/array_ret_argument2.php ================================================ [expect php] [file]
    checkpoint '; var_dump($checkpoint); ?> ================================================ FILE: Testing/Tests/Compiler/References/deepcopy.php ================================================ [expect php] [file] "; //xdebug_debug_zval('myobjects'); echo "
    "; //eval('echo "ahoj";'); $myobjects[1] = 7; } function foo(&$hovno) { } mymain(); //reference in array shouldn't act as a reference any more echo "globalobjects: "; var_dump($globalobjects); ?> ================================================ FILE: Testing/Tests/Compiler/References/explicitclear.php ================================================ [expect php] [file] objects = 7; } function __destruct() { print "Destruyendo Y\n"; } } class X { var $inner_stuff; var $objects = 'Init Value'; function __construct(){ $this->inner_stuff[] = new Y(); } function foo() { echo "1"; $this->inner_stuff[0]->objects = & $this->objects; echo "2"; $this->inner_stuff[0] = 23;// the reference is lost echo "3"; //deep copy occurs without reference - so deep copy copies everything $checkpoint = (array)$this; //since $this->object isn't longer referenced $chekpoint should be affected by this change $this->objects = 54; var_dump($this); var_dump($checkpoint); } } $x = new X(); echo "call foo"; $x->foo(); $checkpoint = (array)$x; $x->objects = 1004; echo "x: "; var_dump($x); echo "
    checkpoint "; var_dump($checkpoint); ?> ================================================ FILE: Testing/Tests/Compiler/References/field_argument.php ================================================ [expect php] [file] objects); //$o = & $x->objects; $checkpoint = (array)$x; $x->objects = 7; echo "x: "; var_dump($x->objects); echo '

    checkpoint '; var_dump($checkpoint); ?> ================================================ FILE: Testing/Tests/Compiler/References/field_local.php ================================================ [expect php] [file] objects; } } $x = new X(); $checkpoint = (array)$x; $x->objects = 25; echo "x: "; var_dump($x); echo "
    checkpoint "; var_dump($checkpoint); ?> ================================================ FILE: Testing/Tests/Compiler/References/ref_arrayitem.php ================================================ [expect php] [file]
    checkpoint '; var_dump($checkpoint); ?> ================================================ FILE: Testing/Tests/Compiler/References/ref_reasign.php ================================================ [expect php] [file] objects; $o = & $this->objects2; //reference to $this->objects should be death now //reference to $this->objects2 is created $checkpoint = (array)$this; $this->objects = 54; $this->objects2 = 222; var_dump($this); var_dump($checkpoint); // it's necesary to close $o and copied reference in $checkpoint } } $x = new X(); $x->foo(); $checkpoint = (array)$x; $x->objects = 1004; $x->objects2 = 777; echo "x: "; var_dump($x); echo "
    checkpoint "; var_dump($checkpoint); ?> ================================================ FILE: Testing/Tests/Compiler/Unreachable/t10.php.notest ================================================ [expect ct-warning] Unreachable code [file] ================================================ FILE: Testing/Tests/Compiler/Unreachable/t11.php.notest ================================================ [expect ct-warning] Unreachable code [file] ================================================ FILE: Testing/Tests/Compiler/Unreachable/t12.php.notest ================================================ [expect ct-warning] Unreachable code [file] ================================================ FILE: Testing/Tests/Compiler/Unreachable/t13.php ================================================ [ecpect ct-warning] unreachabl code [expect] undefined [file] ================================================ FILE: Testing/Tests/Compiler/Unset/__unset.php ================================================ [expect php] [file] name); ?> ================================================ FILE: Testing/Tests/Compiler/Unset/calluserfunc.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Compiler/Unset/issetref2.php ================================================ [expect php] [file] x; // Destroy reference (shouldn't touch $x) unset($ref); var_dump(isset($ref)); // Returns $arr[1] destroyed print_r($this); //die(); } function ithastowork() { echo "ithastowork:\n"; // Reference to field x $ref = &$this->x; // Destroys x, but the values still exists and it's pointed by ref unset($this->x); var_dump(isset($this->x)); // Returns $arr[1] destroyed print_r($this); print_r($ref); //die(); } } function alsoBug() { global $test; echo "\nalsobug:\n"; // Reference to field x $ref = &$test->x; // Destroy reference (shouldn't touch $x) unset($ref); var_dump(isset($ref)); // Returns $arr[1] destroyed print_r($test); //die(); } // Reproduce BUG $test = new Test(); $test->doBug(); $test->x = 'Init'; $test->ithastowork(); $test->x = 'Init'; alsoBug(); $test->x = 'Init'; //this works echo "this works:\n"; // Reference to field x $ref = &$test->x; // Destroy reference (shouldn't touch $x) unset($ref); var_dump(isset($ref)); // Returns $arr[1] destroyed print_r($test); ?> ================================================ FILE: Testing/Tests/Compiler/Unset/unsetglobal.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Compiler/Unset/unsetglobal2.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Compiler/Unset/unsetindirect.php ================================================ [expect php] [file] x; $indirectref = 'ref'; // Destroys x, but the values still exists and it's pointed by ref unset($$indirectref); // Returns $arr[1] destroyed print_r($this); //die(); } } $x = new X(); $x->optimizedLocals(); print_r($x); $x->x = 'Init'; //this works echo "this works:\n"; // Reference to field x $ref = &$x->x; $indirectref = 'ref'; // Destroys x, but the values still exists and it's pointed by ref unset($$indirectref); // Returns $arr[1] destroyed print_r($x); //die(); ?> ================================================ FILE: Testing/Tests/Compiler/Unset/unsetproblem.php ================================================ [expect php] [file] 'InitialValue'); function doBug() { // Reference to element '1' $ref = &$this->arr[1]; // Destroy reference (shouldn't touch $arr[1]) unset($ref); // Returns $arr[1] destroyed print_r($this->arr); //die(); } } // Reproduce BUG $test = new Test(); $test->doBug(); ?> ================================================ FILE: Testing/Tests/Compiler/Unset/unsetref.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Compiler/Unset/unsetref2.php ================================================ [expect php] [file] x; // Destroy reference (shouldn't touch $x) unset($ref); // Returns $arr[1] destroyed print_r($this); //die(); } function ithastowork() { echo "ithastowork:\n"; // Reference to field x $ref = &$this->x; // Destroys x, but the values still exists and it's pointed by ref unset($this->x); // Returns $arr[1] destroyed print_r($this); print_r($ref); //die(); } } function alsoBug() { global $test; echo "\nalsobug:\n"; // Reference to field x $ref = &$test->x; // Destroy reference (shouldn't touch $x) unset($ref); // Returns $arr[1] destroyed print_r($test); //die(); } // Reproduce BUG $test = new Test(); $test->doBug(); $test->x = 'Init'; $test->ithastowork(); $test->x = 'Init'; alsoBug(); $test->x = 'Init'; //this works echo "this works:\n"; // Reference to field x $ref = &$test->x; // Destroy reference (shouldn't touch $x) unset($ref); // Returns $arr[1] destroyed print_r($test); ?> ================================================ FILE: Testing/Tests/Compiler/Unset/unsetref3.php ================================================ [expect php] [file] x; // Destroys x, but the values still exists and it's pointed by ref unset($this->x); // Returns $arr[1] destroyed print_r($ref); //die(); } } // Reproduce BUG $test = new Test(); $test->ithastowork(); $test->x = 'Init'; ?> ================================================ FILE: Testing/Tests/Compiler/__call.php ================================================ [expect php] [file] bar3("hello",1,2,3,4,5,6,7,8,9) . $this->bar2("xxx"); } } if (true) { // incomplete class decl class Y extends X { public static function fooex($a) { echo "fooex($a)/" . parent::bar3(5,5,5) . X::bar4(6,6,6); // should not be called statically } public function yoo($a) { return parent::bar3(1,1,1);// call it through __call, not __callStatic } } } class Z extends Y { public function zoo2() { return "zoo2/" . $this->nonexistingzoo(8,8,8); } public function zoo() { return $this->bar() . $this->zoo2() . X::nonexisting1(3); } } // calling static methods resolved in compile time echo X::nonexistingfoo(1,2,3); echo call_user_func_array ( array("X","nonexisting2"), array(10,20,30) ); echo Y::nonexistingfoo(1,2,3); echo Y::nonexistingfoo2(4); echo call_user_func_array ( array("Y","nonexisting3"), array("a",'b','c') ); echo Z::nonexistingstatic(); // calling instance methods $x = new X(); echo $x->bar(); echo $x->non_existing_func(1,2,3); echo call_user_func( array($x,"foo"), 5,6,7 ); $y = new Y(); echo $y->bar(); echo $y->nonexisting4(9,8,7); echo call_user_func( array($y,"bar"), 4,5,6); echo call_user_func( array($y,"nonexisting5"), 333,666,999 ); $z = new Z(); echo $z->zoo(); ?> ================================================ FILE: Testing/Tests/Compiler/abstracts.php ================================================ [expect] OK [file] ================================================ FILE: Testing/Tests/Compiler/aliased assign add.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Compiler/assign_in_call.php ================================================ [expect php] [file] x[1][2]->a[1][2] = 1); f(A::$x[1] = 1); f(A::$x = 1); u($x->x[1][2]->a[1][2] = 1); u(A::$x[1] = 1); u(A::$x = 1); } class X { private $q = 0; function __get($field) { echo "__get($field) = $this->q\n"; return $this->q; } function __set($field,$value) { echo "__set($field,$value)\n"; $this->q = $value; } } function g9() { $x = new X; echo "known:\n"; f($x->p += 1); echo "unknown:\n"; u($x->p += 2); } function g10() { $x = false; if ($x) { u($x[1][2]->f()->a[3][4][5]); u($x[1][2]->f()->a[3][4][5]+=$x[1][0]->f($a[]=$a[1])->a[3][4][5] *= $f->a->a->a->a); u($a->x[$a->u($x->x)->q += ${u($x += 1)}->f(${u($a->u($x->x)->q += ${u($x += 1)}->f(${u($a = 1)} =& $z)->x[1] = 1)} = 1)] *= $q =& $r); } } $x = true; if ($x) { function u($x) { echo "u($x)\n"; } } for($i=1;$i<=10;$i++) { echo "\ng$i:\n"; $g = "g$i"; @$g(); } echo "Done."; ?> ================================================ FILE: Testing/Tests/Compiler/assignments.php ================================================ [expect php] [file] h[$z->l]->u->v = $b[$c = ${$e = $f = $g}]->h[$z->l]->u->v; echo "---3"; echo "---4"; unknown($a = $b = $c); echo "---4"; echo "---5"; $a[][][] = $b[][][] = $c[1][2][3] = array(1,2,3); echo "---5"; var_dump($a,$b,$c); $z = array(1,2,3); echo "---6"; $u = $v = $w =& $z; echo "---6"; $u[] = "u"; $v[] = "v"; $w[] = "w"; $z[] = "z"; var_dump($u,$v,$w,$z); echo "---7"; h($aa[][][][] =& $bb[][][][]); echo "---7"; var_dump($aa,$bb); echo "---8"; unknown($a =& $b,$x); echo "---8"; $a[$c =& ${$e = $f =& $g}]->h[$z->l]->u->v =& $b[$c =& ${$e = $f = $g}]->h[$z->l]->u->v; $c =& ${$e =& $g}; $x =& $a[][][]; h($a[][][]); h($a); h($a[]); ?> ================================================ FILE: Testing/Tests/Compiler/auto_globals_001.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Compiler/auto_globals_002.php ================================================ [expect php] [file] "hello", "two"=>"world"); $GLOBALS["b"] = $a; echo $GLOBALS["b"][1]." ".$GLOBALS["b"]["two"]; ?> ================================================ FILE: Testing/Tests/Compiler/auto_globals_003.php ================================================ [expect php] [file] "; // Take reference of $GLOBALS $a = array(1=>"hello", "two"=>"world"); $b =& $GLOBALS; echo $b["a"][1]." ".$b["a"]["two"]."
    "; // Set $GLOBALS $GLOBALS["a"] = "Set via GLOBALS"."
    "; echo $a; ?> ================================================ FILE: Testing/Tests/Compiler/break_in_global_code.php ================================================ [expect ct-error] Cannot break/continue 1 level(s) [file] ================================================ FILE: Testing/Tests/Compiler/chain_ending_by_string_index.php ================================================ [expect php] [file] f = "kuku"; $c->f[2] = "x"; var_dump($c); class B { static $f; } B::$f = "hello"; B::$f[3] = "x"; var_dump(B::$f); eval('class A { static $f; }'); A::$f = "hello"; A::$f[3] = "x"; var_dump(A::$f); ?> ================================================ FILE: Testing/Tests/Compiler/chaining_test.php ================================================ [expect php] [file] a->b->c[0][1][2]->x["A"]->y["B"]->z["C"] = "Hujer"; Class1::$y->a->b->c[0][1][2]->x["A"]->y["B"]->z["C"] =& Class1::$x->a->b->c; echo Class1::$y->a->b->c[0][1][2]->x["A"]->y["B"]->z["C"][0][1][2]->x["A"]->y["B"]->z["C"]; ?> ================================================ FILE: Testing/Tests/Compiler/class_consts.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Compiler/closures_001.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Compiler/deep_copy.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Compiler/deep_copy_refbox.php ================================================ [expect php] [file] g()); __var_dump($z); ?> ================================================ FILE: Testing/Tests/Compiler/expr_init.php ================================================ [expect ct-error] Syntax error [file] ================================================ FILE: Testing/Tests/Compiler/for_loop.php ================================================ [expect php] [file] 2; $i++, $j--) { echo $i,".",$j,"\n"; } ?> ================================================ FILE: Testing/Tests/Compiler/foreach1.php ================================================ [expect exact] x => array(3) { [0] => integer(1) [1] => integer(2) [2] => integer(3) } [file] &$x); foreach ($a as $k => $v) { $x[1] = 10; echo "$k => "; var_dump($v); } ?> ================================================ FILE: Testing/Tests/Compiler/foreach_arrays.php ================================================ [expect php] [file] $v) { echo "$k-$v\n"; } $i = 10; foreach ($a as $k =>& $v) { echo "$k-$v\n"; $v = $i++; } var_dump($a); $a = array(0,1,2,3,4,5); $i = 0; foreach ($a as $k =>& $v) { $v+=100; if ($i++==0) { $a[] = 4; $a[1] = 1; unset($a[3]); } } var_dump($a); ?> ================================================ FILE: Testing/Tests/Compiler/func_get_args.php ================================================ [expect php] [file] bar('ahoj',13); ?> ================================================ FILE: Testing/Tests/Compiler/function_002.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Compiler/function_003.php ================================================ [expect php] [file] f() method"; } } $o = new A(); $o->a = new B(); $r =& $o->a->f($a); __var_dump($o, $r, $a); ?> ================================================ FILE: Testing/Tests/Compiler/function_004.php ================================================ [expect php] [file] f() method.\n"; return "ahoj"; } } class C { function &f(&$par) { echo "Method C->f() return what it gets.\n"; return $par; } } $o = new A(); $o->a = new B(); $r =& $o->a->f($a); __var_dump($o, $r, $a); $o = new A(); $o->a = new C(); $a = "Set via \$a.\n"; $r =& $o->a->f($a); __var_dump($o, $r, $a); $r = "Set via \$r\n"; __var_dump($o, $r, $a); ?> ================================================ FILE: Testing/Tests/Compiler/function_call.php ================================================ [expect exact] OK [file] ================================================ FILE: Testing/Tests/Compiler/if_statement.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Compiler/indirect_001.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Compiler/indirect_002.php ================================================ [expect php] [file] "hello", "two"=>"world"); $b = "b"; $$b = $a; echo $b[1]." ".$b["two"]; ?> ================================================ FILE: Testing/Tests/Compiler/indirect_003.php ================================================ [expect php] [file] "; // Take reference of $GLOBALS $a = array(1=>"hello", "two"=>"world"); $b = "c"; $$b =& $a; echo $c[1]." ".$c["two"]."
    "; // Set $$a $a = "b"; $$a = "Set via indirect variable"; echo $b; ?> ================================================ FILE: Testing/Tests/Compiler/indirect_004.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Compiler/indirect_005.php ================================================ [expect php] [file] "hello", "two"=>"world"); $b = "b"; $$b = $a; echo $b[1]." ".$b["two"]; } f(); ?> ================================================ FILE: Testing/Tests/Compiler/indirect_007.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Compiler/indirect_global.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Compiler/inheritance.php ================================================ [expect] ahoj [file] ================================================ FILE: Testing/Tests/Compiler/inheritance2.php ================================================ [expect] hey! [file] ================================================ FILE: Testing/Tests/Compiler/isset_unset_001.php ================================================ [expect php] [file] \n"; } function f() { echo "Testing x (object) in optimized function: "; echo isset($x).sp(); $x = 5; echo isset($x).sp(); unset($x); echo isset($x).sp(); } function g() { // no notice that $y is undefined is displayed, this is an optimized function echo "Testing x (PhpReference) in optimized function: "; echo isset($x).sp(); $x = 5; echo isset($x).sp(); unset($x); echo isset($x).sp(); $$y =& $x; } function h() { echo 'Testing $$x (created at runtime) in optimized function: '; $x = "y"; echo isset($$x).sp(); $$x = 5; echo isset($$x).sp(); unset($$x); } echo "Testing x in global code: "; echo isset($x).sp(); $x = 5; echo isset($x).sp(); unset($x); echo isset($x).sp(); f(); g(); h(); ?> ================================================ FILE: Testing/Tests/Compiler/list #26681.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Compiler/new_array_item_assignadd.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Compiler/null_hints.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Compiler/public_abstract_member.php ================================================ [expect exact] [file] ================================================ FILE: Testing/Tests/Compiler/pure_function_exists.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Compiler/pure_math_str.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Compiler/reference_semantics.php.kb ================================================ [expect exact] ----------------------------------------------- function return ----------------------------------------------- string(3) "foo" foo string(3) "foo" foo string(3) "foo" foo ----------------------------------------------- -ok- ----------------------------------------------- ok [file] array('alfa' => 'ok')); $arr =& $arr['a1']; echo '-'.$arr['alfa']."-\n"; echo "-----------------------------------------------\n"; function & foo() { $var = 'ok'; return $var; } function & bar() { return foo(); } $a =& bar(); echo "$a\n"; ?> ================================================ FILE: Testing/Tests/Compiler/self.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Compiler/static_call.php ================================================ [expect php] [file] color; } } class ChocolateBar extends Bar { public function Boo() { echo self::Foo();//call to a non-static function statically from non-static function } public static function BooStatic() { echo self::Foo();//call to a non-static function statically from static function } } $a = new ChocolateBar(); $a->Boo(); @ChocolateBar::BooStatic(); call_user_func(array($a,"Foo"));//callback to a non-static function non-staticaly @call_user_func(array("ChocolateBar","Foo"));//callback to a non-static function statically ?> ================================================ FILE: Testing/Tests/Compiler/switch.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Compiler/ternary_ex.php ================================================ [expect exact] array(2) { [1] => integer(1) [0] => integer(0) } array(4) { [0] => integer(1) [1] => integer(2) [2] => integer(3) [3] => integer(4) } array(2) { [1] => integer(1) [2] => integer(2) } integer(1) [file] function_exists('key') ? 1:0, function_exists('unknown') ? 1:0 => function_exists('unknown') ? 1:0 ); $b = array(1,2,3,4); $c = array(1=>1,2=>2); $d = $a ? 1 : 2; var_dump($a,$b,$c,$d); ?> ================================================ FILE: Testing/Tests/Compiler/ternary_short.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Compiler/this call.php ================================================ [expect php] [file] bar2("hello",1,2,3,4,5,6,7,8,9) . $this->bar2("hello") . $this->bar3("hello",1,2,3,4,5,6,7,8,9); } } $x = new X(); $x->bar(); ?> ================================================ FILE: Testing/Tests/Compiler/typehint_check.php ================================================ [expect exact] ahoj hello [file] print_hello(); } } $x = new Class1; $a = new A; $a->foo($x); class C implements J {} interface J {} function f(array $a,array &$b, C $c, C &$d, J $j) { echo "hello\n"; } $a = array(); f(array(1,2,3),$a,new C,new C, new C); ?> ================================================ FILE: Testing/Tests/DLR/__call.php ================================================ [expect php] [file] foo() ); ?> ================================================ FILE: Testing/Tests/DLR/classContext.php ================================================ [expect php] [file] add($arg1,$arg2)."\n";//call site } // prepare test arguments $arr = array(13,4,5); $number = 7; $refnumber = &$number; class x{var $bar = 10;} $x = new x(); $trida = new trida(); //global test test($trida,10, 12); test($trida,11.2, 12); test($trida,"text", 12); test($trida,$arr[1], 12); test($trida,$x->bar, 12); test($trida,$refnumber, 12); echo "---------\n"; // function test function notglobal() { global $trida; global $x; global $arr; global $refnumber; test($trida,10, 12); test($trida,11.2, 12); test($trida,"text", 12); test($trida,$arr[1], 12); test($trida,$x->bar, 12); test($trida,$refnumber, 12); } notglobal(); echo "---------\n"; //method test class method_test { function m() { global $trida; global $x; global $arr; global $refnumber; test($trida,10, 12); test($trida,11.2, 12); test($trida,"text", 12); test($trida,$arr[1], 12); test($trida,$x->bar, 12); test($trida,$refnumber, 12); } } $m = new method_test(); $m->m(); ?> ================================================ FILE: Testing/Tests/DLR/classContext1.php ================================================ [expect php] [file] m(); ?> ================================================ FILE: Testing/Tests/DLR/classContext2.php ================================================ [expect php] [file] bar($a,$b);'; $a = 1; $b = 2; //global test eval($eval_code); echo "---------\n"; // function test function notglobal() { $a = 3; $b = 4; eval($eval_code); } notglobal(); echo "---------\n"; //method test class method_test { function m() { $a = 6; $b = 7; eval($eval_code); } } $m = new method_test(); $m->m(); ?> ================================================ FILE: Testing/Tests/DLR/classcontext_include.inc ================================================ bar($a,$b); ?> ================================================ FILE: Testing/Tests/DLR/hashtable.php ================================================ [clr] [Expect exact] hello worldSystem\Object Object ( ) [file] Add("obj", $y); $x->Add("message", "hello world"); foreach ($x as $item) { print_r($item); } } test(); ?> ================================================ FILE: Testing/Tests/DLR/restrictions generics.php ================================================ [clr] [expect] A B C A B C [file] () { echo get_class(new T) . "\n"; } function bar<:T:>() { $this->foo<:T:>(); } } $x = new X; $x->bar<:A:>(); $x->bar<:B:>(); $x->bar<:C:>(); $x->bar<:A:>(); $x->bar<:B:>(); $x->bar<:C:>(); ?> ================================================ FILE: Testing/Tests/DLR/restrictions.php ================================================ [expect php] [file] add($arg1,$arg2)."\n";//call site } // prepare test arguments $arr = array(13,4,5); $number = 7; $refnumber = &$number; class x{var $bar = 10;} $x = new x(); $trida = new trida(); //global test test($trida,10, 12); test($trida,11.2, 12); test($trida,"text", 12); test($trida,$arr[1], 12); test($trida,$x->bar, 12); test($trida,$refnumber, 12); echo "---------\n"; // function test function notglobal() { global $trida; global $x; global $arr; global $refnumber; test($trida,10, 12); test($trida,11.2, 12); test($trida,"text", 12); test($trida,$arr[1], 12); test($trida,$x->bar, 12); test($trida,$refnumber, 12); } notglobal(); echo "---------\n"; //method test class method_test { function m() { global $trida; global $x; global $arr; global $refnumber; test($trida,10, 12); test($trida,11.2, 12); test($trida,"text", 12); test($trida,$arr[1], 12); test($trida,$x->bar, 12); test($trida,$refnumber, 12); } } $m = new method_test(); $m->m(); ?> ================================================ FILE: Testing/Tests/DLR/targets.php ================================================ [expect php] [file] bar($a,$b); } } $utils = new utils; $x = new foo(); $arr = array(12,$x); $ref = &$x; $a = 7; $b = 8; //PhpRuntimeChain target echo $utils->test($arr[1],$a,$b); //PhpReference target echo $utils->test($ref,$a,$b); ?> ================================================ FILE: Testing/Tests/DateTime/Phalanger.inc ================================================ ================================================ FILE: Testing/Tests/DateTime/strftime.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/DateTime/strtotime1.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/DateTime/strtotime2.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/DateTime/strtotime3.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/DateTime/strtotime4.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/DateTime/strtotime5.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/DateTime/sunrise,sunset.php.kb ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/DateTime/time.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/DateTime/timezones.php.kb ================================================ [expect php] [file] $value) { echo " { $daylight_time }, // $i\n"; $i++; } echo "};\n\n"; echo "#endregion\n"; ?> ================================================ FILE: Testing/Tests/DateTime/timezones1.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/FileSystem/Phalanger.inc ================================================ ================================================ FILE: Testing/Tests/FileSystem/basename.php ================================================ [expect php] [file] $cmd
    \n"; eval ("print_r(" . $cmd . ");"); echo "
    \n"; } $path = "/home/httpd/html/index.php"; echo basename($path); // "index.php" echo basename($path, ".php") . "\n"; // "index" $path = "http://s.cc/path/html/index.php3"; echo basename($path) . "\n"; // "index.php3" echo basename($path, ".php") . "\n"; // "index.php3" ?> ================================================ FILE: Testing/Tests/FileSystem/basename2.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/FileSystem/chdir.php ================================================ [expect php] [file] chdir($p)
    \n"; dump(chdir($p)); echo getcwd() . "
    \n"; } $dir = getcwd(); _chdir('..'); _chdir('/'); _chdir($dir); ?> ================================================ FILE: Testing/Tests/FileSystem/csv.php ================================================ [expect php] [file] $field) { echo $lineno,".",$idx,": '",addcslashes($field,"\n\t\r"),"'\n"; } } function read_file($filename) { echo "--- $filename ---\n"; $fp = fopen($filename,"rt"); if (!$fp) die("File not found!"); $lineno = 0; while (($line = fgetcsv($fp,1000,";",'"')) !== false) d($lineno++,$line); fclose($fp); } chdir(dirname(__FILE__)); //read_file("cvs.test1.csv"); //read_file("cvs.test2.csv"); echo "\n--- write ---\n"; $fp = fopen("out.csv","wt"); if (!$fp) die("File not found!"); echo fputcsv($fp,array("hello\nworld",'aaa"bbb"ccc','blah blah;','none',"tab\ttab",'space space'),';','"'),"\n", fputcsv($fp,array("hh'ee","ss\\nsadasdasd s"),';','"'),"\n", fputcsv($fp,array('""""""""""','"','','""','xxx"'),';','"'),"\n", fputcsv($fp,array('x')),"\n", fputcsv($fp,array('x\y')),"\n"; fclose($fp); echo "\n--- read ---\n"; $fp = fopen("out.csv", "rt"); if (!$fp) die("File not found!"); while (($line = fgets($fp))!==false) echo addcslashes($line,"\n\t\r"),"\n"; fclose($fp); unlink("out.csv"); ?> ================================================ FILE: Testing/Tests/FileSystem/csv.test1.csv ================================================ ;;; "as""d""ad";a"s"dx "hel lo" "w orld"; hhh ada "sadsas " asddads; asda "as sdasd x bbb; ; x ; "f" ;g "heeee llll ================================================ FILE: Testing/Tests/FileSystem/csv.test2.csv ================================================ ================================================ FILE: Testing/Tests/FileSystem/date.php ================================================ [expect php] [file] {" .date($s, $dt). "}"; } D($res); ?> ================================================ FILE: Testing/Tests/FileSystem/date2.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/FileSystem/date3.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/FileSystem/date_unix.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/FileSystem/dirname.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/FileSystem/dirname2.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/FileSystem/disk_free_space.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/FileSystem/disk_total_space.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/FileSystem/fgets.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/FileSystem/file.php ================================================ [expect php] [file] $line) { // echo "Line #{$line_num} : " . htmlspecialchars($line) . "
    \n"; //} $line_num = count($lines) - 1; $line = $lines[$line_num]; echo "Line #{$line_num} : " . htmlspecialchars($line) . "
    \n"; // Another example, let's get a web page into a string. See also file_get_contents(). $html = implode('', file('oneline.txt')); echo '['.str_replace("\n", "{\\n}\n", htmlspecialchars($html)).']'; ?> ================================================ FILE: Testing/Tests/FileSystem/file_exists.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/FileSystem/file_get_contents.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/FileSystem/filesize.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/FileSystem/fpassthru.php ================================================ [expect php] [file] <?php $fr = fopen(__FILE__, "rb"); fpassthru($fr); fclose($fr); ?> ================================================ FILE: Testing/Tests/FileSystem/fread.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/FileSystem/fread1.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/FileSystem/fread2.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/FileSystem/fs.inc ================================================ $v) $rv .= $nextindent . dump($k) . " => " . dump($v, $nextindent) . "\n"; return "$rv$indent]"; } function dump($a, $indent = "") { if (!isset($a)) return "[UNDEFINED]"; else if (is_bool($a)) return ($a) ? "[TRUE]":"[FALSE]"; else if (is_float($a)) return sprintf("[DOUBLE (%01.6f)]", $a); else if (is_int($a)) return "[INT ($a)]"; else if (is_string($a)) return "[STRING: \"$a\"]"; else if (is_array($a)) return printr($a, $indent); else return "[??? ($a)]"; } function d($a) { echo "
    " . dump($a) . "
    \n"; } ?> ================================================ FILE: Testing/Tests/FileSystem/fseek.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/FileSystem/fsockopen.php ================================================ [expect php] [file] TCP \n"; } else { $out = "GET / HTTP/1.1\r\n"; $out .= "Host: www.example.com\r\n"; $out .= "Connection: Close\r\n\r\n"; $len = 0; fwrite($fp, $out); while (!feof($fp)) { $len += strlen(fgets($fp, 128)); } fclose($fp); echo "READ: $len\n"; } ?> UDP \n"; } else { fwrite($fp, "\n"); echo fread($fp, 26); fclose($fp); } /**/ ?> ================================================ FILE: Testing/Tests/FileSystem/ftell.php ================================================ [expect php] [file] <?php include 'fs.inc'; // opens a file and read some data $fp = fopen("test.txt", "rt"); echo ($data = fgets($fp)); echo ":".ftell($fp); echo ($data = fgets($fp)); echo ":".ftell($fp); echo ($data = fgets($fp)); echo ":".ftell($fp); fclose($fp); echo "\n\n"; // opens a file and read some data $fp = fopen("test.txt", "rb"); echo ($data = fgets($fp)); echo ":".ftell($fp); echo ($data = fgets($fp)); echo ":".ftell($fp); echo ($data = fgets($fp)); echo ":".ftell($fp); fclose($fp); ?> ================================================ FILE: Testing/Tests/FileSystem/glob_up_dirs.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/FileSystem/is_dir.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/FileSystem/is_executable.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/FileSystem/noline.txt ================================================ this is a file WITHOUT an "end-of-line" ================================================ FILE: Testing/Tests/FileSystem/oneline.txt ================================================ this is a file with one EOLN ================================================ FILE: Testing/Tests/FileSystem/pathinfo.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/FileSystem/popen.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/FileSystem/readdir.php ================================================ [expect php] [file] $v) echo "[$k] => $v\n"; } printme(folder("C:\\")); printme(folder(".")); ?> ================================================ FILE: Testing/Tests/FileSystem/readfile.php ================================================ [expect php] [file] <?php chdir(dirname(__FILE__)); define('f', 'readfile.php'); readfile(f); echo "<hr>"; readfile(f); echo "<hr>"; $fr = fopen(f, "rb"); fpassthru($fr); fclose($fr); ?> ================================================ FILE: Testing/Tests/FileSystem/readline.php ================================================ [expect php] [file] " . strlen($contents); if ((++$i & 7) == 0) echo "\r\n"; } fclose($handle); print "\r\n" . strlen($contents); } ?> ================================================ FILE: Testing/Tests/FileSystem/realpath.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/FileSystem/rwseek.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/FileSystem/scandir.php ================================================ [expect php] [file] $v) echo "[$k] => $v\n"; } printme(scandir('.')); printme(scandir('./')); printme(scandir('.\\')); printme(scandir('C:\\')); ?> ================================================ FILE: Testing/Tests/FileSystem/stat.php ================================================ [comment] We have different mtime and ctime sometimes... Not tested for output, just for compiling and running. [file]
     " . $a[$key];
    
    //  $rv .= "\n    MODE => " . decbin($a['mode']);
    
      return $rv;
    } 
     
    function printdir($a, $n)
    {
    echo "

    " . realpath($n) . "\n"; foreach ($a as $k => $v) echo " [$k] => stat($v)\n (" .getstat($v). "\n )\n"; } printdir(folder("C:\\"), "C:\\"); //printdir(folder("./"), "./"); ?>

    ================================================ FILE: Testing/Tests/FileSystem/stream_context_set_option.php ================================================ [expect php] [file] array( 'method'=>"GET", 'header'=>"Accept-language: en\r\n" . "Cookie: foo=bar\r\n" ), 'other'=>array( 'method'=>"otherGET", 'header'=>"otherAccept-language: en\r\n" . "otherCookie: foo=bar\r\n" ), 'file'=>array( 'method'=>"otherGET", 'header'=>"otherAccept-language: en\r\n" . "otherCookie: foo=bar\r\n" ) ); $c = stream_context_create($opts); //$fr = fopen('fs.inc', 'rb', 0, $c); $fr = @fopen('http://www.google.com/', 'rb', 0, $c); if ($fr === false) die('NO NETWORK CONNECTION!'); stream_context_set_option($c, "wrap", "op1", "DIRECT"); stream_context_set_option($fr, "wrap", "op2", "VIA STREAM"); stream_context_set_option($c, "http", "op1", "DIRECT"); stream_context_set_option($fr, "http", "op2", "VIA STREAM"); d(stream_context_get_options($c)); d(stream_context_get_options($fr)); /* Note: in PHP only some wrappers accept the context; no filtering by wrapper name. $fr = fopen('fs.inc', 'rb', 0, $c); stream_context_set_option($fr, "wrap", "op3", "VIA STREAM"); stream_context_set_option($fr, "file", "op3", "VIA STREAM"); d(stream_context_get_options($fr)); /**/ // static include to compile fs.inc into assembly require_once('fs.inc'); ?> ================================================ FILE: Testing/Tests/FileSystem/stream_copy_to_stream.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/FileSystem/stream_copy_to_stream2.php ================================================ [expect php] [file] Read $r, Write $w\n"; $fr = @fopen("http://www.google.com/", $r); if ($fr === false) die('NO NETWORK CONNECTION!'); $fw = fopen("stream_copy_to_stream_${r}_${w}.txt", $w); echo "\n\nCOPIED: " . stream_copy_to_stream($fr, $fw) . "\n"; fclose($fr); fclose($fw); /* $f = fopen("stream_copy_to_stream_${r}_${w}.txt", "rb"); while (false !== ($c = fgetc($f))) { $c = (string)$c; //echo ord($c); if ($c == "\n") echo "[\\n]\n"; else if ($c == "\r") echo "[\\r]\r"; else if ($c == "<") echo "<"; else if ($c == ">") echo ">"; else echo $c; } fclose($f); */ unlink("stream_copy_to_stream_${r}_${w}.txt"); } //localhost("rt", "wt"); // Note: PHP ignores the read text mode //localhost("rt", "wb"); // Note: PHP ignores the read text mode localhost("rb", "wb"); localhost("rb", "wt"); //fgets(STDIN); ?> ================================================ FILE: Testing/Tests/FileSystem/summer.txt ================================================ ================================================ FILE: Testing/Tests/FileSystem/tar/Phalanger.inc ================================================ ================================================ FILE: Testing/Tests/FileSystem/tar/phalang.inc ================================================ ================================================ FILE: Testing/Tests/FileSystem/tar/tar.class.inc ================================================ Description: This class reads and writes Tape-Archive (TAR) Files and Gzip compressed TAR files, which are mainly used on UNIX systems. This class works on both windows AND unix systems, and does NOT rely on external applications!! Woohoo! Usage: Copyright (C) 2002 Josh Barger This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details at: http://www.gnu.org/copyleft/lesser.html If you use this script in your application/website, please send me an e-mail letting me know about it :) Bugs: Please report any bugs you might find to my e-mail address at joshb@npt.com. If you have already created a fix/patch for the bug, please do send it to me so I can incorporate it into my release. Version History: 1.0 04/10/2002 - InitialRelease 2.0 04/11/2002 - Merged both tarReader and tarWriter classes into one - Added support for gzipped tar files Remember to name for .tar.gz or .tgz if you use gzip compression! :: THIS REQUIRES ZLIB EXTENSION :: - Added additional comments to functions to help users - Added ability to remove files and directories from archive 2.1 04/12/2002 - Fixed serious bug in generating tar - Created another example file - Added check to make sure ZLIB is installed before running GZIP compression on TAR 2.2 05/07/2002 - Added automatic detection of Gzipped tar files (Thanks go to Jrgen Falch for the idea) - Changed "private" functions to have special function names beginning with two underscores ======================================================================= */ include 'phalang.inc'; class tar { // Unprocessed Archive Information var $filename; var $isGzipped; var $tar_file; // Processed Archive Information var $files; var $directories; var $numFiles; var $numDirectories; // Class Constructor -- Does nothing... function tar() { return true; } // Computes the unsigned Checksum of a file's header // to try to ensure valid file // PRIVATE ACCESS FUNCTION function __computeUnsignedChecksum($bytestring) { for($i=0; $i<512; $i++) $unsigned_chksum += ord($bytestring[$i]); for($i=0; $i<8; $i++) $unsigned_chksum -= ord($bytestring[148 + $i]); $unsigned_chksum += ord(" ") * 8; return $unsigned_chksum; } // Converts a NULL padded string to a non-NULL padded string // PRIVATE ACCESS FUNCTION function __parseNullPaddedString($string) { $position = strpos($string,chr(0)); return substr($string,0,$position); } // This function parses the current TAR file // PRIVATE ACCESS FUNCTION function __parseTar() { // Read Files from archive $tar_length = strlen($this->tar_file); $main_offset = 0; while($main_offset < $tar_length) { // If we read a block of 512 nulls, we are at the end of the archive if(substr($this->tar_file,$main_offset,512) == str_repeat(chr(0),512)) break; // Parse file name $file_name = $this->__parseNullPaddedString(substr($this->tar_file,$main_offset,100)); // Parse the file mode $file_mode = substr($this->tar_file,$main_offset + 100,8); // Parse the file user ID $file_uid = octdec(substr($this->tar_file,$main_offset + 108,8)); // Parse the file group ID $file_gid = octdec(substr($this->tar_file,$main_offset + 116,8)); // Parse the file size $file_size = octdec(substr($this->tar_file,$main_offset + 124,12)); // Parse the file update time - unix timestamp format $file_time = octdec(substr($this->tar_file,$main_offset + 136,12)); // Parse Checksum $file_chksum = octdec(substr($this->tar_file,$main_offset + 148,6)); // Parse user name $file_uname = $this->__parseNullPaddedString(substr($this->tar_file,$main_offset + 265,32)); // Parse Group name $file_gname = $this->__parseNullPaddedString(substr($this->tar_file,$main_offset + 297,32)); // Make sure our file is valid if($this->__computeUnsignedChecksum(substr($this->tar_file,$main_offset,512)) != $file_chksum) return false; // Parse File Contents $file_contents = substr($this->tar_file,$main_offset + 512,$file_size); /* ### Unused Header Information ### $activeFile["typeflag"] = substr($this->tar_file,$main_offset + 156,1); $activeFile["linkname"] = substr($this->tar_file,$main_offset + 157,100); $activeFile["magic"] = substr($this->tar_file,$main_offset + 257,6); $activeFile["version"] = substr($this->tar_file,$main_offset + 263,2); $activeFile["devmajor"] = substr($this->tar_file,$main_offset + 329,8); $activeFile["devminor"] = substr($this->tar_file,$main_offset + 337,8); $activeFile["prefix"] = substr($this->tar_file,$main_offset + 345,155); $activeFile["endheader"] = substr($this->tar_file,$main_offset + 500,12); */ if($file_size > 0) { // Increment number of files $this->numFiles++; // Create us a new file in our array $activeFile = &$this->files[]; // Asign Values $activeFile["name"] = $file_name; $activeFile["mode"] = $file_mode; $activeFile["size"] = $file_size; $activeFile["time"] = $file_time; $activeFile["user_id"] = $file_uid; $activeFile["group_id"] = $file_gid; $activeFile["user_name"] = $file_uname; $activeFile["group_name"] = $file_gname; $activeFile["checksum"] = $file_chksum; $activeFile["file"] = $file_contents; } else { // Increment number of directories $this->numDirectories++; // Create a new directory in our array $activeDir = &$this->directories[]; // Assign values $activeDir["name"] = $file_name; $activeDir["mode"] = $file_mode; $activeDir["time"] = $file_time; $activeDir["user_id"] = $file_uid; $activeDir["group_id"] = $file_gid; $activeDir["user_name"] = $file_uname; $activeDir["group_name"] = $file_gname; $activeDir["checksum"] = $file_chksum; } // Move our offset the number of blocks we have processed $main_offset += 512 + (ceil($file_size / 512) * 512); } return true; } // Read a non gzipped tar file in for processing // PRIVATE ACCESS FUNCTION function __readTar($filename='') { // Set the filename to load if(!$filename) $filename = $this->filename; // Read in the TAR file $fp = fopen($filename,"rb"); $this->tar_file = fread($fp,filesize($filename)); fclose($fp); if($this->tar_file[0] == chr(31) && $this->tar_file[1] == chr(139) && $this->tar_file[2] == chr(8)) { if(!function_exists("gzinflate")) return false; $this->isGzipped = TRUE; $this->tar_file = gzinflate(substr($this->tar_file,10,-4)); } // Parse the TAR file $this->__parseTar(); return true; } // Generates a TAR file from the processed data // PRIVATE ACCESS FUNCTION function __generateTAR() { // Clear any data currently in $this->tar_file unset($this->tar_file); // Generate Records for each directory, if we have directories if($this->numDirectories > 0) { foreach($this->directories as $key => $information) { unset($header); // Generate tar header for this directory // Filename, Permissions, UID, GID, size, Time, checksum, typeflag, linkname, magic, version, user name, group name, devmajor, devminor, prefix, end $header .= str_pad($information["name"],100,chr(0)); $header .= str_pad(decoct($information["mode"]),7,"0",STR_PAD_LEFT) . chr(0); $header .= str_pad(decoct($information["user_id"]),7,"0",STR_PAD_LEFT) . chr(0); $header .= str_pad(decoct($information["group_id"]),7,"0",STR_PAD_LEFT) . chr(0); $header .= str_pad(decoct(0),11,"0",STR_PAD_LEFT) . chr(0); $header .= str_pad(decoct($information["time"]),11,"0",STR_PAD_LEFT) . chr(0); $header .= str_repeat(" ",8); $header .= "5"; $header .= str_repeat(chr(0),100); $header .= str_pad("ustar",6,chr(32)); $header .= chr(32) . chr(0); $header .= str_pad("",32,chr(0)); $header .= str_pad("",32,chr(0)); $header .= str_repeat(chr(0),8); $header .= str_repeat(chr(0),8); $header .= str_repeat(chr(0),155); $header .= str_repeat(chr(0),12); $header = to_binary($header); // Compute header checksum $checksum = str_pad(decoct($this->__computeUnsignedChecksum($header)),6,"0",STR_PAD_LEFT); for($i=0; $i<6; $i++) { $header[(148 + $i)] = substr($checksum,$i,1); } $header[154] = chr(0); $header[155] = chr(32); // Add new tar formatted data to tar file contents $this->tar_file .= $header; } } // Generate Records for each file, if we have files (We should...) if($this->numFiles > 0) { foreach($this->files as $key => $information) { unset($header); // Generate the TAR header for this file // Filename, Permissions, UID, GID, size, Time, checksum, typeflag, linkname, magic, version, user name, group name, devmajor, devminor, prefix, end $header .= str_pad($information["name"],100,chr(0)); $header .= str_pad(decoct($information["mode"]),7,"0",STR_PAD_LEFT) . chr(0); $header .= str_pad(decoct($information["user_id"]),7,"0",STR_PAD_LEFT) . chr(0); $header .= str_pad(decoct($information["group_id"]),7,"0",STR_PAD_LEFT) . chr(0); $header .= str_pad(decoct($information["size"]),11,"0",STR_PAD_LEFT) . chr(0); $header .= str_pad(decoct($information["time"]),11,"0",STR_PAD_LEFT) . chr(0); $header .= str_repeat(" ",8); $header .= "0"; $header .= str_repeat(chr(0),100); $header .= str_pad("ustar",6,chr(32)); $header .= chr(32) . chr(0); $header .= str_pad($information["user_name"],32,chr(0)); // How do I get a file's user name from PHP? $header .= str_pad($information["group_name"],32,chr(0)); // How do I get a file's group name from PHP? $header .= str_repeat(chr(0),8); $header .= str_repeat(chr(0),8); $header .= str_repeat(chr(0),155); $header .= str_repeat(chr(0),12); $header = ($header); // Compute header checksum $checksum = str_pad(decoct($this->__computeUnsignedChecksum($header)),6,"0",STR_PAD_LEFT); for($i=0; $i<6; $i++) { $header[(148 + $i)] = substr($checksum,$i,1); } $header[154] = chr(0); $header[155] = chr(32); // Pad file contents to byte count divisible by 512 $file_contents = str_pad($information["file"],(ceil($information["size"] / 512) * 512),chr(0)); // Add new tar formatted data to tar file contents $this->tar_file .= $header . $file_contents; } } // Add 512 bytes of NULLs to designate EOF $this->tar_file .= str_repeat(chr(0),512); return true; } // Open a TAR file function openTAR($filename) { // Clear any values from previous tar archives unset($this->filename); unset($this->isGzipped); unset($this->tar_file); unset($this->files); unset($this->directories); unset($this->numFiles); unset($this->numDirectories); // If the tar file doesn't exist... if(!file_exists($filename)) return false; $this->filename = $filename; // Parse this file $this->__readTar(); return true; } // Appends a tar file to the end of the currently opened tar file function appendTar($filename) { // If the tar file doesn't exist... if(!file_exists($filename)) return false; $this->__readTar($filename); return true; } // Retrieves information about a file in the current tar archive function getFile($filename) { if($this->numFiles > 0) { foreach($this->files as $key => $information) { if($information["name"] == $filename) return $information; } } return false; } // Retrieves information about a directory in the current tar archive function getDirectory($dirname) { if($this->numDirectories > 0) { foreach($this->directories as $key => $information) { if($information["name"] == $dirname) return $information; } } return false; } // Check if this tar archive contains a specific file function containsFile($filename) { if($this->numFiles > 0) { foreach($this->files as $key => $information) { if($information["name"] == $filename) return true; } } return false; } // Check if this tar archive contains a specific directory function containsDirectory($dirname) { if($this->numDirectories > 0) { foreach($this->directories as $key => $information) { if($information["name"] == $dirname) return true; } } return false; } // Add a directory to this tar archive function addDirectory($dirname) { if(!file_exists($dirname)) return false; // Get directory information $file_information = stat($dirname); // Add directory to processed data $this->numDirectories++; $activeDir = &$this->directories[]; $activeDir["name"] = $dirname; $activeDir["mode"] = $file_information["mode"]; $activeDir["time"] = $file_information["time"]; $activeDir["user_id"] = $file_information["uid"]; $activeDir["group_id"] = $file_information["gid"]; $activeDir["checksum"] = $checksum; return true; } // Add a file to the tar archive function addFile($filename) { // Make sure the file we are adding exists! if(!file_exists($filename)) return false; // Make sure there are no other files in the archive that have this same filename if($this->containsFile($filename)) return false; // Get file information $file_information = stat($filename); // Read in the file's contents $fp = fopen($filename,"rb"); $file_contents = fread($fp,filesize($filename)); fclose($fp); // Add file to processed data $this->numFiles++; $activeFile = &$this->files[]; $activeFile["name"] = $filename; $activeFile["mode"] = $file_information["mode"]; $activeFile["user_id"] = $file_information["uid"]; $activeFile["group_id"] = $file_information["gid"]; $activeFile["size"] = $file_information["size"]; $activeFile["time"] = $file_information["mtime"]; $activeFile["checksum"] = $checksum; $activeFile["user_name"] = ""; $activeFile["group_name"] = ""; $activeFile["file"] = $file_contents; return true; } // Remove a file from the tar archive function removeFile($filename) { if($this->numFiles > 0) { foreach($this->files as $key => $information) { if($information["name"] == $filename) { $this->numFiles--; unset($this->files[$key]); return true; } } } return false; } // Remove a directory from the tar archive function removeDirectory($dirname) { if($this->numDirectories > 0) { foreach($this->directories as $key => $information) { if($information["name"] == $dirname) { $this->numDirectories--; unset($this->directories[$key]); return true; } } } return false; } // Write the currently loaded tar archive to disk function saveTar() { if(!$this->filename) return false; // Write tar to current file using specified gzip compression $this->toTar($this->filename,$this->isGzipped); return true; } // Saves tar archive to a different file than the current file function toTar($filename,$useGzip) { if(!$filename) return false; // Encode processed files into TAR file format $this->__generateTar(); // GZ Compress the data if we need to if($useGzip) { // Make sure we have gzip support if(!function_exists("gzencode")) return false; $file = gzencode($this->tar_file); } else { $file = $this->tar_file; } // Write the TAR file $fp = fopen($filename,"wb"); fwrite($fp,$file); fclose($fp); return true; } } ?> ================================================ FILE: Testing/Tests/FileSystem/tar/tar_test.php ================================================ [expect php] [file] addFile('./test.pdf'); $tar->toTar('./test_create.tar', false); $tar1 = new tar(); $opened = $tar1->openTAR('./test_create.tar'); if ($opened) { $soubor = $tar1->getFile('./test.pdf'); echo $soubor["file"]; } else { echo "FAILED TO OPEN ARCHIVE"; } } ?> ================================================ FILE: Testing/Tests/FileSystem/test.txt ================================================ PHP.NET Compiler test log

    PHP.NET Compiler test log

    (100%) 1 succeeded, 0 failed
    Test ResultCompiler error outputExpected test resultExpected test outputReal script output
    C:\Project\PHP.NET\Source\Testing\PhpNetTester\Tests\Honza\new\stream_context_set_option.php: SUCCEEDED/td>
    SuccessNo errorsSuccess
    [ARRAY
      [STRING: "http"] => [ARRAY
        [STRING: "method"] => [STRING: "GET"]
        [STRING: "header"] => [STRING: "Accept-language: en
    Cookie: foo=bar
    "]
        [STRING: "op1"] => [STRING: "DIRECT"]
        [STRING: "op2"] => [STRING: "VIA STREAM"]
      ]
      [STRING: "other"] => [ARRAY
        [STRING: "method"] => [STRING: "otherGET"]
        [STRING: "header"] => [STRING: "otherAccept-language: en
    otherCookie: foo=bar
    "]
      ]
      [STRING: "file"] => [ARRAY
        [STRING: "method"] => [STRING: "otherGET"]
        [STRING: "header"] => [STRING: "otherAccept-language: en
    otherCookie: foo=bar
    "]
      ]
      [STRING: "wrap"] => [ARRAY
        [STRING: "op1"] => [STRING: "DIRECT"]
        [STRING: "op2"] => [STRING: "VIA STREAM"]
      ]
    ]
    [ARRAY
      [STRING: "http"] => [ARRAY
        [STRING: "method"] => [STRING: "GET"]
        [STRING: "header"] => [STRING: "Accept-language: en
    Cookie: foo=bar
    "]
        [STRING: "op1"] => [STRING: "DIRECT"]
        [STRING: "op2"] => [STRING: "VIA STREAM"]
      ]
      [STRING: "other"] => [ARRAY
        [STRING: "method"] => [STRING: "otherGET"]
        [STRING: "header"] => [STRING: "otherAccept-language: en
    otherCookie: foo=bar
    "]
      ]
      [STRING: "file"] => [ARRAY
        [STRING: "method"] => [STRING: "otherGET"]
        [STRING: "header"] => [STRING: "otherAccept-language: en
    otherCookie: foo=bar
    "]
      ]
      [STRING: "wrap"] => [ARRAY
        [STRING: "op1"] => [STRING: "DIRECT"]
        [STRING: "op2"] => [STRING: "VIA STREAM"]
      ]
    ]
    [ARRAY
      [STRING: "http"] => [ARRAY
        [STRING: "method"] => [STRING: "GET"]
        [STRING: "header"] => [STRING: "Accept-language: en
    Cookie: foo=bar
    "]
        [STRING: "op1"] => [STRING: "DIRECT"]
        [STRING: "op2"] => [STRING: "VIA STREAM"]
      ]
      [STRING: "other"] => [ARRAY
        [STRING: "method"] => [STRING: "otherGET"]
        [STRING: "header"] => [STRING: "otherAccept-language: en
    otherCookie: foo=bar
    "]
      ]
      [STRING: "file"] => [ARRAY
        [STRING: "method"] => [STRING: "otherGET"]
        [STRING: "header"] => [STRING: "otherAccept-language: en
    otherCookie: foo=bar
    "]
      ]
      [STRING: "wrap"] => [ARRAY
        [STRING: "op1"] => [STRING: "DIRECT"]
        [STRING: "op2"] => [STRING: "VIA STREAM"]
      ]
    ]
    [ARRAY
      [STRING: "http"] => [ARRAY
        [STRING: "method"] => [STRING: "GET"]
        [STRING: "header"] => [STRING: "Accept-language: en
    Cookie: foo=bar
    "]
        [STRING: "op1"] => [STRING: "DIRECT"]
        [STRING: "op2"] => [STRING: "VIA STREAM"]
      ]
      [STRING: "other"] => [ARRAY
        [STRING: "method"] => [STRING: "otherGET"]
        [STRING: "header"] => [STRING: "otherAccept-language: en
    otherCookie: foo=bar
    "]
      ]
      [STRING: "file"] => [ARRAY
        [STRING: "method"] => [STRING: "otherGET"]
        [STRING: "header"] => [STRING: "otherAccept-language: en
    otherCookie: foo=bar
    "]
      ]
      [STRING: "wrap"] => [ARRAY
        [STRING: "op1"] => [STRING: "DIRECT"]
        [STRING: "op2"] => [STRING: "VIA STREAM"]
      ]
    ]
    ================================================ FILE: Testing/Tests/FileSystem/testinc.php ================================================ [expect php] [file] "YES", 10 => "ten", "10" => 'TEN', 333 => array(3,3,3))); d("044"+0); ?> ================================================ FILE: Testing/Tests/FileSystem/touch.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/FileSystem/touch.txt ================================================ ================================================ FILE: Testing/Tests/FileSystem/twoline.txt ================================================ This is a file with two EOLNs. First line is empty. ================================================ FILE: Testing/Tests/FileSystem/winter.txt ================================================ ================================================ FILE: Testing/Tests/FileSystem/zip/zip.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Math/Phalanger.inc ================================================ ================================================ FILE: Testing/Tests/Math/abs.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Math/atan2.php ================================================ [expect php] [file] \n"; echo round(atan(-10 / 20)*180/3.14)." deg\n"; //1 echo round(atan(-20 / 10)*180/3.14)." deg\n"; echo round(atan(-20 / -10)*180/3.14)." deg\n"; // t echo round(atan(-10 / -20)*180/3.14)." deg\n"; // t echo round(atan(10 / -20)*180/3.14)." deg\n"; // t echo round(atan(20 / -10)*180/3.14)." deg\n"; // t echo round(atan(20 / 10)*180/3.14)." deg\n"; echo round(atan(10 / 20)*180/3.14)." deg\n"; // 8 ?> ================================================ FILE: Testing/Tests/Math/base_convert.php ================================================ [comment] 101000110111001100110100php [expect php] [file] ================================================ FILE: Testing/Tests/Math/bindec.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Math/ceil.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Math/cos.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Math/decbin.php ================================================ [expect php] [file]
    (-1, -5435, 2.14, 0, 26)\n";
    
    echo decbin(-1) . "\n";
    echo decbin(-5435) . "\n";
    echo decbin(2.14) . "\n";
    echo decbin(0) . "\n";
    echo decbin(26);
    
    ?> 
    
    ================================================ FILE: Testing/Tests/Math/dechex.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Math/decoct.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Math/deg2rad.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Math/exp.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Math/floor.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Math/fmod.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Math/hexdec.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Math/max.php ================================================ [expect php] [file] $v) echo "[$k] => $v\n"; } // With multiple arrays, max compares from left to right // so in our example: 2 == 2, but 4 < 5 $val = max(array(2, 4, 8), array(2, 5, 7)); // array(2, 5, 7) printme($val); echo "\n\n"; // If both an array and non-array are given, the array // is always returned as it's seen as the largest $val = max('string', array(2, 5, 7), 42); // array(2, 5, 7) printme($val); echo "\n\n"; ?> ================================================ FILE: Testing/Tests/Math/min.php ================================================ [expect php] [file] $v) echo "[$k] => $v\n"; } // With multiple arrays, min compares from left to right // so in our example: 2 == 2, but 4 < 5 $val = min(array(2, 4, 8), array(2, 5, 1)); // array(2, 4, 8) printme($val); echo "\n\n"; // If both an array and non-array are given, the array // is never returned as it's considered the largest echo $val = min('string', array(2, 5, 7), 42); // string echo "\n\n"; ?> ================================================ FILE: Testing/Tests/Math/modulo_warn.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Math/octdec.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Math/pow.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Math/rad2deg.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Math/round.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Math/sin.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Math/sqrt.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Math/tan.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Math/uniqid.php ================================================ [expect] prefix1 [expect] prefix2 [file] ================================================ FILE: Testing/Tests/Misc/Phalanger.inc ================================================ ================================================ FILE: Testing/Tests/Misc/calendar_extension.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Misc/dir_read.php ================================================ [expect php] [file] read() !== FALSE) { // test for [CastToFalse] in Directory::read() method echo "$file\n"; } $dir->close(); } foo(); ?> ================================================ FILE: Testing/Tests/Misc/fgetcsv #27492.php ================================================ [expect php] [file] > {$fname}, enclosure {$enclosure}\n\n"; $csvFile = fopen(dirname(__FILE__)."/".$fname, 'r'); if ($csvFile !== false) { while (($csvLine = fgetcsv($csvFile, 0, ",",$enclosure)) !== false) { if ($csvLine == null) return; // invalid stream handle echo "\n"; foreach ($csvLine as $index => $value) echo "[{$index}] = \"{$value}\"\n"; } } fclose($csvFile); } test('test1.csv'); test('test2.csv'); test('test3.csv'); test('test4.csv'); test('test4.csv',"'"); ?> ================================================ FILE: Testing/Tests/Misc/hash functions #26667.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Misc/ini_parse.php ================================================ [expect php] [file] $val) { echo "$key => "; if (is_array($val)) { echo "\n"; foreach ($val as $key2 => $val2) { echo " $key2 => $val2\n"; } } else echo "$val\n"; } } define("USER_CONSTANT", 123); chdir(dirname(__FILE__)); dump(parse_ini_file("sample.ini", false)); dump(parse_ini_file("sample.ini", true)); dump(parse_ini_string(" [sec1] x=1 y=2 [sec2] ano=Yes ne=No [sec3] multiline=\" line1 line2 line3\" ",false)) ?> ================================================ FILE: Testing/Tests/Misc/json #27838.php ================================================ [expect php] [file] &'\""); test(array(1,2,3,4,array(1,2,'x'=>'y'))); test(array ('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5)); // examples from http://www.php.net/manual/en/function.json-encode.php $a = array('',"'bar'",'"baz"','&blong&'); echo "Normal: ", json_encode($a), "\n"; echo "Tags: ", json_encode($a,JSON_HEX_TAG), "\n"; echo "Apos: ", json_encode($a,JSON_HEX_APOS), "\n"; echo "Quot: ", json_encode($a,JSON_HEX_QUOT), "\n"; echo "Amp: ", json_encode($a,JSON_HEX_AMP), "\n"; echo "All: ", json_encode($a,JSON_HEX_TAG|JSON_HEX_APOS|JSON_HEX_QUOT|JSON_HEX_AMP), "\n\n"; $b = array(); echo "Empty array output as array: ", json_encode($b), "\n"; echo "Empty array output as object: ", json_encode($b, JSON_FORCE_OBJECT), "\n\n"; $c = array(array(1,2,3)); echo "Non-associative array output as array: ", json_encode($c), "\n"; echo "Non-associative array output as object: ", json_encode($c, JSON_FORCE_OBJECT), "\n\n"; // TODO: unicode has to be tested ?> ================================================ FILE: Testing/Tests/Misc/lexer.php ================================================ [expect php] [file] $$$x0xx"}}x"} = 1; } } ?>'; display_tokens(token_get_all($code)); ?> ================================================ FILE: Testing/Tests/Misc/locale.php ================================================ [expect exact] string(1) "C" double(1.54) double(Infinity) 654564.145400 Sat Saturday Apr April -------------- string(19) "Danish_Denmark.1252" double(1.54) double(Infinity) 654564,145400 lo lordag apr april -------------- string(25) "Czech_Czech Republic.1250" double(1.54) double(Infinity) 654564,145400 so sobota IV duben -------------- [file] ================================================ FILE: Testing/Tests/Misc/output2.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Misc/sample.ini ================================================ first=outofsection ; comment ; indented comment [section] [indented section] [ section with whitespaces ] [s1] crash=NO bugs=NONE one runtime to rule them all = CLR ano=yEs thread_count = 12 error_reporting = (E_ALL | E_NOTICE) & ~E_ERROR precedence1 = 1 & 3 | 5 precedence2 = 5 | 3 & 1 precedence3 = (1 & 3) | 5 precedence4 = 1 & (3 | 5) precedence5 = (5 | 3) & 1 precedence6 = 5 | (3 & 1) [s2] quoted1="a | b & c" quoted2="hello world" quoted3="to be or not to be" [s3] system = TRUE user = USER_CONSTANT bad = NO_SUCH_CONSTANT [s4] neg = ~0 ================================================ FILE: Testing/Tests/Misc/stack_trace.inc ================================================ ================================================ FILE: Testing/Tests/Misc/stack_trace.php ================================================ [expect] array ( [0] => array ( [line] => 6 [column] => 3 [file] => stack_trace.inc [function] => j ) [1] => array ( [line] => 4 [column] => 3 [file] => __input.txt inside eval (on line 11, column 1) [function] => i ) [2] => array ( [line] => 4 [column] => 27 [file] => __input.txt [function] => h ) [3] => array ( [line] => 4 [column] => 27 [file] => __input.txt [function] => array_map ) [4] => array ( [line] => 18 [column] => 1 [file] => __input.txt [function] => InlinedLambda ) [5] => array ( [line] => 18 [column] => 1 [file] => __input.txt [function] => f ) ) [file] ================================================ FILE: Testing/Tests/Misc/str_getcsv #26691.php ================================================ [expect php] [file] > {$fname}, enclosure {$enclosure}\n\n"; $csvData = file_get_contents(dirname(__FILE__)."/".$fname); $csvLine = str_getcsv($csvData, ",",$enclosure); foreach ($csvLine as $index => $value) echo "[{$index}] = \"{$value}\"\n"; } test('test1.csv'); test('test2.csv'); test('test3.csv'); test('test4.csv'); test('test4.csv',"'"); var_dump(str_getcsv(null)); var_dump(str_getcsv("")); var_dump(str_getcsv(",")); ?> ================================================ FILE: Testing/Tests/Misc/test1.csv ================================================ a,b,c "1","2","3" "1","2","3" ================================================ FILE: Testing/Tests/Misc/test2.csv ================================================ a, b ,c "1","2","3" "1","2","3" "1","2",'3',"four","\"hello\"","\\world\\", \"bye" "super ""cool"" car", super "cool" car "" x, y"z one, ,three, "enclosed"and not enclosed and "enclosed" ,two,"3", with tab prefixed, ""x "enclosed but not closed ================================================ FILE: Testing/Tests/Misc/test3.csv ================================================ "multi line element,here.. ..","second multiline element" ================================================ FILE: Testing/Tests/Misc/test4.csv ================================================ "1","2","3" "1",'2',\3\ ================================================ FILE: Testing/Tests/Misc/tokens.php ================================================ [expect php] [file] $value) if ($name[0] == "T" && $name[1] == "_") $tokens[$name] = $value; asort($tokens); foreach ($tokens as $name => $value) echo "$name = $value,\n"; ?> ================================================ FILE: Testing/Tests/Misc/user_error_handlers.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Objects/Phalanger.inc ================================================ ================================================ FILE: Testing/Tests/Objects/__invoke.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Objects/__tostringbug.php ================================================ [expect php] [file] "; ?> ================================================ FILE: Testing/Tests/Objects/accessing property line number #26052.php ================================================ [expect php] [file] id = 10; $neco = new foo(); $neco->jo = $this; $neco->jo->id = 4; $prom = "id"; $this->$prom = 5; } } $c = new TestClass (); ?> ================================================ FILE: Testing/Tests/Objects/conditional1.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Objects/conditional2.php ================================================ [expect exact] AB [file] ================================================ FILE: Testing/Tests/Objects/conditional_base_class.php ================================================ [expect] OK [file] ================================================ FILE: Testing/Tests/Objects/constant_test.php ================================================ [expect exact] 3.14 2.71 3.14 2.71 [file] ================================================ FILE: Testing/Tests/Objects/convobjtoany.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Objects/convobjtostr.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Objects/evaled_parent.php ================================================ [expect] 1 [file] ================================================ FILE: Testing/Tests/Objects/field_inheritance1.php ================================================ [expect php] [file] a, $this->b, $this->c); } function bar() { echo __METHOD__ . "\n"; var_dump($this->a, $this->b, $this->c); } } class B extends A { private $a = 1; //private $b = 1; //private $c = 1; function foo() { var_dump($this->a, $this->b, $this->c); } } $x = new A; $x->foo(); $x = new B; $x->foo(); $x->bar(); ?> ================================================ FILE: Testing/Tests/Objects/field_inheritance2.php ================================================ [expect php] [file] a, $this->b, $this->c); } function bar() { echo __METHOD__ . "\n"; var_dump($this->a, $this->b, $this->c); } } class B extends A { protected $a = 1; protected $b = 1; //private $c = 1; function foo() { var_dump($this->a, $this->b, $this->c); } } $x = new A; $x->foo(); $x = new B; $x->foo(); $x->bar(); ?> ================================================ FILE: Testing/Tests/Objects/field_inheritance3.php ================================================ [expect php] [file] a, $this->b, $this->c); } function bar() { echo __METHOD__ . "\n"; var_dump($this->a, $this->b, $this->c); } } class B extends A { public $a = 1; public $b = 1; public $c = 1; function foo() { var_dump($this->a, $this->b, $this->c); } } $x = new A; $x->foo(); $x = new B; $x->foo(); $x->bar(); ?> ================================================ FILE: Testing/Tests/Objects/getter_setter_bug28444.php ================================================ [expect php] [file] = 5.0.4 because that is the version where // getter/setter behavior was somewhat changed class Object { public $x; function __construct($x) { $this->x = $x; } } class Overloaded { var $props; function __construct($x) { $this->x = new Object($x); } function __get($prop) { return $this->props[$prop]; } function __set($prop, $val) { $this->props[$prop] = $val; } } $y = new Overloaded(2); echo $y->x->x, " "; // Prints 2... echo $y->x->x = 3; //Should print 3... ?> ================================================ FILE: Testing/Tests/Objects/instanceof.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Objects/new_via_unknown_ctor.php ================================================ [expect] OK [file] ================================================ FILE: Testing/Tests/Objects/object_creation_test.php ================================================ [expect] 2141 [file] ================================================ FILE: Testing/Tests/Objects/object_dump.php.skip ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Objects/objop.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Objects/objopstr.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Objects/overrides #1285.php ================================================ [expect php] [file] foo(0); $x->foo(0, 1); $x->foo(0, 1, 2); } class A implements I { function FOO($a, $b = 'B') { echo "\nA - ".$a.$b; } } class B extends A { function Foo($a, $b = 'B', $c = 'C') { echo "\nB - ".$a.$b.$c; } } class X { function fOO($a, $b = 'B', $c = 'C') { echo "\nX - ".$a.$b.$c; } } class C extends X implements I { } class D extends C { function fOO($a, $b = 'B', $c = 'C', $d = 'D') { echo "\nD - ".$a.$b.$c.$d; } } test(new A); test(new B); test(new C); test(new D); ?> ================================================ FILE: Testing/Tests/Objects/static_field_inheritance1.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Objects/static_field_inheritance2.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Objects/static_field_inheritance3.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Objects/static_field_test.php ================================================ [expect exact] 131 [file] ================================================ FILE: Testing/Tests/Objects/static_inheritence.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Objects/static_method_test.php ================================================ [expect exact] 1A2BA2BAC [file] ================================================ FILE: Testing/Tests/Objects/static_object_vars.php ================================================ [expect exact] array(1) { ["y"]=> integer(2) } array(1) { ["y"]=> integer(2) } array(2) { ["y"]=> integer(2) ["x"]=> &integer(1) } y - 2 [file] $value) echo "$key - $value\n" ?> ================================================ FILE: Testing/Tests/Objects/sys_class_const.php ================================================ [expect ct-error] [file] ================================================ FILE: Testing/Tests/Objects/this.php.error ================================================ [expect php] [file] a = 1; echo $this->a; } class A { var $b; static function m() { $this = 1; echo $this; $this->a = 1; echo $this->a; $this->b = 1; echo $this->b; } function n() { $this = 1; echo $this; $this->a = 1; echo $this->a; $this->b = 1; echo $this->b; } } $this = 1; echo $this; $this->a = 1; echo $this->a; ?> ================================================ FILE: Testing/Tests/Objects/this2.php ================================================ [exact php] [file] x->y = "Master"; $this->x[0] = "Blaster"; __var_dump($this); } } ?> ================================================ FILE: Testing/Tests/PHP.NET/App.config ================================================ ================================================ FILE: Testing/Tests/PHP.NET/AppLib.config ================================================ ================================================ FILE: Testing/Tests/PHP.NET/CSharpLibrary.csproj ================================================  Debug AnyCPU 8.0.50727 2.0 {B466C784-9BC9-42DE-9C83-C962C9580402} Library Properties CSharpLibrary CSharpLibrary 3.5 v2.0 true full false bin\ DEBUG;TRACE prompt 4 AllRules.ruleset pdbonly true bin\Release\ TRACE prompt 4 AllRules.ruleset ================================================ FILE: Testing/Tests/PHP.NET/Class1.cs ================================================ using System; using System.Collections.Generic; using System.Text; namespace CS { public interface I1 { void f1(); } public interface I2 : I1 { void f2(); } public interface I3 : I1, I2 { void f3(); } public struct C { public C(int x) { } } public struct D { } } ================================================ FILE: Testing/Tests/PHP.NET/CustomAttributes.php ================================================ { const Hello = "Hello"; function __construct() { echo "hello"; } [My("ftion")] function [My("retval")] &g<:U,[My("typeargV")]V,W:>([Out,My("parameter")] U &$x) { } function f<:A = System:::String,B = Y,C = int:>() { } } [AttributeUsage(AttributeTargets::All)] class MyAttribute extends Attribute { function __construct($x) { } } class Program { function Main() { } } ?> ================================================ FILE: Testing/Tests/PHP.NET/Evals1/Test1.php ================================================ f(); var_dump(new LibX); $x = 1; if ($x) { class Q {} } eval(' class P extends Q { } '); eval(' class A extends C { } class D extends A { } class E extends LibX { } '); class F extends P { } var_dump(new Q, new P, new A, new D, new E, new F); $out = ob_get_contents(); ob_end_clean(); $EXPECTED = "object(LibX)(0) { } object(Q)(0) { } object(P)(0) { } object(A)(0) { } object(D)(0) { } object(E)(0) { } object(F)(0) { } "; echo $out == $EXPECTED ? "OK" : "ERROR", "\n"; } } ?> ================================================ FILE: Testing/Tests/PHP.NET/Evals1/run.cmd ================================================ ..\..\..\..\Deployment\bin\phpc /pure /target:exe Test1.php /r:bin/Lib.dll /nowarn:20,24 >NUL peverify bin\Test1.exe /nologo bin\Test1.exe pause ================================================ FILE: Testing/Tests/PHP.NET/Exceptions/App.config ================================================
    ================================================ FILE: Testing/Tests/PHP.NET/Exceptions/dynamic-stub-generator.php ================================================ ================================================ FILE: Testing/Tests/PHP.NET/Exceptions/exceptions.php ================================================ code}]: {$this->message}\n"; } public function customFunction() { echo "A Custom function for this type of exception\n"; } } } try { throw new MyException("My message."); } catch(Exception $e) { echo "PHP Exception: ".($e->getMessage()); } try { Int32::Parse("aa"); } catch(System:::Exception $e) { echo "\nCLR Exception: ".($e->Message); } ?> ================================================ FILE: Testing/Tests/PHP.NET/Exceptions/phalanger-exec.bat ================================================ ..\..\..\..\Deployment\bin\phpc /lang:CLR exceptions.php @echo "===PHALANGER===" @bin\exceptions.exe pause ================================================ FILE: Testing/Tests/PHP.NET/Generics, New, InstanceOf.php ================================================ { } class C<:A:> { } class Program { static function Main() { self::InstaceOfs<:string:>(); } static function InstanceOfs<:T:>() { echo "---------"; echo new int instanceof int; echo "\n---------\n"; echo new T instanceof T; echo "\n---------\n"; echo new T<:int:> instanceof T<:int:>; echo "\n---------\n"; echo new B<:T:> instanceof B<:T:>; echo "\n---------\n"; echo new T<:T:> instanceof T<:T:>; echo "\n---------\n"; echo new C<:int:> instanceof C<:int:>; echo "\n---------\n"; echo new Unk instanceof Unk; echo "\n---------\n"; echo new Unk<:int, string, bool, double:> instanceof Unk<:int, string, bool, double:>; echo "\n---------\n"; echo new Unk1<:int, Unk2<:string:>:> instanceof Unk1<:int, Unk2<:string:>:>; echo "\n---------\n"; echo new T<:Unk1:> instanceof T<:Unk1:>; echo "\n---------\n"; echo new T<:int, T<:Unk:>:> instanceof T<:int, T<:Unk:>:>; echo "\n---------\n"; echo new T<:int, C<:Unk:>:> instanceof T<:int, C<:Unk:>:>; echo "\n---------\n"; if ($x) { class D<:W:> {} } else if ($y) { class D<:W1,W2:> { } } else { class D { } } echo new D instanceof D; echo "\n---------\n"; echo new D<:int:> instanceof D<:int:>; echo "\n---------\n"; echo new D<:int, string:> instanceof D<:int, string:>; echo "\n---------\n"; echo new C<:C<:D:>:> instanceof C<:C<:D:>:>; echo "\n---------\n"; $t = "int"; echo new C<:$t:> instanceof C<:$t:>; echo "\n---------\n"; $t = "C"; echo new $t<:$t:> instanceof $t<:$t:>; echo "\n---------\n"; $t = "C<:int, C<:int, string:>, D<:D:> :>"; echo new $t instanceof $t; echo "\n---------\n"; $t = "C<:int, C<:int, string:, D<:D:> :>"; echo new $t instanceof $t; echo "\n---------\n"; $t = "C<:int, C<::> :>"; echo new $t instanceof $t; echo "\n---------\n"; echo new B<:int:> instanceof B<:int:>; echo "\n---------\n"; echo new B<:B:> instanceof B<:B:>; echo "\n---------\n"; echo new B<:B<:string:>:> instanceof B<:B<:string:>:>; echo "\n---------\n"; echo new Dictionary<:int, string:> instanceof Dictionary<:int, string:>; echo "\n---------\n"; echo new Dictionary<:int:> instanceof Dictionary<:int:>; echo "\n---------\n"; echo new Dictionary instanceof Dictionary; echo "\n---------\n"; // Error: new IComparable; echo $x instanceof IComparable; echo "\n---------\n"; // Error: new IComparable<:Dictionary:>; echo $x instanceof IComparable<:Dictionary:>; echo "\n---------\n"; // Error: echo $x instanceof Dictionary<:int, int, int:>; // Syntax Error: $x = int<:int:>; echo "\n---------\n"; } } ?> ================================================ FILE: Testing/Tests/PHP.NET/Gotos.php ================================================ class Program { public static function Main() { $x = 0; there: goto here; echo "blah\n"; here: echo "hujer\n"; if ($x++ < 10) goto there; } } ================================================ FILE: Testing/Tests/PHP.NET/Lib.php ================================================ ================================================ FILE: Testing/Tests/PHP.NET/Lib.phpproj ================================================  Debug "Lib" 2.0 {8ef80175-c81a-4cea-bba1-30f845c20a4c} Library Library Lib Lib.php v2 Standard true bin exe false bin\Release\ exe Code Content ================================================ FILE: Testing/Tests/PHP.NET/MultiScriptAssembly/App.config ================================================  ================================================ FILE: Testing/Tests/PHP.NET/MultiScriptAssembly/Program.cs ================================================ using System; using System.IO; using System.Text; namespace UseMultiScriptAssembly { using PHP.Core; class Program { static void Main(string[] args) { ScriptContext context = ScriptContext.InitApplication(ApplicationContext.Default, null, null, null); var sb = new StringBuilder(); using (TextWriter tw = new StringWriter(sb)) { context.Output = tw; context.OutputStream = Console.OpenStandardOutput(); //TODO: Should also redirect binary output. context.Include("main.php", true); var klass = (PhpObject)context.NewObject("Klass", new object[] { "yipppy" }); var foo = new PhpCallback(klass, "foo"); foo.Invoke(null, new object[] { "param" }); tw.Close(); } string output = sb.ToString(); const string EXPECTED = "yipppyparam"; if (output != EXPECTED) { Console.WriteLine("FAIL"); Console.Write("Expected: " + EXPECTED); Console.Write("Got: "); Console.WriteLine(output); } else { Console.WriteLine("PASS"); } } } } ================================================ FILE: Testing/Tests/PHP.NET/MultiScriptAssembly/Properties/AssemblyInfo.cs ================================================ using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; // General Information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information // associated with an assembly. [assembly: AssemblyTitle("UseMultiScriptAssembly")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("UseMultiScriptAssembly")] [assembly: AssemblyCopyright("Copyright © 2013")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] // Setting ComVisible to false makes the types in this assembly not visible // to COM components. If you need to access a type in this assembly from // COM, set the ComVisible attribute to true on that type. [assembly: ComVisible(false)] // The following GUID is for the ID of the typelib if this project is exposed to COM [assembly: Guid("adf6b806-47b6-46e9-ad84-d427d9063559")] // Version information for an assembly consists of the following four values: // // Major Version // Minor Version // Build Number // Revision // // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] [assembly: AssemblyVersion("1.0.0.0")] [assembly: AssemblyFileVersion("1.0.0.0")] ================================================ FILE: Testing/Tests/PHP.NET/MultiScriptAssembly/UseMultiScriptAssembly.csproj ================================================  Debug AnyCPU {263A6667-8005-462E-B11A-37B89D81721B} Exe Properties UseMultiScriptAssembly UseMultiScriptAssembly v4.0 512 AnyCPU true full false bin\ DEBUG;TRACE prompt 4 AnyCPU pdbonly true bin\ TRACE prompt 4 False False cmd /c $(ProjectDir)msa\build.cmd ================================================ FILE: Testing/Tests/PHP.NET/MultiScriptAssembly/UseMultiScriptAssembly.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 2012 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UseMultiScriptAssembly", "UseMultiScriptAssembly.csproj", "{263A6667-8005-462E-B11A-37B89D81721B}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {263A6667-8005-462E-B11A-37B89D81721B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {263A6667-8005-462E-B11A-37B89D81721B}.Debug|Any CPU.Build.0 = Debug|Any CPU {263A6667-8005-462E-B11A-37B89D81721B}.Release|Any CPU.ActiveCfg = Release|Any CPU {263A6667-8005-462E-B11A-37B89D81721B}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal ================================================ FILE: Testing/Tests/PHP.NET/MultiScriptAssembly/msa/Autoloader.php ================================================ 'klass.php' ); class AutoLoader { /** * autoload - take a class name and attempt to load it * * @param $className String: name of class we're looking for. * @return bool Returning false is important on failure as * it allows Zend to try and look in other registered autoloaders * as well. */ static function autoload( $className ) { global $wgAutoloadClasses, $wgAutoloadLocalClasses; if ( isset( $wgAutoloadLocalClasses[$className] ) ) { $filename = $wgAutoloadLocalClasses[$className]; } elseif ( isset( $wgAutoloadClasses[$className] ) ) { $filename = $wgAutoloadClasses[$className]; } else { # Try a different capitalisation # The case can sometimes be wrong when unserializing PHP 4 objects $filename = false; $lowerClass = strtolower( $className ); foreach ( $wgAutoloadLocalClasses as $class2 => $file2 ) { if ( strtolower( $class2 ) == $lowerClass ) { $filename = $file2; } } if ( !$filename ) { echo "Class {$className} not found; skipped loading\n"; # Give up return false; } } # Make an absolute path, this improves performance by avoiding some stat calls if ( substr( $filename, 0, 1 ) != '/' && substr( $filename, 1, 1 ) != ':' ) { $filename = "$filename"; } require( $filename ); return true; } /** * Force a class to be run through the autoloader, helpful for things like * Sanitizer that have define()s outside of their class definition. Of course * this wouldn't be necessary if everything in MediaWiki was class-based. Sigh. * * @return Boolean Return the results of class_exists() so we know if we were successful */ static function loadClass( $class ) { return class_exists( $class ); } } spl_autoload_register( array( 'AutoLoader', 'autoload' ) ); ?> ================================================ FILE: Testing/Tests/PHP.NET/MultiScriptAssembly/msa/Klass.php ================================================ ================================================ FILE: Testing/Tests/PHP.NET/MultiScriptAssembly/msa/build.cmd ================================================ @rem ..\..\..\..\..\Deployment\Bin\phpc /target:dll /lang:PHP5 /static+ /debug+ /root:%~dp0 /recurse:%~dp0 /out:../bin/msa.dll cd %~dp0 phpc /target:dll /root:. /recurse:. /out:..\bin\msa.dll /lang:PHP5 /static+ /debug+ ================================================ FILE: Testing/Tests/PHP.NET/MultiScriptAssembly/msa/main.php ================================================ foo("bar"); ?> ================================================ FILE: Testing/Tests/PHP.NET/NullableConversions/App.config ================================================ ================================================ FILE: Testing/Tests/PHP.NET/NullableConversions/CSharpNullableLib/CSharpNullableLib.csproj ================================================  Debug AnyCPU 9.0.21022 2.0 {AADF6A75-2BAE-4EAE-8607-C243A378B977} Library Properties CSharpNullableLib CSharpNullableLib v3.5 512 true full false bin\Debug\ DEBUG;TRACE prompt 4 pdbonly true bin\Release\ TRACE prompt 4 3.5 3.5 3.5 ================================================ FILE: Testing/Tests/PHP.NET/NullableConversions/CSharpNullableLib/Class1.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace CSharpNullableLib { public class NullableTests { public int? IntNull { get; set; } public double? DoubleNull { get; set; } public bool? BoolNull { get; set; } int? Wtf() { return null; } public void Print() { Console.WriteLine("Int? = {0}", IntNull); Console.WriteLine("Double? = {0}", DoubleNull); Console.WriteLine("Bool? = {0}", BoolNull); } } } ================================================ FILE: Testing/Tests/PHP.NET/NullableConversions/NullableConversions.phpproj ================================================  Debug "NullableConversions" 2.0 {a83c781c-f7cf-494a-a014-0d29b8ebf31b} Standard Exe NullableConversions Program.php NullableConversions true bin\Debug\ false bin\Release\ Content ================================================ FILE: Testing/Tests/PHP.NET/NullableConversions/NullableConversions.sln ================================================  Microsoft Visual Studio Solution File, Format Version 10.00 # Visual Studio 2008 Project("{F0CD5B9D-43B4-49B3-95FA-7F4F8FAFA5C0}") = "NullableConversions", "NullableConversions.phpproj", "{A83C781C-F7CF-494A-A014-0D29B8EBF31B}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CSharpNullableLib", "CSharpNullableLib\CSharpNullableLib.csproj", "{AADF6A75-2BAE-4EAE-8607-C243A378B977}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {A83C781C-F7CF-494A-A014-0D29B8EBF31B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {A83C781C-F7CF-494A-A014-0D29B8EBF31B}.Debug|Any CPU.Build.0 = Debug|Any CPU {A83C781C-F7CF-494A-A014-0D29B8EBF31B}.Release|Any CPU.ActiveCfg = Release|Any CPU {A83C781C-F7CF-494A-A014-0D29B8EBF31B}.Release|Any CPU.Build.0 = Release|Any CPU {AADF6A75-2BAE-4EAE-8607-C243A378B977}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {AADF6A75-2BAE-4EAE-8607-C243A378B977}.Debug|Any CPU.Build.0 = Debug|Any CPU {AADF6A75-2BAE-4EAE-8607-C243A378B977}.Release|Any CPU.ActiveCfg = Release|Any CPU {AADF6A75-2BAE-4EAE-8607-C243A378B977}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal ================================================ FILE: Testing/Tests/PHP.NET/NullableConversions/Program.php ================================================ IntNull = 10; $nl->DoubleNull = 3.14159265; $nl->BoolNull = true; $nl->Print(); $nl->IntNull = $nl->DoubleNull; $nl->Print(); $nl->DoubleNull = null; $nl->IntNull = $nl->DoubleNull; $nl->Print(); fgets(STDIN); ?> ================================================ FILE: Testing/Tests/PHP.NET/Sample.phpproj ================================================  Debug "Sample" 2.0 {e97d0d1a-eabb-4b50-aca5-bc61b74212ea} Exe Program Test1 Test1.php v2 Standard Test1.php true bin exe false bin\Release\ exe Code Code Code Content ================================================ FILE: Testing/Tests/PHP.NET/Sample.sln ================================================  Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 Project("{1EA040D2-53F6-4409-9FA4-7C60E868BB52}") = "Sample", "Sample.phpproj", "{E97D0D1A-EABB-4B50-ACA5-BC61B74212EA}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CSharpLibrary", "CSharpLibrary.csproj", "{B466C784-9BC9-42DE-9C83-C962C9580402}" EndProject Project("{1EA040D2-53F6-4409-9FA4-7C60E868BB52}") = "Lib", "Lib.phpproj", "{8EF80175-C81A-4CEA-BBA1-30F845C20A4C}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|.NET = Debug|.NET Debug|Any CPU = Debug|Any CPU Debug|Mixed Platforms = Debug|Mixed Platforms Release|.NET = Release|.NET Release|Any CPU = Release|Any CPU Release|Mixed Platforms = Release|Mixed Platforms EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {E97D0D1A-EABB-4B50-ACA5-BC61B74212EA}.Debug|.NET.ActiveCfg = Debug|.NET {E97D0D1A-EABB-4B50-ACA5-BC61B74212EA}.Debug|.NET.Build.0 = Debug|.NET {E97D0D1A-EABB-4B50-ACA5-BC61B74212EA}.Debug|Any CPU.ActiveCfg = Debug|.NET {E97D0D1A-EABB-4B50-ACA5-BC61B74212EA}.Debug|Mixed Platforms.ActiveCfg = Debug|.NET {E97D0D1A-EABB-4B50-ACA5-BC61B74212EA}.Debug|Mixed Platforms.Build.0 = Debug|.NET {E97D0D1A-EABB-4B50-ACA5-BC61B74212EA}.Release|.NET.ActiveCfg = Release|.NET {E97D0D1A-EABB-4B50-ACA5-BC61B74212EA}.Release|.NET.Build.0 = Release|.NET {E97D0D1A-EABB-4B50-ACA5-BC61B74212EA}.Release|Any CPU.ActiveCfg = Release|.NET {E97D0D1A-EABB-4B50-ACA5-BC61B74212EA}.Release|Mixed Platforms.ActiveCfg = Release|.NET {E97D0D1A-EABB-4B50-ACA5-BC61B74212EA}.Release|Mixed Platforms.Build.0 = Release|.NET {B466C784-9BC9-42DE-9C83-C962C9580402}.Debug|.NET.ActiveCfg = Debug|Any CPU {B466C784-9BC9-42DE-9C83-C962C9580402}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B466C784-9BC9-42DE-9C83-C962C9580402}.Debug|Any CPU.Build.0 = Debug|Any CPU {B466C784-9BC9-42DE-9C83-C962C9580402}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {B466C784-9BC9-42DE-9C83-C962C9580402}.Release|.NET.ActiveCfg = Release|Any CPU {B466C784-9BC9-42DE-9C83-C962C9580402}.Release|Any CPU.ActiveCfg = Release|Any CPU {B466C784-9BC9-42DE-9C83-C962C9580402}.Release|Any CPU.Build.0 = Release|Any CPU {B466C784-9BC9-42DE-9C83-C962C9580402}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {B466C784-9BC9-42DE-9C83-C962C9580402}.Release|Mixed Platforms.Build.0 = Release|Any CPU {8EF80175-C81A-4CEA-BBA1-30F845C20A4C}.Debug|.NET.ActiveCfg = Debug|.NET {8EF80175-C81A-4CEA-BBA1-30F845C20A4C}.Debug|.NET.Build.0 = Debug|.NET {8EF80175-C81A-4CEA-BBA1-30F845C20A4C}.Debug|Any CPU.ActiveCfg = Debug|.NET {8EF80175-C81A-4CEA-BBA1-30F845C20A4C}.Debug|Mixed Platforms.ActiveCfg = Debug|.NET {8EF80175-C81A-4CEA-BBA1-30F845C20A4C}.Release|.NET.ActiveCfg = Release|.NET {8EF80175-C81A-4CEA-BBA1-30F845C20A4C}.Release|.NET.Build.0 = Release|.NET {8EF80175-C81A-4CEA-BBA1-30F845C20A4C}.Release|Any CPU.ActiveCfg = Release|.NET {8EF80175-C81A-4CEA-BBA1-30F845C20A4C}.Release|Mixed Platforms.ActiveCfg = Release|.NET {8EF80175-C81A-4CEA-BBA1-30F845C20A4C}.Release|Mixed Platforms.Build.0 = Release|.NET EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal ================================================ FILE: Testing/Tests/PHP.NET/Sample.vs2012.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 2012 Project("{7FB7D0AD-ABC6-4BF8-BB4D-B2C68B00F984}") = "Sample", "Sample.phpproj", "{E97D0D1A-EABB-4B50-ACA5-BC61B74212EA}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CSharpLibrary", "CSharpLibrary.csproj", "{B466C784-9BC9-42DE-9C83-C962C9580402}" EndProject Project("{7FB7D0AD-ABC6-4BF8-BB4D-B2C68B00F984}") = "Lib", "Lib.phpproj", "{8EF80175-C81A-4CEA-BBA1-30F845C20A4C}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|.NET = Debug|.NET Debug|Any CPU = Debug|Any CPU Debug|Mixed Platforms = Debug|Mixed Platforms Release|.NET = Release|.NET Release|Any CPU = Release|Any CPU Release|Mixed Platforms = Release|Mixed Platforms EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {E97D0D1A-EABB-4B50-ACA5-BC61B74212EA}.Debug|.NET.ActiveCfg = Debug|Any CPU {E97D0D1A-EABB-4B50-ACA5-BC61B74212EA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {E97D0D1A-EABB-4B50-ACA5-BC61B74212EA}.Debug|Any CPU.Build.0 = Debug|Any CPU {E97D0D1A-EABB-4B50-ACA5-BC61B74212EA}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {E97D0D1A-EABB-4B50-ACA5-BC61B74212EA}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU {E97D0D1A-EABB-4B50-ACA5-BC61B74212EA}.Release|.NET.ActiveCfg = Release|Any CPU {E97D0D1A-EABB-4B50-ACA5-BC61B74212EA}.Release|Any CPU.ActiveCfg = Release|Any CPU {E97D0D1A-EABB-4B50-ACA5-BC61B74212EA}.Release|Any CPU.Build.0 = Release|Any CPU {E97D0D1A-EABB-4B50-ACA5-BC61B74212EA}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {E97D0D1A-EABB-4B50-ACA5-BC61B74212EA}.Release|Mixed Platforms.Build.0 = Release|Any CPU {B466C784-9BC9-42DE-9C83-C962C9580402}.Debug|.NET.ActiveCfg = Debug|Any CPU {B466C784-9BC9-42DE-9C83-C962C9580402}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B466C784-9BC9-42DE-9C83-C962C9580402}.Debug|Any CPU.Build.0 = Debug|Any CPU {B466C784-9BC9-42DE-9C83-C962C9580402}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {B466C784-9BC9-42DE-9C83-C962C9580402}.Release|.NET.ActiveCfg = Release|Any CPU {B466C784-9BC9-42DE-9C83-C962C9580402}.Release|Any CPU.ActiveCfg = Release|Any CPU {B466C784-9BC9-42DE-9C83-C962C9580402}.Release|Any CPU.Build.0 = Release|Any CPU {B466C784-9BC9-42DE-9C83-C962C9580402}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {B466C784-9BC9-42DE-9C83-C962C9580402}.Release|Mixed Platforms.Build.0 = Release|Any CPU {8EF80175-C81A-4CEA-BBA1-30F845C20A4C}.Debug|.NET.ActiveCfg = Debug|Any CPU {8EF80175-C81A-4CEA-BBA1-30F845C20A4C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {8EF80175-C81A-4CEA-BBA1-30F845C20A4C}.Debug|Any CPU.Build.0 = Debug|Any CPU {8EF80175-C81A-4CEA-BBA1-30F845C20A4C}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {8EF80175-C81A-4CEA-BBA1-30F845C20A4C}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU {8EF80175-C81A-4CEA-BBA1-30F845C20A4C}.Release|.NET.ActiveCfg = Release|Any CPU {8EF80175-C81A-4CEA-BBA1-30F845C20A4C}.Release|Any CPU.ActiveCfg = Release|Any CPU {8EF80175-C81A-4CEA-BBA1-30F845C20A4C}.Release|Any CPU.Build.0 = Release|Any CPU {8EF80175-C81A-4CEA-BBA1-30F845C20A4C}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {8EF80175-C81A-4CEA-BBA1-30F845C20A4C}.Release|Mixed Platforms.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal ================================================ FILE: Testing/Tests/PHP.NET/Test.il ================================================ .assembly TestIL { .ver 2:0:0:0 } .assembly extern mscorlib { .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) .ver 2:0:0:0 } .assembly extern System { .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) .ver 2:0:0:0 } .namespace IL { .class interface public abstract I { .method public newslot abstract virtual instance void f1() { } .method public newslot abstract virtual instance void f2() { } .method public newslot abstract virtual instance void g() { } } .class abstract public A implements IL.I { .method public specialname rtspecialname instance void .ctor() { ldarg.0 call instance void [mscorlib]System.Object::.ctor() ret } .method private virtual final instance void '_f'() { .override IL.I::f1 .override IL.I::f2 ret } } .class abstract public B { .method public specialname rtspecialname instance void .ctor() { ldarg.0 call instance void [mscorlib]System.Object::.ctor() ret } .method public newslot abstract virtual instance void f() { } .method public newslot abstract virtual instance void g() { } } .class abstract public C extends IL.B { .method public specialname rtspecialname instance void .ctor() { ldarg.0 call instance void IL.B::.ctor() ret } .method private virtual final instance void h() { .override IL.B::f .override IL.B::g ret } .method public newslot abstract virtual instance void i() { } } } ================================================ FILE: Testing/Tests/PHP.NET/Test1.php ================================================ { const X = Z; static function Q() { $x = "Dictionary<:!X,List<:string:>:>"; $y = new $x; $y->Add(1, new i'List'<:string:>()); } }*/ class Start { static function f<:T:>() { var_dump(new System:::Collections:::Generic:::Dictionary<:string, T:>); } } class Program { public static function Main() { fgets(STDIN); } } echo "Hello"; Start::f<:Program:>(); $a="a"; extract($GLOBALS, EXTR_REFS); echo "ok\n"; ?> ================================================ FILE: Testing/Tests/PHP.NET/Test2.php ================================================ ================================================ FILE: Testing/Tests/PHP.NET/Test3.php ================================================ ================================================ FILE: Testing/Tests/PHP.NET/__skip ================================================ ================================================ FILE: Testing/Tests/PHP.NET/build-lib.cmd ================================================ ..\..\..\Deployment\Debug\phpc /pure /target:dll /config:AppLib.config Lib.php pause ================================================ FILE: Testing/Tests/PHP.NET/build.cmd ================================================ ..\..\..\Deployment\Debug\phpc.exe /pure /target:exe /config:App.config /r:bin/Lib.dll Test1.php pause ================================================ FILE: Testing/Tests/PHP.NET/test-il.cmd ================================================ @ilasm /nologo /quiet /dll /output:bin\Test-il.dll Test.il @peverify /nologo bin\Test-il.dll @pause ================================================ FILE: Testing/Tests/Phalanger.inc ================================================ <", "\n\n", "\r\n\r\n"), array("/", "?>\n<", "\n", "\r\n"), $str); if ($str[strlen($str) - 1] != "\n") $str = $str . "\n"; if (function_exists("to_binary")) return to_binary($str); else return $str; } function __var_dump($x) { __var_dump_rec("", $x); } function __var_dump_rec($indent, &$x) { if (is_array($x) || is_object($x)) { echo $indent, is_array($x) ? "array" : "object", "\n"; echo "$indent{\n"; $a = array(); foreach ($x as $k => $_) $a[] = $k; if (is_object($x)) sort($a, SORT_STRING); foreach ($a as $k) { $v = @(is_array($x) ? $x[$k] : $x->$k); echo "$indent "; if (is_string($k)) echo "'$k'"; else echo "$k"; echo " => "; if (is_array($v) || is_object($v)) { echo "\n"; __var_dump_rec("$indent ", $v); } else { __var_dump_rec("", $v); } } echo "$indent}\n"; } else if (is_string($x)) echo "{$indent}'$x'\n"; else if (is_null($x)) echo "{$indent}NULL\n"; else if (is_bool($x)) echo $indent, ($x ? "TRUE" : "FALSE"), "\n"; else if (is_resource($x)) echo $indent, "resource '".get_resource_type($x)."'\n"; else if (is_double($x)) printf("{$indent}double(%.10f)\n",$x); else if (gettype($x)=="object") echo $indent, "object [invalid]\n"; else echo $indent, gettype($x), "($x)\n"; } ?> ================================================ FILE: Testing/Tests/RegEx/Perl/001.phpt ================================================ --TEST-- abusing preg_match() --FILE-- (?P(\d{2})?\d\d) - (?P(?:\d\d|[a-zA-Z]{2,3})) - (?P[0-3]?\d)) ~x', '2006-05-13', $m)); var_dump($m); } ?> --EXPECT-- int(1) array(10) { [0]=> string(10) "2006-05-13" ["date"]=> string(10) "2006-05-13" [1]=> string(10) "2006-05-13" ["year"]=> string(4) "2006" [2]=> string(4) "2006" [3]=> string(2) "20" ["month"]=> string(2) "05" [4]=> string(2) "05" ["day"]=> string(2) "13" [5]=> string(2) "13" } ================================================ FILE: Testing/Tests/RegEx/Perl/cache.php ================================================ [expect php] [file] '; for ($i = 0; $i < 5; $i++) { preg_match($pattern, $subject, $matches, PREG_OFFSET_CAPTURE, 3); if ($matches[0][0] == "def" && $matches[0][1] == 3) echo "OK\n"; else echo "Fail.\n"; } ?> ================================================ FILE: Testing/Tests/RegEx/Perl/grep1.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/RegEx/Perl/grep2.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/RegEx/Perl/match1.php ================================================ [expect php] [file] '; preg_match($pattern, $subject, $matches, PREG_OFFSET_CAPTURE, 3); print_r($matches); ?> ================================================ FILE: Testing/Tests/RegEx/Perl/match10.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/RegEx/Perl/match11.php.kb ================================================ [comment] This test is failing because there is a bug in .NET Regex class in v1.1, version 2.0 is ok. [expect php] [file] ================================================ FILE: Testing/Tests/RegEx/Perl/match2.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/RegEx/Perl/match3.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/RegEx/Perl/match4.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/RegEx/Perl/match5.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/RegEx/Perl/match6.php ================================================ [expect] 1 [expect] 0 [expect] 1 [expect] 1 [file] ================================================ FILE: Testing/Tests/RegEx/Perl/match7.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/RegEx/Perl/match8.php ================================================ [expect php] [file] 1 2 3 4 5 6 table; error_reporting(E_ALL & ~E_NOTICE); echo transpose($html_in); /**************************** HTML Table Transpose Function Converts rows to columns and columns to rows in an HTML Table By Darren Gates & Gary Beith, www.TUFaT.com Example of usage: $html_in = file_get_contents('some_table.html'); echo transpose($html_in); ****************************/ function transpose($html_in) { $html_out = ''; $element = ''; $table_level = -1; $row_index = -1; $column_index = -1; $row_max = -1; $column_max = -1; $row_attrs = array(); $cell_attrs = array(); $elements = array(); $tokens = preg_split( '/(?is)(<\/?(?:table|tr|th|td)(?:|\s.*?)>)/', $html_in, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE); foreach ($tokens as $token) { if (preg_match('/(?i)\A\s]/', $token)) { $element .= $token; $table_level++; } elseif (preg_match('/(?i)\A<\/table>/', $token)) { $element .= $token; $table_level--; } elseif ($table_level > 0) // token is within nested table { $element .= $token; } elseif (preg_match('/(?i)\A\s]/', $token)) { if (++$row_index == 0) { $html_out = $element; } preg_match_all('/(?i)\s(align|bgcolor|char|charoff|valign)=([^>\s]*)/', $token, $row_attrs, PREG_SET_ORDER); } elseif (preg_match('/(?i)\A<\/tr>/', $token)) { if ($column_index < 0) { $element = ''; } else { $i_max = $row_index + $rowspan - 1; if ($row_max < $i_max) { $row_max = $i_max; } $j_max = $column_index + $colspan - 1; if ($column_max < $j_max) { $column_max = $j_max; } for ($i = $row_index; $i <= $i_max; $i++) { for ($j = $column_index; $j <= $j_max; $j++) { $elements[$i][$j] = $element; $element = ''; } } } $column_index = -1; } elseif (preg_match('/(?i)\A\s]/', $token)) { if ($column_index >= 0) { $i_max = $row_index + $rowspan - 1; if ($row_max < $i_max) { $row_max = $i_max; } $j_max = $column_index + $colspan - 1; if ($column_max < $j_max) { $column_max = $j_max; } for ($i = $row_index; $i <= $i_max; $i++) { for ($j = $column_index; $j <= $j_max; $j++) { $elements[$i][$j] = $element; $element = ''; } } $column_index = $j_max; } while (isset($elements[$row_index][++$column_index])) { continue; } $colspan = 1; $rowspan = 1; $tag = substr($token, 0, -1); preg_match_all('/(?is)\s(colspan|rowspan)=(?:"(.*?)"|([^>\s]*))/',$token, $cell_attrs, PREG_SET_ORDER); foreach ($cell_attrs as $cell_attr) { if (stristr($cell_attr[1], 'colspan') !== FALSE) { $colspan = (int)$cell_attr[2]; $tag = preg_replace('/(?i)(\s)colspan=/','$1rrrspan=',$tag); } elseif (stristr($cell_attr[1], 'rowspan') !== FALSE) { $rowspan = (int)$cell_attr[2]; $tag = preg_replace('/(?i)(\s)rowspan=/','$1cccspan=',$tag); } } $tag = preg_replace('/(?i)(\s)rrrspan=/','$1rowspan=',$tag); $tag = preg_replace('/(?i)(\s)cccspan=/','$1colspan=',$tag); preg_match_all('/(?i)\s(align|bgcolor|char|charoff|valign)=([^>\s]*)/',$token, $cell_attrs, PREG_SET_ORDER); foreach ($row_attrs as $row_attr) { foreach ($cell_attrs as $cell_attr) { if (stristr($cell_attr[1], $row_attr[1]) !== FALSE) { continue 2; } } $tag .= $row_attr[0]; } $tag .= '>'; $element = $tag; // initialize th/td element to tag } else { $element .= $token; // add token to current element } } for ($i = 0; $i <= $column_max; $i++) { $html_out .= "\n"; for ($j = 0; $j <= $row_max; $j++) { $html_out .= $elements[$j][$i]; } $html_out .= "\n"; } $html_out .= $element; return $html_out; } ?> ================================================ FILE: Testing/Tests/RegEx/Perl/match9.php ================================================ [expect exact] array ( [0] => 209.6.145.47 - - [22/Nov/2003:19:02:30 -0500] "GET /dir/doc.htm HTTP/1.0" 200 6776 "http://search.yahoo.com/search?p=key+words=UTF-8" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)" [1] => 209.6.145.47 [2] => - [3] => - [4] => 22/Nov/2003:19:02:30 -0500 [5] => GET [6] => /dir/doc.htm [7] => HTTP [8] => 1.0 [9] => 200 [10] => 6776 [11] => "http://search.yahoo.com/search?p=key+words=UTF-8" [12] => "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)" ) [file] ================================================ FILE: Testing/Tests/RegEx/Perl/match_all1.php ================================================ [expect php] [file] ]+?>(.*?)]+?>|", "example:
    this is a test
    ", $out, PREG_PATTERN_ORDER); echo $out[0][0] . ", " . $out[0][1] . "\n"; echo $out[1][0] . ", " . $out[1][1] . "\n"; ?> ================================================ FILE: Testing/Tests/RegEx/Perl/match_all2.php ================================================ [expect php] [file] ]+?>(.*?)]+?>|", "example:
    this is a test
    ", $out, PREG_SET_ORDER); echo $out[0][0] . ", " . $out[0][1] . "\n"; echo $out[1][0] . ", " . $out[1][1] . "\n"; ?> ================================================ FILE: Testing/Tests/RegEx/Perl/match_all3.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/RegEx/Perl/match_all4.php ================================================ [expect php] [file] bold text
    click me"; preg_match_all("/(<([\w]+)[^>]*>)(.*)(<\/\\2>)/", $html, $matches); for ($i=0; $i< count($matches[0]); $i++) { echo "matched: " . $matches[0][$i] . "\n"; echo "part 1: " . $matches[1][$i] . "\n"; echo "part 2: " . $matches[3][$i] . "\n"; echo "part 3: " . $matches[4][$i] . "\n\n"; } ?> ================================================ FILE: Testing/Tests/RegEx/Perl/match_dollar.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/RegEx/Perl/match_groups.php ================================================ [expect exact] Array ( [0] => alt=A smooth, rocket-shaped shark swims quickly through the water. [0_img_left] => [1] => [0_img_right] => [2] => [0_img_center] => [3] => [1_img_center] => [4] => [0_img_none] => [5] => [0_img_baseline] => [6] => [0_img_sub] => [7] => [0_img_super] => [8] => [1_img_super] => [9] => [0_img_top] => [10] => [0_img_text_top] => [11] => [0_img_middle] => [12] => [0_img_bottom] => [13] => [0_img_text_bottom] => [14] => [0_img_thumbnail] => [15] => [1_img_thumbnail] => [16] => [0_img_manualthumb] => [17] => [18] => [1_img_manualthumb] => [19] => [20] => [0_img_framed] => [21] => [1_img_framed] => [22] => [2_img_framed] => [23] => [0_img_frameless] => [24] => [0_img_upright] => [25] => [1_img_upright] => [26] => [27] => [2_img_upright] => [28] => [29] => [0_img_border] => [30] => [0_img_link] => [31] => [32] => [0_img_alt] => alt=A smooth, rocket-shaped shark swims quickly through the water. [33] => alt=A smooth, rocket-shaped shark swims quickly through the water. [34] => A smooth, rocket-shaped shark swims quickly through the water. ) [file] left)|(?P<0_img_right>right)|(?P<0_img_center>center)|(?P<1_img_center>centre)|(?P<0_img_none>none)|(?P<0_img_baseline>baseline)|(?P<0_img_sub>sub)|(?P<0_img_super>super)|(?P<1_img_super>sup)|(?P<0_img_top>top)|(?P<0_img_text_top>text-top)|(?P<0_img_middle>middle)|(?P<0_img_bottom>bottom)|(?P<0_img_text_bottom>text-bottom)|(?P<0_img_thumbnail>thumbnail)|(?P<1_img_thumbnail>thumb)|(?P<0_img_manualthumb>thumbnail\=(.*?))|(?P<1_img_manualthumb>thumb\=(.*?))|(?P<0_img_framed>framed)|(?P<1_img_framed>enframed)|(?P<2_img_framed>frame)|(?P<0_img_frameless>frameless)|(?P<0_img_upright>upright)|(?P<1_img_upright>upright\=(.*?))|(?P<2_img_upright>upright (.*?))|(?P<0_img_border>border)|(?P<0_img_link>link\=(.*?))|(?P<0_img_alt>alt\=(.*?)))$/S', $line_in, $elements)) { print_r($elements); } ?> ================================================ FILE: Testing/Tests/RegEx/Perl/overflow.php ================================================ [comment] This code caused an overflow in converting ranges. [expect php] [file] ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/001.phpt ================================================ --TEST-- abusing preg_match() --FILE-- (?P(\d{2})?\d\d) - (?P(?:\d\d|[a-zA-Z]{2,3})) - (?P[0-3]?\d)) ~x', $s, $m)); var_dump($m); } ?> --EXPECT-- int(1) array(10) { [0]=> string(10) "2006-05-13" ["date"]=> string(10) "2006-05-13" [1]=> string(10) "2006-05-13" ["year"]=> string(4) "2006" [2]=> string(4) "2006" [3]=> string(2) "20" ["month"]=> string(2) "05" [4]=> string(2) "05" ["day"]=> string(2) "13" [5]=> string(2) "13" } int(1) array(10) { [0]=> string(8) "06-12-12" ["date"]=> string(8) "06-12-12" [1]=> string(8) "06-12-12" ["year"]=> string(2) "06" [2]=> string(2) "06" [3]=> string(0) "" ["month"]=> string(2) "12" [4]=> string(2) "12" ["day"]=> string(2) "12" [5]=> string(2) "12" } int(1) array(10) { [0]=> string(8) "12-Aug-8" ["date"]=> string(8) "12-Aug-8" [1]=> string(8) "12-Aug-8" ["year"]=> string(2) "12" [2]=> string(2) "12" [3]=> string(0) "" ["month"]=> string(3) "Aug" [4]=> string(3) "Aug" ["day"]=> string(1) "8" [5]=> string(1) "8" } ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/002.phpt ================================================ --TEST-- preg_* with bogus vals --FILE-- --EXPECTF-- Warning: preg_match() expects at least 2 parameters, 0 given in %s002.php on line 3 bool(false) Warning: preg_match_all() expects at least 2 parameters, 0 given in %s002.php on line 4 bool(false) Warning: preg_match_all(): Invalid flags specified in %s002.php on line 5 NULL Warning: preg_quote() expects at least 1 parameter, 0 given in %s002.php on line 7 NULL string(0) "" string(12) "a${1b${1c${1" Warning: preg_replace(): Compilation failed: missing terminating ] for character class at offset 8 in %s002.php on line 11 NULL Parse error: %s in %s002.php(12) : regexp code on line 1 Fatal error: preg_replace(): Failed evaluating code: for ($ in %s002.php on line 12 ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/003.phpt ================================================ --TEST-- abusing preg_match_all() --FILE-- (?P(\d{2})?\d\d) - (?P(?:\d\d|[a-zA-Z]{2,3})) - (?P[0-3]?\d)) ~x', '2006-05-13 e outra data: "12-Aug-37"', $m, $flag)); var_dump($m); } ?> --EXPECT-- int(2) array(10) { [0]=> array(2) { [0]=> string(10) "2006-05-13" [1]=> string(9) "12-Aug-37" } ["date"]=> array(2) { [0]=> string(10) "2006-05-13" [1]=> string(9) "12-Aug-37" } [1]=> array(2) { [0]=> string(10) "2006-05-13" [1]=> string(9) "12-Aug-37" } ["year"]=> array(2) { [0]=> string(4) "2006" [1]=> string(2) "12" } [2]=> array(2) { [0]=> string(4) "2006" [1]=> string(2) "12" } [3]=> array(2) { [0]=> string(2) "20" [1]=> string(0) "" } ["month"]=> array(2) { [0]=> string(2) "05" [1]=> string(3) "Aug" } [4]=> array(2) { [0]=> string(2) "05" [1]=> string(3) "Aug" } ["day"]=> array(2) { [0]=> string(2) "13" [1]=> string(2) "37" } [5]=> array(2) { [0]=> string(2) "13" [1]=> string(2) "37" } } int(2) array(2) { [0]=> array(10) { [0]=> string(10) "2006-05-13" ["date"]=> string(10) "2006-05-13" [1]=> string(10) "2006-05-13" ["year"]=> string(4) "2006" [2]=> string(4) "2006" [3]=> string(2) "20" ["month"]=> string(2) "05" [4]=> string(2) "05" ["day"]=> string(2) "13" [5]=> string(2) "13" } [1]=> array(10) { [0]=> string(9) "12-Aug-37" ["date"]=> string(9) "12-Aug-37" [1]=> string(9) "12-Aug-37" ["year"]=> string(2) "12" [2]=> string(2) "12" [3]=> string(0) "" ["month"]=> string(3) "Aug" [4]=> string(3) "Aug" ["day"]=> string(2) "37" [5]=> string(2) "37" } } ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/004.phpt ================================================ --TEST-- abusing pcre --FILE-- .()-]+(?:\[\w+\])?)\s*,?((?:\)*\s*=)?)/S', '&a, b, &c', $m, PREG_SET_ORDER)); var_dump($m); var_dump(preg_match_all('/zend_parse_parameters(?:_ex\s*\([^,]+,[^,]+|\s*\([^,]+),\s*"([^"]*)"\s*,\s*([^{;]*)/S', 'zend_parse_parameters( 0, "addd|s/", a, b, &c);', $m, PREG_SET_ORDER | PREG_OFFSET_CAPTURE)); var_dump($m); var_dump(preg_replace(array('@//.*@S', '@/\*.*\*/@SsUe'), array('', 'preg_replace("/[^\r\n]+/S", "", \'$0\')'), "hello\n//x \n/*\ns\n*/")); var_dump(preg_split('/PHP_(?:NAMED_)?(?:FUNCTION|METHOD)\s*\((\w+(?:,\s*\w+)?)\)/S', "PHP_FUNCTION(s, preg_match)\n{\nlalala", -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_OFFSET_CAPTURE)); ?> --EXPECT-- int(2) array(2) { [0]=> array(7) { [0]=> string(24) "unsigned int xpto = 124;" [1]=> string(12) "unsigned int" [2]=> string(0) "" [3]=> string(0) "" [4]=> string(4) "xpto" [5]=> string(1) "=" [6]=> string(0) "" } [1]=> array(7) { [0]=> string(11) "short a, b;" [1]=> string(5) "short" [2]=> string(0) "" [3]=> string(0) "" [4]=> string(1) "a" [5]=> string(0) "" [6]=> string(3) ", b" } } int(3) array(3) { [0]=> array(4) { [0]=> string(3) "&a," [1]=> string(1) "&" [2]=> string(1) "a" [3]=> string(0) "" } [1]=> array(4) { [0]=> string(2) "b," [1]=> string(0) "" [2]=> string(1) "b" [3]=> string(0) "" } [2]=> array(4) { [0]=> string(2) "&c" [1]=> string(1) "&" [2]=> string(1) "c" [3]=> string(0) "" } } int(1) array(1) { [0]=> array(3) { [0]=> array(2) { [0]=> string(46) "zend_parse_parameters( 0, "addd|s/", a, b, &c)" [1]=> int(0) } [1]=> array(2) { [0]=> string(7) "addd|s/" [1]=> int(27) } [2]=> array(2) { [0]=> string(9) "a, b, &c)" [1]=> int(37) } } } string(9) "hello " array(3) { [0]=> array(2) { [0]=> string(0) "" [1]=> int(0) } [1]=> array(2) { [0]=> string(13) "s, preg_match" [1]=> int(13) } [2]=> array(2) { [0]=> string(9) " { lalala" [1]=> int(27) } } ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/005.phpt ================================================ --TEST-- abusing preg_match_all() #2 --FILE-- --EXPECT-- int(24) Array ( [0] => Array ( [0] => /p2/var/php_gcov/PHP_4_4/ext/ming/ming.c: In function `zif_swfbitmap_init': /p2/var/php_gcov/PHP_4_4/ext/ming/ming.c:323: warning: assignment from incompatible pointer type [1] => /p2/var/php_gcov/PHP_4_4/ext/ming/ming.c: In function `zif_swfbitmap_init': [2] => /p2/var/php_gcov/PHP_4_4/ext/ming/ming.c [3] => [4] => zif_swfbitmap_init [5] => /p2/var/php_gcov/PHP_4_4/ext/ming/ming.c [6] => 323 [7] => warning [8] => assignment from incompatible pointer type ) [1] => Array ( [0] => /p2/var/php_gcov/PHP_4_4/ext/ming/ming.c: In function `zif_swftextfield_setFont': /p2/var/php_gcov/PHP_4_4/ext/ming/ming.c:2597: warning: passing arg 2 of `SWFTextField_setFont' from incompatible pointer type [1] => /p2/var/php_gcov/PHP_4_4/ext/ming/ming.c: In function `zif_swftextfield_setFont': [2] => /p2/var/php_gcov/PHP_4_4/ext/ming/ming.c [3] => [4] => zif_swftextfield_setFont [5] => /p2/var/php_gcov/PHP_4_4/ext/ming/ming.c [6] => 2597 [7] => warning [8] => passing arg 2 of `SWFTextField_setFont' from incompatible pointer type ) [2] => Array ( [0] => /p2/var/php_gcov/PHP_4_4/ext/oci8/oci8.c:1027: warning: `oci_ping' defined but not used [1] => [2] => [3] => [4] => [5] => /p2/var/php_gcov/PHP_4_4/ext/oci8/oci8.c [6] => 1027 [7] => warning [8] => `oci_ping' defined but not used ) [3] => Array ( [0] => /p2/var/php_gcov/PHP_4_4/ext/posix/posix.c: In function `zif_posix_getpgid': /p2/var/php_gcov/PHP_4_4/ext/posix/posix.c:484: warning: implicit declaration of function `getpgid' [1] => /p2/var/php_gcov/PHP_4_4/ext/posix/posix.c: In function `zif_posix_getpgid': [2] => /p2/var/php_gcov/PHP_4_4/ext/posix/posix.c [3] => [4] => zif_posix_getpgid [5] => /p2/var/php_gcov/PHP_4_4/ext/posix/posix.c [6] => 484 [7] => warning [8] => implicit declaration of function `getpgid' ) [4] => Array ( [0] => /p2/var/php_gcov/PHP_4_4/ext/posix/posix.c: In function `zif_posix_getsid': /p2/var/php_gcov/PHP_4_4/ext/posix/posix.c:506: warning: implicit declaration of function `getsid' [1] => /p2/var/php_gcov/PHP_4_4/ext/posix/posix.c: In function `zif_posix_getsid': [2] => /p2/var/php_gcov/PHP_4_4/ext/posix/posix.c [3] => [4] => zif_posix_getsid [5] => /p2/var/php_gcov/PHP_4_4/ext/posix/posix.c [6] => 506 [7] => warning [8] => implicit declaration of function `getsid' ) [5] => Array ( [0] => /p2/var/php_gcov/PHP_4_4/ext/session/mod_files.c: In function `ps_read_files': /p2/var/php_gcov/PHP_4_4/ext/session/mod_files.c:302: warning: implicit declaration of function `pread' [1] => /p2/var/php_gcov/PHP_4_4/ext/session/mod_files.c: In function `ps_read_files': [2] => /p2/var/php_gcov/PHP_4_4/ext/session/mod_files.c [3] => [4] => ps_read_files [5] => /p2/var/php_gcov/PHP_4_4/ext/session/mod_files.c [6] => 302 [7] => warning [8] => implicit declaration of function `pread' ) [6] => Array ( [0] => /p2/var/php_gcov/PHP_4_4/ext/session/mod_files.c: In function `ps_write_files': /p2/var/php_gcov/PHP_4_4/ext/session/mod_files.c:340: warning: implicit declaration of function `pwrite' [1] => /p2/var/php_gcov/PHP_4_4/ext/session/mod_files.c: In function `ps_write_files': [2] => /p2/var/php_gcov/PHP_4_4/ext/session/mod_files.c [3] => [4] => ps_write_files [5] => /p2/var/php_gcov/PHP_4_4/ext/session/mod_files.c [6] => 340 [7] => warning [8] => implicit declaration of function `pwrite' ) [7] => Array ( [0] => /p2/var/php_gcov/PHP_4_4/ext/sockets/sockets.c: In function `zif_socket_get_option': /p2/var/php_gcov/PHP_4_4/ext/sockets/sockets.c:1862: warning: unused variable `timeout' [1] => /p2/var/php_gcov/PHP_4_4/ext/sockets/sockets.c: In function `zif_socket_get_option': [2] => /p2/var/php_gcov/PHP_4_4/ext/sockets/sockets.c [3] => [4] => zif_socket_get_option [5] => /p2/var/php_gcov/PHP_4_4/ext/sockets/sockets.c [6] => 1862 [7] => warning [8] => unused variable `timeout' ) [8] => Array ( [0] => /p2/var/php_gcov/PHP_4_4/ext/sockets/sockets.c: In function `zif_socket_set_option': /p2/var/php_gcov/PHP_4_4/ext/sockets/sockets.c:1941: warning: unused variable `timeout' [1] => /p2/var/php_gcov/PHP_4_4/ext/sockets/sockets.c: In function `zif_socket_set_option': [2] => /p2/var/php_gcov/PHP_4_4/ext/sockets/sockets.c [3] => [4] => zif_socket_set_option [5] => /p2/var/php_gcov/PHP_4_4/ext/sockets/sockets.c [6] => 1941 [7] => warning [8] => unused variable `timeout' ) [9] => Array ( [0] => /p2/var/php_gcov/PHP_4_4/regex/regexec.c:19: warning: `nope' defined but not used [1] => [2] => [3] => [4] => [5] => /p2/var/php_gcov/PHP_4_4/regex/regexec.c [6] => 19 [7] => warning [8] => `nope' defined but not used ) [10] => Array ( [0] => /p2/var/php_gcov/PHP_4_4/ext/standard/exec.c:50: warning: `php_make_safe_mode_command' defined but not used [1] => [2] => [3] => [4] => [5] => /p2/var/php_gcov/PHP_4_4/ext/standard/exec.c [6] => 50 [7] => warning [8] => `php_make_safe_mode_command' defined but not used ) [11] => Array ( [0] => /p2/var/php_gcov/PHP_4_4/ext/standard/image.c: In function `php_handle_jpc': /p2/var/php_gcov/PHP_4_4/ext/standard/image.c:604: warning: unused variable `dummy_int' [1] => /p2/var/php_gcov/PHP_4_4/ext/standard/image.c: In function `php_handle_jpc': [2] => /p2/var/php_gcov/PHP_4_4/ext/standard/image.c [3] => [4] => php_handle_jpc [5] => /p2/var/php_gcov/PHP_4_4/ext/standard/image.c [6] => 604 [7] => warning [8] => unused variable `dummy_int' ) [12] => Array ( [0] => /p2/var/php_gcov/PHP_4_4/ext/standard/parsedate.c: In function `php_gd_parse': /p2/var/php_gcov/PHP_4_4/ext/standard/parsedate.c:1138: warning: implicit declaration of function `php_gd_lex' [1] => /p2/var/php_gcov/PHP_4_4/ext/standard/parsedate.c: In function `php_gd_parse': [2] => /p2/var/php_gcov/PHP_4_4/ext/standard/parsedate.c [3] => [4] => php_gd_parse [5] => /p2/var/php_gcov/PHP_4_4/ext/standard/parsedate.c [6] => 1138 [7] => warning [8] => implicit declaration of function `php_gd_lex' ) [13] => Array ( [0] => /p2/var/php_gcov/PHP_4_4/ext/standard/parsedate.y:864: warning: return type defaults to `int' [1] => [2] => [3] => [4] => [5] => /p2/var/php_gcov/PHP_4_4/ext/standard/parsedate.y [6] => 864 [7] => warning [8] => return type defaults to `int' ) [14] => Array ( [0] => /p2/var/php_gcov/PHP_4_4/ext/sysvmsg/sysvmsg.c: In function `zif_msg_receive': /p2/var/php_gcov/PHP_4_4/ext/sysvmsg/sysvmsg.c:318: warning: passing arg 2 of `php_var_unserialize' from incompatible pointer type [1] => /p2/var/php_gcov/PHP_4_4/ext/sysvmsg/sysvmsg.c: In function `zif_msg_receive': [2] => /p2/var/php_gcov/PHP_4_4/ext/sysvmsg/sysvmsg.c [3] => [4] => zif_msg_receive [5] => /p2/var/php_gcov/PHP_4_4/ext/sysvmsg/sysvmsg.c [6] => 318 [7] => warning [8] => passing arg 2 of `php_var_unserialize' from incompatible pointer type ) [15] => Array ( [0] => /p2/var/php_gcov/PHP_4_4/ext/yp/yp.c: In function `zif_yp_err_string': /p2/var/php_gcov/PHP_4_4/ext/yp/yp.c:372: warning: assignment discards qualifiers from pointer target type [1] => /p2/var/php_gcov/PHP_4_4/ext/yp/yp.c: In function `zif_yp_err_string': [2] => /p2/var/php_gcov/PHP_4_4/ext/yp/yp.c [3] => [4] => zif_yp_err_string [5] => /p2/var/php_gcov/PHP_4_4/ext/yp/yp.c [6] => 372 [7] => warning [8] => assignment discards qualifiers from pointer target type ) [16] => Array ( [0] => Zend/zend_language_scanner.c:5944: warning: `yy_fatal_error' defined but not used Zend/zend_language_scanner.c:2627: warning: `yy_last_accepting_state' defined but not used Zend/zend_language_scanner.c:2628: warning: `yy_last_accepting_cpos' defined but not used Zend/zend_language_scanner.c:2634: warning: `yy_more_flag' defined but not used Zend/zend_language_scanner.c:2635: warning: `yy_more_len' defined but not used Zend/zend_language_scanner.c:5483: warning: `yyunput' defined but not used Zend/zend_language_scanner.c:5929: warning: `yy_top_state' defined but not used [1] => [2] => [3] => [4] => [5] => Zend/zend_language_scanner.c [6] => 5944 [7] => warning [8] => `yy_fatal_error' defined but not used [9] => 2627 [10] => warning [11] => `yy_last_accepting_state' defined but not used [12] => 2628 [13] => warning [14] => `yy_last_accepting_cpos' defined but not used [15] => 2634 [16] => warning [17] => `yy_more_flag' defined but not used [18] => 2635 [19] => warning [20] => `yy_more_len' defined but not used [21] => 5483 [22] => warning [23] => `yyunput' defined but not used [24] => 5929 [25] => warning [26] => `yy_top_state' defined but not used ) [17] => Array ( [0] => Zend/zend_ini_scanner.c:457: warning: `yy_last_accepting_state' defined but not used Zend/zend_ini_scanner.c:458: warning: `yy_last_accepting_cpos' defined but not used Zend/zend_ini_scanner.c:1361: warning: `yyunput' defined but not used [1] => [2] => [3] => [4] => [5] => Zend/zend_ini_scanner.c [6] => 457 [7] => warning [8] => `yy_last_accepting_state' defined but not used [9] => 458 [10] => warning [11] => `yy_last_accepting_cpos' defined but not used [12] => 1361 [13] => warning [14] => `yyunput' defined but not used ) [18] => Array ( [0] => /p2/var/php_gcov/PHP_4_4/Zend/zend_alloc.c: In function `_safe_emalloc': /p2/var/php_gcov/PHP_4_4/Zend/zend_alloc.c:237: warning: long int format, size_t arg (arg 3) /p2/var/php_gcov/PHP_4_4/Zend/zend_alloc.c:237: warning: long int format, size_t arg (arg 4) /p2/var/php_gcov/PHP_4_4/Zend/zend_alloc.c:237: warning: long int format, size_t arg (arg 5) [1] => /p2/var/php_gcov/PHP_4_4/Zend/zend_alloc.c: In function `_safe_emalloc': [2] => /p2/var/php_gcov/PHP_4_4/Zend/zend_alloc.c [3] => [4] => _safe_emalloc [5] => /p2/var/php_gcov/PHP_4_4/Zend/zend_alloc.c [6] => 237 [7] => warning [8] => long int format, size_t arg (arg 3) [9] => 237 [10] => warning [11] => long int format, size_t arg (arg 4) [12] => 237 [13] => warning [14] => long int format, size_t arg (arg 5) ) [19] => Array ( [0] => /p2/var/php_gcov/PHP_4_4/Zend/zend_ini.c:338: warning: `zend_ini_displayer_cb' defined but not used [1] => [2] => [3] => [4] => [5] => /p2/var/php_gcov/PHP_4_4/Zend/zend_ini.c [6] => 338 [7] => warning [8] => `zend_ini_displayer_cb' defined but not used ) [20] => Array ( [0] => ext/mysql/libmysql/my_tempnam.o(.text+0x80): In function `my_tempnam': /p2/var/php_gcov/PHP_4_4/ext/mysql/libmysql/my_tempnam.c:115: warning: the use of `tempnam' is dangerous, better use `mkstemp' [1] => ext/mysql/libmysql/my_tempnam.o(.text+0x80): In function `my_tempnam': [2] => ext/mysql/libmysql/my_tempnam.o [3] => (.text+0x80) [4] => my_tempnam [5] => /p2/var/php_gcov/PHP_4_4/ext/mysql/libmysql/my_tempnam.c [6] => 115 [7] => warning [8] => the use of `tempnam' is dangerous, better use `mkstemp' ) [21] => Array ( [0] => ext/mysql/libmysql/my_tempnam.o(.text+0x80): In function `my_tempnam': /p2/var/php_gcov/PHP_4_4/ext/mysql/libmysql/my_tempnam.c:115: warning: the use of `tempnam' is dangerous, better use `mkstemp' [1] => ext/mysql/libmysql/my_tempnam.o(.text+0x80): In function `my_tempnam': [2] => ext/mysql/libmysql/my_tempnam.o [3] => (.text+0x80) [4] => my_tempnam [5] => /p2/var/php_gcov/PHP_4_4/ext/mysql/libmysql/my_tempnam.c [6] => 115 [7] => warning [8] => the use of `tempnam' is dangerous, better use `mkstemp' ) [22] => Array ( [0] => ext/ming/ming.o(.text+0xc115): In function `zim_swfmovie_namedAnchor': /p2/var/php_gcov/PHP_5_2/ext/ming/ming.c:2207: undefined reference to `SWFMovie_namedAnchor' /p2/var/php_gcov/PHP_5_2/ext/ming/ming.c:2209: undefined reference to `SWFMovie_xpto' /p2/var/php_gcov/PHP_5_2/ext/ming/ming.c:2259: undefined reference to `SWFMovie_foo' [1] => ext/ming/ming.o(.text+0xc115): In function `zim_swfmovie_namedAnchor': [2] => ext/ming/ming.o [3] => (.text+0xc115) [4] => zim_swfmovie_namedAnchor [5] => /p2/var/php_gcov/PHP_5_2/ext/ming/ming.c [6] => 2207 [7] => [8] => undefined reference to `SWFMovie_namedAnchor' [9] => 2209 [10] => [11] => undefined reference to `SWFMovie_xpto' [12] => 2259 [13] => [14] => undefined reference to `SWFMovie_foo' ) [23] => Array ( [0] => ext/ming/ming.o(.text+0x851): In function `zif_ming_setSWFCompression': /p2/var/php_gcov/PHP_5_2/ext/ming/ming.c:154: undefined reference to `Ming_setSWFCompression' [1] => ext/ming/ming.o(.text+0x851): In function `zif_ming_setSWFCompression': [2] => ext/ming/ming.o [3] => (.text+0x851) [4] => zif_ming_setSWFCompression [5] => /p2/var/php_gcov/PHP_5_2/ext/ming/ming.c [6] => 154 [7] => [8] => undefined reference to `Ming_setSWFCompression' ) ) ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/006.phpt ================================================ --TEST-- preg_replace() with array of failing regular expressions --INI-- pcre.backtrack_limit=100000 --FILE-- --EXPECTF-- string(58) "[CODE]<td align="$stylevar[right]">[/CODE]" NULL string(58) "[CODE]<td align="$stylevar[right]">[/CODE]" NULL Done ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/007.phpt ================================================ --TEST-- preg_replace_callback() with callback that modifies subject string --SKIPIF-- --FILE-- --EXPECT-- array(1) { [0]=> string(1) "o" } array(1) { [0]=> string(1) "l" } array(1) { [0]=> string(1) "a" } array(1) { [0]=> string(1) "1" } array(1) { [0]=> string(1) "2" } array(1) { [0]=> string(1) "3" } string(6) "ola123" string(6) "ola23" bool(true) NULL bool(true) Done! ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/backtrack_limit.phpt ================================================ --TEST-- Backtracking limit --SKIPIF-- --INI-- pcre.backtrack_limit=2 --FILE-- --EXPECT-- bool(false) bool(true) int(10) bool(true) ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/bug20528.phpt ================================================ --TEST-- Bug #20528 (preg_split() drops characters (re-opens Bug #15413)) --FILE-- --EXPECT-- array(7) { [0]=> string(2) "(#" [1]=> string(2) "11" [2]=> string(1) "/" [3]=> string(2) "19" [4]=> string(1) "/" [5]=> string(4) "2002" [6]=> string(2) "#)" } ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/bug21732.phpt ================================================ --TEST-- Bug #21732 (preg_replace() segfaults with invalid parameters) --INI-- error_reporting=0 --FILE-- --EXPECT-- bool(false) array(4) { [0]=> string(5) "abcde" [1]=> string(2) "ab" [2]=> string(2) "cd" [3]=> string(1) "e" } string(4) "yes!" ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/bug21758.phpt ================================================ --TEST-- Bug #21758 (preg_replace_callback() not working with class methods) --FILE-- --EXPECT-- string(25) "preg_replace() is working" ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/bug26927.phpt ================================================ --TEST-- Bug #26927 (preg_quote() does not escape \0) --FILE-- --EXPECT-- int(1) string(6) "a\000b" ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/bug27011.phpt ================================================ --TEST-- Bug #27011 (segfault in preg_match_all()) --FILE-- --EXPECT-- int(0) array(0) { } ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/bug27103.phpt ================================================ --TEST-- Bug #27103 (preg_split('//u') incorrectly splits UTF-8 strings into octets) --SKIPIF-- --FILE-- --EXPECT-- €: 3 : 1 h: 1 i: 1 : 1 t: 1 h: 1 e: 1 r: 1 e: 1 €: 3 : 1 h: 1 i: 1 : 1 t: 1 h: 1 e: 1 r: 1 e: 1 ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/bug34790.phpt ================================================ --TEST-- Bug #34790 (preg_match_all(), named capturing groups, variable assignment/return => crash) --FILE-- the)/', $string, $matches); return $matches['word']; } $words = func1(); var_dump($words); ?> --EXPECT-- array(4) { [0]=> string(3) "the" [1]=> string(3) "the" [2]=> string(3) "the" [3]=> string(3) "the" } ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/bug37800.phpt ================================================ --TEST-- Bug #37800 (preg_replace() limit parameter odd behaviour) --FILE-- --EXPECT-- Output = 'One 111111111' Count = 1 bool(true) Output = 'One One One One One One One One One One ' Count = 10 bool(true) ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/bug37911.phpt ================================================ --TEST-- Bug #37911 (preg_replace_callback ignores named groups) --FILE-- blub)|', 'callback', 'bla blub blah')); var_dump(preg_match('|(?Pblub)|', 'bla blub blah', $m)); var_dump($m); var_dump(preg_replace_callback('|(?P<1>blub)|', 'callback', 'bla blub blah')); ?> --EXPECTF-- array(3) { [0]=> string(4) "blub" ["name"]=> string(4) "blub" [1]=> string(4) "blub" } string(15) "bla blub/4 blah" int(1) array(3) { [0]=> string(4) "blub" ["name"]=> string(4) "blub" [1]=> string(4) "blub" } Warning: preg_replace_callback(): Numeric named subpatterns are not allowed in %sbug37911.php on line 14 NULL ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/bug38600.phpt ================================================ --TEST-- Bug #38600 (infinite loop in pcre with extended class) --FILE-- --EXPECT-- int(0) array(0) { } ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/bug40195.phpt ================================================ --TEST-- Bug #40195 (pcre 6.7 regression) --FILE-- --EXPECT-- int(1) array(3) { [0]=> string(7) "//abcde" [1]=> string(6) "/abcde" [2]=> string(5) "abcde" } int(1) array(2) { [0]=> string(7) "//abcde" [1]=> string(6) "/abcde" } int(1) array(3) { [0]=> string(8) "/a/abcde" [1]=> string(6) "/abcde" [2]=> string(5) "abcde" } int(1) array(2) { [0]=> string(8) "/a/abcde" [1]=> string(6) "/abcde" } ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/bug40909.phpt ================================================ --TEST-- Bug #40909 (pcre 7.0 regression) --FILE-- "; $match = array(); if ($result =preg_match_all($pattern, $context, $match)) { var_dump($result); var_dump($match); } ?> --EXPECT-- int(1) array(3) { [0]=> array(1) { [0]=> string(33) " an_attribute="simpleValueInside"" } [1]=> array(1) { [0]=> string(12) "an_attribute" } [2]=> array(1) { [0]=> string(19) ""simpleValueInside"" } } ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/bug41050.phpt ================================================ --TEST-- Bug #41050 (pcre 7.0 regression) --FILE-- --EXPECT-- matchedArray ( [0] => SELECT * FROM #__components [1] => SELECT [2] => [3] => [4] => [5] => ) ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/bug41148.phpt ================================================ --TEST-- Bug #41148 (pcre 7.0 regression) --FILE--
    "; $ligne_horizontale = $puce = $debut_intertitre = $fin_intertitre = ''; $cherche1 = array( /* 0 */ "/\n(----+|____+)/S", /* 1 */ "/\n-- */S", /* 2 */ "/\n- */S", /* 3 */ "/\n_ +/S", /* 4 */ "/(^|[^{])[{][{][{]/S", /* 5 */ "/[}][}][}]($|[^}])/S", /* 6 */ "/(( *)\n){2,}()?/S", /* 7 */ "/[{][{]/S", /* 8 */ "/[}][}]/S", /* 9 */ "/[{]/S", /* 10 */ "/[}]/S", /* 11 */ "/(){2,}/S", /* 12 */ "/

    ([\n]*()*)*/S", /* 13 */ "//S", /* 14 */ "/<\/quote>/S" ); $remplace1 = array( /* 0 */ "\n\n$ligne_horizontale\n\n", /* 1 */ "\n
    — ", /* 2 */ "\n
    $puce ", /* 3 */ "\n
    ", /* 4 */ "\$1\n\n$debut_intertitre", /* 5 */ "$fin_intertitre\n\n\$1", /* 6 */ "

    ", /* 7 */ "", /* 8 */ "", /* 9 */ "", /* 10 */ "", /* 11 */ "

    ", /* 12 */ "

    ", /* 13 */ "

    ", /* 14 */ "

    " ); $letexte = preg_replace($cherche1, $remplace1, $letexte); $letexte = preg_replace("@^
    @S", "", $letexte); print $letexte; ?> --EXPECT--

    ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/bug41638.phpt ================================================ --TEST-- Bug #41638 (pcre 7.0 regression) --FILE-- --EXPECT-- Array ( [0] => Array ( [0] => 'loopt' ) [1] => Array ( [0] => ' ) [2] => Array ( [0] => loopt ) [3] => Array ( [0] => t ) [4] => Array ( [0] => ) ) Array ( [0] => Array ( [0] => 'loopt' ) [1] => Array ( [0] => ' ) [2] => Array ( [0] => loopt ) ) Array ( [0] => Array ( [0] => 'loopt' ) [1] => Array ( [0] => ' ) [2] => Array ( [0] => loopt ) ) ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/bug42298.phpt ================================================ --TEST-- Bug #42298 (pcre gives bogus results with /u) --FILE-- --EXPECT-- array(1) { [0]=> array(2) { [0]=> string(3) "A£" [1]=> string(2) "BC" } } array(1) { [0]=> array(2) { [0]=> string(3) "A£" [1]=> string(2) "BC" } } array(1) { [0]=> array(1) { [0]=> string(4) "€ " } } array(1) { [0]=> array(1) { [0]=> string(4) "€ " } } ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/bug42737.phpt ================================================ --TEST-- Bug #42737 (preg_split('//u') triggers a E_NOTICE with newlines) --FILE-- --EXPECT-- array(2) { [0]=> int(13) [1]=> int(10) } ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/bug42945.phpt ================================================ --TEST-- Bug #42945 (preg_split() swallows part of the string) --FILE-- --EXPECT-- int(2) array(1) { [0]=> array(2) { [0]=> array(2) { [0]=> string(0) "" [1]=> int(0) } [1]=> array(2) { [0]=> string(0) "" [1]=> int(1) } } } array(3) { [0]=> string(0) "" [1]=> string(1) "a" [2]=> string(1) "'" } array(3) { [0]=> array(2) { [0]=> string(0) "" [1]=> int(0) } [1]=> array(2) { [0]=> string(1) "a" [1]=> int(0) } [2]=> array(2) { [0]=> string(1) "'" [1]=> int(1) } } array(2) { [0]=> string(1) "a" [1]=> string(1) "'" } array(2) { [0]=> array(2) { [0]=> string(1) "a" [1]=> int(0) } [1]=> array(2) { [0]=> string(1) "'" [1]=> int(1) } } ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/bug44191.phpt ================================================ --TEST-- Bug #44191 (preg_grep messes up array index) --FILE-- --EXPECT-- 0123456789 ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/bug44214.phpt ================================================ --TEST-- Bug #44214 (crash with preg_replace_callback() and global variable) --FILE-- --EXPECT-- string(31) "xxx bbb ccc ddd eee ccc xxx bbb" array(2) { [0]=> array(1) { [0]=> string(3) "aaa" } [1]=> array(1) { [0]=> string(3) "aaa" } } ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/bug44214_2.phpt ================================================ --TEST-- Bug #44214-2 (crash with preg_replace_callback() and global variable) --FILE-- --EXPECT-- string(31) "xxx bbb ccc ddd eee ccc xxx bbb" array(2) { [0]=> string(3) "aaa" [1]=> string(3) "aaa" } ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/bug44925.phpt ================================================ --TEST-- Bug #44925 (preg_grep() modifies input array) --FILE-- --EXPECTF-- array(9) { [0]=> string(1) "1" [1]=> int(2) [2]=> int(3) [3]=> float(1.1) [4]=> bool(false) [5]=> NULL [6]=> array(0) { } [7]=> string(1) "a" [8]=> &string(1) "b" } Notice: Array to string conversion in %sbug44925.php on line 9 array(0) { } Notice: Array to string conversion in %sbug44925.php on line 11 array(7) { [0]=> string(1) "1" [1]=> int(2) [2]=> int(3) [3]=> float(1.1) [6]=> array(0) { } [7]=> string(1) "a" [8]=> &string(1) "b" } array(7) { [0]=> string(1) "1" [1]=> int(2) [2]=> int(3) [3]=> float(1.1) [6]=> array(0) { } [7]=> string(1) "a" [8]=> &string(1) "y" } array(9) { [0]=> string(1) "1" [1]=> int(2) [2]=> int(3) [3]=> float(1.1) [4]=> bool(false) [5]=> NULL [6]=> array(0) { } [7]=> string(1) "a" [8]=> &string(1) "y" } ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/bug47229.phpt ================================================ --TEST-- Bug #47229 (preg_quote() doesn't escape -) --FILE-- --EXPECTF-- %string|unicode%(13) "\-oh really\?" array(1) { [0]=> %string|unicode%(4) "a---" } array(1) { [0]=> %string|unicode%(1) "a" } array(1) { [0]=> %string|unicode%(5) "a----" } array(0) { } ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/bug47662.phpt ================================================ --TEST-- Bug #47662 (support more than 127 named subpatterns) --FILE-- ))'; } $regex .= 'fo+bar@'; var_dump(preg_match($regex, 'foobar')); echo "Done!\n"; ?> --EXPECT-- int(1) Done! ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/bug52732.phpt ================================================ --TEST-- Bug #52732 (Docs say preg_match() returns FALSE on error, but it returns int(0)) --INI-- pcre.backtrack_limit=1 --FILE-- )*[!?]/', 'foobar foobar foobar'); var_dump($ret); ?> --EXPECT-- bool(false) ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/bug52971.phpt ================================================ --TEST-- Bug #52971 (PCRE-Meta-Characters not working with utf-8) --SKIPIF-- = 8.1 is required!'); ?> --FILE-- --EXPECTF-- array(1) { [0]=> array(1) { [0]=> array(2) { [0]=> string(6) "Wasser" [1]=> int(61) } } } array(1) { [0]=> array(1) { [0]=> array(2) { [0]=> string(7) " Wasser" [1]=> int(60) } } } ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/bug63055.phpt ================================================ --TEST-- Bug #63055 (Segfault in zend_gc with SF2 testsuite) --FILE-- "bar"); /* this bucket will trigger the segfault */ $dummy = array("dummy"); /* used to trigger gc_collect_cycles */ $dummy[1] = &$dummy; $matches[1] = &$matches; $matches[2] = $dummy; preg_match_all("/(\d)+/", "foo123456bar", $matches); echo "okey"; ?> --EXPECTF-- okey ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/cache_limit.phpt ================================================ --TEST-- Compiled regex cache limit --FILE-- --EXPECT-- int(1) int(1) done ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/delimiters.phpt ================================================ --TEST-- Delimiters crash test --FILE-- ', '')); var_dump(preg_match('~a', '')); var_dump(preg_match('@\@\@@', '@@')); var_dump(preg_match('//z', '@@')); var_dump(preg_match('{', '')); ?> --EXPECTF-- Warning: preg_match(): Empty regular expression in %sdelimiters.php on line 3 bool(false) Warning: preg_match(): Empty regular expression in %sdelimiters.php on line 4 bool(false) int(1) Warning: preg_match(): Delimiter must not be alphanumeric or backslash in %sdelimiters.php on line 6 bool(false) int(1) Warning: preg_match(): No ending delimiter '~' found in %sdelimiters.php on line 8 bool(false) int(1) Warning: preg_match(): Unknown modifier 'z' in %sdelimiters.php on line 10 bool(false) Warning: preg_match(): No ending matching delimiter '}' found in %sdelimiters.php on line 11 bool(false) ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/dollar_endonly.phpt ================================================ --TEST-- D (PCRE_DOLLAR_ENDONLY) modififer --FILE-- --EXPECT-- int(1) array(1) { [0]=> array(1) { [0]=> string(5) "aeiou" } } int(0) array(1) { [0]=> array(0) { } } int(1) array(1) { [0]=> array(1) { [0]=> string(6) "aeiou " } } ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/grep.phpt ================================================ --TEST-- preg_grep() --FILE-- --EXPECT-- array(2) { [1]=> string(1) "1" [2]=> string(2) "q6" } array(2) { [0]=> string(1) "a" [3]=> string(3) "h20" } ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/grep2.phpt ================================================ --TEST-- preg_grep() 2nd test --FILE-- 'a', 'x' => '1', 'xyz'=>'q6', 'h20'); var_dump(preg_grep('@^[a-z]+@', $array)); var_dump(preg_grep('@^[a-z]+@', $array, PREG_GREP_INVERT)); ini_set('pcre.recursion_limit', 1); var_dump(preg_last_error() == PREG_NO_ERROR); var_dump(preg_grep('@^[a-z]+@', $array)); var_dump(preg_last_error() == PREG_RECURSION_LIMIT_ERROR); ?> --EXPECTF-- Warning: preg_grep() expects at most 3 parameters, 4 given in %sgrep2.php on line 3 NULL Warning: preg_grep() expects parameter 2 to be array, integer given in %sgrep2.php on line 4 NULL Warning: preg_grep(): Compilation failed: nothing to repeat at offset 0 in %sgrep2.php on line 5 bool(false) array(3) { [5]=> string(1) "a" ["xyz"]=> string(2) "q6" [6]=> string(3) "h20" } array(1) { ["x"]=> string(1) "1" } bool(true) array(0) { } bool(true) ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/invalid_utf8.phpt ================================================ --TEST-- preg_replace() and invalid UTF8 --SKIPIF-- --FILE-- --EXPECT-- NULL int(4) Done ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/invalid_utf8_offset.phpt ================================================ --TEST-- preg_replace() and invalid UTF8 offset --SKIPIF-- --FILE-- --EXPECT-- bool(false) array(0) { } bool(true) int(1) array(1) { [0]=> string(28) " uma string utf8 bem formada" } bool(true) Done ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/locales.phpt ================================================ --TEST-- Localized match --SKIPIF-- --FILE-- --EXPECT-- int(0) int(1) int(0) ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/match_flags.phpt ================================================ --TEST-- preg_match_all() flags --FILE-- --EXPECT-- int(2) array(2) { [0]=> array(2) { [0]=> string(2) "zx" [1]=> string(2) "ax" } [1]=> array(2) { [0]=> string(1) "z" [1]=> string(1) "a" } } int(2) array(2) { [0]=> array(2) { [0]=> string(2) "zx" [1]=> string(1) "z" } [1]=> array(2) { [0]=> string(2) "yx" [1]=> string(1) "y" } } int(2) array(2) { [0]=> array(2) { [0]=> array(2) { [0]=> string(2) "zx" [1]=> int(0) } [1]=> array(2) { [0]=> string(2) "yx" [1]=> int(2) } } [1]=> array(2) { [0]=> array(2) { [0]=> string(1) "z" [1]=> int(0) } [1]=> array(2) { [0]=> string(1) "y" [1]=> int(2) } } } int(2) array(2) { [0]=> array(2) { [0]=> array(2) { [0]=> string(2) "zx" [1]=> int(0) } [1]=> array(2) { [0]=> string(1) "z" [1]=> int(0) } } [1]=> array(2) { [0]=> array(2) { [0]=> string(2) "yx" [1]=> int(2) } [1]=> array(2) { [0]=> string(1) "y" [1]=> int(2) } } } ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/match_flags2.phpt ================================================ --TEST-- preg_match() flags --FILE-- .)(x)(?P\S+)/', 'fjszxax', $match, PREG_OFFSET_CAPTURE)); var_dump($match); ?> --EXPECT-- int(1) array(2) { [0]=> array(2) { [0]=> string(2) "xa" [1]=> int(4) } [1]=> array(2) { [0]=> string(1) "a" [1]=> int(5) } } int(1) array(2) { [0]=> array(2) { [0]=> string(2) "ax" [1]=> int(5) } [1]=> array(2) { [0]=> string(1) "a" [1]=> int(5) } } int(1) array(6) { [0]=> array(2) { [0]=> string(4) "zxax" [1]=> int(3) } ["capt1"]=> array(2) { [0]=> string(1) "z" [1]=> int(3) } [1]=> array(2) { [0]=> string(1) "z" [1]=> int(3) } [2]=> array(2) { [0]=> string(1) "x" [1]=> int(4) } ["letsmix"]=> array(2) { [0]=> string(2) "ax" [1]=> int(5) } [3]=> array(2) { [0]=> string(2) "ax" [1]=> int(5) } } ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/match_flags3.phpt ================================================ --TEST-- preg_match() flags 3 --FILE-- )/', '')); ?> --EXPECTF-- Warning: preg_match(): Empty regular expression in %smatch_flags3.php on line 3 bool(false) int(1) array(1) { [0]=> string(3) "789" } int(1) array(1) { [0]=> string(3) "123" } int(2) array(1) { [0]=> array(2) { [0]=> string(3) "789" [1]=> string(3) "012" } } Warning: preg_match(): Numeric named subpatterns are not allowed in %smatch_flags3.php on line 14 bool(false) ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/multiline.phpt ================================================ --TEST-- Multi-line match --FILE-- --EXPECT-- int(0) int(0) int(2) int(2) done ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/null_bytes.phpt ================================================ --TEST-- Zero byte test --FILE-- --EXPECTF-- Warning: preg_match(): Null byte in regex in %snull_bytes.php on line 3 Warning: preg_match(): Null byte in regex in %snull_bytes.php on line 4 Warning: preg_match(): Null byte in regex in %snull_bytes.php on line 5 Warning: preg_match(): Null byte in regex in %snull_bytes.php on line 6 Warning: preg_match(): Null byte in regex in %snull_bytes.php on line 7 Warning: preg_match(): Null byte in regex in %snull_bytes.php on line 9 Warning: preg_match(): Null byte in regex in %snull_bytes.php on line 10 Warning: preg_match(): Null byte in regex in %snull_bytes.php on line 11 Warning: preg_match(): Null byte in regex in %snull_bytes.php on line 12 Warning: preg_match(): Null byte in regex in %snull_bytes.php on line 13 Warning: preg_replace(): Null byte in regex in %snull_bytes.php on line 15 ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/pcre.constants.phpt ================================================ --TEST-- Test for pre-defined pcre constants --FILE-- ===Done=== --EXPECT-- PCRE constants test PREG_PATTERN_ORDER= 1 PREG_OFFSET_CAPTURE= 256 PREG_SPLIT_NO_EMPTY= 1 PREG_SPLIT_DELIM_CAPTURE= 2 PREG_SPLIT_OFFSET_CAPTURE= 4 PREG_GREP_INVERT= 1 PREG_NO_ERROR= 0 PREG_INTERNAL_ERROR= 1 PREG_BACKTRACK_LIMIT_ERROR= 2 PREG_RECURSION_LIMIT_ERROR= 3 PREG_BAD_UTF8_ERROR= 4 ===Done=== ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/pcre_anchored.phpt ================================================ --TEST-- A (PCRE_ANCHORED) modififer --SKIPIF-- --FILE-- --EXPECT-- int(1) array(1) { [0]=> string(3) "abc" } int(0) int(0) int(0) ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/pcre_count.phpt ================================================ --TEST-- preg_replace() fifth parameter - count --FILE-- --EXPECT-- string(56) "xxxx xxxx 1-a-3-4 1-2-a-4 1-2-3-a a-a-a-a xxxx xxxx-xxxx" int(5) string(41) "Hxxxx xxxx xxxx xxxx xxxx 42 xxxx 13 xxxx" int(7) string(25) "... ... ... ... v1c0d1/|/" int(4) string(25) "... ... ... ... v1c0d1/|/" NULL ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/pcre_extended.phpt ================================================ --TEST-- x (PCRE_EXTENDED) modififer --FILE-- --EXPECT-- int(0) array(0) { } int(1) array(1) { [0]=> string(5) "aeiou" } int(1) array(1) { [0]=> string(5) "aeiou" } ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/pcre_extra.phpt ================================================ --TEST-- X (PCRE_EXTRA) modififer --FILE-- --EXPECTF-- int(1) Warning: preg_match(): Compilation failed: unrecognized character follows \ at offset 1 in %spcre_extra.php on line 4 bool(false) ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/preg_filter.phpt ================================================ --TEST-- preg_filter() --FILE-- ===DONE=== --EXPECT-- array(6) { [0]=> string(5) "A:C:1" [1]=> string(5) "B:C:a" [2]=> string(3) "A:2" [3]=> string(3) "B:b" [4]=> string(3) "A:3" [7]=> string(3) "A:4" } ===DONE=== ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/preg_grep_basic.phpt ================================================ --TEST-- Test preg_grep() function : basic functionality --FILE-- --EXPECT-- array(5) { [0]=> string(22) "HTTP://WWW.EXAMPLE.COM" [1]=> string(11) "/index.html" [2]=> string(11) "/info/stat/" [3]=> string(29) "http://test.uk.com/index/html" [4]=> string(17) "/display/dept.php" } array(2) { [0]=> string(22) "HTTP://WWW.EXAMPLE.COM" [3]=> string(29) "http://test.uk.com/index/html" } array(5) { [0]=> string(22) "HTTP://WWW.EXAMPLE.COM" [1]=> string(11) "/index.html" [2]=> string(11) "/info/stat/" [3]=> string(29) "http://test.uk.com/index/html" [4]=> string(17) "/display/dept.php" } array(1) { [3]=> string(29) "http://test.uk.com/index/html" } array(0) { } array(3) { [1]=> string(11) "/index.html" [2]=> string(11) "/info/stat/" [4]=> string(17) "/display/dept.php" } ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/preg_grep_error.phpt ================================================ --TEST-- Test preg_grep() function : error conditions - wrong numbers of parameters --FILE-- --EXPECTF-- *** Testing preg_grep() : error conditions *** -- Testing preg_grep() function with Zero arguments -- Warning: preg_grep() expects at least 2 parameters, 0 given in %spreg_grep_error.php on line %d NULL -- Testing preg_grep() function with more than expected no. of arguments -- Warning: preg_grep() expects at most 3 parameters, 4 given in %spreg_grep_error.php on line %d NULL -- Testing preg_grep() function with less than expected no. of arguments -- Warning: preg_grep() expects at least 2 parameters, 1 given in %spreg_grep_error.php on line %d NULL Done ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/preg_grep_error1.phpt ================================================ --TEST-- Test preg_grep() function : error conditions - bad regular expressions --FILE-- --EXPECTF-- *** Testing preg_grep() : error conditions *** Arg value is abcdef Warning: preg_grep(): Delimiter must not be alphanumeric or backslash in %spreg_grep_error1.php on line %d bool(false) Arg value is /[a-zA-Z] Warning: preg_grep(): No ending delimiter '/' found in %spreg_grep_error1.php on line %d bool(false) Arg value is [a-zA-Z]/ Warning: preg_grep(): Unknown modifier '/' in %spreg_grep_error1.php on line %d bool(false) Arg value is /[a-zA-Z]/F Warning: preg_grep(): Unknown modifier 'F' in %spreg_grep_error1.php on line %d bool(false) Arg value is Array Warning: preg_grep() expects parameter 1 to be string, array given in %spreg_grep_error1.php on line %d NULL Arg value is /[a-zA-Z]/ array(2) { [1]=> string(3) "abc" [2]=> string(4) "test" } Warning: preg_grep() expects parameter 1 to be string, object given in %spreg_grep_error1.php on line %d NULL Done ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/preg_grep_error2.phpt ================================================ --TEST-- Test preg_grep() function : error conditions - wrong arg types --FILE-- --EXPECTF-- *** Testing preg_grep() : error conditions *** Arg value is: this is a string Warning: preg_grep() expects parameter 2 to be array, string given in %spreg_grep_error2.php on line %d NULL Arg value is: Array array(2) { [0]=> string(7) "this is" [1]=> string(10) "a subarray" } Warning: preg_grep() expects parameter 2 to be array, object given in %spreg_grep_error2.php on line %d NULL Done ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/preg_last_error_error.phpt ================================================ --TEST-- Test preg_grep() function : error conditions - wrong numbers of parameters --FILE-- ===Done=== --EXPECTF-- *** Testing preg_last_error() : error conditions *** -- Testing preg_last_error() function with more than expected no. of arguments -- Warning: preg_last_error() expects exactly 0 parameters, 1 given in %s on line %d NULL ===Done=== ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/preg_match_all_basic.phpt ================================================ --TEST-- Test preg_match_all() function : basic functionality --FILE-- --EXPECTF-- int(1) array(1) { [0]=> array(1) { [0]=> array(2) { [0]=> string(1) "3" [1]=> int(61) } } } int(2) array(2) { [0]=> array(2) { [0]=> string(15) "This is a test." [1]=> string(5) " test" } [1]=> array(2) { [0]=> string(21) "This is another test." [1]=> string(11) "nother test" } } int(1) array(2) { [0]=> array(1) { [0]=> string(21) ". \[4]. 34534 string." } [1]=> array(1) { [0]=> string(17) "[4]. 34534 string" } } int(0) array(1) { [0]=> array(0) { } } int(0) array(3) { [0]=> array(0) { } [1]=> array(0) { } [2]=> array(0) { } } int(2) int(0) int(1) int(6) ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/preg_match_all_edit_basic.phpt ================================================ --TEST-- Test preg_match_all() function : basic functionality --FILE-- --EXPECTF-- int(1) array(1) { [0]=> array(1) { [0]=> array(2) { [0]=> string(1) "3" [1]=> int(61) } } } int(2) array(2) { [0]=> array(2) { [0]=> string(15) "This is a test." [1]=> string(5) " test" } [1]=> array(2) { [0]=> string(21) "This is another test." [1]=> string(11) "nother test" } } int(1) array(2) { [0]=> array(1) { [0]=> string(21) ". \[4]. 34534 string." } [1]=> array(1) { [0]=> string(17) "[4]. 34534 string" } } int(0) array(1) { [0]=> array(0) { } } int(0) array(3) { [0]=> array(0) { } [1]=> array(0) { } [2]=> array(0) { } } ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/preg_match_all_error.phpt ================================================ --TEST-- Test preg_match_all() function : error conditions - incorrect number of parameters --FILE-- --EXPECTF-- *** Testing preg_match_all() : error conditions *** -- Testing preg_match_all() function with Zero arguments -- Warning: preg_match_all() expects at least 2 parameters, 0 given in %spreg_match_all_error.php on line %d bool(false) -- Testing preg_match_all() function with more than expected no. of arguments -- Warning: preg_match_all() expects at most 5 parameters, 6 given in %spreg_match_all_error.php on line %d bool(false) -- Testing preg_match_all() function with less than expected no. of arguments -- Warning: preg_match_all() expects at least 2 parameters, 1 given in %spreg_match_all_error.php on line %d bool(false) Done ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/preg_match_all_error1.phpt ================================================ --TEST-- Test preg_match_all() function : error conditions - bad regular expressions --FILE-- --EXPECTF-- *** Testing preg_match_all() : error conditions *** Arg value is abcdef Warning: preg_match_all(): Delimiter must not be alphanumeric or backslash in %spreg_match_all_error1.php on line %d bool(false) NULL Arg value is /[a-zA-Z] Warning: preg_match_all(): No ending delimiter '/' found in %spreg_match_all_error1.php on line %d bool(false) NULL Arg value is [a-zA-Z]/ Warning: preg_match_all(): Unknown modifier '/' in %spreg_match_all_error1.php on line %d bool(false) NULL Arg value is /[a-zA-Z]/F Warning: preg_match_all(): Unknown modifier 'F' in %spreg_match_all_error1.php on line %d bool(false) NULL Arg value is Array Warning: preg_match_all() expects parameter 1 to be string, array given in %spreg_match_all_error1.php on line %d bool(false) NULL Arg value is /[a-zA-Z]/ int(4) array(1) { [0]=> array(4) { [0]=> string(1) "t" [1]=> string(1) "e" [2]=> string(1) "s" [3]=> string(1) "t" } } Warning: preg_match_all() expects parameter 1 to be string, object given in %spreg_match_all_error1.php on line %d bool(false) NULL ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/preg_match_all_error2.phpt ================================================ --TEST-- Test preg_match_all() function : error conditions - wrong arg types --FILE-- --EXPECTF-- *** Testing preg_match_all() : error conditions *** Warning: preg_match_all() expects parameter 2 to be string, object given in %spreg_match_all_error2.php on line %d bool(false) NULL Arg value is: Array Warning: preg_match_all() expects parameter 2 to be string, array given in %spreg_match_all_error2.php on line %d bool(false) NULL Arg value is: test int(4) array(1) { [0]=> array(4) { [0]=> string(1) "t" [1]=> string(1) "e" [2]=> string(1) "s" [3]=> string(1) "t" } } Done ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/preg_match_all_error3.phpt ================================================ --TEST-- Test preg_match_all() function : error conditions --FILE-- --EXPECTF-- Fatal error: Only variables can be passed by reference in %spreg_match_all_error3.php on line %d ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/preg_match_basic.phpt ================================================ --TEST-- Test preg_match() function : basic functionality --FILE-- --EXPECTF-- int(1) array(1) { [0]=> string(7) "Hello, " } int(0) array(0) { } int(1) array(2) { [0]=> string(23) "[*], this is \ a string" [1]=> string(18) "this is \ a string" } int(1) array(1) { [0]=> array(2) { [0]=> string(18) "this is \ a string" [1]=> int(19) } } int(0) array(0) { } ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/preg_match_basic_002.phpt ================================================ --TEST-- preg_match() single line match with multi-line input --FILE-- ===Done=== --EXPECTF-- array(2) { [0]=> string(2) "My" [1]=> string(1) "y" } ===Done=== ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/preg_match_basic_edit.phpt ================================================ --TEST-- Test preg_match() function : basic functionality --FILE-- --EXPECTF-- int(1) array(1) { [0]=> string(7) "Hello, " } int(0) array(0) { } int(1) array(2) { [0]=> string(23) "[*], this is \ a string" [1]=> string(18) "this is \ a string" } int(1) array(1) { [0]=> array(2) { [0]=> string(18) "this is \ a string" [1]=> int(19) } } int(0) array(0) { } ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/preg_match_error.phpt ================================================ --TEST-- Test preg_match() function : error conditions - wrong numbers of parameters --FILE-- --EXPECTF-- *** Testing preg_match() : error conditions *** -- Testing preg_match() function with Zero arguments -- Warning: preg_match() expects at least 2 parameters, 0 given in %spreg_match_error.php on line %d bool(false) -- Testing preg_match() function with more than expected no. of arguments -- Warning: preg_match() expects at most 5 parameters, 6 given in %spreg_match_error.php on line %d bool(false) -- Testing preg_match() function with less than expected no. of arguments -- Warning: preg_match() expects at least 2 parameters, 1 given in %spreg_match_error.php on line %d bool(false) Done ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/preg_match_error1.phpt ================================================ --TEST-- Test preg_match() function : error conditions - bad regular expressions --FILE-- --EXPECTF-- *** Testing preg_match() : error conditions *** Arg value is abcdef Warning: preg_match(): Delimiter must not be alphanumeric or backslash in %spreg_match_error1.php on line %d bool(false) Arg value is /[a-zA-Z] Warning: preg_match(): No ending delimiter '/' found in %spreg_match_error1.php on line %d bool(false) Arg value is [a-zA-Z]/ Warning: preg_match(): Unknown modifier '/' in %spreg_match_error1.php on line %d bool(false) Arg value is /[a-zA-Z]/F Warning: preg_match(): Unknown modifier 'F' in %spreg_match_error1.php on line %d bool(false) Arg value is Array Warning: preg_match() expects parameter 1 to be string, array given in %spreg_match_error1.php on line %d bool(false) Arg value is /[a-zA-Z]/ int(1) Warning: preg_match() expects parameter 1 to be string, object given in %spreg_match_error1.php on line %d bool(false) ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/preg_match_error2.phpt ================================================ --TEST-- Test preg_match() function : error conditions - wrong arg types --FILE-- --EXPECTF-- *** Testing preg_match() : error conditions *** Arg value is: this is a string int(1) Arg value is: Array Warning: preg_match() expects parameter 2 to be string, array given in %spreg_match_error2.php on line %d bool(false) Warning: preg_match() expects parameter 2 to be string, object given in %spreg_match_error2.php on line %d bool(false) Done ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/preg_match_variation1.phpt ================================================ --TEST-- Test preg_match() function : variation --FILE-- ===Done=== --EXPECT-- array(1) { [0]=> string(2) "-1" } ===Done=== ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/preg_quote_basic.phpt ================================================ --TEST-- Test preg_quote() function : basic functionality --FILE-- --EXPECT-- $string_before looks like: /this *-has \ metacharacters^ in $ $string_after looks like: \/this \*\-has \\ metacharacters\^ in \$, with metacharacters and / (set as delimiter) escaped int(1) array(1) { [0]=> string(58) "testing - /this *-has \ metacharacters^ in $ should work" } ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/preg_quote_error.phpt ================================================ --TEST-- Test preg_quote() function : error conditions - wrong numbers of parameters --FILE-- --EXPECTF-- *** Testing preg_quote() : error conditions *** -- Testing preg_quote() function with Zero arguments -- Warning: preg_quote() expects at least 1 parameter, 0 given in %spreg_quote_error.php on line %d NULL -- Testing preg_quote() function with more than expected no. of arguments -- Warning: preg_quote() expects at most 2 parameters, 3 given in %spreg_quote_error.php on line %d NULL Done ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/preg_quote_error1.phpt ================================================ --TEST-- Test preg_quote() function : error conditions - wrong arg types --FILE-- --EXPECTF-- *** Testing preg_quote() : error conditions *** Arg value is: this is a string string(16) "this is a string" Arg value is: Array Warning: preg_quote() expects parameter 1 to be string, array given in %spreg_quote_error1.php on line %d NULL Warning: preg_quote() expects parameter 1 to be string, object given in %spreg_quote_error1.php on line %d NULL Done ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/preg_replace.phpt ================================================ --TEST-- preg_replace() --FILE-- --EXPECTF-- string(1) "x" string(4) "abcd" string(8) "zaab2k3l" Warning: preg_replace_callback(): Requires argument 2, '', to be a valid callback in %spreg_replace.php on line 8 string(0) "" Warning: preg_replace_callback(): Modifier /e cannot be used with replacement callback in %spreg_replace.php on line 10 NULL ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/preg_replace2.phpt ================================================ --TEST-- preg_replace() --SKIPIF-- --FILE-- --EXPECTF-- Warning: preg_replace(): Parameter mismatch, pattern is a string while replacement is an array in %spreg_replace2.php on line 3 bool(false) string(1) "c" array(3) { [0]=> string(1) "x" [1]=> string(2) "aA" [2]=> string(2) "vb" } array(2) { [0]=> string(1) "$" [1]=> string(1) "$" } array(2) { [0]=> string(3) "x$y" [1]=> string(1) "$" } ==done== ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/preg_replace_basic.phpt ================================================ --TEST-- Test preg_replace() function : basic functionality --FILE-- ', 'This shouldn\'t work', $string)); //tries to find '- This is a string' at the end of a string but can't so replaces nothing and prints the unchanged $string. var_dump(preg_replace('<[0-35-9]>', '4', $string)); //finds any number that's not 4 and replaces it with a 4 ('444444444') var_dump(preg_replace('<\b[hH]\w{2,4}>', 'Bonjour', $string)); //finds h or H at the beginning of a word followed by 2-4 characters and replaces it with Bonjour (i.e. Hello -> Bonjour) (was finding the 'his' in This and replacing it) var_dump(preg_replace('<(\w)\s*-\s*(\w)>', '\\1. \\2', $string)); //finds dashes with an indefinate amount of whitespace around them and replaces them with a full stop precedeby no spaces and followed by one space var_dump(preg_replace('<(^[a-z]\w+)@(\w+)\.(\w+)\.([a-z]{2,}$)>', '\\1 at \\2 dot \\3 dot \\4', 'josmessa@uk.ibm.com')); //finds the e-mail address and replaces the @ and . with "at" and "dot" (uses backreferences) ('josmessa at uk dot ibm dot com') ?> --EXPECT-- string(54) "123456789 - Hello, world - This is a string." string(54) "123456789 - Hello, world - This is a string." string(54) "444444444 - Hello, world - This is a string." string(56) "123456789 - Bonjour, world - This is a string." string(42) "123456789. Hello, world. This is a string." string(30) "josmessa at uk dot ibm dot com" ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/preg_replace_callback.phpt ================================================ --TEST-- preg_replace_callback() --FILE-- '.$input[1].''; } return preg_replace_callback($regex, 'parseTagsRecursive', $input); } $output = parseTagsRecursive($input); echo $output, "\n"; ?> --EXPECT-- plain

    deep
    [abcd]deeper[/abcd]
    deep
    plain ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/preg_replace_callback2.phpt ================================================ --TEST-- preg_replace_callback() 2 --FILE-- 'aksfjk', 12 => 'aa bb'))); var_dump(preg_replace_callback('~\A.~', 'g', array(array('xyz')))); var_dump(preg_replace_callback('~\A.~', create_function('$m', 'return strtolower($m[0]);'), 'ABC')); ?> --EXPECTF-- array(3) { [0]=> string(12) "'a' 'b3' bcd" ["v"]=> string(6) "aksfjk" [12]=> string(9) "'aa' 'bb'" } Notice: Array to string conversion in %spreg_replace_callback2.php on line 17 array(1) { [0]=> string(7) "'A'rray" } string(3) "aBC" ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/preg_replace_callback3.phpt ================================================ --TEST-- preg_replace_callback() 3 --FILE-- --EXPECTF-- Warning: preg_replace_callback() expects at least 3 parameters, 0 given in %s on line %d NULL Warning: preg_replace_callback() expects at least 3 parameters, 1 given in %s on line %d NULL Warning: preg_replace_callback() expects at least 3 parameters, 2 given in %s on line %d NULL Warning: preg_replace_callback(): Requires argument 2, '2', to be a valid callback in %s on line %d int(3) Warning: preg_replace_callback(): Requires argument 2, '2', to be a valid callback in %s on line %d int(3) Warning: preg_replace_callback(): Requires argument 2, '2', to be a valid callback in %s on line %d int(3) Warning: preg_replace_callback() expects parameter 4 to be long, string given in %s on line %d NULL Warning: preg_replace_callback() expects parameter 4 to be long, array given in %s on line %d NULL Done ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/preg_replace_callback_basic.phpt ================================================ --TEST-- Test preg_replace_callback() function : basic functionality --FILE-- --EXPECTF-- there are seven words in this sentence. one two three 4 is now written in words there are no numbers in this string 0 ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/preg_replace_callback_error.phpt ================================================ --TEST-- Test preg_replace_callback() function : error --FILE-- --EXPECTF-- ***Testing preg_replace_callback() : error conditions*** -- Testing preg_replace_callback() function with Zero arguments -- Warning: preg_replace_callback() expects at least 3 parameters, 0 given in %s on line %d NULL -- Testing preg_replace_callback() function with more than expected no. of arguments -- Warning: preg_replace_callback() expects at most 5 parameters, 6 given in %s on line %d NULL -- Testing preg_replace_callback() function with less than expected no. of arguments -- Warning: preg_replace_callback() expects at least 3 parameters, 2 given in %s on line %d NULL Done ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/preg_replace_callback_error1.phpt ================================================ --TEST-- Test preg_replace_callback() function : error --FILE-- ===Done=== --EXPECTF-- *** Testing preg_replace_callback() : error conditions *** Arg value is abcdef Warning: preg_replace_callback(): Delimiter must not be alphanumeric or backslash in %s on line %d NULL Arg value is /[a-zA-Z] Warning: preg_replace_callback(): No ending delimiter '/' found in %s on line %d NULL Arg value is [a-zA-Z]/ Warning: preg_replace_callback(): Unknown modifier '/' in %s on line %d NULL Arg value is /[a-zA-Z]/F Warning: preg_replace_callback(): Unknown modifier 'F' in %s on line %d NULL Arg value is Array string(9) "number 1." Arg value is /[a-zA-Z]/ string(3) " 1." ===Done=== ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/preg_replace_edit_basic.phpt ================================================ --TEST-- Test preg_replace() function : basic --FILE-- ', 'This shouldn\'t work', $string)); //tries to find '- This is a string' at the end of a string but can't so replaces nothing and prints the unchanged $string. var_dump(preg_replace('<[0-35-9]>', '4', $string, //finds any number that's not 4 and replaces it with a 4 '5', $count)); //limits to 5 replacements returns 444444789 var_dump($count); //counts the number of replacements made (5) var_dump(preg_replace('<\b[hH]\w{2,4}>', 'Bonjour', $string)); //finds h or H at the beginning of a word followed by 2-4 characters and replaces it with Bonjour (i.e. Hello -> Bonjour) (was finding the 'his' in This and replacing it) var_dump(preg_replace('<(\w)\s*-\s*(\w)>', '\\1. \\2', $string)); //finds dashes with an indefinate amount of whitespace around them and replaces them with a full stop precedeby no spaces and followed by one space var_dump(preg_replace('<(^[a-z]\w+)@(\w+)\.(\w+)\.([a-z]{2,}$)>', '\\1 at \\2 dot \\3 dot \\4', 'josmessa@uk.ibm.com')); //finds the e-mail address and replaces the @ and . with "at" and "dot" (uses backreferences) ('josmessa at uk dot ibm dot com') ?> --EXPECTF-- string(54) "123456789 - Hello, world - This is a string." string(54) "123456789 - Hello, world - This is a string." string(54) "444444789 - Hello, world - This is a string." int(5) string(56) "123456789 - Bonjour, world - This is a string." string(42) "123456789. Hello, world. This is a string." string(30) "josmessa at uk dot ibm dot com" ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/preg_replace_error.phpt ================================================ --TEST-- Test preg_replace() function : error - incorrect number of parameters --FILE-- --EXPECTF-- *** Testing preg_replace() : error conditions *** -- Testing preg_replace() function with zero arguments -- Warning: preg_replace() expects at least 3 parameters, 0 given in %s on line %d NULL -- Testing preg_replace() function with more than expected no. of arguments -- Warning: preg_replace() expects at most 5 parameters, 6 given in %s on line %d NULL -- Testing preg_replace() function with less than expected no. of arguments -- Warning: preg_replace() expects at least 3 parameters, 2 given in %s on line %d NULL Done ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/preg_replace_error1.phpt ================================================ --TEST-- Test preg_replace() function : error - bad regular expressions --FILE-- --EXPECTF-- *** Testing preg_replace() : error conditions*** Arg value is abcdef Warning: preg_replace(): Delimiter must not be alphanumeric or backslash in %spreg_replace_error1.php on line %d NULL Arg value is /[a-zA-Z] Warning: preg_replace(): No ending delimiter '/' found in %spreg_replace_error1.php on line %d NULL Arg value is [a-zA-Z]/ Warning: preg_replace(): Unknown modifier '/' in %spreg_replace_error1.php on line %d NULL Arg value is /[a-zA-Z]/F Warning: preg_replace(): Unknown modifier 'F' in %spreg_replace_error1.php on line %d NULL Arg value is Array string(1) "a" Arg value is /[a-zA-Z]/ string(1) "1" Catchable fatal error: Object of class stdClass could not be converted to string in %spreg_replace_error1.php on line %d ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/preg_replace_error2.phpt ================================================ --TEST-- Test preg_replace() function : error conditions - wrong arg types --FILE-- --EXPECTF-- *** Testing preg_replace() : error conditions *** Arg value is: this is a string string(64) "this is a stringthis is a stringthis is a stringthis is a string" Arg value is: Array Warning: preg_replace(): Parameter mismatch, pattern is a string while replacement is an array in %spreg_replace_error2.php on line %d bool(false) Catchable fatal error: Object of class stdClass could not be converted to string in %spreg_replace_error2.php on line %d ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/preg_replace_variation1.phpt ================================================ --TEST-- Test preg_replace() function : variation both arguments are arrays --FILE-- --EXPECTF-- This test a string. It contains numbers *0 to 9* test well test parentheses and some other things* ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/preg_split_basic.phpt ================================================ --TEST-- Test preg_split() function : basic functionality --FILE-- --EXPECT-- array(7) { [0]=> string(14) "this is a_list" [1]=> string(7) " value1" [2]=> string(7) " Test__" [3]=> string(7) " string" [4]=> string(6) " Hello" [5]=> string(8) " world!_" [6]=> string(11) "parentheses" } array(2) { [0]=> string(14) "this is a_list" [1]=> string(28) " Hello, world!_(parentheses)" } array(4) { [0]=> string(54) "this is a_list: value1, Test__, string; Hello, world!_" [1]=> string(1) "(" [2]=> string(11) "parentheses" [3]=> string(1) ")" } array(1) { [0]=> string(67) "this is a_list: value1, Test__, string; Hello, world!_(parentheses)" } array(10) { [0]=> string(1) " " [1]=> string(1) " " [2]=> string(2) ": " [3]=> string(2) ", " [4]=> string(2) ", " [5]=> string(2) "; " [6]=> string(2) ", " [7]=> string(1) "!" [8]=> string(1) "(" [9]=> string(1) ")" } ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/preg_split_error.phpt ================================================ --TEST-- Test preg_split() function : error conditions - incorrect number of parameters --FILE-- --EXPECTF-- *** Testing preg_split() : error conditions *** -- Testing preg_split() function with Zero arguments -- Warning: preg_split() expects at least 2 parameters, 0 given in %spreg_split_error.php on line %d bool(false) -- Testing preg_split() function with more than expected no. of arguments -- Warning: preg_split() expects at most 4 parameters, 5 given in %spreg_split_error.php on line %d bool(false) -- Testing preg_split() function with less than expected no. of arguments -- Warning: preg_split() expects at least 2 parameters, 1 given in %spreg_split_error.php on line %d bool(false) Done ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/preg_split_error1.phpt ================================================ --TEST-- Test preg_split() function : error conditions - bad regular expressions --FILE-- --EXPECTF-- *** Testing preg_split() : error conditions *** Arg value is abcdef Warning: preg_split(): Delimiter must not be alphanumeric or backslash in %spreg_split_error1.php on line %d bool(false) Arg value is /[a-zA-Z] Warning: preg_split(): No ending delimiter '/' found in %spreg_split_error1.php on line %d bool(false) Arg value is [a-zA-Z]/ Warning: preg_split(): Unknown modifier '/' in %spreg_split_error1.php on line %d bool(false) Arg value is /[a-zA-Z]/F Warning: preg_split(): Unknown modifier 'F' in %spreg_split_error1.php on line %d bool(false) Arg value is Array Warning: preg_split() expects parameter 1 to be string, array given in %spreg_split_error1.php on line %d bool(false) Arg value is /[a-zA-Z]/ array(3) { [0]=> string(4) "1 2 " [1]=> string(5) " 3 4 " [2]=> string(4) " 5 6" } Warning: preg_split() expects parameter 1 to be string, object given in %spreg_split_error1.php on line %d bool(false) ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/preg_split_error2.phpt ================================================ --TEST-- Test preg_split() function : error conditions - wrong arg types --FILE-- --EXPECTF-- *** Testing preg_split() : error conditions *** Arg value is: Array Warning: preg_split() expects parameter 2 to be string, array given in %spreg_split_error2.php on line %d bool(false) Warning: preg_split() expects parameter 2 to be string, object given in %spreg_split_error2.php on line %d bool(false) Done ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/recursion_limit.phpt ================================================ --TEST-- PCRE Recursion limit --SKIPIF-- --INI-- pcre.recursion_limit=2 --FILE-- --EXPECT-- bool(false) bool(true) int(1) bool(true) ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/skip.ini ================================================ [Locale checks] skip[]=skip_001.inc test[]=locales.phpt [No utf8 support in PCRE library] skip[]=skip_002.inc test[]=007.phpt test[]=bug27103.phpt test[]=invalid_utf8_offset.phpt test[]=invalid_utf8.phpt test[]=preg_replace2.phpt [No support for \p support PCRE library] skip[]=skip_003.inc test[]=backtrack_limit.phpt test[]=pcre_anchored.phpt test[]=recursion_limit.phpt ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/skip_001.inc ================================================ --EXPECTF-- Warning: preg_split() expects at least 2 parameters, 0 given in %ssplit.php on line 3 bool(false) Warning: preg_split(): Compilation failed: nothing to repeat at offset 0 in %ssplit.php on line 4 bool(false) array(3) { [0]=> string(1) "x" [1]=> string(2) "yy" [2]=> string(3) "zzz" } array(3) { [0]=> string(1) "x" [1]=> string(2) "yy" [2]=> string(3) "zzz" } array(3) { [0]=> string(1) "x" [1]=> string(2) "yy" [2]=> string(3) "zzz" } array(1) { [0]=> string(8) "x yy,zzz" } array(2) { [0]=> string(1) "x" [1]=> string(6) "yy,zzz" } array(8) { [0]=> string(0) "" [1]=> string(1) "a" [2]=> string(1) "b" [3]=> string(0) "" [4]=> string(1) "c" [5]=> string(0) "" [6]=> string(1) "u" [7]=> string(0) "" } array(4) { [0]=> string(1) "a" [1]=> string(1) "b" [2]=> string(1) "c" [3]=> string(1) "u" } ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/split2.phpt ================================================ --TEST-- preg_split() 2nd test --FILE-- --EXPECTF-- array(15) { [0]=> string(0) "" [1]=> string(0) "" [2]=> string(1) "a" [3]=> string(0) "" [4]=> string(1) "b" [5]=> string(1) "2" [6]=> string(0) "" [7]=> string(0) "" [8]=> string(1) "c" [9]=> string(1) "3" [10]=> string(0) "" [11]=> string(0) "" [12]=> string(1) "u" [13]=> string(0) "" [14]=> string(0) "" } array(8) { [0]=> array(2) { [0]=> string(0) "" [1]=> int(0) } [1]=> array(2) { [0]=> string(1) "a" [1]=> int(0) } [2]=> array(2) { [0]=> string(1) "b" [1]=> int(1) } [3]=> array(2) { [0]=> string(0) "" [1]=> int(3) } [4]=> array(2) { [0]=> string(1) "c" [1]=> int(3) } [5]=> array(2) { [0]=> string(0) "" [1]=> int(5) } [6]=> array(2) { [0]=> string(1) "u" [1]=> int(5) } [7]=> array(2) { [0]=> string(0) "" [1]=> int(6) } } array(6) { [0]=> string(1) "a" [1]=> string(1) "b" [2]=> string(1) "2" [3]=> string(1) "c" [4]=> string(1) "3" [5]=> string(1) "u" } array(4) { [0]=> array(2) { [0]=> string(1) "a" [1]=> int(0) } [1]=> array(2) { [0]=> string(1) "b" [1]=> int(1) } [2]=> array(2) { [0]=> string(1) "c" [1]=> int(3) } [3]=> array(2) { [0]=> string(1) "u" [1]=> int(5) } } array(15) { [0]=> array(2) { [0]=> string(0) "" [1]=> int(0) } [1]=> array(2) { [0]=> string(0) "" [1]=> int(0) } [2]=> array(2) { [0]=> string(1) "a" [1]=> int(0) } [3]=> array(2) { [0]=> string(0) "" [1]=> int(1) } [4]=> array(2) { [0]=> string(1) "b" [1]=> int(1) } [5]=> array(2) { [0]=> string(1) "2" [1]=> int(2) } [6]=> array(2) { [0]=> string(0) "" [1]=> int(3) } [7]=> array(2) { [0]=> string(0) "" [1]=> int(3) } [8]=> array(2) { [0]=> string(1) "c" [1]=> int(3) } [9]=> array(2) { [0]=> string(1) "3" [1]=> int(4) } [10]=> array(2) { [0]=> string(0) "" [1]=> int(5) } [11]=> array(2) { [0]=> string(0) "" [1]=> int(5) } [12]=> array(2) { [0]=> string(1) "u" [1]=> int(5) } [13]=> array(2) { [0]=> string(0) "" [1]=> int(6) } [14]=> array(2) { [0]=> string(0) "" [1]=> int(6) } } array(6) { [0]=> array(2) { [0]=> string(1) "a" [1]=> int(0) } [1]=> array(2) { [0]=> string(1) "b" [1]=> int(1) } [2]=> array(2) { [0]=> string(1) "2" [1]=> int(2) } [3]=> array(2) { [0]=> string(1) "c" [1]=> int(3) } [4]=> array(2) { [0]=> string(1) "3" [1]=> int(4) } [5]=> array(2) { [0]=> string(1) "u" [1]=> int(5) } } Warning: preg_last_error() expects exactly 0 parameters, 1 given in %s on line %d NULL bool(true) array(1) { [0]=> string(6) "ab2c3u" } bool(true) ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/study.phpt ================================================ --TEST-- Study regex --FILE-- ..)((?:(?>.)|.|.|.|u))/S', 'aeiou', $dump)); var_dump($dump[1]); // try to trigger usual "match known text" optimization var_dump(preg_match('/^aeiou$/S', 'aeiou', $dump)); var_dump($dump[0]); var_dump(preg_match('/aeiou/S', 'aeiou', $dump)); var_dump($dump[0]); ?> --EXPECT-- int(1) string(1) "a" int(1) string(1) "a" int(1) string(1) "i" int(1) string(5) "aeiou" int(1) string(5) "aeiou" ================================================ FILE: Testing/Tests/RegEx/Perl/pcre/ungreedy.phpt ================================================ --TEST-- U (PCRE_UNGREEDY) modififer --FILE-- /', ' ', $m)); var_dump($m); var_dump(preg_match('/<.*>/U', ' ', $m)); var_dump($m); var_dump(preg_match('/(?U)<.*>/', ' ', $m)); var_dump($m); ?> --EXPECT-- int(1) array(1) { [0]=> string(14) " " } int(1) array(1) { [0]=> string(4) "" } int(1) array(1) { [0]=> string(4) "" } ================================================ FILE: Testing/Tests/RegEx/Perl/quote1.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/RegEx/Perl/quote2.php ================================================ [expect php] [file] " . $word . "", $textbody); echo ($textbody); ?> ================================================ FILE: Testing/Tests/RegEx/Perl/quote3.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/RegEx/Perl/replace1.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/RegEx/Perl/replace2.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/RegEx/Perl/replace3.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/RegEx/Perl/replace4.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/RegEx/Perl/replace5.php ================================================ [expect php] [file] ]*?>.*?'si", // Strip out javascript "'<[\/\!]*?[^<>]*?>'si", // Strip out HTML tags "'([\r\n])[\s]+'", // Strip out white space "'&(quot|#34);'i", // Replace HTML entities "'&(amp|#38);'i", "'&(lt|#60);'i", "'&(gt|#62);'i", "'&(nbsp|#160);'i", "'&(iexcl|#161);'i", "'&(cent|#162);'i", "'&(pound|#163);'i", "'&(copy|#169);'i"); $replace = array ("", "", "\\1", "\"", "&", "<", ">", " ", chr(161), chr(162), chr(163), chr(169)); $document = "foo &bar&"; $text = preg_replace($search, $replace, $document); echo $text; ?> ================================================ FILE: Testing/Tests/RegEx/Perl/replace6.php ================================================ [expect php] [file] \\1 ", $text); echo $text; ?> ================================================ FILE: Testing/Tests/RegEx/Perl/replace7.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/RegEx/Perl/replace8.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/RegEx/Perl/replace9.php ================================================ [expect php] [file] text
    "; $string2 = "te\nxt"; // without the s #output: something new echo preg_replace("/.*<\/b>/", "something new", $string1); #output: te\nxt echo preg_replace("/.*<\/b>/", "something more new", $string2); // with the s #output: something new echo preg_replace("/.*<\/b>/s", "something new", $string1); #output: something new echo preg_replace("/.*<\/b>/s", "something more new", $string2); ?> ================================================ FILE: Testing/Tests/RegEx/Perl/replace_callback1.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/RegEx/Perl/replace_callback2.php ================================================ [expect php] [file] ](.*?)>(.*?)<\/a>/i"; $string = "foo"; print preg_replace_callback($pattern,array($this,'cb'),$string); } function cb($matches) { return "" . $matches[4] . ""; } } $bar = new foo(); $bar->parse(); /** output is foo */ ?> ================================================ FILE: Testing/Tests/RegEx/Perl/split1.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/RegEx/Perl/split2.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/RegEx/Perl/split3.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/RegEx/Perl/split4.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/RegEx/Perl/split5.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/RegEx/Perl/split6.php ================================================ [expect php] [file] something'''", 2, PREG_SPLIT_DELIM_CAPTURE )); print_r(preg_split("/<(nowiki)(\\s+[^>]*?|\\s*?)(\/?>)|<(!--)/i", "''''''", 2, PREG_SPLIT_DELIM_CAPTURE )); ?> ================================================ FILE: Testing/Tests/RegEx/Perl/ungreedy.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/RegEx/Perl/unsuccessful-preg_match_all.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/RegEx/Perl/withoutdelimiters.php ================================================ [exact php] [file] ================================================ FILE: Testing/Tests/RegEx/Phalanger.inc ================================================ ================================================ FILE: Testing/Tests/RegEx/backreferences.php ================================================ [exact php] [file] ================================================ FILE: Testing/Tests/RegEx/dolar_escape.php ================================================ [expect php] [file] "A","EUR" => "$", "0"=>"O"); $data = "It will cost 1,000,000 EUR"; $patterns = array(); $replacements = array(); if(is_array($vars)){ foreach ($vars as $key => $val) { $patterns[] = "/(" . strtoupper($key) . ")/i"; $replacements[] = str_replace('$', '\$', $val); } } $result = preg_replace($patterns,$replacements,$data); var_dump($result); ?> ================================================ FILE: Testing/Tests/RegEx/double_parentheses_group.php ================================================ [Expect php] [file] .*))/'; if (preg_match($pattern,"hello", $res)) echo $res["embed"]; } test(); ?> ================================================ FILE: Testing/Tests/RegEx/ereg.php ================================================ [expect php] [file] 10); __var_dump(ereg("([A-Z]*) ([A-Z]*) ([A-Z]*","ADSD ADASD SD",$a)); __var_dump($a); __var_dump(ereg("([A-Z]*) ([A-Z]*) ([A-Z]*)","ADSD ADASD SD",$a)); __var_dump($a); ?> ================================================ FILE: Testing/Tests/RegEx/escaped_unicode.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/RegEx/groupbug.php ================================================ [expect php] [file] =)|^(\\|\\|)|^(&&)|^(OR)|^(AND)|^(\\$[a-zA-Z0-9_]+)|^([a-zA-Z0-9_]+)|^([;:,.[\]()|^&+-\/*=%!~$<>?@])|^([a-zA-Z]+)/"; $data = << {vb:raw headinclude_bottom}

    {vb:rawphrase contacts}

    {vb:rawphrase online}

      {vb:raw onlineusers}

    {vb:rawphrase offline}

      {vb:raw offlineusers}
    EOF; $yymatches = array(); preg_match($yy_global_pattern, substr($data, 187), $yymatches); var_dump( array_filter($yymatches, 'strlen') ); ?> ================================================ FILE: Testing/Tests/RegEx/namedbackref.php ================================================ [expect php] [file] \n"; preg_match('#(?(?i)rah)\s+(?P=name)#',"rah rah",$matches); __var_dump($matches); echo"
    \n
    \n"; echo "2
    \n"; preg_match('#(?(?i)rah)\s+\k#',"rah rah",$matches); __var_dump($matches); echo"
    \n
    \n"; echo "3
    \n"; preg_match('#(?(?i)rah)\s+\k\'name\'#',"rah rah",$matches); __var_dump($matches); echo"
    \n
    \n"; echo "4
    \n"; preg_match('#(?(?i)rah)\s+\k{name}#',"rah rah",$matches); __var_dump($matches); echo"
    \n
    \n"; echo "5
    \n"; preg_match('#(?(?i)rah)\s+\g{name}#',"rah rah",$matches); __var_dump($matches); ?> ================================================ FILE: Testing/Tests/RegEx/namedbackref2.php ================================================ [expect php] [file] \n"; preg_match('#(?<2name>(?i)rah)\s+(?P=2name)#',"rah rah",$matches); __var_dump($matches); echo"
    \n
    \n"; echo "2
    \n"; preg_match('#(?<2name>(?i)rah)\s+\k<2name>#',"rah rah",$matches); __var_dump($matches); echo"
    \n
    \n"; echo "3
    \n"; preg_match('#(?<2name>(?i)rah)\s+\k\'2name\'#',"rah rah",$matches); __var_dump($matches); echo"
    \n
    \n"; echo "4
    \n"; preg_match('#(?<2name>(?i)rah)\s+\k{2name}#',"rah rah",$matches); __var_dump($matches); echo"
    \n
    \n"; echo "5
    \n"; preg_match('#(?<2name>(?i)rah)\s+\g{2name}#',"rah rah",$matches); __var_dump($matches); ?> ================================================ FILE: Testing/Tests/RegEx/namedgroups.php ================================================ [expect php] [file] hovno)/","praseci hovno",$matches, PREG_OFFSET_CAPTURE, 0); __var_dump($matches); preg_match("/(?'jmeno1'hovno)/","praseci hovno",$matches, PREG_OFFSET_CAPTURE, 0); __var_dump($matches); preg_match("/(?hovno)/","praseci hovno",$matches, PREG_OFFSET_CAPTURE, 0); __var_dump($matches); ?> ================================================ FILE: Testing/Tests/RegEx/namedgroups1.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/RegEx/namedgroups2.php ================================================ [expect php] [file] [a-z0-9]+)/', $flux, $transitions); var_dump($transitions); ?> ================================================ FILE: Testing/Tests/RegEx/nomatchall.php ================================================ [expect php] [file] __BEZOBSAHU__)|(?P<1_notoc>__NOTOC__)|(?P<0_nogallery>__BEZGALERIE__)|(?P<1_nogallery>__NOGALLERY__)|(?P<0_forcetoc>__FORCETOC__)|(?P<1_forcetoc>__VZDYOBSAH__)|(?P<0_toc>__OBSAH__)|(?P<1_toc>__TOC__)|(?P<0_noeditsection>__BEZEDITOVATCAST__)|(?P<1_noeditsection>__NOEDITSECTION__)|(?P<0_notitleconvert>__BEZKONVERZENADPISU__)|(?P<1_notitleconvert>__NOTC__)|(?P<2_notitleconvert>__NOTITLECONVERT__)|(?P<0_nocontentconvert>__BEZKONVERZEOBSAHU__)|(?P<1_nocontentconvert>__NOCC__)|(?P<2_nocontentconvert>__NOCONTENTCONVERT__)/iuS'; $text = "Do you want to clear all saved data that you have entered and restart the installation process?"; echo "PREG_PATTERN_ORDER: \n"; $res = preg_match_all( $regex, $text, $matches, PREG_PATTERN_ORDER ); var_dump($matches); echo "\n\n PREG_SET_ORDER: \n"; $res = preg_match_all( $regex, $text, $matches, PREG_SET_ORDER ); var_dump($matches); ?> ================================================ FILE: Testing/Tests/RegEx/preg_match_unmatched_groups.php ================================================ [expect php] [file] $v) { echo " $k => "; d($v); } echo "};"; } elseif (is_null($x)) { echo "NULL"; } else { echo "'$x'"; } echo "\n"; } d(preg_match("/([a-z]+) ([a-z]*)[0-9]* ([a-z]+) ([a-z]+)?/","aaa 555 bbb 555",$m)); d($m); d(preg_match("/([a-z]*)( ([a-z]*)( ([a-z]*))?)?/","aaa bbb",$m)); d($m); d(preg_match("/([a-z]*)( ([a-z]*)( ([a-z]*))?)?/","aaa bbb",$m,PREG_OFFSET_CAPTURE)); d($m); d(preg_match("/([a-z]*)( ([a-z]*)( ([a-z]*))?)?/","564564654",$m)); d($m); d(preg_match("/([a-z]*)( ([a-z]*)( ([a-z]*))?)?/","654564654",$m,PREG_OFFSET_CAPTURE)); d($m); ?> ================================================ FILE: Testing/Tests/RegEx/preg_replace_eval.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/RegEx/regexp-sql.php ================================================ [expect php] [file] 0) for ($i=1;$i/*",$SQL); $SQL = str_replace("*/","*/",$SQL); $SQL = ereg_replace("([^A-Za-z0-9_])($SqlKeywords)([^A-Za-z0-9_])","\\1\\2\\3",$SQL); $SQL = ereg_replace("([^>A-Za-z0-9_])($SqlKeywords)([^\\2
    \\3",$SQL); $SQL = ereg_replace(":(new|old)",":\\1",$SQL); $SQL = ereg_replace("--([^\n]*)[\n]","--\\1\n",$SQL); $SQL = ereg_replace("'([^']*)'","'\\1'",$SQL); $SQL = ereg_replace("'([^']*)'","'\\1'",$SQL); $SQL = ereg_replace("%(TYPE|ROWCOUNT|ROWTYPE|NOTFOUND)","%\\1",$SQL); return $SQL; } echo FormatSQL("SELECT * FROM MyTable WHERE x = 'hello'; /* comment */"); ?> ================================================ FILE: Testing/Tests/RegEx/regexp_smiles.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/SPL/AppendIterator1.php ================================================ [expect php] [file] append($pizzas); $appendIterator->append($toppings); foreach ($appendIterator as $key => $item) { echo "$key => $item", PHP_EOL; } $appendIterator->append($toppings); while($appendIterator->valid()) { echo $appendIterator->key() . " => " . $appendIterator->current() . "\n"; $appendIterator->next(); } ?> ================================================ FILE: Testing/Tests/SPL/AppendIterator2.php ================================================ [expect php] [file] append($pizzas); $appendIterator->append($toppings); foreach ($appendIterator as $key => $item) { echo "$key => $item", PHP_EOL; } $appendIterator->append($toppings); while($appendIterator->valid()) { echo $appendIterator->key() . " => " . $appendIterator->current() . "\n"; $appendIterator->next(); } ?> ================================================ FILE: Testing/Tests/SPL/ArrayAccess_offsetExists.php ================================================ [expect php] [file] index = $index; $this->x =& $GLOBALS["x"]; } function offsetGet($index) { echo "{$this->index}: offsetGet($index)\n"; return new ArrayClass($this->index + 1); } function offsetSet($index, $newval) { echo "{$this->index}: offsetSet($index,$newval)\n"; } function offsetExists($index) { echo "{$this->index}: offsetExists($index)\n"; return ""; } function offsetUnset($index) { echo "{$this->index}: offsetUnset($index)\n"; } } $x = new ArrayClass(100); $obj = new ArrayClass(0); var_dump(isset($obj)); var_dump(isset($obj[10][2]->x[1]->x[8][10][1])); var_dump(isset($obj[1][2][3])); var_dump(isset($obj[1])); var_dump(empty($obj)); var_dump(empty($obj[10][2]->x[1]->x[8][10][1])); var_dump(empty($obj[1][2][3])); var_dump(empty($obj[1])); ?> ================================================ FILE: Testing/Tests/SPL/ArrayIterator1.php ================================================ [expect php] [file] '4', 'b' => 5) ); $x[] = 6; foreach ($x as $key => $value) { echo "$key => $value\n"; } } foo(); ?> ================================================ FILE: Testing/Tests/SPL/ArrayIterator2.php ================================================ [expect php] [file] callback = $callback; } public function current() { $value = parent::current(); return call_user_func($this->callback, $value); } } function markinate($value) { return "[[$value]]\n"; } function foo() { $it = new ArrayCallbackIterator(array("hello", "world"), "markinate"); foreach ($it as $markinated) echo $markinated; } foo(); ?> ================================================ FILE: Testing/Tests/SPL/ArrayIterator3.php ================================================ [expect php] [file] 'a', 'kb'=>'b')); var_dump($a->valid()); var_dump($a->key()); var_dump($a->current()); $a = new ArrIt(array('ka'=>'a', 'kb'=>'b')); var_dump($a->key()); var_dump($a->valid()); var_dump($a->current()); $a = new ArrIt(array('ka'=>'a', 'kb'=>'b')); var_dump($a->current()); var_dump($a->valid()); var_dump($a->key()); $a = new ArrIt(array('ka'=>'a', 'kb'=>'b')); var_dump($a->current()); var_dump($a->key()); var_dump($a->valid()); $a = new ArrIt(array('ka'=>'a', 'kb'=>'b')); var_dump($a->next()); var_dump($a->current()); var_dump($a->valid()); } foo(); ?> ================================================ FILE: Testing/Tests/SPL/Autoload_ctor.php ================================================ [expect php] [file] foo(); ?> ================================================ FILE: Testing/Tests/SPL/Autoload_extends.inc ================================================ ================================================ FILE: Testing/Tests/SPL/Autoload_extends.php ================================================ [expect php] [file] foo(); $x->bar(); ?> ================================================ FILE: Testing/Tests/SPL/FilterIterator.php ================================================ [expect php] [file] 10; } public function next() { echo "next(), "; return parent::next(); } public function valid() { echo "valid(), "; return parent::valid(); } public function rewind() { echo "rewind(), "; return parent::rewind(); } } $arrayIterator = new ArrayIterator(array('test1', 'more than 10 characters', 'another more than 10 characters', "test2", 'test3', 'someting longer than 10 chars')); $lengthFilter = new LengthFilterIterator($arrayIterator); $lengthFilter->rewind(); echo "\n"; foreach ($lengthFilter as $value) { echo "$value, "; } ?> ================================================ FILE: Testing/Tests/SPL/RecursiveIteratorIterator1.php ================================================ [expect php] [file] 'Adil', 'address' => array( 'city'=>'Dubai', 'tel' => array( 'int' => 971, 'tel'=>12345487)), '' => 'nothing'); $iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($arr)); foreach ($iterator as $k => $v) { echo "$k => $v\n"; } ?> ================================================ FILE: Testing/Tests/SPL/RecursiveIteratorIterator2.php ================================================ [expect php] [file] 'Adil', 'address' => array( 'city'=>'Dubai', 'tel' => array( 'int' => 971, 'tel'=>12345487)), '' => 'nothing'); var_dump( iterator_to_array(new X(new RecursiveArrayIterator($arr), RecursiveIteratorIterator::LEAVES_ONLY/*, RecursiveIteratorIterator::CATCH_GET_CHILD*/)) ); var_dump( iterator_to_array(new X(new RecursiveArrayIterator($arr), RecursiveIteratorIterator::SELF_FIRST/*, RecursiveIteratorIterator::CATCH_GET_CHILD*/)) ); var_dump( iterator_to_array(new X(new RecursiveArrayIterator($arr), RecursiveIteratorIterator::CHILD_FIRST/*, RecursiveIteratorIterator::CATCH_GET_CHILD*/)) ); ?> ================================================ FILE: Testing/Tests/SPL/RecursiveIteratorIterator3.php ================================================ [expect php] [file] 'Adil', 'address' => array( 'city'=>'Dubai', 'tel' => array( 'int' => 971, 'tel'=>12345487)), '' => 'nothing'); function iterate( $it, $depth ) { if ($depth) $it->setMaxDepth($depth); foreach ($it as $k => $v) { echo "[$k];\n"; } } iterate(new X(new RecursiveArrayIterator($arr), RecursiveIteratorIterator::LEAVES_ONLY/*, RecursiveIteratorIterator::CATCH_GET_CHILD*/),false); iterate(new X(new RecursiveArrayIterator($arr), RecursiveIteratorIterator::SELF_FIRST/*, RecursiveIteratorIterator::CATCH_GET_CHILD*/),false); iterate(new X(new RecursiveArrayIterator($arr), RecursiveIteratorIterator::CHILD_FIRST/*, RecursiveIteratorIterator::CATCH_GET_CHILD*/),false); iterate(new X(new RecursiveArrayIterator($arr), RecursiveIteratorIterator::CHILD_FIRST/*, RecursiveIteratorIterator::CATCH_GET_CHILD*/), 1); ?> ================================================ FILE: Testing/Tests/SPL/SplFixedArray1.php ================================================ [expect php] [file] setSize(10); $array[9] = "asdf"; var_dump($array[false]); var_dump($array[1.0]); // Shrink the array to a size of 2 $array->setSize(2); // The following lines throw a RuntimeException: Index invalid or out of range try { var_dump($array["non-numeric"]); } catch(RuntimeException $re) { echo "RuntimeException: ".$re->getMessage()."\n"; } try { var_dump($array[-1]); } catch(RuntimeException $re) { echo "RuntimeException: ".$re->getMessage()."\n"; } try { var_dump($array[5]); } catch(RuntimeException $re) { echo "RuntimeException: ".$re->getMessage()."\n"; } ?> ================================================ FILE: Testing/Tests/SPL/SplFixedArray2.php ================================================ [expect php] [file] setSize(10); $array[9] = "asdf"; foreach ($array as $k => $v) echo "$k: $v\n"; ?> ================================================ FILE: Testing/Tests/SPL/SplObjectStorage1.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/SPL/SplObjectStorage2.php ================================================ [expect php] [file] attach($o1); $s->attach($o2); var_dump($s->contains($o1)); var_dump($s->contains($o2)); var_dump($s->contains($o3)); $s->detach($o2); var_dump($s->contains($o1)); var_dump($s->contains($o2)); var_dump($s->contains($o3)); ?> ================================================ FILE: Testing/Tests/SPL/SplObjectStorage3.php ================================================ [expect php] [file] detach($o2); foreach ($s as $k => $v) { var_dump( $k, $s->getInfo() ); } ?> ================================================ FILE: Testing/Tests/SPL/SplObjectStorage4.php ================================================ [expect php] [file] key(), $s->valid()); ?> ================================================ FILE: Testing/Tests/SPL/exceptions.php ================================================ [expect exact] NULL string(18) "exception_handler1" string(18) "exception_handler2" string(18) "exception_handler1" Uncaught exception: hello world [file] getMessage(), "\n"; } function exception_handler2($exception) { echo "Uncaught exception: " , $exception->getMessage(), "\n"; } function exception_handler3($exception) { echo "Uncaught exception: " , $exception->getMessage(), "\n"; } var_dump(set_exception_handler('exception_handler1')); var_dump(set_exception_handler('exception_handler2')); var_dump(set_exception_handler('exception_handler3')); restore_exception_handler(); restore_exception_handler(); var_dump(set_exception_handler('exception_handler3')); class E extends Exception { function __toString() { return "!!!"; } } function f() { throw new E("hello world"); } f(); ?> ================================================ FILE: Testing/Tests/SPL/object_hash.php.skip ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Strings/Phalanger.inc ================================================ ================================================ FILE: Testing/Tests/Strings/addcslashes.php ================================================ [comment] [expect php] [file] Issues a Warning: // echo addcslashes("zoo['.']", 'z..A'); // output: \zoo['\.'] ================================================ FILE: Testing/Tests/Strings/addslashes.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Strings/chunk_split.php ================================================ [comment] [expect php] [file] ================================================ FILE: Testing/Tests/Strings/compare_binary.php ================================================ [expect php] 27390 [file] ================================================ FILE: Testing/Tests/Strings/concat.php ================================================ [expect exact] string(2) "ab" string(2) "ab" string(2) "ab" string(2) "ab" string(2) "ab" string(2) "aB" string(2) "Ab" string(2) "AB" string(2) "ab" string(2) "a1" string(2) "1b" string(2) "11" string(2) "ab" string[binary](2) "aB" string[binary](2) "Ab" string[binary](2) "AB" [file] ================================================ FILE: Testing/Tests/Strings/count_chars.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Strings/crc32.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Strings/crypt.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Strings/crypt2.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Strings/echo.php ================================================ [expect php] [file] "foo"); echo "this is {$bar['value']} !"; // this is foo ! // Some people prefer passing multiple parameters to echo over concatenation. echo 'This ', 'string ', 'was ', 'made ', 'with multiple parameters.', chr(10); echo 'This ' . 'string ' . 'was ' . 'made ' . 'with concatenation.' . "\n"; $variable = "[VARIABLE]"; echo << SHORT TAG SYNTAX: ================================================ FILE: Testing/Tests/Strings/explode.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Strings/get_html_translation_table.php ================================================ [expect php] [file] "; printme(get_html_translation_table(HTML_SPECIALCHARS)); echo "
    "; $trans = get_html_translation_table(HTML_ENTITIES); $str = "Hallo & & Krmer"; echo $encoded = strtr($str, $trans); function printme($a) { asort($a); foreach ($a as $k => $v) echo "[$k] => $v\n"; } ?> ================================================ FILE: Testing/Tests/Strings/mb_strlen.php ================================================ [expect php] [file] '; print 'strlen(): '.strlen($str).'
    '; ?> ================================================ FILE: Testing/Tests/Strings/nl2br.php ================================================ [expect php] [file] {{ }} ================================================ FILE: Testing/Tests/Strings/pack.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Strings/pos.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Strings/runtime-quotes.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Strings/runtime-quotes.txt ================================================ x'y"z ================================================ FILE: Testing/Tests/Strings/runtime-quotes2.txt ================================================ a\'b"\\ca\'b"\\c ================================================ FILE: Testing/Tests/Strings/sprintf.php ================================================ [expect php] [file] Example 2. sprintf(): formatting currency ================================================ FILE: Testing/Tests/Strings/sprintf2.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Strings/str_ireplace.php ================================================ [expect php] [file] $v) echo "$k => $v\n"; } echo str_replace("","as","asxas"),"\n"; $a = array("aLEP","be","th","mm"); $b = array("bet","he","he"); $c = array("aleph","beth","gimmel"); da(str_ireplace($a,$b,$c)); $a = array("aLEP","be","th","mm"); $b = array("bet","he","he"); $c = array("aleph","beth","gimmel"); da(str_replace($a,$b,$c)); da(str_ireplace(array ( '*', 'SELECT ', 'UPDATE ', 'DELETE ', 'INSERT ', 'INTO', 'VALUES', 'FROM', 'LEFT', 'JOIN', 'WHERE', 'LIMIT', 'ORDER BY', 'AND', 'OR ', 'DESC', 'ASC', 'ON ' ), array ( "*", "SELECT ", "UPDATE ", "DELETE ", "INSERT ", "INTO", "VALUES", "FROM", "LEFT", "JOIN", "WHERE", "LIMIT", "ORDER BY", "AND", "OR ", "DESC", "ASC", "ON " ), array( "Select * from adsad where asdasdasda order by by order by limit 21 on asc descwhere", "select from upsdateinsertasc delete join axax"), $count )); echo $count,"\n"; echo bin2hex(str_ireplace("\r\n","-","\r\nhell\r\n\r\n\r\no\r\nw\r\n",$c1)); echo bin2hex(str_replace("\r\n","-","h\r\nel\r\nlow\r\r\n\r\n\n",$c2)); echo $c1,"-",$c2; ?> ================================================ FILE: Testing/Tests/Strings/str_replace.php ================================================ [expect php] [file] $v) echo "$k => $v\n"; } // 8 combinations of possible str_replace arguments: $arr1 = array( "a" => "hello", "b" => "world", "c" => "earth", "d" => "europe", "e" => "africa", "f" => "america", "g" => "asia", "h" => "eheheheheheijijijijijlololololo", "i" => "klpofklpofklpof", "j" => "www", "k" => "lo", "l" => "as", "m" => "ing", "n" => "y", "o" => "string"); $arr2 = array( "h" => "eheheheheheijijijijijlololololo", "i" => "klpofklpofklpof", "j" => "www", "k" => "lo", "l" => "as", "m" => "ing", "n" => "y"); $str = "hello, very long string with several substrings to be replaced or removed"; echo str_replace(array("hello", "string", "very", "long"), array("XXX"), $str), "\n";// replace only the first needle with XXX echo str_replace(array("hello", "string", "very", "long"), "XXX", $str), "\n"; // replace all the needles with the same replacement echo str_replace("","eh, nothing will happen",$str),"\n"; echo str_replace("ing","",$str),"\n"; //echo str_replace("remo",$arr1,$str),"\n"; echo str_replace($arr2,$arr1,$str),"\n"; echo str_replace($arr1,$arr2,$str),"\n"; echo str_replace($arr1,"some replacement",$str),"\n"; da( str_replace("","eh, nothing will happen",$arr1) ); da( str_replace("ing","",$arr2) ); //da( str_replace("remo",$arr1,$arr1) ); da( str_replace($arr2,$arr1,$arr2) ); da( str_replace($arr1,$arr2,$arr1) ); da( str_replace($arr1,"some replacement",$arr2) ); ?> ================================================ FILE: Testing/Tests/Strings/str_word_count.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Strings/stripslashes.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Strings/strtr.php ================================================ [expect php] [file]
     "hi", "hi" => "hello");
    echo strtr("hi all, I said hello\n", $trans);
    
    // hello all, I said hi
    
    $trans = array_flip(array("a" => "e", "b" => "e"));
    echo strtr("hi all, I said hello\n", $trans);
    
    $trans = array("a" => 1, "e" => false, 1 => "ONE", 3.14 => round(M_PI,5));
    echo strtr("12[3]45, hi all, I said hello\n", $trans);
    
    ?>  
    
    ================================================ FILE: Testing/Tests/Strings/substr_operations.php ================================================ [expect php] [file] $var,10 => $var,"b" => null, "", " "), 'b', -10, 5)); echo "\n"; __var_dump(substr_compare("abcde", "bc", 1, 2)); // 0 __var_dump(substr_compare("abcde", "bcg", 1, 2)); // 0 __var_dump(substr_compare("abcde", "BC", 1, 2, true)); // 0 __var_dump(substr_compare("abcde", "bc", 1, 3)); // 1 __var_dump(substr_compare("abcde", "cd", 1, 2)); // -1 ?> ================================================ FILE: Testing/Tests/Strings/wordwrap.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/TestLogs/TestLog (1419).htm ================================================ PHP.NET Compiler test log

    PHP.NET Compiler test log

    (88%) 800 succeeded, 108 failed
    Test ResultCompiler error outputExpected test result
    @PHP/classes/array_access_001.php: SUCCEEDED
    @PHP/classes/array_access_002.php: SUCCEEDED
    @PHP/classes/array_access_003.php: SUCCEEDED
    @PHP/classes/array_access_004.php: SUCCEEDED
    @PHP/classes/array_access_005.php: SUCCEEDED
    @PHP/classes/array_access_006.php: SUCCEEDED
    @PHP/classes/array_access_007.php: SUCCEEDED
    @PHP/classes/array_access_008.php: SUCCEEDED
    @PHP/classes/array_access_009.php: SUCCEEDED
    @PHP/classes/array_access_010.php: SUCCEEDED
    @PHP/classes/array_access_011.php: SUCCEEDED
    @PHP/classes/array_access_013.php: SUCCEEDED
    @PHP/classes/assign_op_property_001.php: SUCCEEDED
    @PHP/classes/autoload_001.php: SUCCEEDED
    @PHP/classes/autoload_002.php: SUCCEEDED
    @PHP/classes/autoload_003.php: SUCCEEDED
    @PHP/classes/autoload_005.php: SUCCEEDED
    @PHP/classes/autoload_006.php: SUCCEEDED
    @PHP/classes/bug23951.php: SUCCEEDED
    @PHP/classes/bug24399.php: SUCCEEDED
    @PHP/classes/bug24445.php: SUCCEEDED
    @PHP/classes/bug26737.php: SUCCEEDED
    @PHP/classes/bug27468.php: SUCCEEDED
    @PHP/classes/bug27504.php: SUCCEEDED
    @PHP/classes/class_example.php: SUCCEEDED
    @PHP/classes/class_stdclass.php: SUCCEEDED
    @PHP/classes/clone_001.php: SUCCEEDED
    @PHP/classes/clone_002.php: SUCCEEDED
    @PHP/classes/clone_003.php: SUCCEEDED
    @PHP/classes/clone_004.php: SUCCEEDED
    @PHP/classes/clone_006.php: SUCCEEDED
    @PHP/classes/constants_scope_001.php: SUCCEEDED
    @PHP/classes/ctor_dtor.php: SUCCEEDED
    @PHP/classes/ctor_dtor_inheritance.php: SUCCEEDED
    @PHP/classes/ctor_name_clash.php: SUCCEEDED
    @PHP/classes/dereferencing_001.php: SUCCEEDED
    @PHP/classes/destructor_and_echo.php: SUCCEEDED
    @PHP/classes/destructor_and_references.php: SUCCEEDED
    @PHP/classes/destructor_inheritance.php: SUCCEEDED
    @PHP/classes/destructor_visibility_003.php: SUCCEEDED
    @PHP/classes/factory_001.php: SUCCEEDED
    @PHP/classes/factory_and_singleton_001.php: SUCCEEDED
    @PHP/classes/factory_and_singleton_002.php: SUCCEEDED
    @PHP/classes/final.php: SUCCEEDED
    @PHP/classes/incdec_property_001.php: SUCCEEDED
    @PHP/classes/incdec_property_002.php: SUCCEEDED
    @PHP/classes/incdec_property_003.php: SUCCEEDED
    @PHP/classes/incdec_property_004.php: SUCCEEDED
    @PHP/classes/inheritance.php: SUCCEEDED
    @PHP/classes/inheritance_002.php: SUCCEEDED
    @PHP/classes/interfaces_001.php: SUCCEEDED
    @PHP/classes/interface_construct.php: SUCCEEDED
    @PHP/classes/interface_doubled.php: SUCCEEDED
    @PHP/classes/interface_implemented.php: SUCCEEDED
    @PHP/classes/iterators_001.php: SUCCEEDED
    @PHP/classes/iterators_002.php: SUCCEEDED
    @PHP/classes/iterators_003.php: SUCCEEDED
    @PHP/classes/iterators_004.php: SUCCEEDED
    @PHP/classes/iterators_006.php: SUCCEEDED
    @PHP/classes/iterators_007.php: SUCCEEDED
    @PHP/classes/object_reference_001.php: SUCCEEDED
    @PHP/classes/private_001.php: SUCCEEDED
    @PHP/classes/private_002.php: SUCCEEDED
    @PHP/classes/private_003.php: SUCCEEDED
    @PHP/classes/private_003b.php: SUCCEEDED
    @PHP/classes/private_004.php: SUCCEEDED
    @PHP/classes/private_004b.php: SUCCEEDED
    @PHP/classes/private_005.php: SUCCEEDED
    @PHP/classes/private_005b.php: SUCCEEDED
    @PHP/classes/private_006.php: SUCCEEDED
    @PHP/classes/private_006b.php: SUCCEEDED
    @PHP/classes/private_007.php: SUCCEEDED
    @PHP/classes/private_007b.php: SUCCEEDED
    @PHP/classes/private_members.php: SUCCEEDED
    @PHP/classes/private_redeclare.php: SUCCEEDED
    @PHP/classes/protected_001.php: SUCCEEDED
    @PHP/classes/protected_001b.php: SUCCEEDED
    @PHP/classes/protected_002.php: SUCCEEDED
    @PHP/classes/serialize_001.php: SUCCEEDED
    @PHP/classes/singleton_001.php: SUCCEEDED
    @PHP/classes/static_properties_001.php: SUCCEEDED
    @PHP/classes/type_hinting_001.php: SUCCEEDED
    @PHP/classes/type_hinting_003.php: SUCCEEDED
    @PHP/classes/visibility_000c.php: SUCCEEDED
    @PHP/classes/visibility_001c.php: SUCCEEDED
    @PHP/classes/visibility_002c.php: SUCCEEDED
    @PHP/classes/visibility_003a.php: SUCCEEDED
    @PHP/classes/visibility_003c.php: SUCCEEDED
    @PHP/classes/visibility_004a.php: SUCCEEDED
    @PHP/classes/visibility_004b.php: SUCCEEDED
    @PHP/classes/visibility_004c.php: SUCCEEDED
    @PHP/classes/visibility_005.php: SUCCEEDED
    @PHP/classes/__call_001.php: SUCCEEDED
    @PHP/classes/__set_data_corrupt.php: SUCCEEDED
    @PHP/classes/__set__get_001.php: SUCCEEDED
    @PHP/classes/__set__get_004.php: SUCCEEDED
    @PHP/classes/__set__get_005.php: SUCCEEDED
    @PHP/date/bug17988.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2002-06-25 12:18:48
    2002-06-25 14:18:48
    2002-06-25 13:18:48
    2002-06-25 12:18:48
    2002-06-25 18:18:48
    2002-06-25 14:18:48
    2002-06-25 14:18:48
    2002-06-25 18:18:48
    2002-06-25 10:18:48
    2002-06-25 17:18:48
    2002-06-25 11:18:48
    2002-06-25 17:48:48
    2002-06-25 10:48:48
    2002-06-25 14:18:48
    2002-06-25 14:18:48
    2002-06-25 13:18:48
    2002-06-25 12:18:48
    2002-06-25 18:18:48
    2002-06-25 14:18:48
    2002-06-25 14:18:48
    2002-06-25 18:18:48
    2002-06-25 10:18:48
    2002-06-25 17:18:48
    2002-06-25 11:18:48
    2002-06-25 17:48:48
    2002-06-25 10:48:48
    @PHP/date/bug26317.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2003-11-19 17:20:42
    2003-11-19 17:20:42
    2003-11-19 17:20:42
    2003-11-19 16:20:42
    2003-11-19 16:20:42
    2003-11-19 16:20:42
    @PHP/date/bug26320.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2003-11-19 12:30:42
    2003-11-19 13:30:42
    2003-11-19 12:30:42
    2003-11-19 12:30:42
    @PHP/date/bug28088.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    The following line rightly shows the correct date time:
    04/04/04 2145
    But the following line fails to show the correct date time:
    04/03/04 2245
    The following line rightly shows the correct date time:
    04/04/04 2345
    But the following line fails to show the correct date time:
    04/04/04 0045
    @PHP/date/bug28599.php: SUCCEEDED
    @PHP/date/bug29150.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2005-06-19 22:00:00
    2005-06-20 00:00:00
    @PHP/date/bug29585.php: SUCCEEDED
    @PHP/date/bug29595.php: SUCCEEDED
    @PHP/date/bug33056.php: SUCCEEDED
    @PHP/date/bug33452.php: SUCCEEDED
    @PHP/date/bug33562.php: SUCCEEDED
    @PHP/date/bug33563.php: SUCCEEDED
    @PHP/date/bug33578.php: SUCCEEDED
    @PHP/date/bug33869.php: SUCCEEDED
    @PHP/date/bug34676.php: SUCCEEDED
    @PHP/date/bug34771.php: SUCCEEDED
    @PHP/date/bug35143.php: SUCCEEDED
    @PHP/date/bug35414.php: SUCCEEDED
    @PHP/date/bug35422.php: SUCCEEDED
    @PHP/date/bug35425.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    integer(42)
    integer(1)
    integer(1)
    integer(1)
    integer(1)
    integer(0)
    integer(0)
    integer(1)
    integer(1)
    integer(31)
    integer(1104537661)
    integer(6)
    integer(53)
    integer(5)
    integer(2005)
    integer(0)
    integer(3600)
    integer(292)
    integer(1)
    integer(1)
    integer(1)
    integer(1)
    integer(0)
    integer(0)
    integer(1)
    integer(1)
    integer(31)
    integer(1104559261)
    integer(6)
    integer(53)
    integer(5)
    integer(2005)
    integer(0)
    integer(-18000)
    @PHP/date/bug35456.php: SUCCEEDED
    @PHP/date/bug35624.php: SUCCEEDED
    @PHP/date/bug35630.php: SUCCEEDED
    @PHP/date/bug35699.php: SUCCEEDED
    @PHP/date/bug35705.php: SUCCEEDED
    @PHP/date/bug35885.php: SUCCEEDED
    @PHP/date/bug35887.php: SUCCEEDED
    @PHP/date/date.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    c: 2003-01-23T13:20:59+01:00
    r: Thu, 23 Jan 2003 13:20:59 +0100
    c: 2003-01-23T13:20:59+01:00
    r: Thu, 23 Jan 2003 13:20:59 +0100
    c: 2003-01-23T12:20:59+00:00
    r: Thu, 23 Jan 2003 12:20:59 +0000
    c: 2003-01-23T13:20:59+01:00
    r: Thu, 23 Jan 2003 13:20:59 +0100
    @PHP/date/date_create-1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\date\__input.txt on line 28
    SKIP
    @PHP/date/date_create-2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\date\__input.txt on line 6
    SKIP
    @PHP/date/date_default_timezone_get-3.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Europe/Prague
    America/Chicago
    Europe/Rome
    America/Chicago
    @PHP/date/date_modify-1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\date\__input.txt on line 6
    SKIP
    @PHP/date/date_modify-2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\date\__input.txt on line 6
    SKIP
    @PHP/date/default-timezone-1.php: SUCCEEDED
    @PHP/date/default-timezone-2.php: SUCCEEDED
    @PHP/date/format-negative-timestamp.php: SUCCEEDED
    @PHP/date/strtotime.php: SUCCEEDED
    @PHP/date/timezone-configuration.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    1119125744
    1119125744
    1119125744
    1119125744
    1119129344
    1119125744
    @PHP/doc_examples/test001.php: SUCCEEDED
    @PHP/doc_examples/test002.php: SUCCEEDED
    @PHP/doc_examples/test003.php: SUCCEEDED
    @PHP/doc_examples/test004.php: SUCCEEDED
    @PHP/doc_examples/test005.php: SUCCEEDED
    @PHP/doc_examples/test006.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    boolstring16
    booleanstring16
    @PHP/doc_examples/test007.php: SUCCEEDED
    @PHP/doc_examples/test008.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    boolbool(false)
    
    boolbool(true)
    
    boolbool(true)
    
    boolbool(true)
    
    boolbool(true)
    
    boolbool(true)
    
    boolbool(false)
    
    boolbool(true)
    booleanbool(false)
    
    booleanbool(true)
    
    booleanbool(true)
    
    booleanbool(true)
    
    booleanbool(true)
    
    booleanbool(true)
    
    booleanbool(false)
    
    booleanbool(true)
    @PHP/doc_examples/test009.php: SUCCEEDED
    @PHP/doc_examples/test010.php: SUCCEEDED
    @PHP/doc_examples/test011.php: SUCCEEDED
    @PHP/doc_examples/test013.php: SUCCEEDED
    @PHP/doc_examples/test014.php: SUCCEEDED
    @PHP/doc_examples/test015.php: SUCCEEDED
    @PHP/doc_examples/test016.php: SUCCEEDED
    @PHP/doc_examples/test017.php: SUCCEEDED
    @PHP/doc_examples/test018.php: SUCCEEDED
    @PHP/doc_examples/test019.php: SUCCEEDED
    @PHP/doc_examples/test020.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    double(11.5)
    double(-1299)
    integer(1)
    integer(1)
    integer(11)
    double(14.2)
    double(11)
    double(11)
    float(11.5)
    float(-1299)
    int(1)
    int(1)
    int(11)
    float(14.2)
    float(11)
    float(11)
    @PHP/doc_examples/test021.php: SUCCEEDED
    @PHP/doc_examples/test022.php: SUCCEEDED
    @PHP/doc_examples/test023.php: SUCCEEDED
    @PHP/doc_examples/test024.php: SUCCEEDED
    @PHP/doc_examples/test025.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    (
      [0] => 1
      [1] => 2
      [2] => 3
      [3] => 4
      [4] => 5
    )
    array [empty]
    array
    (
      [5] => 6
    )
    array
    (
      [0] => 6
      [1] => 7
    )
    Array
    (
        [0] => 1
        [1] => 2
        [2] => 3
        [3] => 4
        [4] => 5
    )
    Array
    (
    )
    Array
    (
        [5] => 6
    )
    Array
    (
        [0] => 6
        [1] => 7
    )
    @PHP/doc_examples/test026.php: SUCCEEDED
    @PHP/doc_examples/test027.php: SUCCEEDED
    @PHP/doc_examples/test028.php: SUCCEEDED
    @PHP/doc_examples/test029.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ´┐Żauky
    �auky
    @PHP/doc_examples/test030.php: SUCCEEDED
    @PHP/doc_examples/test031.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    (
      [color] => red
      [taste] => sweet
      [shape] => round
      [name] => apple
      [0] => 4
    )
    array
    (
      [color] => red
      [taste] => sweet
      [shape] => round
      [name] => apple
      [0] => 4
      [1] => 4
    )
    array
    (
      [0] => a
      [1] => b
      [2] => c
    )
    Array
    (
        [color] => red
        [taste] => sweet
        [shape] => round
        [name] => apple
        [0] => 4
    )
    Array
    (
        [color] => red
        [taste] => sweet
        [shape] => round
        [name] => apple
        [0] => 4
        [1] => 4
    )
    Array
    (
        [0] => a
        [1] => b
        [2] => c
    )
    @PHP/doc_examples/test032.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    (
      [version] => 4
      [OS] => Linux
      [lang] => english
      [short_tags] => 1
    )
    array
    (
      [0] => 7
      [1] => 8
      [2] => 0
      [3] => 156
      [4] => -10
    )
    array
    (
      [0] => 12
      [5] => 6
      [3] => 7
      [a] => 4
      [6] => 11
      [8] => 2
      [02] => 77
    )
    array [empty]
    Array
    (
        [version] => 4
        [OS] => Linux
        [lang] => english
        [short_tags] => 1
    )
    Array
    (
        [0] => 7
        [1] => 8
        [2] => 0
        [3] => 156
        [4] => -10
    )
    Array
    (
        [0] => 12
        [5] => 6
        [3] => 7
        [a] => 4
        [6] => 11
        [8] => 2
        [02] => 77
    )
    Array
    (
    )
    @PHP/doc_examples/test033.php: SUCCEEDED
    @PHP/doc_examples/test034.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    (
      [0] => BLUE
      [1] => RED
    )
    
    array
    (
      [0] => BLUE
      [1] => RED
    )
    Array
    (
        [0] => BLUE
        [1] => RED
    )
    
    Array
    (
        [0] => BLUE
        [1] => RED
    )
    @PHP/doc_examples/test035.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    (
      [1] => January
      [2] => February
      [3] => March
    )
    Array
    (
        [1] => January
        [2] => February
        [3] => March
    )
    @PHP/doc_examples/test036.php: SUCCEEDED
    @PHP/doc_examples/test037.php: SUCCEEDED
    @PHP/doc_examples/test038.php: SUCCEEDED
    @PHP/doc_examples/test039.php: SUCCEEDED
    @PHP/doc_examples/test040.php: SUCCEEDED
    @PHP/doc_examples/test041.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    call_user_func():
    hello world!
    Strict Standards: call_user_func(): Non-static method MyClass::myCallbackMethod() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\doc_examples\__input.txt at expression on line 17, column 1.
    Hello World!Hello World!
    @PHP/doc_examples/test042.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string(1) "0"
    integer(2)
    double(3.3)
    integer(15)
    integer(15)
    string(1) "0"
    int(2)
    float(3.3)
    int(15)
    int(15)
    @PHP/doc_examples/test043.php: SUCCEEDED
    @PHP/doc_examples/test044.php: SUCCEEDED
    @PHP/doc_examples/test045.php: SUCCEEDED
    @PHP/doc_examples/test046.php: SUCCEEDED
    @PHP/doc_examples/test047.php: SUCCEEDED
    @PHP/doc_examples/test048.php: SUCCEEDED
    @PHP/doc_examples/test049.php: SUCCEEDED
    @PHP/doc_examples/test050.php: SUCCEEDED
    @PHP/doc_examples/test051.php: SUCCEEDED
    @PHP/doc_examples/test052.php: SUCCEEDED
    @PHP/doc_examples/test053.php: SUCCEEDED
    @PHP/doc_examples/test054.php: SUCCEEDED
    @PHP/doc_examples/test055.php: SUCCEEDED
    @PHP/doc_examples/test056.php: SUCCEEDED
    @PHP/doc_examples/test057.php: SUCCEEDED
    @PHP/doc_examples/test058.php: SUCCEEDED
    @PHP/doc_examples/test059.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    NULL
    object(stdClass)(0)
    {
    }
    NULL
    object(stdClass)(0) {
    }
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\doc_examples\__input.txt(4,5): warning PHP0181: Assigning the return value of new by reference is deprecated
    
    @PHP/doc_examples/test060.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    Static object: object(stdClass)(1)
    {
      ["property"] => integer(1)
    }
    Static object: NULL
    Static object: NULL
    
    Static object: NULL
    Static object: object(stdClass)(1) {
      ["property"]=>
      int(1)
    }
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\doc_examples\__input.txt(9,9): warning PHP0181: Assigning the return value of new by reference is deprecated
    
    @PHP/doc_examples/test061.php: SUCCEEDED
    @PHP/doc_examples/test062.php: SUCCEEDED
    @PHP/doc_examples/test063.php: SUCCEEDED
    @PHP/doc_examples/test064.php: SUCCEEDED
    @PHP/doc_examples/test065.php: SUCCEEDED
    @PHP/doc_examples/test066.php: SUCCEEDED
    @PHP/doc_examples/test067.php: SUCCEEDED
    @PHP/doc_examples/test068.php: SUCCEEDED
    @PHP/doc_examples/test069.php: SUCCEEDED
    @PHP/doc_examples/test070.php: SUCCEEDED
    @PHP/doc_examples/test071.php: SUCCEEDED
    @PHP/doc_examples/test072.php: SUCCEEDED
    @PHP/doc_examples/test073.php: SUCCEEDED
    @PHP/doc_examples/test074.php: SUCCEEDED
    @PHP/doc_examples/test075.php: SUCCEEDED
    @PHP/doc_examples/test076.php: SUCCEEDED
    @PHP/doc_examples/test077.php: SUCCEEDED
    @PHP/doc_examples/test078.php: SUCCEEDED
    @PHP/doc_examples/test079.php: SUCCEEDED
    @PHP/doc_examples/test080.php: SUCCEEDED
    @PHP/doc_examples/test081.php: SUCCEEDED
    @PHP/doc_examples/test082.php: SUCCEEDED
    @PHP/doc_examples/test083.php: SUCCEEDED
    @PHP/doc_examples/test084.php: SUCCEEDED
    @PHP/doc_examples/test085.php: SUCCEEDED
    @PHP/doc_examples/test086.php: SUCCEEDED
    @PHP/doc_examples/test087.php: SUCCEEDED
    @PHP/doc_examples/test088.php: SUCCEEDED
    @PHP/doc_examples/test089.php: SUCCEEDED
    @PHP/doc_examples/test090.php: SUCCEEDED
    @PHP/doc_examples/test091.php: SUCCEEDED
    @PHP/doc_examples/test092.php: SUCCEEDED
    @PHP/doc_examples/test093.php: SUCCEEDED
    @PHP/doc_examples/test094.php: SUCCEEDED
    @PHP/doc_examples/test095.php: SUCCEEDED
    @PHP/doc_examples/test096.php: SUCCEEDED
    @PHP/doc_examples/test097.php: SUCCEEDED
    @PHP/doc_examples/test098.php: SUCCEEDED
    @PHP/doc_examples/test099.php: SUCCEEDED
    @PHP/doc_examples/test100.php: SUCCEEDED
    @PHP/doc_examples/test102.php: SUCCEEDED
    @PHP/doc_examples/test103.php: SUCCEEDED
    @PHP/doc_examples/test104.php: SUCCEEDED
    @PHP/doc_examples/test105.php: SUCCEEDED
    @PHP/doc_examples/test107.php: SUCCEEDED
    @PHP/doc_examples/test108.php: SUCCEEDED
    @PHP/doc_examples/test109.php: SUCCEEDED
    @PHP/doc_examples/test110.php: SUCCEEDED
    @PHP/doc_examples/test111.php: SUCCEEDED
    @PHP/doc_examples/test112.php: SUCCEEDED
    @PHP/doc_examples/test113.php: SUCCEEDED
    @PHP/doc_examples/test114.php: SUCCEEDED
    @PHP/doc_examples/test115.php: SUCCEEDED
    @PHP/doc_examples/test116.php: SUCCEEDED
    @PHP/doc_examples/test117.php: SUCCEEDED
    @PHP/doc_examples/test118.php: SUCCEEDED
    @PHP/doc_examples/test119.php: SUCCEEDED
    @PHP/doc_examples/test120.php: SUCCEEDED
    @PHP/doc_examples/test121.php: SUCCEEDED
    @PHP/doc_examples/test122.php: SUCCEEDED
    @PHP/doc_examples/test123.php: SUCCEEDED
    @PHP/doc_examples/test124.php: SUCCEEDED
    @PHP/doc_examples/test125.php: SUCCEEDED
    @PHP/doc_examples/test126.php: SUCCEEDED
    @PHP/doc_examples/test127.php: SUCCEEDED
    @PHP/doc_examples/test128.php: SUCCEEDED
    @PHP/doc_examples/test129.php: SUCCEEDED
    @PHP/doc_examples/test130.php: SUCCEEDED
    @PHP/doc_examples/test131.php: SUCCEEDED
    @PHP/doc_examples/test132.php: SUCCEEDED
    @PHP/doc_examples/test133.php: SUCCEEDED
    @PHP/doc_examples/test134.php: SUCCEEDED
    @PHP/doc_examples/test136.php: SUCCEEDED
    @PHP/doc_examples/test137.php: SUCCEEDED
    @PHP/doc_examples/test138.php: SUCCEEDED
    @PHP/doc_examples/test139.php: SUCCEEDED
    @PHP/doc_examples/test148.php: SUCCEEDED
    @PHP/doc_examples/test149.php: SUCCEEDED
    @PHP/doc_examples/test150.php: SUCCEEDED
    @PHP/doc_examples/test151.php: SUCCEEDED
    @PHP/doc_examples/test152.php: SUCCEEDED
    @PHP/doc_examples/test153.php: SUCCEEDED
    @PHP/doc_examples/test154.php: SUCCEEDED
    @PHP/doc_examples/test155.php: SUCCEEDED
    @PHP/doc_examples/test156.php: SUCCEEDED
    @PHP/doc_examples/test158.php: SUCCEEDED
    @PHP/lang/001.php: SUCCEEDED
    @PHP/lang/002.php: SUCCEEDED
    @PHP/lang/003.php: SUCCEEDED
    @PHP/lang/004.php: SUCCEEDED
    @PHP/lang/005.php: SUCCEEDED
    @PHP/lang/006.php: SUCCEEDED
    @PHP/lang/007.php: SUCCEEDED
    @PHP/lang/008.php: SUCCEEDED
    @PHP/lang/009.php: SUCCEEDED
    @PHP/lang/010.php: SUCCEEDED
    @PHP/lang/011.php: SUCCEEDED
    @PHP/lang/012.php: SUCCEEDED
    @PHP/lang/013.php: SUCCEEDED
    @PHP/lang/014.php: SUCCEEDED
    @PHP/lang/015.php: SUCCEEDED
    @PHP/lang/016.php: SUCCEEDED
    @PHP/lang/017.php: SUCCEEDED
    @PHP/lang/018.php: SUCCEEDED
    @PHP/lang/019.php: SUCCEEDED
    @PHP/lang/020.php: SUCCEEDED
    @PHP/lang/021.php: SUCCEEDED
    @PHP/lang/022.php: SUCCEEDED
    @PHP/lang/023.php: SUCCEEDED
    @PHP/lang/024.php: SUCCEEDED
    @PHP/lang/025.php: SUCCEEDED
    @PHP/lang/026.php: SUCCEEDED
    @PHP/lang/027.php: SUCCEEDED
    @PHP/lang/028.php: SUCCEEDED
    @PHP/lang/030.php: SUCCEEDED
    @PHP/lang/032.php: SUCCEEDED
    @PHP/lang/036.php: SUCCEEDED
    @PHP/lang/037.php: SUCCEEDED
    @PHP/lang/038.php: SUCCEEDED
    @PHP/lang/039.php: SUCCEEDED
    @PHP/lang/040.php: SUCCEEDED
    @PHP/lang/bison1.php: SUCCEEDED
    @PHP/lang/bug17115.php: SUCCEEDED
    @PHP/lang/bug18872.php: SUCCEEDED
    @PHP/lang/bug19943.php: SUCCEEDED
    @PHP/lang/bug20175.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    Deprecated: Assigning the return value of new by reference is deprecated in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\lang\__input.txt on line 110
    foo_static()
    foo_global()
    foo:1
    foo_static()
    foo:1
    bar_static()
    bar_global()
    bar:1
    bar_static()
    bar:1
    wow_static()
    wow_global()
    wow:1
    wow_static()
    wow:1
    oop_test()
    oop_static()
    oop_class()
    oop:1
    oop_static()
    oop:1
    oop_test()
    oop_static()
    oop:1
    foo_static()
    foo_global()
    foo:1
    foo_static()
    foo:1
    bar_static()
    bar_global()
    bar:1
    bar_static()
    bar_global()
    bar:2
    wow_static()
    wow_global()
    wow:1
    wow_static()
    wow:1
    oop_test()
    oop_static()
    oop_class()
    oop:1
    oop_static()
    oop:1
    oop_test()
    oop_static()
    oop:1
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\lang\__input.txt(110,4): warning PHP0181: Assigning the return value of new by reference is deprecated
    
    @PHP/lang/bug21094.php: SUCCEEDED
    @PHP/lang/bug21600.php: SUCCEEDED
    @PHP/lang/bug21669.php: SUCCEEDED
    @PHP/lang/bug21849.php: SUCCEEDED
    @PHP/lang/bug21961.php: SUCCEEDED
    @PHP/lang/bug22231.php: SUCCEEDED
    @PHP/lang/bug22367.php: SUCCEEDED
    @PHP/lang/bug22510.php: SUCCEEDED
    @PHP/lang/bug22592.php: SUCCEEDED
    @PHP/lang/bug22690.php: SUCCEEDED
    @PHP/lang/bug23279.php: SUCCEEDED
    @PHP/lang/bug23384.php: SUCCEEDED
    @PHP/lang/bug23489.php: SUCCEEDED
    @PHP/lang/bug23524.php: SUCCEEDED
    @PHP/lang/bug23922.php: SUCCEEDED
    @PHP/lang/bug24054.php: SUCCEEDED
    @PHP/lang/bug24396.php: SUCCEEDED
    @PHP/lang/bug24403.php: SUCCEEDED
    @PHP/lang/bug24436.php: SUCCEEDED
    @PHP/lang/bug24499.php: SUCCEEDED
    @PHP/lang/bug24640.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    double(1700000000000000089258092433847514422797596587883870563356951996370064178581143932836831337636761368874297554515902592900802289500112731978596146714137401870842258241575178866354311397451139753100927220499450359906637902366244989496126909662726242240784739940994096632824796638102733857671280980918272.0000000000)
    1.7E+300
    
    ------
    double(0.0000000000)
    1.7E-300
    
    ------
    double(17000000000000001584208052028780237480128823455860622330108867175329927830437888.0000000000)
    1.7E+79
    
    ------
    double(0.0000000000)
    1.7E-79
    
    ------
    double(169999999999999996096025832433329868941658043870400163508258284150340918121070592.0000000000)
    1.7E+80
    
    ------
    double(0.0000000000)
    1.7E-80
    
    ------
    double(1700000000000000013616404158611892038375594280539217794530130541777964808366194688.0000000000)
    1.7E+81
    
    ------
    double(0.0000000000)
    1.7E-81
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    1.6999810742106E-319
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    1.7000798873397E-320
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    1.6995858216939E-321
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    0
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    0
    
    ------
    double(1700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+300
    
    ------
    double(0.0000000000)
    1.70000000000003E-300
    
    ------
    double(17000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+79
    
    ------
    double(0.0000000000)
    1.70000000000001E-79
    
    ------
    double(170000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+80
    
    ------
    double(0.0000000000)
    1.70000000000001E-80
    
    ------
    double(1700000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+81
    
    ------
    double(0.0000000000)
    1.70000000000001E-81
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    1.69998107421056E-319
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    1.70007988733973E-320
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    1.69464516523548E-321
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    0
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    0
    
    ------
    @PHP/lang/bug24652.php: SUCCEEDED
    @PHP/lang/bug24658.php: SUCCEEDED
    @PHP/lang/bug24783.php: SUCCEEDED
    @PHP/lang/bug24926.php: SUCCEEDED
    @PHP/lang/bug25547.php: SUCCEEDED
    @PHP/lang/bug25652.php: SUCCEEDED
    @PHP/lang/bug25922.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Undefined index here: 'error'
    Undefined index here: ''
    @PHP/lang/bug26182.php: SUCCEEDED
    @PHP/lang/bug26696.php: SUCCEEDED
    @PHP/lang/bug26866.php: SUCCEEDED
    @PHP/lang/bug26869.php: SUCCEEDED
    @PHP/lang/bug27354.php: SUCCEEDED
    @PHP/lang/bug27439.php: SUCCEEDED
    @PHP/lang/bug27535.php: SUCCEEDED
    @PHP/lang/bug28213.php: SUCCEEDED
    @PHP/lang/bug28800.php: SUCCEEDED
    @PHP/lang/bug29566.php: SUCCEEDED
    @PHP/lang/bug29893.php: SUCCEEDED
    @PHP/lang/bug29944.php: SUCCEEDED
    @PHP/lang/bug30638.php: SUCCEEDED
    @PHP/lang/bug30726.php: SUCCEEDED
    @PHP/lang/bug30862.php: SUCCEEDED
    @PHP/lang/bug32924.php: SUCCEEDED
    @PHP/lang/bug35382.php: SUCCEEDED
    @PHP/lang/bug7515.php: SUCCEEDED
    @PHP/lang/each_binary_safety.php: SUCCEEDED
    @PHP/lang/error_2_exception_001.php: SUCCEEDED
    @PHP/lang/foreach_with_object_001.php: SUCCEEDED
    @PHP/lang/foreach_with_references_001.php: SUCCEEDED
    @PHP/lang/type_hints_001.php: SUCCEEDED
    @PHP/standard/array/001.php: SUCCEEDED
    @PHP/standard/array/003.php: SUCCEEDED
    @PHP/standard/array/004.php: SUCCEEDED
    @PHP/standard/array/005.php: SUCCEEDED
    @PHP/standard/array/008.php: SUCCEEDED
    @PHP/standard/array/array_change_key_case.php: SUCCEEDED
    @PHP/standard/array/array_chunk.php: SUCCEEDED
    @PHP/standard/array/array_count_values.php: SUCCEEDED
    @PHP/standard/array/array_diff_1.php: SUCCEEDED
    @PHP/standard/array/array_diff_key.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ------ Test 1 --------
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 2 --------
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 3 --------
    array(6) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [2]=>
      int(4)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [2]=>
      int(4)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 4 --------
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 5 --------
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 6 --------
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 7 --------
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    ------ Test 8 --------
    array(6) {
      [0]=>
      int(0)
      [7]=>
      int(14)
      [2]=>
      int(4)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [0]=>
      int(0)
      [7]=>
      int(14)
      [2]=>
      int(4)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 9 --------
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    ------ Test 1 --------
    array(4) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(4) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 2 --------
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 3 --------
    array(6) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [2]=>
      &int(4)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [2]=>
      &int(4)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 4 --------
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 5 --------
    array(4) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(4) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 6 --------
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 7 --------
    array(3) {
      [7]=>
      &int(14)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
    }
    array(3) {
      [7]=>
      &int(14)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
    }
    ------ Test 8 --------
    array(6) {
      [0]=>
      &int(0)
      [7]=>
      &int(14)
      [2]=>
      &int(4)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [0]=>
      &int(0)
      [7]=>
      &int(14)
      [2]=>
      &int(4)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 9 --------
    array(3) {
      [7]=>
      &int(14)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
    }
    array(3) {
      [7]=>
      &int(14)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
    }
    @PHP/standard/array/array_intersect_key.php: SUCCEEDED
    @PHP/standard/array/array_sum.php: SUCCEEDED
    @PHP/standard/array/array_walk_recursive.php: SUCCEEDED
    @PHP/standard/array/bug12776.php: SUCCEEDED
    @PHP/standard/array/bug14580.php: SUCCEEDED
    @PHP/standard/array/bug20381.php: SUCCEEDED
    @PHP/standard/array/bug20865.php: SUCCEEDED
    @PHP/standard/array/bug21182.php: SUCCEEDED
    @PHP/standard/array/bug21918.php: SUCCEEDED
    @PHP/standard/array/bug21998.php: SUCCEEDED
    @PHP/standard/array/bug22088.php: SUCCEEDED
    @PHP/standard/array/bug22463.php: SUCCEEDED
    @PHP/standard/array/bug23581.php: SUCCEEDED
    @PHP/standard/array/bug23788.php: SUCCEEDED
    @PHP/standard/array/bug24198.php: SUCCEEDED
    @PHP/standard/array/bug24220.php: SUCCEEDED
    @PHP/standard/array/bug24766.php: SUCCEEDED
    @PHP/standard/array/bug24897.php: SUCCEEDED
    @PHP/standard/array/bug24980.php: SUCCEEDED
    @PHP/standard/array/bug25359.php: SUCCEEDED
    @PHP/standard/array/bug25708.php: SUCCEEDED
    @PHP/standard/array/bug25758.php: SUCCEEDED
    @PHP/standard/array/bug26458.php: SUCCEEDED
    @PHP/standard/array/bug28974.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    (
      [0] => 0
      [1] => 1
      [2] => 2
      [3] => 3
      [4] => 4
      [5] => 5
    )
    array
    (
      [0] => 2
      [1] => 3
      [2] => 4
      [3] => 5
    )
    array
    (
      [0] => 2
      [1] => 3
      [2] => 4
      [3] => 5
    )
    print_r(array_splice($a,2,1));
    array
    (
      [0] => 2
    )
    $a is :array
    (
      [0] => 0
      [1] => 1
      [2] => 3
      [3] => 4
      [4] => 5
    )
    print_r(array_splice($b,2,2147483645));
    array
    (
      [0] => 2
      [1] => 3
      [2] => 4
      [3] => 5
    )
    $b is :array
    (
      [0] => 0
      [1] => 1
    )
    print_r(array_splice($c,2,2147483646));
    array
    (
      [0] => 2
      [1] => 3
      [2] => 4
      [3] => 5
    )
    $c is :array
    (
      [0] => 0
      [1] => 1
    )
    Array
    (
        [0] => 0
        [1] => 1
        [2] => 2
        [3] => 3
        [4] => 4
        [5] => 5
    )
    Array
    (
        [0] => 2
        [1] => 3
        [2] => 4
        [3] => 5
    )
    Array
    (
        [0] => 2
        [1] => 3
        [2] => 4
        [3] => 5
    )
    print_r(array_splice($a,2,1));
    Array
    (
        [0] => 2
    )
    $a is :Array
    (
        [0] => 0
        [1] => 1
        [2] => 3
        [3] => 4
        [4] => 5
    )
    print_r(array_splice($b,2,2147483645));
    Array
    (
        [0] => 2
        [1] => 3
        [2] => 4
        [3] => 5
    )
    $b is :Array
    (
        [0] => 0
        [1] => 1
    )
    print_r(array_splice($c,2,2147483646));
    Array
    (
        [0] => 2
        [1] => 3
        [2] => 4
        [3] => 5
    )
    $c is :Array
    (
        [0] => 0
        [1] => 1
    )
    @PHP/standard/array/bug29493.php: SUCCEEDED
    @PHP/standard/array/bug30266.php: SUCCEEDED
    @PHP/standard/array/bug30833.php: SUCCEEDED
    @PHP/standard/array/bug31158.php: SUCCEEDED
    @PHP/standard/array/bug31213.php: SUCCEEDED
    @PHP/standard/array/bug32021.php: SUCCEEDED
    @PHP/standard/array/bug33382.php: SUCCEEDED
    @PHP/standard/array/bug33989.php: SUCCEEDED
    @PHP/standard/array/bug34227.php: SUCCEEDED
    @PHP/standard/array/bug34982.php: SUCCEEDED
    @PHP/standard/array/bug35014.php: SUCCEEDED
    @PHP/standard/array/bug35022.php: SUCCEEDED
    @PHP/standard/array/bug35821.php: SUCCEEDED
    @PHP/standard/array/count_recursive.php: SUCCEEDED
    @PHP/standard/array/locale_sort.php: SUCCEEDED
    @PHP/standard/array/range.php: SUCCEEDED
    @PHP/standard/assert/assert.php: SUCCEEDED
    @PHP/standard/general_functions/001.php: SUCCEEDED
    @PHP/standard/general_functions/002.php: SUCCEEDED
    @PHP/standard/general_functions/003.php: SUCCEEDED
    @PHP/standard/general_functions/004.php: SUCCEEDED
    @PHP/standard/general_functions/005.php: SUCCEEDED
    @PHP/standard/general_functions/006.php: SUCCEEDED
    @PHP/standard/general_functions/007.php: SUCCEEDED
    @PHP/standard/general_functions/009.php: SUCCEEDED
    @PHP/standard/general_functions/bug25038.php: SUCCEEDED
    @PHP/standard/general_functions/bug27678.php: SUCCEEDED
    @PHP/standard/general_functions/bug29038.php: SUCCEEDED
    @PHP/standard/general_functions/bug31190.php: SUCCEEDED
    @PHP/standard/general_functions/bug32647.php: SUCCEEDED
    @PHP/standard/general_functions/bug35229.php: SUCCEEDED
    @PHP/standard/general_functions/is_resource.php: SUCCEEDED
    @PHP/standard/math/abs.php: SUCCEEDED
    @PHP/standard/math/bug24142.php: SUCCEEDED
    @PHP/standard/math/bug25694.php: SUCCEEDED
    @PHP/standard/math/bug27646.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    double(INF-INF)
    'd:-INF;'
    double(INF-INF)
    double(INF-INF)
    'd:INF;'
    double(INF-INF)
    double(NaNInfini)
    'd:NAN;'
    double(NaNInfini)
    double(-Infinity)
    'd:-INF;'
    double(-Infinity)
    double(Infinity)
    'd:INF;'
    double(Infinity)
    double(NaN)
    'd:NAN;'
    double(NaN)
    @PHP/standard/math/bug30069.php: SUCCEEDED
    @PHP/standard/math/bug30695.php: SUCCEEDED
    @PHP/standard/math/floorceil.php: SUCCEEDED
    @PHP/standard/math/hexdec.php: SUCCEEDED
    @PHP/standard/math/log.php: SUCCEEDED
    @PHP/standard/math/pow.php: SUCCEEDED
    @PHP/standard/math/round.php: SUCCEEDED
    @PHP/standard/reg/001.php: SUCCEEDED
    @PHP/standard/reg/002.php: SUCCEEDED
    @PHP/standard/reg/003.php: SUCCEEDED
    @PHP/standard/reg/004.php: SUCCEEDED
    @PHP/standard/reg/005.php: SUCCEEDED
    @PHP/standard/reg/006.php: SUCCEEDED
    @PHP/standard/reg/007.php: SUCCEEDED
    @PHP/standard/reg/008.php: SUCCEEDED
    @PHP/standard/reg/009.php: SUCCEEDED
    @PHP/standard/reg/010.php: SUCCEEDED
    @PHP/standard/reg/011.php: SUCCEEDED
    @PHP/standard/reg/012.php: SUCCEEDED
    @PHP/standard/reg/013.php: SUCCEEDED
    @PHP/standard/reg/014.php: SUCCEEDED
    @PHP/standard/reg/015.php: SUCCEEDED
    @PHP/standard/reg/016.php: SUCCEEDED
    @PHP/standard/serialize/001.php: SUCCEEDED
    @PHP/standard/serialize/002.php: SUCCEEDED
    @PHP/standard/serialize/003.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    d:100;
    double(100.0000000000)
    
    d:51999999999999996980101120;
    double(51999999999999996980101120.0000000000)
    
    d:8.9999999999999995265585574287341141808127531476202420890331268310546875E-9;
    double(0.0000000090)
    d:100;
    double(100.0000000000)
    
    d:5.2000000000000006E+25;
    double(52000000000000000000000000.0000000000)
    
    d:9.0000000000000045E-09;
    double(0.0000000090)
    @PHP/standard/serialize/004.php: SUCCEEDED
    @PHP/standard/serialize/005.php: SUCCEEDED
    @PHP/standard/serialize/006.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    'O:3:"´┐Ż":1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    object
    {
      '´┐Ż' => '´┐Ż'
    }
    'a:1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    array
    {
      '´┐Ż' => '´┐Ż'
    }
    'O:3:"´┐Ż":1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    object
    {
      'ďż˝' => 'ďż˝'
    }
    'a:1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    array
    {
      'ďż˝' => 'ďż˝'
    }
    @PHP/standard/serialize/bug14293.php: SUCCEEDED
    @PHP/standard/serialize/bug21957.php: SUCCEEDED
    @PHP/standard/serialize/bug23298.php: SUCCEEDED
    @PHP/standard/serialize/bug24063.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0.1 0.1
    0.01 0.01
    0.001 0.001
    0.0001 0.0001
    1.0E-5 1.0E-5
    1.0E-6 1.0E-6
    1.0E-7 1.0E-7
    1.0E-8 1.0E-8
    1.0E-9 1.0E-9
    0.1 0.1
    0.01 0.01
    0.001 0.001
    0.0001 0.0001
    1E-05 1E-05
    1E-06 1E-06
    1E-07 1E-07
    1E-08 1E-08
    1E-09 1E-09
    @PHP/standard/serialize/bug25378.php: SUCCEEDED
    @PHP/standard/serialize/bug26762.php: SUCCEEDED
    @PHP/standard/serialize/bug27469.php: SUCCEEDED
    @PHP/standard/serialize/bug28325.php: SUCCEEDED
    @PHP/standard/serialize/bug30234.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    FALSE
    FALSE
    __autoload(Autoload_Implements)
    object [invalid]
    FALSE
    FALSE
    FALSE
    FALSE
    TRUE
    __autoload(Autoload_Implements)
    object [invalid]
    FALSE
    FALSE
    TRUE
    @PHP/standard/serialize/bug31402.php: SUCCEEDED
    @PHP/standard/serialize/bug31442.php: SUCCEEDED
    @PHP/standard/strings/add-and-stripcslashes.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    kaboemkara!
    foo\b\a\r\b\az
    \f\o\o\[ \]
    \zoo['\.']
    \abcd\e\f\g\h\i\j\k\l\m\n\o\pqrstuvwxy\z
    1
    5d
    Warning: String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\standard\strings\__input.txt at expression on line 3, column 1.
    
    kaboemkara!
    
    Warning: String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\standard\strings\__input.txt at expression on line 5, column 1.
    
    
    Warning: String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\standard\strings\__input.txt at expression on line 6, column 1.
    
    
    
    Warning: String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\standard\strings\__input.txt at expression on line 8, column 1.
    
    1
    5d
    @PHP/standard/strings/add-and-stripslashes.php: SUCCEEDED
    @PHP/standard/strings/basename.php: SUCCEEDED
    @PHP/standard/strings/bin2hex.php: SUCCEEDED
    @PHP/standard/strings/bug20108.php: SUCCEEDED
    @PHP/standard/strings/bug20169.php: SUCCEEDED
    @PHP/standard/strings/bug20261.php: SUCCEEDED
    @PHP/standard/strings/bug20927.php: SUCCEEDED
    @PHP/standard/strings/bug21338.php: SUCCEEDED
    @PHP/standard/strings/bug21453.php: SUCCEEDED
    @PHP/standard/strings/bug21730.php: SUCCEEDED
    @PHP/standard/strings/bug21744.php: SUCCEEDED
    @PHP/standard/strings/bug22008.php: SUCCEEDED
    @PHP/standard/strings/bug22187.php: SUCCEEDED
    @PHP/standard/strings/bug22224.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      0 => 
      object
      {
      }
      1 => 
      object
      {
      }
    }
    @PHP/standard/strings/bug22227.php: SUCCEEDED
    @PHP/standard/strings/bug22904.php: SUCCEEDED
    @PHP/standard/strings/bug23650.php: SUCCEEDED
    @PHP/standard/strings/bug23894.php: SUCCEEDED
    @PHP/standard/strings/bug24098.php: SUCCEEDED
    @PHP/standard/strings/bug24208.php: SUCCEEDED
    @PHP/standard/strings/bug24281.php: SUCCEEDED
    @PHP/standard/strings/bug25671.php: SUCCEEDED
    @PHP/standard/strings/bug25707.php: SUCCEEDED
    @PHP/standard/strings/bug26878.php: SUCCEEDED
    @PHP/standard/strings/bug26973.php: SUCCEEDED
    @PHP/standard/strings/bug27276.php: SUCCEEDED
    @PHP/standard/strings/bug27278.php: SUCCEEDED
    @PHP/standard/strings/bug27295.php: SUCCEEDED
    @PHP/standard/strings/bug27457.php: SUCCEEDED
    @PHP/standard/strings/bug27675.php: SUCCEEDED
    @PHP/standard/strings/bug28386.php: SUCCEEDED
    @PHP/standard/strings/bug33076.php: SUCCEEDED
    @PHP/standard/strings/chr_ord.php: SUCCEEDED
    @PHP/standard/strings/chunk_split.php: SUCCEEDED
    @PHP/standard/strings/count_chars.php: SUCCEEDED
    @PHP/standard/strings/crc32.php: SUCCEEDED
    @PHP/standard/strings/explode.php: SUCCEEDED
    @PHP/standard/strings/implode.php: SUCCEEDED
    @PHP/standard/strings/md5.php: SUCCEEDED
    @PHP/standard/strings/md5raw.php: SUCCEEDED
    @PHP/standard/strings/nl2br.php: SUCCEEDED
    @PHP/standard/strings/sha1.php: SUCCEEDED
    @PHP/standard/strings/sha1raw.php: SUCCEEDED
    @PHP/standard/strings/sprintf_f.php: SUCCEEDED
    @PHP/standard/strings/strcspn.php: SUCCEEDED
    @PHP/standard/strings/strings001.php: SUCCEEDED
    @PHP/standard/strings/strpos.php: SUCCEEDED
    @PHP/standard/strings/strrev.php: SUCCEEDED
    @PHP/standard/strings/strripos.php: SUCCEEDED
    @PHP/standard/strings/strrpos.php: SUCCEEDED
    @PHP/standard/strings/strspn.php: SUCCEEDED
    @PHP/standard/strings/strstr.php: SUCCEEDED
    @PHP/standard/strings/strtoupper.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    cfbfbdcfbfbdcfbfbd
    cfafbdcfafbdcfafbd
    @PHP/standard/strings/strtr.php: SUCCEEDED
    @PHP/standard/strings/strval.php: SUCCEEDED
    @PHP/standard/strings/str_repeat.php: SUCCEEDED
    @PHP/standard/strings/str_shuffle.php: SUCCEEDED
    @PHP/standard/strings/str_word_count.php: SUCCEEDED
    @PHP/standard/strings/substr_count.php: SUCCEEDED
    @PHP/standard/strings/substr_replace.php: SUCCEEDED
    @PHP/standard/strings/wordwrap.php: SUCCEEDED
    @PHP/standard/time/001.php: SUCCEEDED
    @PHP/standard/time/idate.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    U: 1043324459
    Y: 2003
    z: 22
    y: 3
    m: 1
    n: 1
    d: 23
    j: 23
    H: 13
    G: 13
    h: 1
    g: 1
    i: 20
    s: 59
    t: 31
    w: 4
    L: 0
    B: 556
    I: 0
    W: 4
    U: 1043324459
    Y: 2003
    z: 22
    y: 3
    m: 1
    n: 1
    d: 23
    j: 23
    H: 12
    G: 12
    h: 12
    g: 12
    i: 20
    s: 59
    t: 31
    w: 4
    L: 0
    B: 556
    I: 0
    W: 4
    @PHP/strings/001.php: SUCCEEDED
    @PHP/strings/002.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    fprintf test 1:abcde
    20
    printf test 1:simple string
    printf test 2:42
    printf test 3:3.333333
    printf test 4:3.3333333333
    printf test 5:2.50      
    printf test 6:2.50000000
    printf test 7:0000002.50
    printf test 8:<                 foo>
    printf test 9:<bar                 >
    printf test 10: 123456789012345
    printf test 10:<h´┐Żyesterettsjustitiarius>
    printf test 11: 123456789012345678901234567890
    printf test 11:<    h´┐Żyesterettsjustitiarius>
    printf test 12:-12.34
    printf test 13:  -12
    printf test 14:@
    printf test 15:10101010
    printf test 16:aa
    printf test 17:AA
    printf test 18:        10101010
    printf test 19:              aa
    printf test 20:              AA
    printf test 21:0000000010101010
    printf test 22:00000000000000aa
    printf test 23:00000000000000AA
    printf test 24:abcde
    printf test 25:gazonk
    printf test 26:2 1
    printf test 27:3 1 2
    printf test 28:02  1
    printf test 29:2   1
    printf test 30:x
    vprintf test 1:2   1
    fprintf test 1:abcde
    20
    printf test 1:simple string
    printf test 2:42
    printf test 3:3.333333
    printf test 4:3.3333333333
    printf test 5:2.50      
    printf test 6:2.50000000
    printf test 7:0000002.50
    printf test 8:<                 foo>
    printf test 9:<bar                 >
    printf test 10: 123456789012345
    printf test 10:<h�yesterettsjustitiarius>
    printf test 11: 123456789012345678901234567890
    printf test 11:<    h�yesterettsjustitiarius>
    printf test 12:-12.34
    printf test 13:  -12
    printf test 14:@
    printf test 15:10101010
    printf test 16:aa
    printf test 17:AA
    printf test 18:        10101010
    printf test 19:              aa
    printf test 20:              AA
    printf test 21:0000000010101010
    printf test 22:00000000000000aa
    printf test 23:00000000000000AA
    printf test 24:abcde
    printf test 25:gazonk
    printf test 26:2 1
    printf test 27:3 1 2
    printf test 28:02  1
    printf test 29:2   1
    printf test 30:x
    vprintf test 1:2   1
    @PHP/strings/bug22592.php: SUCCEEDED
    Arrays/array1.php: SUCCEEDED
    Arrays/array_diff_intersect.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array [empty]
    array
    (
      [a] => green
      [2] => blue
      [3] => blue
      [4] => blue
    )
    array
    (
      [2] => hello
    )
    array
    (
      [b] => green
      [3] => blue
    )
    array
    (
      [a] => green
      [0] => red
    )
    array
    (
      [3] => blue
    )
    array
    (
      [2] => hello
    )
    array
    (
      [3] => blue
    )
    array
    (
      [0] => 1
      [1] => 2
      [2] => 3
    )
    array [empty]
    array
    (
      [2] => 3
    )
    array [empty]
    Array
    (
    )
    Array
    (
        [a] => green
        [2] => blue
        [3] => blue
        [4] => blue
    )
    Array
    (
        [2] => hello
    )
    Array
    (
        [b] => green
        [3] => blue
    )
    Array
    (
        [a] => green
        [0] => red
    )
    Array
    (
        [3] => blue
    )
    Array
    (
        [2] => hello
    )
    Array
    (
        [3] => blue
    )
    Array
    (
        [0] => 1
        [1] => 2
        [2] => 3
    )
    Array
    (
    )
    Array
    (
        [2] => 3
    )
    Array
    (
    )
    Arrays/array_diff_intersect2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    (
      [0.5] => cr object
      (
        [priv_member:private] => 12
      )
      [0] => cr object
      (
        [priv_member:private] => 23
      )
    )
    array
    (
      [0.1] => cr object
      (
        [priv_member:private] => 9
      )
      [0.5] => cr object
      (
        [priv_member:private] => 12
      )
      [0] => cr object
      (
        [priv_member:private] => 23
      )
    )
    array
    (
      [0.1] => cr object
      (
        [priv_member:private] => 9
      )
      [0.5] => cr object
      (
        [priv_member:private] => 12
      )
      [0] => cr object
      (
        [priv_member:private] => 23
      )
    )
    array
    (
      [b] => brown
      [c] => blue
      [0] => red
    )
    ------------------------------------
    array
    (
      [0.1] => cr object
      (
        [priv_member:private] => 9
      )
      [1] => cr object
      (
        [priv_member:private] => 4
      )
      [2] => cr object
      (
        [priv_member:private] => -15
      )
    )
    array
    (
      [1] => cr object
      (
        [priv_member:private] => 4
      )
      [2] => cr object
      (
        [priv_member:private] => -15
      )
    )
    array
    (
      [1] => cr object
      (
        [priv_member:private] => 4
      )
      [2] => cr object
      (
        [priv_member:private] => -15
      )
    )
    array
    (
      [a] => green
    )
    Array
    (
        [0.5] => cr Object
        (
            [priv_member:private] => 12
        )
    
        [0] => cr Object
        (
            [priv_member:private] => 23
        )
    
    )
    Array
    (
        [0.1] => cr Object
        (
            [priv_member:private] => 9
        )
    
        [0.5] => cr Object
        (
            [priv_member:private] => 12
        )
    
        [0] => cr Object
        (
            [priv_member:private] => 23
        )
    
    )
    Array
    (
        [0.1] => cr Object
        (
            [priv_member:private] => 9
        )
    
        [0.5] => cr Object
        (
            [priv_member:private] => 12
        )
    
        [0] => cr Object
        (
            [priv_member:private] => 23
        )
    
    )
    Array
    (
        [b] => brown
        [c] => blue
        [0] => red
    )
    ------------------------------------
    Array
    (
        [0.1] => cr Object
        (
            [priv_member:private] => 9
        )
    
        [1] => cr Object
        (
            [priv_member:private] => 4
        )
    
        [2] => cr Object
        (
            [priv_member:private] => -15
        )
    
    )
    Array
    (
        [1] => cr Object
        (
            [priv_member:private] => 4
        )
    
        [2] => cr Object
        (
            [priv_member:private] => -15
        )
    
    )
    Array
    (
        [1] => cr Object
        (
            [priv_member:private] => 4
        )
    
        [2] => cr Object
        (
            [priv_member:private] => -15
        )
    
    )
    Array
    (
        [a] => green
    )
    Arrays/array_diff_intersect3.php: SUCCEEDED
    Arrays/array_filter%20false%20entries%20%2322016.php: SUCCEEDED
    Arrays/array_map.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    (
      [0] => array
      (
        [0] => 1
        [1] => A
        [2] => 0
      )
      [1] => array
      (
        [0] => 2
        [1] => B
        [2] => 0
      )
      [2] => array
      (
        [0] => 3
        [1] => C
        [2] => 
      )
    )
    array
    (
      [0] => 1 A 0
      [1] => 2 B 0
      [2] => 3 C 
    )
    array
    (
      [A] => 2
      [10] => 3
    )
    array
    (
      [0] => 1
      [1] => 2
      [2] => 3
    )
    array
    (
      [0] => A
      [1] => B
      [2] => C
    )
    array
    (
      [0] => x
      [1] => x
    )
    array
    (
      [A] => 1
      [10] => 2
    )
    Array
    (
        [0] => Array
        (
            [0] => 1
            [1] => A
            [2] => 0
        )
    
        [1] => Array
        (
            [0] => 2
            [1] => B
            [2] => 0
        )
    
        [2] => Array
        (
            [0] => 3
            [1] => C
            [2] => 
        )
    
    )
    Array
    (
        [0] => 1 A 0
        [1] => 2 B 0
        [2] => 3 C 
    )
    Array
    (
        [A] => 2
        [10] => 3
    )
    Array
    (
        [0] => 1
        [1] => 2
        [2] => 3
    )
    Array
    (
        [0] => A
        [1] => B
        [2] => C
    )
    Array
    (
        [0] => x
        [1] => x
    )
    Array
    (
        [A] => 1
        [10] => 2
    )
    Arrays/array_merge_recursive.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    (
      [color] => array
      (
        [favorite] => array
        (
          [0] => red
          [1] => green
        )
        [0] => blue
      )
      [0] => array
      (
        [0] => 1
        [1] => 2
        [2] => 3
      )
      [q] => array
      (
        [0] => x
      )
      [1] => 10
      [2] => array
      (
        [0] => 4
        [1] => 5
        [2] => 6
      )
    )
    array
    (
      [a] => array
      (
        [0] => 1
        [1] => 2
        [2] => 3
        [3] => e
      )
    )
    array
    (
      [a] => array
      (
        [0] => 1
        [1] => 2
        [2] => 3
        [3] => e
      )
    )
    array
    (
      [a] => &1
      [b] => 2
    )
    array
    (
      [a] => &xxx
      [b] => 2
    )
    array
    (
      [a] => array
      (
        [a] => &array
        (
          [a] => &array [recursion]
        )
        [0] => 1
        [1] => 2
        [2] => 3
      )
    )
    array
    (
      [a] => array
      (
        [b] => array
        (
          [0] => 1
          [1] => 1
        )
        [c] => 1
        [d] => array
        (
          [0] => 2
          [1] => 3
        )
      )
    )
    array
    (
      [a] => array [empty]
    )
    array
    (
      [a] => array [empty]
    )
    Array
    (
        [color] => Array
        (
            [favorite] => Array
            (
                [0] => red
                [1] => green
            )
    
            [0] => blue
        )
    
        [0] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
        )
    
        [q] => Array
        (
            [0] => x
        )
    
        [1] => 10
        [2] => Array
        (
            [0] => 4
            [1] => 5
            [2] => 6
        )
    
    )
    Array
    (
        [a] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
            [3] => e
        )
    
    )
    Array
    (
        [a] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
            [3] => e
        )
    
    )
    Array
    (
        [a] => 1
        [b] => 2
    )
    Array
    (
        [a] => xxx
        [b] => 2
    )
    Array
    (
        [a] => Array
        (
            [a] => Array
            (
                [a] => Array [recursion]
    
    
            )
    
            [0] => 1
            [1] => 2
            [2] => 3
        )
    
    )
    Array
    (
        [a] => Array
        (
            [b] => Array
            (
                [0] => 1
                [1] => 1
            )
    
            [c] => 1
            [d] => Array
            (
                [0] => 2
                [1] => 3
            )
    
        )
    
    )
    Array
    (
        [a] => Array
        (
        )
    
    )
    Array
    (
        [a] => Array
        (
        )
    
    )
    Arrays/array_reduce1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    (
      [a] => 1
      [b] => 2
      [c] => 3
      [d] => 4
      [e] => 5
    )
    array
    (
      [0] => 1
      [1] => 2
      [2] => 3
      [3] => 4
      [4] => 5
    )
    array [empty]
    Array
    (
        [a] => 1
        [b] => 2
        [c] => 3
        [d] => 4
        [e] => 5
    )
    Array
    (
        [0] => 1
        [1] => 2
        [2] => 3
        [3] => 4
        [4] => 5
    )
    Array
    (
    )
    Arrays/array_reduce2.php: SUCCEEDED
    Arrays/array_slice.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    (
      [0] => c
      [Y] => d
      [1] => e
    )
    array
    (
      [Y] => d
    )
    array
    (
      [0] => a
      [X] => b
      [1] => c
    )
    array
    (
      [0] => c
      [Y] => d
    )
    array
    (
      [2] => c
      [Y] => d
    )
    Array
    (
        [0] => c
        [Y] => d
        [1] => e
    )
    Array
    (
        [Y] => d
    )
    Array
    (
        [0] => a
        [X] => b
        [1] => c
    )
    Array
    (
        [0] => c
        [Y] => d
    )
    Array
    (
        [2] => c
        [Y] => d
    )
    Arrays/array_sumprod.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    double(-7.7)
    double(-38.4)
    integer(6)
    integer(6)
    int64(4294967297)
    int64(9223372028264841218)
    bool(true)
    bool(true)
    float(-7.7)
    float(-38.4)
    int(6)
    int(6)
    int64(4294967297)
    int64(9223372028264841218)
    bool(true)
    bool(true)
    Arrays/array_unshift.php: SUCCEEDED
    Arrays/array_walk.php: SUCCEEDED
    Arrays/array_walk_recursive.php: SUCCEEDED
    Arrays/multisort.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    bool(true)
    array
    (
      [0] => array
      (
        [0] => 2
        [1] => 8
        [2] => 2
        [3] => 2
        [4] => 8
        [5] => 8
      )
      [1] => array
      (
        [0] => 7
        [1] => 2
        [2] => 7
        [3] => 4
        [4] => 8
        [5] => 1
      )
      [2] => array
      (
        [0] => 1
        [1] => 4
        [2] => 8
        [3] => 0
        [4] => 6
        [5] => 2
      )
      [3] => array
      (
        [0] => 8
        [1] => 4
        [2] => 1
        [3] => 0
        [4] => 7
        [5] => 1
      )
      [4] => array
      (
        [0] => 20
        [1] => 2
        [2] => 12
        [3] => 11
        [4] => 10
        [5] => 1
      )
    )
    array
    (
      [0] => array
      (
        [0] => 10
        [1] => 100
        [2] => 100
        [3] => a
      )
      [1] => array
      (
        [0] => 1
        [1] => 3
        [2] => 2
        [3] => 1
      )
    )
    array
    (
      [0] => 10
      [1] => a
      [2] => 100
      [3] => 100
    )
    array
    (
      [0] => 1
      [1] => 1
      [2] => 2
      [3] => 3
    )
    bool(true)
    Array
    (
        [0] => Array
        (
            [0] => 2
            [1] => 8
            [2] => 2
            [3] => 2
            [4] => 8
            [5] => 8
        )
    
        [1] => Array
        (
            [0] => 7
            [1] => 2
            [2] => 7
            [3] => 4
            [4] => 8
            [5] => 1
        )
    
        [2] => Array
        (
            [0] => 1
            [1] => 4
            [2] => 8
            [3] => 0
            [4] => 6
            [5] => 2
        )
    
        [3] => Array
        (
            [0] => 8
            [1] => 4
            [2] => 1
            [3] => 0
            [4] => 7
            [5] => 1
        )
    
        [4] => Array
        (
            [0] => 20
            [1] => 2
            [2] => 12
            [3] => 11
            [4] => 10
            [5] => 1
        )
    
    )
    Array
    (
        [0] => Array
        (
            [0] => 10
            [1] => 100
            [2] => 100
            [3] => a
        )
    
        [1] => Array
        (
            [0] => 1
            [1] => 3
            [2] => 2
            [3] => 1
        )
    
    )
    Array
    (
        [0] => 10
        [1] => a
        [2] => 100
        [3] => 100
    )
    Array
    (
        [0] => 1
        [1] => 1
        [2] => 2
        [3] => 3
    )
    Arrays/nonarray%20access%20%2322019.php: SUCCEEDED
    Arrays/optimizations.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    3
    4
    5
    a
    b
    c
    
    Warning: strtolower() expects parameter 1 to be string, array given in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 15
    
    cablo
    3
    4
    5
    a
    b
    c
    array
    cablo
    Arrays/recursion.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    f1:
    array(2) {
      ["a"]=>
      array(5) {
        ["a"]=>
        &array(3) {
          ["a"]=>
          &array(3) {
            ["a"]=>
            *RECURSION*
            [0]=>
            string(1) "y"
            [1]=>
            string(1) "z"
          }
          [0]=>
          string(1) "y"
          [1]=>
          string(1) "z"
        }
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        string(1) "x"
      }
      [0]=>
      string(1) "w"
    }
    f2:
    array(1) {
      ["A"]=>
      &array(2) {
        ["a"]=>
        &array(2) {
          ["a"]=>
          *RECURSION*
          [0]=>
          string(1) "z"
        }
        [0]=>
        string(1) "z"
      }
    }
    f3:
    array(2) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) {
          [0]=>
          *RECURSION*
          [1]=>
          string(1) "z"
        }
        [1]=>
        string(1) "z"
      }
      [1]=>
      string(1) "z"
    }
    f4:
    
    Warning: array_merge_recursive(): recursion detected in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 37
    array(1) {
      ["a"]=>
      &array(3) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
      }
    }
    f5:
    array(1) {
      ["a"]=>
      array(6) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        int(1)
        [4]=>
        int(2)
        [5]=>
        int(3)
      }
    }
    f6:
    array(1) {
      ["a"]=>
      array(2) {
        [0]=>
        string(2) "xx"
        [1]=>
        int(2)
      }
    }
    f7:
    array(1) {
      ["a"]=>
      array(1) {
        ["a"]=>
        array(1) {
          ["a"]=>
          &array(1) {
            ["a"]=>
            &array(1) {
              ["a"]=>
              *RECURSION*
            }
          }
        }
      }
    }
    f1:
    array(2) {
      ["a"]=>
      array(5) {
        ["a"]=>
        &array(3) {
          ["a"]=>
          &array(3) [recursion]
          [0]=>
          string(1) "y"
          [1]=>
          string(1) "z"
        }
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        string(1) "x"
      }
      [0]=>
      string(1) "w"
    }
    f2:
    array(1) {
      ["A"]=>
      &array(2) {
        ["a"]=>
        &array(2) [recursion]
        [0]=>
        string(1) "z"
      }
    }
    f3:
    array(2) {
      [0]=>
      &array(2) [recursion]
      [1]=>
      string(1) "z"
    }
    f4:
    array(1) {
      ["a"]=>
      array(6) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        int(1)
        [4]=>
        int(2)
        [5]=>
        int(3)
      }
    }
    f5:
    array(1) {
      ["a"]=>
      array(6) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        int(1)
        [4]=>
        int(2)
        [5]=>
        int(3)
      }
    }
    f6:
    array(1) {
      ["a"]=>
      array(2) {
        [0]=>
        string(2) "xx"
        [1]=>
        int(2)
      }
    }
    f7:
    array(1) {
      ["a"]=>
      &array(1) {
        ["a"]=>
        &array(1) [recursion]
      }
    }
    Arrays/sort.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    sort regular:
    array
    (
      [0] => 0x10
      [1] => 10x
      [2] => 20x
      [3] => ach0
      [4] => add1
      [5] => x10
      [6] => 0
      [7] => x2
      [8] => 1
      [9] => 1
      [10] => 8
    )
    
    sort numeric:
    array
    (
      [0] => x10
      [1] => 0
      [2] => x2
      [3] => ach0
      [4] => add1
      [5] => 1
      [6] => 1
      [7] => 8
      [8] => 10x
      [9] => 0x10
      [10] => 20x
    )
    
    sort string:
    array
    (
      [0] => 0
      [1] => 0x10
      [2] => 1
      [3] => 1
      [4] => 10x
      [5] => 20x
      [6] => 8
      [7] => ach0
      [8] => add1
      [9] => x10
      [10] => x2
    )
    
    sort locale:
    array
    (
      [0] => 0
      [1] => 0x10
      [2] => 1
      [3] => 1
      [4] => 10x
      [5] => 20x
      [6] => 8
      [7] => add1
      [8] => ach0
      [9] => x10
      [10] => x2
    )
    
    ksort regular:
    array
    (
      [x] => 8
      [z] => 1
      [0] => x10
      [1] => 10x
      [2] => 20x
      [3] => x2
      [4] => 0x10
      [5] => ach0
      [6] => add1
      [10a] => 0
      [2b] => 1
    )
    
    ksort numeric:
    array
    (
      [x] => 8
      [z] => 1
      [0] => x10
      [1] => 10x
      [2b] => 1
      [2] => 20x
      [3] => x2
      [4] => 0x10
      [5] => ach0
      [6] => add1
      [10a] => 0
    )
    
    ksort string:
    array
    (
      [0] => x10
      [1] => 10x
      [10a] => 0
      [2] => 20x
      [2b] => 1
      [3] => x2
      [4] => 0x10
      [5] => ach0
      [6] => add1
      [x] => 8
      [z] => 1
    )
    
    ksort locale:
    array
    (
      [0] => x10
      [1] => 10x
      [10a] => 0
      [2] => 20x
      [2b] => 1
      [3] => x2
      [4] => 0x10
      [5] => ach0
      [6] => add1
      [x] => 8
      [z] => 1
    )
    
    asort regular:
    array
    (
      [4] => 0x10
      [1] => 10x
      [2] => 20x
      [5] => ach0
      [6] => add1
      [0] => x10
      [10a] => 0
      [3] => x2
      [z] => 1
      [2b] => 1
      [x] => 8
    )
    
    asort numeric:
    array
    (
      [0] => x10
      [10a] => 0
      [3] => x2
      [5] => ach0
      [6] => add1
      [z] => 1
      [2b] => 1
      [x] => 8
      [1] => 10x
      [4] => 0x10
      [2] => 20x
    )
    
    asort string:
    array
    (
      [10a] => 0
      [4] => 0x10
      [z] => 1
      [2b] => 1
      [1] => 10x
      [2] => 20x
      [x] => 8
      [5] => ach0
      [6] => add1
      [0] => x10
      [3] => x2
    )
    
    asort locale:
    array
    (
      [10a] => 0
      [4] => 0x10
      [z] => 1
      [2b] => 1
      [1] => 10x
      [2] => 20x
      [x] => 8
      [6] => add1
      [5] => ach0
      [0] => x10
      [3] => x2
    )
    
    rsort regular:
    array
    (
      [0] => 8
      [1] => 1
      [2] => 1
      [3] => x2
      [4] => x10
      [5] => 0
      [6] => add1
      [7] => ach0
      [8] => 20x
      [9] => 10x
      [10] => 0x10
    )
    
    rsort numeric:
    array
    (
      [0] => 20x
      [1] => 0x10
      [2] => 10x
      [3] => 8
      [4] => 1
      [5] => 1
      [6] => x10
      [7] => 0
      [8] => x2
      [9] => ach0
      [10] => add1
    )
    
    rsort string:
    array
    (
      [0] => x2
      [1] => x10
      [2] => add1
      [3] => ach0
      [4] => 8
      [5] => 20x
      [6] => 10x
      [7] => 1
      [8] => 1
      [9] => 0x10
      [10] => 0
    )
    
    rsort locale:
    array
    (
      [0] => x2
      [1] => x10
      [2] => ach0
      [3] => add1
      [4] => 8
      [5] => 20x
      [6] => 10x
      [7] => 1
      [8] => 1
      [9] => 0x10
      [10] => 0
    )
    
    natsort:
    array
    (
      [10a] => 0
      [4] => 0x10
      [z] => 1
      [2b] => 1
      [x] => 8
      [1] => 10x
      [2] => 20x
      [5] => ach0
      [6] => add1
      [3] => x2
      [0] => x10
    )
    sort regular:
    Array
    (
        [0] => 0x10
        [1] => 10x
        [2] => 20x
        [3] => ach0
        [4] => add1
        [5] => x10
        [6] => 0
        [7] => x2
        [8] => 1
        [9] => 1
        [10] => 8
    )
    
    sort numeric:
    Array
    (
        [0] => x10
        [1] => 0
        [2] => x2
        [3] => ach0
        [4] => add1
        [5] => 1
        [6] => 1
        [7] => 8
        [8] => 10x
        [9] => 0x10
        [10] => 20x
    )
    
    sort string:
    Array
    (
        [0] => 0
        [1] => 0x10
        [2] => 1
        [3] => 1
        [4] => 10x
        [5] => 20x
        [6] => 8
        [7] => ach0
        [8] => add1
        [9] => x10
        [10] => x2
    )
    
    sort locale:
    Array
    (
        [0] => 0
        [1] => 0x10
        [2] => 1
        [3] => 1
        [4] => 10x
        [5] => 20x
        [6] => 8
        [7] => add1
        [8] => ach0
        [9] => x10
        [10] => x2
    )
    
    ksort regular:
    Array
    (
        [x] => 8
        [z] => 1
        [0] => x10
        [1] => 10x
        [2] => 20x
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [10a] => 0
        [2b] => 1
    )
    
    ksort numeric:
    Array
    (
        [x] => 8
        [z] => 1
        [0] => x10
        [1] => 10x
        [2b] => 1
        [2] => 20x
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [10a] => 0
    )
    
    ksort string:
    Array
    (
        [0] => x10
        [1] => 10x
        [10a] => 0
        [2] => 20x
        [2b] => 1
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [x] => 8
        [z] => 1
    )
    
    ksort locale:
    Array
    (
        [0] => x10
        [1] => 10x
        [10a] => 0
        [2] => 20x
        [2b] => 1
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [x] => 8
        [z] => 1
    )
    
    asort regular:
    Array
    (
        [4] => 0x10
        [1] => 10x
        [2] => 20x
        [5] => ach0
        [6] => add1
        [0] => x10
        [10a] => 0
        [3] => x2
        [z] => 1
        [2b] => 1
        [x] => 8
    )
    
    asort numeric:
    Array
    (
        [0] => x10
        [10a] => 0
        [3] => x2
        [5] => ach0
        [6] => add1
        [z] => 1
        [2b] => 1
        [x] => 8
        [1] => 10x
        [4] => 0x10
        [2] => 20x
    )
    
    asort string:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [z] => 1
        [2b] => 1
        [1] => 10x
        [2] => 20x
        [x] => 8
        [5] => ach0
        [6] => add1
        [0] => x10
        [3] => x2
    )
    
    asort locale:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [z] => 1
        [2b] => 1
        [1] => 10x
        [2] => 20x
        [x] => 8
        [6] => add1
        [5] => ach0
        [0] => x10
        [3] => x2
    )
    
    rsort regular:
    Array
    (
        [0] => 8
        [1] => 1
        [2] => 1
        [3] => x2
        [4] => x10
        [5] => 0
        [6] => add1
        [7] => ach0
        [8] => 20x
        [9] => 10x
        [10] => 0x10
    )
    
    rsort numeric:
    Array
    (
        [0] => 20x
        [1] => 0x10
        [2] => 10x
        [3] => 8
        [4] => 1
        [5] => 1
        [6] => x10
        [7] => 0
        [8] => x2
        [9] => ach0
        [10] => add1
    )
    
    rsort string:
    Array
    (
        [0] => x2
        [1] => x10
        [2] => add1
        [3] => ach0
        [4] => 8
        [5] => 20x
        [6] => 10x
        [7] => 1
        [8] => 1
        [9] => 0x10
        [10] => 0
    )
    
    rsort locale:
    Array
    (
        [0] => x2
        [1] => x10
        [2] => ach0
        [3] => add1
        [4] => 8
        [5] => 20x
        [6] => 10x
        [7] => 1
        [8] => 1
        [9] => 0x10
        [10] => 0
    )
    
    natsort:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [z] => 1
        [2b] => 1
        [x] => 8
        [1] => 10x
        [2] => 20x
        [5] => ach0
        [6] => add1
        [3] => x2
        [0] => x10
    )
    Arrays/usort.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    array
    (
      [0] => 10
      [1] => 9
      [2] => 8
      [3] => 7
      [4] => 6
      [5] => 5
      [6] => 4
      [7] => 3
      [8] => 2
      [9] => 1
    )
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Array
    (
        [0] => 10
        [1] => 9
        [2] => 8
        [3] => 7
        [4] => 6
        [5] => 5
        [6] => 4
        [7] => 3
        [8] => 2
        [9] => 1
    )
    Bugs/class_incompletepart.php: SUCCEEDED
    Bugs/division-by-zero.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    DIVISION
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 6
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 8
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 10
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 12
    bool(false)
    MODULO
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 16
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 18
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 20
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 22
    bool(false)
    DIVISION
    bool(false)
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt at expression on line 10, column 2.
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt at expression on line 12, column 2.
    bool(false)
    MODULO
    bool(false)
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt at expression on line 20, column 2.
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt at expression on line 22, column 2.
    bool(false)
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt(6,10): warning PHP0150: Division by zero
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt(8,9): warning PHP0150: Division by zero
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt(16,10): warning PHP0150: Division by zero
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt(18,9): warning PHP0150: Division by zero
    
    Bugs/function-in-unknown-class.php: SUCCEEDED
    Bugs/is_a_null_value.php: SUCCEEDED
    Bugs/preg-named-groups.php: SUCCEEDED
    Bugs/preg-replace-advanced.php: SUCCEEDED
    Bugs/preg-replace-range.php: SUCCEEDED
    Bugs/preg-replace.php: SUCCEEDED
    Bugs/preg-this-dynamic.php: FAILED
    Script hung upNo errorsSuccess
    Expected test outputReal script output
    Unhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---> PHP.Core.Debug+AssertException: Assertion failed: 
       at PHP.Core.Debug.Fail(String message)
       at PHP.Core.Debug.Assert(Boolean condition)
       at PHP.Core.RelativePath.ParseCanonical(String relativePath)
       at PHP.Core.Emit.TransientAssemblyBuilder.Build(String sourceCode, SourceCodeDescriptor descriptor, EvalKinds kind, CompilationContext context, ScriptContext scriptContext, DTypeDesc referringType, NamingContext namingContext, Boolean completeSource)
       at PHP.Core.DynamicCode.EvalInternal(String prefix, String code, String suffix, EvalKinds kind, ScriptContext scriptContext, Dictionary`2 localVariables, DObject self, DTypeDesc referringType, SourceCodeDescriptor descriptor, Boolean entireFile, NamingContext namingContext)
       at PHP.Core.DynamicCode.Eval(String code, Boolean synthetic, ScriptContext context, Dictionary`2 definedVariables, DObject self, DTypeDesc referringType, String callerRelativeSourcePath, Int32 line, Int32 column, Int32 containerId, NamingContext namingContext)
       at PHP.Library.PerlRegExp.Evaluator.ReplaceCodeExecute(Match m)
       at System.Text.RegularExpressions.RegexReplacement.Replace(MatchEvaluator evaluator, Regex regex, String input, Int32 count, Int32 startat)
       at System.Text.RegularExpressions.Regex.Replace(String input, MatchEvaluator evaluator, Int32 count)
       at PHP.Library.PerlRegExp.ReplaceInternal(DObject self, Dictionary`2 definedVariables, PerlRegExpConverter converter, PhpCallback callback, String str, Int32 limit, SourceCodeDescriptor sourceCodeDesc, Int32& count)
       at PHP.Library.PerlRegExp.SimpleReplace(DObject self, Dictionary`2 definedVariables, Object pattern, String replacement, PhpCallback callback, Object data, Int32 limit, SourceCodeDescriptor descriptor, Int32& count)
       at PHP.Library.PerlRegExp.Replace(DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, PhpCallback callback, Object data, Int32 limit, Int32& count)
       at PHP.Dynamic.PhpNetClassLibrary.preg_replace(Object , PhpStack )
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <__input.txt>.a.a(ScriptContext ) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt:line 16
       at <__input.txt>.a.<Mediator>(ScriptContext )
       at <__input.txt>.a.a(Object instance, PhpStack stack)
       at <__input.txt>.<Script>.<Main>(ScriptContext <context>, Dictionary`2 <locals>, DObject , DTypeDesc , Boolean ) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt:line 19
       at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)
       at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)
       --- End of inner exception stack trace ---
       at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)
       at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)
       at <Global>.Run(String[] )
    
    Bugs/preg-this-dynamic2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    foo: ahoj
    foo: lidi
    foo: rozkladame
    foo: ahoj
    foo: lidi
    foo: rozkladame
    foo: ahoj
    foo: lidi
    foo: rozkladame
    
    Notice: Undefined variable: this.
    
    Error: Call to a member function foo() on a non-object.
    Bugs/preg-this.php: SUCCEEDED
    Bugs/preg-ungreedy-bugs.php: SUCCEEDED
    Bugs/preg-unkn.php: SUCCEEDED
    Bugs/trigger_error%20line%20number%20%232787.php: SUCCEEDED
    Compiler/abstracts.php: SUCCEEDED
    Compiler/assignments.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ---1---1float(-1.5)
    float(2.5)
    float(0.83333333333333)
    int(6)
    int(8)
    ---2---2float(8.8333333333333)
    float(8.8333333333333)
    float(8.8333333333333)
    int(8)
    int(8)
    ---3---3---4---4---5---5array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [1]=>
      array(1) {
        [2]=>
        array(1) {
          [3]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    ---6---6array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "u"
    }
    array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "v"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    ---7---7array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    ---8---8
    ---1---1float(-1.5)
    float(2.5)
    float(0.833333333333333)
    int(6)
    int(8)
    ---2---2float(8.83333333333333)
    float(8.83333333333333)
    float(8.83333333333333)
    int(8)
    int(8)
    ---3---3---4---4---5---5array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [1]=>
      array(1) {
        [2]=>
        array(1) {
          [3]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    ---6---6array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "u"
    }
    array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "v"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    ---7---7array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    ---8---8
    Compiler/assign_in_call.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    g1:
    f(x)
    u(x)
    'x'
    
    g2:
    f(x)
    u(x)
    'b'
    
    g3:
    f(x)
    u(x)
    'b'
    
    g4:
    f(x)
    u(x)
    'b'
    
    g5:
    f()
    u()
    integer(1)
    
    g6:
    f(3)
    u(3)
    integer(3)
    
    g7:
    f(2)
    u(10)
    integer(10)
    
    g8:
    f(1)
    f(1)
    f(1)
    u(1)
    u()
    u(1)
    
    g9:
    known:
    __get(p) = 0
    __set(p,1)
    f(1)
    unknown:
    __get(p) = 1
    __set(p,3)
    u(3)
    
    g10:
    Done.
    g1:
    f(x)
    u(x)
    'x'
    
    g2:
    f(x)
    u(x)
    'b'
    
    g3:
    f(x)
    u(x)
    'b'
    
    g4:
    f(x)
    u(x)
    'b'
    
    g5:
    f()
    u()
    integer(1)
    
    g6:
    f(3)
    u(3)
    integer(3)
    
    g7:
    f(2)
    u(10)
    integer(10)
    
    g8:
    f(1)
    f(1)
    f(1)
    u(1)
    u()
    u(1)
    
    g9:
    known:
    __get(p) = 0
    __set(p,1)
    __get(p) = 1
    f(1)
    unknown:
    __get(p) = 1
    __set(p,3)
    __get(p) = 3
    u(3)
    
    g10:
    Done.
    Compiler/auto_globals_001.php: SUCCEEDED
    Compiler/auto_globals_002.php: SUCCEEDED
    Compiler/auto_globals_003.php: SUCCEEDED
    Compiler/break_in_global_code.php: SUCCEEDED
    Compiler/chaining_test.php: SUCCEEDED
    Compiler/chain_ending_by_string_index.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        string(1) "f"
      }
    }
    array(1) {
      [0]=>
      string(4) "xubu"
    }
    object(C)#1 (1) {
      ["f"]=>
      string(4) "kuxu"
    }
    string(5) "helxo"
    string(5) "helxo"
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        string(1) "f"
      }
    }
    array(1) {
      [0]=>
      string(4) "bubu"
    }
    
    Warning: A string item used as a reference in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt at expression on line 19, column 1.
    object(C)(1) {
      ["f"]=>
      string(4) "kuku"
    }
    
    Warning: A string item used as a reference in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt at expression on line 25, column 1.
    string(5) "hello"
    
    Warning: A string item used as a reference in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt at expression on line 31, column 1.
    string(5) "hello"
    Compiler/continue_in_global_code.php: SUCCEEDED
    Compiler/deep_copy.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array(1) {
      [0]=>
      &array(1) {
        [0]=>
        &array(1) {
          [0]=>
          *RECURSION*
        }
      }
    }
    array(1) {
      [0]=>
      &array(1) {
        [0]=>
        &array(1) {
          [0]=>
          *RECURSION*
        }
      }
    }
    array(2) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) {
          [0]=>
          *RECURSION*
          [1]=>
          int(1)
        }
        [1]=>
        int(1)
      }
      [1]=>
      int(1)
    }
    array(1) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) {
          [0]=>
          *RECURSION*
          [1]=>
          int(1)
        }
        [1]=>
        int(1)
      }
    }
    array(1) {
      [0]=>
      &array(1) [recursion]
    }
    array(1) {
      [0]=>
      &array(1) [recursion]
    }
    array(2) {
      [0]=>
      &array(2) [recursion]
      [1]=>
      int(1)
    }
    array(1) {
      [0]=>
      &array(1) [recursion]
    }
    Compiler/deep_copy_refbox.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Strict Standards: Only variables should be passed by reference in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt on line 42
    array
    {
      0 => integer(1)
    }
    
    Strict Standards: Only variables should be passed by reference in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt on line 45
    array
    {
      0 => integer(1)
    }
    
    Strict Standards: Only variables should be passed by reference in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt on line 49
    array
    {
      0 => integer(1)
    }
    
    Strict Standards: Only variables should be passed by reference in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt on line 52
    array
    {
      0 => integer(1)
    }
    array
    {
      0 => integer(1)
      1 => integer(1)
    }
    array
    {
      0 => integer(1)
      1 => integer(1)
    }
    array
    {
      0 => integer(1)
      1 => integer(1)
    }
    array
    {
      0 => integer(1)
      1 => integer(1)
    }
    Compiler/expr_init.php: SUCCEEDED
    Compiler/foreach1.php: SUCCEEDED
    Compiler/foreach_arrays.php: SUCCEEDED
    Compiler/for_loop.php: SUCCEEDED
    Compiler/function_002.php: SUCCEEDED
    Compiler/function_003.php: SUCCEEDED
    Compiler/function_004.php: SUCCEEDED
    Compiler/function_call.php: SUCCEEDED
    Compiler/if_statement.php: SUCCEEDED
    Compiler/indirect_001.php: SUCCEEDED
    Compiler/indirect_002.php: SUCCEEDED
    Compiler/indirect_003.php: SUCCEEDED
    Compiler/indirect_004.php: SUCCEEDED
    Compiler/indirect_005.php: SUCCEEDED
    Compiler/indirect_007.php: SUCCEEDED
    Compiler/indirect_global.php: SUCCEEDED
    Compiler/inheritance.php: SUCCEEDED
    Compiler/inheritance2.php: SUCCEEDED
    Compiler/isset_unset_001.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Testing x in global code:  <br>
    1 <br>
     <br>
    Testing x (object) in optimized function:  <br>
    1 <br>
     <br>
    Testing x (PhpReference) in optimized function:  <br>
    1 <br>
     <br>
    
    Notice: Undefined variable: y in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt on line 29
    Testing $$x (created at runtime) in optimized function:  <br>
    1 <br>
    Testing x in global code:  <br>
    1 <br>
     <br>
    Testing x (object) in optimized function:  <br>
    1 <br>
     <br>
    Testing x (PhpReference) in optimized function:  <br>
    1 <br>
     <br>
    Testing $$x (created at runtime) in optimized function:  <br>
    1 <br>
    Compiler/list%20%2326681.php: SUCCEEDED
    Compiler/null_hints.php: SUCCEEDED
    Compiler/pure_create_function.php: SUCCEEDED
    Compiler/pure_function_exists.php: SUCCEEDED
    Compiler/pure_math_str.php: SUCCEEDED
    Compiler/switch.php: SUCCEEDED
    Compiler/ternary_ex.php: SUCCEEDED
    Compiler/typehint_check.php: SUCCEEDED
    Compiler/Inclusions/include2.php: SUCCEEDED
    Compiler/Inclusions/include3.php: SUCCEEDED
    Compiler/Inclusions/include6.php: SUCCEEDED
    Compiler/Inclusions/include_test.php: SUCCEEDED
    Compiler/Inclusions/script.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t01.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t02.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t03.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t04.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t05.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t08.php: SUCCEEDED
    Compiler/PseudoConst/parent.php: SUCCEEDED
    Compiler/PseudoConst/parent2.php: SUCCEEDED
    Compiler/PseudoConst/self.php: SUCCEEDED
    Compiler/PseudoConst/t01.php: SUCCEEDED
    Compiler/PseudoConst/t02.php: SUCCEEDED
    Compiler/PseudoConst/t03.php: SUCCEEDED
    Compiler/PseudoConst/t04.php: SUCCEEDED
    Compiler/PseudoConst/t05.php: SUCCEEDED
    Compiler/PseudoConst/t06.php: SUCCEEDED
    Compiler/PseudoConst/t07.php: SUCCEEDED
    Compiler/PseudoConst/t08.php: SUCCEEDED
    Compiler/PseudoConst/t09.php: SUCCEEDED
    Compiler/PseudoConst/t10.php: SUCCEEDED
    Compiler/PseudoConst/t11.php: SUCCEEDED
    Compiler/PseudoConst/_class_.php: SUCCEEDED
    Compiler/PseudoConst/_function_.php: SUCCEEDED
    Compiler/References/array_argument.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(2)
        [1]=>
        int(3)
      }
    }
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    Compiler/References/array_local.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(2)
        [1]=>
        int(3)
      }
    }
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    Compiler/References/array_ret_argument.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(2)
        [1]=>
        int(3)
      }
    }
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    Compiler/References/array_ret_argument2.php: SUCCEEDED
    Compiler/References/deepcopy.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <br/><br/>globalobjects: array(2) {
      [0]=>
      int(1)
      [1]=>
      int(7)
    }
    <br/><br/>globalobjects: array(2) {
      [0]=>
      int(1)
      [1]=>
      &int(7)
    }
    Compiler/References/explicitclear.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Construyendo Y
    call foo12Destruyendo Y
    3object(X)#1 (2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      int(54)
    }
    array(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      string(10) "Init Value"
    }
    x: object(X)#1 (2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      int(1004)
    }
    <br/>checkpoint array(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      int(54)
    }
    Construyendo Y
    call foo123object(X)(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      &int(54)
    }
    array(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      &int(54)
    }
    x: object(X)(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      &int(1004)
    }
    <br/>checkpoint array(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      &int(1004)
    }
    Destruyendo Y
    Compiler/References/field_argument.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: int(7)
    <br/><br/>checkpoint array(1) {
      ["objects"]=>
      int(8)
    }
    x: int(7)
    <br/><br/>checkpoint array(1) {
      ["objects"]=>
      &int(7)
    }
    Compiler/References/field_local.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: object(X)#1 (1) {
      ["objects"]=>
      int(25)
    }
    <br/>checkpoint array(1) {
      ["objects"]=>
      int(7)
    }
    x: object(X)(1) {
      ["objects"]=>
      &int(25)
    }
    <br/>checkpoint array(1) {
      ["objects"]=>
      &int(25)
    }
    Compiler/References/ref_arrayitem.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(2)
        [1]=>
        int(3)
      }
    }
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    Compiler/References/ref_reasign.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    object(X)#1 (2) {
      ["objects"]=>
      int(54)
      ["objects2"]=>
      &int(222)
    }
    array(2) {
      ["objects"]=>
      int(7)
      ["objects2"]=>
      &int(222)
    }
    x: object(X)#1 (2) {
      ["objects"]=>
      int(1004)
      ["objects2"]=>
      int(777)
    }
    <br/>checkpoint array(2) {
      ["objects"]=>
      int(54)
      ["objects2"]=>
      int(222)
    }
    object(X)(2) {
      ["objects"]=>
      &int(54)
      ["objects2"]=>
      &int(222)
    }
    array(2) {
      ["objects"]=>
      &int(54)
      ["objects2"]=>
      &int(222)
    }
    x: object(X)(2) {
      ["objects"]=>
      &int(1004)
      ["objects2"]=>
      &int(777)
    }
    <br/>checkpoint array(2) {
      ["objects"]=>
      &int(1004)
      ["objects2"]=>
      &int(777)
    }
    Compiler/Unreachable/t13.php: SUCCEEDED
    Compiler/Unset/calluserfunc.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Warning: call_user_func() expects parameter 1 to be a valid callback, function 'unset' not found or invalid function name in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\Unset\__input.txt on line 3
    int(10)
    Error: call_user_func(): Call to undefined function: 'unset' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\Unset\__input.txt at expression on line 3, column 1.
    Compiler/Unset/issetref2.php: SUCCEEDED
    Compiler/Unset/unsetglobal.php: SUCCEEDED
    Compiler/Unset/unsetglobal2.php: SUCCEEDED
    Compiler/Unset/unsetindirect.php: SUCCEEDED
    Compiler/Unset/unsetproblem.php: SUCCEEDED
    Compiler/Unset/unsetref.php: SUCCEEDED
    Compiler/Unset/unsetref2.php: SUCCEEDED
    Compiler/Unset/unsetref3.php: SUCCEEDED
    Compiler/Unset/__unset.php: SUCCEEDED
    DateTime/strftime.php: SUCCEEDED
    DateTime/strtotime1.php: SUCCEEDED
    DateTime/strtotime2.php: SUCCEEDED
    DateTime/strtotime3.php: SUCCEEDED
    DateTime/strtotime4.php: SUCCEEDED
    DateTime/strtotime5.php: SUCCEEDED
    DateTime/time.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    -189388800:-189475200 - 86400
    1964-01-01T00:00:00+0000
    1963-12-31T00:00:00+0000
    1964-06-06
    1963-06-06
    1964-01-06
    1133305200
    -189388800:-189475200 - 86400
    1964-01-01T00:00:00+0000
    1963-12-31T00:00:00+0000
    1964-06-06
    1963-06-06
    1964-01-06
    DateTime/timezones1.php: SUCCEEDED
    FileSystem/basename.php: SUCCEEDED
    FileSystem/basename2.php: SUCCEEDED
    FileSystem/chdir.php: SUCCEEDED
    FileSystem/csv.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    --- write ---
    72
    24
    44
    2
    6
    
    --- read ---
    "hello\n
    world";"aaa""bbb""ccc";"blah blah;";none;"tab\ttab";"space space"\n
    hh'ee;"ss\nsadasdasd s"\n
    """""""""""""""""""""";"""";;"""""";"xxx"""\n
    x\n
    "x\y"\n
    --- write ---
    72
    24
    44
    2
    6
    
    --- read ---
    
    Warning: String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    FileSystem/date.php: SUCCEEDED
    FileSystem/date2.php: SUCCEEDED
    FileSystem/date3.php: SUCCEEDED
    FileSystem/date_unix.php: SUCCEEDED
    FileSystem/dirname.php: SUCCEEDED
    FileSystem/dirname2.php: SUCCEEDED
    FileSystem/disk_free_space.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    91 GB
    Drive C: 177 GB
    Drive D: 91 GB
    Drive E: 67 GB
    Drive F: 
    Warning: disk_free_space(): The parameter is incorrect.
     in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 14
    false
    91 GB
    Drive C: 177 GB
    Drive D: 91 GB
    Drive E: 67 GB
    Drive F: false
    FileSystem/disk_total_space.php: SUCCEEDED
    FileSystem/fgets.php: SUCCEEDED
    FileSystem/file.php: SUCCEEDED
    FileSystem/filesize.php: SUCCEEDED
    FileSystem/file_exists.php: SUCCEEDED
    FileSystem/file_get_contents.php: SUCCEEDED
    FileSystem/fpassthru.php: SUCCEEDED
    FileSystem/fread.php: SUCCEEDED
    FileSystem/fread1.php: SUCCEEDED
    FileSystem/fread2.php: SUCCEEDED
    FileSystem/fseek.php: SUCCEEDED
    FileSystem/fsockopen.php: SUCCEEDED
    FileSystem/ftell.php: SUCCEEDED
    FileSystem/is_dir.php: SUCCEEDED
    FileSystem/is_executable.php: SUCCEEDED
    FileSystem/pathinfo.php: SUCCEEDED
    FileSystem/popen.php: SUCCEEDED
    FileSystem/readdir.php: SUCCEEDED
    FileSystem/readfile.php: SUCCEEDED
    FileSystem/readline.php: SUCCEEDED
    FileSystem/realpath.php: SUCCEEDED
    FileSystem/scandir.php: SUCCEEDED
    FileSystem/stat.php: SUCCEEDED
    FileSystem/stream_context_set_option.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <pre>[ARRAY
      [STRING: "http"] => [ARRAY
        [STRING: "method"] => [STRING: "GET"]
        [STRING: "header"] => [STRING: "Accept-language: en
    Cookie: foo=bar
    "]
        [STRING: "op1"] => [STRING: "DIRECT"]
        [STRING: "op2"] => [STRING: "VIA STREAM"]
      ]
      [STRING: "other"] => [ARRAY
        [STRING: "method"] => [STRING: "otherGET"]
        [STRING: "header"] => [STRING: "otherAccept-language: en
    otherCookie: foo=bar
    "]
      ]
      [STRING: "file"] => [ARRAY
        [STRING: "method"] => [STRING: "otherGET"]
        [STRING: "header"] => [STRING: "otherAccept-language: en
    otherCookie: foo=bar
    "]
      ]
      [STRING: "wrap"] => [ARRAY
        [STRING: "op1"] => [STRING: "DIRECT"]
        [STRING: "op2"] => [STRING: "VIA STREAM"]
      ]
    ]</pre>
    <pre>[ARRAY
      [STRING: "http"] => [ARRAY
        [STRING: "method"] => [STRING: "GET"]
        [STRING: "header"] => [STRING: "Accept-language: en
    Cookie: foo=bar
    "]
        [STRING: "op1"] => [STRING: "DIRECT"]
        [STRING: "op2"] => [STRING: "VIA STREAM"]
      ]
      [STRING: "other"] => [ARRAY
        [STRING: "method"] => [STRING: "otherGET"]
        [STRING: "header"] => [STRING: "otherAccept-language: en
    otherCookie: foo=bar
    "]
      ]
      [STRING: "file"] => [ARRAY
        [STRING: "method"] => [STRING: "otherGET"]
        [STRING: "header"] => [STRING: "otherAccept-language: en
    otherCookie: foo=bar
    "]
      ]
      [STRING: "wrap"] => [ARRAY
        [STRING: "op1"] => [STRING: "DIRECT"]
        [STRING: "op2"] => [STRING: "VIA STREAM"]
      ]
    ]</pre>
    Error: Script 'D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\fs.inc' inclusion failed. Script not found in the application's script libraries in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 3, column 1.
    FileSystem/stream_copy_to_stream.php: SUCCEEDED
    FileSystem/stream_copy_to_stream2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <p>Read <b>rb</b>, Write <b>wb</b>
    
    
    COPIED: <b>11606</b>
    <p>Read <b>rb</b>, Write <b>wt</b>
    
    
    COPIED: <b>11606</b>
    <p>Read <b>rb</b>, Write <b>wb</b>
    
    
    COPIED: <b>11606</b>
    <p>Read <b>rb</b>, Write <b>wt</b>
    
    
    COPIED: <b>11645</b>
    FileSystem/testinc.php: SUCCEEDED
    FileSystem/touch.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Warning: touch(): Utime failed: No such file or directory in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 8
    Sorry Could Not change modification time of touch.txt
    Warning: touch(): Utime failed: No such file or directory in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 14
    
    Warning: touch(): Utime failed: No such file or directory in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 16
    
    Warning: touch(): Utime failed: No such file or directory in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 17
    <pre>[ARRAY
      [INT (0)] => [STRING: "February 23, 2011; [10:54:00] (10h) ctime test.txt (1298454840)"]
      [INT (1)] => [STRING: "February 19, 2011; [22:06:05] (22h) mtime test.txt (1298149565)"]
      [INT (2)] => [STRING: "February 23, 2011; [10:54:00] (10h) ctime touch.txt (1298454840)"]
      [INT (3)] => [STRING: "February 19, 2011; [22:06:05] (22h) mtime touch.txt (1298149565)"]
      [INT (4)] => [STRING: "February 23, 2011; [10:54:00] (10h) atime touch.txt (1298454840)"]
      [INT (5)] => [STRING: "February 19, 2011; [22:06:05] (22h) mtime summer.txt (1298149565)"]
      [INT (6)] => [STRING: "February 19, 2011; [22:06:05] (22h) mtime winter.txt (1298149565)"]
    ]</pre>
    Warning: touch(): Unable to access (D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\touch.txt): Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 8, column 5.
    Sorry Could Not change modification time of touch.txt
    Warning: touch(): Unable to access (D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\touch.txt): Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 14, column 1.
    
    Warning: touch(): Unable to access (D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\winter.txt): Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 16, column 1.
    
    Warning: touch(): Unable to access (D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\summer.txt): Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 17, column 1.
    <pre>[ARRAY
      [INT (0)] => [STRING: "February 23, 2011; [10:54:00] (10h) ctime test.txt (1298454840)"]
      [INT (1)] => [STRING: "February 19, 2011; [22:06:05] (22h) mtime test.txt (1298149565)"]
      [INT (2)] => [STRING: "February 23, 2011; [10:54:00] (10h) ctime touch.txt (1298454840)"]
      [INT (3)] => [STRING: "February 19, 2011; [22:06:05] (22h) mtime touch.txt (1298149565)"]
      [INT (4)] => [STRING: "February 23, 2011; [10:54:00] (10h) atime touch.txt (1298454840)"]
      [INT (5)] => [STRING: "February 19, 2011; [22:06:05] (22h) mtime summer.txt (1298149565)"]
      [INT (6)] => [STRING: "February 19, 2011; [22:06:05] (22h) mtime winter.txt (1298149565)"]
    ]</pre>
    FileSystem/tar/tar_test.php: SUCCEEDED
    FileSystem/zip/zip.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    failed
    Error: Call to undefined function: 'zip_open' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\zip\__input.txt at expression on line 3, column 1.
    Math/abs.php: SUCCEEDED
    Math/atan2.php: SUCCEEDED
    Math/base_convert.php: SUCCEEDED
    Math/bindec.php: SUCCEEDED
    Math/ceil.php: SUCCEEDED
    Math/cos.php: SUCCEEDED
    Math/decbin.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <pre>
    [double: 2294967295]
    10001000110010100110101111111111
    [double: 4294967296]
    0
    [double: 8589934590]
    11111111111111111111111111111110
    [double: 8589934590]
    11111111111111111111111111111110
    [double: 8589934591]
    11111111111111111111111111111111
    [Int: 1000.000.000.000]
    11010100101001010001000000000000
    <hr>(-1, -5435, 2.14, 0, 26)
    11111111111111111111111111111111
    11111111111111111110101011000101
    10
    0
    11010 
    </pre>
    <pre>
    [???: 2294967295]
    10001000110010100110101111111111
    [???: 4294967296]
    0
    [???: 8589934590]
    11111111111111111111111111111110
    [???: 8589934590]
    11111111111111111111111111111110
    [???: 8589934591]
    11111111111111111111111111111111
    [Int: 1000.000.000.000]
    11010100101001010001000000000000
    <hr>(-1, -5435, 2.14, 0, 26)
    11111111111111111111111111111111
    11111111111111111110101011000101
    10
    0
    11010 
    </pre>
    Math/dechex.php: SUCCEEDED
    Math/decoct.php: SUCCEEDED
    Math/deg2rad.php: SUCCEEDED
    Math/exp.php: SUCCEEDED
    Math/floor.php: SUCCEEDED
    Math/fmod.php: SUCCEEDED
    Math/hexdec.php: SUCCEEDED
    Math/max.php: SUCCEEDED
    Math/min.php: SUCCEEDED
    Math/modulo_warn.php: SUCCEEDED
    Math/octdec.php: SUCCEEDED
    Math/pow.php: SUCCEEDED
    Math/rad2deg.php: SUCCEEDED
    Math/round.php: SUCCEEDED
    Math/sin.php: SUCCEEDED
    Math/sqrt.php: SUCCEEDED
    Math/tan.php: SUCCEEDED
    Math/uniqid.php: SUCCEEDED
    Misc/calendar_extension.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0
    0
    2375840
    0
    14
    32
    2
    There are 31 days in August 2003
    There are 28 days in February 2003
    There are 29 days in February 2004
    There are 31 days in December 2034
    1748326
    1748324
    374867
    0
    322f32322f35373633
    ebe120e7f9e5ef20e4faf9f1e2
    ebe120e7f9e5ef20e427faf9f1e2
    ebe120e7f9e5ef20e420e0ecf4e9ed20faf9f1e2
    ebe120e7f9e5ef20e42720e0ecf4e9ed20faf9f1e2
    eb22e120e7f9e5ef20e4faf9f122e2
    e12720e7f9e5ef20e4faf9f122e2
    e12720e7f9e5ef20e427faf9f122e2
    e12720e7f9e5ef20e420e0ecf4e9ed20faf9f122e2
    e12720e7f9e5ef20e42720e0ecf4e9ed20faf9f122e2
    Error: Call to undefined function: 'frenchtojd' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt at expression on line 2, column 1.
    Misc/fgetcsv%20%2327492.php: SUCCEEDED
    Misc/hash%20functions%20%2326667.php: SUCCEEDED
    Misc/ini_parse.php: SUCCEEDED
    Misc/json%20%2327838.php: SUCCEEDED
    Misc/lexer.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    T_INLINE_HTML
    311 '\r\n'
    T_OPEN_TAG
    368 '&lt;?'
    T_WHITESPACE
    371 ' \r\n\r\n'
    T_FINAL
    345 'final'
    T_WHITESPACE
    371 ' '
    T_CLASS
    353 'class'
    T_WHITESPACE
    371 ' '
    T_STRING
    307 'A'
    T_WHITESPACE
    371 ' \r\n'
        '{'
    T_WHITESPACE
    371 ' \r\n  '
    T_FUNCTION
    334 'function'
    T_WHITESPACE
    371 ' '
    T_STRING
    307 '__get'
        '('
    T_VARIABLE
    309 '$x'
        ')'
    T_WHITESPACE
    371 ' \r\n  '
        '{'
    T_WHITESPACE
    371 ' \r\n    '
    T_VARIABLE
    309 '$x'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_START_HEREDOC
    372 '&lt;&lt;&lt;EOOOOOOOOOOOOOOT\r\n'
    T_ENCAPSED_AND_WHITESPACE
    314 '         &lt;&lt;&lt;hello\r\nEOOOOOOOOOOOOOOt;\r\nEOOOOOOOOOOOOOT;\r\n'
    T_END_HEREDOC
    373 'EOOOOOOOOOOOOOOT'
        ';'
    T_WHITESPACE
    371 '\r\n\r\n    '
        '$'
    T_VARIABLE
    309 '$y'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_ARRAY
    360 'array'
    T_WHITESPACE
    371 ' '
        '('
    T_LNUMBER
    305 '1'
        ','
    T_DNUMBER
    306 '100000000000000'
        ','
    T_DNUMBER
    306 '999999999999999999999999999999999'
        ','
    T_STRING
    307 'true'
        ','
    T_STRING
    307 'false'
        ')'
        ';'
    T_WHITESPACE
    371 '\r\n    '
        '$'
        '{'
        '&quot;'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
    T_DOLLAR_OPEN_CURLY_BRACES
    374 '${'
        '$'
        '{'
    T_CONSTANT_ENCAPSED_STRING
    315 '&quot;xxx&quot;'
        '}'
        '}'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
        '&quot;'
        '}'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_LNUMBER
    305 '1'
        ';'
    T_WHITESPACE
    371 '\r\n    '
        '$'
        '{'
        '&quot;'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
    T_DOLLAR_OPEN_CURLY_BRACES
    374 '${'
        '$'
        '{'
        '&quot;'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
    T_VARIABLE
    309 '$x'
    T_ENCAPSED_AND_WHITESPACE
    314 '-&gt;$$'
    T_VARIABLE
    309 '$x0xx'
        '&quot;'
        '}'
        '}'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
        '&quot;'
        '}'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_LNUMBER
    305 '1'
        ';'
    T_WHITESPACE
    371 '\r\n  '
        '}'
    T_WHITESPACE
    371 ' \r\n'
        '}'
    T_WHITESPACE
    371 '\r\n\r\n'
    T_CLOSE_TAG
    370 '?&gt;'
    '
    '
        '&lt;?'
        ' 
    
    '
        'final'
        ' '
        'class'
        ' '
        'A'
        ' 
    '
        '{'
        ' 
      '
        'function'
        ' '
    259
    259 '
    Warning: String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt at expression on line 10, column 7.
    '
        '('
        '$x'
        ')'
        ' 
      '
        '{'
        ' 
        '
        '$x'
        ' '
        '='
        ' '
        '&lt;&lt;&lt;EOOOOOOOOOOOOOOT
    '
        '         &lt;&lt;&lt;'
        'hello'
        '
    '
        'EOOOOOOOOOOOOOOt;
    '
        'EOOOOOOOOOOOOOT;
    '
        'EOOOOOOOOOOOOOOT'
        ';'
        '
    
        '
        '$'
        '$y'
        ' '
        '='
        ' '
        'array'
        ' '
        '('
        '1'
        ','
        '100000000000000'
        ','
        '999999999999999999999999999999999'
        ','
    256
    256 '
    Warning: String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt at expression on line 10, column 7.
    '
        ','
    257
    257 '
    Warning: String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt at expression on line 10, column 7.
    '
        ')'
        ';'
        '
        '
        '$'
        '{'
        '&quot;'
        'x'
        '${'
        '$'
        '{'
    -29
    -29 '
    Warning: String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt at expression on line 10, column 7.
    '
        '}'
        '}'
        'x'
        '&quot;'
        '}'
        ' '
        '='
        ' '
        '1'
        ';'
        '
        '
        '$'
        '{'
        '&quot;'
        'x'
        '${'
        '$'
        '{'
        '&quot;'
        'x'
        '$x'
        '-&gt;'
        '$'
        '$'
        '$x0xx'
        '&quot;'
        '}'
        '}'
        'x'
        '&quot;'
        '}'
        ' '
        '='
        ' '
        '1'
        ';'
        '
      '
        '}'
        ' 
    '
        '}'
        '
    
    '
        '?&gt;'
    Misc/locale.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string(1) "C"
    double(1.54)
    double(Infinity)
    654564.145400
    Sat Saturday Apr April
    --------------
    string(19) "Danish_Denmark.1252"
    double(1.54)
    double(Infinity)
    654564,145400
    lo lordag apr april
    --------------
    string(25) "Czech_Czech Republic.1250"
    double(1.54)
    double(Infinity)
    654564,145400
    so sobota IV duben
    --------------
    string(1) "C"
    float(1.54)
    float(Infinity)
    654564.145400
    Sat Saturday Apr April
    --------------
    string(19) "Danish_Denmark.1252"
    float(1.54)
    float(Infinity)
    654564,145400
    lo lordag apr april
    --------------
    string(25) "Czech_Czech Republic.1250"
    float(1.54)
    float(Infinity)
    654564,145400
    so sobota 4 duben
    --------------
    Misc/output2.php: SUCCEEDED
    Misc/parse_url%20%2327377.php: SUCCEEDED
    Misc/stack_trace.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    (
      [0] => array
      (
        [line] => 6
        [column] => 3
        [file] => stack_trace.inc
        [function] => j
      )
      [1] => array
      (
        [line] => 4
        [column] => 3
        [file] => __input.txt inside eval (on line 11, column 1)
        [function] => i
      )
      [2] => array
      (
        [line] => 4
        [column] => 27
        [file] => __input.txt
        [function] => h
      )
      [3] => array
      (
        [line] => 4
        [column] => 27
        [file] => __input.txt
        [function] => array_map
      )
      [4] => array
      (
        [line] => 18
        [column] => 1
        [file] => __input.txt
        [function] => InlinedLambda
      )
      [5] => array
      (
        [line] => 18
        [column] => 1
        [file] => __input.txt
        [function] => f
      )
    )
    Array
    (
        [0] => Array
        (
            [line] => 6
            [column] => 3
            [file] => stack_trace.inc
            [function] => j
        )
    
        [1] => Array
        (
            [line] => 6
            [column] => 3
            [file] => __input.txt
            [function] => i
        )
    
        [2] => Array
        (
            [line] => 6
            [column] => 3
            [file] => __input.txt
            [function] => array_map
        )
    
        [3] => Array
        (
            [line] => 18
            [column] => 1
            [file] => __input.txt
            [function] => f
        )
    
        [4] => Array
        (
            [file] => 
            [function] => <Main>
        )
    
    )
    Misc/str_getcsv%20%2326691.php: SUCCEEDED
    Misc/tokens.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    T_REQUIRE_ONCE = 258,
    T_REQUIRE = 259,
    T_EVAL = 260,
    T_INCLUDE_ONCE = 261,
    T_INCLUDE = 262,
    T_LOGICAL_OR = 263,
    T_LOGICAL_XOR = 264,
    T_LOGICAL_AND = 265,
    T_PRINT = 266,
    T_SR_EQUAL = 267,
    T_SL_EQUAL = 268,
    T_XOR_EQUAL = 269,
    T_OR_EQUAL = 270,
    T_AND_EQUAL = 271,
    T_MOD_EQUAL = 272,
    T_CONCAT_EQUAL = 273,
    T_DIV_EQUAL = 274,
    T_MUL_EQUAL = 275,
    T_MINUS_EQUAL = 276,
    T_PLUS_EQUAL = 277,
    T_BOOLEAN_OR = 278,
    T_BOOLEAN_AND = 279,
    T_IS_NOT_IDENTICAL = 280,
    T_IS_IDENTICAL = 281,
    T_IS_NOT_EQUAL = 282,
    T_IS_EQUAL = 283,
    T_IS_GREATER_OR_EQUAL = 284,
    T_IS_SMALLER_OR_EQUAL = 285,
    T_SR = 286,
    T_SL = 287,
    T_INSTANCEOF = 288,
    T_UNSET_CAST = 289,
    T_BOOL_CAST = 290,
    T_OBJECT_CAST = 291,
    T_ARRAY_CAST = 292,
    T_STRING_CAST = 293,
    T_DOUBLE_CAST = 294,
    T_INT_CAST = 295,
    T_DEC = 296,
    T_INC = 297,
    T_CLONE = 298,
    T_NEW = 299,
    T_EXIT = 300,
    T_IF = 301,
    T_ELSEIF = 302,
    T_ELSE = 303,
    T_ENDIF = 304,
    T_LNUMBER = 305,
    T_DNUMBER = 306,
    T_STRING = 307,
    T_STRING_VARNAME = 308,
    T_VARIABLE = 309,
    T_NUM_STRING = 310,
    T_INLINE_HTML = 311,
    T_CHARACTER = 312,
    T_BAD_CHARACTER = 313,
    T_ENCAPSED_AND_WHITESPACE = 314,
    T_CONSTANT_ENCAPSED_STRING = 315,
    T_ECHO = 316,
    T_DO = 317,
    T_WHILE = 318,
    T_ENDWHILE = 319,
    T_FOR = 320,
    T_ENDFOR = 321,
    T_FOREACH = 322,
    T_ENDFOREACH = 323,
    T_DECLARE = 324,
    T_ENDDECLARE = 325,
    T_AS = 326,
    T_SWITCH = 327,
    T_ENDSWITCH = 328,
    T_CASE = 329,
    T_DEFAULT = 330,
    T_BREAK = 331,
    T_CONTINUE = 332,
    T_GOTO = 333,
    T_FUNCTION = 334,
    T_CONST = 335,
    T_RETURN = 336,
    T_TRY = 337,
    T_CATCH = 338,
    T_THROW = 339,
    T_USE = 340,
    T_GLOBAL = 341,
    T_PUBLIC = 342,
    T_PROTECTED = 343,
    T_PRIVATE = 344,
    T_FINAL = 345,
    T_ABSTRACT = 346,
    T_STATIC = 347,
    T_VAR = 348,
    T_UNSET = 349,
    T_ISSET = 350,
    T_EMPTY = 351,
    T_HALT_COMPILER = 352,
    T_CLASS = 353,
    T_INTERFACE = 354,
    T_EXTENDS = 355,
    T_IMPLEMENTS = 356,
    T_OBJECT_OPERATOR = 357,
    T_DOUBLE_ARROW = 358,
    T_LIST = 359,
    T_ARRAY = 360,
    T_CLASS_C = 361,
    T_METHOD_C = 362,
    T_FUNC_C = 363,
    T_LINE = 364,
    T_FILE = 365,
    T_COMMENT = 366,
    T_DOC_COMMENT = 367,
    T_OPEN_TAG = 368,
    T_OPEN_TAG_WITH_ECHO = 369,
    T_CLOSE_TAG = 370,
    T_WHITESPACE = 371,
    T_START_HEREDOC = 372,
    T_END_HEREDOC = 373,
    T_DOLLAR_OPEN_CURLY_BRACES = 374,
    T_CURLY_OPEN = 375,
    T_PAAMAYIM_NEKUDOTAYIM = 376,
    T_DOUBLE_COLON = 376,
    T_NAMESPACE = 377,
    T_NS_C = 378,
    T_DIR = 379,
    T_NS_SEPARATOR = 380,
    T_INCLUDE = 129,
    T_INCLUDE_ONCE = 130,
    T_EVAL = 131,
    T_REQUIRE = 132,
    T_REQUIRE_ONCE = 133,
    T_LOGICAL_OR = 136,
    T_LOGICAL_XOR = 137,
    T_LOGICAL_AND = 138,
    T_PRINT = 139,
    T_PLUS_EQUAL = 140,
    T_MINUS_EQUAL = 141,
    T_MUL_EQUAL = 142,
    T_DIV_EQUAL = 143,
    T_CONCAT_EQUAL = 144,
    T_MOD_EQUAL = 145,
    T_AND_EQUAL = 146,
    T_OR_EQUAL = 147,
    T_XOR_EQUAL = 148,
    T_SL_EQUAL = 149,
    T_SR_EQUAL = 150,
    T_BOOLEAN_OR = 151,
    T_BOOLEAN_AND = 152,
    T_IS_EQUAL = 153,
    T_IS_NOT_EQUAL = 154,
    T_IS_IDENTICAL = 155,
    T_IS_NOT_IDENTICAL = 156,
    T_IS_SMALLER_OR_EQUAL = 157,
    T_IS_GREATER_OR_EQUAL = 158,
    T_SL = 159,
    T_SR = 160,
    T_INC = 161,
    T_DEC = 162,
    T_NEW = 164,
    T_INSTANCEOF = 165,
    T_CLONE = 167,
    T_LNUMBER = 168,
    T_DNUMBER = 170,
    T_STRING = 171,
    T_STRING_VARNAME = 172,
    T_VARIABLE = 173,
    T_NUM_STRING = 174,
    T_INLINE_HTML = 175,
    T_CHARACTER = 176,
    T_BAD_CHARACTER = 177,
    T_ENCAPSED_AND_WHITESPACE = 178,
    T_CONSTANT_ENCAPSED_STRING = 179,
    T_EXIT = 180,
    T_IF = 181,
    T_ELSEIF = 182,
    T_ELSE = 183,
    T_ENDIF = 184,
    T_ECHO = 185,
    T_DO = 186,
    T_WHILE = 187,
    T_ENDWHILE = 188,
    T_FOR = 189,
    T_ENDFOR = 190,
    T_FOREACH = 191,
    T_ENDFOREACH = 192,
    T_AS = 193,
    T_SWITCH = 194,
    T_ENDSWITCH = 195,
    T_CASE = 196,
    T_DEFAULT = 197,
    T_BREAK = 198,
    T_CONTINUE = 199,
    T_FUNCTION = 200,
    T_CONST = 201,
    T_RETURN = 202,
    T_GLOBAL = 203,
    T_STATIC = 204,
    T_VAR = 205,
    T_UNSET = 206,
    T_ISSET = 207,
    T_EMPTY = 208,
    T_CLASS = 209,
    T_EXTENDS = 210,
    T_OBJECT_OPERATOR = 211,
    T_DOUBLE_ARROW = 212,
    T_LIST = 213,
    T_ARRAY = 214,
    T_CLASS_C = 215,
    T_METHOD_C = 216,
    T_FUNC_C = 217,
    T_LINE = 218,
    T_FILE = 219,
    T_COMMENT = 221,
    T_DOC_COMMENT = 222,
    T_OPEN_TAG = 227,
    T_OPEN_TAG_WITH_ECHO = 228,
    T_CLOSE_TAG = 229,
    T_WHITESPACE = 230,
    T_START_HEREDOC = 231,
    T_END_HEREDOC = 232,
    T_DOLLAR_OPEN_CURLY_BRACES = 233,
    T_CURLY_OPEN = 234,
    T_DOUBLE_COLON = 235,
    T_PAAMAYIM_NEKUDOTAYIM = 235,
    T_TRY = 237,
    T_CATCH = 238,
    T_THROW = 239,
    T_INTERFACE = 240,
    T_IMPLEMENTS = 241,
    T_ABSTRACT = 242,
    T_FINAL = 243,
    T_PRIVATE = 244,
    T_PROTECTED = 245,
    T_PUBLIC = 246,
    T_BOOL_CAST = 286,
    T_INT_CAST = 289,
    T_DOUBLE_CAST = 295,
    T_STRING_CAST = 298,
    T_ARRAY_CAST = 301,
    T_OBJECT_CAST = 302,
    T_UNSET_CAST = 303,
    T_HALT_COMPILER = 351,
    Misc/user_error_handlers.php: SUCCEEDED
    Objects/accessing%20property%20line%20number%20%2326052.php: SUCCEEDED
    Objects/conditional1.php: SUCCEEDED
    Objects/conditional2.php: SUCCEEDED
    Objects/conditional_base_class.php: SUCCEEDED
    Objects/constant_test.php: SUCCEEDED
    Objects/evaled_parent.php: SUCCEEDED
    Objects/getter_setter_bug28444.php: SUCCEEDED
    Objects/instanceof.php: SUCCEEDED
    Objects/new_via_unknown_ctor.php: SUCCEEDED
    Objects/object_creation_test.php: SUCCEEDED
    Objects/overrides%20%231285.php: SUCCEEDED
    Objects/static_field_test.php: SUCCEEDED
    Objects/static_inheritence.php: SUCCEEDED
    Objects/static_method_test.php: SUCCEEDED
    Objects/static_object_vars.php: SUCCEEDED
    Objects/sys_class_const.php: SUCCEEDED
    Objects/this2.php: SUCCEEDED
    RegEx/backreferences.php: SUCCEEDED
    RegEx/dolar_escape.php: SUCCEEDED
    RegEx/ereg.php: SUCCEEDED
    RegEx/namedbackref.php: SUCCEEDED
    RegEx/namedgroups.php: SUCCEEDED
    RegEx/preg_match_unmatched_groups.php: SUCCEEDED
    RegEx/preg_replace_eval.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ab"01300 as"00da sd"0asdsa das asd 11asd a1sd a
    ab"01300 as"00da sd"0(aasdasdkjask,$a,\,\l,a,s,d,a,s,d,k,j,a,s,${120})(ldjaklsdjalk,$l,\,\l,d,j,a,k,l,s,d,j,a,l,${120})djdsa das asd 11asd a1sd a
    ab"01300 as"00da sd"0asdsa das asd 11asd a1sd a
    ab"01300 as"00da sd"0(aasdasdkjask,$a,\,\l,a,s,d,a,s,d,k,j,,,${120})(ldjaklsdjalk,$l,\,\l,d,j,a,k,l,s,d,j,,,${120})djdsa das asd 11asd a1sd a
    RegEx/regexp-sql.php: SUCCEEDED
    RegEx/regexp_smiles.php: SUCCEEDED
    RegEx/Perl/cache.php: SUCCEEDED
    RegEx/Perl/grep1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      [3] => string(3) "1.5"
      [6] => string(5) "58.54"
    }
    Notice: preg_grep(): Array to string conversion in D:\Documents\Projects\Phalanger\Main\Testing\Tests\RegEx\Perl\__input.txt at expression on line 5, column 1.
    array(2) {
      [3]=>
      string(3) "1.5"
      [6]=>
      string(5) "58.54"
    }
    RegEx/Perl/grep2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Food  array
    (
      [0] => apple
      [1] => banana
      [2] => squid
      [3] => pear
    )
    Fruit array
    (
      [0] => apple
      [1] => banana
      [3] => pear
    )
    Food  Array
    (
        [0] => apple
        [1] => banana
        [2] => squid
        [3] => pear
    )
    Fruit Array
    (
        [0] => apple
        [1] => banana
        [3] => pear
    )
    RegEx/Perl/match1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array [empty]
    array
    (
      [0] => array
      (
        [0] => def
        [1] => 3
      )
    )
    Array
    (
    )
    Array
    (
        [0] => Array
        (
            [0] => def
            [1] => 3
        )
    
    )
    RegEx/Perl/match10.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    (
      [0] => 1231
      [1] => 1
      [2] => 23
      [3] => 1
    )
    Array
    (
        [0] => 1231
        [1] => 1
        [2] => 23
        [3] => 1
    )
    RegEx/Perl/match2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    (
      [0] => array
      (
        [0] => def
        [1] => 0
      )
    )
    Array
    (
        [0] => Array
        (
            [0] => def
            [1] => 0
        )
    
    )
    RegEx/Perl/match3.php: SUCCEEDED
    RegEx/Perl/match4.php: SUCCEEDED
    RegEx/Perl/match5.php: SUCCEEDED
    RegEx/Perl/match6.php: SUCCEEDED
    RegEx/Perl/match7.php: SUCCEEDED
    RegEx/Perl/match8.php: SUCCEEDED
    RegEx/Perl/match9.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    (
      [0] => 209.6.145.47 - - [22/Nov/2003:19:02:30 -0500] "GET /dir/doc.htm HTTP/1.0" 200 6776 "http://search.yahoo.com/search?p=key+words=UTF-8" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)"
      [1] => 209.6.145.47
      [2] => -
      [3] => -
      [4] => 22/Nov/2003:19:02:30 -0500
      [5] => GET
      [6] => /dir/doc.htm
      [7] => HTTP
      [8] => 1.0
      [9] => 200
      [10] => 6776
      [11] => "http://search.yahoo.com/search?p=key+words=UTF-8"
      [12] => "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)"
    )
    Array
    (
        [0] => 209.6.145.47 - - [22/Nov/2003:19:02:30 -0500] "GET /dir/doc.htm HTTP/1.0" 200 6776 "http://search.yahoo.com/search?p=key+words=UTF-8" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)"
        [1] => 209.6.145.47
        [2] => -
        [3] => -
        [4] => 22/Nov/2003:19:02:30 -0500
        [5] => GET
        [6] => /dir/doc.htm
        [7] => HTTP
        [8] => 1.0
        [9] => 200
        [10] => 6776
        [11] => "http://search.yahoo.com/search?p=key+words=UTF-8"
        [12] => "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)"
    )
    RegEx/Perl/match_all1.php: SUCCEEDED
    RegEx/Perl/match_all2.php: SUCCEEDED
    RegEx/Perl/match_all3.php: SUCCEEDED
    RegEx/Perl/match_all4.php: SUCCEEDED
    RegEx/Perl/match_dollar.php: SUCCEEDED
    RegEx/Perl/overflow.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string("kfkaj +j k45´┐Ż´┐Ż´┐Ż´┐Ż´┐Ż3#$%^&kjakfjkaj|kfj")
    string("kfkaj +j k45�����3#$%^&kjakfjkaj|kfj")
    RegEx/Perl/quote1.php: SUCCEEDED
    RegEx/Perl/quote2.php: SUCCEEDED
    RegEx/Perl/quote3.php: SUCCEEDED
    RegEx/Perl/replace1.php: SUCCEEDED
    RegEx/Perl/replace2.php: SUCCEEDED
    RegEx/Perl/replace3.php: SUCCEEDED
    RegEx/Perl/replace4.php: SUCCEEDED
    RegEx/Perl/replace5.php: SUCCEEDED
    RegEx/Perl/replace6.php: SUCCEEDED
    RegEx/Perl/replace7.php: SUCCEEDED
    RegEx/Perl/replace8.php: SUCCEEDED
    RegEx/Perl/replace9.php: SUCCEEDED
    RegEx/Perl/replace_callback1.php: SUCCEEDED
    RegEx/Perl/replace_callback2.php: SUCCEEDED
    RegEx/Perl/split1.php: SUCCEEDED
    RegEx/Perl/split2.php: SUCCEEDED
    RegEx/Perl/split3.php: SUCCEEDED
    RegEx/Perl/split4.php: SUCCEEDED
    RegEx/Perl/split5.php: SUCCEEDED
    RegEx/Perl/split6.php: SUCCEEDED
    RegEx/Perl/ungreedy.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    aaa
    a
    aaa
    
    a
    aa
    aaa
    aa
    aaa
    aaa
    a
    aaa
    a
    a
    aa
    aaa
    aa
    aaa
    RegEx/Perl/unsuccessful-preg_match_all.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0
    4
    1
    4
    0
    4
    1
    7
    RegEx/Perl/withoutdelimiters.php: SUCCEEDED
    SPL/ArrayAccess_offsetExists.php: SUCCEEDED
    SPL/Autoload_ctor.php: SUCCEEDED
    SPL/Autoload_extends.php: SUCCEEDED
    SPL/exceptions.php: SUCCEEDED
    Strings/addcslashes.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    \f\o\o\[ \]
    Issues a Warning:
    // echo addcslashes("zoo['.']", 'z..A');
    // output:  \zoo['\.']
    Warning: String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 4, column 1.
    
    Issues a Warning:
    // echo addcslashes("zoo['.']", 'z..A');
    // output:  \zoo['\.']
    Strings/addslashes.php: SUCCEEDED
    Strings/chunk_split.php: SUCCEEDED
    Strings/concat.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string(2) "ab"
    string(2) "ab"
    string(2) "ab"
    string(2) "ab"
    string(2) "ab"
    string(2) "aB"
    string(2) "Ab"
    string(2) "AB"
    string(2) "ab"
    string(2) "a1"
    string(2) "1b"
    string(2) "11"
    string(2) "ab"
    string(2) "aB"
    string(2) "Ab"
    string[binary](2) "\x41\x42"
    string(2) "ab"
    string(2) "ab"
    string(2) "ab"
    string(2) "ab"
    string(2) "ab"
    string(2) "aB"
    string(2) "Ab"
    string(2) "AB"
    string(2) "ab"
    string(2) "a1"
    string(2) "1b"
    string(2) "11"
    string(2) "ab"
    string[binary](2) "aB"
    string[binary](2) "Ab"
    string[binary](2) "AB"
    Strings/count_chars.php: SUCCEEDED
    Strings/crc32.php: SUCCEEDED
    Strings/crypt.php: SUCCEEDED
    Strings/crypt2.php: SUCCEEDED
    Strings/echo.php: SUCCEEDED
    Strings/explode.php: SUCCEEDED
    Strings/get_html_translation_table.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <hr>[&] => &amp;
    [>] => &gt;
    [<] => &lt;
    ["] => &quot;
    <hr>Hallo &amp; &lt;Frau&gt; &amp; Kr&iuml;&iquest;&frac12;mer
    <hr>[&] => &amp;
    [>] => &gt;
    [<] => &lt;
    ["] => &quot;
    <hr>Hallo &amp; &lt;Frau&gt; &amp; Kr�mer
    Strings/mb_strlen.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Call to undefined function mb_strlen() in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 4
    Error: Call to undefined function: 'mb_strlen' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 4, column 1.
    Strings/nl2br.php: SUCCEEDED
    Strings/pack.php: SUCCEEDED
    Strings/pos.php: SUCCEEDED
    Strings/runtime-quotes.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    fread = (x''y"z)
    fgets = (x''y"z)
    file[0] = (x''y"z)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    
    Warning: fopen(runtime-quotes2.txt): failed to open stream: Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 33
    
    Warning: fwrite() expects parameter 1 to be resource, boolean given in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 35
    fwrite = ()
    
    Warning: fputs() expects parameter 1 to be resource, boolean given in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 38
    fputs = ()
    
    Warning: fclose() expects parameter 1 to be resource, boolean given in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 41
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (x'y"z)
    fgets = (x'y"z)
    file[0] = (x'y"z)
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (a\'b"\\ca\)
    fgets = (a\'b"\\ca\'b"\\c)
    file[0] = (a\'b"\\ca\'b"\\c)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    e'e
    e''e
    e'e
    e'e
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    e'e
    e'e
    e'e
    e'e
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    fread = (x''y"z)
    fgets = (x''y"z)
    file[0] = (x''y"z)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    
    Warning: fopen(): Unable to access (D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\runtime-quotes2.txt): Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 33, column 3.
    
    Warning: Cannot convert boolean to resource implicitly in a call to function fwrite() in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 35, column 3.
    fwrite = ()
    
    Warning: Cannot convert boolean to resource implicitly in a call to function fputs() in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 38, column 3.
    fputs = ()
    
    Warning: Cannot convert boolean to resource implicitly in a call to function fclose() in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 41, column 3.
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (x'y"z)
    fgets = (x'y"z)
    file[0] = (x'y"z)
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (a\'b"\\ca\)
    fgets = (a\'b"\\ca\'b"\\c)
    file[0] = (a\'b"\\ca\'b"\\c)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    e'e
    e''e
    e'e
    e'e
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    e'e
    e'e
    e'e
    e'e
    Strings/sprintf.php: SUCCEEDED
    Strings/sprintf2.php: SUCCEEDED
    Strings/strtr.php: SUCCEEDED
    Strings/str_ireplace.php: SUCCEEDED
    Strings/str_replace.php: SUCCEEDED
    Strings/str_word_count.php: SUCCEEDED
    Strings/substr_operations.php: SUCCEEDED
    Strings/wordwrap.php: SUCCEEDED
    Variables/advanced_serialize.php: SUCCEEDED
    Variables/arguments.php: SUCCEEDED
    Variables/bitwise.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "00"
    string(2) "31"
    string(2) "31"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    0
    0
    0
    5
    0
    5
    40
    5
    45
    string(48) "000000000000000000000000000000000000000000000000"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(14) "31323331323331"
    string(2) "30"
    string(14) "31323331323331"
    string(16) "3635343635343536"
    string(2) "30"
    string(16) "3635343635343536"
    string(14) "337a5e8be43d7a"
    string(14) "00002130120201"
    string(48) "337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42"
    string(16) "347d598ce33a7e77"
    string(16) "0200243214040100"
    string(48) "367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42"
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "00"
    string(2) "31"
    string(2) "31"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    0
    -9223372036854775808
    -9223372036854775808
    -9223372036854775803
    0
    -9223372036854775803
    40
    5
    45
    string(48) "000000000000000000000000000000000000000000000000"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(14) "31323331323331"
    string(2) "30"
    string(14) "31323331323331"
    string(16) "3635343635343536"
    string(2) "30"
    string(16) "3635343635343536"
    string(14) "337a5e8be43d7a"
    string(14) "00002130120201"
    string(48) "337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42"
    string(16) "347d598ce33a7e77"
    string(16) "0200243214040100"
    string(48) "367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42"
    Variables/comparisons.php: SUCCEEDED
    Variables/constant.php: SUCCEEDED
    Variables/extract.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    EXTR_PREFIX_ALL
    integer(4)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
      'prefix_non_existent' => integer(1)
    }
    <hr>EXTR_PREFIX_INVALID
    integer(5)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => integer(2)
      'non_existent' => integer(1)
      'prefix_' => integer(1)
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => 'hello'
    }
    <hr>EXTR_PREFIX_SAME
    integer(3)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'non_existent' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>EXTR_PREFIX_IF_EXISTS
    integer(3)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>
    EXTR_PREFIX_ALL
    integer(4)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
      'prefix_non_existent' => integer(1)
    }
    <hr>EXTR_PREFIX_INVALID
    integer(2)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_ad' => integer(2)
      'prefix_non_existent' => integer(1)
    }
    <hr>EXTR_PREFIX_SAME
    integer(4)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'non_existent' => integer(1)
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>EXTR_PREFIX_IF_EXISTS
    integer(3)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>
    Variables/func_get_args.php: SUCCEEDED
    Variables/is_number.php: SUCCEEDED
    Variables/serialize.php: SUCCEEDED
    Variables/unserialize_objects.php: SUCCEEDED
    Variables/var_dumping.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Array
    (
        [0] => 1
        [1] => 
        [2] => 1
        [3] => 1.2
        [4] => 
        [5] => asdas
        [6] => Array
            (
                [0] => 1
            )
    
        [7] => stdClass Object
            (
            )
    
        [8] => Resource id #1
    )
    array(9) {
      [0]=>
      bool(true)
      [1]=>
      bool(false)
      [2]=>
      int(1)
      [3]=>
      float(1.2)
      [4]=>
      NULL
      [5]=>
      string(5) "asdas"
      [6]=>
      array(1) {
        [0]=>
        int(1)
      }
      [7]=>
      object(stdClass)#1 (0) {
      }
      [8]=>
      resource(1) of type (stream)
    }
    array (
      0 => true,
      1 => false,
      2 => 1,
      3 => 1.2,
      4 => NULL,
      5 => 'asdas',
      6 => 
      array (
        0 => 1,
      ),
      7 => 
      stdClass::__set_state(array(
      )),
      8 => NULL,
    )
    Array
    (
        [0] => 1
        [1] => 
        [2] => 1
        [3] => 1.2
        [4] => 
        [5] => asdas
        [6] => Array
        (
            [0] => 1
        )
    
        [7] => stdClass Object
        (
        )
    
        [8] => resource id #4
    
    )
    array(9) {
      [0]=>
      bool(true)
      [1]=>
      bool(false)
      [2]=>
      int(1)
      [3]=>
      float(1.2)
      [4]=>
      NULL
      [5]=>
      string(5) "asdas"
      [6]=>
      array(1) {
        [0]=>
        int(1)
      }
      [7]=>
      object(stdClass)(0) {
      }
      [8]=>
      resource(4) of type (stream)
    }
    array
    (
      '0' => true,
      '1' => false,
      '2' => 1,
      '3' => 1.2,
      '4' => NULL,
      '5' => 'asdas',
      '6' => array
      (
        '0' => 1
      ),
      '7' => class stdClass
      {
    
      },
      '8' => NULL
    )
    Xml/005.php: SUCCEEDED
    Xml/006.php: SUCCEEDED
    Xml/007.php: SUCCEEDED
    Xml/008.php: SUCCEEDED
    Xml/009.php: SUCCEEDED
    Xml/011.php: SUCCEEDED
    Xml/013.php: SUCCEEDED
    Xml/017.php: SUCCEEDED
    Xml/018.php: SUCCEEDED
    Xml/019.php: SUCCEEDED
    Xml/020.php: SUCCEEDED
    Xml/021.php: SUCCEEDED
    Xml/025.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
      'foo' => 'foobar'
    }
    array
    {
      'html' => 'http://www.w3.org/1999/xhtml'
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
    }
    array
    {
      'html' => 'http://www.w3.org/1999/xhtml'
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'foo' => 'foobar'
      'baz' => 'foobarbaz'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
    }
    array
    {
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
      'baz' => 'foobarbaz'
      'foo' => 'foobar'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
      'baz' => 'foobarbaz'
      'foo' => 'foobar'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
    }
    array
    {
    }
    Xml/026.php: SUCCEEDED
    Xml/027.php: SUCCEEDED
    Xml/028.php: SUCCEEDED
    Xml/029.php: SUCCEEDED
    Xml/030.php: SUCCEEDED
    Xml/032.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    FALSE
    FALSE
    FALSE
    TRUE
    TRUE
    TRUE
    Xml/033.php: SUCCEEDED
    Xml/bug26384.php: SUCCEEDED
    Xml/bug28721.php: SUCCEEDED
    Xml/bug28817.php: SUCCEEDED
    Xml/bug32615.php: SUCCEEDED
    Xml/bug33853.php: SUCCEEDED
    Xml/bug34276.php: SUCCEEDED
    Xml/bug35342.php: SUCCEEDED
    Xml/bug36756.php: SUCCEEDED
    Xml/bug37277.php: SUCCEEDED
    Xml/dom002.php: SUCCEEDED
    Xml/dom003.php: SUCCEEDED
    Xml/dom006.php: SUCCEEDED
    Xml/dom007.php: SUCCEEDED
    Xml/dom_set_attr_node.php: SUCCEEDED
    Xml/xmlhandler.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test begins
    <br/>
    <br/>test begins
    <br/>empty begins
    <br/>empty ends
    <br/>nocontent begins
    <br/>nocontent ends
    <br/>content begins
    <br/>empty begins
    <br/>empty ends
    <br/>empty begins
    <br/>empty ends
    <br/>content ends
    <br/>empty begins
    <br/>empty ends
    <br/>empty begins
    <br/>empty ends
    <br/>test ends
    <br/>Test ends
    <br/>
    <br/>
    Test begins
    <br/>
    <br/>
    Error: Call to undefined function: 'xml_parser_create' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Xml\__input.txt at expression on line 18, column 3.
    Xml/xslt001.php: SUCCEEDED
    Xml/xslt002.php: SUCCEEDED
    Xml/xslt003.php: SUCCEEDED
    Xml/xslt004.php: SUCCEEDED
    Xml/xslt005.php: SUCCEEDED
    Xml/xslt006.php: SUCCEEDED
    Xml/xslt007.php: SUCCEEDED
    Xml/xslt010.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test 10: EXSLT Support
      
      
      Test Date : 0001-12-31Z
        year                 : 1
        leap-year            : false
        month-in-year        : 12
        month-name           : December
        month-abbreviation   : Dec
        week-in-year         : 1
        day-in-year          : 365
        day-in-month         : 31
        day-of-week-in-month : 5
        day-in-week          : 2
        day-name             : Monday
        day-abbreviation     : Mon
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : 3000-01-31
        year                 : 3000
        leap-year            : false
        month-in-year        : 1
        month-name           : January
        month-abbreviation   : Jan
        week-in-year         : 5
        day-in-year          : 31
        day-in-month         : 31
        day-of-week-in-month : 5
        day-in-week          : 6
        day-name             : Friday
        day-abbreviation     : Fri
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : 2000-02-29
        year                 : 2000
        leap-year            : true
        month-in-year        : 2
        month-name           : February
        month-abbreviation   : Feb
        week-in-year         : 9
        day-in-year          : 60
        day-in-month         : 29
        day-of-week-in-month : 5
        day-in-week          : 3
        day-name             : Tuesday
        day-abbreviation     : Tue
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : 9990001-12-31Z
        year                 : 9990001
        leap-year            : false
        month-in-year        : 12
        month-name           : December
        month-abbreviation   : Dec
        week-in-year         : 1
        day-in-year          : 365
        day-in-month         : 31
        day-of-week-in-month : 5
        day-in-week          : 2
        day-name             : Monday
        day-abbreviation     : Mon
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : -0004-02-29
        year                 : -4
        leap-year            : true
        month-in-year        : 2
        month-name           : February
        month-abbreviation   : Feb
        week-in-year         : 9
        day-in-year          : 60
        day-in-month         : 29
        day-of-week-in-month : 5
        day-in-week          : 1
        day-name             : Sunday
        day-abbreviation     : Sun
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
    Test 10: EXSLT Support
    Warning: Cannot find a script or an extension object associated with namespace 'http://exslt.org/dates-and-times'. in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Xml\__input.txt at expression on line 14, column 3.
    
    Warning: Illegal string offset '-1' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Phalanger.inc at expression on line 7, column 6.
    Xml/xslt011.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test 11: php:function Support
    
    Warning: XSLTProcessor::transformToXml(): A PHP Object cannot be converted to a XPath-string in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Xml\__input.txt on line 18
    <?xml version="1.0"?>
    foobar - secondArg
    foobar - 
    this is from an external DomDocument
    from the Input Document
    static
    Test 11: php:function Support
    <?xml version="1.0" encoding="utf-8"?>foobar - secondArg
    foobar - 
    this is from an external DomDocument
    from the Input Document
    static
    not a DomNode object
    Xml/xslt012.php: SUCCEEDED
    ================================================ FILE: Testing/Tests/TestLogs/TestLog (1594).htm ================================================ PHP.NET Compiler test log

    PHP.NET Compiler test log

    (90%) 826 succeeded, 95 failed
    Test ResultCompiler error outputExpected test result
    @PHP/classes/array_access_001.php: SUCCEEDED
    @PHP/classes/array_access_002.php: SUCCEEDED
    @PHP/classes/array_access_003.php: SUCCEEDED
    @PHP/classes/array_access_004.php: SUCCEEDED
    @PHP/classes/array_access_005.php: SUCCEEDED
    @PHP/classes/array_access_006.php: SUCCEEDED
    @PHP/classes/array_access_007.php: SUCCEEDED
    @PHP/classes/array_access_008.php: SUCCEEDED
    @PHP/classes/array_access_009.php: SUCCEEDED
    @PHP/classes/array_access_010.php: SUCCEEDED
    @PHP/classes/array_access_011.php: SUCCEEDED
    @PHP/classes/array_access_013.php: SUCCEEDED
    @PHP/classes/assign_op_property_001.php: SUCCEEDED
    @PHP/classes/autoload_001.php: SUCCEEDED
    @PHP/classes/autoload_002.php: SUCCEEDED
    @PHP/classes/autoload_003.php: SUCCEEDED
    @PHP/classes/autoload_005.php: SUCCEEDED
    @PHP/classes/autoload_006.php: SUCCEEDED
    @PHP/classes/bug23951.php: SUCCEEDED
    @PHP/classes/bug24399.php: SUCCEEDED
    @PHP/classes/bug24445.php: SUCCEEDED
    @PHP/classes/bug26737.php: SUCCEEDED
    @PHP/classes/bug27468.php: SUCCEEDED
    @PHP/classes/bug27504.php: SUCCEEDED
    @PHP/classes/class_example.php: SUCCEEDED
    @PHP/classes/class_stdclass.php: SUCCEEDED
    @PHP/classes/clone_001.php: SUCCEEDED
    @PHP/classes/clone_002.php: SUCCEEDED
    @PHP/classes/clone_003.php: SUCCEEDED
    @PHP/classes/clone_004.php: SUCCEEDED
    @PHP/classes/clone_006.php: SUCCEEDED
    @PHP/classes/constants_scope_001.php: SUCCEEDED
    @PHP/classes/ctor_dtor.php: SUCCEEDED
    @PHP/classes/ctor_dtor_inheritance.php: SUCCEEDED
    @PHP/classes/ctor_name_clash.php: SUCCEEDED
    @PHP/classes/dereferencing_001.php: SUCCEEDED
    @PHP/classes/destructor_and_echo.php: SUCCEEDED
    @PHP/classes/destructor_and_references.php: SUCCEEDED
    @PHP/classes/destructor_inheritance.php: SUCCEEDED
    @PHP/classes/destructor_visibility_003.php: SUCCEEDED
    @PHP/classes/factory_001.php: SUCCEEDED
    @PHP/classes/factory_and_singleton_001.php: SUCCEEDED
    @PHP/classes/factory_and_singleton_002.php: SUCCEEDED
    @PHP/classes/final.php: SUCCEEDED
    @PHP/classes/incdec_property_001.php: SUCCEEDED
    @PHP/classes/incdec_property_002.php: SUCCEEDED
    @PHP/classes/incdec_property_003.php: SUCCEEDED
    @PHP/classes/incdec_property_004.php: SUCCEEDED
    @PHP/classes/inheritance.php: SUCCEEDED
    @PHP/classes/inheritance_002.php: SUCCEEDED
    @PHP/classes/interfaces_001.php: SUCCEEDED
    @PHP/classes/interface_construct.php: SUCCEEDED
    @PHP/classes/interface_doubled.php: SUCCEEDED
    @PHP/classes/interface_implemented.php: SUCCEEDED
    @PHP/classes/iterators_001.php: SUCCEEDED
    @PHP/classes/iterators_002.php: SUCCEEDED
    @PHP/classes/iterators_003.php: SUCCEEDED
    @PHP/classes/iterators_004.php: SUCCEEDED
    @PHP/classes/iterators_006.php: SUCCEEDED
    @PHP/classes/iterators_007.php: SUCCEEDED
    @PHP/classes/object_reference_001.php: SUCCEEDED
    @PHP/classes/private_001.php: SUCCEEDED
    @PHP/classes/private_002.php: SUCCEEDED
    @PHP/classes/private_003.php: SUCCEEDED
    @PHP/classes/private_003b.php: SUCCEEDED
    @PHP/classes/private_004.php: SUCCEEDED
    @PHP/classes/private_004b.php: SUCCEEDED
    @PHP/classes/private_005.php: SUCCEEDED
    @PHP/classes/private_005b.php: SUCCEEDED
    @PHP/classes/private_006.php: SUCCEEDED
    @PHP/classes/private_006b.php: SUCCEEDED
    @PHP/classes/private_007.php: SUCCEEDED
    @PHP/classes/private_007b.php: SUCCEEDED
    @PHP/classes/private_members.php: SUCCEEDED
    @PHP/classes/private_redeclare.php: SUCCEEDED
    @PHP/classes/protected_001.php: SUCCEEDED
    @PHP/classes/protected_001b.php: SUCCEEDED
    @PHP/classes/protected_002.php: SUCCEEDED
    @PHP/classes/serialize_001.php: SUCCEEDED
    @PHP/classes/singleton_001.php: SUCCEEDED
    @PHP/classes/static_properties_001.php: SUCCEEDED
    @PHP/classes/type_hinting_001.php: SUCCEEDED
    @PHP/classes/type_hinting_003.php: SUCCEEDED
    @PHP/classes/visibility_000c.php: SUCCEEDED
    @PHP/classes/visibility_001c.php: SUCCEEDED
    @PHP/classes/visibility_002c.php: SUCCEEDED
    @PHP/classes/visibility_003a.php: SUCCEEDED
    @PHP/classes/visibility_003c.php: SUCCEEDED
    @PHP/classes/visibility_004a.php: SUCCEEDED
    @PHP/classes/visibility_004b.php: SUCCEEDED
    @PHP/classes/visibility_004c.php: SUCCEEDED
    @PHP/classes/visibility_005.php: SUCCEEDED
    @PHP/classes/__call_001.php: SUCCEEDED
    @PHP/classes/__set_data_corrupt.php: SUCCEEDED
    @PHP/classes/__set__get_001.php: SUCCEEDED
    @PHP/classes/__set__get_004.php: SUCCEEDED
    @PHP/classes/__set__get_005.php: SUCCEEDED
    @PHP/date/bug17988.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2002-06-25 12:18:48
    2002-06-25 14:18:48
    2002-06-25 13:18:48
    2002-06-25 12:18:48
    2002-06-25 18:18:48
    2002-06-25 14:18:48
    2002-06-25 14:18:48
    2002-06-25 18:18:48
    2002-06-25 10:18:48
    2002-06-25 17:18:48
    2002-06-25 11:18:48
    2002-06-25 17:48:48
    2002-06-25 10:48:48
    2002-06-25 14:18:48
    2002-06-25 14:18:48
    2002-06-25 13:18:48
    2002-06-25 12:18:48
    2002-06-25 18:18:48
    2002-06-25 14:18:48
    2002-06-25 14:18:48
    2002-06-25 18:18:48
    2002-06-25 10:18:48
    2002-06-25 17:18:48
    2002-06-25 11:18:48
    2002-06-25 17:48:48
    2002-06-25 10:48:48
    @PHP/date/bug26317.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2003-11-19 17:20:42
    2003-11-19 17:20:42
    2003-11-19 17:20:42
    2003-11-19 16:20:42
    2003-11-19 16:20:42
    2003-11-19 16:20:42
    @PHP/date/bug26320.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2003-11-19 12:30:42
    2003-11-19 13:30:42
    2003-11-19 12:30:42
    2003-11-19 12:30:42
    @PHP/date/bug28088.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    The following line rightly shows the correct date time:
    04/04/04 2145
    But the following line fails to show the correct date time:
    04/03/04 2245
    The following line rightly shows the correct date time:
    04/04/04 2345
    But the following line fails to show the correct date time:
    04/04/04 0045
    @PHP/date/bug28599.php: SUCCEEDED
    @PHP/date/bug29150.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2005-06-19 22:00:00
    2005-06-20 00:00:00
    @PHP/date/bug29585.php: SUCCEEDED
    @PHP/date/bug29595.php: SUCCEEDED
    @PHP/date/bug33056.php: SUCCEEDED
    @PHP/date/bug33452.php: SUCCEEDED
    @PHP/date/bug33562.php: SUCCEEDED
    @PHP/date/bug33563.php: SUCCEEDED
    @PHP/date/bug33578.php: SUCCEEDED
    @PHP/date/bug33869.php: SUCCEEDED
    @PHP/date/bug34676.php: SUCCEEDED
    @PHP/date/bug34771.php: SUCCEEDED
    @PHP/date/bug35143.php: SUCCEEDED
    @PHP/date/bug35414.php: SUCCEEDED
    @PHP/date/bug35422.php: SUCCEEDED
    @PHP/date/bug35425.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    integer(42)
    integer(1)
    integer(1)
    integer(1)
    integer(1)
    integer(0)
    integer(0)
    integer(1)
    integer(1)
    integer(31)
    integer(1104537661)
    integer(6)
    integer(53)
    integer(5)
    integer(2005)
    integer(0)
    integer(3600)
    integer(292)
    integer(1)
    integer(1)
    integer(1)
    integer(1)
    integer(0)
    integer(0)
    integer(1)
    integer(1)
    integer(31)
    integer(1104559261)
    integer(6)
    integer(53)
    integer(5)
    integer(2005)
    integer(0)
    integer(-18000)
    @PHP/date/bug35456.php: SUCCEEDED
    @PHP/date/bug35624.php: SUCCEEDED
    @PHP/date/bug35630.php: SUCCEEDED
    @PHP/date/bug35699.php: SUCCEEDED
    @PHP/date/bug35705.php: SUCCEEDED
    @PHP/date/bug35885.php: SUCCEEDED
    @PHP/date/bug35887.php: SUCCEEDED
    @PHP/date/date.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    c: 2003-01-23T13:20:59+01:00
    r: Thu, 23 Jan 2003 13:20:59 +0100
    c: 2003-01-23T13:20:59+01:00
    r: Thu, 23 Jan 2003 13:20:59 +0100
    c: 2003-01-23T12:20:59+00:00
    r: Thu, 23 Jan 2003 12:20:59 +0000
    c: 2003-01-23T13:20:59+01:00
    r: Thu, 23 Jan 2003 13:20:59 +0100
    @PHP/date/date_create-1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\date\__input.txt on line 28
    SKIP
    @PHP/date/date_create-2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\date\__input.txt on line 6
    SKIP
    @PHP/date/date_default_timezone_get-3.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Europe/Prague
    America/Chicago
    Europe/Rome
    America/Chicago
    @PHP/date/date_modify-1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\date\__input.txt on line 6
    SKIP
    @PHP/date/date_modify-2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\date\__input.txt on line 6
    SKIP
    @PHP/date/default-timezone-1.php: SUCCEEDED
    @PHP/date/default-timezone-2.php: SUCCEEDED
    @PHP/date/format-negative-timestamp.php: SUCCEEDED
    @PHP/date/strtotime.php: SUCCEEDED
    @PHP/date/timezone-configuration.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    1119125744
    1119125744
    1119125744
    1119125744
    1119129344
    1119125744
    @PHP/doc_examples/test001.php: SUCCEEDED
    @PHP/doc_examples/test002.php: SUCCEEDED
    @PHP/doc_examples/test003.php: SUCCEEDED
    @PHP/doc_examples/test004.php: SUCCEEDED
    @PHP/doc_examples/test005.php: SUCCEEDED
    @PHP/doc_examples/test006.php: SUCCEEDED
    @PHP/doc_examples/test007.php: SUCCEEDED
    @PHP/doc_examples/test008.php: SUCCEEDED
    @PHP/doc_examples/test009.php: SUCCEEDED
    @PHP/doc_examples/test010.php: SUCCEEDED
    @PHP/doc_examples/test011.php: SUCCEEDED
    @PHP/doc_examples/test013.php: SUCCEEDED
    @PHP/doc_examples/test014.php: SUCCEEDED
    @PHP/doc_examples/test015.php: SUCCEEDED
    @PHP/doc_examples/test016.php: SUCCEEDED
    @PHP/doc_examples/test017.php: SUCCEEDED
    @PHP/doc_examples/test018.php: SUCCEEDED
    @PHP/doc_examples/test019.php: SUCCEEDED
    @PHP/doc_examples/test020.php: SUCCEEDED
    @PHP/doc_examples/test021.php: SUCCEEDED
    @PHP/doc_examples/test022.php: SUCCEEDED
    @PHP/doc_examples/test023.php: SUCCEEDED
    @PHP/doc_examples/test024.php: SUCCEEDED
    @PHP/doc_examples/test025.php: SUCCEEDED
    @PHP/doc_examples/test026.php: SUCCEEDED
    @PHP/doc_examples/test027.php: SUCCEEDED
    @PHP/doc_examples/test028.php: SUCCEEDED
    @PHP/doc_examples/test029.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ´┐Żauky
    �auky
    @PHP/doc_examples/test030.php: SUCCEEDED
    @PHP/doc_examples/test031.php: SUCCEEDED
    @PHP/doc_examples/test032.php: SUCCEEDED
    @PHP/doc_examples/test033.php: SUCCEEDED
    @PHP/doc_examples/test034.php: SUCCEEDED
    @PHP/doc_examples/test035.php: SUCCEEDED
    @PHP/doc_examples/test036.php: SUCCEEDED
    @PHP/doc_examples/test037.php: SUCCEEDED
    @PHP/doc_examples/test038.php: SUCCEEDED
    @PHP/doc_examples/test039.php: SUCCEEDED
    @PHP/doc_examples/test040.php: SUCCEEDED
    @PHP/doc_examples/test041.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    call_user_func():
    hello world!
    Strict Standards: call_user_func(): Non-static method MyClass::myCallbackMethod() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\doc_examples\__input.txt at expression on line 17, column 1.
    Hello World!Hello World!
    @PHP/doc_examples/test042.php: SUCCEEDED
    @PHP/doc_examples/test043.php: SUCCEEDED
    @PHP/doc_examples/test044.php: SUCCEEDED
    @PHP/doc_examples/test045.php: SUCCEEDED
    @PHP/doc_examples/test046.php: SUCCEEDED
    @PHP/doc_examples/test047.php: SUCCEEDED
    @PHP/doc_examples/test048.php: SUCCEEDED
    @PHP/doc_examples/test049.php: SUCCEEDED
    @PHP/doc_examples/test050.php: SUCCEEDED
    @PHP/doc_examples/test051.php: SUCCEEDED
    @PHP/doc_examples/test052.php: SUCCEEDED
    @PHP/doc_examples/test053.php: SUCCEEDED
    @PHP/doc_examples/test054.php: SUCCEEDED
    @PHP/doc_examples/test055.php: SUCCEEDED
    @PHP/doc_examples/test056.php: SUCCEEDED
    @PHP/doc_examples/test057.php: SUCCEEDED
    @PHP/doc_examples/test058.php: SUCCEEDED
    @PHP/doc_examples/test059.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    Deprecated: Assigning the return value of new by reference is deprecated in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\doc_examples\__input.txt on line 4
    NULL
    object(stdClass)#1 (0) {
    }
    NULL
    object(stdClass)(0) {
    }
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\doc_examples\__input.txt(4,5): warning PHP0181: Assigning the return value of new by reference is deprecated
    
    @PHP/doc_examples/test060.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    Deprecated: Assigning the return value of new by reference is deprecated in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\doc_examples\__input.txt on line 9
    Static object: NULL
    Static object: NULL
    
    Static object: NULL
    Static object: object(stdClass)#3 (1) {
      ["property"]=>
      int(1)
    }
    Static object: NULL
    Static object: NULL
    
    Static object: NULL
    Static object: object(stdClass)(1) {
      ["property"]=>
      int(1)
    }
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\doc_examples\__input.txt(9,9): warning PHP0181: Assigning the return value of new by reference is deprecated
    
    @PHP/doc_examples/test061.php: SUCCEEDED
    @PHP/doc_examples/test062.php: SUCCEEDED
    @PHP/doc_examples/test063.php: SUCCEEDED
    @PHP/doc_examples/test064.php: SUCCEEDED
    @PHP/doc_examples/test065.php: SUCCEEDED
    @PHP/doc_examples/test066.php: SUCCEEDED
    @PHP/doc_examples/test067.php: SUCCEEDED
    @PHP/doc_examples/test068.php: SUCCEEDED
    @PHP/doc_examples/test069.php: SUCCEEDED
    @PHP/doc_examples/test070.php: SUCCEEDED
    @PHP/doc_examples/test071.php: SUCCEEDED
    @PHP/doc_examples/test072.php: SUCCEEDED
    @PHP/doc_examples/test073.php: SUCCEEDED
    @PHP/doc_examples/test074.php: SUCCEEDED
    @PHP/doc_examples/test075.php: SUCCEEDED
    @PHP/doc_examples/test076.php: SUCCEEDED
    @PHP/doc_examples/test077.php: SUCCEEDED
    @PHP/doc_examples/test078.php: SUCCEEDED
    @PHP/doc_examples/test079.php: SUCCEEDED
    @PHP/doc_examples/test080.php: SUCCEEDED
    @PHP/doc_examples/test081.php: SUCCEEDED
    @PHP/doc_examples/test082.php: SUCCEEDED
    @PHP/doc_examples/test083.php: SUCCEEDED
    @PHP/doc_examples/test084.php: SUCCEEDED
    @PHP/doc_examples/test085.php: SUCCEEDED
    @PHP/doc_examples/test086.php: SUCCEEDED
    @PHP/doc_examples/test087.php: SUCCEEDED
    @PHP/doc_examples/test088.php: SUCCEEDED
    @PHP/doc_examples/test089.php: SUCCEEDED
    @PHP/doc_examples/test090.php: SUCCEEDED
    @PHP/doc_examples/test091.php: SUCCEEDED
    @PHP/doc_examples/test092.php: SUCCEEDED
    @PHP/doc_examples/test093.php: SUCCEEDED
    @PHP/doc_examples/test094.php: SUCCEEDED
    @PHP/doc_examples/test095.php: SUCCEEDED
    @PHP/doc_examples/test096.php: SUCCEEDED
    @PHP/doc_examples/test097.php: SUCCEEDED
    @PHP/doc_examples/test098.php: SUCCEEDED
    @PHP/doc_examples/test099.php: SUCCEEDED
    @PHP/doc_examples/test100.php: SUCCEEDED
    @PHP/doc_examples/test102.php: SUCCEEDED
    @PHP/doc_examples/test103.php: SUCCEEDED
    @PHP/doc_examples/test104.php: SUCCEEDED
    @PHP/doc_examples/test105.php: SUCCEEDED
    @PHP/doc_examples/test107.php: SUCCEEDED
    @PHP/doc_examples/test108.php: SUCCEEDED
    @PHP/doc_examples/test109.php: SUCCEEDED
    @PHP/doc_examples/test110.php: SUCCEEDED
    @PHP/doc_examples/test111.php: SUCCEEDED
    @PHP/doc_examples/test112.php: SUCCEEDED
    @PHP/doc_examples/test113.php: SUCCEEDED
    @PHP/doc_examples/test114.php: SUCCEEDED
    @PHP/doc_examples/test115.php: SUCCEEDED
    @PHP/doc_examples/test116.php: SUCCEEDED
    @PHP/doc_examples/test117.php: SUCCEEDED
    @PHP/doc_examples/test118.php: SUCCEEDED
    @PHP/doc_examples/test119.php: SUCCEEDED
    @PHP/doc_examples/test120.php: SUCCEEDED
    @PHP/doc_examples/test121.php: SUCCEEDED
    @PHP/doc_examples/test122.php: SUCCEEDED
    @PHP/doc_examples/test123.php: SUCCEEDED
    @PHP/doc_examples/test124.php: SUCCEEDED
    @PHP/doc_examples/test125.php: SUCCEEDED
    @PHP/doc_examples/test126.php: SUCCEEDED
    @PHP/doc_examples/test127.php: SUCCEEDED
    @PHP/doc_examples/test128.php: SUCCEEDED
    @PHP/doc_examples/test129.php: SUCCEEDED
    @PHP/doc_examples/test130.php: SUCCEEDED
    @PHP/doc_examples/test131.php: SUCCEEDED
    @PHP/doc_examples/test132.php: SUCCEEDED
    @PHP/doc_examples/test133.php: SUCCEEDED
    @PHP/doc_examples/test134.php: SUCCEEDED
    @PHP/doc_examples/test136.php: SUCCEEDED
    @PHP/doc_examples/test137.php: SUCCEEDED
    @PHP/doc_examples/test138.php: SUCCEEDED
    @PHP/doc_examples/test139.php: SUCCEEDED
    @PHP/doc_examples/test148.php: SUCCEEDED
    @PHP/doc_examples/test149.php: SUCCEEDED
    @PHP/doc_examples/test150.php: SUCCEEDED
    @PHP/doc_examples/test151.php: SUCCEEDED
    @PHP/doc_examples/test152.php: SUCCEEDED
    @PHP/doc_examples/test153.php: SUCCEEDED
    @PHP/doc_examples/test154.php: SUCCEEDED
    @PHP/doc_examples/test155.php: SUCCEEDED
    @PHP/doc_examples/test156.php: SUCCEEDED
    @PHP/doc_examples/test158.php: SUCCEEDED
    @PHP/lang/001.php: SUCCEEDED
    @PHP/lang/002.php: SUCCEEDED
    @PHP/lang/003.php: SUCCEEDED
    @PHP/lang/004.php: SUCCEEDED
    @PHP/lang/005.php: SUCCEEDED
    @PHP/lang/006.php: SUCCEEDED
    @PHP/lang/007.php: SUCCEEDED
    @PHP/lang/008.php: SUCCEEDED
    @PHP/lang/009.php: SUCCEEDED
    @PHP/lang/010.php: SUCCEEDED
    @PHP/lang/011.php: SUCCEEDED
    @PHP/lang/012.php: SUCCEEDED
    @PHP/lang/013.php: SUCCEEDED
    @PHP/lang/014.php: SUCCEEDED
    @PHP/lang/015.php: SUCCEEDED
    @PHP/lang/016.php: SUCCEEDED
    @PHP/lang/017.php: SUCCEEDED
    @PHP/lang/018.php: SUCCEEDED
    @PHP/lang/019.php: SUCCEEDED
    @PHP/lang/020.php: SUCCEEDED
    @PHP/lang/021.php: SUCCEEDED
    @PHP/lang/022.php: SUCCEEDED
    @PHP/lang/023.php: SUCCEEDED
    @PHP/lang/024.php: SUCCEEDED
    @PHP/lang/025.php: SUCCEEDED
    @PHP/lang/026.php: SUCCEEDED
    @PHP/lang/027.php: SUCCEEDED
    @PHP/lang/028.php: SUCCEEDED
    @PHP/lang/030.php: SUCCEEDED
    @PHP/lang/032.php: SUCCEEDED
    @PHP/lang/036.php: SUCCEEDED
    @PHP/lang/037.php: SUCCEEDED
    @PHP/lang/038.php: SUCCEEDED
    @PHP/lang/039.php: SUCCEEDED
    @PHP/lang/040.php: SUCCEEDED
    @PHP/lang/bison1.php: SUCCEEDED
    @PHP/lang/bug17115.php: SUCCEEDED
    @PHP/lang/bug18872.php: SUCCEEDED
    @PHP/lang/bug19943.php: SUCCEEDED
    @PHP/lang/bug20175.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    Deprecated: Assigning the return value of new by reference is deprecated in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\lang\__input.txt on line 110
    foo_static()
    foo_global()
    foo:1
    foo_static()
    foo:1
    bar_static()
    bar_global()
    bar:1
    bar_static()
    bar:1
    wow_static()
    wow_global()
    wow:1
    wow_static()
    wow:1
    oop_test()
    oop_static()
    oop_class()
    oop:1
    oop_static()
    oop:1
    oop_test()
    oop_static()
    oop:1
    foo_static()
    foo_global()
    foo:1
    foo_static()
    foo:1
    bar_static()
    bar_global()
    bar:1
    bar_static()
    bar_global()
    bar:2
    wow_static()
    wow_global()
    wow:1
    wow_static()
    wow:1
    oop_test()
    oop_static()
    oop_class()
    oop:1
    oop_static()
    oop:1
    oop_test()
    oop_static()
    oop:1
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\lang\__input.txt(110,4): warning PHP0181: Assigning the return value of new by reference is deprecated
    
    @PHP/lang/bug21094.php: SUCCEEDED
    @PHP/lang/bug21600.php: SUCCEEDED
    @PHP/lang/bug21669.php: SUCCEEDED
    @PHP/lang/bug21849.php: SUCCEEDED
    @PHP/lang/bug21961.php: SUCCEEDED
    @PHP/lang/bug22231.php: SUCCEEDED
    @PHP/lang/bug22367.php: SUCCEEDED
    @PHP/lang/bug22510.php: SUCCEEDED
    @PHP/lang/bug22592.php: SUCCEEDED
    @PHP/lang/bug22690.php: SUCCEEDED
    @PHP/lang/bug23279.php: SUCCEEDED
    @PHP/lang/bug23384.php: SUCCEEDED
    @PHP/lang/bug23489.php: SUCCEEDED
    @PHP/lang/bug23524.php: SUCCEEDED
    @PHP/lang/bug23922.php: SUCCEEDED
    @PHP/lang/bug24054.php: SUCCEEDED
    @PHP/lang/bug24396.php: SUCCEEDED
    @PHP/lang/bug24403.php: SUCCEEDED
    @PHP/lang/bug24436.php: SUCCEEDED
    @PHP/lang/bug24499.php: SUCCEEDED
    @PHP/lang/bug24640.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    double(1700000000000000089258092433847514422797596587883870563356951996370064178581143932836831337636761368874297554515902592900802289500112731978596146714137401870842258241575178866354311397451139753100927220499450359906637902366244989496126909662726242240784739940994096632824796638102733857671280980918272.0000000000)
    1.7E+300
    
    ------
    double(0.0000000000)
    1.7E-300
    
    ------
    double(17000000000000001584208052028780237480128823455860622330108867175329927830437888.0000000000)
    1.7E+79
    
    ------
    double(0.0000000000)
    1.7E-79
    
    ------
    double(169999999999999996096025832433329868941658043870400163508258284150340918121070592.0000000000)
    1.7E+80
    
    ------
    double(0.0000000000)
    1.7E-80
    
    ------
    double(1700000000000000013616404158611892038375594280539217794530130541777964808366194688.0000000000)
    1.7E+81
    
    ------
    double(0.0000000000)
    1.7E-81
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    1.6999810742106E-319
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    1.7000798873397E-320
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    1.6995858216939E-321
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    0
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    0
    
    ------
    double(1700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+300
    
    ------
    double(0.0000000000)
    1.70000000000003E-300
    
    ------
    double(17000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+79
    
    ------
    double(0.0000000000)
    1.70000000000001E-79
    
    ------
    double(170000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+80
    
    ------
    double(0.0000000000)
    1.70000000000001E-80
    
    ------
    double(1700000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+81
    
    ------
    double(0.0000000000)
    1.70000000000001E-81
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    1.69998107421056E-319
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    1.70007988733973E-320
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    1.69464516523548E-321
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    0
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    0
    
    ------
    @PHP/lang/bug24652.php: SUCCEEDED
    @PHP/lang/bug24658.php: SUCCEEDED
    @PHP/lang/bug24783.php: SUCCEEDED
    @PHP/lang/bug24926.php: SUCCEEDED
    @PHP/lang/bug25547.php: SUCCEEDED
    @PHP/lang/bug25652.php: SUCCEEDED
    @PHP/lang/bug25922.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Undefined index here: 'error'
    Undefined index here: ''
    @PHP/lang/bug26182.php: SUCCEEDED
    @PHP/lang/bug26696.php: SUCCEEDED
    @PHP/lang/bug26866.php: SUCCEEDED
    @PHP/lang/bug26869.php: SUCCEEDED
    @PHP/lang/bug27354.php: SUCCEEDED
    @PHP/lang/bug27439.php: SUCCEEDED
    @PHP/lang/bug27535.php: SUCCEEDED
    @PHP/lang/bug28213.php: SUCCEEDED
    @PHP/lang/bug28800.php: SUCCEEDED
    @PHP/lang/bug29566.php: SUCCEEDED
    @PHP/lang/bug29893.php: SUCCEEDED
    @PHP/lang/bug29944.php: SUCCEEDED
    @PHP/lang/bug30638.php: SUCCEEDED
    @PHP/lang/bug30726.php: SUCCEEDED
    @PHP/lang/bug30862.php: SUCCEEDED
    @PHP/lang/bug32924.php: SUCCEEDED
    @PHP/lang/bug35382.php: SUCCEEDED
    @PHP/lang/bug7515.php: SUCCEEDED
    @PHP/lang/each_binary_safety.php: SUCCEEDED
    @PHP/lang/error_2_exception_001.php: SUCCEEDED
    @PHP/lang/foreach_with_object_001.php: SUCCEEDED
    @PHP/lang/foreach_with_references_001.php: SUCCEEDED
    @PHP/lang/type_hints_001.php: SUCCEEDED
    @PHP/standard/array/001.php: SUCCEEDED
    @PHP/standard/array/003.php: SUCCEEDED
    @PHP/standard/array/004.php: SUCCEEDED
    @PHP/standard/array/005.php: SUCCEEDED
    @PHP/standard/array/008.php: SUCCEEDED
    @PHP/standard/array/array_change_key_case.php: SUCCEEDED
    @PHP/standard/array/array_chunk.php: SUCCEEDED
    @PHP/standard/array/array_count_values.php: SUCCEEDED
    @PHP/standard/array/array_diff_1.php: SUCCEEDED
    @PHP/standard/array/array_diff_key.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ------ Test 1 --------
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 2 --------
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 3 --------
    array(6) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [2]=>
      int(4)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [2]=>
      int(4)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 4 --------
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 5 --------
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 6 --------
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 7 --------
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    ------ Test 8 --------
    array(6) {
      [0]=>
      int(0)
      [7]=>
      int(14)
      [2]=>
      int(4)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [0]=>
      int(0)
      [7]=>
      int(14)
      [2]=>
      int(4)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 9 --------
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    ------ Test 1 --------
    array(4) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(4) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 2 --------
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 3 --------
    array(6) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [2]=>
      &int(4)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [2]=>
      &int(4)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 4 --------
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 5 --------
    array(4) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(4) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 6 --------
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 7 --------
    array(3) {
      [7]=>
      &int(14)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
    }
    array(3) {
      [7]=>
      &int(14)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
    }
    ------ Test 8 --------
    array(6) {
      [0]=>
      &int(0)
      [7]=>
      &int(14)
      [2]=>
      &int(4)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [0]=>
      &int(0)
      [7]=>
      &int(14)
      [2]=>
      &int(4)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 9 --------
    array(3) {
      [7]=>
      &int(14)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
    }
    array(3) {
      [7]=>
      &int(14)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
    }
    @PHP/standard/array/array_intersect_key.php: SUCCEEDED
    @PHP/standard/array/array_sum.php: SUCCEEDED
    @PHP/standard/array/array_walk_recursive.php: SUCCEEDED
    @PHP/standard/array/bug12776.php: SUCCEEDED
    @PHP/standard/array/bug14580.php: SUCCEEDED
    @PHP/standard/array/bug20381.php: SUCCEEDED
    @PHP/standard/array/bug20865.php: SUCCEEDED
    @PHP/standard/array/bug21182.php: SUCCEEDED
    @PHP/standard/array/bug21918.php: SUCCEEDED
    @PHP/standard/array/bug21998.php: SUCCEEDED
    @PHP/standard/array/bug22088.php: SUCCEEDED
    @PHP/standard/array/bug22463.php: SUCCEEDED
    @PHP/standard/array/bug23581.php: SUCCEEDED
    @PHP/standard/array/bug23788.php: SUCCEEDED
    @PHP/standard/array/bug24198.php: SUCCEEDED
    @PHP/standard/array/bug24220.php: SUCCEEDED
    @PHP/standard/array/bug24766.php: SUCCEEDED
    @PHP/standard/array/bug24897.php: SUCCEEDED
    @PHP/standard/array/bug24980.php: SUCCEEDED
    @PHP/standard/array/bug25359.php: SUCCEEDED
    @PHP/standard/array/bug25708.php: SUCCEEDED
    @PHP/standard/array/bug25758.php: SUCCEEDED
    @PHP/standard/array/bug26458.php: SUCCEEDED
    @PHP/standard/array/bug28974.php: SUCCEEDED
    @PHP/standard/array/bug29493.php: SUCCEEDED
    @PHP/standard/array/bug30266.php: SUCCEEDED
    @PHP/standard/array/bug30833.php: SUCCEEDED
    @PHP/standard/array/bug31158.php: SUCCEEDED
    @PHP/standard/array/bug31213.php: SUCCEEDED
    @PHP/standard/array/bug32021.php: SUCCEEDED
    @PHP/standard/array/bug33382.php: SUCCEEDED
    @PHP/standard/array/bug33989.php: SUCCEEDED
    @PHP/standard/array/bug34227.php: SUCCEEDED
    @PHP/standard/array/bug34982.php: SUCCEEDED
    @PHP/standard/array/bug35014.php: SUCCEEDED
    @PHP/standard/array/bug35022.php: SUCCEEDED
    @PHP/standard/array/bug35821.php: SUCCEEDED
    @PHP/standard/array/count_recursive.php: SUCCEEDED
    @PHP/standard/array/locale_sort.php: SUCCEEDED
    @PHP/standard/array/range.php: SUCCEEDED
    @PHP/standard/assert/assert.php: SUCCEEDED
    @PHP/standard/general_functions/001.php: SUCCEEDED
    @PHP/standard/general_functions/002.php: SUCCEEDED
    @PHP/standard/general_functions/003.php: SUCCEEDED
    @PHP/standard/general_functions/004.php: SUCCEEDED
    @PHP/standard/general_functions/005.php: SUCCEEDED
    @PHP/standard/general_functions/006.php: SUCCEEDED
    @PHP/standard/general_functions/007.php: SUCCEEDED
    @PHP/standard/general_functions/009.php: SUCCEEDED
    @PHP/standard/general_functions/bug25038.php: SUCCEEDED
    @PHP/standard/general_functions/bug27678.php: SUCCEEDED
    @PHP/standard/general_functions/bug29038.php: SUCCEEDED
    @PHP/standard/general_functions/bug31190.php: SUCCEEDED
    @PHP/standard/general_functions/bug32647.php: SUCCEEDED
    @PHP/standard/general_functions/bug35229.php: SUCCEEDED
    @PHP/standard/general_functions/is_resource.php: SUCCEEDED
    @PHP/standard/math/abs.php: SUCCEEDED
    @PHP/standard/math/bug24142.php: SUCCEEDED
    @PHP/standard/math/bug25694.php: SUCCEEDED
    @PHP/standard/math/bug27646.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    double(INF-INF)
    'd:-INF;'
    double(INF-INF)
    double(INF-INF)
    'd:INF;'
    double(INF-INF)
    double(NaNInfini)
    'd:NAN;'
    double(NaNInfini)
    double(-Infinity)
    'd:-INF;'
    double(-Infinity)
    double(Infinity)
    'd:INF;'
    double(Infinity)
    double(NaN)
    'd:NAN;'
    double(NaN)
    @PHP/standard/math/bug30069.php: SUCCEEDED
    @PHP/standard/math/bug30695.php: SUCCEEDED
    @PHP/standard/math/floorceil.php: SUCCEEDED
    @PHP/standard/math/hexdec.php: SUCCEEDED
    @PHP/standard/math/log.php: SUCCEEDED
    @PHP/standard/math/pow.php: SUCCEEDED
    @PHP/standard/math/round.php: SUCCEEDED
    @PHP/standard/reg/001.php: SUCCEEDED
    @PHP/standard/reg/002.php: SUCCEEDED
    @PHP/standard/reg/003.php: SUCCEEDED
    @PHP/standard/reg/004.php: SUCCEEDED
    @PHP/standard/reg/005.php: SUCCEEDED
    @PHP/standard/reg/006.php: SUCCEEDED
    @PHP/standard/reg/007.php: SUCCEEDED
    @PHP/standard/reg/008.php: SUCCEEDED
    @PHP/standard/reg/009.php: SUCCEEDED
    @PHP/standard/reg/010.php: SUCCEEDED
    @PHP/standard/reg/011.php: SUCCEEDED
    @PHP/standard/reg/012.php: SUCCEEDED
    @PHP/standard/reg/013.php: SUCCEEDED
    @PHP/standard/reg/014.php: SUCCEEDED
    @PHP/standard/reg/015.php: SUCCEEDED
    @PHP/standard/reg/016.php: SUCCEEDED
    @PHP/standard/serialize/001.php: SUCCEEDED
    @PHP/standard/serialize/002.php: SUCCEEDED
    @PHP/standard/serialize/003.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    d:100;
    double(100.0000000000)
    
    d:51999999999999996980101120;
    double(51999999999999996980101120.0000000000)
    
    d:8.9999999999999995265585574287341141808127531476202420890331268310546875E-9;
    double(0.0000000090)
    d:100;
    double(100.0000000000)
    
    d:5.2000000000000006E+25;
    double(52000000000000000000000000.0000000000)
    
    d:9.0000000000000045E-09;
    double(0.0000000090)
    @PHP/standard/serialize/004.php: SUCCEEDED
    @PHP/standard/serialize/005.php: SUCCEEDED
    @PHP/standard/serialize/006.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    'O:3:"´┐Ż":1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    object
    {
      '´┐Ż' => '´┐Ż'
    }
    'a:1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    array
    {
      '´┐Ż' => '´┐Ż'
    }
    'O:3:"´┐Ż":1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    object
    {
      'ďż˝' => '´┐Ż'
    }
    'a:1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    array
    {
      'ďż˝' => '´┐Ż'
    }
    @PHP/standard/serialize/bug14293.php: SUCCEEDED
    @PHP/standard/serialize/bug21957.php: SUCCEEDED
    @PHP/standard/serialize/bug23298.php: SUCCEEDED
    @PHP/standard/serialize/bug24063.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0.1 0.1
    0.01 0.01
    0.001 0.001
    0.0001 0.0001
    1.0E-5 1.0E-5
    1.0E-6 1.0E-6
    1.0E-7 1.0E-7
    1.0E-8 1.0E-8
    1.0E-9 1.0E-9
    0.1 0.1
    0.01 0.01
    0.001 0.001
    0.0001 0.0001
    1E-05 1E-05
    1E-06 1E-06
    1E-07 1E-07
    1E-08 1E-08
    1E-09 1E-09
    @PHP/standard/serialize/bug25378.php: SUCCEEDED
    @PHP/standard/serialize/bug26762.php: SUCCEEDED
    @PHP/standard/serialize/bug27469.php: SUCCEEDED
    @PHP/standard/serialize/bug28325.php: SUCCEEDED
    @PHP/standard/serialize/bug30234.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    FALSE
    FALSE
    __autoload(Autoload_Implements)
    object [invalid]
    FALSE
    FALSE
    FALSE
    FALSE
    TRUE
    __autoload(Autoload_Implements)
    object [invalid]
    FALSE
    FALSE
    TRUE
    @PHP/standard/serialize/bug31402.php: SUCCEEDED
    @PHP/standard/serialize/bug31442.php: SUCCEEDED
    @PHP/standard/strings/add-and-stripcslashes.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    kaboemkara!
    foo\b\a\r\b\az
    \f\o\o\[ \]
    \zoo['\.']
    \abcd\e\f\g\h\i\j\k\l\m\n\o\pqrstuvwxy\z
    1
    5d
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\standard\strings\__input.txt at expression on line 3, column 1.
    
    kaboemkara!
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\standard\strings\__input.txt at expression on line 5, column 1.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\standard\strings\__input.txt at expression on line 6, column 1.
    
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\standard\strings\__input.txt at expression on line 8, column 1.
    
    1
    5d
    @PHP/standard/strings/add-and-stripslashes.php: SUCCEEDED
    @PHP/standard/strings/basename.php: SUCCEEDED
    @PHP/standard/strings/bin2hex.php: SUCCEEDED
    @PHP/standard/strings/bug20108.php: SUCCEEDED
    @PHP/standard/strings/bug20169.php: SUCCEEDED
    @PHP/standard/strings/bug20261.php: SUCCEEDED
    @PHP/standard/strings/bug20927.php: SUCCEEDED
    @PHP/standard/strings/bug21338.php: SUCCEEDED
    @PHP/standard/strings/bug21453.php: SUCCEEDED
    @PHP/standard/strings/bug21730.php: SUCCEEDED
    @PHP/standard/strings/bug21744.php: SUCCEEDED
    @PHP/standard/strings/bug22008.php: SUCCEEDED
    @PHP/standard/strings/bug22187.php: SUCCEEDED
    @PHP/standard/strings/bug22224.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      0 => 
      object
      {
      }
      1 => 
      object
      {
      }
    }
    @PHP/standard/strings/bug22227.php: SUCCEEDED
    @PHP/standard/strings/bug22904.php: SUCCEEDED
    @PHP/standard/strings/bug23650.php: SUCCEEDED
    @PHP/standard/strings/bug23894.php: SUCCEEDED
    @PHP/standard/strings/bug24098.php: SUCCEEDED
    @PHP/standard/strings/bug24208.php: SUCCEEDED
    @PHP/standard/strings/bug24281.php: SUCCEEDED
    @PHP/standard/strings/bug25671.php: SUCCEEDED
    @PHP/standard/strings/bug25707.php: SUCCEEDED
    @PHP/standard/strings/bug26878.php: SUCCEEDED
    @PHP/standard/strings/bug26973.php: SUCCEEDED
    @PHP/standard/strings/bug27276.php: SUCCEEDED
    @PHP/standard/strings/bug27278.php: SUCCEEDED
    @PHP/standard/strings/bug27295.php: SUCCEEDED
    @PHP/standard/strings/bug27457.php: SUCCEEDED
    @PHP/standard/strings/bug27675.php: SUCCEEDED
    @PHP/standard/strings/bug28386.php: SUCCEEDED
    @PHP/standard/strings/bug33076.php: SUCCEEDED
    @PHP/standard/strings/chr_ord.php: SUCCEEDED
    @PHP/standard/strings/chunk_split.php: SUCCEEDED
    @PHP/standard/strings/count_chars.php: SUCCEEDED
    @PHP/standard/strings/crc32.php: SUCCEEDED
    @PHP/standard/strings/explode.php: SUCCEEDED
    @PHP/standard/strings/implode.php: SUCCEEDED
    @PHP/standard/strings/md5.php: SUCCEEDED
    @PHP/standard/strings/md5raw.php: SUCCEEDED
    @PHP/standard/strings/nl2br.php: SUCCEEDED
    @PHP/standard/strings/sha1.php: SUCCEEDED
    @PHP/standard/strings/sha1raw.php: SUCCEEDED
    @PHP/standard/strings/sprintf_f.php: SUCCEEDED
    @PHP/standard/strings/strcspn.php: SUCCEEDED
    @PHP/standard/strings/strings001.php: SUCCEEDED
    @PHP/standard/strings/strpos.php: SUCCEEDED
    @PHP/standard/strings/strrev.php: SUCCEEDED
    @PHP/standard/strings/strripos.php: SUCCEEDED
    @PHP/standard/strings/strrpos.php: SUCCEEDED
    @PHP/standard/strings/strspn.php: SUCCEEDED
    @PHP/standard/strings/strstr.php: SUCCEEDED
    @PHP/standard/strings/strtoupper.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    cfbfbdcfbfbdcfbfbd
    cfafbdcfafbdcfafbd
    @PHP/standard/strings/strtr.php: SUCCEEDED
    @PHP/standard/strings/strval.php: SUCCEEDED
    @PHP/standard/strings/str_repeat.php: SUCCEEDED
    @PHP/standard/strings/str_shuffle.php: SUCCEEDED
    @PHP/standard/strings/str_word_count.php: SUCCEEDED
    @PHP/standard/strings/substr_count.php: SUCCEEDED
    @PHP/standard/strings/substr_replace.php: SUCCEEDED
    @PHP/standard/strings/wordwrap.php: SUCCEEDED
    @PHP/standard/time/001.php: SUCCEEDED
    @PHP/standard/time/idate.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    U: 1043324459
    Y: 2003
    z: 22
    y: 3
    m: 1
    n: 1
    d: 23
    j: 23
    H: 13
    G: 13
    h: 1
    g: 1
    i: 20
    s: 59
    t: 31
    w: 4
    L: 0
    B: 556
    I: 0
    W: 4
    U: 1043324459
    Y: 2003
    z: 22
    y: 3
    m: 1
    n: 1
    d: 23
    j: 23
    H: 12
    G: 12
    h: 12
    g: 12
    i: 20
    s: 59
    t: 31
    w: 4
    L: 0
    B: 556
    I: 0
    W: 4
    @PHP/strings/001.php: SUCCEEDED
    @PHP/strings/002.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    fprintf test 1:abcde
    20
    printf test 1:simple string
    printf test 2:42
    printf test 3:3.333333
    printf test 4:3.3333333333
    printf test 5:2.50      
    printf test 6:2.50000000
    printf test 7:0000002.50
    printf test 8:<                 foo>
    printf test 9:<bar                 >
    printf test 10: 123456789012345
    printf test 10:<h´┐Żyesterettsjustitiarius>
    printf test 11: 123456789012345678901234567890
    printf test 11:<    h´┐Żyesterettsjustitiarius>
    printf test 12:-12.34
    printf test 13:  -12
    printf test 14:@
    printf test 15:10101010
    printf test 16:aa
    printf test 17:AA
    printf test 18:        10101010
    printf test 19:              aa
    printf test 20:              AA
    printf test 21:0000000010101010
    printf test 22:00000000000000aa
    printf test 23:00000000000000AA
    printf test 24:abcde
    printf test 25:gazonk
    printf test 26:2 1
    printf test 27:3 1 2
    printf test 28:02  1
    printf test 29:2   1
    printf test 30:x
    vprintf test 1:2   1
    fprintf test 1:abcde
    20
    printf test 1:simple string
    printf test 2:42
    printf test 3:3.333333
    printf test 4:3.3333333333
    printf test 5:2.50      
    printf test 6:2.50000000
    printf test 7:0000002.50
    printf test 8:<                 foo>
    printf test 9:<bar                 >
    printf test 10: 123456789012345
    printf test 10:<h�yesterettsjustitiarius>
    printf test 11: 123456789012345678901234567890
    printf test 11:<    h�yesterettsjustitiarius>
    printf test 12:-12.34
    printf test 13:  -12
    printf test 14:@
    printf test 15:10101010
    printf test 16:aa
    printf test 17:AA
    printf test 18:        10101010
    printf test 19:              aa
    printf test 20:              AA
    printf test 21:0000000010101010
    printf test 22:00000000000000aa
    printf test 23:00000000000000AA
    printf test 24:abcde
    printf test 25:gazonk
    printf test 26:2 1
    printf test 27:3 1 2
    printf test 28:02  1
    printf test 29:2   1
    printf test 30:x
    vprintf test 1:2   1
    @PHP/strings/bug22592.php: SUCCEEDED
    Arrays/array1.php: SUCCEEDED
    Arrays/array_diff_intersect.php: SUCCEEDED
    Arrays/array_diff_intersect2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Strict Standards: array_udiff() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 35
    Array
    (
        [0.5] => cr Object
            (
                [priv_member:cr:private] => 12
            )
    
        [0] => cr Object
            (
                [priv_member:cr:private] => 23
            )
    
    )
    
    Strict Standards: array_udiff_assoc() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 36
    Array
    (
        [0.1] => cr Object
            (
                [priv_member:cr:private] => 9
            )
    
        [0.5] => cr Object
            (
                [priv_member:cr:private] => 12
            )
    
        [0] => cr Object
            (
                [priv_member:cr:private] => 23
            )
    
    )
    
    Strict Standards: array_udiff_uassoc() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 37
    
    Strict Standards: array_udiff_uassoc() expects parameter 4 to be a valid callback, non-static method cr::comp_func_key() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 37
    Array
    (
        [0.1] => cr Object
            (
                [priv_member:cr:private] => 9
            )
    
        [0.5] => cr Object
            (
                [priv_member:cr:private] => 12
            )
    
        [0] => cr Object
            (
                [priv_member:cr:private] => 23
            )
    
    )
    Array
    (
        [b] => brown
        [c] => blue
        [0] => red
    )
    ------------------------------------
    
    Strict Standards: array_uintersect() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 40
    Array
    (
        [0.1] => cr Object
            (
                [priv_member:cr:private] => 9
            )
    
        [1] => cr Object
            (
                [priv_member:cr:private] => 4
            )
    
        [2] => cr Object
            (
                [priv_member:cr:private] => -15
            )
    
    )
    
    Strict Standards: array_uintersect_assoc() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 41
    Array
    (
        [1] => cr Object
            (
                [priv_member:cr:private] => 4
            )
    
        [2] => cr Object
            (
                [priv_member:cr:private] => -15
            )
    
    )
    
    Strict Standards: array_uintersect_uassoc() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 42
    
    Strict Standards: array_uintersect_uassoc() expects parameter 4 to be a valid callback, non-static method cr::comp_func_key() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 42
    Array
    (
        [1] => cr Object
            (
                [priv_member:cr:private] => 4
            )
    
        [2] => cr Object
            (
                [priv_member:cr:private] => -15
            )
    
    )
    Array
    (
        [a] => green
    )
    Array
    (
        [0.5] => cr Object
        (
            [priv_member:private] => 12
        )
    
        [0] => cr Object
        (
            [priv_member:private] => 23
        )
    
    )
    Array
    (
        [0.1] => cr Object
        (
            [priv_member:private] => 9
        )
    
        [0.5] => cr Object
        (
            [priv_member:private] => 12
        )
    
        [0] => cr Object
        (
            [priv_member:private] => 23
        )
    
    )
    Array
    (
        [0.1] => cr Object
        (
            [priv_member:private] => 9
        )
    
        [0.5] => cr Object
        (
            [priv_member:private] => 12
        )
    
        [0] => cr Object
        (
            [priv_member:private] => 23
        )
    
    )
    Array
    (
        [b] => brown
        [c] => blue
        [0] => red
    )
    ------------------------------------
    Array
    (
        [0.1] => cr Object
        (
            [priv_member:private] => 9
        )
    
        [1] => cr Object
        (
            [priv_member:private] => 4
        )
    
        [2] => cr Object
        (
            [priv_member:private] => -15
        )
    
    )
    Array
    (
        [1] => cr Object
        (
            [priv_member:private] => 4
        )
    
        [2] => cr Object
        (
            [priv_member:private] => -15
        )
    
    )
    Array
    (
        [1] => cr Object
        (
            [priv_member:private] => 4
        )
    
        [2] => cr Object
        (
            [priv_member:private] => -15
        )
    
    )
    Array
    (
        [a] => green
    )
    Arrays/array_diff_intersect3.php: SUCCEEDED
    Arrays/array_filter%20false%20entries%20%2322016.php: SUCCEEDED
    Arrays/array_map.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Array
    (
        [0] => Array
            (
                [0] => 1
                [1] => A
                [2] => 0
            )
    
        [1] => Array
            (
                [0] => 2
                [1] => B
                [2] => 0
            )
    
        [2] => Array
            (
                [0] => 3
                [1] => C
                [2] => 
            )
    
    )
    Array
    (
        [0] => 1 A 0
        [1] => 2 B 0
        [2] => 3 C 
    )
    Array
    (
        [A] => 2
        [10] => 3
    )
    Array
    (
        [0] => 1
        [1] => 2
        [2] => 3
    )
    Array
    (
        [0] => A
        [1] => B
        [2] => C
    )
    Array
    (
        [0] => 0
        [1] => 0
    )
    Array
    (
        [A] => 1
        [10] => 2
    )
    Array
    (
        [0] => Array
        (
            [0] => 1
            [1] => A
            [2] => 0
        )
    
        [1] => Array
        (
            [0] => 2
            [1] => B
            [2] => 0
        )
    
        [2] => Array
        (
            [0] => 3
            [1] => C
            [2] => 
        )
    
    )
    Array
    (
        [0] => 1 A 0
        [1] => 2 B 0
        [2] => 3 C 
    )
    Array
    (
        [A] => 2
        [10] => 3
    )
    Array
    (
        [0] => 1
        [1] => 2
        [2] => 3
    )
    Array
    (
        [0] => A
        [1] => B
        [2] => C
    )
    Array
    (
        [0] => x
        [1] => x
    )
    Array
    (
        [A] => 1
        [10] => 2
    )
    Arrays/array_merge_recursive.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Array
    (
        [color] => Array
            (
                [favorite] => Array
                    (
                        [0] => red
                        [1] => green
                    )
    
                [0] => blue
            )
    
        [0] => Array
            (
                [0] => 1
                [1] => 2
                [2] => 3
            )
    
        [q] => Array
            (
                [0] => 
                [1] => 
                [2] => x
            )
    
        [1] => 10
        [2] => Array
            (
                [0] => 4
                [1] => 5
                [2] => 6
            )
    
    )
    Array
    (
        [a] => Array
            (
                [0] => 1
                [1] => 2
                [2] => 3
                [3] => e
            )
    
    )
    Array
    (
        [a] => Array
            (
                [0] => 1
                [1] => 2
                [2] => 3
                [3] => e
            )
    
    )
    Array
    (
        [a] => 1
        [b] => 2
    )
    Array
    (
        [a] => xxx
        [b] => 2
    )
    Array
    (
        [a] => Array
            (
                [a] => Array
                    (
                        [a] => Array
     *RECURSION*
                    )
    
                [0] => 1
                [1] => 2
                [2] => 3
            )
    
    )
    Array
    (
        [a] => Array
            (
                [b] => Array
                    (
                        [0] => 1
                        [1] => 1
                    )
    
                [c] => 1
                [d] => Array
                    (
                        [0] => 2
                        [1] => 3
                    )
    
            )
    
    )
    Array
    (
        [a] => Array
            (
                [0] => 
                [1] => 
            )
    
    )
    Array
    (
        [a] => Array
            (
                [0] => 
                [1] => 
            )
    
    )
    Array
    (
        [color] => Array
        (
            [favorite] => Array
            (
                [0] => red
                [1] => green
            )
    
            [0] => blue
        )
    
        [0] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
        )
    
        [q] => Array
        (
            [0] => x
        )
    
        [1] => 10
        [2] => Array
        (
            [0] => 4
            [1] => 5
            [2] => 6
        )
    
    )
    Array
    (
        [a] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
            [3] => e
        )
    
    )
    Array
    (
        [a] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
            [3] => e
        )
    
    )
    Array
    (
        [a] => 1
        [b] => 2
    )
    Array
    (
        [a] => xxx
        [b] => 2
    )
    Array
    (
        [a] => Array
        (
            [a] => Array
            (
                [a] => Array [recursion]
    
    
            )
    
            [0] => 1
            [1] => 2
            [2] => 3
        )
    
    )
    Array
    (
        [a] => Array
        (
            [b] => Array
            (
                [0] => 1
                [1] => 1
            )
    
            [c] => 1
            [d] => Array
            (
                [0] => 2
                [1] => 3
            )
    
        )
    
    )
    Array
    (
        [a] => Array
        (
        )
    
    )
    Array
    (
        [a] => Array
        (
        )
    
    )
    Arrays/array_reduce1.php: SUCCEEDED
    Arrays/array_reduce2.php: SUCCEEDED
    Arrays/array_slice.php: SUCCEEDED
    Arrays/array_sumprod.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    float(8.3)
    float(0)
    int(6)
    int(6)
    float(4294967297)
    float(9.2233720282648E+18)
    bool(true)
    bool(false)
    float(-7.7)
    float(-38.4)
    int(6)
    int(6)
    int64(4294967297)
    int64(9223372028264841218)
    bool(true)
    bool(true)
    Arrays/array_unshift.php: SUCCEEDED
    Arrays/array_walk.php: SUCCEEDED
    Arrays/array_walk_recursive.php: SUCCEEDED
    Arrays/multisort.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    bool(true)
    Array
    (
        [0] => Array
            (
                [0] => 2
                [1] => 8
                [2] => 2
                [3] => 2
                [4] => 8
                [5] => 8
            )
    
        [1] => Array
            (
                [0] => 7
                [1] => 2
                [2] => 7
                [3] => 4
                [4] => 8
                [5] => 1
            )
    
        [2] => Array
            (
                [0] => 1
                [1] => 4
                [2] => 8
                [3] => 0
                [4] => 6
                [5] => 2
            )
    
        [3] => Array
            (
                [0] => 8
                [1] => 4
                [2] => 1
                [3] => 0
                [4] => 7
                [5] => 1
            )
    
        [4] => Array
            (
                [0] => 20
                [1] => 2
                [2] => 12
                [3] => 11
                [4] => 10
                [5] => 1
            )
    
    )
    Array
    (
        [0] => Array
            (
                [0] => 10
                [1] => 100
                [2] => 100
                [3] => a
            )
    
        [1] => Array
            (
                [0] => 1
                [1] => 3
                [2] => 2
                [3] => 1
            )
    
    )
    Array
    (
        [0] => 10
        [1] => a
        [2] => 100
        [3] => 100
    )
    Array
    (
        [0] => 1
        [1] => 1
        [2] => 2
        [3] => 3
    )
    bool(true)
    Array
    (
        [0] => Array
        (
            [0] => 2
            [1] => 8
            [2] => 2
            [3] => 2
            [4] => 8
            [5] => 8
        )
    
        [1] => Array
        (
            [0] => 7
            [1] => 2
            [2] => 7
            [3] => 4
            [4] => 8
            [5] => 1
        )
    
        [2] => Array
        (
            [0] => 1
            [1] => 4
            [2] => 8
            [3] => 0
            [4] => 6
            [5] => 2
        )
    
        [3] => Array
        (
            [0] => 8
            [1] => 4
            [2] => 1
            [3] => 0
            [4] => 7
            [5] => 1
        )
    
        [4] => Array
        (
            [0] => 20
            [1] => 2
            [2] => 12
            [3] => 11
            [4] => 10
            [5] => 1
        )
    
    )
    Array
    (
        [0] => Array
        (
            [0] => 10
            [1] => 100
            [2] => 100
            [3] => a
        )
    
        [1] => Array
        (
            [0] => 1
            [1] => 3
            [2] => 2
            [3] => 1
        )
    
    )
    Array
    (
        [0] => 10
        [1] => a
        [2] => 100
        [3] => 100
    )
    Array
    (
        [0] => 1
        [1] => 1
        [2] => 2
        [3] => 3
    )
    Arrays/multisort_empty.php: SUCCEEDED
    Arrays/nonarray%20access%20%2322019.php: SUCCEEDED
    Arrays/optimizations.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    3
    4
    5
    a
    b
    c
    
    Warning: strtolower() expects parameter 1 to be string, array given in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 15
    
    cablo
    3
    4
    5
    a
    b
    c
    array
    cablo
    Arrays/recursion.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    f1:
    array(2) {
      ["a"]=>
      array(5) {
        ["a"]=>
        &array(3) {
          ["a"]=>
          &array(3) {
            ["a"]=>
            *RECURSION*
            [0]=>
            string(1) "y"
            [1]=>
            string(1) "z"
          }
          [0]=>
          string(1) "y"
          [1]=>
          string(1) "z"
        }
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        string(1) "x"
      }
      [0]=>
      string(1) "w"
    }
    f2:
    array(1) {
      ["A"]=>
      &array(2) {
        ["a"]=>
        &array(2) {
          ["a"]=>
          *RECURSION*
          [0]=>
          string(1) "z"
        }
        [0]=>
        string(1) "z"
      }
    }
    f3:
    array(2) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) {
          [0]=>
          *RECURSION*
          [1]=>
          string(1) "z"
        }
        [1]=>
        string(1) "z"
      }
      [1]=>
      string(1) "z"
    }
    f4:
    
    Warning: array_merge_recursive(): recursion detected in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 37
    array(1) {
      ["a"]=>
      &array(3) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
      }
    }
    f5:
    array(1) {
      ["a"]=>
      array(6) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        int(1)
        [4]=>
        int(2)
        [5]=>
        int(3)
      }
    }
    f6:
    array(1) {
      ["a"]=>
      array(2) {
        [0]=>
        string(2) "xx"
        [1]=>
        int(2)
      }
    }
    f7:
    array(1) {
      ["a"]=>
      array(1) {
        ["a"]=>
        array(1) {
          ["a"]=>
          &array(1) {
            ["a"]=>
            &array(1) {
              ["a"]=>
              *RECURSION*
            }
          }
        }
      }
    }
    f1:
    array(2) {
      ["a"]=>
      array(5) {
        ["a"]=>
        &array(3) {
          ["a"]=>
          &array(3) [recursion]
          [0]=>
          string(1) "y"
          [1]=>
          string(1) "z"
        }
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        string(1) "x"
      }
      [0]=>
      string(1) "w"
    }
    f2:
    array(1) {
      ["A"]=>
      &array(2) {
        ["a"]=>
        &array(2) [recursion]
        [0]=>
        string(1) "z"
      }
    }
    f3:
    array(2) {
      [0]=>
      &array(2) [recursion]
      [1]=>
      string(1) "z"
    }
    f4:
    array(1) {
      ["a"]=>
      array(6) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        int(1)
        [4]=>
        int(2)
        [5]=>
        int(3)
      }
    }
    f5:
    array(1) {
      ["a"]=>
      array(6) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        int(1)
        [4]=>
        int(2)
        [5]=>
        int(3)
      }
    }
    f6:
    array(1) {
      ["a"]=>
      array(2) {
        [0]=>
        string(2) "xx"
        [1]=>
        int(2)
      }
    }
    f7:
    array(1) {
      ["a"]=>
      &array(1) {
        ["a"]=>
        &array(1) [recursion]
      }
    }
    Arrays/sort.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    sort regular:
    Array
    (
        [0] => 0
        [1] => 1
        [2] => 1
        [3] => 8
        [4] => 0x10
        [5] => 10x
        [6] => 20x
        [7] => ach0
        [8] => add1
        [9] => x10
        [10] => x2
    )
    
    sort numeric:
    Array
    (
        [0] => add1
        [1] => x2
        [2] => 0x10
        [3] => ach0
        [4] => 0
        [5] => x10
        [6] => 1
        [7] => 1
        [8] => 8
        [9] => 10x
        [10] => 20x
    )
    
    sort string:
    Array
    (
        [0] => 0
        [1] => 0x10
        [2] => 1
        [3] => 1
        [4] => 10x
        [5] => 20x
        [6] => 8
        [7] => ach0
        [8] => add1
        [9] => x10
        [10] => x2
    )
    
    sort locale:
    Array
    (
        [0] => 0
        [1] => 0x10
        [2] => 1
        [3] => 1
        [4] => 10x
        [5] => 20x
        [6] => 8
        [7] => ach0
        [8] => add1
        [9] => x10
        [10] => x2
    )
    
    ksort regular:
    Array
    (
        [x] => 8
        [z] => 1
        [0] => x10
        [1] => 10x
        [2b] => 1
        [2] => 20x
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [10a] => 0
    )
    
    ksort numeric:
    Array
    (
        [x] => 8
        [z] => 1
        [0] => x10
        [1] => 10x
        [2b] => 1
        [2] => 20x
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [10a] => 0
    )
    
    ksort string:
    Array
    (
        [0] => x10
        [1] => 10x
        [10a] => 0
        [2] => 20x
        [2b] => 1
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [x] => 8
        [z] => 1
    )
    
    ksort locale:
    Array
    (
        [0] => x10
        [1] => 10x
        [10a] => 0
        [2] => 20x
        [2b] => 1
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [x] => 8
        [z] => 1
    )
    
    asort regular:
    Array
    (
        [10a] => 0
        [2b] => 1
        [z] => 1
        [x] => 8
        [4] => 0x10
        [1] => 10x
        [2] => 20x
        [5] => ach0
        [6] => add1
        [0] => x10
        [3] => x2
    )
    
    asort numeric:
    Array
    (
        [6] => add1
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [10a] => 0
        [0] => x10
        [z] => 1
        [2b] => 1
        [x] => 8
        [1] => 10x
        [2] => 20x
    )
    
    asort string:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [z] => 1
        [2b] => 1
        [1] => 10x
        [2] => 20x
        [x] => 8
        [5] => ach0
        [6] => add1
        [0] => x10
        [3] => x2
    )
    
    asort locale:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [z] => 1
        [2b] => 1
        [1] => 10x
        [2] => 20x
        [x] => 8
        [5] => ach0
        [6] => add1
        [0] => x10
        [3] => x2
    )
    
    rsort regular:
    Array
    (
        [0] => x2
        [1] => x10
        [2] => add1
        [3] => ach0
        [4] => 20x
        [5] => 10x
        [6] => 0x10
        [7] => 8
        [8] => 1
        [9] => 1
        [10] => 0
    )
    
    rsort numeric:
    Array
    (
        [0] => 20x
        [1] => 10x
        [2] => 8
        [3] => 1
        [4] => 1
        [5] => ach0
        [6] => add1
        [7] => 0x10
        [8] => x2
        [9] => x10
        [10] => 0
    )
    
    rsort string:
    Array
    (
        [0] => x2
        [1] => x10
        [2] => add1
        [3] => ach0
        [4] => 8
        [5] => 20x
        [6] => 10x
        [7] => 1
        [8] => 1
        [9] => 0x10
        [10] => 0
    )
    
    rsort locale:
    Array
    (
        [0] => x2
        [1] => x10
        [2] => add1
        [3] => ach0
        [4] => 8
        [5] => 20x
        [6] => 10x
        [7] => 1
        [8] => 1
        [9] => 0x10
        [10] => 0
    )
    
    natsort:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [2b] => 1
        [z] => 1
        [x] => 8
        [1] => 10x
        [2] => 20x
        [5] => ach0
        [6] => add1
        [3] => x2
        [0] => x10
    )
    sort regular:
    Array
    (
        [0] => 0x10
        [1] => 10x
        [2] => 20x
        [3] => ach0
        [4] => add1
        [5] => x10
        [6] => 0
        [7] => x2
        [8] => 1
        [9] => 1
        [10] => 8
    )
    
    sort numeric:
    Array
    (
        [0] => x10
        [1] => 0
        [2] => x2
        [3] => ach0
        [4] => add1
        [5] => 1
        [6] => 1
        [7] => 8
        [8] => 10x
        [9] => 0x10
        [10] => 20x
    )
    
    sort string:
    Array
    (
        [0] => 0
        [1] => 0x10
        [2] => 1
        [3] => 1
        [4] => 10x
        [5] => 20x
        [6] => 8
        [7] => ach0
        [8] => add1
        [9] => x10
        [10] => x2
    )
    
    sort locale:
    Array
    (
        [0] => 0
        [1] => 0x10
        [2] => 1
        [3] => 1
        [4] => 10x
        [5] => 20x
        [6] => 8
        [7] => add1
        [8] => ach0
        [9] => x10
        [10] => x2
    )
    
    ksort regular:
    Array
    (
        [x] => 8
        [z] => 1
        [0] => x10
        [1] => 10x
        [2] => 20x
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [10a] => 0
        [2b] => 1
    )
    
    ksort numeric:
    Array
    (
        [x] => 8
        [z] => 1
        [0] => x10
        [1] => 10x
        [2b] => 1
        [2] => 20x
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [10a] => 0
    )
    
    ksort string:
    Array
    (
        [0] => x10
        [1] => 10x
        [10a] => 0
        [2] => 20x
        [2b] => 1
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [x] => 8
        [z] => 1
    )
    
    ksort locale:
    Array
    (
        [0] => x10
        [1] => 10x
        [10a] => 0
        [2] => 20x
        [2b] => 1
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [x] => 8
        [z] => 1
    )
    
    asort regular:
    Array
    (
        [4] => 0x10
        [1] => 10x
        [2] => 20x
        [5] => ach0
        [6] => add1
        [0] => x10
        [10a] => 0
        [3] => x2
        [z] => 1
        [2b] => 1
        [x] => 8
    )
    
    asort numeric:
    Array
    (
        [0] => x10
        [10a] => 0
        [3] => x2
        [5] => ach0
        [6] => add1
        [z] => 1
        [2b] => 1
        [x] => 8
        [1] => 10x
        [4] => 0x10
        [2] => 20x
    )
    
    asort string:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [z] => 1
        [2b] => 1
        [1] => 10x
        [2] => 20x
        [x] => 8
        [5] => ach0
        [6] => add1
        [0] => x10
        [3] => x2
    )
    
    asort locale:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [z] => 1
        [2b] => 1
        [1] => 10x
        [2] => 20x
        [x] => 8
        [6] => add1
        [5] => ach0
        [0] => x10
        [3] => x2
    )
    
    rsort regular:
    Array
    (
        [0] => 8
        [1] => 1
        [2] => 1
        [3] => x2
        [4] => x10
        [5] => 0
        [6] => add1
        [7] => ach0
        [8] => 20x
        [9] => 10x
        [10] => 0x10
    )
    
    rsort numeric:
    Array
    (
        [0] => 20x
        [1] => 0x10
        [2] => 10x
        [3] => 8
        [4] => 1
        [5] => 1
        [6] => x10
        [7] => 0
        [8] => x2
        [9] => ach0
        [10] => add1
    )
    
    rsort string:
    Array
    (
        [0] => x2
        [1] => x10
        [2] => add1
        [3] => ach0
        [4] => 8
        [5] => 20x
        [6] => 10x
        [7] => 1
        [8] => 1
        [9] => 0x10
        [10] => 0
    )
    
    rsort locale:
    Array
    (
        [0] => x2
        [1] => x10
        [2] => ach0
        [3] => add1
        [4] => 8
        [5] => 20x
        [6] => 10x
        [7] => 1
        [8] => 1
        [9] => 0x10
        [10] => 0
    )
    
    natsort:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [z] => 1
        [2b] => 1
        [x] => 8
        [1] => 10x
        [2] => 20x
        [5] => ach0
        [6] => add1
        [3] => x2
        [0] => x10
    )
    Arrays/usort.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    Array
    (
        [0] => 10
        [1] => 9
        [2] => 8
        [3] => 7
        [4] => 6
        [5] => 5
        [6] => 4
        [7] => 3
        [8] => 2
        [9] => 1
    )
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Array
    (
        [0] => 10
        [1] => 9
        [2] => 8
        [3] => 7
        [4] => 6
        [5] => 5
        [6] => 4
        [7] => 3
        [8] => 2
        [9] => 1
    )
    Arrays/lazy_copy/001.php: SUCCEEDED
    Arrays/lazy_copy/002.php: SUCCEEDED
    Arrays/lazy_copy/003.php: SUCCEEDED
    Arrays/lazy_copy/004.php: SUCCEEDED
    Arrays/lazy_copy/005.php: SUCCEEDED
    Arrays/lazy_copy/006.php: SUCCEEDED
    Bugs/class_incompletepart.php: SUCCEEDED
    Bugs/division-by-zero.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    DIVISION
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 6
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 8
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 10
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 12
    bool(false)
    MODULO
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 16
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 18
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 20
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 22
    bool(false)
    DIVISION
    bool(false)
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt at expression on line 10, column 2.
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt at expression on line 12, column 2.
    bool(false)
    MODULO
    bool(false)
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt at expression on line 20, column 2.
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt at expression on line 22, column 2.
    bool(false)
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt(6,10): warning PHP0150: Division by zero
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt(8,9): warning PHP0150: Division by zero
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt(16,10): warning PHP0150: Division by zero
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt(18,9): warning PHP0150: Division by zero
    
    Bugs/function-in-unknown-class.php: SUCCEEDED
    Bugs/is_a_null_value.php: SUCCEEDED
    Bugs/preg-named-groups.php: SUCCEEDED
    Bugs/preg-replace-advanced.php: SUCCEEDED
    Bugs/preg-replace-range.php: SUCCEEDED
    Bugs/preg-replace.php: SUCCEEDED
    Bugs/preg-this-dynamic.php: FAILED
    Script hung upNo errorsSuccess
    Expected test outputReal script output
    Unhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---> System.NullReferenceException: Object reference not set to an instance of an object.
       at PHP.Core.RelativePath.ParseCanonical(String relativePath)
       at PHP.Core.Emit.TransientAssemblyBuilder.Build(String sourceCode, SourceCodeDescriptor descriptor, EvalKinds kind, CompilationContext context, ScriptContext scriptContext, DTypeDesc referringType, NamingContext namingContext, Boolean completeSource)
       at PHP.Core.DynamicCode.EvalInternal(String prefix, String code, String suffix, EvalKinds kind, ScriptContext scriptContext, Dictionary`2 localVariables, DObject self, DTypeDesc referringType, SourceCodeDescriptor descriptor, Boolean entireFile, NamingContext namingContext)
       at PHP.Core.DynamicCode.Eval(String code, Boolean synthetic, ScriptContext context, Dictionary`2 definedVariables, DObject self, DTypeDesc referringType, String callerRelativeSourcePath, Int32 line, Int32 column, Int32 containerId, NamingContext namingContext)
       at PHP.Library.PerlRegExp.Evaluator.ReplaceCodeExecute(Match m)
       at System.Text.RegularExpressions.RegexReplacement.Replace(MatchEvaluator evaluator, Regex regex, String input, Int32 count, Int32 startat)
       at System.Text.RegularExpressions.Regex.Replace(String input, MatchEvaluator evaluator, Int32 count)
       at PHP.Library.PerlRegExp.ReplaceInternal(DObject self, Dictionary`2 definedVariables, PerlRegExpConverter converter, PhpCallback callback, String str, Int32 limit, SourceCodeDescriptor sourceCodeDesc, Int32& count)
       at PHP.Library.PerlRegExp.SimpleReplace(DObject self, Dictionary`2 definedVariables, Object pattern, String replacement, PhpCallback callback, Object data, Int32 limit, SourceCodeDescriptor descriptor, Int32& count)
       at PHP.Library.PerlRegExp.Replace(DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, PhpCallback callback, Object data, Int32 limit, Int32& count)
       at PHP.Dynamic.PhpNetClassLibrary.preg_replace(Object , PhpStack )
       at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <__input.txt>.a.a(ScriptContext ) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt:line 16
       at <__input.txt>.a.<Mediator>(ScriptContext )
       at <__input.txt>.a.a(Object instance, PhpStack stack)
       at <__input.txt>.<Script>.<Main>(ScriptContext <context>, Dictionary`2 <locals>, DObject , DTypeDesc , Boolean ) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt:line 19
       at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)
       at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)
       --- End of inner exception stack trace ---
       at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)
       at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)
       at <Global>.Run(String[] )
    
    Bugs/preg-this-dynamic2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    foo: ahoj
    foo: lidi
    foo: rozkladame
    foo: ahoj
    foo: lidi
    foo: rozkladame
    foo: ahoj
    foo: lidi
    foo: rozkladame
    
    Notice: Undefined variable: this.
    
    Error: Call to a member function foo() on a non-object.
    Bugs/preg-this.php: SUCCEEDED
    Bugs/preg-ungreedy-bugs.php: SUCCEEDED
    Bugs/preg-unkn.php: SUCCEEDED
    Bugs/trigger_error%20line%20number%20%232787.php: SUCCEEDED
    Compiler/abstracts.php: SUCCEEDED
    Compiler/aliased%20assign%20add.php: SUCCEEDED
    Compiler/assignments.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ---1---1float(-1.5)
    float(2.5)
    float(0.83333333333333)
    int(6)
    int(8)
    ---2---2float(8.8333333333333)
    float(8.8333333333333)
    float(8.8333333333333)
    int(8)
    int(8)
    ---3---3---4---4---5---5array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [1]=>
      array(1) {
        [2]=>
        array(1) {
          [3]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    ---6---6array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "u"
    }
    array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "v"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    ---7---7array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    ---8---8
    ---1---1float(-1.5)
    float(2.5)
    float(0.833333333333333)
    int(6)
    int(8)
    ---2---2float(8.83333333333333)
    float(8.83333333333333)
    float(8.83333333333333)
    int(8)
    int(8)
    ---3---3---4---4---5---5array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [1]=>
      array(1) {
        [2]=>
        array(1) {
          [3]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    ---6---6array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "u"
    }
    array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "v"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    ---7---7array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    ---8---8
    Compiler/assign_in_call.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    g1:
    f(x)
    u(x)
    'x'
    
    g2:
    f(x)
    u(x)
    'b'
    
    g3:
    f(x)
    u(x)
    'b'
    
    g4:
    f(x)
    u(x)
    'b'
    
    g5:
    f()
    u()
    integer(1)
    
    g6:
    f(3)
    u(3)
    integer(3)
    
    g7:
    f(2)
    u(10)
    integer(10)
    
    g8:
    f(1)
    f(1)
    f(1)
    u(1)
    u()
    u(1)
    
    g9:
    known:
    __get(p) = 0
    __set(p,1)
    f(1)
    unknown:
    __get(p) = 1
    __set(p,3)
    u(3)
    
    g10:
    Done.
    g1:
    f(x)
    u(x)
    'x'
    
    g2:
    f(x)
    u(x)
    'b'
    
    g3:
    f(x)
    u(x)
    'b'
    
    g4:
    f(x)
    u(x)
    'b'
    
    g5:
    f()
    u()
    integer(1)
    
    g6:
    f(3)
    u(3)
    integer(3)
    
    g7:
    f(2)
    u(10)
    integer(10)
    
    g8:
    f(1)
    f(1)
    f(1)
    u(1)
    u()
    u(1)
    
    g9:
    known:
    __get(p) = 0
    __set(p,1)
    __get(p) = 1
    f(1)
    unknown:
    __get(p) = 1
    __set(p,3)
    __get(p) = 3
    u(3)
    
    g10:
    Done.
    Compiler/auto_globals_001.php: SUCCEEDED
    Compiler/auto_globals_002.php: SUCCEEDED
    Compiler/auto_globals_003.php: SUCCEEDED
    Compiler/break_in_global_code.php: SUCCEEDED
    Compiler/chaining_test.php: SUCCEEDED
    Compiler/chain_ending_by_string_index.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        string(1) "f"
      }
    }
    array(1) {
      [0]=>
      string(4) "xubu"
    }
    object(C)#1 (1) {
      ["f"]=>
      string(4) "kuxu"
    }
    string(5) "helxo"
    string(5) "helxo"
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        string(1) "f"
      }
    }
    array(1) {
      [0]=>
      string(4) "bubu"
    }
    
    Warning: A string item used as a reference in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt at expression on line 19, column 1.
    object(C)(1) {
      ["f"]=>
      string(4) "kuku"
    }
    
    Warning: A string item used as a reference in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt at expression on line 25, column 1.
    string(5) "hello"
    
    Warning: A string item used as a reference in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt at expression on line 31, column 1.
    string(5) "hello"
    Compiler/continue_in_global_code.php: SUCCEEDED
    Compiler/deep_copy.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array(1) {
      [0]=>
      &array(1) {
        [0]=>
        &array(1) {
          [0]=>
          *RECURSION*
        }
      }
    }
    array(1) {
      [0]=>
      &array(1) {
        [0]=>
        &array(1) {
          [0]=>
          *RECURSION*
        }
      }
    }
    array(2) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) {
          [0]=>
          *RECURSION*
          [1]=>
          int(1)
        }
        [1]=>
        int(1)
      }
      [1]=>
      int(1)
    }
    array(1) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) {
          [0]=>
          *RECURSION*
          [1]=>
          int(1)
        }
        [1]=>
        int(1)
      }
    }
    array(1) {
      [0]=>
      &array(1) [recursion]
    }
    array(1) {
      [0]=>
      &array(1) {
        [0]=>
        &array(1) [recursion]
      }
    }
    array(2) {
      [0]=>
      &array(2) [recursion]
      [1]=>
      int(1)
    }
    array(1) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) [recursion]
        [1]=>
        int(1)
      }
    }
    Compiler/deep_copy_refbox.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Strict Standards: Only variables should be passed by reference in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt on line 42
    array
    {
      0 => integer(1)
    }
    
    Strict Standards: Only variables should be passed by reference in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt on line 45
    array
    {
      0 => integer(1)
    }
    
    Strict Standards: Only variables should be passed by reference in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt on line 49
    array
    {
      0 => integer(1)
    }
    
    Strict Standards: Only variables should be passed by reference in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt on line 52
    array
    {
      0 => integer(1)
    }
    array
    {
      0 => integer(1)
      1 => integer(1)
    }
    array
    {
      0 => integer(1)
      1 => integer(1)
    }
    array
    {
      0 => integer(1)
      1 => integer(1)
    }
    array
    {
      0 => integer(1)
      1 => integer(1)
    }
    Compiler/expr_init.php: SUCCEEDED
    Compiler/foreach1.php: SUCCEEDED
    Compiler/foreach_arrays.php: SUCCEEDED
    Compiler/for_loop.php: SUCCEEDED
    Compiler/function_002.php: SUCCEEDED
    Compiler/function_003.php: SUCCEEDED
    Compiler/function_004.php: SUCCEEDED
    Compiler/function_call.php: SUCCEEDED
    Compiler/if_statement.php: SUCCEEDED
    Compiler/indirect_001.php: SUCCEEDED
    Compiler/indirect_002.php: SUCCEEDED
    Compiler/indirect_003.php: SUCCEEDED
    Compiler/indirect_004.php: SUCCEEDED
    Compiler/indirect_005.php: SUCCEEDED
    Compiler/indirect_007.php: SUCCEEDED
    Compiler/indirect_global.php: SUCCEEDED
    Compiler/inheritance.php: SUCCEEDED
    Compiler/inheritance2.php: SUCCEEDED
    Compiler/isset_unset_001.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Testing x in global code:  <br>
    1 <br>
     <br>
    Testing x (object) in optimized function:  <br>
    1 <br>
     <br>
    Testing x (PhpReference) in optimized function:  <br>
    1 <br>
     <br>
    
    Notice: Undefined variable: y in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt on line 29
    Testing $$x (created at runtime) in optimized function:  <br>
    1 <br>
    Testing x in global code:  <br>
    1 <br>
     <br>
    Testing x (object) in optimized function:  <br>
    1 <br>
     <br>
    Testing x (PhpReference) in optimized function:  <br>
    1 <br>
     <br>
    Testing $$x (created at runtime) in optimized function:  <br>
    1 <br>
    Compiler/list%20%2326681.php: SUCCEEDED
    Compiler/null_hints.php: SUCCEEDED
    Compiler/pure_create_function.php: SUCCEEDED
    Compiler/pure_function_exists.php: SUCCEEDED
    Compiler/pure_math_str.php: SUCCEEDED
    Compiler/static_call.php: SUCCEEDED
    Compiler/switch.php: SUCCEEDED
    Compiler/ternary_ex.php: SUCCEEDED
    Compiler/this%20call.php: SUCCEEDED
    Compiler/typehint_check.php: SUCCEEDED
    Compiler/__call.php: SUCCEEDED
    Compiler/Inclusions/include2.php: SUCCEEDED
    Compiler/Inclusions/include3.php: SUCCEEDED
    Compiler/Inclusions/include6.php: SUCCEEDED
    Compiler/Inclusions/include_test.php: SUCCEEDED
    Compiler/Inclusions/script.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t01.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t02.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t03.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t04.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t05.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t08.php: SUCCEEDED
    Compiler/PseudoConst/parent.php: SUCCEEDED
    Compiler/PseudoConst/parent2.php: SUCCEEDED
    Compiler/PseudoConst/self.php: SUCCEEDED
    Compiler/PseudoConst/t01.php: SUCCEEDED
    Compiler/PseudoConst/t02.php: SUCCEEDED
    Compiler/PseudoConst/t03.php: SUCCEEDED
    Compiler/PseudoConst/t04.php: SUCCEEDED
    Compiler/PseudoConst/t05.php: SUCCEEDED
    Compiler/PseudoConst/t06.php: SUCCEEDED
    Compiler/PseudoConst/t07.php: SUCCEEDED
    Compiler/PseudoConst/t08.php: SUCCEEDED
    Compiler/PseudoConst/t09.php: SUCCEEDED
    Compiler/PseudoConst/t10.php: SUCCEEDED
    Compiler/PseudoConst/t11.php: SUCCEEDED
    Compiler/PseudoConst/_class_.php: SUCCEEDED
    Compiler/PseudoConst/_dir_.php: SUCCEEDED
    Compiler/PseudoConst/_function_.php: SUCCEEDED
    Compiler/References/array_argument.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(2)
        [1]=>
        int(3)
      }
    }
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    Compiler/References/array_local.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(2)
        [1]=>
        int(3)
      }
    }
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    Compiler/References/array_ret_argument.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(2)
        [1]=>
        int(3)
      }
    }
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    Compiler/References/array_ret_argument2.php: SUCCEEDED
    Compiler/References/deepcopy.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <br/><br/>globalobjects: array(2) {
      [0]=>
      int(1)
      [1]=>
      int(7)
    }
    <br/><br/>globalobjects: array(2) {
      [0]=>
      int(1)
      [1]=>
      &int(7)
    }
    Compiler/References/explicitclear.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Construyendo Y
    call foo12Destruyendo Y
    3object(X)#1 (2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      int(54)
    }
    array(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      string(10) "Init Value"
    }
    x: object(X)#1 (2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      int(1004)
    }
    <br/>checkpoint array(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      int(54)
    }
    Construyendo Y
    call foo123object(X)(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      &int(54)
    }
    array(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      &int(54)
    }
    x: object(X)(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      &int(1004)
    }
    <br/>checkpoint array(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      &int(1004)
    }
    Destruyendo Y
    Compiler/References/field_argument.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: int(7)
    <br/><br/>checkpoint array(1) {
      ["objects"]=>
      int(8)
    }
    x: int(7)
    <br/><br/>checkpoint array(1) {
      ["objects"]=>
      &int(7)
    }
    Compiler/References/field_local.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: object(X)#1 (1) {
      ["objects"]=>
      int(25)
    }
    <br/>checkpoint array(1) {
      ["objects"]=>
      int(7)
    }
    x: object(X)(1) {
      ["objects"]=>
      &int(25)
    }
    <br/>checkpoint array(1) {
      ["objects"]=>
      &int(25)
    }
    Compiler/References/ref_arrayitem.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(2)
        [1]=>
        int(3)
      }
    }
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    Compiler/References/ref_reasign.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    object(X)#1 (2) {
      ["objects"]=>
      int(54)
      ["objects2"]=>
      &int(222)
    }
    array(2) {
      ["objects"]=>
      int(7)
      ["objects2"]=>
      &int(222)
    }
    x: object(X)#1 (2) {
      ["objects"]=>
      int(1004)
      ["objects2"]=>
      int(777)
    }
    <br/>checkpoint array(2) {
      ["objects"]=>
      int(54)
      ["objects2"]=>
      int(222)
    }
    object(X)(2) {
      ["objects"]=>
      &int(54)
      ["objects2"]=>
      &int(222)
    }
    array(2) {
      ["objects"]=>
      &int(54)
      ["objects2"]=>
      &int(222)
    }
    x: object(X)(2) {
      ["objects"]=>
      &int(1004)
      ["objects2"]=>
      &int(777)
    }
    <br/>checkpoint array(2) {
      ["objects"]=>
      &int(1004)
      ["objects2"]=>
      &int(777)
    }
    Compiler/Unreachable/t13.php: SUCCEEDED
    Compiler/Unset/calluserfunc.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Warning: call_user_func() expects parameter 1 to be a valid callback, function 'unset' not found or invalid function name in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\Unset\__input.txt on line 3
    int(10)
    Error: call_user_func(): Call to undefined function: 'unset' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\Unset\__input.txt at expression on line 3, column 1.
    Compiler/Unset/issetref2.php: SUCCEEDED
    Compiler/Unset/unsetglobal.php: SUCCEEDED
    Compiler/Unset/unsetglobal2.php: SUCCEEDED
    Compiler/Unset/unsetindirect.php: SUCCEEDED
    Compiler/Unset/unsetproblem.php: SUCCEEDED
    Compiler/Unset/unsetref.php: SUCCEEDED
    Compiler/Unset/unsetref2.php: SUCCEEDED
    Compiler/Unset/unsetref3.php: SUCCEEDED
    Compiler/Unset/__unset.php: SUCCEEDED
    DateTime/strftime.php: SUCCEEDED
    DateTime/strtotime1.php: SUCCEEDED
    DateTime/strtotime2.php: SUCCEEDED
    DateTime/strtotime3.php: SUCCEEDED
    DateTime/strtotime4.php: SUCCEEDED
    DateTime/strtotime5.php: SUCCEEDED
    DateTime/time.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    -189388800:-189475200 - 86400
    1964-01-01T00:00:00+0000
    1963-12-31T00:00:00+0000
    1964-06-06
    1963-06-06
    1964-01-06
    1133305200
    -189388800:-189475200 - 86400
    1964-01-01T00:00:00+0000
    1963-12-31T00:00:00+0000
    1964-06-06
    1963-06-06
    1964-01-06
    DateTime/timezones1.php: SUCCEEDED
    FileSystem/basename.php: SUCCEEDED
    FileSystem/basename2.php: SUCCEEDED
    FileSystem/chdir.php: SUCCEEDED
    FileSystem/csv.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    --- write ---
    72
    24
    44
    2
    6
    
    --- read ---
    "hello\n
    world";"aaa""bbb""ccc";"blah blah;";none;"tab\ttab";"space space"\n
    hh'ee;"ss\nsadasdasd s"\n
    """""""""""""""""""""";"""";;"""""";"xxx"""\n
    x\n
    "x\y"\n
    --- write ---
    72
    24
    44
    2
    6
    
    --- read ---
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    FileSystem/date.php: SUCCEEDED
    FileSystem/date2.php: SUCCEEDED
    FileSystem/date3.php: SUCCEEDED
    FileSystem/date_unix.php: SUCCEEDED
    FileSystem/dirname.php: SUCCEEDED
    FileSystem/dirname2.php: SUCCEEDED
    FileSystem/disk_free_space.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    72 GB
    Drive C: 184 GB
    Drive D: 72 GB
    Drive E: 183 GB
    Drive F: 
    Warning: disk_free_space(): The parameter is incorrect.
     in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 14
    false
    72 GB
    Drive C: 184 GB
    Drive D: 72 GB
    Drive E: 183 GB
    Drive F: false
    FileSystem/disk_total_space.php: SUCCEEDED
    FileSystem/fgets.php: SUCCEEDED
    FileSystem/file.php: SUCCEEDED
    FileSystem/filesize.php: SUCCEEDED
    FileSystem/file_exists.php: SUCCEEDED
    FileSystem/file_get_contents.php: SUCCEEDED
    FileSystem/fpassthru.php: SUCCEEDED
    FileSystem/fread.php: SUCCEEDED
    FileSystem/fread1.php: SUCCEEDED
    FileSystem/fread2.php: SUCCEEDED
    FileSystem/fseek.php: SUCCEEDED
    FileSystem/fsockopen.php: SUCCEEDED
    FileSystem/ftell.php: SUCCEEDED
    FileSystem/is_dir.php: SUCCEEDED
    FileSystem/is_executable.php: SUCCEEDED
    FileSystem/pathinfo.php: SUCCEEDED
    FileSystem/popen.php: SUCCEEDED
    FileSystem/readdir.php: SUCCEEDED
    FileSystem/readfile.php: SUCCEEDED
    FileSystem/readline.php: SUCCEEDED
    FileSystem/realpath.php: SUCCEEDED
    FileSystem/scandir.php: SUCCEEDED
    FileSystem/stat.php: SUCCEEDED
    FileSystem/stream_context_set_option.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <pre>[ARRAY
      [STRING: "http"] => [ARRAY
        [STRING: "method"] => [STRING: "GET"]
        [STRING: "header"] => [STRING: "Accept-language: en
    Cookie: foo=bar
    "]
        [STRING: "op1"] => [STRING: "DIRECT"]
        [STRING: "op2"] => [STRING: "VIA STREAM"]
      ]
      [STRING: "other"] => [ARRAY
        [STRING: "method"] => [STRING: "otherGET"]
        [STRING: "header"] => [STRING: "otherAccept-language: en
    otherCookie: foo=bar
    "]
      ]
      [STRING: "file"] => [ARRAY
        [STRING: "method"] => [STRING: "otherGET"]
        [STRING: "header"] => [STRING: "otherAccept-language: en
    otherCookie: foo=bar
    "]
      ]
      [STRING: "wrap"] => [ARRAY
        [STRING: "op1"] => [STRING: "DIRECT"]
        [STRING: "op2"] => [STRING: "VIA STREAM"]
      ]
    ]</pre>
    <pre>[ARRAY
      [STRING: "http"] => [ARRAY
        [STRING: "method"] => [STRING: "GET"]
        [STRING: "header"] => [STRING: "Accept-language: en
    Cookie: foo=bar
    "]
        [STRING: "op1"] => [STRING: "DIRECT"]
        [STRING: "op2"] => [STRING: "VIA STREAM"]
      ]
      [STRING: "other"] => [ARRAY
        [STRING: "method"] => [STRING: "otherGET"]
        [STRING: "header"] => [STRING: "otherAccept-language: en
    otherCookie: foo=bar
    "]
      ]
      [STRING: "file"] => [ARRAY
        [STRING: "method"] => [STRING: "otherGET"]
        [STRING: "header"] => [STRING: "otherAccept-language: en
    otherCookie: foo=bar
    "]
      ]
      [STRING: "wrap"] => [ARRAY
        [STRING: "op1"] => [STRING: "DIRECT"]
        [STRING: "op2"] => [STRING: "VIA STREAM"]
      ]
    ]</pre>
    Error: Script 'D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem/fs.inc' inclusion failed. Cause: Script cannot be included with current configuration. Search paths: include_path is '.', working directory is 'D:\Documents\Projects\Phalanger\Main\Testing\Tests'  in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 3, column 1.
    FileSystem/stream_copy_to_stream.php: SUCCEEDED
    FileSystem/stream_copy_to_stream2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <p>Read <b>rb</b>, Write <b>wb</b>
    
    
    COPIED: <b>11645</b>
    <p>Read <b>rb</b>, Write <b>wt</b>
    
    
    COPIED: <b>11627</b>
    <p>Read <b>rb</b>, Write <b>wb</b>
    
    
    COPIED: <b>11609</b>
    <p>Read <b>rb</b>, Write <b>wt</b>
    
    
    COPIED: <b>11627</b>
    FileSystem/testinc.php: SUCCEEDED
    FileSystem/touch.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Warning: touch(): Utime failed: No such file or directory in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 8
    Sorry Could Not change modification time of touch.txt
    Warning: touch(): Utime failed: No such file or directory in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 14
    
    Warning: touch(): Utime failed: No such file or directory in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 16
    
    Warning: touch(): Utime failed: No such file or directory in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 17
    <pre>[ARRAY
      [INT (0)] => [STRING: "February 23, 2011; [10:54:00] (10h) ctime test.txt (1298454840)"]
      [INT (1)] => [STRING: "February 19, 2011; [22:06:05] (22h) mtime test.txt (1298149565)"]
      [INT (2)] => [STRING: "February 23, 2011; [10:54:00] (10h) ctime touch.txt (1298454840)"]
      [INT (3)] => [STRING: "February 19, 2011; [22:06:05] (22h) mtime touch.txt (1298149565)"]
      [INT (4)] => [STRING: "February 23, 2011; [10:54:00] (10h) atime touch.txt (1298454840)"]
      [INT (5)] => [STRING: "February 19, 2011; [22:06:05] (22h) mtime summer.txt (1298149565)"]
      [INT (6)] => [STRING: "February 19, 2011; [22:06:05] (22h) mtime winter.txt (1298149565)"]
    ]</pre>
    Warning: touch(): Unable to access (D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\touch.txt): Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 8, column 5.
    Sorry Could Not change modification time of touch.txt
    Warning: touch(): Unable to access (D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\touch.txt): Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 14, column 1.
    
    Warning: touch(): Unable to access (D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\winter.txt): Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 16, column 1.
    
    Warning: touch(): Unable to access (D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\summer.txt): Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 17, column 1.
    <pre>[ARRAY
      [INT (0)] => [STRING: "February 23, 2011; [11:54:00] (11h) ctime test.txt (1298458440)"]
      [INT (1)] => [STRING: "February 19, 2011; [23:06:05] (23h) mtime test.txt (1298153165)"]
      [INT (2)] => [STRING: "February 23, 2011; [11:54:00] (11h) ctime touch.txt (1298458440)"]
      [INT (3)] => [STRING: "February 19, 2011; [23:06:05] (23h) mtime touch.txt (1298153165)"]
      [INT (4)] => [STRING: "February 23, 2011; [11:54:00] (11h) atime touch.txt (1298458440)"]
      [INT (5)] => [STRING: "February 19, 2011; [23:06:05] (23h) mtime summer.txt (1298153165)"]
      [INT (6)] => [STRING: "February 19, 2011; [23:06:05] (23h) mtime winter.txt (1298153165)"]
    ]</pre>
    FileSystem/tar/tar_test.php: SUCCEEDED
    FileSystem/zip/zip.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    failed
    Error: Call to undefined function: 'zip_open' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\zip\__input.txt at expression on line 3, column 1.
    Math/abs.php: SUCCEEDED
    Math/atan2.php: SUCCEEDED
    Math/base_convert.php: SUCCEEDED
    Math/bindec.php: SUCCEEDED
    Math/ceil.php: SUCCEEDED
    Math/cos.php: SUCCEEDED
    Math/decbin.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <pre>
    [double: 2294967295]
    10001000110010100110101111111111
    [double: 4294967296]
    0
    [double: 8589934590]
    11111111111111111111111111111110
    [double: 8589934590]
    11111111111111111111111111111110
    [double: 8589934591]
    11111111111111111111111111111111
    [Int: 1000.000.000.000]
    11010100101001010001000000000000
    <hr>(-1, -5435, 2.14, 0, 26)
    11111111111111111111111111111111
    11111111111111111110101011000101
    10
    0
    11010 
    </pre>
    <pre>
    [???: 2294967295]
    10001000110010100110101111111111
    [???: 4294967296]
    0
    [???: 8589934590]
    11111111111111111111111111111110
    [???: 8589934590]
    11111111111111111111111111111110
    [???: 8589934591]
    11111111111111111111111111111111
    [Int: 1000.000.000.000]
    11010100101001010001000000000000
    <hr>(-1, -5435, 2.14, 0, 26)
    11111111111111111111111111111111
    11111111111111111110101011000101
    10
    0
    11010 
    </pre>
    Math/dechex.php: SUCCEEDED
    Math/decoct.php: SUCCEEDED
    Math/deg2rad.php: SUCCEEDED
    Math/exp.php: SUCCEEDED
    Math/floor.php: SUCCEEDED
    Math/fmod.php: SUCCEEDED
    Math/hexdec.php: SUCCEEDED
    Math/max.php: SUCCEEDED
    Math/min.php: SUCCEEDED
    Math/modulo_warn.php: SUCCEEDED
    Math/octdec.php: SUCCEEDED
    Math/pow.php: SUCCEEDED
    Math/rad2deg.php: SUCCEEDED
    Math/round.php: SUCCEEDED
    Math/sin.php: SUCCEEDED
    Math/sqrt.php: SUCCEEDED
    Math/tan.php: SUCCEEDED
    Math/uniqid.php: SUCCEEDED
    Misc/calendar_extension.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0
    0
    2375840
    0
    14
    32
    2
    There are 31 days in August 2003
    There are 28 days in February 2003
    There are 29 days in February 2004
    There are 31 days in December 2034
    1748326
    1748324
    374867
    0
    322f32322f35373633
    ebe120e7f9e5ef20e4faf9f1e2
    ebe120e7f9e5ef20e427faf9f1e2
    ebe120e7f9e5ef20e420e0ecf4e9ed20faf9f1e2
    ebe120e7f9e5ef20e42720e0ecf4e9ed20faf9f1e2
    eb22e120e7f9e5ef20e4faf9f122e2
    e12720e7f9e5ef20e4faf9f122e2
    e12720e7f9e5ef20e427faf9f122e2
    e12720e7f9e5ef20e420e0ecf4e9ed20faf9f122e2
    e12720e7f9e5ef20e42720e0ecf4e9ed20faf9f122e2
    Error: Call to undefined function: 'frenchtojd' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt at expression on line 2, column 1.
    Misc/fgetcsv%20%2327492.php: SUCCEEDED
    Misc/hash%20functions%20%2326667.php: SUCCEEDED
    Misc/ini_parse.php: SUCCEEDED
    Misc/json%20%2327838.php: SUCCEEDED
    Misc/lexer.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    T_INLINE_HTML
    311 '\r\n'
    T_OPEN_TAG
    368 '&lt;?'
    T_WHITESPACE
    371 ' \r\n\r\n'
    T_FINAL
    345 'final'
    T_WHITESPACE
    371 ' '
    T_CLASS
    353 'class'
    T_WHITESPACE
    371 ' '
    T_STRING
    307 'A'
    T_WHITESPACE
    371 ' \r\n'
        '{'
    T_WHITESPACE
    371 ' \r\n  '
    T_FUNCTION
    334 'function'
    T_WHITESPACE
    371 ' '
    T_STRING
    307 '__get'
        '('
    T_VARIABLE
    309 '$x'
        ')'
    T_WHITESPACE
    371 ' \r\n  '
        '{'
    T_WHITESPACE
    371 ' \r\n    '
    T_VARIABLE
    309 '$x'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_START_HEREDOC
    372 '&lt;&lt;&lt;EOOOOOOOOOOOOOOT\r\n'
    T_ENCAPSED_AND_WHITESPACE
    314 '         &lt;&lt;&lt;hello\r\nEOOOOOOOOOOOOOOt;\r\nEOOOOOOOOOOOOOT;\r\n'
    T_END_HEREDOC
    373 'EOOOOOOOOOOOOOOT'
        ';'
    T_WHITESPACE
    371 '\r\n\r\n    '
        '$'
    T_VARIABLE
    309 '$y'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_ARRAY
    360 'array'
    T_WHITESPACE
    371 ' '
        '('
    T_LNUMBER
    305 '1'
        ','
    T_DNUMBER
    306 '100000000000000'
        ','
    T_DNUMBER
    306 '999999999999999999999999999999999'
        ','
    T_STRING
    307 'true'
        ','
    T_STRING
    307 'false'
        ')'
        ';'
    T_WHITESPACE
    371 '\r\n    '
        '$'
        '{'
        '&quot;'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
    T_DOLLAR_OPEN_CURLY_BRACES
    374 '${'
        '$'
        '{'
    T_CONSTANT_ENCAPSED_STRING
    315 '&quot;xxx&quot;'
        '}'
        '}'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
        '&quot;'
        '}'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_LNUMBER
    305 '1'
        ';'
    T_WHITESPACE
    371 '\r\n    '
        '$'
        '{'
        '&quot;'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
    T_DOLLAR_OPEN_CURLY_BRACES
    374 '${'
        '$'
        '{'
        '&quot;'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
    T_VARIABLE
    309 '$x'
    T_ENCAPSED_AND_WHITESPACE
    314 '-&gt;$$'
    T_VARIABLE
    309 '$x0xx'
        '&quot;'
        '}'
        '}'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
        '&quot;'
        '}'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_LNUMBER
    305 '1'
        ';'
    T_WHITESPACE
    371 '\r\n  '
        '}'
    T_WHITESPACE
    371 ' \r\n'
        '}'
    T_WHITESPACE
    371 '\r\n\r\n'
    T_CLOSE_TAG
    370 '?&gt;'
    '
    '
        '&lt;?'
        ' 
    
    '
        'final'
        ' '
        'class'
        ' '
        'A'
        ' 
    '
        '{'
        ' 
      '
        'function'
        ' '
    259
    259 '
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt at expression on line 10, column 7.
    '
        '('
        '$x'
        ')'
        ' 
      '
        '{'
        ' 
        '
        '$x'
        ' '
        '='
        ' '
        '&lt;&lt;&lt;EOOOOOOOOOOOOOOT
    '
        '         &lt;&lt;&lt;'
        'hello'
        '
    '
        'EOOOOOOOOOOOOOOt;
    '
        'EOOOOOOOOOOOOOT;
    '
        'EOOOOOOOOOOOOOOT'
        ';'
        '
    
        '
        '$'
        '$y'
        ' '
        '='
        ' '
        'array'
        ' '
        '('
        '1'
        ','
        '100000000000000'
        ','
        '999999999999999999999999999999999'
        ','
    256
    256 '
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt at expression on line 10, column 7.
    '
        ','
    257
    257 '
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt at expression on line 10, column 7.
    '
        ')'
        ';'
        '
        '
        '$'
        '{'
        '&quot;'
        'x'
        '${'
        '$'
        '{'
    -29
    -29 '
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt at expression on line 10, column 7.
    '
        '}'
        '}'
        'x'
        '&quot;'
        '}'
        ' '
        '='
        ' '
        '1'
        ';'
        '
        '
        '$'
        '{'
        '&quot;'
        'x'
        '${'
        '$'
        '{'
        '&quot;'
        'x'
        '$x'
        '-&gt;'
        '$'
        '$'
        '$x0xx'
        '&quot;'
        '}'
        '}'
        'x'
        '&quot;'
        '}'
        ' '
        '='
        ' '
        '1'
        ';'
        '
      '
        '}'
        ' 
    '
        '}'
        '
    
    '
        '?&gt;'
    Misc/locale.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string(1) "C"
    double(1.54)
    double(Infinity)
    654564.145400
    Sat Saturday Apr April
    --------------
    string(19) "Danish_Denmark.1252"
    double(1.54)
    double(Infinity)
    654564,145400
    lo lordag apr april
    --------------
    string(25) "Czech_Czech Republic.1250"
    double(1.54)
    double(Infinity)
    654564,145400
    so sobota IV duben
    --------------
    string(1) "C"
    float(1.54)
    float(Infinity)
    654564.145400
    Sat Saturday Apr April
    --------------
    string(19) "Danish_Denmark.1252"
    float(1.54)
    float(Infinity)
    654564,145400
    lo lordag apr april
    --------------
    string(25) "Czech_Czech Republic.1250"
    float(1.54)
    float(Infinity)
    654564,145400
    so sobota 4 duben
    --------------
    Misc/output2.php: SUCCEEDED
    Misc/parse_url%20%2327377.php: SUCCEEDED
    Misc/parse_url_at_bug.php: SUCCEEDED
    Misc/stack_trace.php: FAILED
    Script hung upNo errorsSuccess
    Expected test outputReal script output
    Unhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---> System.IndexOutOfRangeException: Index was outside the bounds of the array.
       at PHP.Core.PhpStackFrame..ctor(ScriptContext context, StackFrame frame, FrameKinds kind)
       at PHP.Core.PhpStackTrace..ctor(ScriptContext context, StackTrace clrTrace)
       at PHP.Core.PhpStackTrace..ctor(ScriptContext context, Int32 skipFrames)
       at PHP.Library.Errors.Backtrace()
       at <stack_trace.inc>.<Script>.j(ScriptContext <context>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\stack_trace.inc:line 11
       at <stack_trace.inc>.<Script>.j(Object instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <stack_trace.inc>.<Script>.i(ScriptContext <context>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\stack_trace.inc:line 6
       at <stack_trace.inc>.<Script>.i(Object instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <^0>.<Global>.<?0>.h(ScriptContext <context>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt:line 14
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack, DTypeDesc caller)
       at PHP.Core.PhpCallback.InvokeInternal(Object[] args)
       at PHP.Core.PhpCallback.Invoke(Object[] args)
       at PHP.Library.PhpArrays.Map(DTypeDesc caller, PhpCallback map, PhpArray[] arrays)
       at <__input.txt>.<Script>.<Lambda>(ScriptContext <context>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt:line 4
       at <__input.txt>.<Script>.<Lambda>(Object instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <__input.txt>.<Script>.f(ScriptContext <context>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt:line 6
       at <__input.txt>.<Script>.f(Object instance, PhpStack stack)
       at <__input.txt>.<Script>.<Main>(ScriptContext <context>, Dictionary`2 <locals>, DObject , DTypeDesc , Boolean ) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt:line 18
       at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)
       at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)
       --- End of inner exception stack trace ---
       at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)
       at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)
       at <Global>.Run(String[] )
    
    Misc/str_getcsv%20%2326691.php: SUCCEEDED
    Misc/tokens.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    T_REQUIRE_ONCE = 258,
    T_REQUIRE = 259,
    T_EVAL = 260,
    T_INCLUDE_ONCE = 261,
    T_INCLUDE = 262,
    T_LOGICAL_OR = 263,
    T_LOGICAL_XOR = 264,
    T_LOGICAL_AND = 265,
    T_PRINT = 266,
    T_SR_EQUAL = 267,
    T_SL_EQUAL = 268,
    T_XOR_EQUAL = 269,
    T_OR_EQUAL = 270,
    T_AND_EQUAL = 271,
    T_MOD_EQUAL = 272,
    T_CONCAT_EQUAL = 273,
    T_DIV_EQUAL = 274,
    T_MUL_EQUAL = 275,
    T_MINUS_EQUAL = 276,
    T_PLUS_EQUAL = 277,
    T_BOOLEAN_OR = 278,
    T_BOOLEAN_AND = 279,
    T_IS_NOT_IDENTICAL = 280,
    T_IS_IDENTICAL = 281,
    T_IS_NOT_EQUAL = 282,
    T_IS_EQUAL = 283,
    T_IS_GREATER_OR_EQUAL = 284,
    T_IS_SMALLER_OR_EQUAL = 285,
    T_SR = 286,
    T_SL = 287,
    T_INSTANCEOF = 288,
    T_UNSET_CAST = 289,
    T_BOOL_CAST = 290,
    T_OBJECT_CAST = 291,
    T_ARRAY_CAST = 292,
    T_STRING_CAST = 293,
    T_DOUBLE_CAST = 294,
    T_INT_CAST = 295,
    T_DEC = 296,
    T_INC = 297,
    T_CLONE = 298,
    T_NEW = 299,
    T_EXIT = 300,
    T_IF = 301,
    T_ELSEIF = 302,
    T_ELSE = 303,
    T_ENDIF = 304,
    T_LNUMBER = 305,
    T_DNUMBER = 306,
    T_STRING = 307,
    T_STRING_VARNAME = 308,
    T_VARIABLE = 309,
    T_NUM_STRING = 310,
    T_INLINE_HTML = 311,
    T_CHARACTER = 312,
    T_BAD_CHARACTER = 313,
    T_ENCAPSED_AND_WHITESPACE = 314,
    T_CONSTANT_ENCAPSED_STRING = 315,
    T_ECHO = 316,
    T_DO = 317,
    T_WHILE = 318,
    T_ENDWHILE = 319,
    T_FOR = 320,
    T_ENDFOR = 321,
    T_FOREACH = 322,
    T_ENDFOREACH = 323,
    T_DECLARE = 324,
    T_ENDDECLARE = 325,
    T_AS = 326,
    T_SWITCH = 327,
    T_ENDSWITCH = 328,
    T_CASE = 329,
    T_DEFAULT = 330,
    T_BREAK = 331,
    T_CONTINUE = 332,
    T_GOTO = 333,
    T_FUNCTION = 334,
    T_CONST = 335,
    T_RETURN = 336,
    T_TRY = 337,
    T_CATCH = 338,
    T_THROW = 339,
    T_USE = 340,
    T_GLOBAL = 341,
    T_PUBLIC = 342,
    T_PROTECTED = 343,
    T_PRIVATE = 344,
    T_FINAL = 345,
    T_ABSTRACT = 346,
    T_STATIC = 347,
    T_VAR = 348,
    T_UNSET = 349,
    T_ISSET = 350,
    T_EMPTY = 351,
    T_HALT_COMPILER = 352,
    T_CLASS = 353,
    T_INTERFACE = 354,
    T_EXTENDS = 355,
    T_IMPLEMENTS = 356,
    T_OBJECT_OPERATOR = 357,
    T_DOUBLE_ARROW = 358,
    T_LIST = 359,
    T_ARRAY = 360,
    T_CLASS_C = 361,
    T_METHOD_C = 362,
    T_FUNC_C = 363,
    T_LINE = 364,
    T_FILE = 365,
    T_COMMENT = 366,
    T_DOC_COMMENT = 367,
    T_OPEN_TAG = 368,
    T_OPEN_TAG_WITH_ECHO = 369,
    T_CLOSE_TAG = 370,
    T_WHITESPACE = 371,
    T_START_HEREDOC = 372,
    T_END_HEREDOC = 373,
    T_DOLLAR_OPEN_CURLY_BRACES = 374,
    T_CURLY_OPEN = 375,
    T_PAAMAYIM_NEKUDOTAYIM = 376,
    T_DOUBLE_COLON = 376,
    T_NAMESPACE = 377,
    T_NS_C = 378,
    T_DIR = 379,
    T_NS_SEPARATOR = 380,
    T_INCLUDE = 129,
    T_INCLUDE_ONCE = 130,
    T_EVAL = 131,
    T_REQUIRE = 132,
    T_REQUIRE_ONCE = 133,
    T_LOGICAL_OR = 136,
    T_LOGICAL_XOR = 137,
    T_LOGICAL_AND = 138,
    T_PRINT = 139,
    T_PLUS_EQUAL = 140,
    T_MINUS_EQUAL = 141,
    T_MUL_EQUAL = 142,
    T_DIV_EQUAL = 143,
    T_CONCAT_EQUAL = 144,
    T_MOD_EQUAL = 145,
    T_AND_EQUAL = 146,
    T_OR_EQUAL = 147,
    T_XOR_EQUAL = 148,
    T_SL_EQUAL = 149,
    T_SR_EQUAL = 150,
    T_BOOLEAN_OR = 151,
    T_BOOLEAN_AND = 152,
    T_IS_EQUAL = 153,
    T_IS_NOT_EQUAL = 154,
    T_IS_IDENTICAL = 155,
    T_IS_NOT_IDENTICAL = 156,
    T_IS_SMALLER_OR_EQUAL = 157,
    T_IS_GREATER_OR_EQUAL = 158,
    T_SL = 159,
    T_SR = 160,
    T_INC = 161,
    T_DEC = 162,
    T_NEW = 164,
    T_INSTANCEOF = 165,
    T_CLONE = 167,
    T_LNUMBER = 168,
    T_DNUMBER = 170,
    T_STRING = 171,
    T_STRING_VARNAME = 172,
    T_VARIABLE = 173,
    T_NUM_STRING = 174,
    T_INLINE_HTML = 175,
    T_CHARACTER = 176,
    T_BAD_CHARACTER = 177,
    T_ENCAPSED_AND_WHITESPACE = 178,
    T_CONSTANT_ENCAPSED_STRING = 179,
    T_EXIT = 180,
    T_IF = 181,
    T_ELSEIF = 182,
    T_ELSE = 183,
    T_ENDIF = 184,
    T_ECHO = 185,
    T_DO = 186,
    T_WHILE = 187,
    T_ENDWHILE = 188,
    T_FOR = 189,
    T_ENDFOR = 190,
    T_FOREACH = 191,
    T_ENDFOREACH = 192,
    T_AS = 193,
    T_SWITCH = 194,
    T_ENDSWITCH = 195,
    T_CASE = 196,
    T_DEFAULT = 197,
    T_BREAK = 198,
    T_CONTINUE = 199,
    T_FUNCTION = 200,
    T_CONST = 201,
    T_RETURN = 202,
    T_GLOBAL = 203,
    T_STATIC = 204,
    T_VAR = 205,
    T_UNSET = 206,
    T_ISSET = 207,
    T_EMPTY = 208,
    T_CLASS = 209,
    T_EXTENDS = 210,
    T_OBJECT_OPERATOR = 211,
    T_DOUBLE_ARROW = 212,
    T_LIST = 213,
    T_ARRAY = 214,
    T_CLASS_C = 215,
    T_METHOD_C = 216,
    T_FUNC_C = 217,
    T_LINE = 218,
    T_FILE = 219,
    T_DIR = 220,
    T_COMMENT = 221,
    T_DOC_COMMENT = 222,
    T_OPEN_TAG = 227,
    T_OPEN_TAG_WITH_ECHO = 228,
    T_CLOSE_TAG = 229,
    T_WHITESPACE = 230,
    T_START_HEREDOC = 231,
    T_END_HEREDOC = 232,
    T_DOLLAR_OPEN_CURLY_BRACES = 233,
    T_CURLY_OPEN = 234,
    T_DOUBLE_COLON = 235,
    T_PAAMAYIM_NEKUDOTAYIM = 235,
    T_GOTO = 237,
    T_TRY = 238,
    T_CATCH = 239,
    T_THROW = 240,
    T_INTERFACE = 241,
    T_IMPLEMENTS = 242,
    T_ABSTRACT = 243,
    T_FINAL = 244,
    T_PRIVATE = 245,
    T_PROTECTED = 246,
    T_PUBLIC = 247,
    T_BOOL_CAST = 287,
    T_INT_CAST = 290,
    T_DOUBLE_CAST = 296,
    T_STRING_CAST = 299,
    T_ARRAY_CAST = 302,
    T_OBJECT_CAST = 303,
    T_UNSET_CAST = 304,
    T_HALT_COMPILER = 351,
    Misc/user_error_handlers.php: SUCCEEDED
    Objects/accessing%20property%20line%20number%20%2326052.php: SUCCEEDED
    Objects/conditional1.php: SUCCEEDED
    Objects/conditional2.php: SUCCEEDED
    Objects/conditional_base_class.php: SUCCEEDED
    Objects/constant_test.php: SUCCEEDED
    Objects/evaled_parent.php: SUCCEEDED
    Objects/getter_setter_bug28444.php: SUCCEEDED
    Objects/instanceof.php: SUCCEEDED
    Objects/new_via_unknown_ctor.php: SUCCEEDED
    Objects/object_creation_test.php: SUCCEEDED
    Objects/overrides%20%231285.php: SUCCEEDED
    Objects/static_field_test.php: SUCCEEDED
    Objects/static_inheritence.php: SUCCEEDED
    Objects/static_method_test.php: SUCCEEDED
    Objects/static_object_vars.php: SUCCEEDED
    Objects/sys_class_const.php: SUCCEEDED
    Objects/this2.php: SUCCEEDED
    RegEx/backreferences.php: SUCCEEDED
    RegEx/dolar_escape.php: SUCCEEDED
    RegEx/ereg.php: SUCCEEDED
    RegEx/namedbackref.php: SUCCEEDED
    RegEx/namedgroups.php: SUCCEEDED
    RegEx/preg_match_unmatched_groups.php: SUCCEEDED
    RegEx/preg_replace_eval.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ab"01300 as"00da sd"0asdsa das asd 11asd a1sd a
    ab"01300 as"00da sd"0(aasdasdkjask,$a,\,\l,a,s,d,a,s,d,k,j,a,s,${120})(ldjaklsdjalk,$l,\,\l,d,j,a,k,l,s,d,j,a,l,${120})djdsa das asd 11asd a1sd a
    ab"01300 as"00da sd"0asdsa das asd 11asd a1sd a
    ab"01300 as"00da sd"0(aasdasdkjask,$a,\,\l,a,s,d,a,s,d,k,j,,,${120})(ldjaklsdjalk,$l,\,\l,d,j,a,k,l,s,d,j,,,${120})djdsa das asd 11asd a1sd a
    RegEx/regexp-sql.php: SUCCEEDED
    RegEx/regexp_smiles.php: SUCCEEDED
    RegEx/Perl/cache.php: SUCCEEDED
    RegEx/Perl/grep1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      [3] => string(3) "1.5"
      [6] => string(5) "58.54"
    }
    Notice: preg_grep(): Array to string conversion in D:\Documents\Projects\Phalanger\Main\Testing\Tests\RegEx\Perl\__input.txt at expression on line 5, column 1.
    array(2) {
      [3]=>
      string(3) "1.5"
      [6]=>
      string(5) "58.54"
    }
    RegEx/Perl/grep2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Food  array
    (
      [0] => apple
      [1] => banana
      [2] => squid
      [3] => pear
    )
    Fruit array
    (
      [0] => apple
      [1] => banana
      [3] => pear
    )
    Food  Array
    (
        [0] => apple
        [1] => banana
        [2] => squid
        [3] => pear
    )
    Fruit Array
    (
        [0] => apple
        [1] => banana
        [3] => pear
    )
    RegEx/Perl/match1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array [empty]
    array
    (
      [0] => array
      (
        [0] => def
        [1] => 3
      )
    )
    Array
    (
    )
    Array
    (
        [0] => Array
        (
            [0] => def
            [1] => 3
        )
    
    )
    RegEx/Perl/match10.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    (
      [0] => 1231
      [1] => 1
      [2] => 23
      [3] => 1
    )
    Array
    (
        [0] => 1231
        [1] => 1
        [2] => 23
        [3] => 1
    )
    RegEx/Perl/match2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    (
      [0] => array
      (
        [0] => def
        [1] => 0
      )
    )
    Array
    (
        [0] => Array
        (
            [0] => def
            [1] => 0
        )
    
    )
    RegEx/Perl/match3.php: SUCCEEDED
    RegEx/Perl/match4.php: SUCCEEDED
    RegEx/Perl/match5.php: SUCCEEDED
    RegEx/Perl/match6.php: SUCCEEDED
    RegEx/Perl/match7.php: SUCCEEDED
    RegEx/Perl/match8.php: SUCCEEDED
    RegEx/Perl/match9.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    (
      [0] => 209.6.145.47 - - [22/Nov/2003:19:02:30 -0500] "GET /dir/doc.htm HTTP/1.0" 200 6776 "http://search.yahoo.com/search?p=key+words=UTF-8" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)"
      [1] => 209.6.145.47
      [2] => -
      [3] => -
      [4] => 22/Nov/2003:19:02:30 -0500
      [5] => GET
      [6] => /dir/doc.htm
      [7] => HTTP
      [8] => 1.0
      [9] => 200
      [10] => 6776
      [11] => "http://search.yahoo.com/search?p=key+words=UTF-8"
      [12] => "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)"
    )
    Array
    (
        [0] => 209.6.145.47 - - [22/Nov/2003:19:02:30 -0500] "GET /dir/doc.htm HTTP/1.0" 200 6776 "http://search.yahoo.com/search?p=key+words=UTF-8" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)"
        [1] => 209.6.145.47
        [2] => -
        [3] => -
        [4] => 22/Nov/2003:19:02:30 -0500
        [5] => GET
        [6] => /dir/doc.htm
        [7] => HTTP
        [8] => 1.0
        [9] => 200
        [10] => 6776
        [11] => "http://search.yahoo.com/search?p=key+words=UTF-8"
        [12] => "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)"
    )
    RegEx/Perl/match_all1.php: SUCCEEDED
    RegEx/Perl/match_all2.php: SUCCEEDED
    RegEx/Perl/match_all3.php: SUCCEEDED
    RegEx/Perl/match_all4.php: SUCCEEDED
    RegEx/Perl/match_dollar.php: SUCCEEDED
    RegEx/Perl/overflow.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string("kfkaj +j k45´┐Ż´┐Ż´┐Ż´┐Ż´┐Ż3#$%^&kjakfjkaj|kfj")
    string("kfkaj +j k45�����3#$%^&kjakfjkaj|kfj")
    RegEx/Perl/quote1.php: SUCCEEDED
    RegEx/Perl/quote2.php: SUCCEEDED
    RegEx/Perl/quote3.php: SUCCEEDED
    RegEx/Perl/replace1.php: SUCCEEDED
    RegEx/Perl/replace2.php: SUCCEEDED
    RegEx/Perl/replace3.php: SUCCEEDED
    RegEx/Perl/replace4.php: SUCCEEDED
    RegEx/Perl/replace5.php: SUCCEEDED
    RegEx/Perl/replace6.php: SUCCEEDED
    RegEx/Perl/replace7.php: SUCCEEDED
    RegEx/Perl/replace8.php: SUCCEEDED
    RegEx/Perl/replace9.php: SUCCEEDED
    RegEx/Perl/replace_callback1.php: SUCCEEDED
    RegEx/Perl/replace_callback2.php: SUCCEEDED
    RegEx/Perl/split1.php: SUCCEEDED
    RegEx/Perl/split2.php: SUCCEEDED
    RegEx/Perl/split3.php: SUCCEEDED
    RegEx/Perl/split4.php: SUCCEEDED
    RegEx/Perl/split5.php: SUCCEEDED
    RegEx/Perl/split6.php: SUCCEEDED
    RegEx/Perl/ungreedy.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    aaa
    a
    aaa
    
    a
    aa
    aaa
    aa
    aaa
    aaa
    a
    aaa
    a
    a
    aa
    aaa
    aa
    aaa
    RegEx/Perl/unsuccessful-preg_match_all.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0
    4
    1
    4
    0
    4
    1
    7
    RegEx/Perl/withoutdelimiters.php: SUCCEEDED
    SPL/ArrayAccess_offsetExists.php: SUCCEEDED
    SPL/Autoload_ctor.php: SUCCEEDED
    SPL/Autoload_extends.php: SUCCEEDED
    SPL/exceptions.php: SUCCEEDED
    Strings/addcslashes.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    \f\o\o\[ \]
    Issues a Warning:
    // echo addcslashes("zoo['.']", 'z..A');
    // output:  \zoo['\.']
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 4, column 1.
    
    Issues a Warning:
    // echo addcslashes("zoo['.']", 'z..A');
    // output:  \zoo['\.']
    Strings/addslashes.php: SUCCEEDED
    Strings/chunk_split.php: SUCCEEDED
    Strings/concat.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string(2) "ab"
    string(2) "ab"
    string(2) "ab"
    string(2) "ab"
    string(2) "ab"
    string(2) "aB"
    string(2) "Ab"
    string(2) "AB"
    string(2) "ab"
    string(2) "a1"
    string(2) "1b"
    string(2) "11"
    string(2) "ab"
    string(2) "aB"
    string(2) "Ab"
    string[binary](2) "\x41\x42"
    string(2) "ab"
    string(2) "ab"
    string(2) "ab"
    string(2) "ab"
    string(2) "ab"
    string(2) "aB"
    string(2) "Ab"
    string(2) "AB"
    string(2) "ab"
    string(2) "a1"
    string(2) "1b"
    string(2) "11"
    string(2) "ab"
    string[binary](2) "aB"
    string[binary](2) "Ab"
    string[binary](2) "AB"
    Strings/count_chars.php: SUCCEEDED
    Strings/crc32.php: SUCCEEDED
    Strings/crypt.php: SUCCEEDED
    Strings/crypt2.php: SUCCEEDED
    Strings/echo.php: SUCCEEDED
    Strings/explode.php: SUCCEEDED
    Strings/get_html_translation_table.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <hr>[&] => &amp;
    [>] => &gt;
    [<] => &lt;
    ["] => &quot;
    <hr>Hallo &amp; &lt;Frau&gt; &amp; Kr&iuml;&iquest;&frac12;mer
    <hr>[&] => &amp;
    [>] => &gt;
    [<] => &lt;
    ["] => &quot;
    <hr>Hallo &amp; &lt;Frau&gt; &amp; Kr�mer
    Strings/mb_strlen.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Call to undefined function mb_strlen() in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 4
    Error: Call to undefined function: 'mb_strlen' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 4, column 1.
    Strings/nl2br.php: SUCCEEDED
    Strings/pack.php: SUCCEEDED
    Strings/pos.php: SUCCEEDED
    Strings/runtime-quotes.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    fread = (x''y"z)
    fgets = (x''y"z)
    file[0] = (x''y"z)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    
    Warning: fopen(runtime-quotes2.txt): failed to open stream: Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 33
    
    Warning: fwrite() expects parameter 1 to be resource, boolean given in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 35
    fwrite = ()
    
    Warning: fputs() expects parameter 1 to be resource, boolean given in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 38
    fputs = ()
    
    Warning: fclose() expects parameter 1 to be resource, boolean given in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 41
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (x'y"z)
    fgets = (x'y"z)
    file[0] = (x'y"z)
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (a\'b"\\ca\)
    fgets = (a\'b"\\ca\'b"\\c)
    file[0] = (a\'b"\\ca\'b"\\c)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    e'e
    e''e
    e'e
    e'e
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    e'e
    e'e
    e'e
    e'e
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    fread = (x''y"z)
    fgets = (x''y"z)
    file[0] = (x''y"z)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    
    Warning: fopen(): Unable to access (D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\runtime-quotes2.txt): Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 33, column 3.
    
    Warning: Cannot convert boolean to resource implicitly in a call to function fwrite() in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 35, column 3.
    fwrite = ()
    
    Warning: Cannot convert boolean to resource implicitly in a call to function fputs() in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 38, column 3.
    fputs = ()
    
    Warning: Cannot convert boolean to resource implicitly in a call to function fclose() in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 41, column 3.
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (x'y"z)
    fgets = (x'y"z)
    file[0] = (x'y"z)
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (a\'b"\\ca\)
    fgets = (a\'b"\\ca\'b"\\c)
    file[0] = (a\'b"\\ca\'b"\\c)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    e'e
    e''e
    e'e
    e'e
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    e'e
    e'e
    e'e
    e'e
    Strings/sprintf.php: SUCCEEDED
    Strings/sprintf2.php: SUCCEEDED
    Strings/strtr.php: SUCCEEDED
    Strings/str_ireplace.php: SUCCEEDED
    Strings/str_replace.php: SUCCEEDED
    Strings/str_word_count.php: SUCCEEDED
    Strings/substr_operations.php: SUCCEEDED
    Strings/wordwrap.php: SUCCEEDED
    Variables/advanced_serialize.php: SUCCEEDED
    Variables/arguments.php: SUCCEEDED
    Variables/bitwise.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "00"
    string(2) "31"
    string(2) "31"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    0
    0
    0
    5
    0
    5
    40
    5
    45
    string(48) "000000000000000000000000000000000000000000000000"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(14) "31323331323331"
    string(2) "30"
    string(14) "31323331323331"
    string(16) "3635343635343536"
    string(2) "30"
    string(16) "3635343635343536"
    string(14) "337a5e8be43d7a"
    string(14) "00002130120201"
    string(48) "337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42"
    string(16) "347d598ce33a7e77"
    string(16) "0200243214040100"
    string(48) "367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42"
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "00"
    string(2) "31"
    string(2) "31"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    0
    -9223372036854775808
    -9223372036854775808
    -9223372036854775803
    0
    -9223372036854775803
    40
    5
    45
    string(48) "000000000000000000000000000000000000000000000000"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(14) "31323331323331"
    string(2) "30"
    string(14) "31323331323331"
    string(16) "3635343635343536"
    string(2) "30"
    string(16) "3635343635343536"
    string(14) "337a5e8be43d7a"
    string(14) "00002130120201"
    string(48) "337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42"
    string(16) "347d598ce33a7e77"
    string(16) "0200243214040100"
    string(48) "367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42"
    Variables/comparisons.php: SUCCEEDED
    Variables/constant.php: SUCCEEDED
    Variables/extract.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    EXTR_PREFIX_ALL
    integer(4)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
      'prefix_non_existent' => integer(1)
    }
    <hr>EXTR_PREFIX_INVALID
    integer(5)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => integer(2)
      'non_existent' => integer(1)
      'prefix_' => integer(1)
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => 'hello'
    }
    <hr>EXTR_PREFIX_SAME
    integer(3)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'non_existent' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>EXTR_PREFIX_IF_EXISTS
    integer(3)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>
    EXTR_PREFIX_ALL
    integer(4)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
      'prefix_non_existent' => integer(1)
    }
    <hr>EXTR_PREFIX_INVALID
    integer(2)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_ad' => integer(2)
      'prefix_non_existent' => integer(1)
    }
    <hr>EXTR_PREFIX_SAME
    integer(4)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'non_existent' => integer(1)
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>EXTR_PREFIX_IF_EXISTS
    integer(3)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>
    Variables/func_get_args.php: SUCCEEDED
    Variables/is_number.php: SUCCEEDED
    Variables/serialize.php: SUCCEEDED
    Variables/unserialize_objects.php: SUCCEEDED
    Variables/var_dumping.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Array
    (
        [0] => 1
        [1] => 
        [2] => 1
        [3] => 1.2
        [4] => 
        [5] => asdas
        [6] => Array
            (
                [0] => 1
            )
    
        [7] => stdClass Object
            (
            )
    
        [8] => Resource id #1
    )
    array(9) {
      [0]=>
      bool(true)
      [1]=>
      bool(false)
      [2]=>
      int(1)
      [3]=>
      float(1.2)
      [4]=>
      NULL
      [5]=>
      string(5) "asdas"
      [6]=>
      array(1) {
        [0]=>
        int(1)
      }
      [7]=>
      object(stdClass)#1 (0) {
      }
      [8]=>
      resource(1) of type (stream)
    }
    array (
      0 => true,
      1 => false,
      2 => 1,
      3 => 1.2,
      4 => NULL,
      5 => 'asdas',
      6 => 
      array (
        0 => 1,
      ),
      7 => 
      stdClass::__set_state(array(
      )),
      8 => NULL,
    )
    Array
    (
        [0] => 1
        [1] => 
        [2] => 1
        [3] => 1.2
        [4] => 
        [5] => asdas
        [6] => Array
        (
            [0] => 1
        )
    
        [7] => stdClass Object
        (
        )
    
        [8] => resource id #4
    
    )
    array(9) {
      [0]=>
      bool(true)
      [1]=>
      bool(false)
      [2]=>
      int(1)
      [3]=>
      float(1.2)
      [4]=>
      NULL
      [5]=>
      string(5) "asdas"
      [6]=>
      array(1) {
        [0]=>
        int(1)
      }
      [7]=>
      object(stdClass)(0) {
      }
      [8]=>
      resource(4) of type (stream)
    }
    array
    (
      '0' => true,
      '1' => false,
      '2' => 1,
      '3' => 1.2,
      '4' => NULL,
      '5' => 'asdas',
      '6' => array
      (
        '0' => 1
      ),
      '7' => class stdClass
      {
    
      },
      '8' => NULL
    )
    Xml/005.php: SUCCEEDED
    Xml/006.php: SUCCEEDED
    Xml/007.php: SUCCEEDED
    Xml/008.php: SUCCEEDED
    Xml/009.php: SUCCEEDED
    Xml/011.php: SUCCEEDED
    Xml/013.php: SUCCEEDED
    Xml/017.php: SUCCEEDED
    Xml/018.php: SUCCEEDED
    Xml/019.php: SUCCEEDED
    Xml/020.php: SUCCEEDED
    Xml/021.php: SUCCEEDED
    Xml/025.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
      'foo' => 'foobar'
    }
    array
    {
      'html' => 'http://www.w3.org/1999/xhtml'
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
    }
    array
    {
      'html' => 'http://www.w3.org/1999/xhtml'
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'foo' => 'foobar'
      'baz' => 'foobarbaz'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
    }
    array
    {
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
      'baz' => 'foobarbaz'
      'foo' => 'foobar'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
      'baz' => 'foobarbaz'
      'foo' => 'foobar'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
    }
    array
    {
    }
    Xml/026.php: SUCCEEDED
    Xml/027.php: SUCCEEDED
    Xml/028.php: SUCCEEDED
    Xml/029.php: SUCCEEDED
    Xml/030.php: SUCCEEDED
    Xml/032.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    FALSE
    FALSE
    FALSE
    TRUE
    TRUE
    TRUE
    Xml/033.php: SUCCEEDED
    Xml/bug26384.php: SUCCEEDED
    Xml/bug28721.php: SUCCEEDED
    Xml/bug28817.php: SUCCEEDED
    Xml/bug32615.php: SUCCEEDED
    Xml/bug33853.php: SUCCEEDED
    Xml/bug34276.php: SUCCEEDED
    Xml/bug35342.php: SUCCEEDED
    Xml/bug36756.php: SUCCEEDED
    Xml/bug37277.php: SUCCEEDED
    Xml/dom002.php: SUCCEEDED
    Xml/dom003.php: SUCCEEDED
    Xml/dom006.php: SUCCEEDED
    Xml/dom007.php: SUCCEEDED
    Xml/dom_set_attr_node.php: SUCCEEDED
    Xml/xmlhandler.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test begins
    <br/>
    <br/>test begins
    <br/>empty begins
    <br/>empty ends
    <br/>nocontent begins
    <br/>nocontent ends
    <br/>content begins
    <br/>empty begins
    <br/>empty ends
    <br/>empty begins
    <br/>empty ends
    <br/>content ends
    <br/>empty begins
    <br/>empty ends
    <br/>empty begins
    <br/>empty ends
    <br/>test ends
    <br/>Test ends
    <br/>
    <br/>
    Test begins
    <br/>
    <br/>
    Error: Call to undefined function: 'xml_parser_create' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Xml\__input.txt at expression on line 18, column 3.
    Xml/xslt001.php: SUCCEEDED
    Xml/xslt002.php: SUCCEEDED
    Xml/xslt003.php: SUCCEEDED
    Xml/xslt004.php: SUCCEEDED
    Xml/xslt005.php: SUCCEEDED
    Xml/xslt006.php: SUCCEEDED
    Xml/xslt007.php: SUCCEEDED
    Xml/xslt010.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test 10: EXSLT Support
      
      
      Test Date : 0001-12-31Z
        year                 : 1
        leap-year            : false
        month-in-year        : 12
        month-name           : December
        month-abbreviation   : Dec
        week-in-year         : 1
        day-in-year          : 365
        day-in-month         : 31
        day-of-week-in-month : 5
        day-in-week          : 2
        day-name             : Monday
        day-abbreviation     : Mon
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : 3000-01-31
        year                 : 3000
        leap-year            : false
        month-in-year        : 1
        month-name           : January
        month-abbreviation   : Jan
        week-in-year         : 5
        day-in-year          : 31
        day-in-month         : 31
        day-of-week-in-month : 5
        day-in-week          : 6
        day-name             : Friday
        day-abbreviation     : Fri
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : 2000-02-29
        year                 : 2000
        leap-year            : true
        month-in-year        : 2
        month-name           : February
        month-abbreviation   : Feb
        week-in-year         : 9
        day-in-year          : 60
        day-in-month         : 29
        day-of-week-in-month : 5
        day-in-week          : 3
        day-name             : Tuesday
        day-abbreviation     : Tue
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : 9990001-12-31Z
        year                 : 9990001
        leap-year            : false
        month-in-year        : 12
        month-name           : December
        month-abbreviation   : Dec
        week-in-year         : 1
        day-in-year          : 365
        day-in-month         : 31
        day-of-week-in-month : 5
        day-in-week          : 2
        day-name             : Monday
        day-abbreviation     : Mon
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : -0004-02-29
        year                 : -4
        leap-year            : true
        month-in-year        : 2
        month-name           : February
        month-abbreviation   : Feb
        week-in-year         : 9
        day-in-year          : 60
        day-in-month         : 29
        day-of-week-in-month : 5
        day-in-week          : 1
        day-name             : Sunday
        day-abbreviation     : Sun
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
    Test 10: EXSLT Support
    Warning: Cannot find a script or an extension object associated with namespace 'http://exslt.org/dates-and-times'. in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Xml\__input.txt at expression on line 14, column 3.
    
    Warning: Illegal string offset '-1' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Phalanger.inc at expression on line 7, column 6.
    Xml/xslt011.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test 11: php:function Support
    
    Warning: XSLTProcessor::transformToXml(): A PHP Object cannot be converted to a XPath-string in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Xml\__input.txt on line 18
    <?xml version="1.0"?>
    foobar - secondArg
    foobar - 
    this is from an external DomDocument
    from the Input Document
    static
    Test 11: php:function Support
    <?xml version="1.0" encoding="utf-8"?>foobar - secondArg
    foobar - 
    this is from an external DomDocument
    from the Input Document
    static
    not a DomNode object
    Xml/xslt012.php: SUCCEEDED
    ================================================ FILE: Testing/Tests/TestLogs/TestLog (1628).htm ================================================ PHP.NET Compiler test log

    PHP.NET Compiler test log

    (90%) 827 succeeded, 94 failed
    Test ResultCompiler error outputExpected test result
    @PHP/classes/array_access_001.php: SUCCEEDED
    @PHP/classes/array_access_002.php: SUCCEEDED
    @PHP/classes/array_access_003.php: SUCCEEDED
    @PHP/classes/array_access_004.php: SUCCEEDED
    @PHP/classes/array_access_005.php: SUCCEEDED
    @PHP/classes/array_access_006.php: SUCCEEDED
    @PHP/classes/array_access_007.php: SUCCEEDED
    @PHP/classes/array_access_008.php: SUCCEEDED
    @PHP/classes/array_access_009.php: SUCCEEDED
    @PHP/classes/array_access_010.php: SUCCEEDED
    @PHP/classes/array_access_011.php: SUCCEEDED
    @PHP/classes/array_access_013.php: SUCCEEDED
    @PHP/classes/assign_op_property_001.php: SUCCEEDED
    @PHP/classes/autoload_001.php: SUCCEEDED
    @PHP/classes/autoload_002.php: SUCCEEDED
    @PHP/classes/autoload_003.php: SUCCEEDED
    @PHP/classes/autoload_005.php: SUCCEEDED
    @PHP/classes/autoload_006.php: SUCCEEDED
    @PHP/classes/bug23951.php: SUCCEEDED
    @PHP/classes/bug24399.php: SUCCEEDED
    @PHP/classes/bug24445.php: SUCCEEDED
    @PHP/classes/bug26737.php: SUCCEEDED
    @PHP/classes/bug27468.php: SUCCEEDED
    @PHP/classes/bug27504.php: SUCCEEDED
    @PHP/classes/class_example.php: SUCCEEDED
    @PHP/classes/class_stdclass.php: SUCCEEDED
    @PHP/classes/clone_001.php: SUCCEEDED
    @PHP/classes/clone_002.php: SUCCEEDED
    @PHP/classes/clone_003.php: SUCCEEDED
    @PHP/classes/clone_004.php: SUCCEEDED
    @PHP/classes/clone_006.php: SUCCEEDED
    @PHP/classes/constants_scope_001.php: SUCCEEDED
    @PHP/classes/ctor_dtor.php: SUCCEEDED
    @PHP/classes/ctor_dtor_inheritance.php: SUCCEEDED
    @PHP/classes/ctor_name_clash.php: SUCCEEDED
    @PHP/classes/dereferencing_001.php: SUCCEEDED
    @PHP/classes/destructor_and_echo.php: SUCCEEDED
    @PHP/classes/destructor_and_references.php: SUCCEEDED
    @PHP/classes/destructor_inheritance.php: SUCCEEDED
    @PHP/classes/destructor_visibility_003.php: SUCCEEDED
    @PHP/classes/factory_001.php: SUCCEEDED
    @PHP/classes/factory_and_singleton_001.php: SUCCEEDED
    @PHP/classes/factory_and_singleton_002.php: SUCCEEDED
    @PHP/classes/final.php: SUCCEEDED
    @PHP/classes/incdec_property_001.php: SUCCEEDED
    @PHP/classes/incdec_property_002.php: SUCCEEDED
    @PHP/classes/incdec_property_003.php: SUCCEEDED
    @PHP/classes/incdec_property_004.php: SUCCEEDED
    @PHP/classes/inheritance.php: SUCCEEDED
    @PHP/classes/inheritance_002.php: SUCCEEDED
    @PHP/classes/interfaces_001.php: SUCCEEDED
    @PHP/classes/interface_construct.php: SUCCEEDED
    @PHP/classes/interface_doubled.php: SUCCEEDED
    @PHP/classes/interface_implemented.php: SUCCEEDED
    @PHP/classes/iterators_001.php: SUCCEEDED
    @PHP/classes/iterators_002.php: SUCCEEDED
    @PHP/classes/iterators_003.php: SUCCEEDED
    @PHP/classes/iterators_004.php: SUCCEEDED
    @PHP/classes/iterators_006.php: SUCCEEDED
    @PHP/classes/iterators_007.php: SUCCEEDED
    @PHP/classes/object_reference_001.php: SUCCEEDED
    @PHP/classes/private_001.php: SUCCEEDED
    @PHP/classes/private_002.php: SUCCEEDED
    @PHP/classes/private_003.php: SUCCEEDED
    @PHP/classes/private_003b.php: SUCCEEDED
    @PHP/classes/private_004.php: SUCCEEDED
    @PHP/classes/private_004b.php: SUCCEEDED
    @PHP/classes/private_005.php: SUCCEEDED
    @PHP/classes/private_005b.php: SUCCEEDED
    @PHP/classes/private_006.php: SUCCEEDED
    @PHP/classes/private_006b.php: SUCCEEDED
    @PHP/classes/private_007.php: SUCCEEDED
    @PHP/classes/private_007b.php: SUCCEEDED
    @PHP/classes/private_members.php: SUCCEEDED
    @PHP/classes/private_redeclare.php: SUCCEEDED
    @PHP/classes/protected_001.php: SUCCEEDED
    @PHP/classes/protected_001b.php: SUCCEEDED
    @PHP/classes/protected_002.php: SUCCEEDED
    @PHP/classes/serialize_001.php: SUCCEEDED
    @PHP/classes/singleton_001.php: SUCCEEDED
    @PHP/classes/static_properties_001.php: SUCCEEDED
    @PHP/classes/type_hinting_001.php: SUCCEEDED
    @PHP/classes/type_hinting_003.php: SUCCEEDED
    @PHP/classes/visibility_000c.php: SUCCEEDED
    @PHP/classes/visibility_001c.php: SUCCEEDED
    @PHP/classes/visibility_002c.php: SUCCEEDED
    @PHP/classes/visibility_003a.php: SUCCEEDED
    @PHP/classes/visibility_003c.php: SUCCEEDED
    @PHP/classes/visibility_004a.php: SUCCEEDED
    @PHP/classes/visibility_004b.php: SUCCEEDED
    @PHP/classes/visibility_004c.php: SUCCEEDED
    @PHP/classes/visibility_005.php: SUCCEEDED
    @PHP/classes/__call_001.php: SUCCEEDED
    @PHP/classes/__set_data_corrupt.php: SUCCEEDED
    @PHP/classes/__set__get_001.php: SUCCEEDED
    @PHP/classes/__set__get_004.php: SUCCEEDED
    @PHP/classes/__set__get_005.php: SUCCEEDED
    @PHP/date/bug17988.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2002-06-25 12:18:48
    2002-06-25 14:18:48
    2002-06-25 13:18:48
    2002-06-25 12:18:48
    2002-06-25 18:18:48
    2002-06-25 14:18:48
    2002-06-25 14:18:48
    2002-06-25 18:18:48
    2002-06-25 10:18:48
    2002-06-25 17:18:48
    2002-06-25 11:18:48
    2002-06-25 17:48:48
    2002-06-25 10:48:48
    2002-06-25 14:18:48
    2002-06-25 14:18:48
    2002-06-25 13:18:48
    2002-06-25 12:18:48
    2002-06-25 18:18:48
    2002-06-25 14:18:48
    2002-06-25 14:18:48
    2002-06-25 18:18:48
    2002-06-25 10:18:48
    2002-06-25 17:18:48
    2002-06-25 11:18:48
    2002-06-25 17:48:48
    2002-06-25 10:48:48
    @PHP/date/bug26317.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2003-11-19 17:20:42
    2003-11-19 17:20:42
    2003-11-19 17:20:42
    2003-11-19 16:20:42
    2003-11-19 16:20:42
    2003-11-19 16:20:42
    @PHP/date/bug26320.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2003-11-19 12:30:42
    2003-11-19 13:30:42
    2003-11-19 12:30:42
    2003-11-19 12:30:42
    @PHP/date/bug28088.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    The following line rightly shows the correct date time:
    04/04/04 2145
    But the following line fails to show the correct date time:
    04/03/04 2245
    The following line rightly shows the correct date time:
    04/04/04 2345
    But the following line fails to show the correct date time:
    04/04/04 0045
    @PHP/date/bug28599.php: SUCCEEDED
    @PHP/date/bug29150.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2005-06-19 22:00:00
    2005-06-20 00:00:00
    @PHP/date/bug29585.php: SUCCEEDED
    @PHP/date/bug29595.php: SUCCEEDED
    @PHP/date/bug33056.php: SUCCEEDED
    @PHP/date/bug33452.php: SUCCEEDED
    @PHP/date/bug33562.php: SUCCEEDED
    @PHP/date/bug33563.php: SUCCEEDED
    @PHP/date/bug33578.php: SUCCEEDED
    @PHP/date/bug33869.php: SUCCEEDED
    @PHP/date/bug34676.php: SUCCEEDED
    @PHP/date/bug34771.php: SUCCEEDED
    @PHP/date/bug35143.php: SUCCEEDED
    @PHP/date/bug35414.php: SUCCEEDED
    @PHP/date/bug35422.php: SUCCEEDED
    @PHP/date/bug35425.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    integer(42)
    integer(1)
    integer(1)
    integer(1)
    integer(1)
    integer(0)
    integer(0)
    integer(1)
    integer(1)
    integer(31)
    integer(1104537661)
    integer(6)
    integer(53)
    integer(5)
    integer(2005)
    integer(0)
    integer(3600)
    integer(292)
    integer(1)
    integer(1)
    integer(1)
    integer(1)
    integer(0)
    integer(0)
    integer(1)
    integer(1)
    integer(31)
    integer(1104559261)
    integer(6)
    integer(53)
    integer(5)
    integer(2005)
    integer(0)
    integer(-18000)
    @PHP/date/bug35456.php: SUCCEEDED
    @PHP/date/bug35624.php: SUCCEEDED
    @PHP/date/bug35630.php: SUCCEEDED
    @PHP/date/bug35699.php: SUCCEEDED
    @PHP/date/bug35705.php: SUCCEEDED
    @PHP/date/bug35885.php: SUCCEEDED
    @PHP/date/bug35887.php: SUCCEEDED
    @PHP/date/date.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    c: 2003-01-23T13:20:59+01:00
    r: Thu, 23 Jan 2003 13:20:59 +0100
    c: 2003-01-23T13:20:59+01:00
    r: Thu, 23 Jan 2003 13:20:59 +0100
    c: 2003-01-23T12:20:59+00:00
    r: Thu, 23 Jan 2003 12:20:59 +0000
    c: 2003-01-23T13:20:59+01:00
    r: Thu, 23 Jan 2003 13:20:59 +0100
    @PHP/date/date_create-1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\date\__input.txt on line 28
    SKIP
    @PHP/date/date_create-2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\date\__input.txt on line 6
    SKIP
    @PHP/date/date_default_timezone_get-3.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Europe/Prague
    America/Chicago
    Europe/Rome
    America/Chicago
    @PHP/date/date_modify-1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\date\__input.txt on line 6
    SKIP
    @PHP/date/date_modify-2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\date\__input.txt on line 6
    SKIP
    @PHP/date/default-timezone-1.php: SUCCEEDED
    @PHP/date/default-timezone-2.php: SUCCEEDED
    @PHP/date/format-negative-timestamp.php: SUCCEEDED
    @PHP/date/strtotime.php: SUCCEEDED
    @PHP/date/timezone-configuration.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    1119125744
    1119125744
    1119125744
    1119125744
    1119129344
    1119125744
    @PHP/doc_examples/test001.php: SUCCEEDED
    @PHP/doc_examples/test002.php: SUCCEEDED
    @PHP/doc_examples/test003.php: SUCCEEDED
    @PHP/doc_examples/test004.php: SUCCEEDED
    @PHP/doc_examples/test005.php: SUCCEEDED
    @PHP/doc_examples/test006.php: SUCCEEDED
    @PHP/doc_examples/test007.php: SUCCEEDED
    @PHP/doc_examples/test008.php: SUCCEEDED
    @PHP/doc_examples/test009.php: SUCCEEDED
    @PHP/doc_examples/test010.php: SUCCEEDED
    @PHP/doc_examples/test011.php: SUCCEEDED
    @PHP/doc_examples/test013.php: SUCCEEDED
    @PHP/doc_examples/test014.php: SUCCEEDED
    @PHP/doc_examples/test015.php: SUCCEEDED
    @PHP/doc_examples/test016.php: SUCCEEDED
    @PHP/doc_examples/test017.php: SUCCEEDED
    @PHP/doc_examples/test018.php: SUCCEEDED
    @PHP/doc_examples/test019.php: SUCCEEDED
    @PHP/doc_examples/test020.php: SUCCEEDED
    @PHP/doc_examples/test021.php: SUCCEEDED
    @PHP/doc_examples/test022.php: SUCCEEDED
    @PHP/doc_examples/test023.php: SUCCEEDED
    @PHP/doc_examples/test024.php: SUCCEEDED
    @PHP/doc_examples/test025.php: SUCCEEDED
    @PHP/doc_examples/test026.php: SUCCEEDED
    @PHP/doc_examples/test027.php: SUCCEEDED
    @PHP/doc_examples/test028.php: SUCCEEDED
    @PHP/doc_examples/test029.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ´┐Żauky
    �auky
    @PHP/doc_examples/test030.php: SUCCEEDED
    @PHP/doc_examples/test031.php: SUCCEEDED
    @PHP/doc_examples/test032.php: SUCCEEDED
    @PHP/doc_examples/test033.php: SUCCEEDED
    @PHP/doc_examples/test034.php: SUCCEEDED
    @PHP/doc_examples/test035.php: SUCCEEDED
    @PHP/doc_examples/test036.php: SUCCEEDED
    @PHP/doc_examples/test037.php: SUCCEEDED
    @PHP/doc_examples/test038.php: SUCCEEDED
    @PHP/doc_examples/test039.php: SUCCEEDED
    @PHP/doc_examples/test040.php: SUCCEEDED
    @PHP/doc_examples/test041.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    call_user_func():
    hello world!
    Strict Standards: call_user_func(): Non-static method MyClass::myCallbackMethod() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\doc_examples\__input.txt at expression on line 17, column 1.
    Hello World!Hello World!
    @PHP/doc_examples/test042.php: SUCCEEDED
    @PHP/doc_examples/test043.php: SUCCEEDED
    @PHP/doc_examples/test044.php: SUCCEEDED
    @PHP/doc_examples/test045.php: SUCCEEDED
    @PHP/doc_examples/test046.php: SUCCEEDED
    @PHP/doc_examples/test047.php: SUCCEEDED
    @PHP/doc_examples/test048.php: SUCCEEDED
    @PHP/doc_examples/test049.php: SUCCEEDED
    @PHP/doc_examples/test050.php: SUCCEEDED
    @PHP/doc_examples/test051.php: SUCCEEDED
    @PHP/doc_examples/test052.php: SUCCEEDED
    @PHP/doc_examples/test053.php: SUCCEEDED
    @PHP/doc_examples/test054.php: SUCCEEDED
    @PHP/doc_examples/test055.php: SUCCEEDED
    @PHP/doc_examples/test056.php: SUCCEEDED
    @PHP/doc_examples/test057.php: SUCCEEDED
    @PHP/doc_examples/test058.php: SUCCEEDED
    @PHP/doc_examples/test059.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    Deprecated: Assigning the return value of new by reference is deprecated in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\doc_examples\__input.txt on line 4
    NULL
    object(stdClass)#1 (0) {
    }
    NULL
    object(stdClass)(0) {
    }
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\doc_examples\__input.txt(4,5): warning PHP0181: Assigning the return value of new by reference is deprecated
    
    @PHP/doc_examples/test060.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    Deprecated: Assigning the return value of new by reference is deprecated in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\doc_examples\__input.txt on line 9
    Static object: NULL
    Static object: NULL
    
    Static object: NULL
    Static object: object(stdClass)#3 (1) {
      ["property"]=>
      int(1)
    }
    Static object: NULL
    Static object: NULL
    
    Static object: NULL
    Static object: object(stdClass)(1) {
      ["property"]=>
      int(1)
    }
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\doc_examples\__input.txt(9,9): warning PHP0181: Assigning the return value of new by reference is deprecated
    
    @PHP/doc_examples/test061.php: SUCCEEDED
    @PHP/doc_examples/test062.php: SUCCEEDED
    @PHP/doc_examples/test063.php: SUCCEEDED
    @PHP/doc_examples/test064.php: SUCCEEDED
    @PHP/doc_examples/test065.php: SUCCEEDED
    @PHP/doc_examples/test066.php: SUCCEEDED
    @PHP/doc_examples/test067.php: SUCCEEDED
    @PHP/doc_examples/test068.php: SUCCEEDED
    @PHP/doc_examples/test069.php: SUCCEEDED
    @PHP/doc_examples/test070.php: SUCCEEDED
    @PHP/doc_examples/test071.php: SUCCEEDED
    @PHP/doc_examples/test072.php: SUCCEEDED
    @PHP/doc_examples/test073.php: SUCCEEDED
    @PHP/doc_examples/test074.php: SUCCEEDED
    @PHP/doc_examples/test075.php: SUCCEEDED
    @PHP/doc_examples/test076.php: SUCCEEDED
    @PHP/doc_examples/test077.php: SUCCEEDED
    @PHP/doc_examples/test078.php: SUCCEEDED
    @PHP/doc_examples/test079.php: SUCCEEDED
    @PHP/doc_examples/test080.php: SUCCEEDED
    @PHP/doc_examples/test081.php: SUCCEEDED
    @PHP/doc_examples/test082.php: SUCCEEDED
    @PHP/doc_examples/test083.php: SUCCEEDED
    @PHP/doc_examples/test084.php: SUCCEEDED
    @PHP/doc_examples/test085.php: SUCCEEDED
    @PHP/doc_examples/test086.php: SUCCEEDED
    @PHP/doc_examples/test087.php: SUCCEEDED
    @PHP/doc_examples/test088.php: SUCCEEDED
    @PHP/doc_examples/test089.php: SUCCEEDED
    @PHP/doc_examples/test090.php: SUCCEEDED
    @PHP/doc_examples/test091.php: SUCCEEDED
    @PHP/doc_examples/test092.php: SUCCEEDED
    @PHP/doc_examples/test093.php: SUCCEEDED
    @PHP/doc_examples/test094.php: SUCCEEDED
    @PHP/doc_examples/test095.php: SUCCEEDED
    @PHP/doc_examples/test096.php: SUCCEEDED
    @PHP/doc_examples/test097.php: SUCCEEDED
    @PHP/doc_examples/test098.php: SUCCEEDED
    @PHP/doc_examples/test099.php: SUCCEEDED
    @PHP/doc_examples/test100.php: SUCCEEDED
    @PHP/doc_examples/test102.php: SUCCEEDED
    @PHP/doc_examples/test103.php: SUCCEEDED
    @PHP/doc_examples/test104.php: SUCCEEDED
    @PHP/doc_examples/test105.php: SUCCEEDED
    @PHP/doc_examples/test107.php: SUCCEEDED
    @PHP/doc_examples/test108.php: SUCCEEDED
    @PHP/doc_examples/test109.php: SUCCEEDED
    @PHP/doc_examples/test110.php: SUCCEEDED
    @PHP/doc_examples/test111.php: SUCCEEDED
    @PHP/doc_examples/test112.php: SUCCEEDED
    @PHP/doc_examples/test113.php: SUCCEEDED
    @PHP/doc_examples/test114.php: SUCCEEDED
    @PHP/doc_examples/test115.php: SUCCEEDED
    @PHP/doc_examples/test116.php: SUCCEEDED
    @PHP/doc_examples/test117.php: SUCCEEDED
    @PHP/doc_examples/test118.php: SUCCEEDED
    @PHP/doc_examples/test119.php: SUCCEEDED
    @PHP/doc_examples/test120.php: SUCCEEDED
    @PHP/doc_examples/test121.php: SUCCEEDED
    @PHP/doc_examples/test122.php: SUCCEEDED
    @PHP/doc_examples/test123.php: SUCCEEDED
    @PHP/doc_examples/test124.php: SUCCEEDED
    @PHP/doc_examples/test125.php: SUCCEEDED
    @PHP/doc_examples/test126.php: SUCCEEDED
    @PHP/doc_examples/test127.php: SUCCEEDED
    @PHP/doc_examples/test128.php: SUCCEEDED
    @PHP/doc_examples/test129.php: SUCCEEDED
    @PHP/doc_examples/test130.php: SUCCEEDED
    @PHP/doc_examples/test131.php: SUCCEEDED
    @PHP/doc_examples/test132.php: SUCCEEDED
    @PHP/doc_examples/test133.php: SUCCEEDED
    @PHP/doc_examples/test134.php: SUCCEEDED
    @PHP/doc_examples/test136.php: SUCCEEDED
    @PHP/doc_examples/test137.php: SUCCEEDED
    @PHP/doc_examples/test138.php: SUCCEEDED
    @PHP/doc_examples/test139.php: SUCCEEDED
    @PHP/doc_examples/test148.php: SUCCEEDED
    @PHP/doc_examples/test149.php: SUCCEEDED
    @PHP/doc_examples/test150.php: SUCCEEDED
    @PHP/doc_examples/test151.php: SUCCEEDED
    @PHP/doc_examples/test152.php: SUCCEEDED
    @PHP/doc_examples/test153.php: SUCCEEDED
    @PHP/doc_examples/test154.php: SUCCEEDED
    @PHP/doc_examples/test155.php: SUCCEEDED
    @PHP/doc_examples/test156.php: SUCCEEDED
    @PHP/doc_examples/test158.php: SUCCEEDED
    @PHP/lang/001.php: SUCCEEDED
    @PHP/lang/002.php: SUCCEEDED
    @PHP/lang/003.php: SUCCEEDED
    @PHP/lang/004.php: SUCCEEDED
    @PHP/lang/005.php: SUCCEEDED
    @PHP/lang/006.php: SUCCEEDED
    @PHP/lang/007.php: SUCCEEDED
    @PHP/lang/008.php: SUCCEEDED
    @PHP/lang/009.php: SUCCEEDED
    @PHP/lang/010.php: SUCCEEDED
    @PHP/lang/011.php: SUCCEEDED
    @PHP/lang/012.php: SUCCEEDED
    @PHP/lang/013.php: SUCCEEDED
    @PHP/lang/014.php: SUCCEEDED
    @PHP/lang/015.php: SUCCEEDED
    @PHP/lang/016.php: SUCCEEDED
    @PHP/lang/017.php: SUCCEEDED
    @PHP/lang/018.php: SUCCEEDED
    @PHP/lang/019.php: SUCCEEDED
    @PHP/lang/020.php: SUCCEEDED
    @PHP/lang/021.php: SUCCEEDED
    @PHP/lang/022.php: SUCCEEDED
    @PHP/lang/023.php: SUCCEEDED
    @PHP/lang/024.php: SUCCEEDED
    @PHP/lang/025.php: SUCCEEDED
    @PHP/lang/026.php: SUCCEEDED
    @PHP/lang/027.php: SUCCEEDED
    @PHP/lang/028.php: SUCCEEDED
    @PHP/lang/030.php: SUCCEEDED
    @PHP/lang/032.php: SUCCEEDED
    @PHP/lang/036.php: SUCCEEDED
    @PHP/lang/037.php: SUCCEEDED
    @PHP/lang/038.php: SUCCEEDED
    @PHP/lang/039.php: SUCCEEDED
    @PHP/lang/040.php: SUCCEEDED
    @PHP/lang/bison1.php: SUCCEEDED
    @PHP/lang/bug17115.php: SUCCEEDED
    @PHP/lang/bug18872.php: SUCCEEDED
    @PHP/lang/bug19943.php: SUCCEEDED
    @PHP/lang/bug20175.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    Deprecated: Assigning the return value of new by reference is deprecated in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\lang\__input.txt on line 110
    foo_static()
    foo_global()
    foo:1
    foo_static()
    foo:1
    bar_static()
    bar_global()
    bar:1
    bar_static()
    bar:1
    wow_static()
    wow_global()
    wow:1
    wow_static()
    wow:1
    oop_test()
    oop_static()
    oop_class()
    oop:1
    oop_static()
    oop:1
    oop_test()
    oop_static()
    oop:1
    foo_static()
    foo_global()
    foo:1
    foo_static()
    foo:1
    bar_static()
    bar_global()
    bar:1
    bar_static()
    bar_global()
    bar:2
    wow_static()
    wow_global()
    wow:1
    wow_static()
    wow:1
    oop_test()
    oop_static()
    oop_class()
    oop:1
    oop_static()
    oop:1
    oop_test()
    oop_static()
    oop:1
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\lang\__input.txt(110,4): warning PHP0181: Assigning the return value of new by reference is deprecated
    
    @PHP/lang/bug21094.php: SUCCEEDED
    @PHP/lang/bug21600.php: SUCCEEDED
    @PHP/lang/bug21669.php: SUCCEEDED
    @PHP/lang/bug21849.php: SUCCEEDED
    @PHP/lang/bug21961.php: SUCCEEDED
    @PHP/lang/bug22231.php: SUCCEEDED
    @PHP/lang/bug22367.php: SUCCEEDED
    @PHP/lang/bug22510.php: SUCCEEDED
    @PHP/lang/bug22592.php: SUCCEEDED
    @PHP/lang/bug22690.php: SUCCEEDED
    @PHP/lang/bug23279.php: SUCCEEDED
    @PHP/lang/bug23384.php: SUCCEEDED
    @PHP/lang/bug23489.php: SUCCEEDED
    @PHP/lang/bug23524.php: SUCCEEDED
    @PHP/lang/bug23922.php: SUCCEEDED
    @PHP/lang/bug24054.php: SUCCEEDED
    @PHP/lang/bug24396.php: SUCCEEDED
    @PHP/lang/bug24403.php: SUCCEEDED
    @PHP/lang/bug24436.php: SUCCEEDED
    @PHP/lang/bug24499.php: SUCCEEDED
    @PHP/lang/bug24640.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    double(1700000000000000089258092433847514422797596587883870563356951996370064178581143932836831337636761368874297554515902592900802289500112731978596146714137401870842258241575178866354311397451139753100927220499450359906637902366244989496126909662726242240784739940994096632824796638102733857671280980918272.0000000000)
    1.7E+300
    
    ------
    double(0.0000000000)
    1.7E-300
    
    ------
    double(17000000000000001584208052028780237480128823455860622330108867175329927830437888.0000000000)
    1.7E+79
    
    ------
    double(0.0000000000)
    1.7E-79
    
    ------
    double(169999999999999996096025832433329868941658043870400163508258284150340918121070592.0000000000)
    1.7E+80
    
    ------
    double(0.0000000000)
    1.7E-80
    
    ------
    double(1700000000000000013616404158611892038375594280539217794530130541777964808366194688.0000000000)
    1.7E+81
    
    ------
    double(0.0000000000)
    1.7E-81
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    1.6999810742106E-319
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    1.7000798873397E-320
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    1.6995858216939E-321
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    0
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    0
    
    ------
    double(1700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+300
    
    ------
    double(0.0000000000)
    1.70000000000003E-300
    
    ------
    double(17000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+79
    
    ------
    double(0.0000000000)
    1.70000000000001E-79
    
    ------
    double(170000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+80
    
    ------
    double(0.0000000000)
    1.70000000000001E-80
    
    ------
    double(1700000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+81
    
    ------
    double(0.0000000000)
    1.70000000000001E-81
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    1.69998107421056E-319
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    1.70007988733973E-320
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    1.69464516523548E-321
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    0
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    0
    
    ------
    @PHP/lang/bug24652.php: SUCCEEDED
    @PHP/lang/bug24658.php: SUCCEEDED
    @PHP/lang/bug24783.php: SUCCEEDED
    @PHP/lang/bug24926.php: SUCCEEDED
    @PHP/lang/bug25547.php: SUCCEEDED
    @PHP/lang/bug25652.php: SUCCEEDED
    @PHP/lang/bug25922.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Undefined index here: 'error'
    Undefined index here: ''
    @PHP/lang/bug26182.php: SUCCEEDED
    @PHP/lang/bug26696.php: SUCCEEDED
    @PHP/lang/bug26866.php: SUCCEEDED
    @PHP/lang/bug26869.php: SUCCEEDED
    @PHP/lang/bug27354.php: SUCCEEDED
    @PHP/lang/bug27439.php: SUCCEEDED
    @PHP/lang/bug27535.php: SUCCEEDED
    @PHP/lang/bug28213.php: SUCCEEDED
    @PHP/lang/bug28800.php: SUCCEEDED
    @PHP/lang/bug29566.php: SUCCEEDED
    @PHP/lang/bug29893.php: SUCCEEDED
    @PHP/lang/bug29944.php: SUCCEEDED
    @PHP/lang/bug30638.php: SUCCEEDED
    @PHP/lang/bug30726.php: SUCCEEDED
    @PHP/lang/bug30862.php: SUCCEEDED
    @PHP/lang/bug32924.php: SUCCEEDED
    @PHP/lang/bug35382.php: SUCCEEDED
    @PHP/lang/bug7515.php: SUCCEEDED
    @PHP/lang/each_binary_safety.php: SUCCEEDED
    @PHP/lang/error_2_exception_001.php: SUCCEEDED
    @PHP/lang/foreach_with_object_001.php: SUCCEEDED
    @PHP/lang/foreach_with_references_001.php: SUCCEEDED
    @PHP/lang/type_hints_001.php: SUCCEEDED
    @PHP/standard/array/001.php: SUCCEEDED
    @PHP/standard/array/003.php: SUCCEEDED
    @PHP/standard/array/004.php: SUCCEEDED
    @PHP/standard/array/005.php: SUCCEEDED
    @PHP/standard/array/008.php: SUCCEEDED
    @PHP/standard/array/array_change_key_case.php: SUCCEEDED
    @PHP/standard/array/array_chunk.php: SUCCEEDED
    @PHP/standard/array/array_count_values.php: SUCCEEDED
    @PHP/standard/array/array_diff_1.php: SUCCEEDED
    @PHP/standard/array/array_diff_key.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ------ Test 1 --------
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 2 --------
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 3 --------
    array(6) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [2]=>
      int(4)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [2]=>
      int(4)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 4 --------
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 5 --------
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 6 --------
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 7 --------
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    ------ Test 8 --------
    array(6) {
      [0]=>
      int(0)
      [7]=>
      int(14)
      [2]=>
      int(4)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [0]=>
      int(0)
      [7]=>
      int(14)
      [2]=>
      int(4)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 9 --------
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    ------ Test 1 --------
    array(4) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(4) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 2 --------
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 3 --------
    array(6) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [2]=>
      &int(4)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [2]=>
      &int(4)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 4 --------
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 5 --------
    array(4) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(4) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 6 --------
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 7 --------
    array(3) {
      [7]=>
      &int(14)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
    }
    array(3) {
      [7]=>
      &int(14)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
    }
    ------ Test 8 --------
    array(6) {
      [0]=>
      &int(0)
      [7]=>
      &int(14)
      [2]=>
      &int(4)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [0]=>
      &int(0)
      [7]=>
      &int(14)
      [2]=>
      &int(4)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 9 --------
    array(3) {
      [7]=>
      &int(14)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
    }
    array(3) {
      [7]=>
      &int(14)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
    }
    @PHP/standard/array/array_intersect_key.php: SUCCEEDED
    @PHP/standard/array/array_sum.php: SUCCEEDED
    @PHP/standard/array/array_walk_recursive.php: SUCCEEDED
    @PHP/standard/array/bug12776.php: SUCCEEDED
    @PHP/standard/array/bug14580.php: SUCCEEDED
    @PHP/standard/array/bug20381.php: SUCCEEDED
    @PHP/standard/array/bug20865.php: SUCCEEDED
    @PHP/standard/array/bug21182.php: SUCCEEDED
    @PHP/standard/array/bug21918.php: SUCCEEDED
    @PHP/standard/array/bug21998.php: SUCCEEDED
    @PHP/standard/array/bug22088.php: SUCCEEDED
    @PHP/standard/array/bug22463.php: SUCCEEDED
    @PHP/standard/array/bug23581.php: SUCCEEDED
    @PHP/standard/array/bug23788.php: SUCCEEDED
    @PHP/standard/array/bug24198.php: SUCCEEDED
    @PHP/standard/array/bug24220.php: SUCCEEDED
    @PHP/standard/array/bug24766.php: SUCCEEDED
    @PHP/standard/array/bug24897.php: SUCCEEDED
    @PHP/standard/array/bug24980.php: SUCCEEDED
    @PHP/standard/array/bug25359.php: SUCCEEDED
    @PHP/standard/array/bug25708.php: SUCCEEDED
    @PHP/standard/array/bug25758.php: SUCCEEDED
    @PHP/standard/array/bug26458.php: SUCCEEDED
    @PHP/standard/array/bug28974.php: SUCCEEDED
    @PHP/standard/array/bug29493.php: SUCCEEDED
    @PHP/standard/array/bug30266.php: SUCCEEDED
    @PHP/standard/array/bug30833.php: SUCCEEDED
    @PHP/standard/array/bug31158.php: SUCCEEDED
    @PHP/standard/array/bug31213.php: SUCCEEDED
    @PHP/standard/array/bug32021.php: SUCCEEDED
    @PHP/standard/array/bug33382.php: SUCCEEDED
    @PHP/standard/array/bug33989.php: SUCCEEDED
    @PHP/standard/array/bug34227.php: SUCCEEDED
    @PHP/standard/array/bug34982.php: SUCCEEDED
    @PHP/standard/array/bug35014.php: SUCCEEDED
    @PHP/standard/array/bug35022.php: SUCCEEDED
    @PHP/standard/array/bug35821.php: SUCCEEDED
    @PHP/standard/array/count_recursive.php: SUCCEEDED
    @PHP/standard/array/locale_sort.php: SUCCEEDED
    @PHP/standard/array/range.php: SUCCEEDED
    @PHP/standard/assert/assert.php: SUCCEEDED
    @PHP/standard/general_functions/001.php: SUCCEEDED
    @PHP/standard/general_functions/002.php: SUCCEEDED
    @PHP/standard/general_functions/003.php: SUCCEEDED
    @PHP/standard/general_functions/004.php: SUCCEEDED
    @PHP/standard/general_functions/005.php: SUCCEEDED
    @PHP/standard/general_functions/006.php: SUCCEEDED
    @PHP/standard/general_functions/007.php: SUCCEEDED
    @PHP/standard/general_functions/009.php: SUCCEEDED
    @PHP/standard/general_functions/bug25038.php: SUCCEEDED
    @PHP/standard/general_functions/bug27678.php: SUCCEEDED
    @PHP/standard/general_functions/bug29038.php: SUCCEEDED
    @PHP/standard/general_functions/bug31190.php: SUCCEEDED
    @PHP/standard/general_functions/bug32647.php: SUCCEEDED
    @PHP/standard/general_functions/bug35229.php: SUCCEEDED
    @PHP/standard/general_functions/is_resource.php: SUCCEEDED
    @PHP/standard/math/abs.php: SUCCEEDED
    @PHP/standard/math/bug24142.php: SUCCEEDED
    @PHP/standard/math/bug25694.php: SUCCEEDED
    @PHP/standard/math/bug27646.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    double(INF-INF)
    'd:-INF;'
    double(INF-INF)
    double(INF-INF)
    'd:INF;'
    double(INF-INF)
    double(NaNInfini)
    'd:NAN;'
    double(NaNInfini)
    double(-Infinity)
    'd:-INF;'
    double(-Infinity)
    double(Infinity)
    'd:INF;'
    double(Infinity)
    double(NaN)
    'd:NAN;'
    double(NaN)
    @PHP/standard/math/bug30069.php: SUCCEEDED
    @PHP/standard/math/bug30695.php: SUCCEEDED
    @PHP/standard/math/floorceil.php: SUCCEEDED
    @PHP/standard/math/hexdec.php: SUCCEEDED
    @PHP/standard/math/log.php: SUCCEEDED
    @PHP/standard/math/pow.php: SUCCEEDED
    @PHP/standard/math/round.php: SUCCEEDED
    @PHP/standard/reg/001.php: SUCCEEDED
    @PHP/standard/reg/002.php: SUCCEEDED
    @PHP/standard/reg/003.php: SUCCEEDED
    @PHP/standard/reg/004.php: SUCCEEDED
    @PHP/standard/reg/005.php: SUCCEEDED
    @PHP/standard/reg/006.php: SUCCEEDED
    @PHP/standard/reg/007.php: SUCCEEDED
    @PHP/standard/reg/008.php: SUCCEEDED
    @PHP/standard/reg/009.php: SUCCEEDED
    @PHP/standard/reg/010.php: SUCCEEDED
    @PHP/standard/reg/011.php: SUCCEEDED
    @PHP/standard/reg/012.php: SUCCEEDED
    @PHP/standard/reg/013.php: SUCCEEDED
    @PHP/standard/reg/014.php: SUCCEEDED
    @PHP/standard/reg/015.php: SUCCEEDED
    @PHP/standard/reg/016.php: SUCCEEDED
    @PHP/standard/serialize/001.php: SUCCEEDED
    @PHP/standard/serialize/002.php: SUCCEEDED
    @PHP/standard/serialize/003.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    d:100;
    double(100.0000000000)
    
    d:51999999999999996980101120;
    double(51999999999999996980101120.0000000000)
    
    d:8.9999999999999995265585574287341141808127531476202420890331268310546875E-9;
    double(0.0000000090)
    d:100;
    double(100.0000000000)
    
    d:5.2000000000000006E+25;
    double(52000000000000000000000000.0000000000)
    
    d:9.0000000000000045E-09;
    double(0.0000000090)
    @PHP/standard/serialize/004.php: SUCCEEDED
    @PHP/standard/serialize/005.php: SUCCEEDED
    @PHP/standard/serialize/006.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    'O:3:"´┐Ż":1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    object
    {
      '´┐Ż' => '´┐Ż'
    }
    'a:1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    array
    {
      '´┐Ż' => '´┐Ż'
    }
    'O:3:"´┐Ż":1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    object
    {
      'ďż˝' => '´┐Ż'
    }
    'a:1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    array
    {
      'ďż˝' => '´┐Ż'
    }
    @PHP/standard/serialize/bug14293.php: SUCCEEDED
    @PHP/standard/serialize/bug21957.php: SUCCEEDED
    @PHP/standard/serialize/bug23298.php: SUCCEEDED
    @PHP/standard/serialize/bug24063.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0.1 0.1
    0.01 0.01
    0.001 0.001
    0.0001 0.0001
    1.0E-5 1.0E-5
    1.0E-6 1.0E-6
    1.0E-7 1.0E-7
    1.0E-8 1.0E-8
    1.0E-9 1.0E-9
    0.1 0.1
    0.01 0.01
    0.001 0.001
    0.0001 0.0001
    1E-05 1E-05
    1E-06 1E-06
    1E-07 1E-07
    1E-08 1E-08
    1E-09 1E-09
    @PHP/standard/serialize/bug25378.php: SUCCEEDED
    @PHP/standard/serialize/bug26762.php: SUCCEEDED
    @PHP/standard/serialize/bug27469.php: SUCCEEDED
    @PHP/standard/serialize/bug28325.php: SUCCEEDED
    @PHP/standard/serialize/bug30234.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    FALSE
    FALSE
    __autoload(Autoload_Implements)
    object [invalid]
    FALSE
    FALSE
    FALSE
    FALSE
    TRUE
    __autoload(Autoload_Implements)
    object [invalid]
    FALSE
    FALSE
    TRUE
    @PHP/standard/serialize/bug31402.php: SUCCEEDED
    @PHP/standard/serialize/bug31442.php: SUCCEEDED
    @PHP/standard/strings/add-and-stripcslashes.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    kaboemkara!
    foo\b\a\r\b\az
    \f\o\o\[ \]
    \zoo['\.']
    \abcd\e\f\g\h\i\j\k\l\m\n\o\pqrstuvwxy\z
    1
    5d
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\standard\strings\__input.txt at expression on line 3, column 1.
    
    kaboemkara!
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\standard\strings\__input.txt at expression on line 5, column 1.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\standard\strings\__input.txt at expression on line 6, column 1.
    
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\standard\strings\__input.txt at expression on line 8, column 1.
    
    1
    5d
    @PHP/standard/strings/add-and-stripslashes.php: SUCCEEDED
    @PHP/standard/strings/basename.php: SUCCEEDED
    @PHP/standard/strings/bin2hex.php: SUCCEEDED
    @PHP/standard/strings/bug20108.php: SUCCEEDED
    @PHP/standard/strings/bug20169.php: SUCCEEDED
    @PHP/standard/strings/bug20261.php: SUCCEEDED
    @PHP/standard/strings/bug20927.php: SUCCEEDED
    @PHP/standard/strings/bug21338.php: SUCCEEDED
    @PHP/standard/strings/bug21453.php: SUCCEEDED
    @PHP/standard/strings/bug21730.php: SUCCEEDED
    @PHP/standard/strings/bug21744.php: SUCCEEDED
    @PHP/standard/strings/bug22008.php: SUCCEEDED
    @PHP/standard/strings/bug22187.php: SUCCEEDED
    @PHP/standard/strings/bug22224.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      0 => 
      object
      {
      }
      1 => 
      object
      {
      }
    }
    @PHP/standard/strings/bug22227.php: SUCCEEDED
    @PHP/standard/strings/bug22904.php: SUCCEEDED
    @PHP/standard/strings/bug23650.php: SUCCEEDED
    @PHP/standard/strings/bug23894.php: SUCCEEDED
    @PHP/standard/strings/bug24098.php: SUCCEEDED
    @PHP/standard/strings/bug24208.php: SUCCEEDED
    @PHP/standard/strings/bug24281.php: SUCCEEDED
    @PHP/standard/strings/bug25671.php: SUCCEEDED
    @PHP/standard/strings/bug25707.php: SUCCEEDED
    @PHP/standard/strings/bug26878.php: SUCCEEDED
    @PHP/standard/strings/bug26973.php: SUCCEEDED
    @PHP/standard/strings/bug27276.php: SUCCEEDED
    @PHP/standard/strings/bug27278.php: SUCCEEDED
    @PHP/standard/strings/bug27295.php: SUCCEEDED
    @PHP/standard/strings/bug27457.php: SUCCEEDED
    @PHP/standard/strings/bug27675.php: SUCCEEDED
    @PHP/standard/strings/bug28386.php: SUCCEEDED
    @PHP/standard/strings/bug33076.php: SUCCEEDED
    @PHP/standard/strings/chr_ord.php: SUCCEEDED
    @PHP/standard/strings/chunk_split.php: SUCCEEDED
    @PHP/standard/strings/count_chars.php: SUCCEEDED
    @PHP/standard/strings/crc32.php: SUCCEEDED
    @PHP/standard/strings/explode.php: SUCCEEDED
    @PHP/standard/strings/implode.php: SUCCEEDED
    @PHP/standard/strings/md5.php: SUCCEEDED
    @PHP/standard/strings/md5raw.php: SUCCEEDED
    @PHP/standard/strings/nl2br.php: SUCCEEDED
    @PHP/standard/strings/sha1.php: SUCCEEDED
    @PHP/standard/strings/sha1raw.php: SUCCEEDED
    @PHP/standard/strings/sprintf_f.php: SUCCEEDED
    @PHP/standard/strings/strcspn.php: SUCCEEDED
    @PHP/standard/strings/strings001.php: SUCCEEDED
    @PHP/standard/strings/strpos.php: SUCCEEDED
    @PHP/standard/strings/strrev.php: SUCCEEDED
    @PHP/standard/strings/strripos.php: SUCCEEDED
    @PHP/standard/strings/strrpos.php: SUCCEEDED
    @PHP/standard/strings/strspn.php: SUCCEEDED
    @PHP/standard/strings/strstr.php: SUCCEEDED
    @PHP/standard/strings/strtoupper.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    cfbfbdcfbfbdcfbfbd
    cfafbdcfafbdcfafbd
    @PHP/standard/strings/strtr.php: SUCCEEDED
    @PHP/standard/strings/strval.php: SUCCEEDED
    @PHP/standard/strings/str_repeat.php: SUCCEEDED
    @PHP/standard/strings/str_shuffle.php: SUCCEEDED
    @PHP/standard/strings/str_word_count.php: SUCCEEDED
    @PHP/standard/strings/substr_count.php: SUCCEEDED
    @PHP/standard/strings/substr_replace.php: SUCCEEDED
    @PHP/standard/strings/wordwrap.php: SUCCEEDED
    @PHP/standard/time/001.php: SUCCEEDED
    @PHP/standard/time/idate.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    U: 1043324459
    Y: 2003
    z: 22
    y: 3
    m: 1
    n: 1
    d: 23
    j: 23
    H: 13
    G: 13
    h: 1
    g: 1
    i: 20
    s: 59
    t: 31
    w: 4
    L: 0
    B: 556
    I: 0
    W: 4
    U: 1043324459
    Y: 2003
    z: 22
    y: 3
    m: 1
    n: 1
    d: 23
    j: 23
    H: 12
    G: 12
    h: 12
    g: 12
    i: 20
    s: 59
    t: 31
    w: 4
    L: 0
    B: 556
    I: 0
    W: 4
    @PHP/strings/001.php: SUCCEEDED
    @PHP/strings/002.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    fprintf test 1:abcde
    20
    printf test 1:simple string
    printf test 2:42
    printf test 3:3.333333
    printf test 4:3.3333333333
    printf test 5:2.50      
    printf test 6:2.50000000
    printf test 7:0000002.50
    printf test 8:<                 foo>
    printf test 9:<bar                 >
    printf test 10: 123456789012345
    printf test 10:<h´┐Żyesterettsjustitiarius>
    printf test 11: 123456789012345678901234567890
    printf test 11:<    h´┐Żyesterettsjustitiarius>
    printf test 12:-12.34
    printf test 13:  -12
    printf test 14:@
    printf test 15:10101010
    printf test 16:aa
    printf test 17:AA
    printf test 18:        10101010
    printf test 19:              aa
    printf test 20:              AA
    printf test 21:0000000010101010
    printf test 22:00000000000000aa
    printf test 23:00000000000000AA
    printf test 24:abcde
    printf test 25:gazonk
    printf test 26:2 1
    printf test 27:3 1 2
    printf test 28:02  1
    printf test 29:2   1
    printf test 30:x
    vprintf test 1:2   1
    fprintf test 1:abcde
    20
    printf test 1:simple string
    printf test 2:42
    printf test 3:3.333333
    printf test 4:3.3333333333
    printf test 5:2.50      
    printf test 6:2.50000000
    printf test 7:0000002.50
    printf test 8:<                 foo>
    printf test 9:<bar                 >
    printf test 10: 123456789012345
    printf test 10:<h�yesterettsjustitiarius>
    printf test 11: 123456789012345678901234567890
    printf test 11:<    h�yesterettsjustitiarius>
    printf test 12:-12.34
    printf test 13:  -12
    printf test 14:@
    printf test 15:10101010
    printf test 16:aa
    printf test 17:AA
    printf test 18:        10101010
    printf test 19:              aa
    printf test 20:              AA
    printf test 21:0000000010101010
    printf test 22:00000000000000aa
    printf test 23:00000000000000AA
    printf test 24:abcde
    printf test 25:gazonk
    printf test 26:2 1
    printf test 27:3 1 2
    printf test 28:02  1
    printf test 29:2   1
    printf test 30:x
    vprintf test 1:2   1
    @PHP/strings/bug22592.php: SUCCEEDED
    Arrays/array1.php: SUCCEEDED
    Arrays/array_diff_intersect.php: SUCCEEDED
    Arrays/array_diff_intersect2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Strict Standards: array_udiff() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 35
    Array
    (
        [0.5] => cr Object
            (
                [priv_member:cr:private] => 12
            )
    
        [0] => cr Object
            (
                [priv_member:cr:private] => 23
            )
    
    )
    
    Strict Standards: array_udiff_assoc() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 36
    Array
    (
        [0.1] => cr Object
            (
                [priv_member:cr:private] => 9
            )
    
        [0.5] => cr Object
            (
                [priv_member:cr:private] => 12
            )
    
        [0] => cr Object
            (
                [priv_member:cr:private] => 23
            )
    
    )
    
    Strict Standards: array_udiff_uassoc() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 37
    
    Strict Standards: array_udiff_uassoc() expects parameter 4 to be a valid callback, non-static method cr::comp_func_key() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 37
    Array
    (
        [0.1] => cr Object
            (
                [priv_member:cr:private] => 9
            )
    
        [0.5] => cr Object
            (
                [priv_member:cr:private] => 12
            )
    
        [0] => cr Object
            (
                [priv_member:cr:private] => 23
            )
    
    )
    Array
    (
        [b] => brown
        [c] => blue
        [0] => red
    )
    ------------------------------------
    
    Strict Standards: array_uintersect() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 40
    Array
    (
        [0.1] => cr Object
            (
                [priv_member:cr:private] => 9
            )
    
        [1] => cr Object
            (
                [priv_member:cr:private] => 4
            )
    
        [2] => cr Object
            (
                [priv_member:cr:private] => -15
            )
    
    )
    
    Strict Standards: array_uintersect_assoc() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 41
    Array
    (
        [1] => cr Object
            (
                [priv_member:cr:private] => 4
            )
    
        [2] => cr Object
            (
                [priv_member:cr:private] => -15
            )
    
    )
    
    Strict Standards: array_uintersect_uassoc() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 42
    
    Strict Standards: array_uintersect_uassoc() expects parameter 4 to be a valid callback, non-static method cr::comp_func_key() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 42
    Array
    (
        [1] => cr Object
            (
                [priv_member:cr:private] => 4
            )
    
        [2] => cr Object
            (
                [priv_member:cr:private] => -15
            )
    
    )
    Array
    (
        [a] => green
    )
    Array
    (
        [0.5] => cr Object
        (
            [priv_member:private] => 12
        )
    
        [0] => cr Object
        (
            [priv_member:private] => 23
        )
    
    )
    Array
    (
        [0.1] => cr Object
        (
            [priv_member:private] => 9
        )
    
        [0.5] => cr Object
        (
            [priv_member:private] => 12
        )
    
        [0] => cr Object
        (
            [priv_member:private] => 23
        )
    
    )
    Array
    (
        [0.1] => cr Object
        (
            [priv_member:private] => 9
        )
    
        [0.5] => cr Object
        (
            [priv_member:private] => 12
        )
    
        [0] => cr Object
        (
            [priv_member:private] => 23
        )
    
    )
    Array
    (
        [b] => brown
        [c] => blue
        [0] => red
    )
    ------------------------------------
    Array
    (
        [0.1] => cr Object
        (
            [priv_member:private] => 9
        )
    
        [1] => cr Object
        (
            [priv_member:private] => 4
        )
    
        [2] => cr Object
        (
            [priv_member:private] => -15
        )
    
    )
    Array
    (
        [1] => cr Object
        (
            [priv_member:private] => 4
        )
    
        [2] => cr Object
        (
            [priv_member:private] => -15
        )
    
    )
    Array
    (
        [1] => cr Object
        (
            [priv_member:private] => 4
        )
    
        [2] => cr Object
        (
            [priv_member:private] => -15
        )
    
    )
    Array
    (
        [a] => green
    )
    Arrays/array_diff_intersect3.php: SUCCEEDED
    Arrays/array_filter%20false%20entries%20%2322016.php: SUCCEEDED
    Arrays/array_map.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Array
    (
        [0] => Array
            (
                [0] => 1
                [1] => A
                [2] => 0
            )
    
        [1] => Array
            (
                [0] => 2
                [1] => B
                [2] => 0
            )
    
        [2] => Array
            (
                [0] => 3
                [1] => C
                [2] => 
            )
    
    )
    Array
    (
        [0] => 1 A 0
        [1] => 2 B 0
        [2] => 3 C 
    )
    Array
    (
        [A] => 2
        [10] => 3
    )
    Array
    (
        [0] => 1
        [1] => 2
        [2] => 3
    )
    Array
    (
        [0] => A
        [1] => B
        [2] => C
    )
    Array
    (
        [0] => 0
        [1] => 0
    )
    Array
    (
        [A] => 1
        [10] => 2
    )
    Array
    (
        [0] => Array
        (
            [0] => 1
            [1] => A
            [2] => 0
        )
    
        [1] => Array
        (
            [0] => 2
            [1] => B
            [2] => 0
        )
    
        [2] => Array
        (
            [0] => 3
            [1] => C
            [2] => 
        )
    
    )
    Array
    (
        [0] => 1 A 0
        [1] => 2 B 0
        [2] => 3 C 
    )
    Array
    (
        [A] => 2
        [10] => 3
    )
    Array
    (
        [0] => 1
        [1] => 2
        [2] => 3
    )
    Array
    (
        [0] => A
        [1] => B
        [2] => C
    )
    Array
    (
        [0] => x
        [1] => x
    )
    Array
    (
        [A] => 1
        [10] => 2
    )
    Arrays/array_merge_recursive.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Array
    (
        [color] => Array
            (
                [favorite] => Array
                    (
                        [0] => red
                        [1] => green
                    )
    
                [0] => blue
            )
    
        [0] => Array
            (
                [0] => 1
                [1] => 2
                [2] => 3
            )
    
        [q] => Array
            (
                [0] => 
                [1] => 
                [2] => x
            )
    
        [1] => 10
        [2] => Array
            (
                [0] => 4
                [1] => 5
                [2] => 6
            )
    
    )
    Array
    (
        [a] => Array
            (
                [0] => 1
                [1] => 2
                [2] => 3
                [3] => e
            )
    
    )
    Array
    (
        [a] => Array
            (
                [0] => 1
                [1] => 2
                [2] => 3
                [3] => e
            )
    
    )
    Array
    (
        [a] => 1
        [b] => 2
    )
    Array
    (
        [a] => xxx
        [b] => 2
    )
    Array
    (
        [a] => Array
            (
                [a] => Array
                    (
                        [a] => Array
     *RECURSION*
                    )
    
                [0] => 1
                [1] => 2
                [2] => 3
            )
    
    )
    Array
    (
        [a] => Array
            (
                [b] => Array
                    (
                        [0] => 1
                        [1] => 1
                    )
    
                [c] => 1
                [d] => Array
                    (
                        [0] => 2
                        [1] => 3
                    )
    
            )
    
    )
    Array
    (
        [a] => Array
            (
                [0] => 
                [1] => 
            )
    
    )
    Array
    (
        [a] => Array
            (
                [0] => 
                [1] => 
            )
    
    )
    Array
    (
        [color] => Array
        (
            [favorite] => Array
            (
                [0] => red
                [1] => green
            )
    
            [0] => blue
        )
    
        [0] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
        )
    
        [q] => Array
        (
            [0] => x
        )
    
        [1] => 10
        [2] => Array
        (
            [0] => 4
            [1] => 5
            [2] => 6
        )
    
    )
    Array
    (
        [a] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
            [3] => e
        )
    
    )
    Array
    (
        [a] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
            [3] => e
        )
    
    )
    Array
    (
        [a] => 1
        [b] => 2
    )
    Array
    (
        [a] => xxx
        [b] => 2
    )
    Array
    (
        [a] => Array
        (
            [a] => Array
            (
                [a] => Array [recursion]
    
    
            )
    
            [0] => 1
            [1] => 2
            [2] => 3
        )
    
    )
    Array
    (
        [a] => Array
        (
            [b] => Array
            (
                [0] => 1
                [1] => 1
            )
    
            [c] => 1
            [d] => Array
            (
                [0] => 2
                [1] => 3
            )
    
        )
    
    )
    Array
    (
        [a] => Array
        (
        )
    
    )
    Array
    (
        [a] => Array
        (
        )
    
    )
    Arrays/array_reduce1.php: SUCCEEDED
    Arrays/array_reduce2.php: SUCCEEDED
    Arrays/array_slice.php: SUCCEEDED
    Arrays/array_sumprod.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    float(8.3)
    float(0)
    int(6)
    int(6)
    float(4294967297)
    float(9.2233720282648E+18)
    bool(true)
    bool(false)
    float(-7.7)
    float(-38.4)
    int(6)
    int(6)
    int64(4294967297)
    int64(9223372028264841218)
    bool(true)
    bool(true)
    Arrays/array_unshift.php: SUCCEEDED
    Arrays/array_walk.php: SUCCEEDED
    Arrays/array_walk_recursive.php: SUCCEEDED
    Arrays/multisort.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    bool(true)
    Array
    (
        [0] => Array
            (
                [0] => 2
                [1] => 8
                [2] => 2
                [3] => 2
                [4] => 8
                [5] => 8
            )
    
        [1] => Array
            (
                [0] => 7
                [1] => 2
                [2] => 7
                [3] => 4
                [4] => 8
                [5] => 1
            )
    
        [2] => Array
            (
                [0] => 1
                [1] => 4
                [2] => 8
                [3] => 0
                [4] => 6
                [5] => 2
            )
    
        [3] => Array
            (
                [0] => 8
                [1] => 4
                [2] => 1
                [3] => 0
                [4] => 7
                [5] => 1
            )
    
        [4] => Array
            (
                [0] => 20
                [1] => 2
                [2] => 12
                [3] => 11
                [4] => 10
                [5] => 1
            )
    
    )
    Array
    (
        [0] => Array
            (
                [0] => 10
                [1] => 100
                [2] => 100
                [3] => a
            )
    
        [1] => Array
            (
                [0] => 1
                [1] => 3
                [2] => 2
                [3] => 1
            )
    
    )
    Array
    (
        [0] => 10
        [1] => a
        [2] => 100
        [3] => 100
    )
    Array
    (
        [0] => 1
        [1] => 1
        [2] => 2
        [3] => 3
    )
    bool(true)
    Array
    (
        [0] => Array
        (
            [0] => 2
            [1] => 8
            [2] => 2
            [3] => 2
            [4] => 8
            [5] => 8
        )
    
        [1] => Array
        (
            [0] => 7
            [1] => 2
            [2] => 7
            [3] => 4
            [4] => 8
            [5] => 1
        )
    
        [2] => Array
        (
            [0] => 1
            [1] => 4
            [2] => 8
            [3] => 0
            [4] => 6
            [5] => 2
        )
    
        [3] => Array
        (
            [0] => 8
            [1] => 4
            [2] => 1
            [3] => 0
            [4] => 7
            [5] => 1
        )
    
        [4] => Array
        (
            [0] => 20
            [1] => 2
            [2] => 12
            [3] => 11
            [4] => 10
            [5] => 1
        )
    
    )
    Array
    (
        [0] => Array
        (
            [0] => 10
            [1] => 100
            [2] => 100
            [3] => a
        )
    
        [1] => Array
        (
            [0] => 1
            [1] => 3
            [2] => 2
            [3] => 1
        )
    
    )
    Array
    (
        [0] => 10
        [1] => a
        [2] => 100
        [3] => 100
    )
    Array
    (
        [0] => 1
        [1] => 1
        [2] => 2
        [3] => 3
    )
    Arrays/multisort_empty.php: SUCCEEDED
    Arrays/nonarray%20access%20%2322019.php: SUCCEEDED
    Arrays/optimizations.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    3
    4
    5
    a
    b
    c
    
    Warning: strtolower() expects parameter 1 to be string, array given in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 15
    
    cablo
    3
    4
    5
    a
    b
    c
    array
    cablo
    Arrays/recursion.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    f1:
    array(2) {
      ["a"]=>
      array(5) {
        ["a"]=>
        &array(3) {
          ["a"]=>
          &array(3) {
            ["a"]=>
            *RECURSION*
            [0]=>
            string(1) "y"
            [1]=>
            string(1) "z"
          }
          [0]=>
          string(1) "y"
          [1]=>
          string(1) "z"
        }
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        string(1) "x"
      }
      [0]=>
      string(1) "w"
    }
    f2:
    array(1) {
      ["A"]=>
      &array(2) {
        ["a"]=>
        &array(2) {
          ["a"]=>
          *RECURSION*
          [0]=>
          string(1) "z"
        }
        [0]=>
        string(1) "z"
      }
    }
    f3:
    array(2) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) {
          [0]=>
          *RECURSION*
          [1]=>
          string(1) "z"
        }
        [1]=>
        string(1) "z"
      }
      [1]=>
      string(1) "z"
    }
    f4:
    
    Warning: array_merge_recursive(): recursion detected in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 37
    array(1) {
      ["a"]=>
      &array(3) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
      }
    }
    f5:
    array(1) {
      ["a"]=>
      array(6) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        int(1)
        [4]=>
        int(2)
        [5]=>
        int(3)
      }
    }
    f6:
    array(1) {
      ["a"]=>
      array(2) {
        [0]=>
        string(2) "xx"
        [1]=>
        int(2)
      }
    }
    f7:
    array(1) {
      ["a"]=>
      array(1) {
        ["a"]=>
        array(1) {
          ["a"]=>
          &array(1) {
            ["a"]=>
            &array(1) {
              ["a"]=>
              *RECURSION*
            }
          }
        }
      }
    }
    f1:
    array(2) {
      ["a"]=>
      array(5) {
        ["a"]=>
        &array(3) {
          ["a"]=>
          &array(3) [recursion]
          [0]=>
          string(1) "y"
          [1]=>
          string(1) "z"
        }
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        string(1) "x"
      }
      [0]=>
      string(1) "w"
    }
    f2:
    array(1) {
      ["A"]=>
      &array(2) {
        ["a"]=>
        &array(2) [recursion]
        [0]=>
        string(1) "z"
      }
    }
    f3:
    array(2) {
      [0]=>
      &array(2) [recursion]
      [1]=>
      string(1) "z"
    }
    f4:
    array(1) {
      ["a"]=>
      array(6) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        int(1)
        [4]=>
        int(2)
        [5]=>
        int(3)
      }
    }
    f5:
    array(1) {
      ["a"]=>
      array(6) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        int(1)
        [4]=>
        int(2)
        [5]=>
        int(3)
      }
    }
    f6:
    array(1) {
      ["a"]=>
      array(2) {
        [0]=>
        string(2) "xx"
        [1]=>
        int(2)
      }
    }
    f7:
    array(1) {
      ["a"]=>
      &array(1) {
        ["a"]=>
        &array(1) [recursion]
      }
    }
    Arrays/sort.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    sort regular:
    Array
    (
        [0] => 0
        [1] => 1
        [2] => 1
        [3] => 8
        [4] => 0x10
        [5] => 10x
        [6] => 20x
        [7] => ach0
        [8] => add1
        [9] => x10
        [10] => x2
    )
    
    sort numeric:
    Array
    (
        [0] => add1
        [1] => x2
        [2] => 0x10
        [3] => ach0
        [4] => 0
        [5] => x10
        [6] => 1
        [7] => 1
        [8] => 8
        [9] => 10x
        [10] => 20x
    )
    
    sort string:
    Array
    (
        [0] => 0
        [1] => 0x10
        [2] => 1
        [3] => 1
        [4] => 10x
        [5] => 20x
        [6] => 8
        [7] => ach0
        [8] => add1
        [9] => x10
        [10] => x2
    )
    
    sort locale:
    Array
    (
        [0] => 0
        [1] => 0x10
        [2] => 1
        [3] => 1
        [4] => 10x
        [5] => 20x
        [6] => 8
        [7] => ach0
        [8] => add1
        [9] => x10
        [10] => x2
    )
    
    ksort regular:
    Array
    (
        [x] => 8
        [z] => 1
        [0] => x10
        [1] => 10x
        [2b] => 1
        [2] => 20x
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [10a] => 0
    )
    
    ksort numeric:
    Array
    (
        [x] => 8
        [z] => 1
        [0] => x10
        [1] => 10x
        [2b] => 1
        [2] => 20x
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [10a] => 0
    )
    
    ksort string:
    Array
    (
        [0] => x10
        [1] => 10x
        [10a] => 0
        [2] => 20x
        [2b] => 1
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [x] => 8
        [z] => 1
    )
    
    ksort locale:
    Array
    (
        [0] => x10
        [1] => 10x
        [10a] => 0
        [2] => 20x
        [2b] => 1
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [x] => 8
        [z] => 1
    )
    
    asort regular:
    Array
    (
        [10a] => 0
        [2b] => 1
        [z] => 1
        [x] => 8
        [4] => 0x10
        [1] => 10x
        [2] => 20x
        [5] => ach0
        [6] => add1
        [0] => x10
        [3] => x2
    )
    
    asort numeric:
    Array
    (
        [6] => add1
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [10a] => 0
        [0] => x10
        [z] => 1
        [2b] => 1
        [x] => 8
        [1] => 10x
        [2] => 20x
    )
    
    asort string:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [z] => 1
        [2b] => 1
        [1] => 10x
        [2] => 20x
        [x] => 8
        [5] => ach0
        [6] => add1
        [0] => x10
        [3] => x2
    )
    
    asort locale:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [z] => 1
        [2b] => 1
        [1] => 10x
        [2] => 20x
        [x] => 8
        [5] => ach0
        [6] => add1
        [0] => x10
        [3] => x2
    )
    
    rsort regular:
    Array
    (
        [0] => x2
        [1] => x10
        [2] => add1
        [3] => ach0
        [4] => 20x
        [5] => 10x
        [6] => 0x10
        [7] => 8
        [8] => 1
        [9] => 1
        [10] => 0
    )
    
    rsort numeric:
    Array
    (
        [0] => 20x
        [1] => 10x
        [2] => 8
        [3] => 1
        [4] => 1
        [5] => ach0
        [6] => add1
        [7] => 0x10
        [8] => x2
        [9] => x10
        [10] => 0
    )
    
    rsort string:
    Array
    (
        [0] => x2
        [1] => x10
        [2] => add1
        [3] => ach0
        [4] => 8
        [5] => 20x
        [6] => 10x
        [7] => 1
        [8] => 1
        [9] => 0x10
        [10] => 0
    )
    
    rsort locale:
    Array
    (
        [0] => x2
        [1] => x10
        [2] => add1
        [3] => ach0
        [4] => 8
        [5] => 20x
        [6] => 10x
        [7] => 1
        [8] => 1
        [9] => 0x10
        [10] => 0
    )
    
    natsort:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [2b] => 1
        [z] => 1
        [x] => 8
        [1] => 10x
        [2] => 20x
        [5] => ach0
        [6] => add1
        [3] => x2
        [0] => x10
    )
    sort regular:
    Array
    (
        [0] => 0x10
        [1] => 10x
        [2] => 20x
        [3] => ach0
        [4] => add1
        [5] => x10
        [6] => 0
        [7] => x2
        [8] => 1
        [9] => 1
        [10] => 8
    )
    
    sort numeric:
    Array
    (
        [0] => x10
        [1] => 0
        [2] => x2
        [3] => ach0
        [4] => add1
        [5] => 1
        [6] => 1
        [7] => 8
        [8] => 10x
        [9] => 0x10
        [10] => 20x
    )
    
    sort string:
    Array
    (
        [0] => 0
        [1] => 0x10
        [2] => 1
        [3] => 1
        [4] => 10x
        [5] => 20x
        [6] => 8
        [7] => ach0
        [8] => add1
        [9] => x10
        [10] => x2
    )
    
    sort locale:
    Array
    (
        [0] => 0
        [1] => 0x10
        [2] => 1
        [3] => 1
        [4] => 10x
        [5] => 20x
        [6] => 8
        [7] => add1
        [8] => ach0
        [9] => x10
        [10] => x2
    )
    
    ksort regular:
    Array
    (
        [x] => 8
        [z] => 1
        [0] => x10
        [1] => 10x
        [2] => 20x
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [10a] => 0
        [2b] => 1
    )
    
    ksort numeric:
    Array
    (
        [x] => 8
        [z] => 1
        [0] => x10
        [1] => 10x
        [2b] => 1
        [2] => 20x
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [10a] => 0
    )
    
    ksort string:
    Array
    (
        [0] => x10
        [1] => 10x
        [10a] => 0
        [2] => 20x
        [2b] => 1
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [x] => 8
        [z] => 1
    )
    
    ksort locale:
    Array
    (
        [0] => x10
        [1] => 10x
        [10a] => 0
        [2] => 20x
        [2b] => 1
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [x] => 8
        [z] => 1
    )
    
    asort regular:
    Array
    (
        [4] => 0x10
        [1] => 10x
        [2] => 20x
        [5] => ach0
        [6] => add1
        [0] => x10
        [10a] => 0
        [3] => x2
        [z] => 1
        [2b] => 1
        [x] => 8
    )
    
    asort numeric:
    Array
    (
        [0] => x10
        [10a] => 0
        [3] => x2
        [5] => ach0
        [6] => add1
        [z] => 1
        [2b] => 1
        [x] => 8
        [1] => 10x
        [4] => 0x10
        [2] => 20x
    )
    
    asort string:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [z] => 1
        [2b] => 1
        [1] => 10x
        [2] => 20x
        [x] => 8
        [5] => ach0
        [6] => add1
        [0] => x10
        [3] => x2
    )
    
    asort locale:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [z] => 1
        [2b] => 1
        [1] => 10x
        [2] => 20x
        [x] => 8
        [6] => add1
        [5] => ach0
        [0] => x10
        [3] => x2
    )
    
    rsort regular:
    Array
    (
        [0] => 8
        [1] => 1
        [2] => 1
        [3] => x2
        [4] => x10
        [5] => 0
        [6] => add1
        [7] => ach0
        [8] => 20x
        [9] => 10x
        [10] => 0x10
    )
    
    rsort numeric:
    Array
    (
        [0] => 20x
        [1] => 0x10
        [2] => 10x
        [3] => 8
        [4] => 1
        [5] => 1
        [6] => x10
        [7] => 0
        [8] => x2
        [9] => ach0
        [10] => add1
    )
    
    rsort string:
    Array
    (
        [0] => x2
        [1] => x10
        [2] => add1
        [3] => ach0
        [4] => 8
        [5] => 20x
        [6] => 10x
        [7] => 1
        [8] => 1
        [9] => 0x10
        [10] => 0
    )
    
    rsort locale:
    Array
    (
        [0] => x2
        [1] => x10
        [2] => ach0
        [3] => add1
        [4] => 8
        [5] => 20x
        [6] => 10x
        [7] => 1
        [8] => 1
        [9] => 0x10
        [10] => 0
    )
    
    natsort:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [z] => 1
        [2b] => 1
        [x] => 8
        [1] => 10x
        [2] => 20x
        [5] => ach0
        [6] => add1
        [3] => x2
        [0] => x10
    )
    Arrays/usort.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    Array
    (
        [0] => 10
        [1] => 9
        [2] => 8
        [3] => 7
        [4] => 6
        [5] => 5
        [6] => 4
        [7] => 3
        [8] => 2
        [9] => 1
    )
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Array
    (
        [0] => 10
        [1] => 9
        [2] => 8
        [3] => 7
        [4] => 6
        [5] => 5
        [6] => 4
        [7] => 3
        [8] => 2
        [9] => 1
    )
    Arrays/lazy_copy/001.php: SUCCEEDED
    Arrays/lazy_copy/002.php: SUCCEEDED
    Arrays/lazy_copy/003.php: SUCCEEDED
    Arrays/lazy_copy/004.php: SUCCEEDED
    Arrays/lazy_copy/005.php: SUCCEEDED
    Arrays/lazy_copy/006.php: SUCCEEDED
    Bugs/class_incompletepart.php: SUCCEEDED
    Bugs/division-by-zero.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    DIVISION
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 6
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 8
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 10
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 12
    bool(false)
    MODULO
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 16
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 18
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 20
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 22
    bool(false)
    DIVISION
    bool(false)
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt at expression on line 10, column 2.
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt at expression on line 12, column 2.
    bool(false)
    MODULO
    bool(false)
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt at expression on line 20, column 2.
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt at expression on line 22, column 2.
    bool(false)
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt(6,10): warning PHP0150: Division by zero
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt(8,9): warning PHP0150: Division by zero
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt(16,10): warning PHP0150: Division by zero
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt(18,9): warning PHP0150: Division by zero
    
    Bugs/function-in-unknown-class.php: SUCCEEDED
    Bugs/is_a_null_value.php: SUCCEEDED
    Bugs/preg-named-groups.php: SUCCEEDED
    Bugs/preg-replace-advanced.php: SUCCEEDED
    Bugs/preg-replace-range.php: SUCCEEDED
    Bugs/preg-replace.php: SUCCEEDED
    Bugs/preg-this-dynamic.php: FAILED
    Script hung upNo errorsSuccess
    Expected test outputReal script output
    Unhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---> PHP.Core.Debug+AssertException: Assertion failed: 
       at PHP.Core.Debug.Fail(String message)
       at PHP.Core.Debug.Assert(Boolean condition)
       at PHP.Core.RelativePath.ParseCanonical(String relativePath)
       at PHP.Core.Emit.TransientAssemblyBuilder.Build(String sourceCode, SourceCodeDescriptor descriptor, EvalKinds kind, CompilationContext context, ScriptContext scriptContext, DTypeDesc referringType, NamingContext namingContext, Boolean completeSource)
       at PHP.Core.DynamicCode.EvalInternal(String prefix, String code, String suffix, EvalKinds kind, ScriptContext scriptContext, Dictionary`2 localVariables, DObject self, DTypeDesc referringType, SourceCodeDescriptor descriptor, Boolean entireFile, NamingContext namingContext)
       at PHP.Core.DynamicCode.Eval(String code, Boolean synthetic, ScriptContext context, Dictionary`2 definedVariables, DObject self, DTypeDesc referringType, String callerRelativeSourcePath, Int32 line, Int32 column, Int32 containerId, NamingContext namingContext)
       at PHP.Library.PerlRegExp.Evaluator.ReplaceCodeExecute(Match m)
       at System.Text.RegularExpressions.RegexReplacement.Replace(MatchEvaluator evaluator, Regex regex, String input, Int32 count, Int32 startat)
       at System.Text.RegularExpressions.Regex.Replace(String input, MatchEvaluator evaluator, Int32 count)
       at PHP.Library.PerlRegExp.ReplaceInternal(DObject self, Dictionary`2 definedVariables, PerlRegExpConverter converter, PhpCallback callback, String str, Int32 limit, SourceCodeDescriptor sourceCodeDesc, Int32& count)
       at PHP.Library.PerlRegExp.SimpleReplace(DObject self, Dictionary`2 definedVariables, Object pattern, String replacement, PhpCallback callback, Object data, Int32 limit, SourceCodeDescriptor descriptor, Int32& count)
       at PHP.Library.PerlRegExp.Replace(ScriptContext context, DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, PhpCallback callback, Object data, Int32 limit, Int32& count)
       at PHP.Library.PerlRegExp.Replace(ScriptContext context, DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, Object data)
       at PHP.Dynamic.PhpNetClassLibrary.preg_replace(Object , PhpStack )
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <__input.txt>.a.a(ScriptContext ) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt:line 16
       at <__input.txt>.a.<Mediator>(ScriptContext )
       at <__input.txt>.a.a(Object instance, PhpStack stack)
       at <__input.txt>.<Script>.<Main>(ScriptContext <context>, Dictionary`2 <locals>, DObject , DTypeDesc , Boolean ) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt:line 19
       at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)
       at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)
       --- End of inner exception stack trace ---
       at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)
       at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)
       at <Global>.Run(String[] )
    
    Bugs/preg-this-dynamic2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    foo: ahoj
    foo: lidi
    foo: rozkladame
    foo: ahoj
    foo: lidi
    foo: rozkladame
    foo: ahoj
    foo: lidi
    foo: rozkladame
    
    Notice: Undefined variable: this.
    
    Error: Call to a member function foo() on a non-object.
    Bugs/preg-this.php: SUCCEEDED
    Bugs/preg-ungreedy-bugs.php: SUCCEEDED
    Bugs/preg-unkn.php: SUCCEEDED
    Bugs/trigger_error%20line%20number%20%232787.php: SUCCEEDED
    Compiler/abstracts.php: SUCCEEDED
    Compiler/aliased%20assign%20add.php: SUCCEEDED
    Compiler/assignments.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ---1---1float(-1.5)
    float(2.5)
    float(0.83333333333333)
    int(6)
    int(8)
    ---2---2float(8.8333333333333)
    float(8.8333333333333)
    float(8.8333333333333)
    int(8)
    int(8)
    ---3---3---4---4---5---5array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [1]=>
      array(1) {
        [2]=>
        array(1) {
          [3]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    ---6---6array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "u"
    }
    array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "v"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    ---7---7array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    ---8---8
    ---1---1float(-1.5)
    float(2.5)
    float(0.833333333333333)
    int(6)
    int(8)
    ---2---2float(8.83333333333333)
    float(8.83333333333333)
    float(8.83333333333333)
    int(8)
    int(8)
    ---3---3---4---4---5---5array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [1]=>
      array(1) {
        [2]=>
        array(1) {
          [3]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    ---6---6array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "u"
    }
    array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "v"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    ---7---7array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    ---8---8
    Compiler/assign_in_call.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    g1:
    f(x)
    u(x)
    'x'
    
    g2:
    f(x)
    u(x)
    'b'
    
    g3:
    f(x)
    u(x)
    'b'
    
    g4:
    f(x)
    u(x)
    'b'
    
    g5:
    f()
    u()
    integer(1)
    
    g6:
    f(3)
    u(3)
    integer(3)
    
    g7:
    f(2)
    u(10)
    integer(10)
    
    g8:
    f(1)
    f(1)
    f(1)
    u(1)
    u()
    u(1)
    
    g9:
    known:
    __get(p) = 0
    __set(p,1)
    f(1)
    unknown:
    __get(p) = 1
    __set(p,3)
    u(3)
    
    g10:
    Done.
    g1:
    f(x)
    u(x)
    'x'
    
    g2:
    f(x)
    u(x)
    'b'
    
    g3:
    f(x)
    u(x)
    'b'
    
    g4:
    f(x)
    u(x)
    'b'
    
    g5:
    f()
    u()
    integer(1)
    
    g6:
    f(3)
    u(3)
    integer(3)
    
    g7:
    f(2)
    u(10)
    integer(10)
    
    g8:
    f(1)
    f(1)
    f(1)
    u(1)
    u()
    u(1)
    
    g9:
    known:
    __get(p) = 0
    __set(p,1)
    __get(p) = 1
    f(1)
    unknown:
    __get(p) = 1
    __set(p,3)
    __get(p) = 3
    u(3)
    
    g10:
    Done.
    Compiler/auto_globals_001.php: SUCCEEDED
    Compiler/auto_globals_002.php: SUCCEEDED
    Compiler/auto_globals_003.php: SUCCEEDED
    Compiler/break_in_global_code.php: SUCCEEDED
    Compiler/chaining_test.php: SUCCEEDED
    Compiler/chain_ending_by_string_index.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        string(1) "f"
      }
    }
    array(1) {
      [0]=>
      string(4) "xubu"
    }
    object(C)#1 (1) {
      ["f"]=>
      string(4) "kuxu"
    }
    string(5) "helxo"
    string(5) "helxo"
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        string(1) "f"
      }
    }
    array(1) {
      [0]=>
      string(4) "bubu"
    }
    
    Warning: A string item used as a reference in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt at expression on line 19, column 1.
    object(C)(1) {
      ["f"]=>
      string(4) "kuku"
    }
    
    Warning: A string item used as a reference in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt at expression on line 25, column 1.
    string(5) "hello"
    
    Warning: A string item used as a reference in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt at expression on line 31, column 1.
    string(5) "hello"
    Compiler/continue_in_global_code.php: SUCCEEDED
    Compiler/deep_copy.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array(1) {
      [0]=>
      &array(1) {
        [0]=>
        &array(1) {
          [0]=>
          *RECURSION*
        }
      }
    }
    array(1) {
      [0]=>
      &array(1) {
        [0]=>
        &array(1) {
          [0]=>
          *RECURSION*
        }
      }
    }
    array(2) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) {
          [0]=>
          *RECURSION*
          [1]=>
          int(1)
        }
        [1]=>
        int(1)
      }
      [1]=>
      int(1)
    }
    array(1) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) {
          [0]=>
          *RECURSION*
          [1]=>
          int(1)
        }
        [1]=>
        int(1)
      }
    }
    array(1) {
      [0]=>
      &array(1) [recursion]
    }
    array(1) {
      [0]=>
      &array(1) {
        [0]=>
        &array(1) [recursion]
      }
    }
    array(2) {
      [0]=>
      &array(2) [recursion]
      [1]=>
      int(1)
    }
    array(1) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) [recursion]
        [1]=>
        int(1)
      }
    }
    Compiler/deep_copy_refbox.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Strict Standards: Only variables should be passed by reference in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt on line 42
    array
    {
      0 => integer(1)
    }
    
    Strict Standards: Only variables should be passed by reference in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt on line 45
    array
    {
      0 => integer(1)
    }
    
    Strict Standards: Only variables should be passed by reference in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt on line 49
    array
    {
      0 => integer(1)
    }
    
    Strict Standards: Only variables should be passed by reference in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt on line 52
    array
    {
      0 => integer(1)
    }
    array
    {
      0 => integer(1)
      1 => integer(1)
    }
    array
    {
      0 => integer(1)
      1 => integer(1)
    }
    array
    {
      0 => integer(1)
      1 => integer(1)
    }
    array
    {
      0 => integer(1)
      1 => integer(1)
    }
    Compiler/expr_init.php: SUCCEEDED
    Compiler/foreach1.php: SUCCEEDED
    Compiler/foreach_arrays.php: SUCCEEDED
    Compiler/for_loop.php: SUCCEEDED
    Compiler/function_002.php: SUCCEEDED
    Compiler/function_003.php: SUCCEEDED
    Compiler/function_004.php: SUCCEEDED
    Compiler/function_call.php: SUCCEEDED
    Compiler/if_statement.php: SUCCEEDED
    Compiler/indirect_001.php: SUCCEEDED
    Compiler/indirect_002.php: SUCCEEDED
    Compiler/indirect_003.php: SUCCEEDED
    Compiler/indirect_004.php: SUCCEEDED
    Compiler/indirect_005.php: SUCCEEDED
    Compiler/indirect_007.php: SUCCEEDED
    Compiler/indirect_global.php: SUCCEEDED
    Compiler/inheritance.php: SUCCEEDED
    Compiler/inheritance2.php: SUCCEEDED
    Compiler/isset_unset_001.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Testing x in global code:  <br>
    1 <br>
     <br>
    Testing x (object) in optimized function:  <br>
    1 <br>
     <br>
    Testing x (PhpReference) in optimized function:  <br>
    1 <br>
     <br>
    
    Notice: Undefined variable: y in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt on line 29
    Testing $$x (created at runtime) in optimized function:  <br>
    1 <br>
    Testing x in global code:  <br>
    1 <br>
     <br>
    Testing x (object) in optimized function:  <br>
    1 <br>
     <br>
    Testing x (PhpReference) in optimized function:  <br>
    1 <br>
     <br>
    Testing $$x (created at runtime) in optimized function:  <br>
    1 <br>
    Compiler/list%20%2326681.php: SUCCEEDED
    Compiler/null_hints.php: SUCCEEDED
    Compiler/pure_create_function.php: SUCCEEDED
    Compiler/pure_function_exists.php: SUCCEEDED
    Compiler/pure_math_str.php: SUCCEEDED
    Compiler/static_call.php: SUCCEEDED
    Compiler/switch.php: SUCCEEDED
    Compiler/ternary_ex.php: SUCCEEDED
    Compiler/this%20call.php: SUCCEEDED
    Compiler/typehint_check.php: SUCCEEDED
    Compiler/__call.php: SUCCEEDED
    Compiler/Inclusions/include2.php: SUCCEEDED
    Compiler/Inclusions/include3.php: SUCCEEDED
    Compiler/Inclusions/include6.php: SUCCEEDED
    Compiler/Inclusions/include_test.php: SUCCEEDED
    Compiler/Inclusions/script.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t01.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t02.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t03.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t04.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t05.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t08.php: SUCCEEDED
    Compiler/PseudoConst/parent.php: SUCCEEDED
    Compiler/PseudoConst/parent2.php: SUCCEEDED
    Compiler/PseudoConst/self.php: SUCCEEDED
    Compiler/PseudoConst/t01.php: SUCCEEDED
    Compiler/PseudoConst/t02.php: SUCCEEDED
    Compiler/PseudoConst/t03.php: SUCCEEDED
    Compiler/PseudoConst/t04.php: SUCCEEDED
    Compiler/PseudoConst/t05.php: SUCCEEDED
    Compiler/PseudoConst/t06.php: SUCCEEDED
    Compiler/PseudoConst/t07.php: SUCCEEDED
    Compiler/PseudoConst/t08.php: SUCCEEDED
    Compiler/PseudoConst/t09.php: SUCCEEDED
    Compiler/PseudoConst/t10.php: SUCCEEDED
    Compiler/PseudoConst/t11.php: SUCCEEDED
    Compiler/PseudoConst/_class_.php: SUCCEEDED
    Compiler/PseudoConst/_dir_.php: SUCCEEDED
    Compiler/PseudoConst/_function_.php: SUCCEEDED
    Compiler/References/array_argument.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(2)
        [1]=>
        int(3)
      }
    }
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    Compiler/References/array_local.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(2)
        [1]=>
        int(3)
      }
    }
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    Compiler/References/array_ret_argument.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(2)
        [1]=>
        int(3)
      }
    }
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    Compiler/References/array_ret_argument2.php: SUCCEEDED
    Compiler/References/deepcopy.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <br/><br/>globalobjects: array(2) {
      [0]=>
      int(1)
      [1]=>
      int(7)
    }
    <br/><br/>globalobjects: array(2) {
      [0]=>
      int(1)
      [1]=>
      &int(7)
    }
    Compiler/References/explicitclear.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Construyendo Y
    call foo12Destruyendo Y
    3object(X)#1 (2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      int(54)
    }
    array(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      string(10) "Init Value"
    }
    x: object(X)#1 (2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      int(1004)
    }
    <br/>checkpoint array(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      int(54)
    }
    Construyendo Y
    call foo123object(X)(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      &int(54)
    }
    array(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      &int(54)
    }
    x: object(X)(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      &int(1004)
    }
    <br/>checkpoint array(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      &int(1004)
    }
    Destruyendo Y
    Compiler/References/field_argument.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: int(7)
    <br/><br/>checkpoint array(1) {
      ["objects"]=>
      int(8)
    }
    x: int(7)
    <br/><br/>checkpoint array(1) {
      ["objects"]=>
      &int(7)
    }
    Compiler/References/field_local.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: object(X)#1 (1) {
      ["objects"]=>
      int(25)
    }
    <br/>checkpoint array(1) {
      ["objects"]=>
      int(7)
    }
    x: object(X)(1) {
      ["objects"]=>
      &int(25)
    }
    <br/>checkpoint array(1) {
      ["objects"]=>
      &int(25)
    }
    Compiler/References/ref_arrayitem.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(2)
        [1]=>
        int(3)
      }
    }
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    Compiler/References/ref_reasign.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    object(X)#1 (2) {
      ["objects"]=>
      int(54)
      ["objects2"]=>
      &int(222)
    }
    array(2) {
      ["objects"]=>
      int(7)
      ["objects2"]=>
      &int(222)
    }
    x: object(X)#1 (2) {
      ["objects"]=>
      int(1004)
      ["objects2"]=>
      int(777)
    }
    <br/>checkpoint array(2) {
      ["objects"]=>
      int(54)
      ["objects2"]=>
      int(222)
    }
    object(X)(2) {
      ["objects"]=>
      &int(54)
      ["objects2"]=>
      &int(222)
    }
    array(2) {
      ["objects"]=>
      &int(54)
      ["objects2"]=>
      &int(222)
    }
    x: object(X)(2) {
      ["objects"]=>
      &int(1004)
      ["objects2"]=>
      &int(777)
    }
    <br/>checkpoint array(2) {
      ["objects"]=>
      &int(1004)
      ["objects2"]=>
      &int(777)
    }
    Compiler/Unreachable/t13.php: SUCCEEDED
    Compiler/Unset/calluserfunc.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Warning: call_user_func() expects parameter 1 to be a valid callback, function 'unset' not found or invalid function name in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\Unset\__input.txt on line 3
    int(10)
    Error: call_user_func(): Call to undefined function: 'unset' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\Unset\__input.txt at expression on line 3, column 1.
    Compiler/Unset/issetref2.php: SUCCEEDED
    Compiler/Unset/unsetglobal.php: SUCCEEDED
    Compiler/Unset/unsetglobal2.php: SUCCEEDED
    Compiler/Unset/unsetindirect.php: SUCCEEDED
    Compiler/Unset/unsetproblem.php: SUCCEEDED
    Compiler/Unset/unsetref.php: SUCCEEDED
    Compiler/Unset/unsetref2.php: SUCCEEDED
    Compiler/Unset/unsetref3.php: SUCCEEDED
    Compiler/Unset/__unset.php: SUCCEEDED
    DateTime/strftime.php: SUCCEEDED
    DateTime/strtotime1.php: SUCCEEDED
    DateTime/strtotime2.php: SUCCEEDED
    DateTime/strtotime3.php: SUCCEEDED
    DateTime/strtotime4.php: SUCCEEDED
    DateTime/strtotime5.php: SUCCEEDED
    DateTime/time.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    -189388800:-189475200 - 86400
    1964-01-01T00:00:00+0000
    1963-12-31T00:00:00+0000
    1964-06-06
    1963-06-06
    1964-01-06
    1133305200
    -189388800:-189475200 - 86400
    1964-01-01T00:00:00+0000
    1963-12-31T00:00:00+0000
    1964-06-06
    1963-06-06
    1964-01-06
    DateTime/timezones1.php: SUCCEEDED
    FileSystem/basename.php: SUCCEEDED
    FileSystem/basename2.php: SUCCEEDED
    FileSystem/chdir.php: SUCCEEDED
    FileSystem/csv.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    --- write ---
    72
    24
    44
    2
    6
    
    --- read ---
    "hello\n
    world";"aaa""bbb""ccc";"blah blah;";none;"tab\ttab";"space space"\n
    hh'ee;"ss\nsadasdasd s"\n
    """""""""""""""""""""";"""";;"""""";"xxx"""\n
    x\n
    "x\y"\n
    --- write ---
    72
    24
    44
    2
    6
    
    --- read ---
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    FileSystem/date.php: SUCCEEDED
    FileSystem/date2.php: SUCCEEDED
    FileSystem/date3.php: SUCCEEDED
    FileSystem/date_unix.php: SUCCEEDED
    FileSystem/dirname.php: SUCCEEDED
    FileSystem/dirname2.php: SUCCEEDED
    FileSystem/disk_free_space.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    97 GB
    Drive C: 192 GB
    Drive D: 97 GB
    Drive E: 150 GB
    Drive F: 
    Warning: disk_free_space(): The device is not ready.
     in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 14
    false
    97 GB
    Drive C: 192 GB
    Drive D: 97 GB
    Drive E: 150 GB
    Drive F: false
    FileSystem/disk_total_space.php: SUCCEEDED
    FileSystem/fgets.php: SUCCEEDED
    FileSystem/file.php: SUCCEEDED
    FileSystem/filesize.php: SUCCEEDED
    FileSystem/file_exists.php: SUCCEEDED
    FileSystem/file_get_contents.php: SUCCEEDED
    FileSystem/fpassthru.php: SUCCEEDED
    FileSystem/fread.php: SUCCEEDED
    FileSystem/fread1.php: SUCCEEDED
    FileSystem/fread2.php: SUCCEEDED
    FileSystem/fseek.php: SUCCEEDED
    FileSystem/fsockopen.php: SUCCEEDED
    FileSystem/ftell.php: SUCCEEDED
    FileSystem/is_dir.php: SUCCEEDED
    FileSystem/is_executable.php: SUCCEEDED
    FileSystem/pathinfo.php: SUCCEEDED
    FileSystem/popen.php: SUCCEEDED
    FileSystem/readdir.php: SUCCEEDED
    FileSystem/readfile.php: SUCCEEDED
    FileSystem/readline.php: SUCCEEDED
    FileSystem/realpath.php: SUCCEEDED
    FileSystem/scandir.php: SUCCEEDED
    FileSystem/stat.php: SUCCEEDED
    FileSystem/stream_context_set_option.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <pre>[ARRAY
      [STRING: "http"] => [ARRAY
        [STRING: "method"] => [STRING: "GET"]
        [STRING: "header"] => [STRING: "Accept-language: en
    Cookie: foo=bar
    "]
        [STRING: "op1"] => [STRING: "DIRECT"]
        [STRING: "op2"] => [STRING: "VIA STREAM"]
      ]
      [STRING: "other"] => [ARRAY
        [STRING: "method"] => [STRING: "otherGET"]
        [STRING: "header"] => [STRING: "otherAccept-language: en
    otherCookie: foo=bar
    "]
      ]
      [STRING: "file"] => [ARRAY
        [STRING: "method"] => [STRING: "otherGET"]
        [STRING: "header"] => [STRING: "otherAccept-language: en
    otherCookie: foo=bar
    "]
      ]
      [STRING: "wrap"] => [ARRAY
        [STRING: "op1"] => [STRING: "DIRECT"]
        [STRING: "op2"] => [STRING: "VIA STREAM"]
      ]
    ]</pre>
    <pre>[ARRAY
      [STRING: "http"] => [ARRAY
        [STRING: "method"] => [STRING: "GET"]
        [STRING: "header"] => [STRING: "Accept-language: en
    Cookie: foo=bar
    "]
        [STRING: "op1"] => [STRING: "DIRECT"]
        [STRING: "op2"] => [STRING: "VIA STREAM"]
      ]
      [STRING: "other"] => [ARRAY
        [STRING: "method"] => [STRING: "otherGET"]
        [STRING: "header"] => [STRING: "otherAccept-language: en
    otherCookie: foo=bar
    "]
      ]
      [STRING: "file"] => [ARRAY
        [STRING: "method"] => [STRING: "otherGET"]
        [STRING: "header"] => [STRING: "otherAccept-language: en
    otherCookie: foo=bar
    "]
      ]
      [STRING: "wrap"] => [ARRAY
        [STRING: "op1"] => [STRING: "DIRECT"]
        [STRING: "op2"] => [STRING: "VIA STREAM"]
      ]
    ]</pre>
    Error: Script 'D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem/fs.inc' inclusion failed. Cause: Script cannot be included with current configuration. Search paths: include_path is '.', working directory is 'D:\Documents\Projects\Phalanger\Main\Testing\Tests'  in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 3, column 1.
    FileSystem/stream_copy_to_stream.php: SUCCEEDED
    FileSystem/stream_copy_to_stream2.php: SUCCEEDED
    FileSystem/testinc.php: SUCCEEDED
    FileSystem/touch.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Warning: touch(): Utime failed: No such file or directory in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 8
    Sorry Could Not change modification time of touch.txt
    Warning: touch(): Utime failed: No such file or directory in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 14
    
    Warning: touch(): Utime failed: No such file or directory in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 16
    
    Warning: touch(): Utime failed: No such file or directory in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 17
    <pre>[ARRAY
      [INT (0)] => [STRING: "February 23, 2011; [10:54:00] (10h) ctime test.txt (1298454840)"]
      [INT (1)] => [STRING: "February 19, 2011; [22:06:05] (22h) mtime test.txt (1298149565)"]
      [INT (2)] => [STRING: "February 23, 2011; [10:54:00] (10h) ctime touch.txt (1298454840)"]
      [INT (3)] => [STRING: "February 19, 2011; [22:06:05] (22h) mtime touch.txt (1298149565)"]
      [INT (4)] => [STRING: "February 23, 2011; [10:54:00] (10h) atime touch.txt (1298454840)"]
      [INT (5)] => [STRING: "February 19, 2011; [22:06:05] (22h) mtime summer.txt (1298149565)"]
      [INT (6)] => [STRING: "February 19, 2011; [22:06:05] (22h) mtime winter.txt (1298149565)"]
    ]</pre>
    Warning: touch(): Unable to access (D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\touch.txt): Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 8, column 5.
    Sorry Could Not change modification time of touch.txt
    Warning: touch(): Unable to access (D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\touch.txt): Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 14, column 1.
    
    Warning: touch(): Unable to access (D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\winter.txt): Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 16, column 1.
    
    Warning: touch(): Unable to access (D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\summer.txt): Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 17, column 1.
    <pre>[ARRAY
      [INT (0)] => [STRING: "February 23, 2011; [11:54:00] (11h) ctime test.txt (1298458440)"]
      [INT (1)] => [STRING: "February 19, 2011; [23:06:05] (23h) mtime test.txt (1298153165)"]
      [INT (2)] => [STRING: "February 23, 2011; [11:54:00] (11h) ctime touch.txt (1298458440)"]
      [INT (3)] => [STRING: "February 19, 2011; [23:06:05] (23h) mtime touch.txt (1298153165)"]
      [INT (4)] => [STRING: "February 23, 2011; [11:54:00] (11h) atime touch.txt (1298458440)"]
      [INT (5)] => [STRING: "February 19, 2011; [23:06:05] (23h) mtime summer.txt (1298153165)"]
      [INT (6)] => [STRING: "February 19, 2011; [23:06:05] (23h) mtime winter.txt (1298153165)"]
    ]</pre>
    FileSystem/tar/tar_test.php: SUCCEEDED
    FileSystem/zip/zip.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    failed
    Error: Call to undefined function: 'zip_open' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\zip\__input.txt at expression on line 3, column 1.
    Math/abs.php: SUCCEEDED
    Math/atan2.php: SUCCEEDED
    Math/base_convert.php: SUCCEEDED
    Math/bindec.php: SUCCEEDED
    Math/ceil.php: SUCCEEDED
    Math/cos.php: SUCCEEDED
    Math/decbin.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <pre>
    [double: 2294967295]
    10001000110010100110101111111111
    [double: 4294967296]
    0
    [double: 8589934590]
    11111111111111111111111111111110
    [double: 8589934590]
    11111111111111111111111111111110
    [double: 8589934591]
    11111111111111111111111111111111
    [Int: 1000.000.000.000]
    11010100101001010001000000000000
    <hr>(-1, -5435, 2.14, 0, 26)
    11111111111111111111111111111111
    11111111111111111110101011000101
    10
    0
    11010 
    </pre>
    <pre>
    [???: 2294967295]
    10001000110010100110101111111111
    [???: 4294967296]
    0
    [???: 8589934590]
    11111111111111111111111111111110
    [???: 8589934590]
    11111111111111111111111111111110
    [???: 8589934591]
    11111111111111111111111111111111
    [Int: 1000.000.000.000]
    11010100101001010001000000000000
    <hr>(-1, -5435, 2.14, 0, 26)
    11111111111111111111111111111111
    11111111111111111110101011000101
    10
    0
    11010 
    </pre>
    Math/dechex.php: SUCCEEDED
    Math/decoct.php: SUCCEEDED
    Math/deg2rad.php: SUCCEEDED
    Math/exp.php: SUCCEEDED
    Math/floor.php: SUCCEEDED
    Math/fmod.php: SUCCEEDED
    Math/hexdec.php: SUCCEEDED
    Math/max.php: SUCCEEDED
    Math/min.php: SUCCEEDED
    Math/modulo_warn.php: SUCCEEDED
    Math/octdec.php: SUCCEEDED
    Math/pow.php: SUCCEEDED
    Math/rad2deg.php: SUCCEEDED
    Math/round.php: SUCCEEDED
    Math/sin.php: SUCCEEDED
    Math/sqrt.php: SUCCEEDED
    Math/tan.php: SUCCEEDED
    Math/uniqid.php: SUCCEEDED
    Misc/calendar_extension.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0
    0
    2375840
    0
    14
    32
    2
    There are 31 days in August 2003
    There are 28 days in February 2003
    There are 29 days in February 2004
    There are 31 days in December 2034
    1748326
    1748324
    374867
    0
    322f32322f35373633
    ebe120e7f9e5ef20e4faf9f1e2
    ebe120e7f9e5ef20e427faf9f1e2
    ebe120e7f9e5ef20e420e0ecf4e9ed20faf9f1e2
    ebe120e7f9e5ef20e42720e0ecf4e9ed20faf9f1e2
    eb22e120e7f9e5ef20e4faf9f122e2
    e12720e7f9e5ef20e4faf9f122e2
    e12720e7f9e5ef20e427faf9f122e2
    e12720e7f9e5ef20e420e0ecf4e9ed20faf9f122e2
    e12720e7f9e5ef20e42720e0ecf4e9ed20faf9f122e2
    Error: Call to undefined function: 'frenchtojd' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt at expression on line 2, column 1.
    Misc/fgetcsv%20%2327492.php: SUCCEEDED
    Misc/hash%20functions%20%2326667.php: SUCCEEDED
    Misc/ini_parse.php: SUCCEEDED
    Misc/json%20%2327838.php: SUCCEEDED
    Misc/lexer.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    T_INLINE_HTML
    311 '\r\n'
    T_OPEN_TAG
    368 '&lt;?'
    T_WHITESPACE
    371 ' \r\n\r\n'
    T_FINAL
    345 'final'
    T_WHITESPACE
    371 ' '
    T_CLASS
    353 'class'
    T_WHITESPACE
    371 ' '
    T_STRING
    307 'A'
    T_WHITESPACE
    371 ' \r\n'
        '{'
    T_WHITESPACE
    371 ' \r\n  '
    T_FUNCTION
    334 'function'
    T_WHITESPACE
    371 ' '
    T_STRING
    307 '__get'
        '('
    T_VARIABLE
    309 '$x'
        ')'
    T_WHITESPACE
    371 ' \r\n  '
        '{'
    T_WHITESPACE
    371 ' \r\n    '
    T_VARIABLE
    309 '$x'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_START_HEREDOC
    372 '&lt;&lt;&lt;EOOOOOOOOOOOOOOT\r\n'
    T_ENCAPSED_AND_WHITESPACE
    314 '         &lt;&lt;&lt;hello\r\nEOOOOOOOOOOOOOOt;\r\nEOOOOOOOOOOOOOT;\r\n'
    T_END_HEREDOC
    373 'EOOOOOOOOOOOOOOT'
        ';'
    T_WHITESPACE
    371 '\r\n\r\n    '
        '$'
    T_VARIABLE
    309 '$y'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_ARRAY
    360 'array'
    T_WHITESPACE
    371 ' '
        '('
    T_LNUMBER
    305 '1'
        ','
    T_DNUMBER
    306 '100000000000000'
        ','
    T_DNUMBER
    306 '999999999999999999999999999999999'
        ','
    T_STRING
    307 'true'
        ','
    T_STRING
    307 'false'
        ')'
        ';'
    T_WHITESPACE
    371 '\r\n    '
        '$'
        '{'
        '&quot;'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
    T_DOLLAR_OPEN_CURLY_BRACES
    374 '${'
        '$'
        '{'
    T_CONSTANT_ENCAPSED_STRING
    315 '&quot;xxx&quot;'
        '}'
        '}'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
        '&quot;'
        '}'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_LNUMBER
    305 '1'
        ';'
    T_WHITESPACE
    371 '\r\n    '
        '$'
        '{'
        '&quot;'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
    T_DOLLAR_OPEN_CURLY_BRACES
    374 '${'
        '$'
        '{'
        '&quot;'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
    T_VARIABLE
    309 '$x'
    T_ENCAPSED_AND_WHITESPACE
    314 '-&gt;$$'
    T_VARIABLE
    309 '$x0xx'
        '&quot;'
        '}'
        '}'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
        '&quot;'
        '}'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_LNUMBER
    305 '1'
        ';'
    T_WHITESPACE
    371 '\r\n  '
        '}'
    T_WHITESPACE
    371 ' \r\n'
        '}'
    T_WHITESPACE
    371 '\r\n\r\n'
    T_CLOSE_TAG
    370 '?&gt;'
    '
    '
        '&lt;?'
        ' 
    
    '
        'final'
        ' '
        'class'
        ' '
        'A'
        ' 
    '
        '{'
        ' 
      '
        'function'
        ' '
    259
    259 '
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt at expression on line 10, column 7.
    '
        '('
        '$x'
        ')'
        ' 
      '
        '{'
        ' 
        '
        '$x'
        ' '
        '='
        ' '
        '&lt;&lt;&lt;EOOOOOOOOOOOOOOT
    '
        '         &lt;&lt;&lt;'
        'hello'
        '
    '
        'EOOOOOOOOOOOOOOt;
    '
        'EOOOOOOOOOOOOOT;
    '
        'EOOOOOOOOOOOOOOT'
        ';'
        '
    
        '
        '$'
        '$y'
        ' '
        '='
        ' '
        'array'
        ' '
        '('
        '1'
        ','
        '100000000000000'
        ','
        '999999999999999999999999999999999'
        ','
    256
    256 '
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt at expression on line 10, column 7.
    '
        ','
    257
    257 '
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt at expression on line 10, column 7.
    '
        ')'
        ';'
        '
        '
        '$'
        '{'
        '&quot;'
        'x'
        '${'
        '$'
        '{'
    -29
    -29 '
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt at expression on line 10, column 7.
    '
        '}'
        '}'
        'x'
        '&quot;'
        '}'
        ' '
        '='
        ' '
        '1'
        ';'
        '
        '
        '$'
        '{'
        '&quot;'
        'x'
        '${'
        '$'
        '{'
        '&quot;'
        'x'
        '$x'
        '-&gt;'
        '$'
        '$'
        '$x0xx'
        '&quot;'
        '}'
        '}'
        'x'
        '&quot;'
        '}'
        ' '
        '='
        ' '
        '1'
        ';'
        '
      '
        '}'
        ' 
    '
        '}'
        '
    
    '
        '?&gt;'
    Misc/locale.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string(1) "C"
    double(1.54)
    double(Infinity)
    654564.145400
    Sat Saturday Apr April
    --------------
    string(19) "Danish_Denmark.1252"
    double(1.54)
    double(Infinity)
    654564,145400
    lo lordag apr april
    --------------
    string(25) "Czech_Czech Republic.1250"
    double(1.54)
    double(Infinity)
    654564,145400
    so sobota IV duben
    --------------
    string(1) "C"
    float(1.54)
    float(Infinity)
    654564.145400
    Sat Saturday Apr April
    --------------
    string(19) "Danish_Denmark.1252"
    float(1.54)
    float(Infinity)
    654564,145400
    lo lordag apr april
    --------------
    string(25) "Czech_Czech Republic.1250"
    float(1.54)
    float(Infinity)
    654564,145400
    so sobota 4 duben
    --------------
    Misc/output2.php: SUCCEEDED
    Misc/parse_url%20%2327377.php: SUCCEEDED
    Misc/parse_url_at_bug.php: SUCCEEDED
    Misc/stack_trace.php: FAILED
    Script hung upNo errorsSuccess
    Expected test outputReal script output
    Unhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---> System.IndexOutOfRangeException: Index was outside the bounds of the array.
       at PHP.Core.PhpStackFrame..ctor(ScriptContext context, StackFrame frame, FrameKinds kind)
       at PHP.Core.PhpStackTrace..ctor(ScriptContext context, StackTrace clrTrace)
       at PHP.Core.PhpStackTrace..ctor(ScriptContext context, Int32 skipFrames)
       at PHP.Library.Errors.Backtrace()
       at <stack_trace.inc>.<Script>.j(ScriptContext <context>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\stack_trace.inc:line 11
       at <stack_trace.inc>.<Script>.j(Object instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <stack_trace.inc>.<Script>.i(ScriptContext <context>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\stack_trace.inc:line 6
       at <stack_trace.inc>.<Script>.i(Object instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <^0>.<Global>.<?0>.h(ScriptContext <context>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt:line 14
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack, DTypeDesc caller)
       at PHP.Core.PhpCallback.InvokeInternal(Object[] args)
       at PHP.Core.PhpCallback.Invoke(Object[] args)
       at PHP.Library.PhpArrays.Map(DTypeDesc caller, PhpCallback map, PhpArray[] arrays)
       at <__input.txt>.<Script>.<Lambda>(ScriptContext <context>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt:line 4
       at <__input.txt>.<Script>.<Lambda>(Object instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <__input.txt>.<Script>.f(ScriptContext <context>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt:line 6
       at <__input.txt>.<Script>.f(Object instance, PhpStack stack)
       at <__input.txt>.<Script>.<Main>(ScriptContext <context>, Dictionary`2 <locals>, DObject , DTypeDesc , Boolean ) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt:line 18
       at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)
       at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)
       --- End of inner exception stack trace ---
       at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)
       at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)
       at <Global>.Run(String[] )
    
    Misc/str_getcsv%20%2326691.php: SUCCEEDED
    Misc/tokens.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    T_REQUIRE_ONCE = 258,
    T_REQUIRE = 259,
    T_EVAL = 260,
    T_INCLUDE_ONCE = 261,
    T_INCLUDE = 262,
    T_LOGICAL_OR = 263,
    T_LOGICAL_XOR = 264,
    T_LOGICAL_AND = 265,
    T_PRINT = 266,
    T_SR_EQUAL = 267,
    T_SL_EQUAL = 268,
    T_XOR_EQUAL = 269,
    T_OR_EQUAL = 270,
    T_AND_EQUAL = 271,
    T_MOD_EQUAL = 272,
    T_CONCAT_EQUAL = 273,
    T_DIV_EQUAL = 274,
    T_MUL_EQUAL = 275,
    T_MINUS_EQUAL = 276,
    T_PLUS_EQUAL = 277,
    T_BOOLEAN_OR = 278,
    T_BOOLEAN_AND = 279,
    T_IS_NOT_IDENTICAL = 280,
    T_IS_IDENTICAL = 281,
    T_IS_NOT_EQUAL = 282,
    T_IS_EQUAL = 283,
    T_IS_GREATER_OR_EQUAL = 284,
    T_IS_SMALLER_OR_EQUAL = 285,
    T_SR = 286,
    T_SL = 287,
    T_INSTANCEOF = 288,
    T_UNSET_CAST = 289,
    T_BOOL_CAST = 290,
    T_OBJECT_CAST = 291,
    T_ARRAY_CAST = 292,
    T_STRING_CAST = 293,
    T_DOUBLE_CAST = 294,
    T_INT_CAST = 295,
    T_DEC = 296,
    T_INC = 297,
    T_CLONE = 298,
    T_NEW = 299,
    T_EXIT = 300,
    T_IF = 301,
    T_ELSEIF = 302,
    T_ELSE = 303,
    T_ENDIF = 304,
    T_LNUMBER = 305,
    T_DNUMBER = 306,
    T_STRING = 307,
    T_STRING_VARNAME = 308,
    T_VARIABLE = 309,
    T_NUM_STRING = 310,
    T_INLINE_HTML = 311,
    T_CHARACTER = 312,
    T_BAD_CHARACTER = 313,
    T_ENCAPSED_AND_WHITESPACE = 314,
    T_CONSTANT_ENCAPSED_STRING = 315,
    T_ECHO = 316,
    T_DO = 317,
    T_WHILE = 318,
    T_ENDWHILE = 319,
    T_FOR = 320,
    T_ENDFOR = 321,
    T_FOREACH = 322,
    T_ENDFOREACH = 323,
    T_DECLARE = 324,
    T_ENDDECLARE = 325,
    T_AS = 326,
    T_SWITCH = 327,
    T_ENDSWITCH = 328,
    T_CASE = 329,
    T_DEFAULT = 330,
    T_BREAK = 331,
    T_CONTINUE = 332,
    T_GOTO = 333,
    T_FUNCTION = 334,
    T_CONST = 335,
    T_RETURN = 336,
    T_TRY = 337,
    T_CATCH = 338,
    T_THROW = 339,
    T_USE = 340,
    T_GLOBAL = 341,
    T_PUBLIC = 342,
    T_PROTECTED = 343,
    T_PRIVATE = 344,
    T_FINAL = 345,
    T_ABSTRACT = 346,
    T_STATIC = 347,
    T_VAR = 348,
    T_UNSET = 349,
    T_ISSET = 350,
    T_EMPTY = 351,
    T_HALT_COMPILER = 352,
    T_CLASS = 353,
    T_INTERFACE = 354,
    T_EXTENDS = 355,
    T_IMPLEMENTS = 356,
    T_OBJECT_OPERATOR = 357,
    T_DOUBLE_ARROW = 358,
    T_LIST = 359,
    T_ARRAY = 360,
    T_CLASS_C = 361,
    T_METHOD_C = 362,
    T_FUNC_C = 363,
    T_LINE = 364,
    T_FILE = 365,
    T_COMMENT = 366,
    T_DOC_COMMENT = 367,
    T_OPEN_TAG = 368,
    T_OPEN_TAG_WITH_ECHO = 369,
    T_CLOSE_TAG = 370,
    T_WHITESPACE = 371,
    T_START_HEREDOC = 372,
    T_END_HEREDOC = 373,
    T_DOLLAR_OPEN_CURLY_BRACES = 374,
    T_CURLY_OPEN = 375,
    T_PAAMAYIM_NEKUDOTAYIM = 376,
    T_DOUBLE_COLON = 376,
    T_NAMESPACE = 377,
    T_NS_C = 378,
    T_DIR = 379,
    T_NS_SEPARATOR = 380,
    T_INCLUDE = 129,
    T_INCLUDE_ONCE = 130,
    T_EVAL = 131,
    T_REQUIRE = 132,
    T_REQUIRE_ONCE = 133,
    T_LOGICAL_OR = 136,
    T_LOGICAL_XOR = 137,
    T_LOGICAL_AND = 138,
    T_PRINT = 139,
    T_PLUS_EQUAL = 140,
    T_MINUS_EQUAL = 141,
    T_MUL_EQUAL = 142,
    T_DIV_EQUAL = 143,
    T_CONCAT_EQUAL = 144,
    T_MOD_EQUAL = 145,
    T_AND_EQUAL = 146,
    T_OR_EQUAL = 147,
    T_XOR_EQUAL = 148,
    T_SL_EQUAL = 149,
    T_SR_EQUAL = 150,
    T_BOOLEAN_OR = 151,
    T_BOOLEAN_AND = 152,
    T_IS_EQUAL = 153,
    T_IS_NOT_EQUAL = 154,
    T_IS_IDENTICAL = 155,
    T_IS_NOT_IDENTICAL = 156,
    T_IS_SMALLER_OR_EQUAL = 157,
    T_IS_GREATER_OR_EQUAL = 158,
    T_SL = 159,
    T_SR = 160,
    T_INC = 161,
    T_DEC = 162,
    T_NEW = 164,
    T_INSTANCEOF = 165,
    T_CLONE = 167,
    T_LNUMBER = 168,
    T_DNUMBER = 170,
    T_STRING = 171,
    T_STRING_VARNAME = 172,
    T_VARIABLE = 173,
    T_NUM_STRING = 174,
    T_INLINE_HTML = 175,
    T_CHARACTER = 176,
    T_BAD_CHARACTER = 177,
    T_ENCAPSED_AND_WHITESPACE = 178,
    T_CONSTANT_ENCAPSED_STRING = 179,
    T_EXIT = 180,
    T_IF = 181,
    T_ELSEIF = 182,
    T_ELSE = 183,
    T_ENDIF = 184,
    T_ECHO = 185,
    T_DO = 186,
    T_WHILE = 187,
    T_ENDWHILE = 188,
    T_FOR = 189,
    T_ENDFOR = 190,
    T_FOREACH = 191,
    T_ENDFOREACH = 192,
    T_AS = 193,
    T_SWITCH = 194,
    T_ENDSWITCH = 195,
    T_CASE = 196,
    T_DEFAULT = 197,
    T_BREAK = 198,
    T_CONTINUE = 199,
    T_FUNCTION = 200,
    T_CONST = 201,
    T_RETURN = 202,
    T_GLOBAL = 203,
    T_STATIC = 204,
    T_VAR = 205,
    T_UNSET = 206,
    T_ISSET = 207,
    T_EMPTY = 208,
    T_CLASS = 209,
    T_EXTENDS = 210,
    T_OBJECT_OPERATOR = 211,
    T_DOUBLE_ARROW = 212,
    T_LIST = 213,
    T_ARRAY = 214,
    T_CLASS_C = 215,
    T_METHOD_C = 216,
    T_FUNC_C = 217,
    T_LINE = 218,
    T_FILE = 219,
    T_DIR = 220,
    T_COMMENT = 221,
    T_DOC_COMMENT = 222,
    T_OPEN_TAG = 227,
    T_OPEN_TAG_WITH_ECHO = 228,
    T_CLOSE_TAG = 229,
    T_WHITESPACE = 230,
    T_START_HEREDOC = 231,
    T_END_HEREDOC = 232,
    T_DOLLAR_OPEN_CURLY_BRACES = 233,
    T_CURLY_OPEN = 234,
    T_DOUBLE_COLON = 235,
    T_PAAMAYIM_NEKUDOTAYIM = 235,
    T_GOTO = 237,
    T_TRY = 238,
    T_CATCH = 239,
    T_THROW = 240,
    T_INTERFACE = 241,
    T_IMPLEMENTS = 242,
    T_ABSTRACT = 243,
    T_FINAL = 244,
    T_PRIVATE = 245,
    T_PROTECTED = 246,
    T_PUBLIC = 247,
    T_BOOL_CAST = 287,
    T_INT_CAST = 290,
    T_DOUBLE_CAST = 296,
    T_STRING_CAST = 299,
    T_ARRAY_CAST = 302,
    T_OBJECT_CAST = 303,
    T_UNSET_CAST = 304,
    T_HALT_COMPILER = 351,
    Misc/user_error_handlers.php: SUCCEEDED
    Objects/accessing%20property%20line%20number%20%2326052.php: SUCCEEDED
    Objects/conditional1.php: SUCCEEDED
    Objects/conditional2.php: SUCCEEDED
    Objects/conditional_base_class.php: SUCCEEDED
    Objects/constant_test.php: SUCCEEDED
    Objects/evaled_parent.php: SUCCEEDED
    Objects/getter_setter_bug28444.php: SUCCEEDED
    Objects/instanceof.php: SUCCEEDED
    Objects/new_via_unknown_ctor.php: SUCCEEDED
    Objects/object_creation_test.php: SUCCEEDED
    Objects/overrides%20%231285.php: SUCCEEDED
    Objects/static_field_test.php: SUCCEEDED
    Objects/static_inheritence.php: SUCCEEDED
    Objects/static_method_test.php: SUCCEEDED
    Objects/static_object_vars.php: SUCCEEDED
    Objects/sys_class_const.php: SUCCEEDED
    Objects/this2.php: SUCCEEDED
    RegEx/backreferences.php: SUCCEEDED
    RegEx/dolar_escape.php: SUCCEEDED
    RegEx/ereg.php: SUCCEEDED
    RegEx/namedbackref.php: SUCCEEDED
    RegEx/namedgroups.php: SUCCEEDED
    RegEx/preg_match_unmatched_groups.php: SUCCEEDED
    RegEx/preg_replace_eval.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ab"01300 as"00da sd"0asdsa das asd 11asd a1sd a
    ab"01300 as"00da sd"0(aasdasdkjask,$a,\,\l,a,s,d,a,s,d,k,j,a,s,${120})(ldjaklsdjalk,$l,\,\l,d,j,a,k,l,s,d,j,a,l,${120})djdsa das asd 11asd a1sd a
    ab"01300 as"00da sd"0asdsa das asd 11asd a1sd a
    ab"01300 as"00da sd"0(aasdasdkjask,$a,\,\l,a,s,d,a,s,d,k,j,,,${120})(ldjaklsdjalk,$l,\,\l,d,j,a,k,l,s,d,j,,,${120})djdsa das asd 11asd a1sd a
    RegEx/regexp-sql.php: SUCCEEDED
    RegEx/regexp_smiles.php: SUCCEEDED
    RegEx/Perl/cache.php: SUCCEEDED
    RegEx/Perl/grep1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      [3] => string(3) "1.5"
      [6] => string(5) "58.54"
    }
    Notice: preg_grep(): Array to string conversion in D:\Documents\Projects\Phalanger\Main\Testing\Tests\RegEx\Perl\__input.txt at expression on line 5, column 1.
    array(2) {
      [3]=>
      string(3) "1.5"
      [6]=>
      string(5) "58.54"
    }
    RegEx/Perl/grep2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Food  array
    (
      [0] => apple
      [1] => banana
      [2] => squid
      [3] => pear
    )
    Fruit array
    (
      [0] => apple
      [1] => banana
      [3] => pear
    )
    Food  Array
    (
        [0] => apple
        [1] => banana
        [2] => squid
        [3] => pear
    )
    Fruit Array
    (
        [0] => apple
        [1] => banana
        [3] => pear
    )
    RegEx/Perl/match1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array [empty]
    array
    (
      [0] => array
      (
        [0] => def
        [1] => 3
      )
    )
    Array
    (
    )
    Array
    (
        [0] => Array
        (
            [0] => def
            [1] => 3
        )
    
    )
    RegEx/Perl/match10.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    (
      [0] => 1231
      [1] => 1
      [2] => 23
      [3] => 1
    )
    Array
    (
        [0] => 1231
        [1] => 1
        [2] => 23
        [3] => 1
    )
    RegEx/Perl/match2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    (
      [0] => array
      (
        [0] => def
        [1] => 0
      )
    )
    Array
    (
        [0] => Array
        (
            [0] => def
            [1] => 0
        )
    
    )
    RegEx/Perl/match3.php: SUCCEEDED
    RegEx/Perl/match4.php: SUCCEEDED
    RegEx/Perl/match5.php: SUCCEEDED
    RegEx/Perl/match6.php: SUCCEEDED
    RegEx/Perl/match7.php: SUCCEEDED
    RegEx/Perl/match8.php: SUCCEEDED
    RegEx/Perl/match9.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    (
      [0] => 209.6.145.47 - - [22/Nov/2003:19:02:30 -0500] "GET /dir/doc.htm HTTP/1.0" 200 6776 "http://search.yahoo.com/search?p=key+words=UTF-8" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)"
      [1] => 209.6.145.47
      [2] => -
      [3] => -
      [4] => 22/Nov/2003:19:02:30 -0500
      [5] => GET
      [6] => /dir/doc.htm
      [7] => HTTP
      [8] => 1.0
      [9] => 200
      [10] => 6776
      [11] => "http://search.yahoo.com/search?p=key+words=UTF-8"
      [12] => "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)"
    )
    Array
    (
        [0] => 209.6.145.47 - - [22/Nov/2003:19:02:30 -0500] "GET /dir/doc.htm HTTP/1.0" 200 6776 "http://search.yahoo.com/search?p=key+words=UTF-8" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)"
        [1] => 209.6.145.47
        [2] => -
        [3] => -
        [4] => 22/Nov/2003:19:02:30 -0500
        [5] => GET
        [6] => /dir/doc.htm
        [7] => HTTP
        [8] => 1.0
        [9] => 200
        [10] => 6776
        [11] => "http://search.yahoo.com/search?p=key+words=UTF-8"
        [12] => "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)"
    )
    RegEx/Perl/match_all1.php: SUCCEEDED
    RegEx/Perl/match_all2.php: SUCCEEDED
    RegEx/Perl/match_all3.php: SUCCEEDED
    RegEx/Perl/match_all4.php: SUCCEEDED
    RegEx/Perl/match_dollar.php: SUCCEEDED
    RegEx/Perl/overflow.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string("kfkaj +j k45´┐Ż´┐Ż´┐Ż´┐Ż´┐Ż3#$%^&kjakfjkaj|kfj")
    string("kfkaj +j k45�����3#$%^&kjakfjkaj|kfj")
    RegEx/Perl/quote1.php: SUCCEEDED
    RegEx/Perl/quote2.php: SUCCEEDED
    RegEx/Perl/quote3.php: SUCCEEDED
    RegEx/Perl/replace1.php: SUCCEEDED
    RegEx/Perl/replace2.php: SUCCEEDED
    RegEx/Perl/replace3.php: SUCCEEDED
    RegEx/Perl/replace4.php: SUCCEEDED
    RegEx/Perl/replace5.php: SUCCEEDED
    RegEx/Perl/replace6.php: SUCCEEDED
    RegEx/Perl/replace7.php: SUCCEEDED
    RegEx/Perl/replace8.php: SUCCEEDED
    RegEx/Perl/replace9.php: SUCCEEDED
    RegEx/Perl/replace_callback1.php: SUCCEEDED
    RegEx/Perl/replace_callback2.php: SUCCEEDED
    RegEx/Perl/split1.php: SUCCEEDED
    RegEx/Perl/split2.php: SUCCEEDED
    RegEx/Perl/split3.php: SUCCEEDED
    RegEx/Perl/split4.php: SUCCEEDED
    RegEx/Perl/split5.php: SUCCEEDED
    RegEx/Perl/split6.php: SUCCEEDED
    RegEx/Perl/ungreedy.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    aaa
    a
    aaa
    
    a
    aa
    aaa
    aa
    aaa
    aaa
    a
    aaa
    a
    a
    aa
    aaa
    aa
    aaa
    RegEx/Perl/unsuccessful-preg_match_all.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0
    4
    1
    4
    0
    4
    1
    7
    RegEx/Perl/withoutdelimiters.php: SUCCEEDED
    SPL/ArrayAccess_offsetExists.php: SUCCEEDED
    SPL/Autoload_ctor.php: SUCCEEDED
    SPL/Autoload_extends.php: SUCCEEDED
    SPL/exceptions.php: SUCCEEDED
    Strings/addcslashes.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    \f\o\o\[ \]
    Issues a Warning:
    // echo addcslashes("zoo['.']", 'z..A');
    // output:  \zoo['\.']
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 4, column 1.
    
    Issues a Warning:
    // echo addcslashes("zoo['.']", 'z..A');
    // output:  \zoo['\.']
    Strings/addslashes.php: SUCCEEDED
    Strings/chunk_split.php: SUCCEEDED
    Strings/concat.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string(2) "ab"
    string(2) "ab"
    string(2) "ab"
    string(2) "ab"
    string(2) "ab"
    string(2) "aB"
    string(2) "Ab"
    string(2) "AB"
    string(2) "ab"
    string(2) "a1"
    string(2) "1b"
    string(2) "11"
    string(2) "ab"
    string(2) "aB"
    string(2) "Ab"
    string[binary](2) "\x41\x42"
    string(2) "ab"
    string(2) "ab"
    string(2) "ab"
    string(2) "ab"
    string(2) "ab"
    string(2) "aB"
    string(2) "Ab"
    string(2) "AB"
    string(2) "ab"
    string(2) "a1"
    string(2) "1b"
    string(2) "11"
    string(2) "ab"
    string[binary](2) "aB"
    string[binary](2) "Ab"
    string[binary](2) "AB"
    Strings/count_chars.php: SUCCEEDED
    Strings/crc32.php: SUCCEEDED
    Strings/crypt.php: SUCCEEDED
    Strings/crypt2.php: SUCCEEDED
    Strings/echo.php: SUCCEEDED
    Strings/explode.php: SUCCEEDED
    Strings/get_html_translation_table.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <hr>[&] => &amp;
    [>] => &gt;
    [<] => &lt;
    ["] => &quot;
    <hr>Hallo &amp; &lt;Frau&gt; &amp; Kr&iuml;&iquest;&frac12;mer
    <hr>[&] => &amp;
    [>] => &gt;
    [<] => &lt;
    ["] => &quot;
    <hr>Hallo &amp; &lt;Frau&gt; &amp; Kr�mer
    Strings/mb_strlen.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Call to undefined function mb_strlen() in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 4
    Error: Call to undefined function: 'mb_strlen' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 4, column 1.
    Strings/nl2br.php: SUCCEEDED
    Strings/pack.php: SUCCEEDED
    Strings/pos.php: SUCCEEDED
    Strings/runtime-quotes.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    fread = (x''y"z)
    fgets = (x''y"z)
    file[0] = (x''y"z)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    
    Warning: fopen(runtime-quotes2.txt): failed to open stream: Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 33
    
    Warning: fwrite() expects parameter 1 to be resource, boolean given in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 35
    fwrite = ()
    
    Warning: fputs() expects parameter 1 to be resource, boolean given in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 38
    fputs = ()
    
    Warning: fclose() expects parameter 1 to be resource, boolean given in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 41
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (x'y"z)
    fgets = (x'y"z)
    file[0] = (x'y"z)
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (a\'b"\\ca\)
    fgets = (a\'b"\\ca\'b"\\c)
    file[0] = (a\'b"\\ca\'b"\\c)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    e'e
    e''e
    e'e
    e'e
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    e'e
    e'e
    e'e
    e'e
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    fread = (x''y"z)
    fgets = (x''y"z)
    file[0] = (x''y"z)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    
    Warning: fopen(): Unable to access (D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\runtime-quotes2.txt): Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 33, column 3.
    
    Warning: Cannot convert boolean to resource implicitly in a call to function fwrite() in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 35, column 3.
    fwrite = (0)
    
    Warning: Cannot convert boolean to resource implicitly in a call to function fputs() in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 38, column 3.
    fputs = (0)
    
    Warning: Cannot convert boolean to resource implicitly in a call to function fclose() in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 41, column 3.
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (x'y"z)
    fgets = (x'y"z)
    file[0] = (x'y"z)
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (a\'b"\\ca\)
    fgets = (a\'b"\\ca\'b"\\c)
    file[0] = (a\'b"\\ca\'b"\\c)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    e'e
    e''e
    e'e
    e'e
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    e'e
    e'e
    e'e
    e'e
    Strings/sprintf.php: SUCCEEDED
    Strings/sprintf2.php: SUCCEEDED
    Strings/strtr.php: SUCCEEDED
    Strings/str_ireplace.php: SUCCEEDED
    Strings/str_replace.php: SUCCEEDED
    Strings/str_word_count.php: SUCCEEDED
    Strings/substr_operations.php: SUCCEEDED
    Strings/wordwrap.php: SUCCEEDED
    Variables/advanced_serialize.php: SUCCEEDED
    Variables/arguments.php: SUCCEEDED
    Variables/bitwise.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "00"
    string(2) "31"
    string(2) "31"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    0
    0
    0
    5
    0
    5
    40
    5
    45
    string(48) "000000000000000000000000000000000000000000000000"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(14) "31323331323331"
    string(2) "30"
    string(14) "31323331323331"
    string(16) "3635343635343536"
    string(2) "30"
    string(16) "3635343635343536"
    string(14) "337a5e8be43d7a"
    string(14) "00002130120201"
    string(48) "337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42"
    string(16) "347d598ce33a7e77"
    string(16) "0200243214040100"
    string(48) "367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42"
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "00"
    string(2) "31"
    string(2) "31"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    0
    -9223372036854775808
    -9223372036854775808
    -9223372036854775803
    0
    -9223372036854775803
    40
    5
    45
    string(48) "000000000000000000000000000000000000000000000000"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(14) "31323331323331"
    string(2) "30"
    string(14) "31323331323331"
    string(16) "3635343635343536"
    string(2) "30"
    string(16) "3635343635343536"
    string(14) "337a5e8be43d7a"
    string(14) "00002130120201"
    string(48) "337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42"
    string(16) "347d598ce33a7e77"
    string(16) "0200243214040100"
    string(48) "367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42"
    Variables/comparisons.php: SUCCEEDED
    Variables/constant.php: SUCCEEDED
    Variables/extract.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    EXTR_PREFIX_ALL
    integer(4)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
      'prefix_non_existent' => integer(1)
    }
    <hr>EXTR_PREFIX_INVALID
    integer(5)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => integer(2)
      'non_existent' => integer(1)
      'prefix_' => integer(1)
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => 'hello'
    }
    <hr>EXTR_PREFIX_SAME
    integer(3)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'non_existent' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>EXTR_PREFIX_IF_EXISTS
    integer(3)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>
    EXTR_PREFIX_ALL
    integer(4)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
      'prefix_non_existent' => integer(1)
    }
    <hr>EXTR_PREFIX_INVALID
    integer(2)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_ad' => integer(2)
      'prefix_non_existent' => integer(1)
    }
    <hr>EXTR_PREFIX_SAME
    integer(4)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'non_existent' => integer(1)
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>EXTR_PREFIX_IF_EXISTS
    integer(3)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>
    Variables/func_get_args.php: SUCCEEDED
    Variables/is_number.php: SUCCEEDED
    Variables/serialize.php: SUCCEEDED
    Variables/unserialize_objects.php: SUCCEEDED
    Variables/var_dumping.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Array
    (
        [0] => 1
        [1] => 
        [2] => 1
        [3] => 1.2
        [4] => 
        [5] => asdas
        [6] => Array
            (
                [0] => 1
            )
    
        [7] => stdClass Object
            (
            )
    
        [8] => Resource id #1
    )
    array(9) {
      [0]=>
      bool(true)
      [1]=>
      bool(false)
      [2]=>
      int(1)
      [3]=>
      float(1.2)
      [4]=>
      NULL
      [5]=>
      string(5) "asdas"
      [6]=>
      array(1) {
        [0]=>
        int(1)
      }
      [7]=>
      object(stdClass)#1 (0) {
      }
      [8]=>
      resource(1) of type (stream)
    }
    array (
      0 => true,
      1 => false,
      2 => 1,
      3 => 1.2,
      4 => NULL,
      5 => 'asdas',
      6 => 
      array (
        0 => 1,
      ),
      7 => 
      stdClass::__set_state(array(
      )),
      8 => NULL,
    )
    Array
    (
        [0] => 1
        [1] => 
        [2] => 1
        [3] => 1.2
        [4] => 
        [5] => asdas
        [6] => Array
        (
            [0] => 1
        )
    
        [7] => stdClass Object
        (
        )
    
        [8] => resource id #4
    
    )
    array(9) {
      [0]=>
      bool(true)
      [1]=>
      bool(false)
      [2]=>
      int(1)
      [3]=>
      float(1.2)
      [4]=>
      NULL
      [5]=>
      string(5) "asdas"
      [6]=>
      array(1) {
        [0]=>
        int(1)
      }
      [7]=>
      object(stdClass)(0) {
      }
      [8]=>
      resource(4) of type (stream)
    }
    array
    (
      '0' => true,
      '1' => false,
      '2' => 1,
      '3' => 1.2,
      '4' => NULL,
      '5' => 'asdas',
      '6' => array
      (
        '0' => 1
      ),
      '7' => class stdClass
      {
    
      },
      '8' => NULL
    )
    Xml/005.php: SUCCEEDED
    Xml/006.php: SUCCEEDED
    Xml/007.php: SUCCEEDED
    Xml/008.php: SUCCEEDED
    Xml/009.php: SUCCEEDED
    Xml/011.php: SUCCEEDED
    Xml/013.php: SUCCEEDED
    Xml/017.php: SUCCEEDED
    Xml/018.php: SUCCEEDED
    Xml/019.php: SUCCEEDED
    Xml/020.php: SUCCEEDED
    Xml/021.php: SUCCEEDED
    Xml/025.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
      'foo' => 'foobar'
    }
    array
    {
      'html' => 'http://www.w3.org/1999/xhtml'
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
    }
    array
    {
      'html' => 'http://www.w3.org/1999/xhtml'
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'foo' => 'foobar'
      'baz' => 'foobarbaz'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
    }
    array
    {
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
      'baz' => 'foobarbaz'
      'foo' => 'foobar'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
      'baz' => 'foobarbaz'
      'foo' => 'foobar'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
    }
    array
    {
    }
    Xml/026.php: SUCCEEDED
    Xml/027.php: SUCCEEDED
    Xml/028.php: SUCCEEDED
    Xml/029.php: SUCCEEDED
    Xml/030.php: SUCCEEDED
    Xml/032.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    FALSE
    FALSE
    FALSE
    TRUE
    TRUE
    TRUE
    Xml/033.php: SUCCEEDED
    Xml/bug26384.php: SUCCEEDED
    Xml/bug28721.php: SUCCEEDED
    Xml/bug28817.php: SUCCEEDED
    Xml/bug32615.php: SUCCEEDED
    Xml/bug33853.php: SUCCEEDED
    Xml/bug34276.php: SUCCEEDED
    Xml/bug35342.php: SUCCEEDED
    Xml/bug36756.php: SUCCEEDED
    Xml/bug37277.php: SUCCEEDED
    Xml/dom002.php: SUCCEEDED
    Xml/dom003.php: SUCCEEDED
    Xml/dom006.php: SUCCEEDED
    Xml/dom007.php: SUCCEEDED
    Xml/dom_set_attr_node.php: SUCCEEDED
    Xml/xmlhandler.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test begins
    <br/>
    <br/>test begins
    <br/>empty begins
    <br/>empty ends
    <br/>nocontent begins
    <br/>nocontent ends
    <br/>content begins
    <br/>empty begins
    <br/>empty ends
    <br/>empty begins
    <br/>empty ends
    <br/>content ends
    <br/>empty begins
    <br/>empty ends
    <br/>empty begins
    <br/>empty ends
    <br/>test ends
    <br/>Test ends
    <br/>
    <br/>
    Test begins
    <br/>
    <br/>
    Error: Call to undefined function: 'xml_parser_create' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Xml\__input.txt at expression on line 18, column 3.
    Xml/xslt001.php: SUCCEEDED
    Xml/xslt002.php: SUCCEEDED
    Xml/xslt003.php: SUCCEEDED
    Xml/xslt004.php: SUCCEEDED
    Xml/xslt005.php: SUCCEEDED
    Xml/xslt006.php: SUCCEEDED
    Xml/xslt007.php: SUCCEEDED
    Xml/xslt010.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test 10: EXSLT Support
      
      
      Test Date : 0001-12-31Z
        year                 : 1
        leap-year            : false
        month-in-year        : 12
        month-name           : December
        month-abbreviation   : Dec
        week-in-year         : 1
        day-in-year          : 365
        day-in-month         : 31
        day-of-week-in-month : 5
        day-in-week          : 2
        day-name             : Monday
        day-abbreviation     : Mon
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : 3000-01-31
        year                 : 3000
        leap-year            : false
        month-in-year        : 1
        month-name           : January
        month-abbreviation   : Jan
        week-in-year         : 5
        day-in-year          : 31
        day-in-month         : 31
        day-of-week-in-month : 5
        day-in-week          : 6
        day-name             : Friday
        day-abbreviation     : Fri
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : 2000-02-29
        year                 : 2000
        leap-year            : true
        month-in-year        : 2
        month-name           : February
        month-abbreviation   : Feb
        week-in-year         : 9
        day-in-year          : 60
        day-in-month         : 29
        day-of-week-in-month : 5
        day-in-week          : 3
        day-name             : Tuesday
        day-abbreviation     : Tue
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : 9990001-12-31Z
        year                 : 9990001
        leap-year            : false
        month-in-year        : 12
        month-name           : December
        month-abbreviation   : Dec
        week-in-year         : 1
        day-in-year          : 365
        day-in-month         : 31
        day-of-week-in-month : 5
        day-in-week          : 2
        day-name             : Monday
        day-abbreviation     : Mon
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : -0004-02-29
        year                 : -4
        leap-year            : true
        month-in-year        : 2
        month-name           : February
        month-abbreviation   : Feb
        week-in-year         : 9
        day-in-year          : 60
        day-in-month         : 29
        day-of-week-in-month : 5
        day-in-week          : 1
        day-name             : Sunday
        day-abbreviation     : Sun
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
    Test 10: EXSLT Support
    Warning: Cannot find a script or an extension object associated with namespace 'http://exslt.org/dates-and-times'. in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Xml\__input.txt at expression on line 14, column 3.
    
    Warning: Illegal string offset '-1' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Phalanger.inc at expression on line 7, column 6.
    Xml/xslt011.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test 11: php:function Support
    
    Warning: XSLTProcessor::transformToXml(): A PHP Object cannot be converted to a XPath-string in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Xml\__input.txt on line 18
    <?xml version="1.0"?>
    foobar - secondArg
    foobar - 
    this is from an external DomDocument
    from the Input Document
    static
    Test 11: php:function Support
    <?xml version="1.0" encoding="utf-8"?>foobar - secondArg
    foobar - 
    this is from an external DomDocument
    from the Input Document
    static
    not a DomNode object
    Xml/xslt012.php: SUCCEEDED
    ================================================ FILE: Testing/Tests/TestLogs/TestLog (1683).htm ================================================ PHP.NET Compiler test log

    PHP.NET Compiler test log

    (88%) 807 succeeded, 115 failed
    Test ResultCompiler error outputExpected test result
    @PHP/classes/array_access_001.php: SUCCEEDED
    @PHP/classes/array_access_002.php: SUCCEEDED
    @PHP/classes/array_access_003.php: SUCCEEDED
    @PHP/classes/array_access_004.php: SUCCEEDED
    @PHP/classes/array_access_005.php: SUCCEEDED
    @PHP/classes/array_access_006.php: SUCCEEDED
    @PHP/classes/array_access_007.php: SUCCEEDED
    @PHP/classes/array_access_008.php: SUCCEEDED
    @PHP/classes/array_access_009.php: SUCCEEDED
    @PHP/classes/array_access_010.php: SUCCEEDED
    @PHP/classes/array_access_011.php: SUCCEEDED
    @PHP/classes/array_access_013.php: SUCCEEDED
    @PHP/classes/assign_op_property_001.php: SUCCEEDED
    @PHP/classes/autoload_001.php: SUCCEEDED
    @PHP/classes/autoload_002.php: SUCCEEDED
    @PHP/classes/autoload_003.php: SUCCEEDED
    @PHP/classes/autoload_005.php: SUCCEEDED
    @PHP/classes/autoload_006.php: SUCCEEDED
    @PHP/classes/bug23951.php: SUCCEEDED
    @PHP/classes/bug24399.php: SUCCEEDED
    @PHP/classes/bug24445.php: SUCCEEDED
    @PHP/classes/bug26737.php: SUCCEEDED
    @PHP/classes/bug27468.php: SUCCEEDED
    @PHP/classes/bug27504.php: SUCCEEDED
    @PHP/classes/class_example.php: SUCCEEDED
    @PHP/classes/class_stdclass.php: SUCCEEDED
    @PHP/classes/clone_001.php: SUCCEEDED
    @PHP/classes/clone_002.php: SUCCEEDED
    @PHP/classes/clone_003.php: SUCCEEDED
    @PHP/classes/clone_004.php: SUCCEEDED
    @PHP/classes/clone_006.php: SUCCEEDED
    @PHP/classes/constants_scope_001.php: SUCCEEDED
    @PHP/classes/ctor_dtor.php: SUCCEEDED
    @PHP/classes/ctor_dtor_inheritance.php: SUCCEEDED
    @PHP/classes/ctor_name_clash.php: SUCCEEDED
    @PHP/classes/dereferencing_001.php: SUCCEEDED
    @PHP/classes/destructor_and_echo.php: SUCCEEDED
    @PHP/classes/destructor_and_references.php: SUCCEEDED
    @PHP/classes/destructor_inheritance.php: SUCCEEDED
    @PHP/classes/destructor_visibility_003.php: SUCCEEDED
    @PHP/classes/factory_001.php: SUCCEEDED
    @PHP/classes/factory_and_singleton_001.php: SUCCEEDED
    @PHP/classes/factory_and_singleton_002.php: SUCCEEDED
    @PHP/classes/final.php: SUCCEEDED
    @PHP/classes/incdec_property_001.php: SUCCEEDED
    @PHP/classes/incdec_property_002.php: SUCCEEDED
    @PHP/classes/incdec_property_003.php: SUCCEEDED
    @PHP/classes/incdec_property_004.php: SUCCEEDED
    @PHP/classes/inheritance.php: SUCCEEDED
    @PHP/classes/inheritance_002.php: SUCCEEDED
    @PHP/classes/interfaces_001.php: SUCCEEDED
    @PHP/classes/interface_construct.php: SUCCEEDED
    @PHP/classes/interface_doubled.php: SUCCEEDED
    @PHP/classes/interface_implemented.php: SUCCEEDED
    @PHP/classes/iterators_001.php: SUCCEEDED
    @PHP/classes/iterators_002.php: SUCCEEDED
    @PHP/classes/iterators_003.php: SUCCEEDED
    @PHP/classes/iterators_004.php: SUCCEEDED
    @PHP/classes/iterators_006.php: SUCCEEDED
    @PHP/classes/iterators_007.php: SUCCEEDED
    @PHP/classes/object_reference_001.php: SUCCEEDED
    @PHP/classes/private_001.php: SUCCEEDED
    @PHP/classes/private_002.php: SUCCEEDED
    @PHP/classes/private_003.php: SUCCEEDED
    @PHP/classes/private_003b.php: SUCCEEDED
    @PHP/classes/private_004.php: SUCCEEDED
    @PHP/classes/private_004b.php: SUCCEEDED
    @PHP/classes/private_005.php: SUCCEEDED
    @PHP/classes/private_005b.php: SUCCEEDED
    @PHP/classes/private_006.php: SUCCEEDED
    @PHP/classes/private_006b.php: SUCCEEDED
    @PHP/classes/private_007.php: SUCCEEDED
    @PHP/classes/private_007b.php: SUCCEEDED
    @PHP/classes/private_members.php: SUCCEEDED
    @PHP/classes/private_redeclare.php: SUCCEEDED
    @PHP/classes/protected_001.php: SUCCEEDED
    @PHP/classes/protected_001b.php: SUCCEEDED
    @PHP/classes/protected_002.php: SUCCEEDED
    @PHP/classes/serialize_001.php: SUCCEEDED
    @PHP/classes/singleton_001.php: SUCCEEDED
    @PHP/classes/static_properties_001.php: SUCCEEDED
    @PHP/classes/type_hinting_001.php: SUCCEEDED
    @PHP/classes/type_hinting_003.php: SUCCEEDED
    @PHP/classes/visibility_000c.php: SUCCEEDED
    @PHP/classes/visibility_001c.php: SUCCEEDED
    @PHP/classes/visibility_002c.php: SUCCEEDED
    @PHP/classes/visibility_003a.php: SUCCEEDED
    @PHP/classes/visibility_003c.php: SUCCEEDED
    @PHP/classes/visibility_004a.php: SUCCEEDED
    @PHP/classes/visibility_004b.php: SUCCEEDED
    @PHP/classes/visibility_004c.php: SUCCEEDED
    @PHP/classes/visibility_005.php: SUCCEEDED
    @PHP/classes/__call_001.php: SUCCEEDED
    @PHP/classes/__set_data_corrupt.php: SUCCEEDED
    @PHP/classes/__set__get_001.php: SUCCEEDED
    @PHP/classes/__set__get_004.php: SUCCEEDED
    @PHP/classes/__set__get_005.php: SUCCEEDED
    @PHP/date/bug17988.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2002-06-25 12:18:48
    2002-06-25 14:18:48
    2002-06-25 13:18:48
    2002-06-25 12:18:48
    2002-06-25 18:18:48
    2002-06-25 14:18:48
    2002-06-25 14:18:48
    2002-06-25 18:18:48
    2002-06-25 10:18:48
    2002-06-25 17:18:48
    2002-06-25 11:18:48
    2002-06-25 17:48:48
    2002-06-25 10:48:48
    2002-06-25 14:18:48
    2002-06-25 14:18:48
    2002-06-25 13:18:48
    2002-06-25 12:18:48
    2002-06-25 18:18:48
    2002-06-25 14:18:48
    2002-06-25 14:18:48
    2002-06-25 18:18:48
    2002-06-25 10:18:48
    2002-06-25 17:18:48
    2002-06-25 11:18:48
    2002-06-25 17:48:48
    2002-06-25 10:48:48
    @PHP/date/bug26317.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2003-11-19 17:20:42
    2003-11-19 17:20:42
    2003-11-19 17:20:42
    2003-11-19 16:20:42
    2003-11-19 16:20:42
    2003-11-19 16:20:42
    @PHP/date/bug26320.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2003-11-19 12:30:42
    2003-11-19 13:30:42
    2003-11-19 12:30:42
    2003-11-19 12:30:42
    @PHP/date/bug28088.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    The following line rightly shows the correct date time:
    04/04/04 2145
    But the following line fails to show the correct date time:
    04/03/04 2245
    The following line rightly shows the correct date time:
    04/04/04 2345
    But the following line fails to show the correct date time:
    04/04/04 0045
    @PHP/date/bug28599.php: SUCCEEDED
    @PHP/date/bug29150.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2005-06-19 22:00:00
    2005-06-20 00:00:00
    @PHP/date/bug29585.php: SUCCEEDED
    @PHP/date/bug29595.php: SUCCEEDED
    @PHP/date/bug33056.php: SUCCEEDED
    @PHP/date/bug33452.php: SUCCEEDED
    @PHP/date/bug33562.php: SUCCEEDED
    @PHP/date/bug33563.php: SUCCEEDED
    @PHP/date/bug33578.php: SUCCEEDED
    @PHP/date/bug33869.php: SUCCEEDED
    @PHP/date/bug34676.php: SUCCEEDED
    @PHP/date/bug34771.php: SUCCEEDED
    @PHP/date/bug35143.php: SUCCEEDED
    @PHP/date/bug35414.php: SUCCEEDED
    @PHP/date/bug35422.php: SUCCEEDED
    @PHP/date/bug35425.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    integer(42)
    integer(1)
    integer(1)
    integer(1)
    integer(1)
    integer(0)
    integer(0)
    integer(1)
    integer(1)
    integer(31)
    integer(1104537661)
    integer(6)
    integer(53)
    integer(5)
    integer(2005)
    integer(0)
    integer(3600)
    integer(292)
    integer(1)
    integer(1)
    integer(1)
    integer(1)
    integer(0)
    integer(0)
    integer(1)
    integer(1)
    integer(31)
    integer(1104559261)
    integer(6)
    integer(53)
    integer(5)
    integer(2005)
    integer(0)
    integer(-18000)
    @PHP/date/bug35456.php: SUCCEEDED
    @PHP/date/bug35624.php: SUCCEEDED
    @PHP/date/bug35630.php: SUCCEEDED
    @PHP/date/bug35699.php: SUCCEEDED
    @PHP/date/bug35705.php: SUCCEEDED
    @PHP/date/bug35885.php: SUCCEEDED
    @PHP/date/bug35887.php: SUCCEEDED
    @PHP/date/date.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    c: 2003-01-23T13:20:59+01:00
    r: Thu, 23 Jan 2003 13:20:59 +0100
    c: 2003-01-23T13:20:59+01:00
    r: Thu, 23 Jan 2003 13:20:59 +0100
    c: 2003-01-23T12:20:59+00:00
    r: Thu, 23 Jan 2003 12:20:59 +0000
    c: 2003-01-23T13:20:59+01:00
    r: Thu, 23 Jan 2003 13:20:59 +0100
    @PHP/date/date_create-1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\date\__input.txt on line 28
    SKIP
    @PHP/date/date_create-2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\date\__input.txt on line 6
    SKIP
    @PHP/date/date_default_timezone_get-3.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Europe/Prague
    America/Chicago
    Europe/Rome
    America/Chicago
    @PHP/date/date_modify-1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\date\__input.txt on line 6
    SKIP
    @PHP/date/date_modify-2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\date\__input.txt on line 6
    SKIP
    @PHP/date/default-timezone-1.php: SUCCEEDED
    @PHP/date/default-timezone-2.php: SUCCEEDED
    @PHP/date/format-negative-timestamp.php: SUCCEEDED
    @PHP/date/strtotime.php: SUCCEEDED
    @PHP/date/timezone-configuration.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    1119125744
    1119125744
    1119125744
    1119125744
    1119129344
    1119125744
    @PHP/doc_examples/test001.php: SUCCEEDED
    @PHP/doc_examples/test002.php: SUCCEEDED
    @PHP/doc_examples/test003.php: SUCCEEDED
    @PHP/doc_examples/test004.php: SUCCEEDED
    @PHP/doc_examples/test005.php: SUCCEEDED
    @PHP/doc_examples/test006.php: SUCCEEDED
    @PHP/doc_examples/test007.php: SUCCEEDED
    @PHP/doc_examples/test008.php: SUCCEEDED
    @PHP/doc_examples/test009.php: SUCCEEDED
    @PHP/doc_examples/test010.php: SUCCEEDED
    @PHP/doc_examples/test011.php: SUCCEEDED
    @PHP/doc_examples/test013.php: SUCCEEDED
    @PHP/doc_examples/test014.php: SUCCEEDED
    @PHP/doc_examples/test015.php: SUCCEEDED
    @PHP/doc_examples/test016.php: SUCCEEDED
    @PHP/doc_examples/test017.php: SUCCEEDED
    @PHP/doc_examples/test018.php: SUCCEEDED
    @PHP/doc_examples/test019.php: SUCCEEDED
    @PHP/doc_examples/test020.php: SUCCEEDED
    @PHP/doc_examples/test021.php: SUCCEEDED
    @PHP/doc_examples/test022.php: SUCCEEDED
    @PHP/doc_examples/test023.php: SUCCEEDED
    @PHP/doc_examples/test024.php: SUCCEEDED
    @PHP/doc_examples/test025.php: SUCCEEDED
    @PHP/doc_examples/test026.php: SUCCEEDED
    @PHP/doc_examples/test027.php: SUCCEEDED
    @PHP/doc_examples/test028.php: SUCCEEDED
    @PHP/doc_examples/test029.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ´┐Żauky
    �auky
    @PHP/doc_examples/test030.php: SUCCEEDED
    @PHP/doc_examples/test031.php: SUCCEEDED
    @PHP/doc_examples/test032.php: SUCCEEDED
    @PHP/doc_examples/test033.php: SUCCEEDED
    @PHP/doc_examples/test034.php: SUCCEEDED
    @PHP/doc_examples/test035.php: SUCCEEDED
    @PHP/doc_examples/test036.php: SUCCEEDED
    @PHP/doc_examples/test037.php: SUCCEEDED
    @PHP/doc_examples/test038.php: SUCCEEDED
    @PHP/doc_examples/test039.php: SUCCEEDED
    @PHP/doc_examples/test040.php: SUCCEEDED
    @PHP/doc_examples/test041.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    call_user_func():
    hello world!
    Strict Standards: call_user_func(): Non-static method MyClass::myCallbackMethod() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\doc_examples\__input.txt at expression on line 17, column 1.
    Hello World!Hello World!
    @PHP/doc_examples/test042.php: SUCCEEDED
    @PHP/doc_examples/test043.php: SUCCEEDED
    @PHP/doc_examples/test044.php: SUCCEEDED
    @PHP/doc_examples/test045.php: SUCCEEDED
    @PHP/doc_examples/test046.php: SUCCEEDED
    @PHP/doc_examples/test047.php: SUCCEEDED
    @PHP/doc_examples/test048.php: SUCCEEDED
    @PHP/doc_examples/test049.php: SUCCEEDED
    @PHP/doc_examples/test050.php: SUCCEEDED
    @PHP/doc_examples/test051.php: SUCCEEDED
    @PHP/doc_examples/test052.php: SUCCEEDED
    @PHP/doc_examples/test053.php: SUCCEEDED
    @PHP/doc_examples/test054.php: SUCCEEDED
    @PHP/doc_examples/test055.php: SUCCEEDED
    @PHP/doc_examples/test056.php: SUCCEEDED
    @PHP/doc_examples/test057.php: SUCCEEDED
    @PHP/doc_examples/test058.php: SUCCEEDED
    @PHP/doc_examples/test059.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    Deprecated: Assigning the return value of new by reference is deprecated in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\doc_examples\__input.txt on line 4
    NULL
    object(stdClass)#1 (0) {
    }
    NULL
    object(stdClass)(0) {
    }
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\doc_examples\__input.txt(4,5): warning PHP0181: Assigning the return value of new by reference is deprecated
    
    @PHP/doc_examples/test060.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    Deprecated: Assigning the return value of new by reference is deprecated in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\doc_examples\__input.txt on line 9
    Static object: NULL
    Static object: NULL
    
    Static object: NULL
    Static object: object(stdClass)#3 (1) {
      ["property"]=>
      int(1)
    }
    Static object: NULL
    Static object: NULL
    
    Static object: NULL
    Static object: object(stdClass)(1) {
      ["property"]=>
      int(1)
    }
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\doc_examples\__input.txt(9,9): warning PHP0181: Assigning the return value of new by reference is deprecated
    
    @PHP/doc_examples/test061.php: SUCCEEDED
    @PHP/doc_examples/test062.php: SUCCEEDED
    @PHP/doc_examples/test063.php: SUCCEEDED
    @PHP/doc_examples/test064.php: SUCCEEDED
    @PHP/doc_examples/test065.php: SUCCEEDED
    @PHP/doc_examples/test066.php: SUCCEEDED
    @PHP/doc_examples/test067.php: SUCCEEDED
    @PHP/doc_examples/test068.php: SUCCEEDED
    @PHP/doc_examples/test069.php: SUCCEEDED
    @PHP/doc_examples/test070.php: SUCCEEDED
    @PHP/doc_examples/test071.php: SUCCEEDED
    @PHP/doc_examples/test072.php: SUCCEEDED
    @PHP/doc_examples/test073.php: SUCCEEDED
    @PHP/doc_examples/test074.php: SUCCEEDED
    @PHP/doc_examples/test075.php: SUCCEEDED
    @PHP/doc_examples/test076.php: SUCCEEDED
    @PHP/doc_examples/test077.php: SUCCEEDED
    @PHP/doc_examples/test078.php: SUCCEEDED
    @PHP/doc_examples/test079.php: SUCCEEDED
    @PHP/doc_examples/test080.php: SUCCEEDED
    @PHP/doc_examples/test081.php: SUCCEEDED
    @PHP/doc_examples/test082.php: SUCCEEDED
    @PHP/doc_examples/test083.php: SUCCEEDED
    @PHP/doc_examples/test084.php: SUCCEEDED
    @PHP/doc_examples/test085.php: SUCCEEDED
    @PHP/doc_examples/test086.php: SUCCEEDED
    @PHP/doc_examples/test087.php: SUCCEEDED
    @PHP/doc_examples/test088.php: SUCCEEDED
    @PHP/doc_examples/test089.php: SUCCEEDED
    @PHP/doc_examples/test090.php: SUCCEEDED
    @PHP/doc_examples/test091.php: SUCCEEDED
    @PHP/doc_examples/test092.php: SUCCEEDED
    @PHP/doc_examples/test093.php: SUCCEEDED
    @PHP/doc_examples/test094.php: SUCCEEDED
    @PHP/doc_examples/test095.php: SUCCEEDED
    @PHP/doc_examples/test096.php: SUCCEEDED
    @PHP/doc_examples/test097.php: SUCCEEDED
    @PHP/doc_examples/test098.php: SUCCEEDED
    @PHP/doc_examples/test099.php: SUCCEEDED
    @PHP/doc_examples/test100.php: SUCCEEDED
    @PHP/doc_examples/test102.php: SUCCEEDED
    @PHP/doc_examples/test103.php: SUCCEEDED
    @PHP/doc_examples/test104.php: SUCCEEDED
    @PHP/doc_examples/test105.php: SUCCEEDED
    @PHP/doc_examples/test107.php: SUCCEEDED
    @PHP/doc_examples/test108.php: SUCCEEDED
    @PHP/doc_examples/test109.php: SUCCEEDED
    @PHP/doc_examples/test110.php: SUCCEEDED
    @PHP/doc_examples/test111.php: SUCCEEDED
    @PHP/doc_examples/test112.php: SUCCEEDED
    @PHP/doc_examples/test113.php: SUCCEEDED
    @PHP/doc_examples/test114.php: SUCCEEDED
    @PHP/doc_examples/test115.php: SUCCEEDED
    @PHP/doc_examples/test116.php: SUCCEEDED
    @PHP/doc_examples/test117.php: SUCCEEDED
    @PHP/doc_examples/test118.php: SUCCEEDED
    @PHP/doc_examples/test119.php: SUCCEEDED
    @PHP/doc_examples/test120.php: SUCCEEDED
    @PHP/doc_examples/test121.php: SUCCEEDED
    @PHP/doc_examples/test122.php: SUCCEEDED
    @PHP/doc_examples/test123.php: SUCCEEDED
    @PHP/doc_examples/test124.php: SUCCEEDED
    @PHP/doc_examples/test125.php: SUCCEEDED
    @PHP/doc_examples/test126.php: SUCCEEDED
    @PHP/doc_examples/test127.php: SUCCEEDED
    @PHP/doc_examples/test128.php: SUCCEEDED
    @PHP/doc_examples/test129.php: SUCCEEDED
    @PHP/doc_examples/test130.php: SUCCEEDED
    @PHP/doc_examples/test131.php: SUCCEEDED
    @PHP/doc_examples/test132.php: SUCCEEDED
    @PHP/doc_examples/test133.php: SUCCEEDED
    @PHP/doc_examples/test134.php: SUCCEEDED
    @PHP/doc_examples/test136.php: SUCCEEDED
    @PHP/doc_examples/test137.php: SUCCEEDED
    @PHP/doc_examples/test138.php: SUCCEEDED
    @PHP/doc_examples/test139.php: SUCCEEDED
    @PHP/doc_examples/test148.php: SUCCEEDED
    @PHP/doc_examples/test149.php: SUCCEEDED
    @PHP/doc_examples/test150.php: SUCCEEDED
    @PHP/doc_examples/test151.php: SUCCEEDED
    @PHP/doc_examples/test152.php: SUCCEEDED
    @PHP/doc_examples/test153.php: SUCCEEDED
    @PHP/doc_examples/test154.php: SUCCEEDED
    @PHP/doc_examples/test155.php: SUCCEEDED
    @PHP/doc_examples/test156.php: SUCCEEDED
    @PHP/doc_examples/test158.php: SUCCEEDED
    @PHP/lang/001.php: SUCCEEDED
    @PHP/lang/002.php: SUCCEEDED
    @PHP/lang/003.php: SUCCEEDED
    @PHP/lang/004.php: SUCCEEDED
    @PHP/lang/005.php: SUCCEEDED
    @PHP/lang/006.php: SUCCEEDED
    @PHP/lang/007.php: SUCCEEDED
    @PHP/lang/008.php: SUCCEEDED
    @PHP/lang/009.php: SUCCEEDED
    @PHP/lang/010.php: SUCCEEDED
    @PHP/lang/011.php: SUCCEEDED
    @PHP/lang/012.php: SUCCEEDED
    @PHP/lang/013.php: SUCCEEDED
    @PHP/lang/014.php: SUCCEEDED
    @PHP/lang/015.php: SUCCEEDED
    @PHP/lang/016.php: SUCCEEDED
    @PHP/lang/017.php: SUCCEEDED
    @PHP/lang/018.php: SUCCEEDED
    @PHP/lang/019.php: SUCCEEDED
    @PHP/lang/020.php: SUCCEEDED
    @PHP/lang/021.php: SUCCEEDED
    @PHP/lang/022.php: SUCCEEDED
    @PHP/lang/023.php: SUCCEEDED
    @PHP/lang/024.php: SUCCEEDED
    @PHP/lang/025.php: SUCCEEDED
    @PHP/lang/026.php: SUCCEEDED
    @PHP/lang/027.php: SUCCEEDED
    @PHP/lang/028.php: SUCCEEDED
    @PHP/lang/030.php: SUCCEEDED
    @PHP/lang/032.php: SUCCEEDED
    @PHP/lang/036.php: SUCCEEDED
    @PHP/lang/037.php: SUCCEEDED
    @PHP/lang/038.php: SUCCEEDED
    @PHP/lang/039.php: SUCCEEDED
    @PHP/lang/040.php: SUCCEEDED
    @PHP/lang/bison1.php: SUCCEEDED
    @PHP/lang/bug17115.php: SUCCEEDED
    @PHP/lang/bug18872.php: SUCCEEDED
    @PHP/lang/bug19943.php: SUCCEEDED
    @PHP/lang/bug20175.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    Deprecated: Assigning the return value of new by reference is deprecated in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\lang\__input.txt on line 110
    foo_static()
    foo_global()
    foo:1
    foo_static()
    foo:1
    bar_static()
    bar_global()
    bar:1
    bar_static()
    bar:1
    wow_static()
    wow_global()
    wow:1
    wow_static()
    wow:1
    oop_test()
    oop_static()
    oop_class()
    oop:1
    oop_static()
    oop:1
    oop_test()
    oop_static()
    oop:1
    foo_static()
    foo_global()
    foo:1
    foo_static()
    foo:1
    bar_static()
    bar_global()
    bar:1
    bar_static()
    bar_global()
    bar:2
    wow_static()
    wow_global()
    wow:1
    wow_static()
    wow:1
    oop_test()
    oop_static()
    oop_class()
    oop:1
    oop_static()
    oop:1
    oop_test()
    oop_static()
    oop:1
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\lang\__input.txt(110,4): warning PHP0181: Assigning the return value of new by reference is deprecated
    
    @PHP/lang/bug21094.php: SUCCEEDED
    @PHP/lang/bug21600.php: SUCCEEDED
    @PHP/lang/bug21669.php: SUCCEEDED
    @PHP/lang/bug21849.php: SUCCEEDED
    @PHP/lang/bug21961.php: SUCCEEDED
    @PHP/lang/bug22231.php: SUCCEEDED
    @PHP/lang/bug22367.php: SUCCEEDED
    @PHP/lang/bug22510.php: SUCCEEDED
    @PHP/lang/bug22592.php: SUCCEEDED
    @PHP/lang/bug22690.php: SUCCEEDED
    @PHP/lang/bug23279.php: SUCCEEDED
    @PHP/lang/bug23384.php: SUCCEEDED
    @PHP/lang/bug23489.php: SUCCEEDED
    @PHP/lang/bug23524.php: SUCCEEDED
    @PHP/lang/bug23922.php: SUCCEEDED
    @PHP/lang/bug24054.php: SUCCEEDED
    @PHP/lang/bug24396.php: SUCCEEDED
    @PHP/lang/bug24403.php: SUCCEEDED
    @PHP/lang/bug24436.php: SUCCEEDED
    @PHP/lang/bug24499.php: SUCCEEDED
    @PHP/lang/bug24640.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    double(1700000000000000089258092433847514422797596587883870563356951996370064178581143932836831337636761368874297554515902592900802289500112731978596146714137401870842258241575178866354311397451139753100927220499450359906637902366244989496126909662726242240784739940994096632824796638102733857671280980918272.0000000000)
    1.7E+300
    
    ------
    double(0.0000000000)
    1.7E-300
    
    ------
    double(17000000000000001584208052028780237480128823455860622330108867175329927830437888.0000000000)
    1.7E+79
    
    ------
    double(0.0000000000)
    1.7E-79
    
    ------
    double(169999999999999996096025832433329868941658043870400163508258284150340918121070592.0000000000)
    1.7E+80
    
    ------
    double(0.0000000000)
    1.7E-80
    
    ------
    double(1700000000000000013616404158611892038375594280539217794530130541777964808366194688.0000000000)
    1.7E+81
    
    ------
    double(0.0000000000)
    1.7E-81
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    1.6999810742106E-319
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    1.7000798873397E-320
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    1.6995858216939E-321
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    0
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    0
    
    ------
    double(1700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+300
    
    ------
    double(0.0000000000)
    1.70000000000003E-300
    
    ------
    double(17000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+79
    
    ------
    double(0.0000000000)
    1.70000000000001E-79
    
    ------
    double(170000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+80
    
    ------
    double(0.0000000000)
    1.70000000000001E-80
    
    ------
    double(1700000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+81
    
    ------
    double(0.0000000000)
    1.70000000000001E-81
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    1.69998107421056E-319
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    1.70007988733973E-320
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    1.69464516523548E-321
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    0
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    0
    
    ------
    @PHP/lang/bug24652.php: SUCCEEDED
    @PHP/lang/bug24658.php: SUCCEEDED
    @PHP/lang/bug24783.php: SUCCEEDED
    @PHP/lang/bug24926.php: SUCCEEDED
    @PHP/lang/bug25547.php: SUCCEEDED
    @PHP/lang/bug25652.php: SUCCEEDED
    @PHP/lang/bug25922.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Undefined index here: 'error'
    Undefined index here: ''
    @PHP/lang/bug26182.php: SUCCEEDED
    @PHP/lang/bug26696.php: SUCCEEDED
    @PHP/lang/bug26866.php: SUCCEEDED
    @PHP/lang/bug26869.php: SUCCEEDED
    @PHP/lang/bug27354.php: SUCCEEDED
    @PHP/lang/bug27439.php: SUCCEEDED
    @PHP/lang/bug27535.php: SUCCEEDED
    @PHP/lang/bug28213.php: SUCCEEDED
    @PHP/lang/bug28800.php: SUCCEEDED
    @PHP/lang/bug29566.php: SUCCEEDED
    @PHP/lang/bug29893.php: SUCCEEDED
    @PHP/lang/bug29944.php: SUCCEEDED
    @PHP/lang/bug30638.php: SUCCEEDED
    @PHP/lang/bug30726.php: SUCCEEDED
    @PHP/lang/bug30862.php: SUCCEEDED
    @PHP/lang/bug32924.php: SUCCEEDED
    @PHP/lang/bug35382.php: SUCCEEDED
    @PHP/lang/bug7515.php: SUCCEEDED
    @PHP/lang/each_binary_safety.php: SUCCEEDED
    @PHP/lang/error_2_exception_001.php: SUCCEEDED
    @PHP/lang/foreach_with_object_001.php: SUCCEEDED
    @PHP/lang/foreach_with_references_001.php: SUCCEEDED
    @PHP/lang/type_hints_001.php: SUCCEEDED
    @PHP/standard/array/001.php: SUCCEEDED
    @PHP/standard/array/003.php: SUCCEEDED
    @PHP/standard/array/004.php: SUCCEEDED
    @PHP/standard/array/005.php: SUCCEEDED
    @PHP/standard/array/008.php: SUCCEEDED
    @PHP/standard/array/array_change_key_case.php: SUCCEEDED
    @PHP/standard/array/array_chunk.php: SUCCEEDED
    @PHP/standard/array/array_count_values.php: SUCCEEDED
    @PHP/standard/array/array_diff_1.php: SUCCEEDED
    @PHP/standard/array/array_diff_key.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ------ Test 1 --------
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 2 --------
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 3 --------
    array(6) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [2]=>
      int(4)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [2]=>
      int(4)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 4 --------
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 5 --------
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 6 --------
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 7 --------
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    ------ Test 8 --------
    array(6) {
      [0]=>
      int(0)
      [7]=>
      int(14)
      [2]=>
      int(4)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [0]=>
      int(0)
      [7]=>
      int(14)
      [2]=>
      int(4)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 9 --------
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    ------ Test 1 --------
    array(4) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(4) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 2 --------
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 3 --------
    array(6) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [2]=>
      &int(4)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [2]=>
      &int(4)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 4 --------
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 5 --------
    array(4) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(4) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 6 --------
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 7 --------
    array(3) {
      [7]=>
      &int(14)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
    }
    array(3) {
      [7]=>
      &int(14)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
    }
    ------ Test 8 --------
    array(6) {
      [0]=>
      &int(0)
      [7]=>
      &int(14)
      [2]=>
      &int(4)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [0]=>
      &int(0)
      [7]=>
      &int(14)
      [2]=>
      &int(4)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 9 --------
    array(3) {
      [7]=>
      &int(14)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
    }
    array(3) {
      [7]=>
      &int(14)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
    }
    @PHP/standard/array/array_intersect_key.php: SUCCEEDED
    @PHP/standard/array/array_sum.php: SUCCEEDED
    @PHP/standard/array/array_walk_recursive.php: SUCCEEDED
    @PHP/standard/array/bug12776.php: SUCCEEDED
    @PHP/standard/array/bug14580.php: SUCCEEDED
    @PHP/standard/array/bug20381.php: SUCCEEDED
    @PHP/standard/array/bug20865.php: SUCCEEDED
    @PHP/standard/array/bug21182.php: SUCCEEDED
    @PHP/standard/array/bug21918.php: SUCCEEDED
    @PHP/standard/array/bug21998.php: SUCCEEDED
    @PHP/standard/array/bug22088.php: SUCCEEDED
    @PHP/standard/array/bug22463.php: SUCCEEDED
    @PHP/standard/array/bug23581.php: SUCCEEDED
    @PHP/standard/array/bug23788.php: SUCCEEDED
    @PHP/standard/array/bug24198.php: SUCCEEDED
    @PHP/standard/array/bug24220.php: SUCCEEDED
    @PHP/standard/array/bug24766.php: SUCCEEDED
    @PHP/standard/array/bug24897.php: SUCCEEDED
    @PHP/standard/array/bug24980.php: SUCCEEDED
    @PHP/standard/array/bug25359.php: SUCCEEDED
    @PHP/standard/array/bug25708.php: SUCCEEDED
    @PHP/standard/array/bug25758.php: SUCCEEDED
    @PHP/standard/array/bug26458.php: SUCCEEDED
    @PHP/standard/array/bug28974.php: SUCCEEDED
    @PHP/standard/array/bug29493.php: SUCCEEDED
    @PHP/standard/array/bug30266.php: SUCCEEDED
    @PHP/standard/array/bug30833.php: SUCCEEDED
    @PHP/standard/array/bug31158.php: SUCCEEDED
    @PHP/standard/array/bug31213.php: SUCCEEDED
    @PHP/standard/array/bug32021.php: SUCCEEDED
    @PHP/standard/array/bug33382.php: SUCCEEDED
    @PHP/standard/array/bug33989.php: SUCCEEDED
    @PHP/standard/array/bug34227.php: SUCCEEDED
    @PHP/standard/array/bug34982.php: SUCCEEDED
    @PHP/standard/array/bug35014.php: SUCCEEDED
    @PHP/standard/array/bug35022.php: SUCCEEDED
    @PHP/standard/array/bug35821.php: SUCCEEDED
    @PHP/standard/array/count_recursive.php: SUCCEEDED
    @PHP/standard/array/locale_sort.php: SUCCEEDED
    @PHP/standard/array/range.php: SUCCEEDED
    @PHP/standard/assert/assert.php: SUCCEEDED
    @PHP/standard/general_functions/001.php: SUCCEEDED
    @PHP/standard/general_functions/002.php: SUCCEEDED
    @PHP/standard/general_functions/003.php: SUCCEEDED
    @PHP/standard/general_functions/004.php: SUCCEEDED
    @PHP/standard/general_functions/005.php: SUCCEEDED
    @PHP/standard/general_functions/006.php: SUCCEEDED
    @PHP/standard/general_functions/007.php: SUCCEEDED
    @PHP/standard/general_functions/009.php: SUCCEEDED
    @PHP/standard/general_functions/bug25038.php: SUCCEEDED
    @PHP/standard/general_functions/bug27678.php: SUCCEEDED
    @PHP/standard/general_functions/bug29038.php: SUCCEEDED
    @PHP/standard/general_functions/bug31190.php: SUCCEEDED
    @PHP/standard/general_functions/bug32647.php: SUCCEEDED
    @PHP/standard/general_functions/bug35229.php: SUCCEEDED
    @PHP/standard/general_functions/is_resource.php: SUCCEEDED
    @PHP/standard/math/abs.php: SUCCEEDED
    @PHP/standard/math/bug24142.php: SUCCEEDED
    @PHP/standard/math/bug25694.php: SUCCEEDED
    @PHP/standard/math/bug27646.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    double(INF-INF)
    'd:-INF;'
    double(INF-INF)
    double(INF-INF)
    'd:INF;'
    double(INF-INF)
    double(NaNInfini)
    'd:NAN;'
    double(NaNInfini)
    double(-Infinity)
    'd:-INF;'
    double(-Infinity)
    double(Infinity)
    'd:INF;'
    double(Infinity)
    double(NaN)
    'd:NAN;'
    double(NaN)
    @PHP/standard/math/bug30069.php: SUCCEEDED
    @PHP/standard/math/bug30695.php: SUCCEEDED
    @PHP/standard/math/floorceil.php: SUCCEEDED
    @PHP/standard/math/hexdec.php: SUCCEEDED
    @PHP/standard/math/log.php: SUCCEEDED
    @PHP/standard/math/pow.php: SUCCEEDED
    @PHP/standard/math/round.php: SUCCEEDED
    @PHP/standard/reg/001.php: SUCCEEDED
    @PHP/standard/reg/002.php: SUCCEEDED
    @PHP/standard/reg/003.php: SUCCEEDED
    @PHP/standard/reg/004.php: SUCCEEDED
    @PHP/standard/reg/005.php: SUCCEEDED
    @PHP/standard/reg/006.php: SUCCEEDED
    @PHP/standard/reg/007.php: SUCCEEDED
    @PHP/standard/reg/008.php: SUCCEEDED
    @PHP/standard/reg/009.php: SUCCEEDED
    @PHP/standard/reg/010.php: SUCCEEDED
    @PHP/standard/reg/011.php: SUCCEEDED
    @PHP/standard/reg/012.php: SUCCEEDED
    @PHP/standard/reg/013.php: SUCCEEDED
    @PHP/standard/reg/014.php: SUCCEEDED
    @PHP/standard/reg/015.php: SUCCEEDED
    @PHP/standard/reg/016.php: SUCCEEDED
    @PHP/standard/serialize/001.php: SUCCEEDED
    @PHP/standard/serialize/002.php: SUCCEEDED
    @PHP/standard/serialize/003.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    d:100;
    double(100.0000000000)
    
    d:51999999999999996980101120;
    double(51999999999999996980101120.0000000000)
    
    d:8.9999999999999995265585574287341141808127531476202420890331268310546875E-9;
    double(0.0000000090)
    d:100;
    double(100.0000000000)
    
    d:5.2000000000000006E+25;
    double(52000000000000000000000000.0000000000)
    
    d:9.0000000000000045E-09;
    double(0.0000000090)
    @PHP/standard/serialize/004.php: SUCCEEDED
    @PHP/standard/serialize/005.php: SUCCEEDED
    @PHP/standard/serialize/006.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    'O:3:"´┐Ż":1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    object
    {
      '´┐Ż' => '´┐Ż'
    }
    'a:1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    array
    {
      '´┐Ż' => '´┐Ż'
    }
    'O:3:"´┐Ż":1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    object
    {
      'ďż˝' => '´┐Ż'
    }
    'a:1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    array
    {
      'ďż˝' => '´┐Ż'
    }
    @PHP/standard/serialize/bug14293.php: SUCCEEDED
    @PHP/standard/serialize/bug21957.php: SUCCEEDED
    @PHP/standard/serialize/bug23298.php: SUCCEEDED
    @PHP/standard/serialize/bug24063.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0.1 0.1
    0.01 0.01
    0.001 0.001
    0.0001 0.0001
    1.0E-5 1.0E-5
    1.0E-6 1.0E-6
    1.0E-7 1.0E-7
    1.0E-8 1.0E-8
    1.0E-9 1.0E-9
    0.1 0.1
    0.01 0.01
    0.001 0.001
    0.0001 0.0001
    1E-05 1E-05
    1E-06 1E-06
    1E-07 1E-07
    1E-08 1E-08
    1E-09 1E-09
    @PHP/standard/serialize/bug25378.php: SUCCEEDED
    @PHP/standard/serialize/bug26762.php: SUCCEEDED
    @PHP/standard/serialize/bug27469.php: SUCCEEDED
    @PHP/standard/serialize/bug28325.php: SUCCEEDED
    @PHP/standard/serialize/bug30234.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    FALSE
    FALSE
    __autoload(Autoload_Implements)
    object [invalid]
    FALSE
    FALSE
    FALSE
    FALSE
    TRUE
    __autoload(Autoload_Implements)
    object [invalid]
    FALSE
    FALSE
    TRUE
    @PHP/standard/serialize/bug31402.php: SUCCEEDED
    @PHP/standard/serialize/bug31442.php: SUCCEEDED
    @PHP/standard/strings/add-and-stripcslashes.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    kaboemkara!
    foo\b\a\r\b\az
    \f\o\o\[ \]
    \zoo['\.']
    \abcd\e\f\g\h\i\j\k\l\m\n\o\pqrstuvwxy\z
    1
    5d
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\standard\strings\__input.txt at expression on line 3, column 1.
    
    kaboemkara!
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\standard\strings\__input.txt at expression on line 5, column 1.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\standard\strings\__input.txt at expression on line 6, column 1.
    
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\standard\strings\__input.txt at expression on line 8, column 1.
    
    1
    5d
    @PHP/standard/strings/add-and-stripslashes.php: SUCCEEDED
    @PHP/standard/strings/basename.php: SUCCEEDED
    @PHP/standard/strings/bin2hex.php: SUCCEEDED
    @PHP/standard/strings/bug20108.php: SUCCEEDED
    @PHP/standard/strings/bug20169.php: SUCCEEDED
    @PHP/standard/strings/bug20261.php: SUCCEEDED
    @PHP/standard/strings/bug20927.php: SUCCEEDED
    @PHP/standard/strings/bug21338.php: SUCCEEDED
    @PHP/standard/strings/bug21453.php: SUCCEEDED
    @PHP/standard/strings/bug21730.php: SUCCEEDED
    @PHP/standard/strings/bug21744.php: SUCCEEDED
    @PHP/standard/strings/bug22008.php: SUCCEEDED
    @PHP/standard/strings/bug22187.php: SUCCEEDED
    @PHP/standard/strings/bug22224.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      0 => 
      object
      {
      }
      1 => 
      object
      {
      }
    }
    @PHP/standard/strings/bug22227.php: SUCCEEDED
    @PHP/standard/strings/bug22904.php: SUCCEEDED
    @PHP/standard/strings/bug23650.php: SUCCEEDED
    @PHP/standard/strings/bug23894.php: SUCCEEDED
    @PHP/standard/strings/bug24098.php: SUCCEEDED
    @PHP/standard/strings/bug24208.php: SUCCEEDED
    @PHP/standard/strings/bug24281.php: SUCCEEDED
    @PHP/standard/strings/bug25671.php: SUCCEEDED
    @PHP/standard/strings/bug25707.php: SUCCEEDED
    @PHP/standard/strings/bug26878.php: SUCCEEDED
    @PHP/standard/strings/bug26973.php: SUCCEEDED
    @PHP/standard/strings/bug27276.php: SUCCEEDED
    @PHP/standard/strings/bug27278.php: SUCCEEDED
    @PHP/standard/strings/bug27295.php: SUCCEEDED
    @PHP/standard/strings/bug27457.php: SUCCEEDED
    @PHP/standard/strings/bug27675.php: SUCCEEDED
    @PHP/standard/strings/bug28386.php: SUCCEEDED
    @PHP/standard/strings/bug33076.php: SUCCEEDED
    @PHP/standard/strings/chr_ord.php: SUCCEEDED
    @PHP/standard/strings/chunk_split.php: SUCCEEDED
    @PHP/standard/strings/count_chars.php: SUCCEEDED
    @PHP/standard/strings/crc32.php: SUCCEEDED
    @PHP/standard/strings/explode.php: SUCCEEDED
    @PHP/standard/strings/implode.php: SUCCEEDED
    @PHP/standard/strings/md5.php: SUCCEEDED
    @PHP/standard/strings/md5raw.php: SUCCEEDED
    @PHP/standard/strings/nl2br.php: SUCCEEDED
    @PHP/standard/strings/sha1.php: SUCCEEDED
    @PHP/standard/strings/sha1raw.php: SUCCEEDED
    @PHP/standard/strings/sprintf_f.php: SUCCEEDED
    @PHP/standard/strings/strcspn.php: SUCCEEDED
    @PHP/standard/strings/strings001.php: SUCCEEDED
    @PHP/standard/strings/strpos.php: SUCCEEDED
    @PHP/standard/strings/strrev.php: SUCCEEDED
    @PHP/standard/strings/strripos.php: SUCCEEDED
    @PHP/standard/strings/strrpos.php: SUCCEEDED
    @PHP/standard/strings/strspn.php: SUCCEEDED
    @PHP/standard/strings/strstr.php: SUCCEEDED
    @PHP/standard/strings/strtoupper.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    cfbfbdcfbfbdcfbfbd
    cfafbdcfafbdcfafbd
    @PHP/standard/strings/strtr.php: SUCCEEDED
    @PHP/standard/strings/strval.php: SUCCEEDED
    @PHP/standard/strings/str_repeat.php: SUCCEEDED
    @PHP/standard/strings/str_shuffle.php: SUCCEEDED
    @PHP/standard/strings/str_word_count.php: SUCCEEDED
    @PHP/standard/strings/substr_count.php: SUCCEEDED
    @PHP/standard/strings/substr_replace.php: SUCCEEDED
    @PHP/standard/strings/wordwrap.php: SUCCEEDED
    @PHP/standard/time/001.php: SUCCEEDED
    @PHP/standard/time/idate.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    U: 1043324459
    Y: 2003
    z: 22
    y: 3
    m: 1
    n: 1
    d: 23
    j: 23
    H: 13
    G: 13
    h: 1
    g: 1
    i: 20
    s: 59
    t: 31
    w: 4
    L: 0
    B: 556
    I: 0
    W: 4
    U: 1043324459
    Y: 2003
    z: 22
    y: 3
    m: 1
    n: 1
    d: 23
    j: 23
    H: 12
    G: 12
    h: 12
    g: 12
    i: 20
    s: 59
    t: 31
    w: 4
    L: 0
    B: 556
    I: 0
    W: 4
    @PHP/strings/001.php: SUCCEEDED
    @PHP/strings/002.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    fprintf test 1:abcde
    20
    printf test 1:simple string
    printf test 2:42
    printf test 3:3.333333
    printf test 4:3.3333333333
    printf test 5:2.50      
    printf test 6:2.50000000
    printf test 7:0000002.50
    printf test 8:<                 foo>
    printf test 9:<bar                 >
    printf test 10: 123456789012345
    printf test 10:<h´┐Żyesterettsjustitiarius>
    printf test 11: 123456789012345678901234567890
    printf test 11:<    h´┐Żyesterettsjustitiarius>
    printf test 12:-12.34
    printf test 13:  -12
    printf test 14:@
    printf test 15:10101010
    printf test 16:aa
    printf test 17:AA
    printf test 18:        10101010
    printf test 19:              aa
    printf test 20:              AA
    printf test 21:0000000010101010
    printf test 22:00000000000000aa
    printf test 23:00000000000000AA
    printf test 24:abcde
    printf test 25:gazonk
    printf test 26:2 1
    printf test 27:3 1 2
    printf test 28:02  1
    printf test 29:2   1
    printf test 30:x
    vprintf test 1:2   1
    fprintf test 1:abcde
    20
    printf test 1:simple string
    printf test 2:42
    printf test 3:3.333333
    printf test 4:3.3333333333
    printf test 5:2.50      
    printf test 6:2.50000000
    printf test 7:0000002.50
    printf test 8:<                 foo>
    printf test 9:<bar                 >
    printf test 10: 123456789012345
    printf test 10:<h�yesterettsjustitiarius>
    printf test 11: 123456789012345678901234567890
    printf test 11:<    h�yesterettsjustitiarius>
    printf test 12:-12.34
    printf test 13:  -12
    printf test 14:@
    printf test 15:10101010
    printf test 16:aa
    printf test 17:AA
    printf test 18:        10101010
    printf test 19:              aa
    printf test 20:              AA
    printf test 21:0000000010101010
    printf test 22:00000000000000aa
    printf test 23:00000000000000AA
    printf test 24:abcde
    printf test 25:gazonk
    printf test 26:2 1
    printf test 27:3 1 2
    printf test 28:02  1
    printf test 29:2   1
    printf test 30:x
    vprintf test 1:2   1
    @PHP/strings/bug22592.php: SUCCEEDED
    Arrays/array1.php: SUCCEEDED
    Arrays/array_diff_intersect.php: SUCCEEDED
    Arrays/array_diff_intersect2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Strict Standards: array_udiff() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 35
    Array
    (
        [0.5] => cr Object
            (
                [priv_member:cr:private] => 12
            )
    
        [0] => cr Object
            (
                [priv_member:cr:private] => 23
            )
    
    )
    
    Strict Standards: array_udiff_assoc() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 36
    Array
    (
        [0.1] => cr Object
            (
                [priv_member:cr:private] => 9
            )
    
        [0.5] => cr Object
            (
                [priv_member:cr:private] => 12
            )
    
        [0] => cr Object
            (
                [priv_member:cr:private] => 23
            )
    
    )
    
    Strict Standards: array_udiff_uassoc() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 37
    
    Strict Standards: array_udiff_uassoc() expects parameter 4 to be a valid callback, non-static method cr::comp_func_key() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 37
    Array
    (
        [0.1] => cr Object
            (
                [priv_member:cr:private] => 9
            )
    
        [0.5] => cr Object
            (
                [priv_member:cr:private] => 12
            )
    
        [0] => cr Object
            (
                [priv_member:cr:private] => 23
            )
    
    )
    Array
    (
        [b] => brown
        [c] => blue
        [0] => red
    )
    ------------------------------------
    
    Strict Standards: array_uintersect() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 40
    Array
    (
        [0.1] => cr Object
            (
                [priv_member:cr:private] => 9
            )
    
        [1] => cr Object
            (
                [priv_member:cr:private] => 4
            )
    
        [2] => cr Object
            (
                [priv_member:cr:private] => -15
            )
    
    )
    
    Strict Standards: array_uintersect_assoc() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 41
    Array
    (
        [1] => cr Object
            (
                [priv_member:cr:private] => 4
            )
    
        [2] => cr Object
            (
                [priv_member:cr:private] => -15
            )
    
    )
    
    Strict Standards: array_uintersect_uassoc() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 42
    
    Strict Standards: array_uintersect_uassoc() expects parameter 4 to be a valid callback, non-static method cr::comp_func_key() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 42
    Array
    (
        [1] => cr Object
            (
                [priv_member:cr:private] => 4
            )
    
        [2] => cr Object
            (
                [priv_member:cr:private] => -15
            )
    
    )
    Array
    (
        [a] => green
    )
    Array
    (
        [0.5] => cr Object
        (
            [priv_member:private] => 12
        )
    
        [0] => cr Object
        (
            [priv_member:private] => 23
        )
    
    )
    Array
    (
        [0.1] => cr Object
        (
            [priv_member:private] => 9
        )
    
        [0.5] => cr Object
        (
            [priv_member:private] => 12
        )
    
        [0] => cr Object
        (
            [priv_member:private] => 23
        )
    
    )
    Array
    (
        [0.1] => cr Object
        (
            [priv_member:private] => 9
        )
    
        [0.5] => cr Object
        (
            [priv_member:private] => 12
        )
    
        [0] => cr Object
        (
            [priv_member:private] => 23
        )
    
    )
    Array
    (
        [b] => brown
        [c] => blue
        [0] => red
    )
    ------------------------------------
    Array
    (
        [0.1] => cr Object
        (
            [priv_member:private] => 9
        )
    
        [1] => cr Object
        (
            [priv_member:private] => 4
        )
    
        [2] => cr Object
        (
            [priv_member:private] => -15
        )
    
    )
    Array
    (
        [1] => cr Object
        (
            [priv_member:private] => 4
        )
    
        [2] => cr Object
        (
            [priv_member:private] => -15
        )
    
    )
    Array
    (
        [1] => cr Object
        (
            [priv_member:private] => 4
        )
    
        [2] => cr Object
        (
            [priv_member:private] => -15
        )
    
    )
    Array
    (
        [a] => green
    )
    Arrays/array_diff_intersect3.php: SUCCEEDED
    Arrays/array_filter%20false%20entries%20%2322016.php: SUCCEEDED
    Arrays/array_map.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Array
    (
        [0] => Array
            (
                [0] => 1
                [1] => A
                [2] => 0
            )
    
        [1] => Array
            (
                [0] => 2
                [1] => B
                [2] => 0
            )
    
        [2] => Array
            (
                [0] => 3
                [1] => C
                [2] => 
            )
    
    )
    Array
    (
        [0] => 1 A 0
        [1] => 2 B 0
        [2] => 3 C 
    )
    Array
    (
        [A] => 2
        [10] => 3
    )
    Array
    (
        [0] => 1
        [1] => 2
        [2] => 3
    )
    Array
    (
        [0] => A
        [1] => B
        [2] => C
    )
    Array
    (
        [0] => 0
        [1] => 0
    )
    Array
    (
        [A] => 1
        [10] => 2
    )
    Array
    (
        [0] => Array
        (
            [0] => 1
            [1] => A
            [2] => 0
        )
    
        [1] => Array
        (
            [0] => 2
            [1] => B
            [2] => 0
        )
    
        [2] => Array
        (
            [0] => 3
            [1] => C
            [2] => 
        )
    
    )
    Array
    (
        [0] => 1 A 0
        [1] => 2 B 0
        [2] => 3 C 
    )
    Array
    (
        [A] => 2
        [10] => 3
    )
    Array
    (
        [0] => 1
        [1] => 2
        [2] => 3
    )
    Array
    (
        [0] => A
        [1] => B
        [2] => C
    )
    Array
    (
        [0] => x
        [1] => x
    )
    Array
    (
        [A] => 1
        [10] => 2
    )
    Arrays/array_merge_recursive.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Array
    (
        [color] => Array
            (
                [favorite] => Array
                    (
                        [0] => red
                        [1] => green
                    )
    
                [0] => blue
            )
    
        [0] => Array
            (
                [0] => 1
                [1] => 2
                [2] => 3
            )
    
        [q] => Array
            (
                [0] => 
                [1] => 
                [2] => x
            )
    
        [1] => 10
        [2] => Array
            (
                [0] => 4
                [1] => 5
                [2] => 6
            )
    
    )
    Array
    (
        [a] => Array
            (
                [0] => 1
                [1] => 2
                [2] => 3
                [3] => e
            )
    
    )
    Array
    (
        [a] => Array
            (
                [0] => 1
                [1] => 2
                [2] => 3
                [3] => e
            )
    
    )
    Array
    (
        [a] => 1
        [b] => 2
    )
    Array
    (
        [a] => xxx
        [b] => 2
    )
    Array
    (
        [a] => Array
            (
                [a] => Array
                    (
                        [a] => Array
     *RECURSION*
                    )
    
                [0] => 1
                [1] => 2
                [2] => 3
            )
    
    )
    Array
    (
        [a] => Array
            (
                [b] => Array
                    (
                        [0] => 1
                        [1] => 1
                    )
    
                [c] => 1
                [d] => Array
                    (
                        [0] => 2
                        [1] => 3
                    )
    
            )
    
    )
    Array
    (
        [a] => Array
            (
                [0] => 
                [1] => 
            )
    
    )
    Array
    (
        [a] => Array
            (
                [0] => 
                [1] => 
            )
    
    )
    Array
    (
        [color] => Array
        (
            [favorite] => Array
            (
                [0] => red
                [1] => green
            )
    
            [0] => blue
        )
    
        [0] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
        )
    
        [q] => Array
        (
            [0] => x
        )
    
        [1] => 10
        [2] => Array
        (
            [0] => 4
            [1] => 5
            [2] => 6
        )
    
    )
    Array
    (
        [a] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
            [3] => e
        )
    
    )
    Array
    (
        [a] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
            [3] => e
        )
    
    )
    Array
    (
        [a] => 1
        [b] => 2
    )
    Array
    (
        [a] => xxx
        [b] => 2
    )
    Array
    (
        [a] => Array
        (
            [a] => Array
            (
                [a] => Array [recursion]
    
    
            )
    
            [0] => 1
            [1] => 2
            [2] => 3
        )
    
    )
    Array
    (
        [a] => Array
        (
            [b] => Array
            (
                [0] => 1
                [1] => 1
            )
    
            [c] => 1
            [d] => Array
            (
                [0] => 2
                [1] => 3
            )
    
        )
    
    )
    Array
    (
        [a] => Array
        (
        )
    
    )
    Array
    (
        [a] => Array
        (
        )
    
    )
    Arrays/array_reduce1.php: SUCCEEDED
    Arrays/array_reduce2.php: SUCCEEDED
    Arrays/array_slice.php: SUCCEEDED
    Arrays/array_sumprod.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    float(8.3)
    float(0)
    int(6)
    int(6)
    float(4294967297)
    float(9.2233720282648E+18)
    bool(true)
    bool(false)
    float(-7.7)
    float(-38.4)
    int(6)
    int(6)
    int64(4294967297)
    int64(9223372028264841218)
    bool(true)
    bool(true)
    Arrays/array_unshift.php: SUCCEEDED
    Arrays/array_walk.php: SUCCEEDED
    Arrays/array_walk_recursive.php: SUCCEEDED
    Arrays/multisort.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    bool(true)
    Array
    (
        [0] => Array
            (
                [0] => 2
                [1] => 8
                [2] => 2
                [3] => 2
                [4] => 8
                [5] => 8
            )
    
        [1] => Array
            (
                [0] => 7
                [1] => 2
                [2] => 7
                [3] => 4
                [4] => 8
                [5] => 1
            )
    
        [2] => Array
            (
                [0] => 1
                [1] => 4
                [2] => 8
                [3] => 0
                [4] => 6
                [5] => 2
            )
    
        [3] => Array
            (
                [0] => 8
                [1] => 4
                [2] => 1
                [3] => 0
                [4] => 7
                [5] => 1
            )
    
        [4] => Array
            (
                [0] => 20
                [1] => 2
                [2] => 12
                [3] => 11
                [4] => 10
                [5] => 1
            )
    
    )
    Array
    (
        [0] => Array
            (
                [0] => 10
                [1] => 100
                [2] => 100
                [3] => a
            )
    
        [1] => Array
            (
                [0] => 1
                [1] => 3
                [2] => 2
                [3] => 1
            )
    
    )
    Array
    (
        [0] => 10
        [1] => a
        [2] => 100
        [3] => 100
    )
    Array
    (
        [0] => 1
        [1] => 1
        [2] => 2
        [3] => 3
    )
    bool(true)
    Array
    (
        [0] => Array
        (
            [0] => 2
            [1] => 8
            [2] => 2
            [3] => 2
            [4] => 8
            [5] => 8
        )
    
        [1] => Array
        (
            [0] => 7
            [1] => 2
            [2] => 7
            [3] => 4
            [4] => 8
            [5] => 1
        )
    
        [2] => Array
        (
            [0] => 1
            [1] => 4
            [2] => 8
            [3] => 0
            [4] => 6
            [5] => 2
        )
    
        [3] => Array
        (
            [0] => 8
            [1] => 4
            [2] => 1
            [3] => 0
            [4] => 7
            [5] => 1
        )
    
        [4] => Array
        (
            [0] => 20
            [1] => 2
            [2] => 12
            [3] => 11
            [4] => 10
            [5] => 1
        )
    
    )
    Array
    (
        [0] => Array
        (
            [0] => 10
            [1] => 100
            [2] => 100
            [3] => a
        )
    
        [1] => Array
        (
            [0] => 1
            [1] => 3
            [2] => 2
            [3] => 1
        )
    
    )
    Array
    (
        [0] => 10
        [1] => a
        [2] => 100
        [3] => 100
    )
    Array
    (
        [0] => 1
        [1] => 1
        [2] => 2
        [3] => 3
    )
    Arrays/multisort_empty.php: SUCCEEDED
    Arrays/nonarray%20access%20%2322019.php: SUCCEEDED
    Arrays/optimizations.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    3
    4
    5
    a
    b
    c
    
    Warning: strtolower() expects parameter 1 to be string, array given in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 15
    
    cablo
    3
    4
    5
    a
    b
    c
    array
    cablo
    Arrays/recursion.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    f1:
    array(2) {
      ["a"]=>
      array(5) {
        ["a"]=>
        &array(3) {
          ["a"]=>
          &array(3) {
            ["a"]=>
            *RECURSION*
            [0]=>
            string(1) "y"
            [1]=>
            string(1) "z"
          }
          [0]=>
          string(1) "y"
          [1]=>
          string(1) "z"
        }
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        string(1) "x"
      }
      [0]=>
      string(1) "w"
    }
    f2:
    array(1) {
      ["A"]=>
      &array(2) {
        ["a"]=>
        &array(2) {
          ["a"]=>
          *RECURSION*
          [0]=>
          string(1) "z"
        }
        [0]=>
        string(1) "z"
      }
    }
    f3:
    array(2) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) {
          [0]=>
          *RECURSION*
          [1]=>
          string(1) "z"
        }
        [1]=>
        string(1) "z"
      }
      [1]=>
      string(1) "z"
    }
    f4:
    
    Warning: array_merge_recursive(): recursion detected in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 37
    array(1) {
      ["a"]=>
      &array(3) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
      }
    }
    f5:
    array(1) {
      ["a"]=>
      array(6) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        int(1)
        [4]=>
        int(2)
        [5]=>
        int(3)
      }
    }
    f6:
    array(1) {
      ["a"]=>
      array(2) {
        [0]=>
        string(2) "xx"
        [1]=>
        int(2)
      }
    }
    f7:
    array(1) {
      ["a"]=>
      array(1) {
        ["a"]=>
        array(1) {
          ["a"]=>
          &array(1) {
            ["a"]=>
            &array(1) {
              ["a"]=>
              *RECURSION*
            }
          }
        }
      }
    }
    f1:
    array(2) {
      ["a"]=>
      array(5) {
        ["a"]=>
        &array(3) {
          ["a"]=>
          &array(3) [recursion]
          [0]=>
          string(1) "y"
          [1]=>
          string(1) "z"
        }
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        string(1) "x"
      }
      [0]=>
      string(1) "w"
    }
    f2:
    array(1) {
      ["A"]=>
      &array(2) {
        ["a"]=>
        &array(2) [recursion]
        [0]=>
        string(1) "z"
      }
    }
    f3:
    array(2) {
      [0]=>
      &array(2) [recursion]
      [1]=>
      string(1) "z"
    }
    f4:
    array(1) {
      ["a"]=>
      array(6) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        int(1)
        [4]=>
        int(2)
        [5]=>
        int(3)
      }
    }
    f5:
    array(1) {
      ["a"]=>
      array(6) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        int(1)
        [4]=>
        int(2)
        [5]=>
        int(3)
      }
    }
    f6:
    array(1) {
      ["a"]=>
      array(2) {
        [0]=>
        string(2) "xx"
        [1]=>
        int(2)
      }
    }
    f7:
    array(1) {
      ["a"]=>
      &array(1) {
        ["a"]=>
        &array(1) [recursion]
      }
    }
    Arrays/sort.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    sort regular:
    Array
    (
        [0] => 0
        [1] => 1
        [2] => 1
        [3] => 8
        [4] => 0x10
        [5] => 10x
        [6] => 20x
        [7] => ach0
        [8] => add1
        [9] => x10
        [10] => x2
    )
    
    sort numeric:
    Array
    (
        [0] => add1
        [1] => x2
        [2] => 0x10
        [3] => ach0
        [4] => 0
        [5] => x10
        [6] => 1
        [7] => 1
        [8] => 8
        [9] => 10x
        [10] => 20x
    )
    
    sort string:
    Array
    (
        [0] => 0
        [1] => 0x10
        [2] => 1
        [3] => 1
        [4] => 10x
        [5] => 20x
        [6] => 8
        [7] => ach0
        [8] => add1
        [9] => x10
        [10] => x2
    )
    
    sort locale:
    Array
    (
        [0] => 0
        [1] => 0x10
        [2] => 1
        [3] => 1
        [4] => 10x
        [5] => 20x
        [6] => 8
        [7] => ach0
        [8] => add1
        [9] => x10
        [10] => x2
    )
    
    ksort regular:
    Array
    (
        [x] => 8
        [z] => 1
        [0] => x10
        [1] => 10x
        [2b] => 1
        [2] => 20x
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [10a] => 0
    )
    
    ksort numeric:
    Array
    (
        [x] => 8
        [z] => 1
        [0] => x10
        [1] => 10x
        [2b] => 1
        [2] => 20x
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [10a] => 0
    )
    
    ksort string:
    Array
    (
        [0] => x10
        [1] => 10x
        [10a] => 0
        [2] => 20x
        [2b] => 1
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [x] => 8
        [z] => 1
    )
    
    ksort locale:
    Array
    (
        [0] => x10
        [1] => 10x
        [10a] => 0
        [2] => 20x
        [2b] => 1
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [x] => 8
        [z] => 1
    )
    
    asort regular:
    Array
    (
        [10a] => 0
        [2b] => 1
        [z] => 1
        [x] => 8
        [4] => 0x10
        [1] => 10x
        [2] => 20x
        [5] => ach0
        [6] => add1
        [0] => x10
        [3] => x2
    )
    
    asort numeric:
    Array
    (
        [6] => add1
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [10a] => 0
        [0] => x10
        [z] => 1
        [2b] => 1
        [x] => 8
        [1] => 10x
        [2] => 20x
    )
    
    asort string:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [z] => 1
        [2b] => 1
        [1] => 10x
        [2] => 20x
        [x] => 8
        [5] => ach0
        [6] => add1
        [0] => x10
        [3] => x2
    )
    
    asort locale:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [z] => 1
        [2b] => 1
        [1] => 10x
        [2] => 20x
        [x] => 8
        [5] => ach0
        [6] => add1
        [0] => x10
        [3] => x2
    )
    
    rsort regular:
    Array
    (
        [0] => x2
        [1] => x10
        [2] => add1
        [3] => ach0
        [4] => 20x
        [5] => 10x
        [6] => 0x10
        [7] => 8
        [8] => 1
        [9] => 1
        [10] => 0
    )
    
    rsort numeric:
    Array
    (
        [0] => 20x
        [1] => 10x
        [2] => 8
        [3] => 1
        [4] => 1
        [5] => ach0
        [6] => add1
        [7] => 0x10
        [8] => x2
        [9] => x10
        [10] => 0
    )
    
    rsort string:
    Array
    (
        [0] => x2
        [1] => x10
        [2] => add1
        [3] => ach0
        [4] => 8
        [5] => 20x
        [6] => 10x
        [7] => 1
        [8] => 1
        [9] => 0x10
        [10] => 0
    )
    
    rsort locale:
    Array
    (
        [0] => x2
        [1] => x10
        [2] => add1
        [3] => ach0
        [4] => 8
        [5] => 20x
        [6] => 10x
        [7] => 1
        [8] => 1
        [9] => 0x10
        [10] => 0
    )
    
    natsort:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [2b] => 1
        [z] => 1
        [x] => 8
        [1] => 10x
        [2] => 20x
        [5] => ach0
        [6] => add1
        [3] => x2
        [0] => x10
    )
    sort regular:
    Array
    (
        [0] => 0x10
        [1] => 10x
        [2] => 20x
        [3] => ach0
        [4] => add1
        [5] => x10
        [6] => 0
        [7] => x2
        [8] => 1
        [9] => 1
        [10] => 8
    )
    
    sort numeric:
    Array
    (
        [0] => x10
        [1] => 0
        [2] => x2
        [3] => ach0
        [4] => add1
        [5] => 1
        [6] => 1
        [7] => 8
        [8] => 10x
        [9] => 0x10
        [10] => 20x
    )
    
    sort string:
    Array
    (
        [0] => 0
        [1] => 0x10
        [2] => 1
        [3] => 1
        [4] => 10x
        [5] => 20x
        [6] => 8
        [7] => ach0
        [8] => add1
        [9] => x10
        [10] => x2
    )
    
    sort locale:
    Array
    (
        [0] => 0
        [1] => 0x10
        [2] => 1
        [3] => 1
        [4] => 10x
        [5] => 20x
        [6] => 8
        [7] => add1
        [8] => ach0
        [9] => x10
        [10] => x2
    )
    
    ksort regular:
    Array
    (
        [x] => 8
        [z] => 1
        [0] => x10
        [1] => 10x
        [2] => 20x
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [10a] => 0
        [2b] => 1
    )
    
    ksort numeric:
    Array
    (
        [x] => 8
        [z] => 1
        [0] => x10
        [1] => 10x
        [2b] => 1
        [2] => 20x
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [10a] => 0
    )
    
    ksort string:
    Array
    (
        [0] => x10
        [1] => 10x
        [10a] => 0
        [2] => 20x
        [2b] => 1
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [x] => 8
        [z] => 1
    )
    
    ksort locale:
    Array
    (
        [0] => x10
        [1] => 10x
        [10a] => 0
        [2] => 20x
        [2b] => 1
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [x] => 8
        [z] => 1
    )
    
    asort regular:
    Array
    (
        [4] => 0x10
        [1] => 10x
        [2] => 20x
        [5] => ach0
        [6] => add1
        [0] => x10
        [10a] => 0
        [3] => x2
        [z] => 1
        [2b] => 1
        [x] => 8
    )
    
    asort numeric:
    Array
    (
        [0] => x10
        [10a] => 0
        [3] => x2
        [5] => ach0
        [6] => add1
        [z] => 1
        [2b] => 1
        [x] => 8
        [1] => 10x
        [4] => 0x10
        [2] => 20x
    )
    
    asort string:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [z] => 1
        [2b] => 1
        [1] => 10x
        [2] => 20x
        [x] => 8
        [5] => ach0
        [6] => add1
        [0] => x10
        [3] => x2
    )
    
    asort locale:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [z] => 1
        [2b] => 1
        [1] => 10x
        [2] => 20x
        [x] => 8
        [6] => add1
        [5] => ach0
        [0] => x10
        [3] => x2
    )
    
    rsort regular:
    Array
    (
        [0] => 8
        [1] => 1
        [2] => 1
        [3] => x2
        [4] => x10
        [5] => 0
        [6] => add1
        [7] => ach0
        [8] => 20x
        [9] => 10x
        [10] => 0x10
    )
    
    rsort numeric:
    Array
    (
        [0] => 20x
        [1] => 0x10
        [2] => 10x
        [3] => 8
        [4] => 1
        [5] => 1
        [6] => x10
        [7] => 0
        [8] => x2
        [9] => ach0
        [10] => add1
    )
    
    rsort string:
    Array
    (
        [0] => x2
        [1] => x10
        [2] => add1
        [3] => ach0
        [4] => 8
        [5] => 20x
        [6] => 10x
        [7] => 1
        [8] => 1
        [9] => 0x10
        [10] => 0
    )
    
    rsort locale:
    Array
    (
        [0] => x2
        [1] => x10
        [2] => ach0
        [3] => add1
        [4] => 8
        [5] => 20x
        [6] => 10x
        [7] => 1
        [8] => 1
        [9] => 0x10
        [10] => 0
    )
    
    natsort:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [z] => 1
        [2b] => 1
        [x] => 8
        [1] => 10x
        [2] => 20x
        [5] => ach0
        [6] => add1
        [3] => x2
        [0] => x10
    )
    Arrays/usort.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    Array
    (
        [0] => 10
        [1] => 9
        [2] => 8
        [3] => 7
        [4] => 6
        [5] => 5
        [6] => 4
        [7] => 3
        [8] => 2
        [9] => 1
    )
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Array
    (
        [0] => 10
        [1] => 9
        [2] => 8
        [3] => 7
        [4] => 6
        [5] => 5
        [6] => 4
        [7] => 3
        [8] => 2
        [9] => 1
    )
    Arrays/lazy_copy/001.php: SUCCEEDED
    Arrays/lazy_copy/002.php: SUCCEEDED
    Arrays/lazy_copy/003.php: SUCCEEDED
    Arrays/lazy_copy/004.php: SUCCEEDED
    Arrays/lazy_copy/005.php: SUCCEEDED
    Arrays/lazy_copy/006.php: SUCCEEDED
    Bugs/class_incompletepart.php: SUCCEEDED
    Bugs/division-by-zero.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    DIVISION
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 6
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 8
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 10
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 12
    bool(false)
    MODULO
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 16
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 18
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 20
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 22
    bool(false)
    DIVISION
    bool(false)
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt at expression on line 10, column 2.
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt at expression on line 12, column 2.
    bool(false)
    MODULO
    bool(false)
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt at expression on line 20, column 2.
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt at expression on line 22, column 2.
    bool(false)
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt(6,10): warning PHP0150: Division by zero
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt(8,9): warning PHP0150: Division by zero
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt(16,10): warning PHP0150: Division by zero
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt(18,9): warning PHP0150: Division by zero
    
    Bugs/function-in-unknown-class.php: SUCCEEDED
    Bugs/is_a_null_value.php: SUCCEEDED
    Bugs/preg-named-groups.php: SUCCEEDED
    Bugs/preg-replace-advanced.php: SUCCEEDED
    Bugs/preg-replace-range.php: SUCCEEDED
    Bugs/preg-replace.php: SUCCEEDED
    Bugs/preg-this-dynamic.php: FAILED
    Script hung upNo errorsSuccess
    Expected test outputReal script output
    Unhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---> PHP.Core.Debug+AssertException: Assertion failed: 
       at PHP.Core.Debug.Fail(String message)
       at PHP.Core.Debug.Assert(Boolean condition)
       at PHP.Core.RelativePath.ParseCanonical(String relativePath)
       at PHP.Core.Emit.TransientAssemblyBuilder.Build(String sourceCode, SourceCodeDescriptor descriptor, EvalKinds kind, CompilationContext context, ScriptContext scriptContext, DTypeDesc referringType, NamingContext namingContext, Boolean completeSource)
       at PHP.Core.DynamicCode.EvalInternal(String prefix, String code, String suffix, EvalKinds kind, ScriptContext scriptContext, Dictionary`2 localVariables, DObject self, DTypeDesc referringType, SourceCodeDescriptor descriptor, Boolean entireFile, NamingContext namingContext)
       at PHP.Core.DynamicCode.Eval(String code, Boolean synthetic, ScriptContext context, Dictionary`2 definedVariables, DObject self, DTypeDesc referringType, String callerRelativeSourcePath, Int32 line, Int32 column, Int32 containerId, NamingContext namingContext)
       at PHP.Library.PerlRegExp.Evaluator.ReplaceCodeExecute(Match m)
       at System.Text.RegularExpressions.RegexReplacement.Replace(MatchEvaluator evaluator, Regex regex, String input, Int32 count, Int32 startat)
       at System.Text.RegularExpressions.Regex.Replace(String input, MatchEvaluator evaluator, Int32 count)
       at PHP.Library.PerlRegExp.ReplaceInternal(DObject self, Dictionary`2 definedVariables, PerlRegExpConverter converter, PhpCallback callback, String str, Int32 limit, SourceCodeDescriptor sourceCodeDesc, Int32& count)
       at PHP.Library.PerlRegExp.SimpleReplace(DObject self, Dictionary`2 definedVariables, Object pattern, String replacement, PhpCallback callback, Object data, Int32 limit, SourceCodeDescriptor descriptor, Int32& count)
       at PHP.Library.PerlRegExp.Replace(ScriptContext context, DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, PhpCallback callback, Object data, Int32 limit, Int32& count)
       at PHP.Library.PerlRegExp.Replace(ScriptContext context, DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, Object data)
       at PHP.Dynamic.PhpNetClassLibrary.preg_replace(Object , PhpStack )
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <__input.txt>.a.a(ScriptContext ) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt:line 16
       at <__input.txt>.a.<Mediator>(ScriptContext )
       at <__input.txt>.a.a(Object instance, PhpStack stack)
       at <__input.txt>.<Script>.<Main>(ScriptContext <context>, Dictionary`2 <locals>, DObject , DTypeDesc , Boolean ) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt:line 19
       at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)
       at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)
       --- End of inner exception stack trace ---
       at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)
       at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)
       at <Global>.Run(String[] )
    
    Bugs/preg-this-dynamic2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    foo: ahoj
    foo: lidi
    foo: rozkladame
    foo: ahoj
    foo: lidi
    foo: rozkladame
    foo: ahoj
    foo: lidi
    foo: rozkladame
    
    Notice: Undefined variable: this.
    
    Error: Call to a member function foo() on a non-object.
    Bugs/preg-this.php: SUCCEEDED
    Bugs/preg-ungreedy-bugs.php: SUCCEEDED
    Bugs/preg-unkn.php: SUCCEEDED
    Bugs/trigger_error%20line%20number%20%232787.php: SUCCEEDED
    Compiler/abstracts.php: SUCCEEDED
    Compiler/aliased%20assign%20add.php: SUCCEEDED
    Compiler/assignments.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ---1---1float(-1.5)
    float(2.5)
    float(0.83333333333333)
    int(6)
    int(8)
    ---2---2float(8.8333333333333)
    float(8.8333333333333)
    float(8.8333333333333)
    int(8)
    int(8)
    ---3---3---4---4---5---5array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [1]=>
      array(1) {
        [2]=>
        array(1) {
          [3]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    ---6---6array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "u"
    }
    array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "v"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    ---7---7array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    ---8---8
    ---1---1float(-1.5)
    float(2.5)
    float(0.833333333333333)
    int(6)
    int(8)
    ---2---2float(8.83333333333333)
    float(8.83333333333333)
    float(8.83333333333333)
    int(8)
    int(8)
    ---3---3---4---4---5---5array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [1]=>
      array(1) {
        [2]=>
        array(1) {
          [3]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    ---6---6array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "u"
    }
    array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "v"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    ---7---7array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    ---8---8
    Compiler/assign_in_call.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    g1:
    f(x)
    u(x)
    'x'
    
    g2:
    f(x)
    u(x)
    'b'
    
    g3:
    f(x)
    u(x)
    'b'
    
    g4:
    f(x)
    u(x)
    'b'
    
    g5:
    f()
    u()
    integer(1)
    
    g6:
    f(3)
    u(3)
    integer(3)
    
    g7:
    f(2)
    u(10)
    integer(10)
    
    g8:
    f(1)
    f(1)
    f(1)
    u(1)
    u()
    u(1)
    
    g9:
    known:
    __get(p) = 0
    __set(p,1)
    f(1)
    unknown:
    __get(p) = 1
    __set(p,3)
    u(3)
    
    g10:
    Done.
    g1:
    f(x)
    u(x)
    'x'
    
    g2:
    f(x)
    u(x)
    'b'
    
    g3:
    f(x)
    u(x)
    'b'
    
    g4:
    f(x)
    u(x)
    'b'
    
    g5:
    f()
    u()
    integer(1)
    
    g6:
    f(3)
    u(3)
    integer(3)
    
    g7:
    f(2)
    u(10)
    integer(10)
    
    g8:
    f(1)
    f(1)
    f(1)
    u(1)
    u()
    u(1)
    
    g9:
    known:
    __get(p) = 0
    __set(p,1)
    __get(p) = 1
    f(1)
    unknown:
    __get(p) = 1
    __set(p,3)
    __get(p) = 3
    u(3)
    
    g10:
    Done.
    Compiler/auto_globals_001.php: SUCCEEDED
    Compiler/auto_globals_002.php: SUCCEEDED
    Compiler/auto_globals_003.php: SUCCEEDED
    Compiler/break_in_global_code.php: SUCCEEDED
    Compiler/chaining_test.php: SUCCEEDED
    Compiler/chain_ending_by_string_index.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        string(1) "f"
      }
    }
    array(1) {
      [0]=>
      string(4) "xubu"
    }
    object(C)#1 (1) {
      ["f"]=>
      string(4) "kuxu"
    }
    string(5) "helxo"
    string(5) "helxo"
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        string(1) "f"
      }
    }
    array(1) {
      [0]=>
      string(4) "bubu"
    }
    
    Warning: A string item used as a reference in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt at expression on line 19, column 1.
    object(C)(1) {
      ["f"]=>
      string(4) "kuku"
    }
    
    Warning: A string item used as a reference in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt at expression on line 25, column 1.
    string(5) "hello"
    
    Warning: A string item used as a reference in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt at expression on line 31, column 1.
    string(5) "hello"
    Compiler/continue_in_global_code.php: SUCCEEDED
    Compiler/deep_copy.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array(1) {
      [0]=>
      &array(1) {
        [0]=>
        &array(1) {
          [0]=>
          *RECURSION*
        }
      }
    }
    array(1) {
      [0]=>
      &array(1) {
        [0]=>
        &array(1) {
          [0]=>
          *RECURSION*
        }
      }
    }
    array(2) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) {
          [0]=>
          *RECURSION*
          [1]=>
          int(1)
        }
        [1]=>
        int(1)
      }
      [1]=>
      int(1)
    }
    array(1) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) {
          [0]=>
          *RECURSION*
          [1]=>
          int(1)
        }
        [1]=>
        int(1)
      }
    }
    array(1) {
      [0]=>
      &array(1) [recursion]
    }
    array(1) {
      [0]=>
      &array(1) {
        [0]=>
        &array(1) [recursion]
      }
    }
    array(2) {
      [0]=>
      &array(2) [recursion]
      [1]=>
      int(1)
    }
    array(1) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) [recursion]
        [1]=>
        int(1)
      }
    }
    Compiler/deep_copy_refbox.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Strict Standards: Only variables should be passed by reference in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt on line 42
    array
    {
      0 => integer(1)
    }
    
    Strict Standards: Only variables should be passed by reference in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt on line 45
    array
    {
      0 => integer(1)
    }
    
    Strict Standards: Only variables should be passed by reference in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt on line 49
    array
    {
      0 => integer(1)
    }
    
    Strict Standards: Only variables should be passed by reference in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt on line 52
    array
    {
      0 => integer(1)
    }
    array
    {
      0 => integer(1)
      1 => integer(1)
    }
    array
    {
      0 => integer(1)
      1 => integer(1)
    }
    array
    {
      0 => integer(1)
      1 => integer(1)
    }
    array
    {
      0 => integer(1)
      1 => integer(1)
    }
    Compiler/expr_init.php: SUCCEEDED
    Compiler/foreach1.php: SUCCEEDED
    Compiler/foreach_arrays.php: SUCCEEDED
    Compiler/for_loop.php: SUCCEEDED
    Compiler/function_002.php: SUCCEEDED
    Compiler/function_003.php: SUCCEEDED
    Compiler/function_004.php: SUCCEEDED
    Compiler/function_call.php: SUCCEEDED
    Compiler/if_statement.php: SUCCEEDED
    Compiler/indirect_001.php: SUCCEEDED
    Compiler/indirect_002.php: SUCCEEDED
    Compiler/indirect_003.php: SUCCEEDED
    Compiler/indirect_004.php: SUCCEEDED
    Compiler/indirect_005.php: SUCCEEDED
    Compiler/indirect_007.php: SUCCEEDED
    Compiler/indirect_global.php: SUCCEEDED
    Compiler/inheritance.php: SUCCEEDED
    Compiler/inheritance2.php: SUCCEEDED
    Compiler/isset_unset_001.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Testing x in global code:  <br>
    1 <br>
     <br>
    Testing x (object) in optimized function:  <br>
    1 <br>
     <br>
    Testing x (PhpReference) in optimized function:  <br>
    1 <br>
     <br>
    
    Notice: Undefined variable: y in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt on line 29
    Testing $$x (created at runtime) in optimized function:  <br>
    1 <br>
    Testing x in global code:  <br>
    1 <br>
     <br>
    Testing x (object) in optimized function:  <br>
    1 <br>
     <br>
    Testing x (PhpReference) in optimized function:  <br>
    1 <br>
     <br>
    Testing $$x (created at runtime) in optimized function:  <br>
    1 <br>
    Compiler/list%20%2326681.php: SUCCEEDED
    Compiler/null_hints.php: SUCCEEDED
    Compiler/pure_create_function.php: SUCCEEDED
    Compiler/pure_function_exists.php: SUCCEEDED
    Compiler/pure_math_str.php: SUCCEEDED
    Compiler/static_call.php: SUCCEEDED
    Compiler/switch.php: SUCCEEDED
    Compiler/ternary_ex.php: SUCCEEDED
    Compiler/this%20call.php: SUCCEEDED
    Compiler/typehint_check.php: SUCCEEDED
    Compiler/__call.php: SUCCEEDED
    Compiler/Inclusions/include2.php: SUCCEEDED
    Compiler/Inclusions/include3.php: SUCCEEDED
    Compiler/Inclusions/include6.php: SUCCEEDED
    Compiler/Inclusions/include_test.php: SUCCEEDED
    Compiler/Inclusions/script.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t01.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t02.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t03.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t04.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t05.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t08.php: SUCCEEDED
    Compiler/PseudoConst/parent.php: SUCCEEDED
    Compiler/PseudoConst/parent2.php: SUCCEEDED
    Compiler/PseudoConst/self.php: SUCCEEDED
    Compiler/PseudoConst/t01.php: SUCCEEDED
    Compiler/PseudoConst/t02.php: SUCCEEDED
    Compiler/PseudoConst/t03.php: SUCCEEDED
    Compiler/PseudoConst/t04.php: SUCCEEDED
    Compiler/PseudoConst/t05.php: SUCCEEDED
    Compiler/PseudoConst/t06.php: SUCCEEDED
    Compiler/PseudoConst/t07.php: SUCCEEDED
    Compiler/PseudoConst/t08.php: SUCCEEDED
    Compiler/PseudoConst/t09.php: SUCCEEDED
    Compiler/PseudoConst/t10.php: SUCCEEDED
    Compiler/PseudoConst/t11.php: SUCCEEDED
    Compiler/PseudoConst/_class_.php: SUCCEEDED
    Compiler/PseudoConst/_dir_.php: SUCCEEDED
    Compiler/PseudoConst/_function_.php: SUCCEEDED
    Compiler/References/array_argument.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(2)
        [1]=>
        int(3)
      }
    }
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    Compiler/References/array_local.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(2)
        [1]=>
        int(3)
      }
    }
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    Compiler/References/array_ret_argument.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(2)
        [1]=>
        int(3)
      }
    }
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    Compiler/References/array_ret_argument2.php: SUCCEEDED
    Compiler/References/deepcopy.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <br/><br/>globalobjects: array(2) {
      [0]=>
      int(1)
      [1]=>
      int(7)
    }
    <br/><br/>globalobjects: array(2) {
      [0]=>
      int(1)
      [1]=>
      &int(7)
    }
    Compiler/References/explicitclear.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Construyendo Y
    call foo12Destruyendo Y
    3object(X)#1 (2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      int(54)
    }
    array(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      string(10) "Init Value"
    }
    x: object(X)#1 (2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      int(1004)
    }
    <br/>checkpoint array(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      int(54)
    }
    Construyendo Y
    call foo123object(X)(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      &int(54)
    }
    array(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      &int(54)
    }
    x: object(X)(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      &int(1004)
    }
    <br/>checkpoint array(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      &int(1004)
    }
    Destruyendo Y
    Compiler/References/field_argument.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: int(7)
    <br/><br/>checkpoint array(1) {
      ["objects"]=>
      int(8)
    }
    x: int(7)
    <br/><br/>checkpoint array(1) {
      ["objects"]=>
      &int(7)
    }
    Compiler/References/field_local.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: object(X)#1 (1) {
      ["objects"]=>
      int(25)
    }
    <br/>checkpoint array(1) {
      ["objects"]=>
      int(7)
    }
    x: object(X)(1) {
      ["objects"]=>
      &int(25)
    }
    <br/>checkpoint array(1) {
      ["objects"]=>
      &int(25)
    }
    Compiler/References/ref_arrayitem.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(2)
        [1]=>
        int(3)
      }
    }
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    Compiler/References/ref_reasign.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    object(X)#1 (2) {
      ["objects"]=>
      int(54)
      ["objects2"]=>
      &int(222)
    }
    array(2) {
      ["objects"]=>
      int(7)
      ["objects2"]=>
      &int(222)
    }
    x: object(X)#1 (2) {
      ["objects"]=>
      int(1004)
      ["objects2"]=>
      int(777)
    }
    <br/>checkpoint array(2) {
      ["objects"]=>
      int(54)
      ["objects2"]=>
      int(222)
    }
    object(X)(2) {
      ["objects"]=>
      &int(54)
      ["objects2"]=>
      &int(222)
    }
    array(2) {
      ["objects"]=>
      &int(54)
      ["objects2"]=>
      &int(222)
    }
    x: object(X)(2) {
      ["objects"]=>
      &int(1004)
      ["objects2"]=>
      &int(777)
    }
    <br/>checkpoint array(2) {
      ["objects"]=>
      &int(1004)
      ["objects2"]=>
      &int(777)
    }
    Compiler/Unreachable/t13.php: SUCCEEDED
    Compiler/Unset/calluserfunc.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Warning: call_user_func() expects parameter 1 to be a valid callback, function 'unset' not found or invalid function name in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\Unset\__input.txt on line 3
    int(10)
    Error: call_user_func(): Call to undefined function: 'unset' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\Unset\__input.txt at expression on line 3, column 1.
    Compiler/Unset/issetref2.php: SUCCEEDED
    Compiler/Unset/unsetglobal.php: SUCCEEDED
    Compiler/Unset/unsetglobal2.php: SUCCEEDED
    Compiler/Unset/unsetindirect.php: SUCCEEDED
    Compiler/Unset/unsetproblem.php: SUCCEEDED
    Compiler/Unset/unsetref.php: SUCCEEDED
    Compiler/Unset/unsetref2.php: SUCCEEDED
    Compiler/Unset/unsetref3.php: SUCCEEDED
    Compiler/Unset/__unset.php: SUCCEEDED
    DateTime/strftime.php: SUCCEEDED
    DateTime/strtotime1.php: SUCCEEDED
    DateTime/strtotime2.php: SUCCEEDED
    DateTime/strtotime3.php: SUCCEEDED
    DateTime/strtotime4.php: SUCCEEDED
    DateTime/strtotime5.php: SUCCEEDED
    DateTime/time.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    -189388800:-189475200 - 86400
    1964-01-01T00:00:00+0000
    1963-12-31T00:00:00+0000
    1964-06-06
    1963-06-06
    1964-01-06
    1133305200
    -189388800:-189475200 - 86400
    1964-01-01T00:00:00+0000
    1963-12-31T00:00:00+0000
    1964-06-06
    1963-06-06
    1964-01-06
    DateTime/timezones1.php: SUCCEEDED
    FileSystem/basename.php: SUCCEEDED
    FileSystem/basename2.php: SUCCEEDED
    FileSystem/chdir.php: SUCCEEDED
    FileSystem/csv.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    --- write ---
    72
    24
    44
    2
    6
    
    --- read ---
    "hello\n
    world";"aaa""bbb""ccc";"blah blah;";none;"tab\ttab";"space space"\n
    hh'ee;"ss\nsadasdasd s"\n
    """""""""""""""""""""";"""";;"""""";"xxx"""\n
    x\n
    "x\y"\n
    --- write ---
    72
    24
    44
    2
    6
    
    --- read ---
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    FileSystem/date.php: SUCCEEDED
    FileSystem/date2.php: SUCCEEDED
    FileSystem/date3.php: SUCCEEDED
    FileSystem/date_unix.php: SUCCEEDED
    FileSystem/dirname.php: SUCCEEDED
    FileSystem/dirname2.php: SUCCEEDED
    FileSystem/disk_free_space.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    874 GB
    Drive C: 53 GB
    Drive D: 874 GB
    Drive E: 
    Warning: disk_free_space(): The system cannot find the path specified.
     in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 14
    false
    Drive F: 
    Warning: disk_free_space(): The device is not ready.
     in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 14
    false
    874 GB
    Drive C: 53 GB
    Drive D: 874 GB
    Drive E: false
    Drive F: false
    FileSystem/disk_total_space.php: SUCCEEDED
    FileSystem/fgets.php: SUCCEEDED
    FileSystem/file.php: SUCCEEDED
    FileSystem/filesize.php: SUCCEEDED
    FileSystem/file_exists.php: SUCCEEDED
    FileSystem/file_get_contents.php: SUCCEEDED
    FileSystem/fpassthru.php: SUCCEEDED
    FileSystem/fread.php: SUCCEEDED
    FileSystem/fread1.php: SUCCEEDED
    FileSystem/fread2.php: SUCCEEDED
    FileSystem/fseek.php: SUCCEEDED
    FileSystem/fsockopen.php: SUCCEEDED
    FileSystem/ftell.php: SUCCEEDED
    FileSystem/is_dir.php: SUCCEEDED
    FileSystem/is_executable.php: SUCCEEDED
    FileSystem/pathinfo.php: SUCCEEDED
    FileSystem/popen.php: SUCCEEDED
    FileSystem/readdir.php: SUCCEEDED
    FileSystem/readfile.php: SUCCEEDED
    FileSystem/readline.php: SUCCEEDED
    FileSystem/realpath.php: SUCCEEDED
    FileSystem/scandir.php: SUCCEEDED
    FileSystem/stat.php: SUCCEEDED
    FileSystem/stream_context_set_option.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <pre>[ARRAY
      [STRING: "http"] => [ARRAY
        [STRING: "method"] => [STRING: "GET"]
        [STRING: "header"] => [STRING: "Accept-language: en
    Cookie: foo=bar
    "]
        [STRING: "op1"] => [STRING: "DIRECT"]
        [STRING: "op2"] => [STRING: "VIA STREAM"]
      ]
      [STRING: "other"] => [ARRAY
        [STRING: "method"] => [STRING: "otherGET"]
        [STRING: "header"] => [STRING: "otherAccept-language: en
    otherCookie: foo=bar
    "]
      ]
      [STRING: "file"] => [ARRAY
        [STRING: "method"] => [STRING: "otherGET"]
        [STRING: "header"] => [STRING: "otherAccept-language: en
    otherCookie: foo=bar
    "]
      ]
      [STRING: "wrap"] => [ARRAY
        [STRING: "op1"] => [STRING: "DIRECT"]
        [STRING: "op2"] => [STRING: "VIA STREAM"]
      ]
    ]</pre>
    <pre>[ARRAY
      [STRING: "http"] => [ARRAY
        [STRING: "method"] => [STRING: "GET"]
        [STRING: "header"] => [STRING: "Accept-language: en
    Cookie: foo=bar
    "]
        [STRING: "op1"] => [STRING: "DIRECT"]
        [STRING: "op2"] => [STRING: "VIA STREAM"]
      ]
      [STRING: "other"] => [ARRAY
        [STRING: "method"] => [STRING: "otherGET"]
        [STRING: "header"] => [STRING: "otherAccept-language: en
    otherCookie: foo=bar
    "]
      ]
      [STRING: "file"] => [ARRAY
        [STRING: "method"] => [STRING: "otherGET"]
        [STRING: "header"] => [STRING: "otherAccept-language: en
    otherCookie: foo=bar
    "]
      ]
      [STRING: "wrap"] => [ARRAY
        [STRING: "op1"] => [STRING: "DIRECT"]
        [STRING: "op2"] => [STRING: "VIA STREAM"]
      ]
    ]</pre>
    Error: Script 'D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem/fs.inc' inclusion failed. Cause: Script cannot be included with current configuration. Search paths: include_path is '.', working directory is 'D:\Documents\Projects\Phalanger\Main\Testing\Tests'  in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 3, column 1.
    FileSystem/stream_copy_to_stream.php: SUCCEEDED
    FileSystem/stream_copy_to_stream2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <p>Read <b>rb</b>, Write <b>wb</b>
    
    
    COPIED: <b>28565</b>
    <p>Read <b>rb</b>, Write <b>wt</b>
    
    
    COPIED: <b>28583</b>
    <p>Read <b>rb</b>, Write <b>wb</b>
    
    
    COPIED: <b>28583</b>
    <p>Read <b>rb</b>, Write <b>wt</b>
    
    
    COPIED: <b>28615</b>
    FileSystem/testinc.php: SUCCEEDED
    FileSystem/touch.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Warning: touch(): Utime failed: No such file or directory in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 8
    Sorry Could Not change modification time of touch.txt
    Warning: touch(): Utime failed: No such file or directory in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 14
    
    Warning: touch(): Utime failed: No such file or directory in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 16
    
    Warning: touch(): Utime failed: No such file or directory in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 17
    <pre>[ARRAY
      [INT (0)] => [STRING: "May 10, 2011; [00:50:21] (00h) ctime test.txt (1304981421)"]
      [INT (1)] => [STRING: "February 19, 2011; [22:06:05] (22h) mtime test.txt (1298149565)"]
      [INT (2)] => [STRING: "May 10, 2011; [00:50:21] (00h) ctime touch.txt (1304981421)"]
      [INT (3)] => [STRING: "February 19, 2011; [22:06:05] (22h) mtime touch.txt (1298149565)"]
      [INT (4)] => [STRING: "May 10, 2011; [00:50:21] (00h) atime touch.txt (1304981421)"]
      [INT (5)] => [STRING: "February 19, 2011; [22:06:05] (22h) mtime summer.txt (1298149565)"]
      [INT (6)] => [STRING: "February 19, 2011; [22:06:05] (22h) mtime winter.txt (1298149565)"]
    ]</pre>
    Warning: touch(): Unable to access (D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\touch.txt): Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 8, column 5.
    Sorry Could Not change modification time of touch.txt
    Warning: touch(): Unable to access (D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\touch.txt): Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 14, column 1.
    
    Warning: touch(): Unable to access (D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\winter.txt): Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 16, column 1.
    
    Warning: touch(): Unable to access (D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\summer.txt): Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 17, column 1.
    <pre>[ARRAY
      [INT (0)] => [STRING: "May 10, 2011; [00:50:21] (00h) ctime test.txt (1304981421)"]
      [INT (1)] => [STRING: "February 19, 2011; [23:06:05] (23h) mtime test.txt (1298153165)"]
      [INT (2)] => [STRING: "May 10, 2011; [00:50:21] (00h) ctime touch.txt (1304981421)"]
      [INT (3)] => [STRING: "February 19, 2011; [23:06:05] (23h) mtime touch.txt (1298153165)"]
      [INT (4)] => [STRING: "May 10, 2011; [00:50:21] (00h) atime touch.txt (1304981421)"]
      [INT (5)] => [STRING: "February 19, 2011; [23:06:05] (23h) mtime summer.txt (1298153165)"]
      [INT (6)] => [STRING: "February 19, 2011; [23:06:05] (23h) mtime winter.txt (1298153165)"]
    ]</pre>
    FileSystem/tar/tar_test.php: SUCCEEDED
    FileSystem/zip/zip.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    failed
    Error: Call to undefined function: 'zip_open' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\zip\__input.txt at expression on line 3, column 1.
    Math/abs.php: SUCCEEDED
    Math/atan2.php: SUCCEEDED
    Math/base_convert.php: SUCCEEDED
    Math/bindec.php: SUCCEEDED
    Math/ceil.php: SUCCEEDED
    Math/cos.php: SUCCEEDED
    Math/decbin.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <pre>
    [double: 2294967295]
    10001000110010100110101111111111
    [double: 4294967296]
    0
    [double: 8589934590]
    11111111111111111111111111111110
    [double: 8589934590]
    11111111111111111111111111111110
    [double: 8589934591]
    11111111111111111111111111111111
    [Int: 1000.000.000.000]
    11010100101001010001000000000000
    <hr>(-1, -5435, 2.14, 0, 26)
    11111111111111111111111111111111
    11111111111111111110101011000101
    10
    0
    11010 
    </pre>
    <pre>
    [???: 2294967295]
    10001000110010100110101111111111
    [???: 4294967296]
    0
    [???: 8589934590]
    11111111111111111111111111111110
    [???: 8589934590]
    11111111111111111111111111111110
    [???: 8589934591]
    11111111111111111111111111111111
    [Int: 1000.000.000.000]
    11010100101001010001000000000000
    <hr>(-1, -5435, 2.14, 0, 26)
    11111111111111111111111111111111
    11111111111111111110101011000101
    10
    0
    11010 
    </pre>
    Math/dechex.php: SUCCEEDED
    Math/decoct.php: SUCCEEDED
    Math/deg2rad.php: SUCCEEDED
    Math/exp.php: SUCCEEDED
    Math/floor.php: SUCCEEDED
    Math/fmod.php: SUCCEEDED
    Math/hexdec.php: SUCCEEDED
    Math/max.php: SUCCEEDED
    Math/min.php: SUCCEEDED
    Math/modulo_warn.php: SUCCEEDED
    Math/octdec.php: SUCCEEDED
    Math/pow.php: SUCCEEDED
    Math/rad2deg.php: SUCCEEDED
    Math/round.php: SUCCEEDED
    Math/sin.php: SUCCEEDED
    Math/sqrt.php: SUCCEEDED
    Math/tan.php: SUCCEEDED
    Math/uniqid.php: SUCCEEDED
    Misc/calendar_extension.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0
    0
    2375840
    0
    14
    32
    2
    There are 31 days in August 2003
    There are 28 days in February 2003
    There are 29 days in February 2004
    There are 31 days in December 2034
    1748326
    1748324
    374867
    0
    322f32322f35373633
    ebe120e7f9e5ef20e4faf9f1e2
    ebe120e7f9e5ef20e427faf9f1e2
    ebe120e7f9e5ef20e420e0ecf4e9ed20faf9f1e2
    ebe120e7f9e5ef20e42720e0ecf4e9ed20faf9f1e2
    eb22e120e7f9e5ef20e4faf9f122e2
    e12720e7f9e5ef20e4faf9f122e2
    e12720e7f9e5ef20e427faf9f122e2
    e12720e7f9e5ef20e420e0ecf4e9ed20faf9f122e2
    e12720e7f9e5ef20e42720e0ecf4e9ed20faf9f122e2
    Error: Call to undefined function: 'frenchtojd' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt at expression on line 2, column 1.
    Misc/fgetcsv%20%2327492.php: SUCCEEDED
    Misc/hash%20functions%20%2326667.php: SUCCEEDED
    Misc/ini_parse.php: SUCCEEDED
    Misc/json%20%2327838.php: SUCCEEDED
    Misc/lexer.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    T_INLINE_HTML
    311 '\r\n'
    T_OPEN_TAG
    368 '&lt;?'
    T_WHITESPACE
    371 ' \r\n\r\n'
    T_FINAL
    345 'final'
    T_WHITESPACE
    371 ' '
    T_CLASS
    353 'class'
    T_WHITESPACE
    371 ' '
    T_STRING
    307 'A'
    T_WHITESPACE
    371 ' \r\n'
        '{'
    T_WHITESPACE
    371 ' \r\n  '
    T_FUNCTION
    334 'function'
    T_WHITESPACE
    371 ' '
    T_STRING
    307 '__get'
        '('
    T_VARIABLE
    309 '$x'
        ')'
    T_WHITESPACE
    371 ' \r\n  '
        '{'
    T_WHITESPACE
    371 ' \r\n    '
    T_VARIABLE
    309 '$x'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_START_HEREDOC
    372 '&lt;&lt;&lt;EOOOOOOOOOOOOOOT\r\n'
    T_ENCAPSED_AND_WHITESPACE
    314 '         &lt;&lt;&lt;hello\r\nEOOOOOOOOOOOOOOt;\r\nEOOOOOOOOOOOOOT;\r\n'
    T_END_HEREDOC
    373 'EOOOOOOOOOOOOOOT'
        ';'
    T_WHITESPACE
    371 '\r\n\r\n    '
        '$'
    T_VARIABLE
    309 '$y'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_ARRAY
    360 'array'
    T_WHITESPACE
    371 ' '
        '('
    T_LNUMBER
    305 '1'
        ','
    T_DNUMBER
    306 '100000000000000'
        ','
    T_DNUMBER
    306 '999999999999999999999999999999999'
        ','
    T_STRING
    307 'true'
        ','
    T_STRING
    307 'false'
        ')'
        ';'
    T_WHITESPACE
    371 '\r\n    '
        '$'
        '{'
        '&quot;'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
    T_DOLLAR_OPEN_CURLY_BRACES
    374 '${'
        '$'
        '{'
    T_CONSTANT_ENCAPSED_STRING
    315 '&quot;xxx&quot;'
        '}'
        '}'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
        '&quot;'
        '}'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_LNUMBER
    305 '1'
        ';'
    T_WHITESPACE
    371 '\r\n    '
        '$'
        '{'
        '&quot;'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
    T_DOLLAR_OPEN_CURLY_BRACES
    374 '${'
        '$'
        '{'
        '&quot;'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
    T_VARIABLE
    309 '$x'
    T_ENCAPSED_AND_WHITESPACE
    314 '-&gt;$$'
    T_VARIABLE
    309 '$x0xx'
        '&quot;'
        '}'
        '}'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
        '&quot;'
        '}'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_LNUMBER
    305 '1'
        ';'
    T_WHITESPACE
    371 '\r\n  '
        '}'
    T_WHITESPACE
    371 ' \r\n'
        '}'
    T_WHITESPACE
    371 '\r\n\r\n'
    T_CLOSE_TAG
    370 '?&gt;'
    '
    '
        '&lt;?'
        ' 
    
    '
        'final'
        ' '
        'class'
        ' '
        'A'
        ' 
    '
        '{'
        ' 
      '
        'function'
        ' '
    259
    259 '
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt at expression on line 10, column 7.
    '
        '('
        '$x'
        ')'
        ' 
      '
        '{'
        ' 
        '
        '$x'
        ' '
        '='
        ' '
        '&lt;&lt;&lt;EOOOOOOOOOOOOOOT
    '
        '         &lt;&lt;&lt;'
        'hello'
        '
    '
        'EOOOOOOOOOOOOOOt;
    '
        'EOOOOOOOOOOOOOT;
    '
        'EOOOOOOOOOOOOOOT'
        ';'
        '
    
        '
        '$'
        '$y'
        ' '
        '='
        ' '
        'array'
        ' '
        '('
        '1'
        ','
        '100000000000000'
        ','
        '999999999999999999999999999999999'
        ','
    256
    256 '
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt at expression on line 10, column 7.
    '
        ','
    257
    257 '
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt at expression on line 10, column 7.
    '
        ')'
        ';'
        '
        '
        '$'
        '{'
        '&quot;'
        'x'
        '${'
        '$'
        '{'
    -29
    -29 '
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt at expression on line 10, column 7.
    '
        '}'
        '}'
        'x'
        '&quot;'
        '}'
        ' '
        '='
        ' '
        '1'
        ';'
        '
        '
        '$'
        '{'
        '&quot;'
        'x'
        '${'
        '$'
        '{'
        '&quot;'
        'x'
        '$x'
        '-&gt;'
        '$'
        '$'
        '$x0xx'
        '&quot;'
        '}'
        '}'
        'x'
        '&quot;'
        '}'
        ' '
        '='
        ' '
        '1'
        ';'
        '
      '
        '}'
        ' 
    '
        '}'
        '
    
    '
        '?&gt;'
    Misc/locale.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string(1) "C"
    double(1.54)
    double(Infinity)
    654564.145400
    Sat Saturday Apr April
    --------------
    string(19) "Danish_Denmark.1252"
    double(1.54)
    double(Infinity)
    654564,145400
    lo lordag apr april
    --------------
    string(25) "Czech_Czech Republic.1250"
    double(1.54)
    double(Infinity)
    654564,145400
    so sobota IV duben
    --------------
    string(1) "C"
    float(1.54)
    float(Infinity)
    654564.145400
    Sat Saturday Apr April
    --------------
    string(19) "Danish_Denmark.1252"
    float(1.54)
    float(Infinity)
    654564,145400
    lo lordag apr april
    --------------
    string(25) "Czech_Czech Republic.1250"
    float(1.54)
    float(Infinity)
    654564,145400
    so sobota 4 duben
    --------------
    Misc/output2.php: SUCCEEDED
    Misc/parse_url%20%2327377.php: SUCCEEDED
    Misc/parse_url_at_bug.php: SUCCEEDED
    Misc/stack_trace.php: FAILED
    Script hung upNo errorsSuccess
    Expected test outputReal script output
    Unhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---> System.IndexOutOfRangeException: Index was outside the bounds of the array.
       at PHP.Core.PhpStackFrame..ctor(ScriptContext context, StackFrame frame, FrameKinds kind)
       at PHP.Core.PhpStackTrace..ctor(ScriptContext context, StackTrace clrTrace)
       at PHP.Core.PhpStackTrace..ctor(ScriptContext context, Int32 skipFrames)
       at PHP.Library.Errors.Backtrace()
       at <stack_trace.inc>.<Script>.j(ScriptContext <context>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\stack_trace.inc:line 11
       at <stack_trace.inc>.<Script>.j(Object instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <stack_trace.inc>.<Script>.i(ScriptContext <context>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\stack_trace.inc:line 6
       at <stack_trace.inc>.<Script>.i(Object instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <^0>.<Global>.<?0>.h(ScriptContext <context>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt:line 14
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack, DTypeDesc caller)
       at PHP.Core.PhpCallback.InvokeInternal(Object[] args)
       at PHP.Core.PhpCallback.Invoke(Object[] args)
       at PHP.Library.PhpArrays.Map(DTypeDesc caller, PhpCallback map, PhpArray[] arrays)
       at <__input.txt>.<Script>.<Lambda>(ScriptContext <context>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt:line 4
       at <__input.txt>.<Script>.<Lambda>(Object instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <__input.txt>.<Script>.f(ScriptContext <context>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt:line 6
       at <__input.txt>.<Script>.f(Object instance, PhpStack stack)
       at <__input.txt>.<Script>.<Main>(ScriptContext <context>, Dictionary`2 <locals>, DObject , DTypeDesc , Boolean ) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt:line 18
       at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)
       at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)
       --- End of inner exception stack trace ---
       at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)
       at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)
       at <Global>.Run(String[] )
    
    Misc/str_getcsv%20%2326691.php: SUCCEEDED
    Misc/tokens.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    T_REQUIRE_ONCE = 258,
    T_REQUIRE = 259,
    T_EVAL = 260,
    T_INCLUDE_ONCE = 261,
    T_INCLUDE = 262,
    T_LOGICAL_OR = 263,
    T_LOGICAL_XOR = 264,
    T_LOGICAL_AND = 265,
    T_PRINT = 266,
    T_SR_EQUAL = 267,
    T_SL_EQUAL = 268,
    T_XOR_EQUAL = 269,
    T_OR_EQUAL = 270,
    T_AND_EQUAL = 271,
    T_MOD_EQUAL = 272,
    T_CONCAT_EQUAL = 273,
    T_DIV_EQUAL = 274,
    T_MUL_EQUAL = 275,
    T_MINUS_EQUAL = 276,
    T_PLUS_EQUAL = 277,
    T_BOOLEAN_OR = 278,
    T_BOOLEAN_AND = 279,
    T_IS_NOT_IDENTICAL = 280,
    T_IS_IDENTICAL = 281,
    T_IS_NOT_EQUAL = 282,
    T_IS_EQUAL = 283,
    T_IS_GREATER_OR_EQUAL = 284,
    T_IS_SMALLER_OR_EQUAL = 285,
    T_SR = 286,
    T_SL = 287,
    T_INSTANCEOF = 288,
    T_UNSET_CAST = 289,
    T_BOOL_CAST = 290,
    T_OBJECT_CAST = 291,
    T_ARRAY_CAST = 292,
    T_STRING_CAST = 293,
    T_DOUBLE_CAST = 294,
    T_INT_CAST = 295,
    T_DEC = 296,
    T_INC = 297,
    T_CLONE = 298,
    T_NEW = 299,
    T_EXIT = 300,
    T_IF = 301,
    T_ELSEIF = 302,
    T_ELSE = 303,
    T_ENDIF = 304,
    T_LNUMBER = 305,
    T_DNUMBER = 306,
    T_STRING = 307,
    T_STRING_VARNAME = 308,
    T_VARIABLE = 309,
    T_NUM_STRING = 310,
    T_INLINE_HTML = 311,
    T_CHARACTER = 312,
    T_BAD_CHARACTER = 313,
    T_ENCAPSED_AND_WHITESPACE = 314,
    T_CONSTANT_ENCAPSED_STRING = 315,
    T_ECHO = 316,
    T_DO = 317,
    T_WHILE = 318,
    T_ENDWHILE = 319,
    T_FOR = 320,
    T_ENDFOR = 321,
    T_FOREACH = 322,
    T_ENDFOREACH = 323,
    T_DECLARE = 324,
    T_ENDDECLARE = 325,
    T_AS = 326,
    T_SWITCH = 327,
    T_ENDSWITCH = 328,
    T_CASE = 329,
    T_DEFAULT = 330,
    T_BREAK = 331,
    T_CONTINUE = 332,
    T_GOTO = 333,
    T_FUNCTION = 334,
    T_CONST = 335,
    T_RETURN = 336,
    T_TRY = 337,
    T_CATCH = 338,
    T_THROW = 339,
    T_USE = 340,
    T_GLOBAL = 341,
    T_PUBLIC = 342,
    T_PROTECTED = 343,
    T_PRIVATE = 344,
    T_FINAL = 345,
    T_ABSTRACT = 346,
    T_STATIC = 347,
    T_VAR = 348,
    T_UNSET = 349,
    T_ISSET = 350,
    T_EMPTY = 351,
    T_HALT_COMPILER = 352,
    T_CLASS = 353,
    T_INTERFACE = 354,
    T_EXTENDS = 355,
    T_IMPLEMENTS = 356,
    T_OBJECT_OPERATOR = 357,
    T_DOUBLE_ARROW = 358,
    T_LIST = 359,
    T_ARRAY = 360,
    T_CLASS_C = 361,
    T_METHOD_C = 362,
    T_FUNC_C = 363,
    T_LINE = 364,
    T_FILE = 365,
    T_COMMENT = 366,
    T_DOC_COMMENT = 367,
    T_OPEN_TAG = 368,
    T_OPEN_TAG_WITH_ECHO = 369,
    T_CLOSE_TAG = 370,
    T_WHITESPACE = 371,
    T_START_HEREDOC = 372,
    T_END_HEREDOC = 373,
    T_DOLLAR_OPEN_CURLY_BRACES = 374,
    T_CURLY_OPEN = 375,
    T_PAAMAYIM_NEKUDOTAYIM = 376,
    T_DOUBLE_COLON = 376,
    T_NAMESPACE = 377,
    T_NS_C = 378,
    T_DIR = 379,
    T_NS_SEPARATOR = 380,
    T_INCLUDE = 129,
    T_INCLUDE_ONCE = 130,
    T_EVAL = 131,
    T_REQUIRE = 132,
    T_REQUIRE_ONCE = 133,
    T_LOGICAL_OR = 136,
    T_LOGICAL_XOR = 137,
    T_LOGICAL_AND = 138,
    T_PRINT = 139,
    T_PLUS_EQUAL = 140,
    T_MINUS_EQUAL = 141,
    T_MUL_EQUAL = 142,
    T_DIV_EQUAL = 143,
    T_CONCAT_EQUAL = 144,
    T_MOD_EQUAL = 145,
    T_AND_EQUAL = 146,
    T_OR_EQUAL = 147,
    T_XOR_EQUAL = 148,
    T_SL_EQUAL = 149,
    T_SR_EQUAL = 150,
    T_BOOLEAN_OR = 151,
    T_BOOLEAN_AND = 152,
    T_IS_EQUAL = 153,
    T_IS_NOT_EQUAL = 154,
    T_IS_IDENTICAL = 155,
    T_IS_NOT_IDENTICAL = 156,
    T_IS_SMALLER_OR_EQUAL = 157,
    T_IS_GREATER_OR_EQUAL = 158,
    T_SL = 159,
    T_SR = 160,
    T_INC = 161,
    T_DEC = 162,
    T_NEW = 164,
    T_INSTANCEOF = 165,
    T_CLONE = 167,
    T_LNUMBER = 168,
    T_DNUMBER = 170,
    T_STRING = 171,
    T_STRING_VARNAME = 172,
    T_VARIABLE = 173,
    T_NUM_STRING = 174,
    T_INLINE_HTML = 175,
    T_CHARACTER = 176,
    T_BAD_CHARACTER = 177,
    T_ENCAPSED_AND_WHITESPACE = 178,
    T_CONSTANT_ENCAPSED_STRING = 179,
    T_EXIT = 180,
    T_IF = 181,
    T_ELSEIF = 182,
    T_ELSE = 183,
    T_ENDIF = 184,
    T_ECHO = 185,
    T_DO = 186,
    T_WHILE = 187,
    T_ENDWHILE = 188,
    T_FOR = 189,
    T_ENDFOR = 190,
    T_FOREACH = 191,
    T_ENDFOREACH = 192,
    T_AS = 193,
    T_SWITCH = 194,
    T_ENDSWITCH = 195,
    T_CASE = 196,
    T_DEFAULT = 197,
    T_BREAK = 198,
    T_CONTINUE = 199,
    T_FUNCTION = 200,
    T_CONST = 201,
    T_RETURN = 202,
    T_GLOBAL = 203,
    T_STATIC = 204,
    T_VAR = 205,
    T_UNSET = 206,
    T_ISSET = 207,
    T_EMPTY = 208,
    T_CLASS = 209,
    T_EXTENDS = 210,
    T_OBJECT_OPERATOR = 211,
    T_DOUBLE_ARROW = 212,
    T_LIST = 213,
    T_ARRAY = 214,
    T_CLASS_C = 215,
    T_METHOD_C = 216,
    T_FUNC_C = 217,
    T_LINE = 218,
    T_FILE = 219,
    T_DIR = 220,
    T_COMMENT = 221,
    T_DOC_COMMENT = 222,
    T_OPEN_TAG = 227,
    T_OPEN_TAG_WITH_ECHO = 228,
    T_CLOSE_TAG = 229,
    T_WHITESPACE = 230,
    T_START_HEREDOC = 231,
    T_END_HEREDOC = 232,
    T_DOLLAR_OPEN_CURLY_BRACES = 233,
    T_CURLY_OPEN = 234,
    T_DOUBLE_COLON = 235,
    T_PAAMAYIM_NEKUDOTAYIM = 235,
    T_GOTO = 237,
    T_TRY = 238,
    T_CATCH = 239,
    T_THROW = 240,
    T_INTERFACE = 241,
    T_IMPLEMENTS = 242,
    T_ABSTRACT = 243,
    T_FINAL = 244,
    T_PRIVATE = 245,
    T_PROTECTED = 246,
    T_PUBLIC = 247,
    T_BOOL_CAST = 287,
    T_INT_CAST = 290,
    T_DOUBLE_CAST = 296,
    T_STRING_CAST = 299,
    T_ARRAY_CAST = 302,
    T_OBJECT_CAST = 303,
    T_UNSET_CAST = 304,
    T_HALT_COMPILER = 351,
    Misc/user_error_handlers.php: SUCCEEDED
    Objects/accessing%20property%20line%20number%20%2326052.php: SUCCEEDED
    Objects/conditional1.php: SUCCEEDED
    Objects/conditional2.php: SUCCEEDED
    Objects/conditional_base_class.php: SUCCEEDED
    Objects/constant_test.php: SUCCEEDED
    Objects/evaled_parent.php: SUCCEEDED
    Objects/getter_setter_bug28444.php: SUCCEEDED
    Objects/instanceof.php: SUCCEEDED
    Objects/new_via_unknown_ctor.php: SUCCEEDED
    Objects/object_creation_test.php: SUCCEEDED
    Objects/overrides%20%231285.php: SUCCEEDED
    Objects/static_field_test.php: SUCCEEDED
    Objects/static_inheritence.php: SUCCEEDED
    Objects/static_method_test.php: SUCCEEDED
    Objects/static_object_vars.php: SUCCEEDED
    Objects/sys_class_const.php: SUCCEEDED
    Objects/this2.php: SUCCEEDED
    RegEx/backreferences.php: SUCCEEDED
    RegEx/dolar_escape.php: SUCCEEDED
    RegEx/ereg.php: SUCCEEDED
    RegEx/namedbackref.php: SUCCEEDED
    RegEx/namedgroups.php: SUCCEEDED
    RegEx/preg_match_unmatched_groups.php: SUCCEEDED
    RegEx/preg_replace_eval.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ab"01300 as"00da sd"0asdsa das asd 11asd a1sd a
    ab"01300 as"00da sd"0(aasdasdkjask,$a,\,\l,a,s,d,a,s,d,k,j,a,s,${120})(ldjaklsdjalk,$l,\,\l,d,j,a,k,l,s,d,j,a,l,${120})djdsa das asd 11asd a1sd a
    ab"01300 as"00da sd"0asdsa das asd 11asd a1sd a
    ab"01300 as"00da sd"0(aasdasdkjask,$a,\,\l,a,s,d,a,s,d,k,j,,,${120})(ldjaklsdjalk,$l,\,\l,d,j,a,k,l,s,d,j,,,${120})djdsa das asd 11asd a1sd a
    RegEx/regexp-sql.php: SUCCEEDED
    RegEx/regexp_smiles.php: SUCCEEDED
    RegEx/Perl/cache.php: SUCCEEDED
    RegEx/Perl/grep1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      [3] => string(3) "1.5"
      [6] => string(5) "58.54"
    }
    Notice: preg_grep(): Array to string conversion in D:\Documents\Projects\Phalanger\Main\Testing\Tests\RegEx\Perl\__input.txt at expression on line 5, column 1.
    array(2) {
      [3]=>
      string(3) "1.5"
      [6]=>
      string(5) "58.54"
    }
    RegEx/Perl/grep2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Food  array
    (
      [0] => apple
      [1] => banana
      [2] => squid
      [3] => pear
    )
    Fruit array
    (
      [0] => apple
      [1] => banana
      [3] => pear
    )
    Food  Array
    (
        [0] => apple
        [1] => banana
        [2] => squid
        [3] => pear
    )
    Fruit Array
    (
        [0] => apple
        [1] => banana
        [3] => pear
    )
    RegEx/Perl/match1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array [empty]
    array
    (
      [0] => array
      (
        [0] => def
        [1] => 3
      )
    )
    Array
    (
    )
    Array
    (
        [0] => Array
        (
            [0] => def
            [1] => 3
        )
    
    )
    RegEx/Perl/match10.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    (
      [0] => 1231
      [1] => 1
      [2] => 23
      [3] => 1
    )
    Array
    (
        [0] => 1231
        [1] => 1
        [2] => 23
        [3] => 1
    )
    RegEx/Perl/match2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    (
      [0] => array
      (
        [0] => def
        [1] => 0
      )
    )
    Array
    (
        [0] => Array
        (
            [0] => def
            [1] => 0
        )
    
    )
    RegEx/Perl/match3.php: SUCCEEDED
    RegEx/Perl/match4.php: SUCCEEDED
    RegEx/Perl/match5.php: SUCCEEDED
    RegEx/Perl/match6.php: SUCCEEDED
    RegEx/Perl/match7.php: SUCCEEDED
    RegEx/Perl/match8.php: SUCCEEDED
    RegEx/Perl/match9.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    (
      [0] => 209.6.145.47 - - [22/Nov/2003:19:02:30 -0500] "GET /dir/doc.htm HTTP/1.0" 200 6776 "http://search.yahoo.com/search?p=key+words=UTF-8" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)"
      [1] => 209.6.145.47
      [2] => -
      [3] => -
      [4] => 22/Nov/2003:19:02:30 -0500
      [5] => GET
      [6] => /dir/doc.htm
      [7] => HTTP
      [8] => 1.0
      [9] => 200
      [10] => 6776
      [11] => "http://search.yahoo.com/search?p=key+words=UTF-8"
      [12] => "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)"
    )
    Array
    (
        [0] => 209.6.145.47 - - [22/Nov/2003:19:02:30 -0500] "GET /dir/doc.htm HTTP/1.0" 200 6776 "http://search.yahoo.com/search?p=key+words=UTF-8" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)"
        [1] => 209.6.145.47
        [2] => -
        [3] => -
        [4] => 22/Nov/2003:19:02:30 -0500
        [5] => GET
        [6] => /dir/doc.htm
        [7] => HTTP
        [8] => 1.0
        [9] => 200
        [10] => 6776
        [11] => "http://search.yahoo.com/search?p=key+words=UTF-8"
        [12] => "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)"
    )
    RegEx/Perl/match_all1.php: SUCCEEDED
    RegEx/Perl/match_all2.php: SUCCEEDED
    RegEx/Perl/match_all3.php: SUCCEEDED
    RegEx/Perl/match_all4.php: SUCCEEDED
    RegEx/Perl/match_dollar.php: SUCCEEDED
    RegEx/Perl/overflow.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string("kfkaj +j k45´┐Ż´┐Ż´┐Ż´┐Ż´┐Ż3#$%^&kjakfjkaj|kfj")
    string("kfkaj +j k45�����3#$%^&kjakfjkaj|kfj")
    RegEx/Perl/quote1.php: SUCCEEDED
    RegEx/Perl/quote2.php: SUCCEEDED
    RegEx/Perl/quote3.php: SUCCEEDED
    RegEx/Perl/replace1.php: SUCCEEDED
    RegEx/Perl/replace2.php: SUCCEEDED
    RegEx/Perl/replace3.php: SUCCEEDED
    RegEx/Perl/replace4.php: SUCCEEDED
    RegEx/Perl/replace5.php: SUCCEEDED
    RegEx/Perl/replace6.php: SUCCEEDED
    RegEx/Perl/replace7.php: SUCCEEDED
    RegEx/Perl/replace8.php: SUCCEEDED
    RegEx/Perl/replace9.php: SUCCEEDED
    RegEx/Perl/replace_callback1.php: SUCCEEDED
    RegEx/Perl/replace_callback2.php: SUCCEEDED
    RegEx/Perl/split1.php: SUCCEEDED
    RegEx/Perl/split2.php: SUCCEEDED
    RegEx/Perl/split3.php: SUCCEEDED
    RegEx/Perl/split4.php: SUCCEEDED
    RegEx/Perl/split5.php: SUCCEEDED
    RegEx/Perl/split6.php: SUCCEEDED
    RegEx/Perl/ungreedy.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    aaa
    a
    aaa
    
    a
    aa
    aaa
    aa
    aaa
    aaa
    a
    aaa
    a
    a
    aa
    aaa
    aa
    aaa
    RegEx/Perl/unsuccessful-preg_match_all.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0
    4
    1
    4
    0
    4
    1
    7
    RegEx/Perl/withoutdelimiters.php: SUCCEEDED
    SPL/ArrayAccess_offsetExists.php: SUCCEEDED
    SPL/Autoload_ctor.php: SUCCEEDED
    SPL/Autoload_extends.php: SUCCEEDED
    SPL/exceptions.php: SUCCEEDED
    Strings/addcslashes.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    \f\o\o\[ \]
    Issues a Warning:
    // echo addcslashes("zoo['.']", 'z..A');
    // output:  \zoo['\.']
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 4, column 1.
    
    Issues a Warning:
    // echo addcslashes("zoo['.']", 'z..A');
    // output:  \zoo['\.']
    Strings/addslashes.php: SUCCEEDED
    Strings/chunk_split.php: SUCCEEDED
    Strings/concat.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string(2) "ab"
    string(2) "ab"
    string(2) "ab"
    string(2) "ab"
    string(2) "ab"
    string(2) "aB"
    string(2) "Ab"
    string(2) "AB"
    string(2) "ab"
    string(2) "a1"
    string(2) "1b"
    string(2) "11"
    string(2) "ab"
    string(2) "aB"
    string(2) "Ab"
    string[binary](2) "\x41\x42"
    string(2) "ab"
    string(2) "ab"
    string(2) "ab"
    string(2) "ab"
    string(2) "ab"
    string(2) "aB"
    string(2) "Ab"
    string(2) "AB"
    string(2) "ab"
    string(2) "a1"
    string(2) "1b"
    string(2) "11"
    string(2) "ab"
    string[binary](2) "aB"
    string[binary](2) "Ab"
    string[binary](2) "AB"
    Strings/count_chars.php: SUCCEEDED
    Strings/crc32.php: SUCCEEDED
    Strings/crypt.php: SUCCEEDED
    Strings/crypt2.php: SUCCEEDED
    Strings/echo.php: SUCCEEDED
    Strings/explode.php: SUCCEEDED
    Strings/get_html_translation_table.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <hr>[&] => &amp;
    [>] => &gt;
    [<] => &lt;
    ["] => &quot;
    <hr>Hallo &amp; &lt;Frau&gt; &amp; Kr&iuml;&iquest;&frac12;mer
    <hr>[&] => &amp;
    [>] => &gt;
    [<] => &lt;
    ["] => &quot;
    <hr>Hallo &amp; &lt;Frau&gt; &amp; Kr�mer
    Strings/mb_strlen.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Call to undefined function mb_strlen() in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 4
    Error: Call to undefined function: 'mb_strlen' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 4, column 1.
    Strings/nl2br.php: SUCCEEDED
    Strings/pack.php: SUCCEEDED
    Strings/pos.php: SUCCEEDED
    Strings/runtime-quotes.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    fread = (x''y"z)
    fgets = (x''y"z)
    file[0] = (x''y"z)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    
    Warning: fopen(runtime-quotes2.txt): failed to open stream: Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 33
    
    Warning: fwrite() expects parameter 1 to be resource, boolean given in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 35
    fwrite = ()
    
    Warning: fputs() expects parameter 1 to be resource, boolean given in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 38
    fputs = ()
    
    Warning: fclose() expects parameter 1 to be resource, boolean given in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 41
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (x'y"z)
    fgets = (x'y"z)
    file[0] = (x'y"z)
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (a\'b"\\ca\)
    fgets = (a\'b"\\ca\'b"\\c)
    file[0] = (a\'b"\\ca\'b"\\c)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    e'e
    e''e
    e'e
    e'e
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    e'e
    e'e
    e'e
    e'e
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    fread = (x''y"z)
    fgets = (x''y"z)
    file[0] = (x''y"z)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    
    Warning: fopen(): Unable to access (D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\runtime-quotes2.txt): Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 33, column 3.
    
    Warning: Cannot convert boolean to resource implicitly in a call to function fwrite() in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 35, column 3.
    fwrite = (0)
    
    Warning: Cannot convert boolean to resource implicitly in a call to function fputs() in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 38, column 3.
    fputs = (0)
    
    Warning: Cannot convert boolean to resource implicitly in a call to function fclose() in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 41, column 3.
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (x'y"z)
    fgets = (x'y"z)
    file[0] = (x'y"z)
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (a\'b"\\ca\)
    fgets = (a\'b"\\ca\'b"\\c)
    file[0] = (a\'b"\\ca\'b"\\c)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    e'e
    e''e
    e'e
    e'e
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    e'e
    e'e
    e'e
    e'e
    Strings/sprintf.php: SUCCEEDED
    Strings/sprintf2.php: SUCCEEDED
    Strings/strtr.php: SUCCEEDED
    Strings/str_ireplace.php: SUCCEEDED
    Strings/str_replace.php: SUCCEEDED
    Strings/str_word_count.php: SUCCEEDED
    Strings/substr_operations.php: SUCCEEDED
    Strings/wordwrap.php: SUCCEEDED
    Variables/advanced_serialize.php: SUCCEEDED
    Variables/arguments.php: SUCCEEDED
    Variables/bitwise.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "00"
    string(2) "31"
    string(2) "31"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    0
    0
    0
    5
    0
    5
    40
    5
    45
    string(48) "000000000000000000000000000000000000000000000000"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(14) "31323331323331"
    string(2) "30"
    string(14) "31323331323331"
    string(16) "3635343635343536"
    string(2) "30"
    string(16) "3635343635343536"
    string(14) "337a5e8be43d7a"
    string(14) "00002130120201"
    string(48) "337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42"
    string(16) "347d598ce33a7e77"
    string(16) "0200243214040100"
    string(48) "367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42"
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "00"
    string(2) "31"
    string(2) "31"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    0
    -9223372036854775808
    -9223372036854775808
    -9223372036854775803
    0
    -9223372036854775803
    40
    5
    45
    string(48) "000000000000000000000000000000000000000000000000"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(14) "31323331323331"
    string(2) "30"
    string(14) "31323331323331"
    string(16) "3635343635343536"
    string(2) "30"
    string(16) "3635343635343536"
    string(14) "337a5e8be43d7a"
    string(14) "00002130120201"
    string(48) "337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42"
    string(16) "347d598ce33a7e77"
    string(16) "0200243214040100"
    string(48) "367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42"
    Variables/comparisons.php: SUCCEEDED
    Variables/constant.php: SUCCEEDED
    Variables/extract%20refs.php: SUCCEEDED
    Variables/extract.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    EXTR_PREFIX_ALL
    integer(4)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
      'prefix_non_existent' => integer(1)
    }
    <hr>EXTR_PREFIX_INVALID
    integer(5)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => integer(2)
      'non_existent' => integer(1)
      'prefix_' => integer(1)
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => 'hello'
    }
    <hr>EXTR_PREFIX_SAME
    integer(3)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'non_existent' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>EXTR_PREFIX_IF_EXISTS
    integer(3)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>
    EXTR_PREFIX_ALL
    integer(4)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
      'prefix_non_existent' => integer(1)
    }
    <hr>EXTR_PREFIX_INVALID
    integer(5)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => integer(2)
      'non_existent' => integer(1)
      'prefix_' => integer(1)
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => 'hello'
    }
    <hr>EXTR_PREFIX_SAME
    integer(4)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'non_existent' => integer(1)
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>EXTR_PREFIX_IF_EXISTS
    integer(3)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>
    Variables/func_get_args.php: SUCCEEDED
    Variables/is_number.php: SUCCEEDED
    Variables/serialize.php: SUCCEEDED
    Variables/unserialize_objects.php: SUCCEEDED
    Variables/var_dumping.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Array
    (
        [0] => 1
        [1] => 
        [2] => 1
        [3] => 1.2
        [4] => 
        [5] => asdas
        [6] => Array
            (
                [0] => 1
            )
    
        [7] => stdClass Object
            (
            )
    
        [8] => Resource id #1
    )
    array(9) {
      [0]=>
      bool(true)
      [1]=>
      bool(false)
      [2]=>
      int(1)
      [3]=>
      float(1.2)
      [4]=>
      NULL
      [5]=>
      string(5) "asdas"
      [6]=>
      array(1) {
        [0]=>
        int(1)
      }
      [7]=>
      object(stdClass)#1 (0) {
      }
      [8]=>
      resource(1) of type (stream)
    }
    array (
      0 => true,
      1 => false,
      2 => 1,
      3 => 1.2,
      4 => NULL,
      5 => 'asdas',
      6 => 
      array (
        0 => 1,
      ),
      7 => 
      stdClass::__set_state(array(
      )),
      8 => NULL,
    )
    Array
    (
        [0] => 1
        [1] => 
        [2] => 1
        [3] => 1.2
        [4] => 
        [5] => asdas
        [6] => Array
        (
            [0] => 1
        )
    
        [7] => stdClass Object
        (
        )
    
        [8] => resource id #4
    
    )
    array(9) {
      [0]=>
      bool(true)
      [1]=>
      bool(false)
      [2]=>
      int(1)
      [3]=>
      float(1.2)
      [4]=>
      NULL
      [5]=>
      string(5) "asdas"
      [6]=>
      array(1) {
        [0]=>
        int(1)
      }
      [7]=>
      object(stdClass)(0) {
      }
      [8]=>
      resource(4) of type (stream)
    }
    array
    (
      '0' => true,
      '1' => false,
      '2' => 1,
      '3' => 1.2,
      '4' => NULL,
      '5' => 'asdas',
      '6' => array
      (
        '0' => 1
      ),
      '7' => class stdClass
      {
    
      },
      '8' => NULL
    )
    Xml/005.php: SUCCEEDED
    Xml/006.php: SUCCEEDED
    Xml/007.php: SUCCEEDED
    Xml/008.php: SUCCEEDED
    Xml/009.php: SUCCEEDED
    Xml/011.php: SUCCEEDED
    Xml/013.php: SUCCEEDED
    Xml/017.php: SUCCEEDED
    Xml/018.php: SUCCEEDED
    Xml/019.php: SUCCEEDED
    Xml/020.php: SUCCEEDED
    Xml/021.php: SUCCEEDED
    Xml/025.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
      'foo' => 'foobar'
    }
    array
    {
      'html' => 'http://www.w3.org/1999/xhtml'
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
    }
    array
    {
      'html' => 'http://www.w3.org/1999/xhtml'
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'foo' => 'foobar'
      'baz' => 'foobarbaz'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
    }
    array
    {
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
      'baz' => 'foobarbaz'
      'foo' => 'foobar'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
      'baz' => 'foobarbaz'
      'foo' => 'foobar'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
    }
    array
    {
    }
    Xml/026.php: SUCCEEDED
    Xml/027.php: SUCCEEDED
    Xml/028.php: SUCCEEDED
    Xml/029.php: SUCCEEDED
    Xml/030.php: SUCCEEDED
    Xml/032.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    FALSE
    FALSE
    FALSE
    TRUE
    TRUE
    TRUE
    Xml/033.php: SUCCEEDED
    Xml/bug26384.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    HERE
    Error while parsing the document
    Xml/bug28721.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    name (value): p ( t1 X t2  xxx )
    parent: NULL
    previousSibling: NULL
    nextSibling: NULL
    
      name (value): #text ( t1 )
      parent: name (value): p ( t1 X t2  xxx )
      previousSibling: NULL
      nextSibling: name (value): b (X)
    
      name (value): b (X)
      parent: name (value): p ( t1 X t2  xxx )
      previousSibling: name (value): #text ( t1 )
      nextSibling: name (value): #text ( t2 )
    
        name (value): #text (X)
        parent: name (value): b (X)
        previousSibling: NULL
        nextSibling: NULL
    
      name (value): #text ( t2 )
      parent: name (value): p ( t1 X t2  xxx )
      previousSibling: name (value): b (X)
      nextSibling: name (value): #text ( xxx )
    
      name (value): #text ( xxx )
      parent: name (value): p ( t1 X t2  xxx )
      previousSibling: name (value): #text ( t2 )
      nextSibling: NULL
    
    Append t1 to p:
    
    name (value): p (X t2  xxx  t1 )
    parent: NULL
    previousSibling: NULL
    nextSibling: NULL
    
      name (value): b (X)
      parent: name (value): p (X t2  xxx  t1 )
      previousSibling: NULL
      nextSibling: name (value): #text ( t2 )
    
        name (value): #text (X)
        parent: name (value): b (X)
        previousSibling: NULL
        nextSibling: NULL
    
      name (value): #text ( t2 )
      parent: name (value): p (X t2  xxx  t1 )
      previousSibling: name (value): b (X)
      nextSibling: name (value): #text ( xxx )
    
      name (value): #text ( xxx )
      parent: name (value): p (X t2  xxx  t1 )
      previousSibling: name (value): #text ( t2 )
      nextSibling: name (value): #text ( t1 )
    
      name (value): #text ( t1 )
      parent: name (value): p (X t2  xxx  t1 )
      previousSibling: name (value): #text ( xxx )
      nextSibling: NULL
    
    t1 == ret: TRUE
    
    div:
    
    name (value): div ( t3  t4  xxx )
    parent: NULL
    previousSibling: NULL
    nextSibling: NULL
    
      name (value): #text ( t3 )
      parent: name (value): div ( t3  t4  xxx )
      previousSibling: NULL
      nextSibling: name (value): b ()
    
      name (value): b ()
      parent: name (value): div ( t3  t4  xxx )
      previousSibling: name (value): #text ( t3 )
      nextSibling: name (value): #text ( t4 )
    
        name (value): X ()
        parent: name (value): b ()
        previousSibling: NULL
        nextSibling: NULL
    
      name (value): #text ( t4 )
      parent: name (value): div ( t3  t4  xxx )
      previousSibling: name (value): b ()
      nextSibling: name (value): #text ( xxx )
    
      name (value): #text ( xxx )
      parent: name (value): div ( t3  t4  xxx )
      previousSibling: name (value): #text ( t4 )
      nextSibling: NULL
    
    Insert t4 before t3:
    
    name (value): div ( t4  t3  xxx )
    parent: NULL
    previousSibling: NULL
    nextSibling: NULL
    
      name (value): #text ( t4 )
      parent: name (value): div ( t4  t3  xxx )
      previousSibling: NULL
      nextSibling: name (value): #text ( t3 )
    
      name (value): #text ( t3 )
      parent: name (value): div ( t4  t3  xxx )
      previousSibling: name (value): #text ( t4 )
      nextSibling: name (value): b ()
    
      name (value): b ()
      parent: name (value): div ( t4  t3  xxx )
      previousSibling: name (value): #text ( t3 )
      nextSibling: name (value): #text ( xxx )
    
        name (value): X ()
        parent: name (value): b ()
        previousSibling: NULL
        nextSibling: NULL
    
      name (value): #text ( xxx )
      parent: name (value): div ( t4  t3  xxx )
      previousSibling: name (value): b ()
      nextSibling: NULL
    
    
    p:
    
    name (value): p (X t2  xxx  t1 )
    parent: NULL
    previousSibling: NULL
    nextSibling: NULL
    
      name (value): b (X)
      parent: name (value): p (X t2  xxx  t1 )
      previousSibling: NULL
      nextSibling: name (value): #text ( t2 )
    
        name (value): #text (X)
        parent: name (value): b (X)
        previousSibling: NULL
        nextSibling: NULL
    
      name (value): #text ( t2 )
      parent: name (value): p (X t2  xxx  t1 )
      previousSibling: name (value): b (X)
      nextSibling: name (value): #text ( xxx )
    
      name (value): #text ( xxx )
      parent: name (value): p (X t2  xxx  t1 )
      previousSibling: name (value): #text ( t2 )
      nextSibling: name (value): #text ( t1 )
    
      name (value): #text ( t1 )
      parent: name (value): p (X t2  xxx  t1 )
      previousSibling: name (value): #text ( xxx )
      nextSibling: NULL
    
    Fragment:
    
    name (value): #document-fragment ()
    parent: NULL
    previousSibling: NULL
    nextSibling: NULL
    
      name (value): #text ( t5 )
      parent: name (value): #document-fragment ()
      previousSibling: NULL
      nextSibling: name (value): i ( frob )
    
      name (value): i ( frob )
      parent: name (value): #document-fragment ()
      previousSibling: name (value): #text ( t5 )
      nextSibling: name (value): #text ( t6 )
    
        name (value): #text ( frob )
        parent: name (value): i ( frob )
        previousSibling: NULL
        nextSibling: NULL
    
      name (value): #text ( t6 )
      parent: name (value): #document-fragment ()
      previousSibling: name (value): i ( frob )
      nextSibling: NULL
    
    Appending fragment to p:
    
    name (value): p (X t2  xxx  t1  t5  frob  t6 )
    parent: NULL
    previousSibling: NULL
    nextSibling: NULL
    
      name (value): b (X)
      parent: name (value): p (X t2  xxx  t1  t5  frob  t6 )
      previousSibling: NULL
      nextSibling: name (value): #text ( t2 )
    
        name (value): #text (X)
        parent: name (value): b (X)
        previousSibling: NULL
        nextSibling: NULL
    
      name (value): #text ( t2 )
      parent: name (value): p (X t2  xxx  t1  t5  frob  t6 )
      previousSibling: name (value): b (X)
      nextSibling: name (value): #text ( xxx )
    
      name (value): #text ( xxx )
      parent: name (value): p (X t2  xxx  t1  t5  frob  t6 )
      previousSibling: name (value): #text ( t2 )
      nextSibling: name (value): #text ( t1 )
    
      name (value): #text ( t1 )
      parent: name (value): p (X t2  xxx  t1  t5  frob  t6 )
      previousSibling: name (value): #text ( xxx )
      nextSibling: name (value): #text ( t5 )
    
      name (value): #text ( t5 )
      parent: name (value): p (X t2  xxx  t1  t5  frob  t6 )
      previousSibling: name (value): #text ( t1 )
      nextSibling: name (value): i ( frob )
    
      name (value): i ( frob )
      parent: name (value): p (X t2  xxx  t1  t5  frob  t6 )
      previousSibling: name (value): #text ( t5 )
      nextSibling: name (value): #text ( t6 )
    
        name (value): #text ( frob )
        parent: name (value): i ( frob )
        previousSibling: NULL
        nextSibling: NULL
    
      name (value): #text ( t6 )
      parent: name (value): p (X t2  xxx  t1  t5  frob  t6 )
      previousSibling: name (value): i ( frob )
      nextSibling: NULL
    
    Fragment:
    
    name (value): #document-fragment ()
    parent: NULL
    previousSibling: NULL
    nextSibling: NULL
    
    div:
    
    name (value): div ( t4  t3  xxx )
    parent: NULL
    previousSibling: NULL
    nextSibling: NULL
    
      name (value): #text ( t4 )
      parent: name (value): div ( t4  t3  xxx )
      previousSibling: NULL
      nextSibling: name (value): #text ( t3 )
    
      name (value): #text ( t3 )
      parent: name (value): div ( t4  t3  xxx )
      previousSibling: name (value): #text ( t4 )
      nextSibling: name (value): b ()
    
      name (value): b ()
      parent: name (value): div ( t4  t3  xxx )
      previousSibling: name (value): #text ( t3 )
      nextSibling: name (value): #text ( xxx )
    
        name (value): X ()
        parent: name (value): b ()
        previousSibling: NULL
        nextSibling: NULL
    
      name (value): #text ( xxx )
      parent: name (value): div ( t4  t3  xxx )
      previousSibling: name (value): b ()
      nextSibling: NULL
    
    Inserting fragment before t4
    Error (2)
    
    name (value): div ( t4  t3  xxx )
    parent: NULL
    previousSibling: NULL
    nextSibling: NULL
    
      name (value): #text ( t4 )
      parent: name (value): div ( t4  t3  xxx )
      previousSibling: NULL
      nextSibling: name (value): #text ( t3 )
    
      name (value): #text ( t3 )
      parent: name (value): div ( t4  t3  xxx )
      previousSibling: name (value): #text ( t4 )
      nextSibling: name (value): b ()
    
      name (value): b ()
      parent: name (value): div ( t4  t3  xxx )
      previousSibling: name (value): #text ( t3 )
      nextSibling: name (value): #text ( xxx )
    
        name (value): X ()
        parent: name (value): b ()
        previousSibling: NULL
        nextSibling: NULL
    
      name (value): #text ( xxx )
      parent: name (value): div ( t4  t3  xxx )
      previousSibling: name (value): b ()
      nextSibling: NULL
    
    p:
    
    name (value): p (X t2  xxx  t1  t5  frob  t6 )
    parent: NULL
    previousSibling: NULL
    nextSibling: NULL
    
      name (value): b (X)
      parent: name (value): p (X t2  xxx  t1  t5  frob  t6 )
      previousSibling: NULL
      nextSibling: name (value): #text ( t2 )
    
        name (value): #text (X)
        parent: name (value): b (X)
        previousSibling: NULL
        nextSibling: NULL
    
      name (value): #text ( t2 )
      parent: name (value): p (X t2  xxx  t1  t5  frob  t6 )
      previousSibling: name (value): b (X)
      nextSibling: name (value): #text ( xxx )
    
      name (value): #text ( xxx )
      parent: name (value): p (X t2  xxx  t1  t5  frob  t6 )
      previousSibling: name (value): #text ( t2 )
      nextSibling: name (value): #text ( t1 )
    
      name (value): #text ( t1 )
      parent: name (value): p (X t2  xxx  t1  t5  frob  t6 )
      previousSibling: name (value): #text ( xxx )
      nextSibling: name (value): #text ( t5 )
    
      name (value): #text ( t5 )
      parent: name (value): p (X t2  xxx  t1  t5  frob  t6 )
      previousSibling: name (value): #text ( t1 )
      nextSibling: name (value): i ( frob )
    
      name (value): i ( frob )
      parent: name (value): p (X t2  xxx  t1  t5  frob  t6 )
      previousSibling: name (value): #text ( t5 )
      nextSibling: name (value): #text ( t6 )
    
        name (value): #text ( frob )
        parent: name (value): i ( frob )
        previousSibling: NULL
        nextSibling: NULL
    
      name (value): #text ( t6 )
      parent: name (value): p (X t2  xxx  t1  t5  frob  t6 )
      previousSibling: name (value): i ( frob )
      nextSibling: NULL
    Error (8)
    Error (8)
    name (value):  ()
    parent: Error (8)
    NULL
    previousSibling: Error (8)
    NULL
    nextSibling: Error (8)
    NULL
    Error (8)
    Error (2)
    
    Append t1 to p:
    
    Error (8)
    Error (8)
    name (value):  ()
    parent: Error (8)
    NULL
    previousSibling: Error (8)
    NULL
    nextSibling: Error (8)
    NULL
    Error (8)
    Error (2)
    
    t1 == ret: TRUE
    
    div:
    
    Error (8)
    Error (8)
    name (value):  ()
    parent: Error (8)
    NULL
    previousSibling: Error (8)
    NULL
    nextSibling: Error (8)
    NULL
    Error (8)
    Error (2)
    
    Insert t4 before t3:
    
    Error (8)
    Error (8)
    name (value):  ()
    parent: Error (8)
    NULL
    previousSibling: Error (8)
    NULL
    nextSibling: Error (8)
    NULL
    Error (8)
    Error (2)
    
    
    p:
    
    Error (8)
    Error (8)
    name (value):  ()
    parent: Error (8)
    NULL
    previousSibling: Error (8)
    NULL
    nextSibling: Error (8)
    NULL
    Error (8)
    Error (2)
    
    Fragment:
    
    Error (8)
    Error (8)
    name (value):  ()
    parent: Error (8)
    NULL
    previousSibling: Error (8)
    NULL
    nextSibling: Error (8)
    NULL
    Error (8)
    Error (2)
    
    Appending fragment to p:
    
    Error (8)
    Error (8)
    name (value):  ()
    parent: Error (8)
    NULL
    previousSibling: Error (8)
    NULL
    nextSibling: Error (8)
    NULL
    Error (8)
    Error (2)
    
    Fragment:
    
    Error (8)
    Error (8)
    name (value):  ()
    parent: Error (8)
    NULL
    previousSibling: Error (8)
    NULL
    nextSibling: Error (8)
    NULL
    
    div:
    
    Error (8)
    Error (8)
    name (value):  ()
    parent: Error (8)
    NULL
    previousSibling: Error (8)
    NULL
    nextSibling: Error (8)
    NULL
    Error (8)
    Error (2)
    
    Inserting fragment before t4
    Error (2)
    
    Error (8)
    Error (8)
    name (value):  ()
    parent: Error (8)
    NULL
    previousSibling: Error (8)
    NULL
    nextSibling: Error (8)
    NULL
    Error (8)
    Error (2)
    
    p:
    
    Error (8)
    Error (8)
    name (value):  ()
    parent: Error (8)
    NULL
    previousSibling: Error (8)
    NULL
    nextSibling: Error (8)
    NULL
    Error (8)
    Error (2)
    Xml/bug28817.php: SUCCEEDED
    Xml/bug32615.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <?xml version="1.0"?>
    <root>
      <first/>
      <newsecond/>
      <newthird/>
      <newfourth/>
    </root>
    <?xml version="1.0"?>
    <root>
      <first/>
      <second/>
      <third/>
      <fourth/>
    </root>
    <?xml version="1.0"?>
    <root>
      <second/>
      <third/>
      <fourth/>
    </root>
    Notice: Undefined property: DOMDocument::$documentElement in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Xml\__input.txt at expression on line 15, column 1.
    
    Error: Call to a member function appendChild() on a non-object in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Xml\__input.txt at expression on line 18, column 1.
    Xml/bug33853.php: SUCCEEDED
    Xml/bug34276.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    bool(false)
    string(0) ""
    'attranew'
    'attrbnew'
    'attrc'
    Notice: Undefined property: DOMDocument::$documentElement in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Xml\__input.txt at expression on line 12, column 1.
    
    Error: Call to a member function hasAttributeNS() on a non-object in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Xml\__input.txt at expression on line 13, column 1.
    Xml/bug35342.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    integer(2)
    TRUE
    FALSE
    Notice: Undefined property: DOMNodeList::$length in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Xml\__input.txt at expression on line 9, column 1.
    NULL
    FALSE
    FALSE
    Xml/bug36756.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    root
    nodeType: 1
    child
    nodeType: 1
    Notice: Undefined property: DOMElement::$nodeName in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Xml\__input.txt at expression on line 8, column 1.
    
    
    Notice: Undefined property: DOMDocument::$firstChild in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Xml\__input.txt at expression on line 9, column 1.
    
    Warning: Cannot convert NULL to DOMNode implicitly in a call to function removeChild() in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Xml\__input.txt at expression on line 9, column 1.
    
    Notice: Undefined property: DOMElement::$nodeType in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Xml\__input.txt at expression on line 10, column 1.
    nodeType: 
    
    Notice: Undefined property: DOMElement::$nodeName in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Xml\__input.txt at expression on line 16, column 1.
    
    
    Notice: Undefined property: DOMDocument::$firstChild in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Xml\__input.txt at expression on line 17, column 1.
    
    Warning: Cannot convert NULL to DOMNode implicitly in a call to function removeChild() in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Xml\__input.txt at expression on line 17, column 1.
    
    Notice: Undefined property: DOMElement::$nodeType in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Xml\__input.txt at expression on line 19, column 1.
    nodeType:
    Xml/bug37277.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <?xml version="1.0" encoding="UTF-8"?>
    <foo/>
    Notice: Undefined property: DOMDocument::$documentElement in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Xml\__input.txt at expression on line 14, column 1.
    
    Warning: __clone method called on non-object in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Xml\__input.txt at expression on line 14, column 1.
    
    Error: Call to a member function cloneNode() on a non-object in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Xml\__input.txt at expression on line 17, column 1.
    Xml/dom002.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    'bar'
    'test1'
    'bar'
    'test2'
    'fubar:bar'
    'test3'
    'fubar:bar'
    'test4'
    'bar'
    'test1'
    'bar'
    'test2'
    'fubar:bar'
    'test3'
    'fubar:bar'
    'test4'
    'fubar:bar'
    'test3'
    'fubar:bar'
    'test4'
    'fubar:bar'
    'test3'
    'fubar:bar'
    'test4'
    Notice: Undefined property: DOMDocument::$documentElement in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Xml\__input.txt at expression on line 24, column 1.
    
    Notice: Undefined property: DOMElement::$nodeName in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Xml\__input.txt at expression on line 17, column 3.
    NULL
    
    Notice: Undefined property: DOMElement::$childNodes in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Xml\__input.txt at expression on line 18, column 3.
    
    Warning: Invalid argument supplied for foreach statement in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Xml\__input.txt at expression on line 16, column 11.
    
    Notice: Undefined property: DOMElement::$nodeName in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Xml\__input.txt at expression on line 17, column 3.
    NULL
    
    Notice: Undefined property: DOMElement::$childNodes in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Xml\__input.txt at expression on line 18, column 3.
    
    Warning: Invalid argument supplied for foreach statement in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Xml\__input.txt at expression on line 16, column 11.
    
    Notice: Undefined property: DOMElement::$nodeName in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Xml\__input.txt at expression on line 17, column 3.
    NULL
    
    Notice: Undefined property: DOMElement::$childNodes in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Xml\__input.txt at expression on line 18, column 3.
    
    Warning: Invalid argument supplied for foreach statement in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Xml\__input.txt at expression on line 16, column 11.
    
    Notice: Undefined property: DOMElement::$nodeName in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Xml\__input.txt at expression on line 17, column 3.
    NULL
    
    Notice: Undefined property: DOMElement::$childNodes in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Xml\__input.txt at expression on line 18, column 3.
    
    Warning: Invalid argument supplied for foreach statement in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Xml\__input.txt at expression on line 16, column 11.
    
    Error: Call to a member function getElementsByTagName() on a non-object in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Xml\__input.txt at expression on line 26, column 1.
    Xml/dom003.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    --- Catch exception with try/catch
    3
    Notice: Undefined property: DOMDocument::$documentElement in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Xml\__input.txt at expression on line 5, column 1.
    --- Catch exception with try/catch
    
    Error: Call to a member function appendChild() on a non-object in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Xml\__input.txt at expression on line 8, column 5.
    Xml/dom006.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <?xml version="1.0"?>
    <books>
     <book>
      <title>The Grapes of Wrath</title>
      <author>John Steinbeck</author>
     </book>
     <book>
      <title>The Pearl</title>
      <author>John Steinbeck</author>
     </book>
    <book><title>PHP de Luxe</title><author>Richard Samar, Christian Stocker</author></book></books>
    Notice: Undefined property: books::$documentElement in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Xml\__input.txt at expression on line 15, column 9.
    
    Error: Call to a member function appendChild() on a non-object in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Xml\__input.txt at expression on line 15, column 9.
    Xml/dom007.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Length: 1
    Key GIF: GIF (image/gif) (-)
    
    Index 0: GIF (image/gif) (-)
    
    NULL
    
    Length: 3
    Key: 0 Name: myimage
    Key: 1 Name: rdf
    Key: 2 Name: test
    
    NULL
    NULL
    Notice: Undefined property: DOMDocument::$doctype in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Xml\__input.txt at expression on line 34, column 1.
    
    Notice: An empty variable used as an object in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Xml\__input.txt at expression on line 37, column 1.
    
    Notice: An empty variable used as an object in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Xml\__input.txt at expression on line 39, column 1.
    Length: 
    
    Warning: Invalid argument supplied for foreach statement in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Xml\__input.txt at expression on line 42, column 10.
    
    
    
    Error: Call to a member function getNamedItem() on a non-object in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Xml\__input.txt at expression on line 51, column 1.
    Xml/dom_set_attr_node.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    4
    Notice: Undefined property: DOMDocument::$documentElement in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Xml\__input.txt at expression on line 15, column 1.
    
    Error: Call to a member function getAttributeNode() on a non-object in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Xml\__input.txt at expression on line 16, column 1.
    Xml/xmlhandler.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test begins
    <br/>
    <br/>test begins
    <br/>empty begins
    <br/>empty ends
    <br/>nocontent begins
    <br/>nocontent ends
    <br/>content begins
    <br/>empty begins
    <br/>empty ends
    <br/>empty begins
    <br/>empty ends
    <br/>content ends
    <br/>empty begins
    <br/>empty ends
    <br/>empty begins
    <br/>empty ends
    <br/>test ends
    <br/>Test ends
    <br/>
    <br/>
    Test begins
    <br/>
    <br/>
    Error: Call to undefined function: 'xml_parser_create' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Xml\__input.txt at expression on line 18, column 3.
    Xml/xslt001.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test 1: Transform To XML String
    <?xml version="1.0" encoding="iso-8859-1"?>
    <html><body>bar
    a1 b1 c1 <br/> 
    a2 c2 <br/> 
    ń3 b3 c3 <br/> 
    </body></html>
    Test 1: Transform To XML StringError while parsing the document
    Xml/xslt002.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test 2: Transform To HTML String
    <html><body>bar
    a1 b1 c1 <br> 
    a2 c2 <br> 
    ń3 b3 c3 <br> 
    </body></html>
    Test 2: Transform To HTML StringError while parsing the document
    Xml/xslt003.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test 3: Using Parameters
    <?xml version="1.0" encoding="iso-8859-1"?>
    <html><body>hello world
    a1 b1 c1 <br/> 
    a2 c2 <br/> 
    ń3 b3 c3 <br/> 
    </body></html>
    Test 3: Using ParametersError while parsing the document
    Xml/xslt004.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test 4: Checking UTF8 Output
    <?xml version="1.0" encoding="utf-8"?>
    <html><body>bar
    a1 b1 c1 <br/> 
    a2 c2 <br/> 
    ├Ą3 b3 c3 <br/> 
    </body></html>
    Test 4: Checking UTF8 OutputError while parsing the document
    Xml/xslt005.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test 5: Checking Indent
    <?xml version="1.0" encoding="iso-8859-1"?>
    <html>
      <body>bar
    a1 b1 c1 <br/> 
    a2 c2 <br/> 
    ń3 b3 c3 <br/> 
    </body>
    </html>
    Test 5: Checking IndentError while parsing the document
    Xml/xslt006.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test 6: Transform To Doc
    <?xml version="1.0" encoding="iso-8859-1"?>
    <html><body>bar
    a1 b1 c1 <br/> 
    a2 c2 <br/> 
    ń3 b3 c3 <br/> 
    </body></html>
    Test 6: Transform To DocError while parsing the document
    Xml/xslt007.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test 7: Transform To Uri
    <?xml version="1.0" encoding="iso-8859-1"?>
    <html><body>bar
    a1 b1 c1 <br/> 
    a2 c2 <br/> 
    ń3 b3 c3 <br/> 
    </body></html>
    Test 7: Transform To UriError while parsing the document
    Xml/xslt010.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test 10: EXSLT Support
      
      
      Test Date : 0001-12-31Z
        year                 : 1
        leap-year            : false
        month-in-year        : 12
        month-name           : December
        month-abbreviation   : Dec
        week-in-year         : 1
        day-in-year          : 365
        day-in-month         : 31
        day-of-week-in-month : 5
        day-in-week          : 2
        day-name             : Monday
        day-abbreviation     : Mon
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : 3000-01-31
        year                 : 3000
        leap-year            : false
        month-in-year        : 1
        month-name           : January
        month-abbreviation   : Jan
        week-in-year         : 5
        day-in-year          : 31
        day-in-month         : 31
        day-of-week-in-month : 5
        day-in-week          : 6
        day-name             : Friday
        day-abbreviation     : Fri
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : 2000-02-29
        year                 : 2000
        leap-year            : true
        month-in-year        : 2
        month-name           : February
        month-abbreviation   : Feb
        week-in-year         : 9
        day-in-year          : 60
        day-in-month         : 29
        day-of-week-in-month : 5
        day-in-week          : 3
        day-name             : Tuesday
        day-abbreviation     : Tue
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : 9990001-12-31Z
        year                 : 9990001
        leap-year            : false
        month-in-year        : 12
        month-name           : December
        month-abbreviation   : Dec
        week-in-year         : 1
        day-in-year          : 365
        day-in-month         : 31
        day-of-week-in-month : 5
        day-in-week          : 2
        day-name             : Monday
        day-abbreviation     : Mon
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : -0004-02-29
        year                 : -4
        leap-year            : true
        month-in-year        : 2
        month-name           : February
        month-abbreviation   : Feb
        week-in-year         : 9
        day-in-year          : 60
        day-in-month         : 29
        day-of-week-in-month : 5
        day-in-week          : 1
        day-name             : Sunday
        day-abbreviation     : Sun
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
    Test 10: EXSLT Support
    Warning: Cannot find a script or an extension object associated with namespace 'http://exslt.org/dates-and-times'. in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Xml\__input.txt at expression on line 14, column 3.
    
    Warning: Illegal string offset '-1' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Phalanger.inc at expression on line 7, column 6.
    Xml/xslt011.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test 11: php:function Support
    
    Warning: XSLTProcessor::transformToXml(): A PHP Object cannot be converted to a XPath-string in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Xml\__input.txt on line 18
    <?xml version="1.0"?>
    foobar - secondArg
    foobar - 
    this is from an external DomDocument
    from the Input Document
    static
    Test 11: php:function Support
    
    Notice: Undefined property: DOMAttr::$value in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Xml\__input.txt at expression on line 22, column 9.
    
    Notice: Undefined property: DOMAttr::$value in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Xml\__input.txt at expression on line 22, column 9.
    
    Notice: Undefined property: DOMDocument::$documentElement in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Xml\__input.txt at expression on line 33, column 11.
    <?xml version="1.0" encoding="utf-8"?> - secondArg
     - 
    from the Input Document
    static
    not a DomNode object
    Xml/xslt012.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test 12: Using Associative Array of Parameters
    <?xml version="1.0" encoding="iso-8859-1"?>
    <html><body>barbar
    test
    a1 b1 c1 <br/> 
    a2 c2 <br/> 
    ń3 b3 c3 <br/> 
    </body></html>
    Test 12: Using Associative Array of ParametersError while parsing the document
    ================================================ FILE: Testing/Tests/TestLogs/TestLog (1797) (DLR GetProperty).htm ================================================ PHP.NET Compiler test log

    PHP.NET Compiler test log

    (90%) 815 succeeded, 95 failed
    Test ResultCompiler error outputExpected test result
    @PHP/classes/array_access_001.php: SUCCEEDED
    @PHP/classes/array_access_002.php: SUCCEEDED
    @PHP/classes/array_access_003.php: SUCCEEDED
    @PHP/classes/array_access_004.php: SUCCEEDED
    @PHP/classes/array_access_005.php: SUCCEEDED
    @PHP/classes/array_access_006.php: SUCCEEDED
    @PHP/classes/array_access_007.php: SUCCEEDED
    @PHP/classes/array_access_008.php: SUCCEEDED
    @PHP/classes/array_access_009.php: SUCCEEDED
    @PHP/classes/array_access_010.php: SUCCEEDED
    @PHP/classes/array_access_011.php: SUCCEEDED
    @PHP/classes/array_access_013.php: SUCCEEDED
    @PHP/classes/assign_op_property_001.php: SUCCEEDED
    @PHP/classes/autoload_001.php: SUCCEEDED
    @PHP/classes/autoload_002.php: SUCCEEDED
    @PHP/classes/autoload_003.php: SUCCEEDED
    @PHP/classes/autoload_005.php: SUCCEEDED
    @PHP/classes/autoload_006.php: SUCCEEDED
    @PHP/classes/bug23951.php: SUCCEEDED
    @PHP/classes/bug24399.php: SUCCEEDED
    @PHP/classes/bug24445.php: SUCCEEDED
    @PHP/classes/bug26737.php: SUCCEEDED
    @PHP/classes/bug27468.php: SUCCEEDED
    @PHP/classes/bug27504.php: SUCCEEDED
    @PHP/classes/class_example.php: SUCCEEDED
    @PHP/classes/class_stdclass.php: SUCCEEDED
    @PHP/classes/clone_001.php: SUCCEEDED
    @PHP/classes/clone_002.php: SUCCEEDED
    @PHP/classes/clone_003.php: SUCCEEDED
    @PHP/classes/clone_004.php: SUCCEEDED
    @PHP/classes/clone_006.php: SUCCEEDED
    @PHP/classes/constants_scope_001.php: SUCCEEDED
    @PHP/classes/ctor_dtor.php: SUCCEEDED
    @PHP/classes/ctor_dtor_inheritance.php: SUCCEEDED
    @PHP/classes/ctor_name_clash.php: SUCCEEDED
    @PHP/classes/dereferencing_001.php: SUCCEEDED
    @PHP/classes/destructor_and_echo.php: SUCCEEDED
    @PHP/classes/destructor_and_references.php: SUCCEEDED
    @PHP/classes/destructor_inheritance.php: SUCCEEDED
    @PHP/classes/destructor_visibility_003.php: SUCCEEDED
    @PHP/classes/factory_001.php: SUCCEEDED
    @PHP/classes/factory_and_singleton_001.php: SUCCEEDED
    @PHP/classes/factory_and_singleton_002.php: SUCCEEDED
    @PHP/classes/final.php: SUCCEEDED
    @PHP/classes/incdec_property_001.php: SUCCEEDED
    @PHP/classes/incdec_property_002.php: SUCCEEDED
    @PHP/classes/incdec_property_003.php: SUCCEEDED
    @PHP/classes/incdec_property_004.php: SUCCEEDED
    @PHP/classes/inheritance.php: SUCCEEDED
    @PHP/classes/inheritance_002.php: SUCCEEDED
    @PHP/classes/interfaces_001.php: SUCCEEDED
    @PHP/classes/interface_construct.php: SUCCEEDED
    @PHP/classes/interface_doubled.php: SUCCEEDED
    @PHP/classes/interface_implemented.php: SUCCEEDED
    @PHP/classes/iterators_001.php: SUCCEEDED
    @PHP/classes/iterators_002.php: SUCCEEDED
    @PHP/classes/iterators_003.php: SUCCEEDED
    @PHP/classes/iterators_004.php: SUCCEEDED
    @PHP/classes/iterators_006.php: SUCCEEDED
    @PHP/classes/iterators_007.php: SUCCEEDED
    @PHP/classes/object_reference_001.php: SUCCEEDED
    @PHP/classes/private_001.php: SUCCEEDED
    @PHP/classes/private_002.php: SUCCEEDED
    @PHP/classes/private_003.php: SUCCEEDED
    @PHP/classes/private_003b.php: SUCCEEDED
    @PHP/classes/private_004.php: SUCCEEDED
    @PHP/classes/private_004b.php: SUCCEEDED
    @PHP/classes/private_005.php: SUCCEEDED
    @PHP/classes/private_005b.php: SUCCEEDED
    @PHP/classes/private_006.php: SUCCEEDED
    @PHP/classes/private_006b.php: SUCCEEDED
    @PHP/classes/private_007.php: SUCCEEDED
    @PHP/classes/private_007b.php: SUCCEEDED
    @PHP/classes/private_members.php: SUCCEEDED
    @PHP/classes/private_redeclare.php: SUCCEEDED
    @PHP/classes/protected_001.php: SUCCEEDED
    @PHP/classes/protected_001b.php: SUCCEEDED
    @PHP/classes/protected_002.php: SUCCEEDED
    @PHP/classes/serialize_001.php: SUCCEEDED
    @PHP/classes/singleton_001.php: SUCCEEDED
    @PHP/classes/static_properties_001.php: SUCCEEDED
    @PHP/classes/type_hinting_001.php: SUCCEEDED
    @PHP/classes/type_hinting_003.php: SUCCEEDED
    @PHP/classes/visibility_000c.php: SUCCEEDED
    @PHP/classes/visibility_001c.php: SUCCEEDED
    @PHP/classes/visibility_002c.php: SUCCEEDED
    @PHP/classes/visibility_003a.php: SUCCEEDED
    @PHP/classes/visibility_003c.php: SUCCEEDED
    @PHP/classes/visibility_004a.php: SUCCEEDED
    @PHP/classes/visibility_004b.php: SUCCEEDED
    @PHP/classes/visibility_004c.php: SUCCEEDED
    @PHP/classes/visibility_005.php: SUCCEEDED
    @PHP/classes/__call_001.php: SUCCEEDED
    @PHP/classes/__set_data_corrupt.php: SUCCEEDED
    @PHP/classes/__set__get_001.php: SUCCEEDED
    @PHP/classes/__set__get_004.php: SUCCEEDED
    @PHP/classes/__set__get_005.php: SUCCEEDED
    @PHP/date/bug17988.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2002-06-25 12:18:48
    2002-06-25 14:18:48
    2002-06-25 13:18:48
    2002-06-25 12:18:48
    2002-06-25 18:18:48
    2002-06-25 14:18:48
    2002-06-25 14:18:48
    2002-06-25 18:18:48
    2002-06-25 10:18:48
    2002-06-25 17:18:48
    2002-06-25 11:18:48
    2002-06-25 17:48:48
    2002-06-25 10:48:48
    2002-06-25 14:18:48
    2002-06-25 14:18:48
    2002-06-25 13:18:48
    2002-06-25 12:18:48
    2002-06-25 18:18:48
    2002-06-25 14:18:48
    2002-06-25 14:18:48
    2002-06-25 18:18:48
    2002-06-25 10:18:48
    2002-06-25 17:18:48
    2002-06-25 11:18:48
    2002-06-25 17:48:48
    2002-06-25 10:48:48
    @PHP/date/bug26317.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2003-11-19 17:20:42
    2003-11-19 17:20:42
    2003-11-19 17:20:42
    2003-11-19 16:20:42
    2003-11-19 16:20:42
    2003-11-19 16:20:42
    @PHP/date/bug26320.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2003-11-19 12:30:42
    2003-11-19 13:30:42
    2003-11-19 12:30:42
    2003-11-19 12:30:42
    @PHP/date/bug28088.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    The following line rightly shows the correct date time:
    04/04/04 2145
    But the following line fails to show the correct date time:
    04/03/04 2245
    The following line rightly shows the correct date time:
    04/04/04 2345
    But the following line fails to show the correct date time:
    04/04/04 0045
    @PHP/date/bug28599.php: SUCCEEDED
    @PHP/date/bug29150.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2005-06-19 22:00:00
    2005-06-20 00:00:00
    @PHP/date/bug29585.php: SUCCEEDED
    @PHP/date/bug29595.php: SUCCEEDED
    @PHP/date/bug33056.php: SUCCEEDED
    @PHP/date/bug33452.php: SUCCEEDED
    @PHP/date/bug33562.php: SUCCEEDED
    @PHP/date/bug33563.php: SUCCEEDED
    @PHP/date/bug33578.php: SUCCEEDED
    @PHP/date/bug33869.php: SUCCEEDED
    @PHP/date/bug34676.php: SUCCEEDED
    @PHP/date/bug34771.php: SUCCEEDED
    @PHP/date/bug35143.php: SUCCEEDED
    @PHP/date/bug35414.php: SUCCEEDED
    @PHP/date/bug35422.php: SUCCEEDED
    @PHP/date/bug35425.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    integer(42)
    integer(1)
    integer(1)
    integer(1)
    integer(1)
    integer(0)
    integer(0)
    integer(1)
    integer(1)
    integer(31)
    integer(1104537661)
    integer(6)
    integer(53)
    integer(5)
    integer(2005)
    integer(0)
    integer(3600)
    integer(292)
    integer(1)
    integer(1)
    integer(1)
    integer(1)
    integer(0)
    integer(0)
    integer(1)
    integer(1)
    integer(31)
    integer(1104559261)
    integer(6)
    integer(53)
    integer(5)
    integer(2005)
    integer(0)
    integer(-18000)
    @PHP/date/bug35456.php: SUCCEEDED
    @PHP/date/bug35624.php: SUCCEEDED
    @PHP/date/bug35630.php: SUCCEEDED
    @PHP/date/bug35699.php: SUCCEEDED
    @PHP/date/bug35705.php: SUCCEEDED
    @PHP/date/bug35885.php: SUCCEEDED
    @PHP/date/bug35887.php: SUCCEEDED
    @PHP/date/date.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    c: 2003-01-23T13:20:59+01:00
    r: Thu, 23 Jan 2003 13:20:59 +0100
    c: 2003-01-23T13:20:59+01:00
    r: Thu, 23 Jan 2003 13:20:59 +0100
    c: 2003-01-23T12:20:59+00:00
    r: Thu, 23 Jan 2003 12:20:59 +0000
    c: 2003-01-23T13:20:59+01:00
    r: Thu, 23 Jan 2003 13:20:59 +0100
    @PHP/date/date_create-1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\date\__input.txt on line 28
    SKIP
    @PHP/date/date_create-2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\date\__input.txt on line 6
    SKIP
    @PHP/date/date_default_timezone_get-3.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Europe/Prague
    America/Chicago
    Europe/Rome
    America/Chicago
    @PHP/date/date_modify-1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\date\__input.txt on line 6
    SKIP
    @PHP/date/date_modify-2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\date\__input.txt on line 6
    SKIP
    @PHP/date/default-timezone-1.php: SUCCEEDED
    @PHP/date/default-timezone-2.php: SUCCEEDED
    @PHP/date/format-negative-timestamp.php: SUCCEEDED
    @PHP/date/strtotime.php: SUCCEEDED
    @PHP/date/timezone-configuration.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    1119125744
    1119125744
    1119125744
    1119125744
    1119129344
    1119125744
    @PHP/doc_examples/test001.php: SUCCEEDED
    @PHP/doc_examples/test002.php: SUCCEEDED
    @PHP/doc_examples/test003.php: SUCCEEDED
    @PHP/doc_examples/test004.php: SUCCEEDED
    @PHP/doc_examples/test005.php: SUCCEEDED
    @PHP/doc_examples/test006.php: SUCCEEDED
    @PHP/doc_examples/test007.php: SUCCEEDED
    @PHP/doc_examples/test008.php: SUCCEEDED
    @PHP/doc_examples/test009.php: SUCCEEDED
    @PHP/doc_examples/test010.php: SUCCEEDED
    @PHP/doc_examples/test011.php: SUCCEEDED
    @PHP/doc_examples/test013.php: SUCCEEDED
    @PHP/doc_examples/test014.php: SUCCEEDED
    @PHP/doc_examples/test015.php: SUCCEEDED
    @PHP/doc_examples/test016.php: SUCCEEDED
    @PHP/doc_examples/test017.php: SUCCEEDED
    @PHP/doc_examples/test018.php: SUCCEEDED
    @PHP/doc_examples/test019.php: SUCCEEDED
    @PHP/doc_examples/test020.php: SUCCEEDED
    @PHP/doc_examples/test021.php: SUCCEEDED
    @PHP/doc_examples/test022.php: SUCCEEDED
    @PHP/doc_examples/test023.php: SUCCEEDED
    @PHP/doc_examples/test024.php: SUCCEEDED
    @PHP/doc_examples/test025.php: SUCCEEDED
    @PHP/doc_examples/test026.php: SUCCEEDED
    @PHP/doc_examples/test027.php: SUCCEEDED
    @PHP/doc_examples/test028.php: SUCCEEDED
    @PHP/doc_examples/test029.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ´┐Żauky
    �auky
    @PHP/doc_examples/test030.php: SUCCEEDED
    @PHP/doc_examples/test031.php: SUCCEEDED
    @PHP/doc_examples/test032.php: SUCCEEDED
    @PHP/doc_examples/test033.php: SUCCEEDED
    @PHP/doc_examples/test034.php: SUCCEEDED
    @PHP/doc_examples/test035.php: SUCCEEDED
    @PHP/doc_examples/test036.php: SUCCEEDED
    @PHP/doc_examples/test037.php: SUCCEEDED
    @PHP/doc_examples/test038.php: SUCCEEDED
    @PHP/doc_examples/test039.php: SUCCEEDED
    @PHP/doc_examples/test040.php: SUCCEEDED
    @PHP/doc_examples/test041.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    call_user_func():
    hello world!
    Strict Standards: call_user_func(): Non-static method MyClass::myCallbackMethod() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\doc_examples\__input.txt at expression on line 17, column 1.
    Hello World!Hello World!
    @PHP/doc_examples/test042.php: SUCCEEDED
    @PHP/doc_examples/test043.php: SUCCEEDED
    @PHP/doc_examples/test044.php: SUCCEEDED
    @PHP/doc_examples/test045.php: SUCCEEDED
    @PHP/doc_examples/test046.php: SUCCEEDED
    @PHP/doc_examples/test047.php: SUCCEEDED
    @PHP/doc_examples/test048.php: SUCCEEDED
    @PHP/doc_examples/test049.php: SUCCEEDED
    @PHP/doc_examples/test050.php: SUCCEEDED
    @PHP/doc_examples/test051.php: SUCCEEDED
    @PHP/doc_examples/test052.php: SUCCEEDED
    @PHP/doc_examples/test053.php: SUCCEEDED
    @PHP/doc_examples/test054.php: SUCCEEDED
    @PHP/doc_examples/test055.php: SUCCEEDED
    @PHP/doc_examples/test056.php: SUCCEEDED
    @PHP/doc_examples/test057.php: SUCCEEDED
    @PHP/doc_examples/test058.php: SUCCEEDED
    @PHP/doc_examples/test059.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    Deprecated: Assigning the return value of new by reference is deprecated in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\doc_examples\__input.txt on line 4
    NULL
    object(stdClass)#1 (0) {
    }
    NULL
    object(stdClass)(0) {
    }
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\doc_examples\__input.txt(4,5): warning PHP0181: Assigning the return value of new by reference is deprecated
    
    @PHP/doc_examples/test060.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    Deprecated: Assigning the return value of new by reference is deprecated in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\doc_examples\__input.txt on line 9
    Static object: NULL
    Static object: NULL
    
    Static object: NULL
    Static object: object(stdClass)#3 (1) {
      ["property"]=>
      int(1)
    }
    Static object: NULL
    Static object: NULL
    
    Static object: NULL
    Static object: object(stdClass)(1) {
      ["property"]=>
      int(1)
    }
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\doc_examples\__input.txt(9,9): warning PHP0181: Assigning the return value of new by reference is deprecated
    
    @PHP/doc_examples/test061.php: SUCCEEDED
    @PHP/doc_examples/test062.php: SUCCEEDED
    @PHP/doc_examples/test063.php: SUCCEEDED
    @PHP/doc_examples/test064.php: SUCCEEDED
    @PHP/doc_examples/test065.php: SUCCEEDED
    @PHP/doc_examples/test066.php: SUCCEEDED
    @PHP/doc_examples/test067.php: SUCCEEDED
    @PHP/doc_examples/test068.php: SUCCEEDED
    @PHP/doc_examples/test069.php: SUCCEEDED
    @PHP/doc_examples/test070.php: SUCCEEDED
    @PHP/doc_examples/test071.php: SUCCEEDED
    @PHP/doc_examples/test072.php: SUCCEEDED
    @PHP/doc_examples/test073.php: SUCCEEDED
    @PHP/doc_examples/test074.php: SUCCEEDED
    @PHP/doc_examples/test075.php: SUCCEEDED
    @PHP/doc_examples/test076.php: SUCCEEDED
    @PHP/doc_examples/test077.php: SUCCEEDED
    @PHP/doc_examples/test078.php: SUCCEEDED
    @PHP/doc_examples/test079.php: SUCCEEDED
    @PHP/doc_examples/test080.php: SUCCEEDED
    @PHP/doc_examples/test081.php: SUCCEEDED
    @PHP/doc_examples/test082.php: SUCCEEDED
    @PHP/doc_examples/test083.php: SUCCEEDED
    @PHP/doc_examples/test084.php: SUCCEEDED
    @PHP/doc_examples/test085.php: SUCCEEDED
    @PHP/doc_examples/test086.php: SUCCEEDED
    @PHP/doc_examples/test087.php: SUCCEEDED
    @PHP/doc_examples/test088.php: SUCCEEDED
    @PHP/doc_examples/test089.php: SUCCEEDED
    @PHP/doc_examples/test090.php: SUCCEEDED
    @PHP/doc_examples/test091.php: SUCCEEDED
    @PHP/doc_examples/test092.php: SUCCEEDED
    @PHP/doc_examples/test093.php: SUCCEEDED
    @PHP/doc_examples/test094.php: SUCCEEDED
    @PHP/doc_examples/test095.php: SUCCEEDED
    @PHP/doc_examples/test096.php: SUCCEEDED
    @PHP/doc_examples/test097.php: SUCCEEDED
    @PHP/doc_examples/test098.php: SUCCEEDED
    @PHP/doc_examples/test099.php: SUCCEEDED
    @PHP/doc_examples/test100.php: SUCCEEDED
    @PHP/doc_examples/test102.php: SUCCEEDED
    @PHP/doc_examples/test103.php: SUCCEEDED
    @PHP/doc_examples/test104.php: SUCCEEDED
    @PHP/doc_examples/test105.php: SUCCEEDED
    @PHP/doc_examples/test107.php: SUCCEEDED
    @PHP/doc_examples/test108.php: SUCCEEDED
    @PHP/doc_examples/test109.php: SUCCEEDED
    @PHP/doc_examples/test110.php: SUCCEEDED
    @PHP/doc_examples/test111.php: SUCCEEDED
    @PHP/doc_examples/test112.php: SUCCEEDED
    @PHP/doc_examples/test113.php: SUCCEEDED
    @PHP/doc_examples/test114.php: SUCCEEDED
    @PHP/doc_examples/test115.php: SUCCEEDED
    @PHP/doc_examples/test116.php: SUCCEEDED
    @PHP/doc_examples/test117.php: SUCCEEDED
    @PHP/doc_examples/test118.php: SUCCEEDED
    @PHP/doc_examples/test119.php: SUCCEEDED
    @PHP/doc_examples/test120.php: SUCCEEDED
    @PHP/doc_examples/test121.php: SUCCEEDED
    @PHP/doc_examples/test122.php: SUCCEEDED
    @PHP/doc_examples/test123.php: SUCCEEDED
    @PHP/doc_examples/test124.php: SUCCEEDED
    @PHP/doc_examples/test125.php: SUCCEEDED
    @PHP/doc_examples/test126.php: SUCCEEDED
    @PHP/doc_examples/test127.php: SUCCEEDED
    @PHP/doc_examples/test128.php: SUCCEEDED
    @PHP/doc_examples/test129.php: SUCCEEDED
    @PHP/doc_examples/test130.php: SUCCEEDED
    @PHP/doc_examples/test131.php: SUCCEEDED
    @PHP/doc_examples/test132.php: SUCCEEDED
    @PHP/doc_examples/test133.php: SUCCEEDED
    @PHP/doc_examples/test134.php: SUCCEEDED
    @PHP/doc_examples/test136.php: SUCCEEDED
    @PHP/doc_examples/test137.php: SUCCEEDED
    @PHP/doc_examples/test138.php: SUCCEEDED
    @PHP/doc_examples/test139.php: SUCCEEDED
    @PHP/doc_examples/test148.php: SUCCEEDED
    @PHP/doc_examples/test149.php: SUCCEEDED
    @PHP/doc_examples/test150.php: SUCCEEDED
    @PHP/doc_examples/test151.php: SUCCEEDED
    @PHP/doc_examples/test152.php: SUCCEEDED
    @PHP/doc_examples/test153.php: SUCCEEDED
    @PHP/doc_examples/test154.php: SUCCEEDED
    @PHP/doc_examples/test155.php: SUCCEEDED
    @PHP/doc_examples/test156.php: SUCCEEDED
    @PHP/doc_examples/test158.php: SUCCEEDED
    @PHP/lang/001.php: SUCCEEDED
    @PHP/lang/002.php: SUCCEEDED
    @PHP/lang/003.php: SUCCEEDED
    @PHP/lang/004.php: SUCCEEDED
    @PHP/lang/005.php: SUCCEEDED
    @PHP/lang/006.php: SUCCEEDED
    @PHP/lang/007.php: SUCCEEDED
    @PHP/lang/008.php: SUCCEEDED
    @PHP/lang/009.php: SUCCEEDED
    @PHP/lang/010.php: SUCCEEDED
    @PHP/lang/011.php: SUCCEEDED
    @PHP/lang/012.php: SUCCEEDED
    @PHP/lang/013.php: SUCCEEDED
    @PHP/lang/014.php: SUCCEEDED
    @PHP/lang/015.php: SUCCEEDED
    @PHP/lang/016.php: SUCCEEDED
    @PHP/lang/017.php: SUCCEEDED
    @PHP/lang/018.php: SUCCEEDED
    @PHP/lang/019.php: SUCCEEDED
    @PHP/lang/020.php: SUCCEEDED
    @PHP/lang/021.php: SUCCEEDED
    @PHP/lang/022.php: SUCCEEDED
    @PHP/lang/023.php: SUCCEEDED
    @PHP/lang/024.php: SUCCEEDED
    @PHP/lang/025.php: SUCCEEDED
    @PHP/lang/026.php: SUCCEEDED
    @PHP/lang/027.php: SUCCEEDED
    @PHP/lang/028.php: SUCCEEDED
    @PHP/lang/030.php: SUCCEEDED
    @PHP/lang/032.php: SUCCEEDED
    @PHP/lang/036.php: SUCCEEDED
    @PHP/lang/037.php: SUCCEEDED
    @PHP/lang/038.php: SUCCEEDED
    @PHP/lang/039.php: SUCCEEDED
    @PHP/lang/040.php: SUCCEEDED
    @PHP/lang/bison1.php: SUCCEEDED
    @PHP/lang/bug17115.php: SUCCEEDED
    @PHP/lang/bug18872.php: SUCCEEDED
    @PHP/lang/bug19943.php: SUCCEEDED
    @PHP/lang/bug20175.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    Deprecated: Assigning the return value of new by reference is deprecated in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\lang\__input.txt on line 110
    foo_static()
    foo_global()
    foo:1
    foo_static()
    foo:1
    bar_static()
    bar_global()
    bar:1
    bar_static()
    bar:1
    wow_static()
    wow_global()
    wow:1
    wow_static()
    wow:1
    oop_test()
    oop_static()
    oop_class()
    oop:1
    oop_static()
    oop:1
    oop_test()
    oop_static()
    oop:1
    foo_static()
    foo_global()
    foo:1
    foo_static()
    foo:1
    bar_static()
    bar_global()
    bar:1
    bar_static()
    bar_global()
    bar:2
    wow_static()
    wow_global()
    wow:1
    wow_static()
    wow:1
    oop_test()
    oop_static()
    oop_class()
    oop:1
    oop_static()
    oop:1
    oop_test()
    oop_static()
    oop:1
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\lang\__input.txt(110,4): warning PHP0181: Assigning the return value of new by reference is deprecated
    
    @PHP/lang/bug21094.php: SUCCEEDED
    @PHP/lang/bug21600.php: SUCCEEDED
    @PHP/lang/bug21669.php: SUCCEEDED
    @PHP/lang/bug21849.php: SUCCEEDED
    @PHP/lang/bug21961.php: SUCCEEDED
    @PHP/lang/bug22231.php: SUCCEEDED
    @PHP/lang/bug22367.php: SUCCEEDED
    @PHP/lang/bug22510.php: SUCCEEDED
    @PHP/lang/bug22592.php: SUCCEEDED
    @PHP/lang/bug22690.php: SUCCEEDED
    @PHP/lang/bug23279.php: SUCCEEDED
    @PHP/lang/bug23384.php: SUCCEEDED
    @PHP/lang/bug23489.php: SUCCEEDED
    @PHP/lang/bug23524.php: SUCCEEDED
    @PHP/lang/bug23922.php: SUCCEEDED
    @PHP/lang/bug24054.php: SUCCEEDED
    @PHP/lang/bug24396.php: SUCCEEDED
    @PHP/lang/bug24403.php: SUCCEEDED
    @PHP/lang/bug24436.php: SUCCEEDED
    @PHP/lang/bug24499.php: SUCCEEDED
    @PHP/lang/bug24640.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    double(1700000000000000089258092433847514422797596587883870563356951996370064178581143932836831337636761368874297554515902592900802289500112731978596146714137401870842258241575178866354311397451139753100927220499450359906637902366244989496126909662726242240784739940994096632824796638102733857671280980918272.0000000000)
    1.7E+300
    
    ------
    double(0.0000000000)
    1.7E-300
    
    ------
    double(17000000000000001584208052028780237480128823455860622330108867175329927830437888.0000000000)
    1.7E+79
    
    ------
    double(0.0000000000)
    1.7E-79
    
    ------
    double(169999999999999996096025832433329868941658043870400163508258284150340918121070592.0000000000)
    1.7E+80
    
    ------
    double(0.0000000000)
    1.7E-80
    
    ------
    double(1700000000000000013616404158611892038375594280539217794530130541777964808366194688.0000000000)
    1.7E+81
    
    ------
    double(0.0000000000)
    1.7E-81
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    1.6999810742106E-319
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    1.7000798873397E-320
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    1.6995858216939E-321
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    0
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    0
    
    ------
    double(1700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+300
    
    ------
    double(0.0000000000)
    1.70000000000003E-300
    
    ------
    double(17000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+79
    
    ------
    double(0.0000000000)
    1.70000000000001E-79
    
    ------
    double(170000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+80
    
    ------
    double(0.0000000000)
    1.70000000000001E-80
    
    ------
    double(1700000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+81
    
    ------
    double(0.0000000000)
    1.70000000000001E-81
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    1.69998107421056E-319
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    1.70007988733973E-320
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    1.69464516523548E-321
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    0
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    0
    
    ------
    @PHP/lang/bug24652.php: SUCCEEDED
    @PHP/lang/bug24658.php: SUCCEEDED
    @PHP/lang/bug24783.php: SUCCEEDED
    @PHP/lang/bug24926.php: SUCCEEDED
    @PHP/lang/bug25547.php: SUCCEEDED
    @PHP/lang/bug25652.php: SUCCEEDED
    @PHP/lang/bug25922.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Undefined index here: 'error'
    Undefined index here: ''
    @PHP/lang/bug26182.php: SUCCEEDED
    @PHP/lang/bug26696.php: SUCCEEDED
    @PHP/lang/bug26866.php: SUCCEEDED
    @PHP/lang/bug26869.php: SUCCEEDED
    @PHP/lang/bug27354.php: SUCCEEDED
    @PHP/lang/bug27439.php: SUCCEEDED
    @PHP/lang/bug27535.php: SUCCEEDED
    @PHP/lang/bug28213.php: SUCCEEDED
    @PHP/lang/bug28800.php: SUCCEEDED
    @PHP/lang/bug29566.php: SUCCEEDED
    @PHP/lang/bug29893.php: SUCCEEDED
    @PHP/lang/bug29944.php: SUCCEEDED
    @PHP/lang/bug30638.php: SUCCEEDED
    @PHP/lang/bug30726.php: SUCCEEDED
    @PHP/lang/bug30862.php: SUCCEEDED
    @PHP/lang/bug32924.php: SUCCEEDED
    @PHP/lang/bug35382.php: SUCCEEDED
    @PHP/lang/bug7515.php: SUCCEEDED
    @PHP/lang/each_binary_safety.php: SUCCEEDED
    @PHP/lang/error_2_exception_001.php: SUCCEEDED
    @PHP/lang/foreach_with_object_001.php: SUCCEEDED
    @PHP/lang/foreach_with_references_001.php: SUCCEEDED
    @PHP/lang/type_hints_001.php: SUCCEEDED
    @PHP/standard/array/001.php: SUCCEEDED
    @PHP/standard/array/003.php: SUCCEEDED
    @PHP/standard/array/004.php: SUCCEEDED
    @PHP/standard/array/005.php: SUCCEEDED
    @PHP/standard/array/008.php: SUCCEEDED
    @PHP/standard/array/array_change_key_case.php: SUCCEEDED
    @PHP/standard/array/array_chunk.php: SUCCEEDED
    @PHP/standard/array/array_count_values.php: SUCCEEDED
    @PHP/standard/array/array_diff_1.php: SUCCEEDED
    @PHP/standard/array/array_diff_key.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ------ Test 1 --------
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 2 --------
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 3 --------
    array(6) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [2]=>
      int(4)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [2]=>
      int(4)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 4 --------
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 5 --------
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 6 --------
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 7 --------
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    ------ Test 8 --------
    array(6) {
      [0]=>
      int(0)
      [7]=>
      int(14)
      [2]=>
      int(4)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [0]=>
      int(0)
      [7]=>
      int(14)
      [2]=>
      int(4)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 9 --------
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    ------ Test 1 --------
    array(4) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(4) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 2 --------
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 3 --------
    array(6) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [2]=>
      &int(4)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [2]=>
      &int(4)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 4 --------
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 5 --------
    array(4) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(4) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 6 --------
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 7 --------
    array(3) {
      [7]=>
      &int(14)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
    }
    array(3) {
      [7]=>
      &int(14)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
    }
    ------ Test 8 --------
    array(6) {
      [0]=>
      &int(0)
      [7]=>
      &int(14)
      [2]=>
      &int(4)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [0]=>
      &int(0)
      [7]=>
      &int(14)
      [2]=>
      &int(4)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 9 --------
    array(3) {
      [7]=>
      &int(14)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
    }
    array(3) {
      [7]=>
      &int(14)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
    }
    @PHP/standard/array/array_intersect_key.php: SUCCEEDED
    @PHP/standard/array/array_sum.php: SUCCEEDED
    @PHP/standard/array/array_walk_recursive.php: SUCCEEDED
    @PHP/standard/array/bug12776.php: SUCCEEDED
    @PHP/standard/array/bug14580.php: SUCCEEDED
    @PHP/standard/array/bug20381.php: SUCCEEDED
    @PHP/standard/array/bug20865.php: SUCCEEDED
    @PHP/standard/array/bug21182.php: SUCCEEDED
    @PHP/standard/array/bug21918.php: SUCCEEDED
    @PHP/standard/array/bug21998.php: SUCCEEDED
    @PHP/standard/array/bug22088.php: SUCCEEDED
    @PHP/standard/array/bug22463.php: SUCCEEDED
    @PHP/standard/array/bug23581.php: SUCCEEDED
    @PHP/standard/array/bug23788.php: SUCCEEDED
    @PHP/standard/array/bug24198.php: SUCCEEDED
    @PHP/standard/array/bug24220.php: SUCCEEDED
    @PHP/standard/array/bug24766.php: SUCCEEDED
    @PHP/standard/array/bug24897.php: SUCCEEDED
    @PHP/standard/array/bug24980.php: SUCCEEDED
    @PHP/standard/array/bug25359.php: SUCCEEDED
    @PHP/standard/array/bug25708.php: SUCCEEDED
    @PHP/standard/array/bug25758.php: SUCCEEDED
    @PHP/standard/array/bug26458.php: SUCCEEDED
    @PHP/standard/array/bug28974.php: SUCCEEDED
    @PHP/standard/array/bug29493.php: SUCCEEDED
    @PHP/standard/array/bug30266.php: SUCCEEDED
    @PHP/standard/array/bug30833.php: SUCCEEDED
    @PHP/standard/array/bug31158.php: SUCCEEDED
    @PHP/standard/array/bug31213.php: SUCCEEDED
    @PHP/standard/array/bug32021.php: SUCCEEDED
    @PHP/standard/array/bug33382.php: SUCCEEDED
    @PHP/standard/array/bug33989.php: SUCCEEDED
    @PHP/standard/array/bug34227.php: SUCCEEDED
    @PHP/standard/array/bug34982.php: SUCCEEDED
    @PHP/standard/array/bug35014.php: SUCCEEDED
    @PHP/standard/array/bug35022.php: SUCCEEDED
    @PHP/standard/array/bug35821.php: SUCCEEDED
    @PHP/standard/array/count_recursive.php: SUCCEEDED
    @PHP/standard/array/locale_sort.php: SUCCEEDED
    @PHP/standard/array/range.php: SUCCEEDED
    @PHP/standard/assert/assert.php: SUCCEEDED
    @PHP/standard/general_functions/001.php: SUCCEEDED
    @PHP/standard/general_functions/002.php: SUCCEEDED
    @PHP/standard/general_functions/003.php: SUCCEEDED
    @PHP/standard/general_functions/004.php: SUCCEEDED
    @PHP/standard/general_functions/005.php: SUCCEEDED
    @PHP/standard/general_functions/006.php: SUCCEEDED
    @PHP/standard/general_functions/007.php: SUCCEEDED
    @PHP/standard/general_functions/009.php: SUCCEEDED
    @PHP/standard/general_functions/bug25038.php: SUCCEEDED
    @PHP/standard/general_functions/bug27678.php: SUCCEEDED
    @PHP/standard/general_functions/bug29038.php: SUCCEEDED
    @PHP/standard/general_functions/bug31190.php: SUCCEEDED
    @PHP/standard/general_functions/bug32647.php: SUCCEEDED
    @PHP/standard/general_functions/bug35229.php: SUCCEEDED
    @PHP/standard/general_functions/is_resource.php: SUCCEEDED
    @PHP/standard/math/abs.php: SUCCEEDED
    @PHP/standard/math/bug24142.php: SUCCEEDED
    @PHP/standard/math/bug25694.php: SUCCEEDED
    @PHP/standard/math/bug27646.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    double(INF-INF)
    'd:-INF;'
    double(INF-INF)
    double(INF-INF)
    'd:INF;'
    double(INF-INF)
    double(NaNInfini)
    'd:NAN;'
    double(NaNInfini)
    double(-Infinity)
    'd:-INF;'
    double(-Infinity)
    double(Infinity)
    'd:INF;'
    double(Infinity)
    double(NaN)
    'd:NAN;'
    double(NaN)
    @PHP/standard/math/bug30069.php: SUCCEEDED
    @PHP/standard/math/bug30695.php: SUCCEEDED
    @PHP/standard/math/floorceil.php: SUCCEEDED
    @PHP/standard/math/hexdec.php: SUCCEEDED
    @PHP/standard/math/log.php: SUCCEEDED
    @PHP/standard/math/pow.php: SUCCEEDED
    @PHP/standard/math/round.php: SUCCEEDED
    @PHP/standard/reg/001.php: SUCCEEDED
    @PHP/standard/reg/002.php: SUCCEEDED
    @PHP/standard/reg/003.php: SUCCEEDED
    @PHP/standard/reg/004.php: SUCCEEDED
    @PHP/standard/reg/005.php: SUCCEEDED
    @PHP/standard/reg/006.php: SUCCEEDED
    @PHP/standard/reg/007.php: SUCCEEDED
    @PHP/standard/reg/008.php: SUCCEEDED
    @PHP/standard/reg/009.php: SUCCEEDED
    @PHP/standard/reg/010.php: SUCCEEDED
    @PHP/standard/reg/011.php: SUCCEEDED
    @PHP/standard/reg/012.php: SUCCEEDED
    @PHP/standard/reg/013.php: SUCCEEDED
    @PHP/standard/reg/014.php: SUCCEEDED
    @PHP/standard/reg/015.php: SUCCEEDED
    @PHP/standard/reg/016.php: SUCCEEDED
    @PHP/standard/serialize/001.php: SUCCEEDED
    @PHP/standard/serialize/002.php: SUCCEEDED
    @PHP/standard/serialize/003.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    d:100;
    double(100.0000000000)
    
    d:51999999999999996980101120;
    double(51999999999999996980101120.0000000000)
    
    d:8.9999999999999995265585574287341141808127531476202420890331268310546875E-9;
    double(0.0000000090)
    d:100;
    double(100.0000000000)
    
    d:5.2000000000000006E+25;
    double(52000000000000000000000000.0000000000)
    
    d:9.0000000000000045E-09;
    double(0.0000000090)
    @PHP/standard/serialize/004.php: SUCCEEDED
    @PHP/standard/serialize/005.php: SUCCEEDED
    @PHP/standard/serialize/006.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    'O:3:"´┐Ż":1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    object
    {
      '´┐Ż' => '´┐Ż'
    }
    'a:1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    array
    {
      '´┐Ż' => '´┐Ż'
    }
    'O:3:"´┐Ż":1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    object
    {
      'ďż˝' => '´┐Ż'
    }
    'a:1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    array
    {
      'ďż˝' => '´┐Ż'
    }
    @PHP/standard/serialize/bug14293.php: SUCCEEDED
    @PHP/standard/serialize/bug21957.php: SUCCEEDED
    @PHP/standard/serialize/bug23298.php: SUCCEEDED
    @PHP/standard/serialize/bug24063.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0.1 0.1
    0.01 0.01
    0.001 0.001
    0.0001 0.0001
    1.0E-5 1.0E-5
    1.0E-6 1.0E-6
    1.0E-7 1.0E-7
    1.0E-8 1.0E-8
    1.0E-9 1.0E-9
    0.1 0.1
    0.01 0.01
    0.001 0.001
    0.0001 0.0001
    1E-05 1E-05
    1E-06 1E-06
    1E-07 1E-07
    1E-08 1E-08
    1E-09 1E-09
    @PHP/standard/serialize/bug25378.php: SUCCEEDED
    @PHP/standard/serialize/bug26762.php: SUCCEEDED
    @PHP/standard/serialize/bug27469.php: SUCCEEDED
    @PHP/standard/serialize/bug28325.php: SUCCEEDED
    @PHP/standard/serialize/bug30234.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    FALSE
    FALSE
    __autoload(Autoload_Implements)
    object [invalid]
    FALSE
    FALSE
    FALSE
    FALSE
    TRUE
    __autoload(Autoload_Implements)
    object [invalid]
    FALSE
    FALSE
    TRUE
    @PHP/standard/serialize/bug31402.php: SUCCEEDED
    @PHP/standard/serialize/bug31442.php: SUCCEEDED
    @PHP/standard/strings/add-and-stripcslashes.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    kaboemkara!
    foo\b\a\r\b\az
    \f\o\o\[ \]
    \zoo['\.']
    \abcd\e\f\g\h\i\j\k\l\m\n\o\pqrstuvwxy\z
    1
    5d
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\standard\strings\__input.txt at expression on line 3, column 1.
    
    kaboemkara!
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\standard\strings\__input.txt at expression on line 5, column 1.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\standard\strings\__input.txt at expression on line 6, column 1.
    
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\standard\strings\__input.txt at expression on line 8, column 1.
    
    1
    5d
    @PHP/standard/strings/add-and-stripslashes.php: SUCCEEDED
    @PHP/standard/strings/basename.php: SUCCEEDED
    @PHP/standard/strings/bin2hex.php: SUCCEEDED
    @PHP/standard/strings/bug20108.php: SUCCEEDED
    @PHP/standard/strings/bug20169.php: SUCCEEDED
    @PHP/standard/strings/bug20261.php: SUCCEEDED
    @PHP/standard/strings/bug20927.php: SUCCEEDED
    @PHP/standard/strings/bug21338.php: SUCCEEDED
    @PHP/standard/strings/bug21453.php: SUCCEEDED
    @PHP/standard/strings/bug21730.php: SUCCEEDED
    @PHP/standard/strings/bug21744.php: SUCCEEDED
    @PHP/standard/strings/bug22008.php: SUCCEEDED
    @PHP/standard/strings/bug22187.php: SUCCEEDED
    @PHP/standard/strings/bug22224.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      0 => 
      object
      {
      }
      1 => 
      object
      {
      }
    }
    @PHP/standard/strings/bug22227.php: SUCCEEDED
    @PHP/standard/strings/bug22904.php: SUCCEEDED
    @PHP/standard/strings/bug23650.php: SUCCEEDED
    @PHP/standard/strings/bug23894.php: SUCCEEDED
    @PHP/standard/strings/bug24098.php: SUCCEEDED
    @PHP/standard/strings/bug24208.php: SUCCEEDED
    @PHP/standard/strings/bug24281.php: SUCCEEDED
    @PHP/standard/strings/bug25671.php: SUCCEEDED
    @PHP/standard/strings/bug25707.php: SUCCEEDED
    @PHP/standard/strings/bug26878.php: SUCCEEDED
    @PHP/standard/strings/bug26973.php: SUCCEEDED
    @PHP/standard/strings/bug27276.php: SUCCEEDED
    @PHP/standard/strings/bug27278.php: SUCCEEDED
    @PHP/standard/strings/bug27295.php: SUCCEEDED
    @PHP/standard/strings/bug27457.php: SUCCEEDED
    @PHP/standard/strings/bug27675.php: SUCCEEDED
    @PHP/standard/strings/bug28386.php: SUCCEEDED
    @PHP/standard/strings/bug33076.php: SUCCEEDED
    @PHP/standard/strings/chr_ord.php: SUCCEEDED
    @PHP/standard/strings/chunk_split.php: SUCCEEDED
    @PHP/standard/strings/count_chars.php: SUCCEEDED
    @PHP/standard/strings/crc32.php: SUCCEEDED
    @PHP/standard/strings/explode.php: SUCCEEDED
    @PHP/standard/strings/implode.php: SUCCEEDED
    @PHP/standard/strings/md5.php: SUCCEEDED
    @PHP/standard/strings/md5raw.php: SUCCEEDED
    @PHP/standard/strings/nl2br.php: SUCCEEDED
    @PHP/standard/strings/sha1.php: SUCCEEDED
    @PHP/standard/strings/sha1raw.php: SUCCEEDED
    @PHP/standard/strings/sprintf_f.php: SUCCEEDED
    @PHP/standard/strings/strcspn.php: SUCCEEDED
    @PHP/standard/strings/strings001.php: SUCCEEDED
    @PHP/standard/strings/strpos.php: SUCCEEDED
    @PHP/standard/strings/strrev.php: SUCCEEDED
    @PHP/standard/strings/strripos.php: SUCCEEDED
    @PHP/standard/strings/strrpos.php: SUCCEEDED
    @PHP/standard/strings/strspn.php: SUCCEEDED
    @PHP/standard/strings/strstr.php: SUCCEEDED
    @PHP/standard/strings/strtoupper.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    cfbfbdcfbfbdcfbfbd
    cfafbdcfafbdcfafbd
    @PHP/standard/strings/strtr.php: SUCCEEDED
    @PHP/standard/strings/strval.php: SUCCEEDED
    @PHP/standard/strings/str_repeat.php: SUCCEEDED
    @PHP/standard/strings/str_shuffle.php: SUCCEEDED
    @PHP/standard/strings/str_word_count.php: SUCCEEDED
    @PHP/standard/strings/substr_count.php: SUCCEEDED
    @PHP/standard/strings/substr_replace.php: SUCCEEDED
    @PHP/standard/strings/wordwrap.php: SUCCEEDED
    @PHP/standard/time/001.php: SUCCEEDED
    @PHP/standard/time/idate.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    U: 1043324459
    Y: 2003
    z: 22
    y: 3
    m: 1
    n: 1
    d: 23
    j: 23
    H: 13
    G: 13
    h: 1
    g: 1
    i: 20
    s: 59
    t: 31
    w: 4
    L: 0
    B: 556
    I: 0
    W: 4
    U: 1043324459
    Y: 2003
    z: 22
    y: 3
    m: 1
    n: 1
    d: 23
    j: 23
    H: 12
    G: 12
    h: 12
    g: 12
    i: 20
    s: 59
    t: 31
    w: 4
    L: 0
    B: 556
    I: 0
    W: 4
    @PHP/strings/001.php: SUCCEEDED
    @PHP/strings/002.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    fprintf test 1:abcde
    20
    printf test 1:simple string
    printf test 2:42
    printf test 3:3.333333
    printf test 4:3.3333333333
    printf test 5:2.50      
    printf test 6:2.50000000
    printf test 7:0000002.50
    printf test 8:<                 foo>
    printf test 9:<bar                 >
    printf test 10: 123456789012345
    printf test 10:<h´┐Żyesterettsjustitiarius>
    printf test 11: 123456789012345678901234567890
    printf test 11:<    h´┐Żyesterettsjustitiarius>
    printf test 12:-12.34
    printf test 13:  -12
    printf test 14:@
    printf test 15:10101010
    printf test 16:aa
    printf test 17:AA
    printf test 18:        10101010
    printf test 19:              aa
    printf test 20:              AA
    printf test 21:0000000010101010
    printf test 22:00000000000000aa
    printf test 23:00000000000000AA
    printf test 24:abcde
    printf test 25:gazonk
    printf test 26:2 1
    printf test 27:3 1 2
    printf test 28:02  1
    printf test 29:2   1
    printf test 30:x
    vprintf test 1:2   1
    fprintf test 1:abcde
    20
    printf test 1:simple string
    printf test 2:42
    printf test 3:3.333333
    printf test 4:3.3333333333
    printf test 5:2.50      
    printf test 6:2.50000000
    printf test 7:0000002.50
    printf test 8:<                 foo>
    printf test 9:<bar                 >
    printf test 10: 123456789012345
    printf test 10:<h�yesterettsjustitiarius>
    printf test 11: 123456789012345678901234567890
    printf test 11:<    h�yesterettsjustitiarius>
    printf test 12:-12.34
    printf test 13:  -12
    printf test 14:@
    printf test 15:10101010
    printf test 16:aa
    printf test 17:AA
    printf test 18:        10101010
    printf test 19:              aa
    printf test 20:              AA
    printf test 21:0000000010101010
    printf test 22:00000000000000aa
    printf test 23:00000000000000AA
    printf test 24:abcde
    printf test 25:gazonk
    printf test 26:2 1
    printf test 27:3 1 2
    printf test 28:02  1
    printf test 29:2   1
    printf test 30:x
    vprintf test 1:2   1
    @PHP/strings/bug22592.php: SUCCEEDED
    Arrays/array1.php: SUCCEEDED
    Arrays/array_diff_intersect.php: SUCCEEDED
    Arrays/array_diff_intersect2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Strict Standards: array_udiff() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 35
    Array
    (
        [0.5] => cr Object
            (
                [priv_member:cr:private] => 12
            )
    
        [0] => cr Object
            (
                [priv_member:cr:private] => 23
            )
    
    )
    
    Strict Standards: array_udiff_assoc() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 36
    Array
    (
        [0.1] => cr Object
            (
                [priv_member:cr:private] => 9
            )
    
        [0.5] => cr Object
            (
                [priv_member:cr:private] => 12
            )
    
        [0] => cr Object
            (
                [priv_member:cr:private] => 23
            )
    
    )
    
    Strict Standards: array_udiff_uassoc() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 37
    
    Strict Standards: array_udiff_uassoc() expects parameter 4 to be a valid callback, non-static method cr::comp_func_key() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 37
    Array
    (
        [0.1] => cr Object
            (
                [priv_member:cr:private] => 9
            )
    
        [0.5] => cr Object
            (
                [priv_member:cr:private] => 12
            )
    
        [0] => cr Object
            (
                [priv_member:cr:private] => 23
            )
    
    )
    Array
    (
        [b] => brown
        [c] => blue
        [0] => red
    )
    ------------------------------------
    
    Strict Standards: array_uintersect() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 40
    Array
    (
        [0.1] => cr Object
            (
                [priv_member:cr:private] => 9
            )
    
        [1] => cr Object
            (
                [priv_member:cr:private] => 4
            )
    
        [2] => cr Object
            (
                [priv_member:cr:private] => -15
            )
    
    )
    
    Strict Standards: array_uintersect_assoc() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 41
    Array
    (
        [1] => cr Object
            (
                [priv_member:cr:private] => 4
            )
    
        [2] => cr Object
            (
                [priv_member:cr:private] => -15
            )
    
    )
    
    Strict Standards: array_uintersect_uassoc() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 42
    
    Strict Standards: array_uintersect_uassoc() expects parameter 4 to be a valid callback, non-static method cr::comp_func_key() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 42
    Array
    (
        [1] => cr Object
            (
                [priv_member:cr:private] => 4
            )
    
        [2] => cr Object
            (
                [priv_member:cr:private] => -15
            )
    
    )
    Array
    (
        [a] => green
    )
    Array
    (
        [0.5] => cr Object
        (
            [priv_member:private] => 12
        )
    
        [0] => cr Object
        (
            [priv_member:private] => 23
        )
    
    )
    Array
    (
        [0.1] => cr Object
        (
            [priv_member:private] => 9
        )
    
        [0.5] => cr Object
        (
            [priv_member:private] => 12
        )
    
        [0] => cr Object
        (
            [priv_member:private] => 23
        )
    
    )
    Array
    (
        [0.1] => cr Object
        (
            [priv_member:private] => 9
        )
    
        [0.5] => cr Object
        (
            [priv_member:private] => 12
        )
    
        [0] => cr Object
        (
            [priv_member:private] => 23
        )
    
    )
    Array
    (
        [b] => brown
        [c] => blue
        [0] => red
    )
    ------------------------------------
    Array
    (
        [0.1] => cr Object
        (
            [priv_member:private] => 9
        )
    
        [1] => cr Object
        (
            [priv_member:private] => 4
        )
    
        [2] => cr Object
        (
            [priv_member:private] => -15
        )
    
    )
    Array
    (
        [1] => cr Object
        (
            [priv_member:private] => 4
        )
    
        [2] => cr Object
        (
            [priv_member:private] => -15
        )
    
    )
    Array
    (
        [1] => cr Object
        (
            [priv_member:private] => 4
        )
    
        [2] => cr Object
        (
            [priv_member:private] => -15
        )
    
    )
    Array
    (
        [a] => green
    )
    Arrays/array_diff_intersect3.php: SUCCEEDED
    Arrays/array_filter%20false%20entries%20%2322016.php: SUCCEEDED
    Arrays/array_map.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Array
    (
        [0] => Array
            (
                [0] => 1
                [1] => A
                [2] => 0
            )
    
        [1] => Array
            (
                [0] => 2
                [1] => B
                [2] => 0
            )
    
        [2] => Array
            (
                [0] => 3
                [1] => C
                [2] => 
            )
    
    )
    Array
    (
        [0] => 1 A 0
        [1] => 2 B 0
        [2] => 3 C 
    )
    Array
    (
        [A] => 2
        [10] => 3
    )
    Array
    (
        [0] => 1
        [1] => 2
        [2] => 3
    )
    Array
    (
        [0] => A
        [1] => B
        [2] => C
    )
    Array
    (
        [0] => 0
        [1] => 0
    )
    Array
    (
        [A] => 1
        [10] => 2
    )
    Array
    (
        [0] => Array
        (
            [0] => 1
            [1] => A
            [2] => 0
        )
    
        [1] => Array
        (
            [0] => 2
            [1] => B
            [2] => 0
        )
    
        [2] => Array
        (
            [0] => 3
            [1] => C
            [2] => 
        )
    
    )
    Array
    (
        [0] => 1 A 0
        [1] => 2 B 0
        [2] => 3 C 
    )
    Array
    (
        [A] => 2
        [10] => 3
    )
    Array
    (
        [0] => 1
        [1] => 2
        [2] => 3
    )
    Array
    (
        [0] => A
        [1] => B
        [2] => C
    )
    Array
    (
        [0] => x
        [1] => x
    )
    Array
    (
        [A] => 1
        [10] => 2
    )
    Arrays/array_merge_recursive.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Array
    (
        [color] => Array
            (
                [favorite] => Array
                    (
                        [0] => red
                        [1] => green
                    )
    
                [0] => blue
            )
    
        [0] => Array
            (
                [0] => 1
                [1] => 2
                [2] => 3
            )
    
        [q] => Array
            (
                [0] => 
                [1] => 
                [2] => x
            )
    
        [1] => 10
        [2] => Array
            (
                [0] => 4
                [1] => 5
                [2] => 6
            )
    
    )
    Array
    (
        [a] => Array
            (
                [0] => 1
                [1] => 2
                [2] => 3
                [3] => e
            )
    
    )
    Array
    (
        [a] => Array
            (
                [0] => 1
                [1] => 2
                [2] => 3
                [3] => e
            )
    
    )
    Array
    (
        [a] => 1
        [b] => 2
    )
    Array
    (
        [a] => xxx
        [b] => 2
    )
    Array
    (
        [a] => Array
            (
                [a] => Array
                    (
                        [a] => Array
     *RECURSION*
                    )
    
                [0] => 1
                [1] => 2
                [2] => 3
            )
    
    )
    Array
    (
        [a] => Array
            (
                [b] => Array
                    (
                        [0] => 1
                        [1] => 1
                    )
    
                [c] => 1
                [d] => Array
                    (
                        [0] => 2
                        [1] => 3
                    )
    
            )
    
    )
    Array
    (
        [a] => Array
            (
                [0] => 
                [1] => 
            )
    
    )
    Array
    (
        [a] => Array
            (
                [0] => 
                [1] => 
            )
    
    )
    Array
    (
        [color] => Array
        (
            [favorite] => Array
            (
                [0] => red
                [1] => green
            )
    
            [0] => blue
        )
    
        [0] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
        )
    
        [q] => Array
        (
            [0] => x
        )
    
        [1] => 10
        [2] => Array
        (
            [0] => 4
            [1] => 5
            [2] => 6
        )
    
    )
    Array
    (
        [a] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
            [3] => e
        )
    
    )
    Array
    (
        [a] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
            [3] => e
        )
    
    )
    Array
    (
        [a] => 1
        [b] => 2
    )
    Array
    (
        [a] => xxx
        [b] => 2
    )
    Array
    (
        [a] => Array
        (
            [a] => Array
            (
                [a] => Array [recursion]
    
    
            )
    
            [0] => 1
            [1] => 2
            [2] => 3
        )
    
    )
    Array
    (
        [a] => Array
        (
            [b] => Array
            (
                [0] => 1
                [1] => 1
            )
    
            [c] => 1
            [d] => Array
            (
                [0] => 2
                [1] => 3
            )
    
        )
    
    )
    Array
    (
        [a] => Array
        (
        )
    
    )
    Array
    (
        [a] => Array
        (
        )
    
    )
    Arrays/array_reduce1.php: SUCCEEDED
    Arrays/array_reduce2.php: SUCCEEDED
    Arrays/array_slice.php: SUCCEEDED
    Arrays/array_sumprod.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    float(8.3)
    float(0)
    int(6)
    int(6)
    float(4294967297)
    float(9.2233720282648E+18)
    bool(true)
    bool(false)
    float(-7.7)
    float(-38.4)
    int(6)
    int(6)
    int64(4294967297)
    int64(9223372028264841218)
    bool(true)
    bool(true)
    Arrays/array_unshift.php: SUCCEEDED
    Arrays/array_walk.php: SUCCEEDED
    Arrays/array_walk_recursive.php: SUCCEEDED
    Arrays/multisort.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    bool(true)
    Array
    (
        [0] => Array
            (
                [0] => 2
                [1] => 8
                [2] => 2
                [3] => 2
                [4] => 8
                [5] => 8
            )
    
        [1] => Array
            (
                [0] => 7
                [1] => 2
                [2] => 7
                [3] => 4
                [4] => 8
                [5] => 1
            )
    
        [2] => Array
            (
                [0] => 1
                [1] => 4
                [2] => 8
                [3] => 0
                [4] => 6
                [5] => 2
            )
    
        [3] => Array
            (
                [0] => 8
                [1] => 4
                [2] => 1
                [3] => 0
                [4] => 7
                [5] => 1
            )
    
        [4] => Array
            (
                [0] => 20
                [1] => 2
                [2] => 12
                [3] => 11
                [4] => 10
                [5] => 1
            )
    
    )
    Array
    (
        [0] => Array
            (
                [0] => 10
                [1] => 100
                [2] => 100
                [3] => a
            )
    
        [1] => Array
            (
                [0] => 1
                [1] => 3
                [2] => 2
                [3] => 1
            )
    
    )
    Array
    (
        [0] => 10
        [1] => a
        [2] => 100
        [3] => 100
    )
    Array
    (
        [0] => 1
        [1] => 1
        [2] => 2
        [3] => 3
    )
    bool(true)
    Array
    (
        [0] => Array
        (
            [0] => 2
            [1] => 8
            [2] => 2
            [3] => 2
            [4] => 8
            [5] => 8
        )
    
        [1] => Array
        (
            [0] => 7
            [1] => 2
            [2] => 7
            [3] => 4
            [4] => 8
            [5] => 1
        )
    
        [2] => Array
        (
            [0] => 1
            [1] => 4
            [2] => 8
            [3] => 0
            [4] => 6
            [5] => 2
        )
    
        [3] => Array
        (
            [0] => 8
            [1] => 4
            [2] => 1
            [3] => 0
            [4] => 7
            [5] => 1
        )
    
        [4] => Array
        (
            [0] => 20
            [1] => 2
            [2] => 12
            [3] => 11
            [4] => 10
            [5] => 1
        )
    
    )
    Array
    (
        [0] => Array
        (
            [0] => 10
            [1] => 100
            [2] => 100
            [3] => a
        )
    
        [1] => Array
        (
            [0] => 1
            [1] => 3
            [2] => 2
            [3] => 1
        )
    
    )
    Array
    (
        [0] => 10
        [1] => a
        [2] => 100
        [3] => 100
    )
    Array
    (
        [0] => 1
        [1] => 1
        [2] => 2
        [3] => 3
    )
    Arrays/multisort_empty.php: SUCCEEDED
    Arrays/nonarray%20access%20%2322019.php: SUCCEEDED
    Arrays/optimizations.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    3
    4
    5
    a
    b
    c
    
    Warning: strtolower() expects parameter 1 to be string, array given in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 15
    
    cablo
    3
    4
    5
    a
    b
    c
    array
    cablo
    Arrays/recursion.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    f1:
    array(2) {
      ["a"]=>
      array(5) {
        ["a"]=>
        &array(3) {
          ["a"]=>
          &array(3) {
            ["a"]=>
            *RECURSION*
            [0]=>
            string(1) "y"
            [1]=>
            string(1) "z"
          }
          [0]=>
          string(1) "y"
          [1]=>
          string(1) "z"
        }
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        string(1) "x"
      }
      [0]=>
      string(1) "w"
    }
    f2:
    array(1) {
      ["A"]=>
      &array(2) {
        ["a"]=>
        &array(2) {
          ["a"]=>
          *RECURSION*
          [0]=>
          string(1) "z"
        }
        [0]=>
        string(1) "z"
      }
    }
    f3:
    array(2) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) {
          [0]=>
          *RECURSION*
          [1]=>
          string(1) "z"
        }
        [1]=>
        string(1) "z"
      }
      [1]=>
      string(1) "z"
    }
    f4:
    
    Warning: array_merge_recursive(): recursion detected in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 37
    array(1) {
      ["a"]=>
      &array(3) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
      }
    }
    f5:
    array(1) {
      ["a"]=>
      array(6) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        int(1)
        [4]=>
        int(2)
        [5]=>
        int(3)
      }
    }
    f6:
    array(1) {
      ["a"]=>
      array(2) {
        [0]=>
        string(2) "xx"
        [1]=>
        int(2)
      }
    }
    f7:
    array(1) {
      ["a"]=>
      array(1) {
        ["a"]=>
        array(1) {
          ["a"]=>
          &array(1) {
            ["a"]=>
            &array(1) {
              ["a"]=>
              *RECURSION*
            }
          }
        }
      }
    }
    f1:
    array(2) {
      ["a"]=>
      array(5) {
        ["a"]=>
        &array(3) {
          ["a"]=>
          &array(3) [recursion]
          [0]=>
          string(1) "y"
          [1]=>
          string(1) "z"
        }
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        string(1) "x"
      }
      [0]=>
      string(1) "w"
    }
    f2:
    array(1) {
      ["A"]=>
      &array(2) {
        ["a"]=>
        &array(2) [recursion]
        [0]=>
        string(1) "z"
      }
    }
    f3:
    array(2) {
      [0]=>
      &array(2) [recursion]
      [1]=>
      string(1) "z"
    }
    f4:
    array(1) {
      ["a"]=>
      array(6) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        int(1)
        [4]=>
        int(2)
        [5]=>
        int(3)
      }
    }
    f5:
    array(1) {
      ["a"]=>
      array(6) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        int(1)
        [4]=>
        int(2)
        [5]=>
        int(3)
      }
    }
    f6:
    array(1) {
      ["a"]=>
      array(2) {
        [0]=>
        string(2) "xx"
        [1]=>
        int(2)
      }
    }
    f7:
    array(1) {
      ["a"]=>
      &array(1) {
        ["a"]=>
        &array(1) [recursion]
      }
    }
    Arrays/sort.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    sort regular:
    Array
    (
        [0] => 0
        [1] => 1
        [2] => 1
        [3] => 8
        [4] => 0x10
        [5] => 10x
        [6] => 20x
        [7] => ach0
        [8] => add1
        [9] => x10
        [10] => x2
    )
    
    sort numeric:
    Array
    (
        [0] => add1
        [1] => x2
        [2] => 0x10
        [3] => ach0
        [4] => 0
        [5] => x10
        [6] => 1
        [7] => 1
        [8] => 8
        [9] => 10x
        [10] => 20x
    )
    
    sort string:
    Array
    (
        [0] => 0
        [1] => 0x10
        [2] => 1
        [3] => 1
        [4] => 10x
        [5] => 20x
        [6] => 8
        [7] => ach0
        [8] => add1
        [9] => x10
        [10] => x2
    )
    
    sort locale:
    Array
    (
        [0] => 0
        [1] => 0x10
        [2] => 1
        [3] => 1
        [4] => 10x
        [5] => 20x
        [6] => 8
        [7] => ach0
        [8] => add1
        [9] => x10
        [10] => x2
    )
    
    ksort regular:
    Array
    (
        [x] => 8
        [z] => 1
        [0] => x10
        [1] => 10x
        [2b] => 1
        [2] => 20x
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [10a] => 0
    )
    
    ksort numeric:
    Array
    (
        [x] => 8
        [z] => 1
        [0] => x10
        [1] => 10x
        [2b] => 1
        [2] => 20x
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [10a] => 0
    )
    
    ksort string:
    Array
    (
        [0] => x10
        [1] => 10x
        [10a] => 0
        [2] => 20x
        [2b] => 1
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [x] => 8
        [z] => 1
    )
    
    ksort locale:
    Array
    (
        [0] => x10
        [1] => 10x
        [10a] => 0
        [2] => 20x
        [2b] => 1
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [x] => 8
        [z] => 1
    )
    
    asort regular:
    Array
    (
        [10a] => 0
        [2b] => 1
        [z] => 1
        [x] => 8
        [4] => 0x10
        [1] => 10x
        [2] => 20x
        [5] => ach0
        [6] => add1
        [0] => x10
        [3] => x2
    )
    
    asort numeric:
    Array
    (
        [6] => add1
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [10a] => 0
        [0] => x10
        [z] => 1
        [2b] => 1
        [x] => 8
        [1] => 10x
        [2] => 20x
    )
    
    asort string:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [z] => 1
        [2b] => 1
        [1] => 10x
        [2] => 20x
        [x] => 8
        [5] => ach0
        [6] => add1
        [0] => x10
        [3] => x2
    )
    
    asort locale:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [z] => 1
        [2b] => 1
        [1] => 10x
        [2] => 20x
        [x] => 8
        [5] => ach0
        [6] => add1
        [0] => x10
        [3] => x2
    )
    
    rsort regular:
    Array
    (
        [0] => x2
        [1] => x10
        [2] => add1
        [3] => ach0
        [4] => 20x
        [5] => 10x
        [6] => 0x10
        [7] => 8
        [8] => 1
        [9] => 1
        [10] => 0
    )
    
    rsort numeric:
    Array
    (
        [0] => 20x
        [1] => 10x
        [2] => 8
        [3] => 1
        [4] => 1
        [5] => ach0
        [6] => add1
        [7] => 0x10
        [8] => x2
        [9] => x10
        [10] => 0
    )
    
    rsort string:
    Array
    (
        [0] => x2
        [1] => x10
        [2] => add1
        [3] => ach0
        [4] => 8
        [5] => 20x
        [6] => 10x
        [7] => 1
        [8] => 1
        [9] => 0x10
        [10] => 0
    )
    
    rsort locale:
    Array
    (
        [0] => x2
        [1] => x10
        [2] => add1
        [3] => ach0
        [4] => 8
        [5] => 20x
        [6] => 10x
        [7] => 1
        [8] => 1
        [9] => 0x10
        [10] => 0
    )
    
    natsort:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [2b] => 1
        [z] => 1
        [x] => 8
        [1] => 10x
        [2] => 20x
        [5] => ach0
        [6] => add1
        [3] => x2
        [0] => x10
    )
    sort regular:
    Array
    (
        [0] => 0x10
        [1] => 10x
        [2] => 20x
        [3] => ach0
        [4] => add1
        [5] => x10
        [6] => 0
        [7] => x2
        [8] => 1
        [9] => 1
        [10] => 8
    )
    
    sort numeric:
    Array
    (
        [0] => x10
        [1] => 0
        [2] => x2
        [3] => ach0
        [4] => add1
        [5] => 1
        [6] => 1
        [7] => 8
        [8] => 10x
        [9] => 0x10
        [10] => 20x
    )
    
    sort string:
    Array
    (
        [0] => 0
        [1] => 0x10
        [2] => 1
        [3] => 1
        [4] => 10x
        [5] => 20x
        [6] => 8
        [7] => ach0
        [8] => add1
        [9] => x10
        [10] => x2
    )
    
    sort locale:
    Array
    (
        [0] => 0
        [1] => 0x10
        [2] => 1
        [3] => 1
        [4] => 10x
        [5] => 20x
        [6] => 8
        [7] => add1
        [8] => ach0
        [9] => x10
        [10] => x2
    )
    
    ksort regular:
    Array
    (
        [x] => 8
        [z] => 1
        [0] => x10
        [1] => 10x
        [2] => 20x
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [10a] => 0
        [2b] => 1
    )
    
    ksort numeric:
    Array
    (
        [x] => 8
        [z] => 1
        [0] => x10
        [1] => 10x
        [2b] => 1
        [2] => 20x
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [10a] => 0
    )
    
    ksort string:
    Array
    (
        [0] => x10
        [1] => 10x
        [10a] => 0
        [2] => 20x
        [2b] => 1
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [x] => 8
        [z] => 1
    )
    
    ksort locale:
    Array
    (
        [0] => x10
        [1] => 10x
        [10a] => 0
        [2] => 20x
        [2b] => 1
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [x] => 8
        [z] => 1
    )
    
    asort regular:
    Array
    (
        [4] => 0x10
        [1] => 10x
        [2] => 20x
        [5] => ach0
        [6] => add1
        [0] => x10
        [10a] => 0
        [3] => x2
        [z] => 1
        [2b] => 1
        [x] => 8
    )
    
    asort numeric:
    Array
    (
        [0] => x10
        [10a] => 0
        [3] => x2
        [5] => ach0
        [6] => add1
        [z] => 1
        [2b] => 1
        [x] => 8
        [1] => 10x
        [4] => 0x10
        [2] => 20x
    )
    
    asort string:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [z] => 1
        [2b] => 1
        [1] => 10x
        [2] => 20x
        [x] => 8
        [5] => ach0
        [6] => add1
        [0] => x10
        [3] => x2
    )
    
    asort locale:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [z] => 1
        [2b] => 1
        [1] => 10x
        [2] => 20x
        [x] => 8
        [6] => add1
        [5] => ach0
        [0] => x10
        [3] => x2
    )
    
    rsort regular:
    Array
    (
        [0] => 8
        [1] => 1
        [2] => 1
        [3] => x2
        [4] => x10
        [5] => 0
        [6] => add1
        [7] => ach0
        [8] => 20x
        [9] => 10x
        [10] => 0x10
    )
    
    rsort numeric:
    Array
    (
        [0] => 20x
        [1] => 0x10
        [2] => 10x
        [3] => 8
        [4] => 1
        [5] => 1
        [6] => x10
        [7] => 0
        [8] => x2
        [9] => ach0
        [10] => add1
    )
    
    rsort string:
    Array
    (
        [0] => x2
        [1] => x10
        [2] => add1
        [3] => ach0
        [4] => 8
        [5] => 20x
        [6] => 10x
        [7] => 1
        [8] => 1
        [9] => 0x10
        [10] => 0
    )
    
    rsort locale:
    Array
    (
        [0] => x2
        [1] => x10
        [2] => ach0
        [3] => add1
        [4] => 8
        [5] => 20x
        [6] => 10x
        [7] => 1
        [8] => 1
        [9] => 0x10
        [10] => 0
    )
    
    natsort:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [z] => 1
        [2b] => 1
        [x] => 8
        [1] => 10x
        [2] => 20x
        [5] => ach0
        [6] => add1
        [3] => x2
        [0] => x10
    )
    Arrays/usort.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    Array
    (
        [0] => 10
        [1] => 9
        [2] => 8
        [3] => 7
        [4] => 6
        [5] => 5
        [6] => 4
        [7] => 3
        [8] => 2
        [9] => 1
    )
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Array
    (
        [0] => 10
        [1] => 9
        [2] => 8
        [3] => 7
        [4] => 6
        [5] => 5
        [6] => 4
        [7] => 3
        [8] => 2
        [9] => 1
    )
    Arrays/lazy_copy/001.php: SUCCEEDED
    Arrays/lazy_copy/002.php: SUCCEEDED
    Arrays/lazy_copy/003.php: SUCCEEDED
    Arrays/lazy_copy/004.php: SUCCEEDED
    Arrays/lazy_copy/005.php: SUCCEEDED
    Arrays/lazy_copy/006.php: SUCCEEDED
    Bugs/class_incompletepart.php: SUCCEEDED
    Bugs/division-by-zero.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    DIVISION
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 6
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 8
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 10
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 12
    bool(false)
    MODULO
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 16
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 18
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 20
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 22
    bool(false)
    DIVISION
    bool(false)
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt at expression on line 10, column 2.
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt at expression on line 12, column 2.
    bool(false)
    MODULO
    bool(false)
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt at expression on line 20, column 2.
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt at expression on line 22, column 2.
    bool(false)
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt(6,10): warning PHP0150: Division by zero
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt(8,9): warning PHP0150: Division by zero
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt(16,10): warning PHP0150: Division by zero
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt(18,9): warning PHP0150: Division by zero
    
    Bugs/function-in-unknown-class.php: SUCCEEDED
    Bugs/is_a_null_value.php: SUCCEEDED
    Bugs/preg-named-groups.php: SUCCEEDED
    Bugs/preg-replace-advanced.php: SUCCEEDED
    Bugs/preg-replace-range.php: SUCCEEDED
    Bugs/preg-replace.php: SUCCEEDED
    Bugs/preg-this-dynamic.php: FAILED
    Script hung upNo errorsSuccess
    Expected test outputReal script output
    Unhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---> PHP.Core.Debug+AssertException: Assertion failed: 
       at PHP.Core.Debug.Fail(String message)
       at PHP.Core.Debug.Assert(Boolean condition)
       at PHP.Core.RelativePath.ParseCanonical(String relativePath)
       at PHP.Core.Emit.TransientAssemblyBuilder.Build(String sourceCode, SourceCodeDescriptor descriptor, EvalKinds kind, CompilationContext context, ScriptContext scriptContext, DTypeDesc referringType, NamingContext namingContext, Boolean completeSource)
       at PHP.Core.DynamicCode.EvalInternal(String prefix, String code, String suffix, EvalKinds kind, ScriptContext scriptContext, Dictionary`2 localVariables, DObject self, DTypeDesc referringType, SourceCodeDescriptor descriptor, Boolean entireFile, NamingContext namingContext)
       at PHP.Core.DynamicCode.Eval(String code, Boolean synthetic, ScriptContext context, Dictionary`2 definedVariables, DObject self, DTypeDesc referringType, String callerRelativeSourcePath, Int32 line, Int32 column, Int32 containerId, NamingContext namingContext)
       at PHP.Library.PerlRegExp.Evaluator.ReplaceCodeExecute(Match m)
       at System.Text.RegularExpressions.RegexReplacement.Replace(MatchEvaluator evaluator, Regex regex, String input, Int32 count, Int32 startat)
       at System.Text.RegularExpressions.Regex.Replace(String input, MatchEvaluator evaluator, Int32 count)
       at PHP.Library.PerlRegExp.ReplaceInternal(DObject self, Dictionary`2 definedVariables, PerlRegExpConverter converter, PhpCallback callback, String str, Int32 limit, SourceCodeDescriptor sourceCodeDesc, Int32& count)
       at PHP.Library.PerlRegExp.SimpleReplace(DObject self, Dictionary`2 definedVariables, Object pattern, String replacement, PhpCallback callback, Object data, Int32 limit, SourceCodeDescriptor descriptor, Int32& count)
       at PHP.Library.PerlRegExp.Replace(ScriptContext context, DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, PhpCallback callback, Object data, Int32 limit, Int32& count)
       at PHP.Library.PerlRegExp.Replace(ScriptContext context, DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, Object data)
       at PHP.Dynamic.PhpNetClassLibrary.preg_replace(Object , PhpStack )
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <__input.txt>.a.a(ScriptContext ) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt:line 16
       at <__input.txt>.a.<Mediator>(ScriptContext )
       at <__input.txt>.a.a(Object instance, PhpStack stack)
       at <__input.txt>.<Script>.<Main>(ScriptContext <context>, Dictionary`2 <locals>, DObject , DTypeDesc , Boolean ) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt:line 19
       at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)
       at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)
       --- End of inner exception stack trace ---
       at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)
       at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)
       at <Global>.Run(String[] )
    
    Bugs/preg-this-dynamic2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    foo: ahoj
    foo: lidi
    foo: rozkladame
    foo: ahoj
    foo: lidi
    foo: rozkladame
    foo: ahoj
    foo: lidi
    foo: rozkladame
    
    Notice: Undefined variable: this.
    
    Error: Call to a member function foo() on a non-object.
    Bugs/preg-this.php: SUCCEEDED
    Bugs/preg-ungreedy-bugs.php: SUCCEEDED
    Bugs/preg-unkn.php: SUCCEEDED
    Bugs/trigger_error%20line%20number%20%232787.php: SUCCEEDED
    Compiler/abstracts.php: SUCCEEDED
    Compiler/aliased%20assign%20add.php: SUCCEEDED
    Compiler/assignments.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ---1---1float(-1.5)
    float(2.5)
    float(0.83333333333333)
    int(6)
    int(8)
    ---2---2float(8.8333333333333)
    float(8.8333333333333)
    float(8.8333333333333)
    int(8)
    int(8)
    ---3---3---4---4---5---5array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [1]=>
      array(1) {
        [2]=>
        array(1) {
          [3]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    ---6---6array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "u"
    }
    array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "v"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    ---7---7array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    ---8---8
    ---1---1float(-1.5)
    float(2.5)
    float(0.833333333333333)
    int(6)
    int(8)
    ---2---2float(8.83333333333333)
    float(8.83333333333333)
    float(8.83333333333333)
    int(8)
    int(8)
    ---3---3---4---4---5---5array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [1]=>
      array(1) {
        [2]=>
        array(1) {
          [3]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    ---6---6array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "u"
    }
    array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "v"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    ---7---7array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    ---8---8
    Compiler/assign_in_call.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    g1:
    f(x)
    u(x)
    'x'
    
    g2:
    f(x)
    u(x)
    'b'
    
    g3:
    f(x)
    u(x)
    'b'
    
    g4:
    f(x)
    u(x)
    'b'
    
    g5:
    f()
    u()
    integer(1)
    
    g6:
    f(3)
    u(3)
    integer(3)
    
    g7:
    f(2)
    u(10)
    integer(10)
    
    g8:
    f(1)
    f(1)
    f(1)
    u(1)
    u()
    u(1)
    
    g9:
    known:
    __get(p) = 0
    __set(p,1)
    f(1)
    unknown:
    __get(p) = 1
    __set(p,3)
    u(3)
    
    g10:
    Done.
    g1:
    f(x)
    u(x)
    'x'
    
    g2:
    f(x)
    u(x)
    'b'
    
    g3:
    f(x)
    u(x)
    'b'
    
    g4:
    f(x)
    u(x)
    'b'
    
    g5:
    f()
    u()
    integer(1)
    
    g6:
    f(3)
    u(3)
    integer(3)
    
    g7:
    f(2)
    u(10)
    integer(10)
    
    g8:
    f(1)
    f(1)
    f(1)
    u(1)
    u()
    u(1)
    
    g9:
    known:
    __get(p) = 0
    __set(p,1)
    __get(p) = 1
    f(1)
    unknown:
    __get(p) = 1
    __set(p,3)
    __get(p) = 3
    u(3)
    
    g10:
    Done.
    Compiler/auto_globals_001.php: SUCCEEDED
    Compiler/auto_globals_002.php: SUCCEEDED
    Compiler/auto_globals_003.php: SUCCEEDED
    Compiler/break_in_global_code.php: SUCCEEDED
    Compiler/chaining_test.php: SUCCEEDED
    Compiler/chain_ending_by_string_index.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        string(1) "f"
      }
    }
    array(1) {
      [0]=>
      string(4) "xubu"
    }
    object(C)#1 (1) {
      ["f"]=>
      string(4) "kuxu"
    }
    string(5) "helxo"
    string(5) "helxo"
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        string(1) "f"
      }
    }
    array(1) {
      [0]=>
      string(4) "bubu"
    }
    
    Warning: A string item used as a reference in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt at expression on line 19, column 1.
    object(C)(1) {
      ["f"]=>
      string(4) "kuku"
    }
    
    Warning: A string item used as a reference in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt at expression on line 25, column 1.
    string(5) "hello"
    
    Warning: A string item used as a reference in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt at expression on line 31, column 1.
    string(5) "hello"
    Compiler/continue_in_global_code.php: SUCCEEDED
    Compiler/deep_copy.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array(1) {
      [0]=>
      &array(1) {
        [0]=>
        &array(1) {
          [0]=>
          *RECURSION*
        }
      }
    }
    array(1) {
      [0]=>
      &array(1) {
        [0]=>
        &array(1) {
          [0]=>
          *RECURSION*
        }
      }
    }
    array(2) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) {
          [0]=>
          *RECURSION*
          [1]=>
          int(1)
        }
        [1]=>
        int(1)
      }
      [1]=>
      int(1)
    }
    array(1) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) {
          [0]=>
          *RECURSION*
          [1]=>
          int(1)
        }
        [1]=>
        int(1)
      }
    }
    array(1) {
      [0]=>
      &array(1) [recursion]
    }
    array(1) {
      [0]=>
      &array(1) {
        [0]=>
        &array(1) [recursion]
      }
    }
    array(2) {
      [0]=>
      &array(2) [recursion]
      [1]=>
      int(1)
    }
    array(1) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) [recursion]
        [1]=>
        int(1)
      }
    }
    Compiler/deep_copy_refbox.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Strict Standards: Only variables should be passed by reference in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt on line 42
    array
    {
      0 => integer(1)
    }
    
    Strict Standards: Only variables should be passed by reference in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt on line 45
    array
    {
      0 => integer(1)
    }
    
    Strict Standards: Only variables should be passed by reference in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt on line 49
    array
    {
      0 => integer(1)
    }
    
    Strict Standards: Only variables should be passed by reference in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt on line 52
    array
    {
      0 => integer(1)
    }
    array
    {
      0 => integer(1)
      1 => integer(1)
    }
    array
    {
      0 => integer(1)
      1 => integer(1)
    }
    array
    {
      0 => integer(1)
      1 => integer(1)
    }
    array
    {
      0 => integer(1)
      1 => integer(1)
    }
    Compiler/expr_init.php: SUCCEEDED
    Compiler/foreach1.php: SUCCEEDED
    Compiler/foreach_arrays.php: SUCCEEDED
    Compiler/for_loop.php: SUCCEEDED
    Compiler/function_002.php: SUCCEEDED
    Compiler/function_003.php: SUCCEEDED
    Compiler/function_004.php: SUCCEEDED
    Compiler/function_call.php: SUCCEEDED
    Compiler/if_statement.php: SUCCEEDED
    Compiler/indirect_001.php: SUCCEEDED
    Compiler/indirect_002.php: SUCCEEDED
    Compiler/indirect_003.php: SUCCEEDED
    Compiler/indirect_004.php: SUCCEEDED
    Compiler/indirect_005.php: SUCCEEDED
    Compiler/indirect_007.php: SUCCEEDED
    Compiler/indirect_global.php: SUCCEEDED
    Compiler/inheritance.php: SUCCEEDED
    Compiler/inheritance2.php: SUCCEEDED
    Compiler/isset_unset_001.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Testing x in global code:  <br>
    1 <br>
     <br>
    Testing x (object) in optimized function:  <br>
    1 <br>
     <br>
    Testing x (PhpReference) in optimized function:  <br>
    1 <br>
     <br>
    
    Notice: Undefined variable: y in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt on line 29
    Testing $$x (created at runtime) in optimized function:  <br>
    1 <br>
    Testing x in global code:  <br>
    1 <br>
     <br>
    Testing x (object) in optimized function:  <br>
    1 <br>
     <br>
    Testing x (PhpReference) in optimized function:  <br>
    1 <br>
     <br>
    Testing $$x (created at runtime) in optimized function:  <br>
    1 <br>
    Compiler/list%20%2326681.php: SUCCEEDED
    Compiler/null_hints.php: SUCCEEDED
    Compiler/pure_create_function.php: SUCCEEDED
    Compiler/pure_function_exists.php: SUCCEEDED
    Compiler/pure_math_str.php: SUCCEEDED
    Compiler/static_call.php: SUCCEEDED
    Compiler/switch.php: SUCCEEDED
    Compiler/ternary_ex.php: SUCCEEDED
    Compiler/this%20call.php: SUCCEEDED
    Compiler/typehint_check.php: SUCCEEDED
    Compiler/__call.php: SUCCEEDED
    Compiler/Inclusions/include2.php: SUCCEEDED
    Compiler/Inclusions/include3.php: SUCCEEDED
    Compiler/Inclusions/include6.php: SUCCEEDED
    Compiler/Inclusions/include_test.php: SUCCEEDED
    Compiler/Inclusions/script.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t01.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t02.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t03.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t04.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t05.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t08.php: SUCCEEDED
    Compiler/PseudoConst/parent.php: SUCCEEDED
    Compiler/PseudoConst/parent2.php: SUCCEEDED
    Compiler/PseudoConst/self.php: SUCCEEDED
    Compiler/PseudoConst/t01.php: SUCCEEDED
    Compiler/PseudoConst/t02.php: SUCCEEDED
    Compiler/PseudoConst/t03.php: SUCCEEDED
    Compiler/PseudoConst/t04.php: SUCCEEDED
    Compiler/PseudoConst/t05.php: SUCCEEDED
    Compiler/PseudoConst/t06.php: SUCCEEDED
    Compiler/PseudoConst/t07.php: SUCCEEDED
    Compiler/PseudoConst/t08.php: SUCCEEDED
    Compiler/PseudoConst/t09.php: SUCCEEDED
    Compiler/PseudoConst/t10.php: SUCCEEDED
    Compiler/PseudoConst/t11.php: SUCCEEDED
    Compiler/PseudoConst/_class_.php: SUCCEEDED
    Compiler/PseudoConst/_dir_.php: SUCCEEDED
    Compiler/PseudoConst/_function_.php: SUCCEEDED
    Compiler/References/array_argument.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(2)
        [1]=>
        int(3)
      }
    }
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    Compiler/References/array_local.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(2)
        [1]=>
        int(3)
      }
    }
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    Compiler/References/array_ret_argument.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(2)
        [1]=>
        int(3)
      }
    }
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    Compiler/References/array_ret_argument2.php: SUCCEEDED
    Compiler/References/deepcopy.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <br/><br/>globalobjects: array(2) {
      [0]=>
      int(1)
      [1]=>
      int(7)
    }
    <br/><br/>globalobjects: array(2) {
      [0]=>
      int(1)
      [1]=>
      &int(7)
    }
    Compiler/References/explicitclear.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Construyendo Y
    call foo12Destruyendo Y
    3object(X)#1 (2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      int(54)
    }
    array(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      string(10) "Init Value"
    }
    x: object(X)#1 (2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      int(1004)
    }
    <br/>checkpoint array(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      int(54)
    }
    Construyendo Y
    call foo123object(X)(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      &int(54)
    }
    array(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      &int(54)
    }
    x: object(X)(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      &int(1004)
    }
    <br/>checkpoint array(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      &int(1004)
    }
    Destruyendo Y
    Compiler/References/field_argument.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: int(7)
    <br/><br/>checkpoint array(1) {
      ["objects"]=>
      int(8)
    }
    x: int(7)
    <br/><br/>checkpoint array(1) {
      ["objects"]=>
      &int(7)
    }
    Compiler/References/field_local.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: object(X)#1 (1) {
      ["objects"]=>
      int(25)
    }
    <br/>checkpoint array(1) {
      ["objects"]=>
      int(7)
    }
    x: object(X)(1) {
      ["objects"]=>
      &int(25)
    }
    <br/>checkpoint array(1) {
      ["objects"]=>
      &int(25)
    }
    Compiler/References/ref_arrayitem.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(2)
        [1]=>
        int(3)
      }
    }
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    Compiler/References/ref_reasign.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    object(X)#1 (2) {
      ["objects"]=>
      int(54)
      ["objects2"]=>
      &int(222)
    }
    array(2) {
      ["objects"]=>
      int(7)
      ["objects2"]=>
      &int(222)
    }
    x: object(X)#1 (2) {
      ["objects"]=>
      int(1004)
      ["objects2"]=>
      int(777)
    }
    <br/>checkpoint array(2) {
      ["objects"]=>
      int(54)
      ["objects2"]=>
      int(222)
    }
    object(X)(2) {
      ["objects"]=>
      &int(54)
      ["objects2"]=>
      &int(222)
    }
    array(2) {
      ["objects"]=>
      &int(54)
      ["objects2"]=>
      &int(222)
    }
    x: object(X)(2) {
      ["objects"]=>
      &int(1004)
      ["objects2"]=>
      &int(777)
    }
    <br/>checkpoint array(2) {
      ["objects"]=>
      &int(1004)
      ["objects2"]=>
      &int(777)
    }
    Compiler/Unreachable/t13.php: SUCCEEDED
    Compiler/Unset/calluserfunc.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Warning: call_user_func() expects parameter 1 to be a valid callback, function 'unset' not found or invalid function name in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\Unset\__input.txt on line 3
    int(10)
    Error: call_user_func(): Call to undefined function: 'unset' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\Unset\__input.txt at expression on line 3, column 1.
    Compiler/Unset/issetref2.php: SUCCEEDED
    Compiler/Unset/unsetglobal.php: SUCCEEDED
    Compiler/Unset/unsetglobal2.php: SUCCEEDED
    Compiler/Unset/unsetindirect.php: SUCCEEDED
    Compiler/Unset/unsetproblem.php: SUCCEEDED
    Compiler/Unset/unsetref.php: SUCCEEDED
    Compiler/Unset/unsetref2.php: SUCCEEDED
    Compiler/Unset/unsetref3.php: SUCCEEDED
    Compiler/Unset/__unset.php: SUCCEEDED
    DateTime/strftime.php: SUCCEEDED
    DateTime/strtotime1.php: SUCCEEDED
    DateTime/strtotime2.php: SUCCEEDED
    DateTime/strtotime3.php: SUCCEEDED
    DateTime/strtotime4.php: SUCCEEDED
    DateTime/strtotime5.php: SUCCEEDED
    DateTime/time.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    -189388800:-189475200 - 86400
    1964-01-01T00:00:00+0000
    1963-12-31T00:00:00+0000
    1964-06-06
    1963-06-06
    1964-01-06
    1133305200
    -189388800:-189475200 - 86400
    1964-01-01T00:00:00+0000
    1963-12-31T00:00:00+0000
    1964-06-06
    1963-06-06
    1964-01-06
    DateTime/timezones1.php: SUCCEEDED
    FileSystem/basename.php: SUCCEEDED
    FileSystem/basename2.php: SUCCEEDED
    FileSystem/chdir.php: SUCCEEDED
    FileSystem/csv.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    --- write ---
    72
    24
    44
    2
    6
    
    --- read ---
    "hello\n
    world";"aaa""bbb""ccc";"blah blah;";none;"tab\ttab";"space space"\n
    hh'ee;"ss\nsadasdasd s"\n
    """""""""""""""""""""";"""";;"""""";"xxx"""\n
    x\n
    "x\y"\n
    --- write ---
    72
    24
    44
    2
    6
    
    --- read ---
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    FileSystem/date.php: SUCCEEDED
    FileSystem/date2.php: SUCCEEDED
    FileSystem/date3.php: SUCCEEDED
    FileSystem/date_unix.php: SUCCEEDED
    FileSystem/dirname.php: SUCCEEDED
    FileSystem/dirname2.php: SUCCEEDED
    FileSystem/disk_free_space.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    745 GB
    Drive C: 31 GB
    Drive D: 745 GB
    Drive E: 
    Warning: disk_free_space(): The system cannot find the path specified.
     in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 14
    false
    Drive F: 
    Warning: disk_free_space(): The device is not ready.
     in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 14
    false
    745 GB
    Drive C: 31 GB
    Drive D: 745 GB
    Drive E: false
    Drive F: false
    FileSystem/disk_total_space.php: SUCCEEDED
    FileSystem/fgets.php: SUCCEEDED
    FileSystem/file.php: SUCCEEDED
    FileSystem/filesize.php: SUCCEEDED
    FileSystem/file_exists.php: SUCCEEDED
    FileSystem/file_get_contents.php: SUCCEEDED
    FileSystem/fpassthru.php: SUCCEEDED
    FileSystem/fread.php: SUCCEEDED
    FileSystem/fread1.php: SUCCEEDED
    FileSystem/fread2.php: SUCCEEDED
    FileSystem/fseek.php: SUCCEEDED
    FileSystem/fsockopen.php: SUCCEEDED
    FileSystem/ftell.php: SUCCEEDED
    FileSystem/is_dir.php: SUCCEEDED
    FileSystem/is_executable.php: SUCCEEDED
    FileSystem/pathinfo.php: SUCCEEDED
    FileSystem/popen.php: SUCCEEDED
    FileSystem/readdir.php: SUCCEEDED
    FileSystem/readfile.php: SUCCEEDED
    FileSystem/readline.php: SUCCEEDED
    FileSystem/realpath.php: SUCCEEDED
    FileSystem/scandir.php: SUCCEEDED
    FileSystem/stat.php: SUCCEEDED
    FileSystem/stream_context_set_option.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <pre>[ARRAY
      [STRING: "http"] => [ARRAY
        [STRING: "method"] => [STRING: "GET"]
        [STRING: "header"] => [STRING: "Accept-language: en
    Cookie: foo=bar
    "]
        [STRING: "op1"] => [STRING: "DIRECT"]
        [STRING: "op2"] => [STRING: "VIA STREAM"]
      ]
      [STRING: "other"] => [ARRAY
        [STRING: "method"] => [STRING: "otherGET"]
        [STRING: "header"] => [STRING: "otherAccept-language: en
    otherCookie: foo=bar
    "]
      ]
      [STRING: "file"] => [ARRAY
        [STRING: "method"] => [STRING: "otherGET"]
        [STRING: "header"] => [STRING: "otherAccept-language: en
    otherCookie: foo=bar
    "]
      ]
      [STRING: "wrap"] => [ARRAY
        [STRING: "op1"] => [STRING: "DIRECT"]
        [STRING: "op2"] => [STRING: "VIA STREAM"]
      ]
    ]</pre>
    <pre>[ARRAY
      [STRING: "http"] => [ARRAY
        [STRING: "method"] => [STRING: "GET"]
        [STRING: "header"] => [STRING: "Accept-language: en
    Cookie: foo=bar
    "]
        [STRING: "op1"] => [STRING: "DIRECT"]
        [STRING: "op2"] => [STRING: "VIA STREAM"]
      ]
      [STRING: "other"] => [ARRAY
        [STRING: "method"] => [STRING: "otherGET"]
        [STRING: "header"] => [STRING: "otherAccept-language: en
    otherCookie: foo=bar
    "]
      ]
      [STRING: "file"] => [ARRAY
        [STRING: "method"] => [STRING: "otherGET"]
        [STRING: "header"] => [STRING: "otherAccept-language: en
    otherCookie: foo=bar
    "]
      ]
      [STRING: "wrap"] => [ARRAY
        [STRING: "op1"] => [STRING: "DIRECT"]
        [STRING: "op2"] => [STRING: "VIA STREAM"]
      ]
    ]</pre>
    Error: Script 'D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem/fs.inc' inclusion failed. Cause: Script cannot be included with current configuration. Search paths: include_path is '.', working directory is 'D:\Documents\Projects\Phalanger\Main\Testing\Tests'  in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 3, column 1.
    FileSystem/stream_copy_to_stream.php: SUCCEEDED
    FileSystem/stream_copy_to_stream2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <p>Read <b>rb</b>, Write <b>wb</b>
    
    
    COPIED: <b>28590</b>
    <p>Read <b>rb</b>, Write <b>wt</b>
    
    
    COPIED: <b>28572</b>
    <p>Read <b>rb</b>, Write <b>wb</b>
    
    
    COPIED: <b>28572</b>
    <p>Read <b>rb</b>, Write <b>wt</b>
    
    
    COPIED: <b>28572</b>
    FileSystem/testinc.php: SUCCEEDED
    FileSystem/touch.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Warning: touch(): Utime failed: No such file or directory in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 8
    Sorry Could Not change modification time of touch.txt
    Warning: touch(): Utime failed: No such file or directory in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 14
    
    Warning: touch(): Utime failed: No such file or directory in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 16
    
    Warning: touch(): Utime failed: No such file or directory in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 17
    <pre>[ARRAY
      [INT (0)] => [STRING: "May 10, 2011; [00:50:21] (00h) ctime test.txt (1304981421)"]
      [INT (1)] => [STRING: "February 19, 2011; [22:06:05] (22h) mtime test.txt (1298149565)"]
      [INT (2)] => [STRING: "May 10, 2011; [00:50:21] (00h) ctime touch.txt (1304981421)"]
      [INT (3)] => [STRING: "February 19, 2011; [22:06:05] (22h) mtime touch.txt (1298149565)"]
      [INT (4)] => [STRING: "May 10, 2011; [00:50:21] (00h) atime touch.txt (1304981421)"]
      [INT (5)] => [STRING: "February 19, 2011; [22:06:05] (22h) mtime summer.txt (1298149565)"]
      [INT (6)] => [STRING: "February 19, 2011; [22:06:05] (22h) mtime winter.txt (1298149565)"]
    ]</pre>
    Warning: touch(): Unable to access (D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\touch.txt): Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 8, column 5.
    Sorry Could Not change modification time of touch.txt
    Warning: touch(): Unable to access (D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\touch.txt): Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 14, column 1.
    
    Warning: touch(): Unable to access (D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\winter.txt): Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 16, column 1.
    
    Warning: touch(): Unable to access (D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\summer.txt): Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 17, column 1.
    <pre>[ARRAY
      [INT (0)] => [STRING: "May 10, 2011; [00:50:21] (00h) ctime test.txt (1304981421)"]
      [INT (1)] => [STRING: "February 19, 2011; [23:06:05] (23h) mtime test.txt (1298153165)"]
      [INT (2)] => [STRING: "May 10, 2011; [00:50:21] (00h) ctime touch.txt (1304981421)"]
      [INT (3)] => [STRING: "February 19, 2011; [23:06:05] (23h) mtime touch.txt (1298153165)"]
      [INT (4)] => [STRING: "May 10, 2011; [00:50:21] (00h) atime touch.txt (1304981421)"]
      [INT (5)] => [STRING: "February 19, 2011; [23:06:05] (23h) mtime summer.txt (1298153165)"]
      [INT (6)] => [STRING: "February 19, 2011; [23:06:05] (23h) mtime winter.txt (1298153165)"]
    ]</pre>
    FileSystem/tar/tar_test.php: SUCCEEDED
    FileSystem/zip/zip.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    failed
    Error: Call to undefined function: 'zip_open' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\zip\__input.txt at expression on line 3, column 1.
    Math/abs.php: SUCCEEDED
    Math/atan2.php: SUCCEEDED
    Math/base_convert.php: SUCCEEDED
    Math/bindec.php: SUCCEEDED
    Math/ceil.php: SUCCEEDED
    Math/cos.php: SUCCEEDED
    Math/decbin.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <pre>
    [double: 2294967295]
    10001000110010100110101111111111
    [double: 4294967296]
    0
    [double: 8589934590]
    11111111111111111111111111111110
    [double: 8589934590]
    11111111111111111111111111111110
    [double: 8589934591]
    11111111111111111111111111111111
    [Int: 1000.000.000.000]
    11010100101001010001000000000000
    <hr>(-1, -5435, 2.14, 0, 26)
    11111111111111111111111111111111
    11111111111111111110101011000101
    10
    0
    11010 
    </pre>
    <pre>
    [???: 2294967295]
    10001000110010100110101111111111
    [???: 4294967296]
    0
    [???: 8589934590]
    11111111111111111111111111111110
    [???: 8589934590]
    11111111111111111111111111111110
    [???: 8589934591]
    11111111111111111111111111111111
    [Int: 1000.000.000.000]
    11010100101001010001000000000000
    <hr>(-1, -5435, 2.14, 0, 26)
    11111111111111111111111111111111
    11111111111111111110101011000101
    10
    0
    11010 
    </pre>
    Math/dechex.php: SUCCEEDED
    Math/decoct.php: SUCCEEDED
    Math/deg2rad.php: SUCCEEDED
    Math/exp.php: SUCCEEDED
    Math/floor.php: SUCCEEDED
    Math/fmod.php: SUCCEEDED
    Math/hexdec.php: SUCCEEDED
    Math/max.php: SUCCEEDED
    Math/min.php: SUCCEEDED
    Math/modulo_warn.php: SUCCEEDED
    Math/octdec.php: SUCCEEDED
    Math/pow.php: SUCCEEDED
    Math/rad2deg.php: SUCCEEDED
    Math/round.php: SUCCEEDED
    Math/sin.php: SUCCEEDED
    Math/sqrt.php: SUCCEEDED
    Math/tan.php: SUCCEEDED
    Math/uniqid.php: SUCCEEDED
    Misc/calendar_extension.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0
    0
    2375840
    0
    14
    32
    2
    There are 31 days in August 2003
    There are 28 days in February 2003
    There are 29 days in February 2004
    There are 31 days in December 2034
    1748326
    1748324
    374867
    0
    322f32322f35373633
    ebe120e7f9e5ef20e4faf9f1e2
    ebe120e7f9e5ef20e427faf9f1e2
    ebe120e7f9e5ef20e420e0ecf4e9ed20faf9f1e2
    ebe120e7f9e5ef20e42720e0ecf4e9ed20faf9f1e2
    eb22e120e7f9e5ef20e4faf9f122e2
    e12720e7f9e5ef20e4faf9f122e2
    e12720e7f9e5ef20e427faf9f122e2
    e12720e7f9e5ef20e420e0ecf4e9ed20faf9f122e2
    e12720e7f9e5ef20e42720e0ecf4e9ed20faf9f122e2
    Error: Call to undefined function: 'frenchtojd' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt at expression on line 2, column 1.
    Misc/fgetcsv%20%2327492.php: SUCCEEDED
    Misc/hash%20functions%20%2326667.php: SUCCEEDED
    Misc/ini_parse.php: SUCCEEDED
    Misc/json%20%2327838.php: SUCCEEDED
    Misc/lexer.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    T_INLINE_HTML
    311 '\r\n'
    T_OPEN_TAG
    368 '&lt;?'
    T_WHITESPACE
    371 ' \r\n\r\n'
    T_FINAL
    345 'final'
    T_WHITESPACE
    371 ' '
    T_CLASS
    353 'class'
    T_WHITESPACE
    371 ' '
    T_STRING
    307 'A'
    T_WHITESPACE
    371 ' \r\n'
        '{'
    T_WHITESPACE
    371 ' \r\n  '
    T_FUNCTION
    334 'function'
    T_WHITESPACE
    371 ' '
    T_STRING
    307 '__get'
        '('
    T_VARIABLE
    309 '$x'
        ')'
    T_WHITESPACE
    371 ' \r\n  '
        '{'
    T_WHITESPACE
    371 ' \r\n    '
    T_VARIABLE
    309 '$x'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_START_HEREDOC
    372 '&lt;&lt;&lt;EOOOOOOOOOOOOOOT\r\n'
    T_ENCAPSED_AND_WHITESPACE
    314 '         &lt;&lt;&lt;hello\r\nEOOOOOOOOOOOOOOt;\r\nEOOOOOOOOOOOOOT;\r\n'
    T_END_HEREDOC
    373 'EOOOOOOOOOOOOOOT'
        ';'
    T_WHITESPACE
    371 '\r\n\r\n    '
        '$'
    T_VARIABLE
    309 '$y'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_ARRAY
    360 'array'
    T_WHITESPACE
    371 ' '
        '('
    T_LNUMBER
    305 '1'
        ','
    T_DNUMBER
    306 '100000000000000'
        ','
    T_DNUMBER
    306 '999999999999999999999999999999999'
        ','
    T_STRING
    307 'true'
        ','
    T_STRING
    307 'false'
        ')'
        ';'
    T_WHITESPACE
    371 '\r\n    '
        '$'
        '{'
        '&quot;'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
    T_DOLLAR_OPEN_CURLY_BRACES
    374 '${'
        '$'
        '{'
    T_CONSTANT_ENCAPSED_STRING
    315 '&quot;xxx&quot;'
        '}'
        '}'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
        '&quot;'
        '}'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_LNUMBER
    305 '1'
        ';'
    T_WHITESPACE
    371 '\r\n    '
        '$'
        '{'
        '&quot;'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
    T_DOLLAR_OPEN_CURLY_BRACES
    374 '${'
        '$'
        '{'
        '&quot;'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
    T_VARIABLE
    309 '$x'
    T_ENCAPSED_AND_WHITESPACE
    314 '-&gt;$$'
    T_VARIABLE
    309 '$x0xx'
        '&quot;'
        '}'
        '}'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
        '&quot;'
        '}'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_LNUMBER
    305 '1'
        ';'
    T_WHITESPACE
    371 '\r\n  '
        '}'
    T_WHITESPACE
    371 ' \r\n'
        '}'
    T_WHITESPACE
    371 '\r\n\r\n'
    T_CLOSE_TAG
    370 '?&gt;'
    '
    '
        '&lt;?'
        ' 
    
    '
        'final'
        ' '
        'class'
        ' '
        'A'
        ' 
    '
        '{'
        ' 
      '
        'function'
        ' '
    259
    259 '
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt at expression on line 10, column 7.
    '
        '('
        '$x'
        ')'
        ' 
      '
        '{'
        ' 
        '
        '$x'
        ' '
        '='
        ' '
        '&lt;&lt;&lt;EOOOOOOOOOOOOOOT
    '
        '         &lt;&lt;&lt;'
        'hello'
        '
    '
        'EOOOOOOOOOOOOOOt;
    '
        'EOOOOOOOOOOOOOT;
    '
        'EOOOOOOOOOOOOOOT'
        ';'
        '
    
        '
        '$'
        '$y'
        ' '
        '='
        ' '
        'array'
        ' '
        '('
        '1'
        ','
        '100000000000000'
        ','
        '999999999999999999999999999999999'
        ','
    256
    256 '
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt at expression on line 10, column 7.
    '
        ','
    257
    257 '
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt at expression on line 10, column 7.
    '
        ')'
        ';'
        '
        '
        '$'
        '{'
        '&quot;'
        'x'
        '${'
        '$'
        '{'
    -29
    -29 '
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt at expression on line 10, column 7.
    '
        '}'
        '}'
        'x'
        '&quot;'
        '}'
        ' '
        '='
        ' '
        '1'
        ';'
        '
        '
        '$'
        '{'
        '&quot;'
        'x'
        '${'
        '$'
        '{'
        '&quot;'
        'x'
        '$x'
        '-&gt;'
        '$'
        '$'
        '$x0xx'
        '&quot;'
        '}'
        '}'
        'x'
        '&quot;'
        '}'
        ' '
        '='
        ' '
        '1'
        ';'
        '
      '
        '}'
        ' 
    '
        '}'
        '
    
    '
        '?&gt;'
    Misc/locale.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string(1) "C"
    double(1.54)
    double(Infinity)
    654564.145400
    Sat Saturday Apr April
    --------------
    string(19) "Danish_Denmark.1252"
    double(1.54)
    double(Infinity)
    654564,145400
    lo lordag apr april
    --------------
    string(25) "Czech_Czech Republic.1250"
    double(1.54)
    double(Infinity)
    654564,145400
    so sobota IV duben
    --------------
    string(1) "C"
    float(1.54)
    float(Infinity)
    654564.145400
    Sat Saturday Apr April
    --------------
    string(19) "Danish_Denmark.1252"
    float(1.54)
    float(Infinity)
    654564,145400
    lo lordag apr april
    --------------
    string(25) "Czech_Czech Republic.1250"
    float(1.54)
    float(Infinity)
    654564,145400
    so sobota 4 duben
    --------------
    Misc/output2.php: SUCCEEDED
    Misc/parse_url%20%2327377.php: SUCCEEDED
    Misc/parse_url_at_bug.php: SUCCEEDED
    Misc/stack_trace.php: FAILED
    Script hung upNo errorsSuccess
    Expected test outputReal script output
    Unhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---> System.IndexOutOfRangeException: Index was outside the bounds of the array.
       at PHP.Core.PhpStackFrame..ctor(ScriptContext context, StackFrame frame, FrameKinds kind)
       at PHP.Core.PhpStackTrace..ctor(ScriptContext context, StackTrace clrTrace)
       at PHP.Core.PhpStackTrace..ctor(ScriptContext context, Int32 skipFrames)
       at PHP.Library.Errors.Backtrace()
       at <stack_trace.inc>.<Script>.j(ScriptContext <context>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\stack_trace.inc:line 11
       at <stack_trace.inc>.<Script>.j(Object instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <stack_trace.inc>.<Script>.i(ScriptContext <context>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\stack_trace.inc:line 6
       at <stack_trace.inc>.<Script>.i(Object instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <^0>.<Global>.<?0>.h(ScriptContext <context>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt:line 14
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack, DTypeDesc caller)
       at PHP.Core.PhpCallback.InvokeInternal(Object[] args)
       at PHP.Core.PhpCallback.Invoke(Object[] args)
       at PHP.Library.PhpArrays.Map(DTypeDesc caller, PhpCallback map, PhpArray[] arrays)
       at <__input.txt>.<Script>.<Lambda>(ScriptContext <context>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt:line 4
       at <__input.txt>.<Script>.<Lambda>(Object instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <__input.txt>.<Script>.f(ScriptContext <context>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt:line 6
       at <__input.txt>.<Script>.f(Object instance, PhpStack stack)
       at <__input.txt>.<Script>.<Main>(ScriptContext <context>, Dictionary`2 <locals>, DObject , DTypeDesc , Boolean ) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt:line 18
       at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)
       at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)
       --- End of inner exception stack trace ---
       at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)
       at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)
       at <Global>.Run(String[] )
    
    Misc/str_getcsv%20%2326691.php: SUCCEEDED
    Misc/tokens.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    T_REQUIRE_ONCE = 258,
    T_REQUIRE = 259,
    T_EVAL = 260,
    T_INCLUDE_ONCE = 261,
    T_INCLUDE = 262,
    T_LOGICAL_OR = 263,
    T_LOGICAL_XOR = 264,
    T_LOGICAL_AND = 265,
    T_PRINT = 266,
    T_SR_EQUAL = 267,
    T_SL_EQUAL = 268,
    T_XOR_EQUAL = 269,
    T_OR_EQUAL = 270,
    T_AND_EQUAL = 271,
    T_MOD_EQUAL = 272,
    T_CONCAT_EQUAL = 273,
    T_DIV_EQUAL = 274,
    T_MUL_EQUAL = 275,
    T_MINUS_EQUAL = 276,
    T_PLUS_EQUAL = 277,
    T_BOOLEAN_OR = 278,
    T_BOOLEAN_AND = 279,
    T_IS_NOT_IDENTICAL = 280,
    T_IS_IDENTICAL = 281,
    T_IS_NOT_EQUAL = 282,
    T_IS_EQUAL = 283,
    T_IS_GREATER_OR_EQUAL = 284,
    T_IS_SMALLER_OR_EQUAL = 285,
    T_SR = 286,
    T_SL = 287,
    T_INSTANCEOF = 288,
    T_UNSET_CAST = 289,
    T_BOOL_CAST = 290,
    T_OBJECT_CAST = 291,
    T_ARRAY_CAST = 292,
    T_STRING_CAST = 293,
    T_DOUBLE_CAST = 294,
    T_INT_CAST = 295,
    T_DEC = 296,
    T_INC = 297,
    T_CLONE = 298,
    T_NEW = 299,
    T_EXIT = 300,
    T_IF = 301,
    T_ELSEIF = 302,
    T_ELSE = 303,
    T_ENDIF = 304,
    T_LNUMBER = 305,
    T_DNUMBER = 306,
    T_STRING = 307,
    T_STRING_VARNAME = 308,
    T_VARIABLE = 309,
    T_NUM_STRING = 310,
    T_INLINE_HTML = 311,
    T_CHARACTER = 312,
    T_BAD_CHARACTER = 313,
    T_ENCAPSED_AND_WHITESPACE = 314,
    T_CONSTANT_ENCAPSED_STRING = 315,
    T_ECHO = 316,
    T_DO = 317,
    T_WHILE = 318,
    T_ENDWHILE = 319,
    T_FOR = 320,
    T_ENDFOR = 321,
    T_FOREACH = 322,
    T_ENDFOREACH = 323,
    T_DECLARE = 324,
    T_ENDDECLARE = 325,
    T_AS = 326,
    T_SWITCH = 327,
    T_ENDSWITCH = 328,
    T_CASE = 329,
    T_DEFAULT = 330,
    T_BREAK = 331,
    T_CONTINUE = 332,
    T_GOTO = 333,
    T_FUNCTION = 334,
    T_CONST = 335,
    T_RETURN = 336,
    T_TRY = 337,
    T_CATCH = 338,
    T_THROW = 339,
    T_USE = 340,
    T_GLOBAL = 341,
    T_PUBLIC = 342,
    T_PROTECTED = 343,
    T_PRIVATE = 344,
    T_FINAL = 345,
    T_ABSTRACT = 346,
    T_STATIC = 347,
    T_VAR = 348,
    T_UNSET = 349,
    T_ISSET = 350,
    T_EMPTY = 351,
    T_HALT_COMPILER = 352,
    T_CLASS = 353,
    T_INTERFACE = 354,
    T_EXTENDS = 355,
    T_IMPLEMENTS = 356,
    T_OBJECT_OPERATOR = 357,
    T_DOUBLE_ARROW = 358,
    T_LIST = 359,
    T_ARRAY = 360,
    T_CLASS_C = 361,
    T_METHOD_C = 362,
    T_FUNC_C = 363,
    T_LINE = 364,
    T_FILE = 365,
    T_COMMENT = 366,
    T_DOC_COMMENT = 367,
    T_OPEN_TAG = 368,
    T_OPEN_TAG_WITH_ECHO = 369,
    T_CLOSE_TAG = 370,
    T_WHITESPACE = 371,
    T_START_HEREDOC = 372,
    T_END_HEREDOC = 373,
    T_DOLLAR_OPEN_CURLY_BRACES = 374,
    T_CURLY_OPEN = 375,
    T_PAAMAYIM_NEKUDOTAYIM = 376,
    T_DOUBLE_COLON = 376,
    T_NAMESPACE = 377,
    T_NS_C = 378,
    T_DIR = 379,
    T_NS_SEPARATOR = 380,
    T_INCLUDE = 129,
    T_INCLUDE_ONCE = 130,
    T_EVAL = 131,
    T_REQUIRE = 132,
    T_REQUIRE_ONCE = 133,
    T_LOGICAL_OR = 136,
    T_LOGICAL_XOR = 137,
    T_LOGICAL_AND = 138,
    T_PRINT = 139,
    T_PLUS_EQUAL = 140,
    T_MINUS_EQUAL = 141,
    T_MUL_EQUAL = 142,
    T_DIV_EQUAL = 143,
    T_CONCAT_EQUAL = 144,
    T_MOD_EQUAL = 145,
    T_AND_EQUAL = 146,
    T_OR_EQUAL = 147,
    T_XOR_EQUAL = 148,
    T_SL_EQUAL = 149,
    T_SR_EQUAL = 150,
    T_BOOLEAN_OR = 151,
    T_BOOLEAN_AND = 152,
    T_IS_EQUAL = 153,
    T_IS_NOT_EQUAL = 154,
    T_IS_IDENTICAL = 155,
    T_IS_NOT_IDENTICAL = 156,
    T_IS_SMALLER_OR_EQUAL = 157,
    T_IS_GREATER_OR_EQUAL = 158,
    T_SL = 159,
    T_SR = 160,
    T_INC = 161,
    T_DEC = 162,
    T_NEW = 164,
    T_INSTANCEOF = 165,
    T_CLONE = 167,
    T_LNUMBER = 168,
    T_DNUMBER = 170,
    T_STRING = 171,
    T_STRING_VARNAME = 172,
    T_VARIABLE = 173,
    T_NUM_STRING = 174,
    T_INLINE_HTML = 175,
    T_CHARACTER = 176,
    T_BAD_CHARACTER = 177,
    T_ENCAPSED_AND_WHITESPACE = 178,
    T_CONSTANT_ENCAPSED_STRING = 179,
    T_EXIT = 180,
    T_IF = 181,
    T_ELSEIF = 182,
    T_ELSE = 183,
    T_ENDIF = 184,
    T_ECHO = 185,
    T_DO = 186,
    T_WHILE = 187,
    T_ENDWHILE = 188,
    T_FOR = 189,
    T_ENDFOR = 190,
    T_FOREACH = 191,
    T_ENDFOREACH = 192,
    T_AS = 193,
    T_SWITCH = 194,
    T_ENDSWITCH = 195,
    T_CASE = 196,
    T_DEFAULT = 197,
    T_BREAK = 198,
    T_CONTINUE = 199,
    T_FUNCTION = 200,
    T_CONST = 201,
    T_RETURN = 202,
    T_GLOBAL = 203,
    T_STATIC = 204,
    T_VAR = 205,
    T_UNSET = 206,
    T_ISSET = 207,
    T_EMPTY = 208,
    T_CLASS = 209,
    T_EXTENDS = 210,
    T_OBJECT_OPERATOR = 211,
    T_DOUBLE_ARROW = 212,
    T_LIST = 213,
    T_ARRAY = 214,
    T_CLASS_C = 215,
    T_METHOD_C = 216,
    T_FUNC_C = 217,
    T_LINE = 218,
    T_FILE = 219,
    T_DIR = 220,
    T_COMMENT = 221,
    T_DOC_COMMENT = 222,
    T_OPEN_TAG = 227,
    T_OPEN_TAG_WITH_ECHO = 228,
    T_CLOSE_TAG = 229,
    T_WHITESPACE = 230,
    T_START_HEREDOC = 231,
    T_END_HEREDOC = 232,
    T_DOLLAR_OPEN_CURLY_BRACES = 233,
    T_CURLY_OPEN = 234,
    T_DOUBLE_COLON = 235,
    T_PAAMAYIM_NEKUDOTAYIM = 235,
    T_GOTO = 237,
    T_TRY = 238,
    T_CATCH = 239,
    T_THROW = 240,
    T_INTERFACE = 241,
    T_IMPLEMENTS = 242,
    T_ABSTRACT = 243,
    T_FINAL = 244,
    T_PRIVATE = 245,
    T_PROTECTED = 246,
    T_PUBLIC = 247,
    T_BOOL_CAST = 287,
    T_INT_CAST = 290,
    T_DOUBLE_CAST = 296,
    T_STRING_CAST = 299,
    T_ARRAY_CAST = 302,
    T_OBJECT_CAST = 303,
    T_UNSET_CAST = 304,
    T_HALT_COMPILER = 351,
    Misc/user_error_handlers.php: SUCCEEDED
    Objects/accessing%20property%20line%20number%20%2326052.php: SUCCEEDED
    Objects/conditional1.php: SUCCEEDED
    Objects/conditional2.php: SUCCEEDED
    Objects/conditional_base_class.php: SUCCEEDED
    Objects/constant_test.php: SUCCEEDED
    Objects/evaled_parent.php: SUCCEEDED
    Objects/getter_setter_bug28444.php: SUCCEEDED
    Objects/instanceof.php: SUCCEEDED
    Objects/new_via_unknown_ctor.php: SUCCEEDED
    Objects/object_creation_test.php: SUCCEEDED
    Objects/overrides%20%231285.php: SUCCEEDED
    Objects/static_field_test.php: SUCCEEDED
    Objects/static_inheritence.php: SUCCEEDED
    Objects/static_method_test.php: SUCCEEDED
    Objects/static_object_vars.php: SUCCEEDED
    Objects/sys_class_const.php: SUCCEEDED
    Objects/this2.php: SUCCEEDED
    RegEx/backreferences.php: SUCCEEDED
    RegEx/dolar_escape.php: SUCCEEDED
    RegEx/ereg.php: SUCCEEDED
    RegEx/namedbackref.php: SUCCEEDED
    RegEx/namedgroups.php: SUCCEEDED
    RegEx/preg_match_unmatched_groups.php: SUCCEEDED
    RegEx/preg_replace_eval.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ab"01300 as"00da sd"0asdsa das asd 11asd a1sd a
    ab"01300 as"00da sd"0(aasdasdkjask,$a,\,\l,a,s,d,a,s,d,k,j,a,s,${120})(ldjaklsdjalk,$l,\,\l,d,j,a,k,l,s,d,j,a,l,${120})djdsa das asd 11asd a1sd a
    ab"01300 as"00da sd"0asdsa das asd 11asd a1sd a
    ab"01300 as"00da sd"0(aasdasdkjask,$a,\,\l,a,s,d,a,s,d,k,j,,,${120})(ldjaklsdjalk,$l,\,\l,d,j,a,k,l,s,d,j,,,${120})djdsa das asd 11asd a1sd a
    RegEx/regexp-sql.php: SUCCEEDED
    RegEx/regexp_smiles.php: SUCCEEDED
    RegEx/Perl/cache.php: SUCCEEDED
    RegEx/Perl/grep1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      [3] => string(3) "1.5"
      [6] => string(5) "58.54"
    }
    Notice: preg_grep(): Array to string conversion in D:\Documents\Projects\Phalanger\Main\Testing\Tests\RegEx\Perl\__input.txt at expression on line 5, column 1.
    array(2) {
      [3]=>
      string(3) "1.5"
      [6]=>
      string(5) "58.54"
    }
    RegEx/Perl/grep2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Food  array
    (
      [0] => apple
      [1] => banana
      [2] => squid
      [3] => pear
    )
    Fruit array
    (
      [0] => apple
      [1] => banana
      [3] => pear
    )
    Food  Array
    (
        [0] => apple
        [1] => banana
        [2] => squid
        [3] => pear
    )
    Fruit Array
    (
        [0] => apple
        [1] => banana
        [3] => pear
    )
    RegEx/Perl/match1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array [empty]
    array
    (
      [0] => array
      (
        [0] => def
        [1] => 3
      )
    )
    Array
    (
    )
    Array
    (
        [0] => Array
        (
            [0] => def
            [1] => 3
        )
    
    )
    RegEx/Perl/match10.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    (
      [0] => 1231
      [1] => 1
      [2] => 23
      [3] => 1
    )
    Array
    (
        [0] => 1231
        [1] => 1
        [2] => 23
        [3] => 1
    )
    RegEx/Perl/match2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    (
      [0] => array
      (
        [0] => def
        [1] => 0
      )
    )
    Array
    (
        [0] => Array
        (
            [0] => def
            [1] => 0
        )
    
    )
    RegEx/Perl/match3.php: SUCCEEDED
    RegEx/Perl/match4.php: SUCCEEDED
    RegEx/Perl/match5.php: SUCCEEDED
    RegEx/Perl/match6.php: SUCCEEDED
    RegEx/Perl/match7.php: SUCCEEDED
    RegEx/Perl/match8.php: SUCCEEDED
    RegEx/Perl/match9.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    (
      [0] => 209.6.145.47 - - [22/Nov/2003:19:02:30 -0500] "GET /dir/doc.htm HTTP/1.0" 200 6776 "http://search.yahoo.com/search?p=key+words=UTF-8" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)"
      [1] => 209.6.145.47
      [2] => -
      [3] => -
      [4] => 22/Nov/2003:19:02:30 -0500
      [5] => GET
      [6] => /dir/doc.htm
      [7] => HTTP
      [8] => 1.0
      [9] => 200
      [10] => 6776
      [11] => "http://search.yahoo.com/search?p=key+words=UTF-8"
      [12] => "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)"
    )
    Array
    (
        [0] => 209.6.145.47 - - [22/Nov/2003:19:02:30 -0500] "GET /dir/doc.htm HTTP/1.0" 200 6776 "http://search.yahoo.com/search?p=key+words=UTF-8" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)"
        [1] => 209.6.145.47
        [2] => -
        [3] => -
        [4] => 22/Nov/2003:19:02:30 -0500
        [5] => GET
        [6] => /dir/doc.htm
        [7] => HTTP
        [8] => 1.0
        [9] => 200
        [10] => 6776
        [11] => "http://search.yahoo.com/search?p=key+words=UTF-8"
        [12] => "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)"
    )
    RegEx/Perl/match_all1.php: SUCCEEDED
    RegEx/Perl/match_all2.php: SUCCEEDED
    RegEx/Perl/match_all3.php: SUCCEEDED
    RegEx/Perl/match_all4.php: SUCCEEDED
    RegEx/Perl/match_dollar.php: SUCCEEDED
    RegEx/Perl/overflow.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string("kfkaj +j k45´┐Ż´┐Ż´┐Ż´┐Ż´┐Ż3#$%^&kjakfjkaj|kfj")
    string("kfkaj +j k45�����3#$%^&kjakfjkaj|kfj")
    RegEx/Perl/quote1.php: SUCCEEDED
    RegEx/Perl/quote2.php: SUCCEEDED
    RegEx/Perl/quote3.php: SUCCEEDED
    RegEx/Perl/replace1.php: SUCCEEDED
    RegEx/Perl/replace2.php: SUCCEEDED
    RegEx/Perl/replace3.php: SUCCEEDED
    RegEx/Perl/replace4.php: SUCCEEDED
    RegEx/Perl/replace5.php: SUCCEEDED
    RegEx/Perl/replace6.php: SUCCEEDED
    RegEx/Perl/replace7.php: SUCCEEDED
    RegEx/Perl/replace8.php: SUCCEEDED
    RegEx/Perl/replace9.php: SUCCEEDED
    RegEx/Perl/replace_callback1.php: SUCCEEDED
    RegEx/Perl/replace_callback2.php: SUCCEEDED
    RegEx/Perl/split1.php: SUCCEEDED
    RegEx/Perl/split2.php: SUCCEEDED
    RegEx/Perl/split3.php: SUCCEEDED
    RegEx/Perl/split4.php: SUCCEEDED
    RegEx/Perl/split5.php: SUCCEEDED
    RegEx/Perl/split6.php: SUCCEEDED
    RegEx/Perl/ungreedy.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    aaa
    a
    aaa
    
    a
    aa
    aaa
    aa
    aaa
    aaa
    a
    aaa
    a
    a
    aa
    aaa
    aa
    aaa
    RegEx/Perl/unsuccessful-preg_match_all.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0
    4
    1
    4
    0
    4
    1
    7
    RegEx/Perl/withoutdelimiters.php: SUCCEEDED
    SPL/ArrayAccess_offsetExists.php: SUCCEEDED
    SPL/Autoload_ctor.php: SUCCEEDED
    SPL/Autoload_extends.php: SUCCEEDED
    SPL/exceptions.php: SUCCEEDED
    Strings/addcslashes.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    \f\o\o\[ \]
    Issues a Warning:
    // echo addcslashes("zoo['.']", 'z..A');
    // output:  \zoo['\.']
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 4, column 1.
    
    Issues a Warning:
    // echo addcslashes("zoo['.']", 'z..A');
    // output:  \zoo['\.']
    Strings/addslashes.php: SUCCEEDED
    Strings/chunk_split.php: SUCCEEDED
    Strings/concat.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string(2) "ab"
    string(2) "ab"
    string(2) "ab"
    string(2) "ab"
    string(2) "ab"
    string(2) "aB"
    string(2) "Ab"
    string(2) "AB"
    string(2) "ab"
    string(2) "a1"
    string(2) "1b"
    string(2) "11"
    string(2) "ab"
    string(2) "aB"
    string(2) "Ab"
    string[binary](2) "\x41\x42"
    string(2) "ab"
    string(2) "ab"
    string(2) "ab"
    string(2) "ab"
    string(2) "ab"
    string(2) "aB"
    string(2) "Ab"
    string(2) "AB"
    string(2) "ab"
    string(2) "a1"
    string(2) "1b"
    string(2) "11"
    string(2) "ab"
    string[binary](2) "aB"
    string[binary](2) "Ab"
    string[binary](2) "AB"
    Strings/count_chars.php: SUCCEEDED
    Strings/crc32.php: SUCCEEDED
    Strings/crypt.php: SUCCEEDED
    Strings/crypt2.php: SUCCEEDED
    Strings/echo.php: SUCCEEDED
    Strings/explode.php: SUCCEEDED
    Strings/get_html_translation_table.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <hr>[&] => &amp;
    [>] => &gt;
    [<] => &lt;
    ["] => &quot;
    <hr>Hallo &amp; &lt;Frau&gt; &amp; Kr&iuml;&iquest;&frac12;mer
    <hr>[&] => &amp;
    [>] => &gt;
    [<] => &lt;
    ["] => &quot;
    <hr>Hallo &amp; &lt;Frau&gt; &amp; Kr�mer
    Strings/mb_strlen.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Call to undefined function mb_strlen() in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 4
    Error: Call to undefined function: 'mb_strlen' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 4, column 1.
    Strings/nl2br.php: SUCCEEDED
    Strings/pack.php: SUCCEEDED
    Strings/pos.php: SUCCEEDED
    Strings/runtime-quotes.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    fread = (x''y"z)
    fgets = (x''y"z)
    file[0] = (x''y"z)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    
    Warning: fopen(runtime-quotes2.txt): failed to open stream: Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 33
    
    Warning: fwrite() expects parameter 1 to be resource, boolean given in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 35
    fwrite = ()
    
    Warning: fputs() expects parameter 1 to be resource, boolean given in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 38
    fputs = ()
    
    Warning: fclose() expects parameter 1 to be resource, boolean given in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 41
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (x'y"z)
    fgets = (x'y"z)
    file[0] = (x'y"z)
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (a\'b"\\ca\)
    fgets = (a\'b"\\ca\'b"\\c)
    file[0] = (a\'b"\\ca\'b"\\c)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    e'e
    e''e
    e'e
    e'e
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    e'e
    e'e
    e'e
    e'e
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    fread = (x''y"z)
    fgets = (x''y"z)
    file[0] = (x''y"z)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    
    Warning: fopen(): Unable to access (D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\runtime-quotes2.txt): Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 33, column 3.
    
    Warning: Cannot convert boolean to resource implicitly in a call to function fwrite() in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 35, column 3.
    fwrite = (0)
    
    Warning: Cannot convert boolean to resource implicitly in a call to function fputs() in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 38, column 3.
    fputs = (0)
    
    Warning: Cannot convert boolean to resource implicitly in a call to function fclose() in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 41, column 3.
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (x'y"z)
    fgets = (x'y"z)
    file[0] = (x'y"z)
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (a\'b"\\ca\)
    fgets = (a\'b"\\ca\'b"\\c)
    file[0] = (a\'b"\\ca\'b"\\c)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    e'e
    e''e
    e'e
    e'e
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    e'e
    e'e
    e'e
    e'e
    Strings/sprintf.php: SUCCEEDED
    Strings/sprintf2.php: SUCCEEDED
    Strings/strtr.php: SUCCEEDED
    Strings/str_ireplace.php: SUCCEEDED
    Strings/str_replace.php: SUCCEEDED
    Strings/str_word_count.php: SUCCEEDED
    Strings/substr_operations.php: SUCCEEDED
    Strings/wordwrap.php: SUCCEEDED
    Variables/advanced_serialize.php: SUCCEEDED
    Variables/arguments.php: SUCCEEDED
    Variables/bitwise.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "00"
    string(2) "31"
    string(2) "31"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    0
    0
    0
    5
    0
    5
    40
    5
    45
    string(48) "000000000000000000000000000000000000000000000000"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(14) "31323331323331"
    string(2) "30"
    string(14) "31323331323331"
    string(16) "3635343635343536"
    string(2) "30"
    string(16) "3635343635343536"
    string(14) "337a5e8be43d7a"
    string(14) "00002130120201"
    string(48) "337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42"
    string(16) "347d598ce33a7e77"
    string(16) "0200243214040100"
    string(48) "367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42"
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "00"
    string(2) "31"
    string(2) "31"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    0
    -9223372036854775808
    -9223372036854775808
    -9223372036854775803
    0
    -9223372036854775803
    40
    5
    45
    string(48) "000000000000000000000000000000000000000000000000"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(14) "31323331323331"
    string(2) "30"
    string(14) "31323331323331"
    string(16) "3635343635343536"
    string(2) "30"
    string(16) "3635343635343536"
    string(14) "337a5e8be43d7a"
    string(14) "00002130120201"
    string(48) "337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42"
    string(16) "347d598ce33a7e77"
    string(16) "0200243214040100"
    string(48) "367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42"
    Variables/comparisons.php: SUCCEEDED
    Variables/constant.php: SUCCEEDED
    Variables/extract%20refs.php: SUCCEEDED
    Variables/extract.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    EXTR_PREFIX_ALL
    integer(4)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
      'prefix_non_existent' => integer(1)
    }
    <hr>EXTR_PREFIX_INVALID
    integer(5)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => integer(2)
      'non_existent' => integer(1)
      'prefix_' => integer(1)
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => 'hello'
    }
    <hr>EXTR_PREFIX_SAME
    integer(3)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'non_existent' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>EXTR_PREFIX_IF_EXISTS
    integer(3)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>
    EXTR_PREFIX_ALL
    integer(4)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
      'prefix_non_existent' => integer(1)
    }
    <hr>EXTR_PREFIX_INVALID
    integer(5)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => integer(2)
      'non_existent' => integer(1)
      'prefix_' => integer(1)
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => 'hello'
    }
    <hr>EXTR_PREFIX_SAME
    integer(4)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'non_existent' => integer(1)
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>EXTR_PREFIX_IF_EXISTS
    integer(3)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>
    Variables/func_get_args.php: SUCCEEDED
    Variables/is_number.php: SUCCEEDED
    Variables/serialize.php: SUCCEEDED
    Variables/unserialize_objects.php: SUCCEEDED
    Variables/var_dumping.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Array
    (
        [0] => 1
        [1] => 
        [2] => 1
        [3] => 1.2
        [4] => 
        [5] => asdas
        [6] => Array
            (
                [0] => 1
            )
    
        [7] => stdClass Object
            (
            )
    
        [8] => Resource id #1
    )
    array(9) {
      [0]=>
      bool(true)
      [1]=>
      bool(false)
      [2]=>
      int(1)
      [3]=>
      float(1.2)
      [4]=>
      NULL
      [5]=>
      string(5) "asdas"
      [6]=>
      array(1) {
        [0]=>
        int(1)
      }
      [7]=>
      object(stdClass)#1 (0) {
      }
      [8]=>
      resource(1) of type (stream)
    }
    array (
      0 => true,
      1 => false,
      2 => 1,
      3 => 1.2,
      4 => NULL,
      5 => 'asdas',
      6 => 
      array (
        0 => 1,
      ),
      7 => 
      stdClass::__set_state(array(
      )),
      8 => NULL,
    )
    Array
    (
        [0] => 1
        [1] => 
        [2] => 1
        [3] => 1.2
        [4] => 
        [5] => asdas
        [6] => Array
        (
            [0] => 1
        )
    
        [7] => stdClass Object
        (
        )
    
        [8] => resource id #4
    
    )
    array(9) {
      [0]=>
      bool(true)
      [1]=>
      bool(false)
      [2]=>
      int(1)
      [3]=>
      float(1.2)
      [4]=>
      NULL
      [5]=>
      string(5) "asdas"
      [6]=>
      array(1) {
        [0]=>
        int(1)
      }
      [7]=>
      object(stdClass)(0) {
      }
      [8]=>
      resource(4) of type (stream)
    }
    array
    (
      '0' => true,
      '1' => false,
      '2' => 1,
      '3' => 1.2,
      '4' => NULL,
      '5' => 'asdas',
      '6' => array
      (
        '0' => 1
      ),
      '7' => class stdClass
      {
    
      },
      '8' => NULL
    )
    Xml/025.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
      'foo' => 'foobar'
    }
    array
    {
      'html' => 'http://www.w3.org/1999/xhtml'
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
    }
    array
    {
      'html' => 'http://www.w3.org/1999/xhtml'
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'foo' => 'foobar'
      'baz' => 'foobarbaz'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
    }
    array
    {
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
      'baz' => 'foobarbaz'
      'foo' => 'foobar'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
      'baz' => 'foobarbaz'
      'foo' => 'foobar'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
    }
    array
    {
    }
    Xml/026.php: SUCCEEDED
    Xml/027.php: SUCCEEDED
    Xml/028.php: SUCCEEDED
    Xml/029.php: SUCCEEDED
    Xml/030.php: SUCCEEDED
    Xml/032.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    FALSE
    FALSE
    FALSE
    TRUE
    TRUE
    TRUE
    Xml/033.php: SUCCEEDED
    Xml/bug26384.php: SUCCEEDED
    Xml/bug28721.php: SUCCEEDED
    Xml/bug28817.php: SUCCEEDED
    Xml/bug32615.php: SUCCEEDED
    Xml/bug33853.php: SUCCEEDED
    Xml/bug34276.php: SUCCEEDED
    Xml/bug35342.php: SUCCEEDED
    Xml/bug36756.php: SUCCEEDED
    Xml/bug37277.php: SUCCEEDED
    Xml/dom002.php: SUCCEEDED
    Xml/dom003.php: SUCCEEDED
    Xml/dom006.php: SUCCEEDED
    Xml/dom007.php: SUCCEEDED
    Xml/dom_set_attr_node.php: SUCCEEDED
    Xml/xmlhandler.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test begins
    <br/>
    <br/>test begins
    <br/>empty begins
    <br/>empty ends
    <br/>nocontent begins
    <br/>nocontent ends
    <br/>content begins
    <br/>empty begins
    <br/>empty ends
    <br/>empty begins
    <br/>empty ends
    <br/>content ends
    <br/>empty begins
    <br/>empty ends
    <br/>empty begins
    <br/>empty ends
    <br/>test ends
    <br/>Test ends
    <br/>
    <br/>
    Test begins
    <br/>
    <br/>
    Error: Call to undefined function: 'xml_parser_create' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Xml\__input.txt at expression on line 18, column 3.
    Xml/xslt001.php: SUCCEEDED
    Xml/xslt002.php: SUCCEEDED
    Xml/xslt003.php: SUCCEEDED
    Xml/xslt004.php: SUCCEEDED
    Xml/xslt005.php: SUCCEEDED
    Xml/xslt006.php: SUCCEEDED
    Xml/xslt007.php: SUCCEEDED
    Xml/xslt010.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test 10: EXSLT Support
      
      
      Test Date : 0001-12-31Z
        year                 : 1
        leap-year            : false
        month-in-year        : 12
        month-name           : December
        month-abbreviation   : Dec
        week-in-year         : 1
        day-in-year          : 365
        day-in-month         : 31
        day-of-week-in-month : 5
        day-in-week          : 2
        day-name             : Monday
        day-abbreviation     : Mon
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : 3000-01-31
        year                 : 3000
        leap-year            : false
        month-in-year        : 1
        month-name           : January
        month-abbreviation   : Jan
        week-in-year         : 5
        day-in-year          : 31
        day-in-month         : 31
        day-of-week-in-month : 5
        day-in-week          : 6
        day-name             : Friday
        day-abbreviation     : Fri
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : 2000-02-29
        year                 : 2000
        leap-year            : true
        month-in-year        : 2
        month-name           : February
        month-abbreviation   : Feb
        week-in-year         : 9
        day-in-year          : 60
        day-in-month         : 29
        day-of-week-in-month : 5
        day-in-week          : 3
        day-name             : Tuesday
        day-abbreviation     : Tue
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : 9990001-12-31Z
        year                 : 9990001
        leap-year            : false
        month-in-year        : 12
        month-name           : December
        month-abbreviation   : Dec
        week-in-year         : 1
        day-in-year          : 365
        day-in-month         : 31
        day-of-week-in-month : 5
        day-in-week          : 2
        day-name             : Monday
        day-abbreviation     : Mon
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : -0004-02-29
        year                 : -4
        leap-year            : true
        month-in-year        : 2
        month-name           : February
        month-abbreviation   : Feb
        week-in-year         : 9
        day-in-year          : 60
        day-in-month         : 29
        day-of-week-in-month : 5
        day-in-week          : 1
        day-name             : Sunday
        day-abbreviation     : Sun
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
    Test 10: EXSLT Support
    Warning: Cannot find a script or an extension object associated with namespace 'http://exslt.org/dates-and-times'. in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Xml\__input.txt at expression on line 14, column 3.
    
    Warning: Illegal string offset '-1' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Phalanger.inc at expression on line 7, column 6.
    Xml/xslt011.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test 11: php:function Support
    
    Warning: XSLTProcessor::transformToXml(): A PHP Object cannot be converted to a XPath-string in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Xml\__input.txt on line 18
    <?xml version="1.0"?>
    foobar - secondArg
    foobar - 
    this is from an external DomDocument
    from the Input Document
    static
    Test 11: php:function Support
    <?xml version="1.0" encoding="utf-8"?>foobar - secondArg
    foobar - 
    this is from an external DomDocument
    from the Input Document
    static
    not a DomNode object
    Xml/xslt012.php: SUCCEEDED
    ================================================ FILE: Testing/Tests/TestLogs/TestLog (1810).htm ================================================ PHP.NET Compiler test log

    PHP.NET Compiler test log

    (90%) 816 succeeded, 94 failed
    Test ResultCompiler error outputExpected test result
    @PHP/classes/array_access_001.php: SUCCEEDED
    @PHP/classes/array_access_002.php: SUCCEEDED
    @PHP/classes/array_access_003.php: SUCCEEDED
    @PHP/classes/array_access_004.php: SUCCEEDED
    @PHP/classes/array_access_005.php: SUCCEEDED
    @PHP/classes/array_access_006.php: SUCCEEDED
    @PHP/classes/array_access_007.php: SUCCEEDED
    @PHP/classes/array_access_008.php: SUCCEEDED
    @PHP/classes/array_access_009.php: SUCCEEDED
    @PHP/classes/array_access_010.php: SUCCEEDED
    @PHP/classes/array_access_011.php: SUCCEEDED
    @PHP/classes/array_access_013.php: SUCCEEDED
    @PHP/classes/assign_op_property_001.php: SUCCEEDED
    @PHP/classes/autoload_001.php: SUCCEEDED
    @PHP/classes/autoload_002.php: SUCCEEDED
    @PHP/classes/autoload_003.php: SUCCEEDED
    @PHP/classes/autoload_005.php: SUCCEEDED
    @PHP/classes/autoload_006.php: SUCCEEDED
    @PHP/classes/bug23951.php: SUCCEEDED
    @PHP/classes/bug24399.php: SUCCEEDED
    @PHP/classes/bug24445.php: SUCCEEDED
    @PHP/classes/bug26737.php: SUCCEEDED
    @PHP/classes/bug27468.php: SUCCEEDED
    @PHP/classes/bug27504.php: SUCCEEDED
    @PHP/classes/class_example.php: SUCCEEDED
    @PHP/classes/class_stdclass.php: SUCCEEDED
    @PHP/classes/clone_001.php: SUCCEEDED
    @PHP/classes/clone_002.php: SUCCEEDED
    @PHP/classes/clone_003.php: SUCCEEDED
    @PHP/classes/clone_004.php: SUCCEEDED
    @PHP/classes/clone_006.php: SUCCEEDED
    @PHP/classes/constants_scope_001.php: SUCCEEDED
    @PHP/classes/ctor_dtor.php: SUCCEEDED
    @PHP/classes/ctor_dtor_inheritance.php: SUCCEEDED
    @PHP/classes/ctor_name_clash.php: SUCCEEDED
    @PHP/classes/dereferencing_001.php: SUCCEEDED
    @PHP/classes/destructor_and_echo.php: SUCCEEDED
    @PHP/classes/destructor_and_references.php: SUCCEEDED
    @PHP/classes/destructor_inheritance.php: SUCCEEDED
    @PHP/classes/destructor_visibility_003.php: SUCCEEDED
    @PHP/classes/factory_001.php: SUCCEEDED
    @PHP/classes/factory_and_singleton_001.php: SUCCEEDED
    @PHP/classes/factory_and_singleton_002.php: SUCCEEDED
    @PHP/classes/final.php: SUCCEEDED
    @PHP/classes/incdec_property_001.php: SUCCEEDED
    @PHP/classes/incdec_property_002.php: SUCCEEDED
    @PHP/classes/incdec_property_003.php: SUCCEEDED
    @PHP/classes/incdec_property_004.php: SUCCEEDED
    @PHP/classes/inheritance.php: SUCCEEDED
    @PHP/classes/inheritance_002.php: SUCCEEDED
    @PHP/classes/interfaces_001.php: SUCCEEDED
    @PHP/classes/interface_construct.php: SUCCEEDED
    @PHP/classes/interface_doubled.php: SUCCEEDED
    @PHP/classes/interface_implemented.php: SUCCEEDED
    @PHP/classes/iterators_001.php: SUCCEEDED
    @PHP/classes/iterators_002.php: SUCCEEDED
    @PHP/classes/iterators_003.php: SUCCEEDED
    @PHP/classes/iterators_004.php: SUCCEEDED
    @PHP/classes/iterators_006.php: SUCCEEDED
    @PHP/classes/iterators_007.php: SUCCEEDED
    @PHP/classes/object_reference_001.php: SUCCEEDED
    @PHP/classes/private_001.php: SUCCEEDED
    @PHP/classes/private_002.php: SUCCEEDED
    @PHP/classes/private_003.php: SUCCEEDED
    @PHP/classes/private_003b.php: SUCCEEDED
    @PHP/classes/private_004.php: SUCCEEDED
    @PHP/classes/private_004b.php: SUCCEEDED
    @PHP/classes/private_005.php: SUCCEEDED
    @PHP/classes/private_005b.php: SUCCEEDED
    @PHP/classes/private_006.php: SUCCEEDED
    @PHP/classes/private_006b.php: SUCCEEDED
    @PHP/classes/private_007.php: SUCCEEDED
    @PHP/classes/private_007b.php: SUCCEEDED
    @PHP/classes/private_members.php: SUCCEEDED
    @PHP/classes/private_redeclare.php: SUCCEEDED
    @PHP/classes/protected_001.php: SUCCEEDED
    @PHP/classes/protected_001b.php: SUCCEEDED
    @PHP/classes/protected_002.php: SUCCEEDED
    @PHP/classes/serialize_001.php: SUCCEEDED
    @PHP/classes/singleton_001.php: SUCCEEDED
    @PHP/classes/static_properties_001.php: SUCCEEDED
    @PHP/classes/type_hinting_001.php: SUCCEEDED
    @PHP/classes/type_hinting_003.php: SUCCEEDED
    @PHP/classes/visibility_000c.php: SUCCEEDED
    @PHP/classes/visibility_001c.php: SUCCEEDED
    @PHP/classes/visibility_002c.php: SUCCEEDED
    @PHP/classes/visibility_003a.php: SUCCEEDED
    @PHP/classes/visibility_003c.php: SUCCEEDED
    @PHP/classes/visibility_004a.php: SUCCEEDED
    @PHP/classes/visibility_004b.php: SUCCEEDED
    @PHP/classes/visibility_004c.php: SUCCEEDED
    @PHP/classes/visibility_005.php: SUCCEEDED
    @PHP/classes/__call_001.php: SUCCEEDED
    @PHP/classes/__set_data_corrupt.php: SUCCEEDED
    @PHP/classes/__set__get_001.php: SUCCEEDED
    @PHP/classes/__set__get_004.php: SUCCEEDED
    @PHP/classes/__set__get_005.php: SUCCEEDED
    @PHP/date/bug17988.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2002-06-25 12:18:48
    2002-06-25 14:18:48
    2002-06-25 13:18:48
    2002-06-25 12:18:48
    2002-06-25 18:18:48
    2002-06-25 14:18:48
    2002-06-25 14:18:48
    2002-06-25 18:18:48
    2002-06-25 10:18:48
    2002-06-25 17:18:48
    2002-06-25 11:18:48
    2002-06-25 17:48:48
    2002-06-25 10:48:48
    2002-06-25 14:18:48
    2002-06-25 14:18:48
    2002-06-25 13:18:48
    2002-06-25 12:18:48
    2002-06-25 18:18:48
    2002-06-25 14:18:48
    2002-06-25 14:18:48
    2002-06-25 18:18:48
    2002-06-25 10:18:48
    2002-06-25 17:18:48
    2002-06-25 11:18:48
    2002-06-25 17:48:48
    2002-06-25 10:48:48
    @PHP/date/bug26317.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2003-11-19 17:20:42
    2003-11-19 17:20:42
    2003-11-19 17:20:42
    2003-11-19 16:20:42
    2003-11-19 16:20:42
    2003-11-19 16:20:42
    @PHP/date/bug26320.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2003-11-19 12:30:42
    2003-11-19 13:30:42
    2003-11-19 12:30:42
    2003-11-19 12:30:42
    @PHP/date/bug28088.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    The following line rightly shows the correct date time:
    04/04/04 2145
    But the following line fails to show the correct date time:
    04/03/04 2245
    The following line rightly shows the correct date time:
    04/04/04 2345
    But the following line fails to show the correct date time:
    04/04/04 0045
    @PHP/date/bug28599.php: SUCCEEDED
    @PHP/date/bug29150.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2005-06-19 22:00:00
    2005-06-20 00:00:00
    @PHP/date/bug29585.php: SUCCEEDED
    @PHP/date/bug29595.php: SUCCEEDED
    @PHP/date/bug33056.php: SUCCEEDED
    @PHP/date/bug33452.php: SUCCEEDED
    @PHP/date/bug33562.php: SUCCEEDED
    @PHP/date/bug33563.php: SUCCEEDED
    @PHP/date/bug33578.php: SUCCEEDED
    @PHP/date/bug33869.php: SUCCEEDED
    @PHP/date/bug34676.php: SUCCEEDED
    @PHP/date/bug34771.php: SUCCEEDED
    @PHP/date/bug35143.php: SUCCEEDED
    @PHP/date/bug35414.php: SUCCEEDED
    @PHP/date/bug35422.php: SUCCEEDED
    @PHP/date/bug35425.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    integer(42)
    integer(1)
    integer(1)
    integer(1)
    integer(1)
    integer(0)
    integer(0)
    integer(1)
    integer(1)
    integer(31)
    integer(1104537661)
    integer(6)
    integer(53)
    integer(5)
    integer(2005)
    integer(0)
    integer(3600)
    integer(292)
    integer(1)
    integer(1)
    integer(1)
    integer(1)
    integer(0)
    integer(0)
    integer(1)
    integer(1)
    integer(31)
    integer(1104559261)
    integer(6)
    integer(53)
    integer(5)
    integer(2005)
    integer(0)
    integer(-18000)
    @PHP/date/bug35456.php: SUCCEEDED
    @PHP/date/bug35624.php: SUCCEEDED
    @PHP/date/bug35630.php: SUCCEEDED
    @PHP/date/bug35699.php: SUCCEEDED
    @PHP/date/bug35705.php: SUCCEEDED
    @PHP/date/bug35885.php: SUCCEEDED
    @PHP/date/bug35887.php: SUCCEEDED
    @PHP/date/date.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    c: 2003-01-23T13:20:59+01:00
    r: Thu, 23 Jan 2003 13:20:59 +0100
    c: 2003-01-23T13:20:59+01:00
    r: Thu, 23 Jan 2003 13:20:59 +0100
    c: 2003-01-23T12:20:59+00:00
    r: Thu, 23 Jan 2003 12:20:59 +0000
    c: 2003-01-23T13:20:59+01:00
    r: Thu, 23 Jan 2003 13:20:59 +0100
    @PHP/date/date_create-1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\date\__input.txt on line 28
    SKIP
    @PHP/date/date_create-2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\date\__input.txt on line 6
    SKIP
    @PHP/date/date_default_timezone_get-3.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Europe/Prague
    America/Chicago
    Europe/Rome
    America/Chicago
    @PHP/date/date_modify-1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\date\__input.txt on line 6
    SKIP
    @PHP/date/date_modify-2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\date\__input.txt on line 6
    SKIP
    @PHP/date/default-timezone-1.php: SUCCEEDED
    @PHP/date/default-timezone-2.php: SUCCEEDED
    @PHP/date/format-negative-timestamp.php: SUCCEEDED
    @PHP/date/strtotime.php: SUCCEEDED
    @PHP/date/timezone-configuration.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    1119125744
    1119125744
    1119125744
    1119125744
    1119129344
    1119125744
    @PHP/doc_examples/test001.php: SUCCEEDED
    @PHP/doc_examples/test002.php: SUCCEEDED
    @PHP/doc_examples/test003.php: SUCCEEDED
    @PHP/doc_examples/test004.php: SUCCEEDED
    @PHP/doc_examples/test005.php: SUCCEEDED
    @PHP/doc_examples/test006.php: SUCCEEDED
    @PHP/doc_examples/test007.php: SUCCEEDED
    @PHP/doc_examples/test008.php: SUCCEEDED
    @PHP/doc_examples/test009.php: SUCCEEDED
    @PHP/doc_examples/test010.php: SUCCEEDED
    @PHP/doc_examples/test011.php: SUCCEEDED
    @PHP/doc_examples/test013.php: SUCCEEDED
    @PHP/doc_examples/test014.php: SUCCEEDED
    @PHP/doc_examples/test015.php: SUCCEEDED
    @PHP/doc_examples/test016.php: SUCCEEDED
    @PHP/doc_examples/test017.php: SUCCEEDED
    @PHP/doc_examples/test018.php: SUCCEEDED
    @PHP/doc_examples/test019.php: SUCCEEDED
    @PHP/doc_examples/test020.php: SUCCEEDED
    @PHP/doc_examples/test021.php: SUCCEEDED
    @PHP/doc_examples/test022.php: SUCCEEDED
    @PHP/doc_examples/test023.php: SUCCEEDED
    @PHP/doc_examples/test024.php: SUCCEEDED
    @PHP/doc_examples/test025.php: SUCCEEDED
    @PHP/doc_examples/test026.php: SUCCEEDED
    @PHP/doc_examples/test027.php: SUCCEEDED
    @PHP/doc_examples/test028.php: SUCCEEDED
    @PHP/doc_examples/test029.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ´┐Żauky
    �auky
    @PHP/doc_examples/test030.php: SUCCEEDED
    @PHP/doc_examples/test031.php: SUCCEEDED
    @PHP/doc_examples/test032.php: SUCCEEDED
    @PHP/doc_examples/test033.php: SUCCEEDED
    @PHP/doc_examples/test034.php: SUCCEEDED
    @PHP/doc_examples/test035.php: SUCCEEDED
    @PHP/doc_examples/test036.php: SUCCEEDED
    @PHP/doc_examples/test037.php: SUCCEEDED
    @PHP/doc_examples/test038.php: SUCCEEDED
    @PHP/doc_examples/test039.php: SUCCEEDED
    @PHP/doc_examples/test040.php: SUCCEEDED
    @PHP/doc_examples/test041.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    call_user_func():
    hello world!
    Strict Standards: call_user_func(): Non-static method MyClass::myCallbackMethod() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\doc_examples\__input.txt at expression on line 17, column 1.
    Hello World!Hello World!
    @PHP/doc_examples/test042.php: SUCCEEDED
    @PHP/doc_examples/test043.php: SUCCEEDED
    @PHP/doc_examples/test044.php: SUCCEEDED
    @PHP/doc_examples/test045.php: SUCCEEDED
    @PHP/doc_examples/test046.php: SUCCEEDED
    @PHP/doc_examples/test047.php: SUCCEEDED
    @PHP/doc_examples/test048.php: SUCCEEDED
    @PHP/doc_examples/test049.php: SUCCEEDED
    @PHP/doc_examples/test050.php: SUCCEEDED
    @PHP/doc_examples/test051.php: SUCCEEDED
    @PHP/doc_examples/test052.php: SUCCEEDED
    @PHP/doc_examples/test053.php: SUCCEEDED
    @PHP/doc_examples/test054.php: SUCCEEDED
    @PHP/doc_examples/test055.php: SUCCEEDED
    @PHP/doc_examples/test056.php: SUCCEEDED
    @PHP/doc_examples/test057.php: SUCCEEDED
    @PHP/doc_examples/test058.php: SUCCEEDED
    @PHP/doc_examples/test059.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    Deprecated: Assigning the return value of new by reference is deprecated in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\doc_examples\__input.txt on line 4
    NULL
    object(stdClass)#1 (0) {
    }
    NULL
    object(stdClass)(0) {
    }
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\doc_examples\__input.txt(4,5): warning PHP0181: Assigning the return value of new by reference is deprecated
    
    @PHP/doc_examples/test060.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    Deprecated: Assigning the return value of new by reference is deprecated in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\doc_examples\__input.txt on line 9
    Static object: NULL
    Static object: NULL
    
    Static object: NULL
    Static object: object(stdClass)#3 (1) {
      ["property"]=>
      int(1)
    }
    Static object: NULL
    Static object: NULL
    
    Static object: NULL
    Static object: object(stdClass)(1) {
      ["property"]=>
      int(1)
    }
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\doc_examples\__input.txt(9,9): warning PHP0181: Assigning the return value of new by reference is deprecated
    
    @PHP/doc_examples/test061.php: SUCCEEDED
    @PHP/doc_examples/test062.php: SUCCEEDED
    @PHP/doc_examples/test063.php: SUCCEEDED
    @PHP/doc_examples/test064.php: SUCCEEDED
    @PHP/doc_examples/test065.php: SUCCEEDED
    @PHP/doc_examples/test066.php: SUCCEEDED
    @PHP/doc_examples/test067.php: SUCCEEDED
    @PHP/doc_examples/test068.php: SUCCEEDED
    @PHP/doc_examples/test069.php: SUCCEEDED
    @PHP/doc_examples/test070.php: SUCCEEDED
    @PHP/doc_examples/test071.php: SUCCEEDED
    @PHP/doc_examples/test072.php: SUCCEEDED
    @PHP/doc_examples/test073.php: SUCCEEDED
    @PHP/doc_examples/test074.php: SUCCEEDED
    @PHP/doc_examples/test075.php: SUCCEEDED
    @PHP/doc_examples/test076.php: SUCCEEDED
    @PHP/doc_examples/test077.php: SUCCEEDED
    @PHP/doc_examples/test078.php: SUCCEEDED
    @PHP/doc_examples/test079.php: SUCCEEDED
    @PHP/doc_examples/test080.php: SUCCEEDED
    @PHP/doc_examples/test081.php: SUCCEEDED
    @PHP/doc_examples/test082.php: SUCCEEDED
    @PHP/doc_examples/test083.php: SUCCEEDED
    @PHP/doc_examples/test084.php: SUCCEEDED
    @PHP/doc_examples/test085.php: SUCCEEDED
    @PHP/doc_examples/test086.php: SUCCEEDED
    @PHP/doc_examples/test087.php: SUCCEEDED
    @PHP/doc_examples/test088.php: SUCCEEDED
    @PHP/doc_examples/test089.php: SUCCEEDED
    @PHP/doc_examples/test090.php: SUCCEEDED
    @PHP/doc_examples/test091.php: SUCCEEDED
    @PHP/doc_examples/test092.php: SUCCEEDED
    @PHP/doc_examples/test093.php: SUCCEEDED
    @PHP/doc_examples/test094.php: SUCCEEDED
    @PHP/doc_examples/test095.php: SUCCEEDED
    @PHP/doc_examples/test096.php: SUCCEEDED
    @PHP/doc_examples/test097.php: SUCCEEDED
    @PHP/doc_examples/test098.php: SUCCEEDED
    @PHP/doc_examples/test099.php: SUCCEEDED
    @PHP/doc_examples/test100.php: SUCCEEDED
    @PHP/doc_examples/test102.php: SUCCEEDED
    @PHP/doc_examples/test103.php: SUCCEEDED
    @PHP/doc_examples/test104.php: SUCCEEDED
    @PHP/doc_examples/test105.php: SUCCEEDED
    @PHP/doc_examples/test107.php: SUCCEEDED
    @PHP/doc_examples/test108.php: SUCCEEDED
    @PHP/doc_examples/test109.php: SUCCEEDED
    @PHP/doc_examples/test110.php: SUCCEEDED
    @PHP/doc_examples/test111.php: SUCCEEDED
    @PHP/doc_examples/test112.php: SUCCEEDED
    @PHP/doc_examples/test113.php: SUCCEEDED
    @PHP/doc_examples/test114.php: SUCCEEDED
    @PHP/doc_examples/test115.php: SUCCEEDED
    @PHP/doc_examples/test116.php: SUCCEEDED
    @PHP/doc_examples/test117.php: SUCCEEDED
    @PHP/doc_examples/test118.php: SUCCEEDED
    @PHP/doc_examples/test119.php: SUCCEEDED
    @PHP/doc_examples/test120.php: SUCCEEDED
    @PHP/doc_examples/test121.php: SUCCEEDED
    @PHP/doc_examples/test122.php: SUCCEEDED
    @PHP/doc_examples/test123.php: SUCCEEDED
    @PHP/doc_examples/test124.php: SUCCEEDED
    @PHP/doc_examples/test125.php: SUCCEEDED
    @PHP/doc_examples/test126.php: SUCCEEDED
    @PHP/doc_examples/test127.php: SUCCEEDED
    @PHP/doc_examples/test128.php: SUCCEEDED
    @PHP/doc_examples/test129.php: SUCCEEDED
    @PHP/doc_examples/test130.php: SUCCEEDED
    @PHP/doc_examples/test131.php: SUCCEEDED
    @PHP/doc_examples/test132.php: SUCCEEDED
    @PHP/doc_examples/test133.php: SUCCEEDED
    @PHP/doc_examples/test134.php: SUCCEEDED
    @PHP/doc_examples/test136.php: SUCCEEDED
    @PHP/doc_examples/test137.php: SUCCEEDED
    @PHP/doc_examples/test138.php: SUCCEEDED
    @PHP/doc_examples/test139.php: SUCCEEDED
    @PHP/doc_examples/test148.php: SUCCEEDED
    @PHP/doc_examples/test149.php: SUCCEEDED
    @PHP/doc_examples/test150.php: SUCCEEDED
    @PHP/doc_examples/test151.php: SUCCEEDED
    @PHP/doc_examples/test152.php: SUCCEEDED
    @PHP/doc_examples/test153.php: SUCCEEDED
    @PHP/doc_examples/test154.php: SUCCEEDED
    @PHP/doc_examples/test155.php: SUCCEEDED
    @PHP/doc_examples/test156.php: SUCCEEDED
    @PHP/doc_examples/test158.php: SUCCEEDED
    @PHP/lang/001.php: SUCCEEDED
    @PHP/lang/002.php: SUCCEEDED
    @PHP/lang/003.php: SUCCEEDED
    @PHP/lang/004.php: SUCCEEDED
    @PHP/lang/005.php: SUCCEEDED
    @PHP/lang/006.php: SUCCEEDED
    @PHP/lang/007.php: SUCCEEDED
    @PHP/lang/008.php: SUCCEEDED
    @PHP/lang/009.php: SUCCEEDED
    @PHP/lang/010.php: SUCCEEDED
    @PHP/lang/011.php: SUCCEEDED
    @PHP/lang/012.php: SUCCEEDED
    @PHP/lang/013.php: SUCCEEDED
    @PHP/lang/014.php: SUCCEEDED
    @PHP/lang/015.php: SUCCEEDED
    @PHP/lang/016.php: SUCCEEDED
    @PHP/lang/017.php: SUCCEEDED
    @PHP/lang/018.php: SUCCEEDED
    @PHP/lang/019.php: SUCCEEDED
    @PHP/lang/020.php: SUCCEEDED
    @PHP/lang/021.php: SUCCEEDED
    @PHP/lang/022.php: SUCCEEDED
    @PHP/lang/023.php: SUCCEEDED
    @PHP/lang/024.php: SUCCEEDED
    @PHP/lang/025.php: SUCCEEDED
    @PHP/lang/026.php: SUCCEEDED
    @PHP/lang/027.php: SUCCEEDED
    @PHP/lang/028.php: SUCCEEDED
    @PHP/lang/030.php: SUCCEEDED
    @PHP/lang/032.php: SUCCEEDED
    @PHP/lang/036.php: SUCCEEDED
    @PHP/lang/037.php: SUCCEEDED
    @PHP/lang/038.php: SUCCEEDED
    @PHP/lang/039.php: SUCCEEDED
    @PHP/lang/040.php: SUCCEEDED
    @PHP/lang/bison1.php: SUCCEEDED
    @PHP/lang/bug17115.php: SUCCEEDED
    @PHP/lang/bug18872.php: SUCCEEDED
    @PHP/lang/bug19943.php: SUCCEEDED
    @PHP/lang/bug20175.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    Deprecated: Assigning the return value of new by reference is deprecated in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\lang\__input.txt on line 110
    foo_static()
    foo_global()
    foo:1
    foo_static()
    foo:1
    bar_static()
    bar_global()
    bar:1
    bar_static()
    bar:1
    wow_static()
    wow_global()
    wow:1
    wow_static()
    wow:1
    oop_test()
    oop_static()
    oop_class()
    oop:1
    oop_static()
    oop:1
    oop_test()
    oop_static()
    oop:1
    foo_static()
    foo_global()
    foo:1
    foo_static()
    foo:1
    bar_static()
    bar_global()
    bar:1
    bar_static()
    bar_global()
    bar:2
    wow_static()
    wow_global()
    wow:1
    wow_static()
    wow:1
    oop_test()
    oop_static()
    oop_class()
    oop:1
    oop_static()
    oop:1
    oop_test()
    oop_static()
    oop:1
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\lang\__input.txt(110,4): warning PHP0181: Assigning the return value of new by reference is deprecated
    
    @PHP/lang/bug21094.php: SUCCEEDED
    @PHP/lang/bug21600.php: SUCCEEDED
    @PHP/lang/bug21669.php: SUCCEEDED
    @PHP/lang/bug21849.php: SUCCEEDED
    @PHP/lang/bug21961.php: SUCCEEDED
    @PHP/lang/bug22231.php: SUCCEEDED
    @PHP/lang/bug22367.php: SUCCEEDED
    @PHP/lang/bug22510.php: SUCCEEDED
    @PHP/lang/bug22592.php: SUCCEEDED
    @PHP/lang/bug22690.php: SUCCEEDED
    @PHP/lang/bug23279.php: SUCCEEDED
    @PHP/lang/bug23384.php: SUCCEEDED
    @PHP/lang/bug23489.php: SUCCEEDED
    @PHP/lang/bug23524.php: SUCCEEDED
    @PHP/lang/bug23922.php: SUCCEEDED
    @PHP/lang/bug24054.php: SUCCEEDED
    @PHP/lang/bug24396.php: SUCCEEDED
    @PHP/lang/bug24403.php: SUCCEEDED
    @PHP/lang/bug24436.php: SUCCEEDED
    @PHP/lang/bug24499.php: SUCCEEDED
    @PHP/lang/bug24640.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    double(1700000000000000089258092433847514422797596587883870563356951996370064178581143932836831337636761368874297554515902592900802289500112731978596146714137401870842258241575178866354311397451139753100927220499450359906637902366244989496126909662726242240784739940994096632824796638102733857671280980918272.0000000000)
    1.7E+300
    
    ------
    double(0.0000000000)
    1.7E-300
    
    ------
    double(17000000000000001584208052028780237480128823455860622330108867175329927830437888.0000000000)
    1.7E+79
    
    ------
    double(0.0000000000)
    1.7E-79
    
    ------
    double(169999999999999996096025832433329868941658043870400163508258284150340918121070592.0000000000)
    1.7E+80
    
    ------
    double(0.0000000000)
    1.7E-80
    
    ------
    double(1700000000000000013616404158611892038375594280539217794530130541777964808366194688.0000000000)
    1.7E+81
    
    ------
    double(0.0000000000)
    1.7E-81
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    1.6999810742106E-319
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    1.7000798873397E-320
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    1.6995858216939E-321
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    0
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    0
    
    ------
    double(1700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+300
    
    ------
    double(0.0000000000)
    1.70000000000003E-300
    
    ------
    double(17000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+79
    
    ------
    double(0.0000000000)
    1.70000000000001E-79
    
    ------
    double(170000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+80
    
    ------
    double(0.0000000000)
    1.70000000000001E-80
    
    ------
    double(1700000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+81
    
    ------
    double(0.0000000000)
    1.70000000000001E-81
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    1.69998107421056E-319
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    1.70007988733973E-320
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    1.69464516523548E-321
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    0
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    0
    
    ------
    @PHP/lang/bug24652.php: SUCCEEDED
    @PHP/lang/bug24658.php: SUCCEEDED
    @PHP/lang/bug24783.php: SUCCEEDED
    @PHP/lang/bug24926.php: SUCCEEDED
    @PHP/lang/bug25547.php: SUCCEEDED
    @PHP/lang/bug25652.php: SUCCEEDED
    @PHP/lang/bug25922.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Undefined index here: 'error'
    Undefined index here: ''
    @PHP/lang/bug26182.php: SUCCEEDED
    @PHP/lang/bug26696.php: SUCCEEDED
    @PHP/lang/bug26866.php: SUCCEEDED
    @PHP/lang/bug26869.php: SUCCEEDED
    @PHP/lang/bug27354.php: SUCCEEDED
    @PHP/lang/bug27439.php: SUCCEEDED
    @PHP/lang/bug27535.php: SUCCEEDED
    @PHP/lang/bug28213.php: SUCCEEDED
    @PHP/lang/bug28800.php: SUCCEEDED
    @PHP/lang/bug29566.php: SUCCEEDED
    @PHP/lang/bug29893.php: SUCCEEDED
    @PHP/lang/bug29944.php: SUCCEEDED
    @PHP/lang/bug30638.php: SUCCEEDED
    @PHP/lang/bug30726.php: SUCCEEDED
    @PHP/lang/bug30862.php: SUCCEEDED
    @PHP/lang/bug32924.php: SUCCEEDED
    @PHP/lang/bug35382.php: SUCCEEDED
    @PHP/lang/bug7515.php: SUCCEEDED
    @PHP/lang/each_binary_safety.php: SUCCEEDED
    @PHP/lang/error_2_exception_001.php: SUCCEEDED
    @PHP/lang/foreach_with_object_001.php: SUCCEEDED
    @PHP/lang/foreach_with_references_001.php: SUCCEEDED
    @PHP/lang/type_hints_001.php: SUCCEEDED
    @PHP/standard/array/001.php: SUCCEEDED
    @PHP/standard/array/003.php: SUCCEEDED
    @PHP/standard/array/004.php: SUCCEEDED
    @PHP/standard/array/005.php: SUCCEEDED
    @PHP/standard/array/008.php: SUCCEEDED
    @PHP/standard/array/array_change_key_case.php: SUCCEEDED
    @PHP/standard/array/array_chunk.php: SUCCEEDED
    @PHP/standard/array/array_count_values.php: SUCCEEDED
    @PHP/standard/array/array_diff_1.php: SUCCEEDED
    @PHP/standard/array/array_diff_key.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ------ Test 1 --------
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 2 --------
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 3 --------
    array(6) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [2]=>
      int(4)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [2]=>
      int(4)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 4 --------
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 5 --------
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 6 --------
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 7 --------
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    ------ Test 8 --------
    array(6) {
      [0]=>
      int(0)
      [7]=>
      int(14)
      [2]=>
      int(4)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [0]=>
      int(0)
      [7]=>
      int(14)
      [2]=>
      int(4)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 9 --------
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    ------ Test 1 --------
    array(4) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(4) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 2 --------
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 3 --------
    array(6) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [2]=>
      &int(4)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [2]=>
      &int(4)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 4 --------
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 5 --------
    array(4) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(4) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 6 --------
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 7 --------
    array(3) {
      [7]=>
      &int(14)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
    }
    array(3) {
      [7]=>
      &int(14)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
    }
    ------ Test 8 --------
    array(6) {
      [0]=>
      &int(0)
      [7]=>
      &int(14)
      [2]=>
      &int(4)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [0]=>
      &int(0)
      [7]=>
      &int(14)
      [2]=>
      &int(4)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 9 --------
    array(3) {
      [7]=>
      &int(14)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
    }
    array(3) {
      [7]=>
      &int(14)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
    }
    @PHP/standard/array/array_intersect_key.php: SUCCEEDED
    @PHP/standard/array/array_sum.php: SUCCEEDED
    @PHP/standard/array/array_walk_recursive.php: SUCCEEDED
    @PHP/standard/array/bug12776.php: SUCCEEDED
    @PHP/standard/array/bug14580.php: SUCCEEDED
    @PHP/standard/array/bug20381.php: SUCCEEDED
    @PHP/standard/array/bug20865.php: SUCCEEDED
    @PHP/standard/array/bug21182.php: SUCCEEDED
    @PHP/standard/array/bug21918.php: SUCCEEDED
    @PHP/standard/array/bug21998.php: SUCCEEDED
    @PHP/standard/array/bug22088.php: SUCCEEDED
    @PHP/standard/array/bug22463.php: SUCCEEDED
    @PHP/standard/array/bug23581.php: SUCCEEDED
    @PHP/standard/array/bug23788.php: SUCCEEDED
    @PHP/standard/array/bug24198.php: SUCCEEDED
    @PHP/standard/array/bug24220.php: SUCCEEDED
    @PHP/standard/array/bug24766.php: SUCCEEDED
    @PHP/standard/array/bug24897.php: SUCCEEDED
    @PHP/standard/array/bug24980.php: SUCCEEDED
    @PHP/standard/array/bug25359.php: SUCCEEDED
    @PHP/standard/array/bug25708.php: SUCCEEDED
    @PHP/standard/array/bug25758.php: SUCCEEDED
    @PHP/standard/array/bug26458.php: SUCCEEDED
    @PHP/standard/array/bug28974.php: SUCCEEDED
    @PHP/standard/array/bug29493.php: SUCCEEDED
    @PHP/standard/array/bug30266.php: SUCCEEDED
    @PHP/standard/array/bug30833.php: SUCCEEDED
    @PHP/standard/array/bug31158.php: SUCCEEDED
    @PHP/standard/array/bug31213.php: SUCCEEDED
    @PHP/standard/array/bug32021.php: SUCCEEDED
    @PHP/standard/array/bug33382.php: SUCCEEDED
    @PHP/standard/array/bug33989.php: SUCCEEDED
    @PHP/standard/array/bug34227.php: SUCCEEDED
    @PHP/standard/array/bug34982.php: SUCCEEDED
    @PHP/standard/array/bug35014.php: SUCCEEDED
    @PHP/standard/array/bug35022.php: SUCCEEDED
    @PHP/standard/array/bug35821.php: SUCCEEDED
    @PHP/standard/array/count_recursive.php: SUCCEEDED
    @PHP/standard/array/locale_sort.php: SUCCEEDED
    @PHP/standard/array/range.php: SUCCEEDED
    @PHP/standard/assert/assert.php: SUCCEEDED
    @PHP/standard/general_functions/001.php: SUCCEEDED
    @PHP/standard/general_functions/002.php: SUCCEEDED
    @PHP/standard/general_functions/003.php: SUCCEEDED
    @PHP/standard/general_functions/004.php: SUCCEEDED
    @PHP/standard/general_functions/005.php: SUCCEEDED
    @PHP/standard/general_functions/006.php: SUCCEEDED
    @PHP/standard/general_functions/007.php: SUCCEEDED
    @PHP/standard/general_functions/009.php: SUCCEEDED
    @PHP/standard/general_functions/bug25038.php: SUCCEEDED
    @PHP/standard/general_functions/bug27678.php: SUCCEEDED
    @PHP/standard/general_functions/bug29038.php: SUCCEEDED
    @PHP/standard/general_functions/bug31190.php: SUCCEEDED
    @PHP/standard/general_functions/bug32647.php: SUCCEEDED
    @PHP/standard/general_functions/bug35229.php: SUCCEEDED
    @PHP/standard/general_functions/is_resource.php: SUCCEEDED
    @PHP/standard/math/abs.php: SUCCEEDED
    @PHP/standard/math/bug24142.php: SUCCEEDED
    @PHP/standard/math/bug25694.php: SUCCEEDED
    @PHP/standard/math/bug27646.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    double(INF-INF)
    'd:-INF;'
    double(INF-INF)
    double(INF-INF)
    'd:INF;'
    double(INF-INF)
    double(NaNInfini)
    'd:NAN;'
    double(NaNInfini)
    double(-Infinity)
    'd:-INF;'
    double(-Infinity)
    double(Infinity)
    'd:INF;'
    double(Infinity)
    double(NaN)
    'd:NAN;'
    double(NaN)
    @PHP/standard/math/bug30069.php: SUCCEEDED
    @PHP/standard/math/bug30695.php: SUCCEEDED
    @PHP/standard/math/floorceil.php: SUCCEEDED
    @PHP/standard/math/hexdec.php: SUCCEEDED
    @PHP/standard/math/log.php: SUCCEEDED
    @PHP/standard/math/pow.php: SUCCEEDED
    @PHP/standard/math/round.php: SUCCEEDED
    @PHP/standard/reg/001.php: SUCCEEDED
    @PHP/standard/reg/002.php: SUCCEEDED
    @PHP/standard/reg/003.php: SUCCEEDED
    @PHP/standard/reg/004.php: SUCCEEDED
    @PHP/standard/reg/005.php: SUCCEEDED
    @PHP/standard/reg/006.php: SUCCEEDED
    @PHP/standard/reg/007.php: SUCCEEDED
    @PHP/standard/reg/008.php: SUCCEEDED
    @PHP/standard/reg/009.php: SUCCEEDED
    @PHP/standard/reg/010.php: SUCCEEDED
    @PHP/standard/reg/011.php: SUCCEEDED
    @PHP/standard/reg/012.php: SUCCEEDED
    @PHP/standard/reg/013.php: SUCCEEDED
    @PHP/standard/reg/014.php: SUCCEEDED
    @PHP/standard/reg/015.php: SUCCEEDED
    @PHP/standard/reg/016.php: SUCCEEDED
    @PHP/standard/serialize/001.php: SUCCEEDED
    @PHP/standard/serialize/002.php: SUCCEEDED
    @PHP/standard/serialize/003.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    d:100;
    double(100.0000000000)
    
    d:51999999999999996980101120;
    double(51999999999999996980101120.0000000000)
    
    d:8.9999999999999995265585574287341141808127531476202420890331268310546875E-9;
    double(0.0000000090)
    d:100;
    double(100.0000000000)
    
    d:5.2000000000000006E+25;
    double(52000000000000000000000000.0000000000)
    
    d:9.0000000000000045E-09;
    double(0.0000000090)
    @PHP/standard/serialize/004.php: SUCCEEDED
    @PHP/standard/serialize/005.php: SUCCEEDED
    @PHP/standard/serialize/006.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    'O:3:"´┐Ż":1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    object
    {
      '´┐Ż' => '´┐Ż'
    }
    'a:1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    array
    {
      '´┐Ż' => '´┐Ż'
    }
    'O:3:"´┐Ż":1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    object
    {
      'ďż˝' => '´┐Ż'
    }
    'a:1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    array
    {
      'ďż˝' => '´┐Ż'
    }
    @PHP/standard/serialize/bug14293.php: SUCCEEDED
    @PHP/standard/serialize/bug21957.php: SUCCEEDED
    @PHP/standard/serialize/bug23298.php: SUCCEEDED
    @PHP/standard/serialize/bug24063.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0.1 0.1
    0.01 0.01
    0.001 0.001
    0.0001 0.0001
    1.0E-5 1.0E-5
    1.0E-6 1.0E-6
    1.0E-7 1.0E-7
    1.0E-8 1.0E-8
    1.0E-9 1.0E-9
    0.1 0.1
    0.01 0.01
    0.001 0.001
    0.0001 0.0001
    1E-05 1E-05
    1E-06 1E-06
    1E-07 1E-07
    1E-08 1E-08
    1E-09 1E-09
    @PHP/standard/serialize/bug25378.php: SUCCEEDED
    @PHP/standard/serialize/bug26762.php: SUCCEEDED
    @PHP/standard/serialize/bug27469.php: SUCCEEDED
    @PHP/standard/serialize/bug28325.php: SUCCEEDED
    @PHP/standard/serialize/bug30234.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    FALSE
    FALSE
    __autoload(Autoload_Implements)
    object [invalid]
    FALSE
    FALSE
    FALSE
    FALSE
    TRUE
    __autoload(Autoload_Implements)
    object [invalid]
    FALSE
    FALSE
    TRUE
    @PHP/standard/serialize/bug31402.php: SUCCEEDED
    @PHP/standard/serialize/bug31442.php: SUCCEEDED
    @PHP/standard/strings/add-and-stripcslashes.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    kaboemkara!
    foo\b\a\r\b\az
    \f\o\o\[ \]
    \zoo['\.']
    \abcd\e\f\g\h\i\j\k\l\m\n\o\pqrstuvwxy\z
    1
    5d
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\standard\strings\__input.txt at expression on line 3, column 1.
    
    kaboemkara!
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\standard\strings\__input.txt at expression on line 5, column 1.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\standard\strings\__input.txt at expression on line 6, column 1.
    
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\standard\strings\__input.txt at expression on line 8, column 1.
    
    1
    5d
    @PHP/standard/strings/add-and-stripslashes.php: SUCCEEDED
    @PHP/standard/strings/basename.php: SUCCEEDED
    @PHP/standard/strings/bin2hex.php: SUCCEEDED
    @PHP/standard/strings/bug20108.php: SUCCEEDED
    @PHP/standard/strings/bug20169.php: SUCCEEDED
    @PHP/standard/strings/bug20261.php: SUCCEEDED
    @PHP/standard/strings/bug20927.php: SUCCEEDED
    @PHP/standard/strings/bug21338.php: SUCCEEDED
    @PHP/standard/strings/bug21453.php: SUCCEEDED
    @PHP/standard/strings/bug21730.php: SUCCEEDED
    @PHP/standard/strings/bug21744.php: SUCCEEDED
    @PHP/standard/strings/bug22008.php: SUCCEEDED
    @PHP/standard/strings/bug22187.php: SUCCEEDED
    @PHP/standard/strings/bug22224.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      0 => 
      object
      {
      }
      1 => 
      object
      {
      }
    }
    @PHP/standard/strings/bug22227.php: SUCCEEDED
    @PHP/standard/strings/bug22904.php: SUCCEEDED
    @PHP/standard/strings/bug23650.php: SUCCEEDED
    @PHP/standard/strings/bug23894.php: SUCCEEDED
    @PHP/standard/strings/bug24098.php: SUCCEEDED
    @PHP/standard/strings/bug24208.php: SUCCEEDED
    @PHP/standard/strings/bug24281.php: SUCCEEDED
    @PHP/standard/strings/bug25671.php: SUCCEEDED
    @PHP/standard/strings/bug25707.php: SUCCEEDED
    @PHP/standard/strings/bug26878.php: SUCCEEDED
    @PHP/standard/strings/bug26973.php: SUCCEEDED
    @PHP/standard/strings/bug27276.php: SUCCEEDED
    @PHP/standard/strings/bug27278.php: SUCCEEDED
    @PHP/standard/strings/bug27295.php: SUCCEEDED
    @PHP/standard/strings/bug27457.php: SUCCEEDED
    @PHP/standard/strings/bug27675.php: SUCCEEDED
    @PHP/standard/strings/bug28386.php: SUCCEEDED
    @PHP/standard/strings/bug33076.php: SUCCEEDED
    @PHP/standard/strings/chr_ord.php: SUCCEEDED
    @PHP/standard/strings/chunk_split.php: SUCCEEDED
    @PHP/standard/strings/count_chars.php: SUCCEEDED
    @PHP/standard/strings/crc32.php: SUCCEEDED
    @PHP/standard/strings/explode.php: SUCCEEDED
    @PHP/standard/strings/implode.php: SUCCEEDED
    @PHP/standard/strings/md5.php: SUCCEEDED
    @PHP/standard/strings/md5raw.php: SUCCEEDED
    @PHP/standard/strings/nl2br.php: SUCCEEDED
    @PHP/standard/strings/sha1.php: SUCCEEDED
    @PHP/standard/strings/sha1raw.php: SUCCEEDED
    @PHP/standard/strings/sprintf_f.php: SUCCEEDED
    @PHP/standard/strings/strcspn.php: SUCCEEDED
    @PHP/standard/strings/strings001.php: SUCCEEDED
    @PHP/standard/strings/strpos.php: SUCCEEDED
    @PHP/standard/strings/strrev.php: SUCCEEDED
    @PHP/standard/strings/strripos.php: SUCCEEDED
    @PHP/standard/strings/strrpos.php: SUCCEEDED
    @PHP/standard/strings/strspn.php: SUCCEEDED
    @PHP/standard/strings/strstr.php: SUCCEEDED
    @PHP/standard/strings/strtoupper.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    cfbfbdcfbfbdcfbfbd
    cfafbdcfafbdcfafbd
    @PHP/standard/strings/strtr.php: SUCCEEDED
    @PHP/standard/strings/strval.php: SUCCEEDED
    @PHP/standard/strings/str_repeat.php: SUCCEEDED
    @PHP/standard/strings/str_shuffle.php: SUCCEEDED
    @PHP/standard/strings/str_word_count.php: SUCCEEDED
    @PHP/standard/strings/substr_count.php: SUCCEEDED
    @PHP/standard/strings/substr_replace.php: SUCCEEDED
    @PHP/standard/strings/wordwrap.php: SUCCEEDED
    @PHP/standard/time/001.php: SUCCEEDED
    @PHP/standard/time/idate.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    U: 1043324459
    Y: 2003
    z: 22
    y: 3
    m: 1
    n: 1
    d: 23
    j: 23
    H: 13
    G: 13
    h: 1
    g: 1
    i: 20
    s: 59
    t: 31
    w: 4
    L: 0
    B: 556
    I: 0
    W: 4
    U: 1043324459
    Y: 2003
    z: 22
    y: 3
    m: 1
    n: 1
    d: 23
    j: 23
    H: 12
    G: 12
    h: 12
    g: 12
    i: 20
    s: 59
    t: 31
    w: 4
    L: 0
    B: 556
    I: 0
    W: 4
    @PHP/strings/001.php: SUCCEEDED
    @PHP/strings/002.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    fprintf test 1:abcde
    20
    printf test 1:simple string
    printf test 2:42
    printf test 3:3.333333
    printf test 4:3.3333333333
    printf test 5:2.50      
    printf test 6:2.50000000
    printf test 7:0000002.50
    printf test 8:<                 foo>
    printf test 9:<bar                 >
    printf test 10: 123456789012345
    printf test 10:<h´┐Żyesterettsjustitiarius>
    printf test 11: 123456789012345678901234567890
    printf test 11:<    h´┐Żyesterettsjustitiarius>
    printf test 12:-12.34
    printf test 13:  -12
    printf test 14:@
    printf test 15:10101010
    printf test 16:aa
    printf test 17:AA
    printf test 18:        10101010
    printf test 19:              aa
    printf test 20:              AA
    printf test 21:0000000010101010
    printf test 22:00000000000000aa
    printf test 23:00000000000000AA
    printf test 24:abcde
    printf test 25:gazonk
    printf test 26:2 1
    printf test 27:3 1 2
    printf test 28:02  1
    printf test 29:2   1
    printf test 30:x
    vprintf test 1:2   1
    fprintf test 1:abcde
    20
    printf test 1:simple string
    printf test 2:42
    printf test 3:3.333333
    printf test 4:3.3333333333
    printf test 5:2.50      
    printf test 6:2.50000000
    printf test 7:0000002.50
    printf test 8:<                 foo>
    printf test 9:<bar                 >
    printf test 10: 123456789012345
    printf test 10:<h�yesterettsjustitiarius>
    printf test 11: 123456789012345678901234567890
    printf test 11:<    h�yesterettsjustitiarius>
    printf test 12:-12.34
    printf test 13:  -12
    printf test 14:@
    printf test 15:10101010
    printf test 16:aa
    printf test 17:AA
    printf test 18:        10101010
    printf test 19:              aa
    printf test 20:              AA
    printf test 21:0000000010101010
    printf test 22:00000000000000aa
    printf test 23:00000000000000AA
    printf test 24:abcde
    printf test 25:gazonk
    printf test 26:2 1
    printf test 27:3 1 2
    printf test 28:02  1
    printf test 29:2   1
    printf test 30:x
    vprintf test 1:2   1
    @PHP/strings/bug22592.php: SUCCEEDED
    Arrays/array1.php: SUCCEEDED
    Arrays/array_diff_intersect.php: SUCCEEDED
    Arrays/array_diff_intersect2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Strict Standards: array_udiff() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 35
    Array
    (
        [0.5] => cr Object
            (
                [priv_member:cr:private] => 12
            )
    
        [0] => cr Object
            (
                [priv_member:cr:private] => 23
            )
    
    )
    
    Strict Standards: array_udiff_assoc() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 36
    Array
    (
        [0.1] => cr Object
            (
                [priv_member:cr:private] => 9
            )
    
        [0.5] => cr Object
            (
                [priv_member:cr:private] => 12
            )
    
        [0] => cr Object
            (
                [priv_member:cr:private] => 23
            )
    
    )
    
    Strict Standards: array_udiff_uassoc() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 37
    
    Strict Standards: array_udiff_uassoc() expects parameter 4 to be a valid callback, non-static method cr::comp_func_key() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 37
    Array
    (
        [0.1] => cr Object
            (
                [priv_member:cr:private] => 9
            )
    
        [0.5] => cr Object
            (
                [priv_member:cr:private] => 12
            )
    
        [0] => cr Object
            (
                [priv_member:cr:private] => 23
            )
    
    )
    Array
    (
        [b] => brown
        [c] => blue
        [0] => red
    )
    ------------------------------------
    
    Strict Standards: array_uintersect() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 40
    Array
    (
        [0.1] => cr Object
            (
                [priv_member:cr:private] => 9
            )
    
        [1] => cr Object
            (
                [priv_member:cr:private] => 4
            )
    
        [2] => cr Object
            (
                [priv_member:cr:private] => -15
            )
    
    )
    
    Strict Standards: array_uintersect_assoc() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 41
    Array
    (
        [1] => cr Object
            (
                [priv_member:cr:private] => 4
            )
    
        [2] => cr Object
            (
                [priv_member:cr:private] => -15
            )
    
    )
    
    Strict Standards: array_uintersect_uassoc() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 42
    
    Strict Standards: array_uintersect_uassoc() expects parameter 4 to be a valid callback, non-static method cr::comp_func_key() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 42
    Array
    (
        [1] => cr Object
            (
                [priv_member:cr:private] => 4
            )
    
        [2] => cr Object
            (
                [priv_member:cr:private] => -15
            )
    
    )
    Array
    (
        [a] => green
    )
    Array
    (
        [0.5] => cr Object
        (
            [priv_member:private] => 12
        )
    
        [0] => cr Object
        (
            [priv_member:private] => 23
        )
    
    )
    Array
    (
        [0.1] => cr Object
        (
            [priv_member:private] => 9
        )
    
        [0.5] => cr Object
        (
            [priv_member:private] => 12
        )
    
        [0] => cr Object
        (
            [priv_member:private] => 23
        )
    
    )
    Array
    (
        [0.1] => cr Object
        (
            [priv_member:private] => 9
        )
    
        [0.5] => cr Object
        (
            [priv_member:private] => 12
        )
    
        [0] => cr Object
        (
            [priv_member:private] => 23
        )
    
    )
    Array
    (
        [b] => brown
        [c] => blue
        [0] => red
    )
    ------------------------------------
    Array
    (
        [0.1] => cr Object
        (
            [priv_member:private] => 9
        )
    
        [1] => cr Object
        (
            [priv_member:private] => 4
        )
    
        [2] => cr Object
        (
            [priv_member:private] => -15
        )
    
    )
    Array
    (
        [1] => cr Object
        (
            [priv_member:private] => 4
        )
    
        [2] => cr Object
        (
            [priv_member:private] => -15
        )
    
    )
    Array
    (
        [1] => cr Object
        (
            [priv_member:private] => 4
        )
    
        [2] => cr Object
        (
            [priv_member:private] => -15
        )
    
    )
    Array
    (
        [a] => green
    )
    Arrays/array_diff_intersect3.php: SUCCEEDED
    Arrays/array_filter%20false%20entries%20%2322016.php: SUCCEEDED
    Arrays/array_map.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Array
    (
        [0] => Array
            (
                [0] => 1
                [1] => A
                [2] => 0
            )
    
        [1] => Array
            (
                [0] => 2
                [1] => B
                [2] => 0
            )
    
        [2] => Array
            (
                [0] => 3
                [1] => C
                [2] => 
            )
    
    )
    Array
    (
        [0] => 1 A 0
        [1] => 2 B 0
        [2] => 3 C 
    )
    Array
    (
        [A] => 2
        [10] => 3
    )
    Array
    (
        [0] => 1
        [1] => 2
        [2] => 3
    )
    Array
    (
        [0] => A
        [1] => B
        [2] => C
    )
    Array
    (
        [0] => 0
        [1] => 0
    )
    Array
    (
        [A] => 1
        [10] => 2
    )
    Array
    (
        [0] => Array
        (
            [0] => 1
            [1] => A
            [2] => 0
        )
    
        [1] => Array
        (
            [0] => 2
            [1] => B
            [2] => 0
        )
    
        [2] => Array
        (
            [0] => 3
            [1] => C
            [2] => 
        )
    
    )
    Array
    (
        [0] => 1 A 0
        [1] => 2 B 0
        [2] => 3 C 
    )
    Array
    (
        [A] => 2
        [10] => 3
    )
    Array
    (
        [0] => 1
        [1] => 2
        [2] => 3
    )
    Array
    (
        [0] => A
        [1] => B
        [2] => C
    )
    Array
    (
        [0] => x
        [1] => x
    )
    Array
    (
        [A] => 1
        [10] => 2
    )
    Arrays/array_merge_recursive.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Array
    (
        [color] => Array
            (
                [favorite] => Array
                    (
                        [0] => red
                        [1] => green
                    )
    
                [0] => blue
            )
    
        [0] => Array
            (
                [0] => 1
                [1] => 2
                [2] => 3
            )
    
        [q] => Array
            (
                [0] => 
                [1] => 
                [2] => x
            )
    
        [1] => 10
        [2] => Array
            (
                [0] => 4
                [1] => 5
                [2] => 6
            )
    
    )
    Array
    (
        [a] => Array
            (
                [0] => 1
                [1] => 2
                [2] => 3
                [3] => e
            )
    
    )
    Array
    (
        [a] => Array
            (
                [0] => 1
                [1] => 2
                [2] => 3
                [3] => e
            )
    
    )
    Array
    (
        [a] => 1
        [b] => 2
    )
    Array
    (
        [a] => xxx
        [b] => 2
    )
    Array
    (
        [a] => Array
            (
                [a] => Array
                    (
                        [a] => Array
     *RECURSION*
                    )
    
                [0] => 1
                [1] => 2
                [2] => 3
            )
    
    )
    Array
    (
        [a] => Array
            (
                [b] => Array
                    (
                        [0] => 1
                        [1] => 1
                    )
    
                [c] => 1
                [d] => Array
                    (
                        [0] => 2
                        [1] => 3
                    )
    
            )
    
    )
    Array
    (
        [a] => Array
            (
                [0] => 
                [1] => 
            )
    
    )
    Array
    (
        [a] => Array
            (
                [0] => 
                [1] => 
            )
    
    )
    Array
    (
        [color] => Array
        (
            [favorite] => Array
            (
                [0] => red
                [1] => green
            )
    
            [0] => blue
        )
    
        [0] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
        )
    
        [q] => Array
        (
            [0] => x
        )
    
        [1] => 10
        [2] => Array
        (
            [0] => 4
            [1] => 5
            [2] => 6
        )
    
    )
    Array
    (
        [a] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
            [3] => e
        )
    
    )
    Array
    (
        [a] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
            [3] => e
        )
    
    )
    Array
    (
        [a] => 1
        [b] => 2
    )
    Array
    (
        [a] => xxx
        [b] => 2
    )
    Array
    (
        [a] => Array
        (
            [a] => Array
            (
                [a] => Array [recursion]
    
    
            )
    
            [0] => 1
            [1] => 2
            [2] => 3
        )
    
    )
    Array
    (
        [a] => Array
        (
            [b] => Array
            (
                [0] => 1
                [1] => 1
            )
    
            [c] => 1
            [d] => Array
            (
                [0] => 2
                [1] => 3
            )
    
        )
    
    )
    Array
    (
        [a] => Array
        (
        )
    
    )
    Array
    (
        [a] => Array
        (
        )
    
    )
    Arrays/array_reduce1.php: SUCCEEDED
    Arrays/array_reduce2.php: SUCCEEDED
    Arrays/array_slice.php: SUCCEEDED
    Arrays/array_sumprod.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    float(8.3)
    float(0)
    int(6)
    int(6)
    float(4294967297)
    float(9.2233720282648E+18)
    bool(true)
    bool(false)
    float(-7.7)
    float(-38.4)
    int(6)
    int(6)
    int64(4294967297)
    int64(9223372028264841218)
    bool(true)
    bool(true)
    Arrays/array_unshift.php: SUCCEEDED
    Arrays/array_walk.php: SUCCEEDED
    Arrays/array_walk_recursive.php: SUCCEEDED
    Arrays/multisort.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    bool(true)
    Array
    (
        [0] => Array
            (
                [0] => 2
                [1] => 8
                [2] => 2
                [3] => 2
                [4] => 8
                [5] => 8
            )
    
        [1] => Array
            (
                [0] => 7
                [1] => 2
                [2] => 7
                [3] => 4
                [4] => 8
                [5] => 1
            )
    
        [2] => Array
            (
                [0] => 1
                [1] => 4
                [2] => 8
                [3] => 0
                [4] => 6
                [5] => 2
            )
    
        [3] => Array
            (
                [0] => 8
                [1] => 4
                [2] => 1
                [3] => 0
                [4] => 7
                [5] => 1
            )
    
        [4] => Array
            (
                [0] => 20
                [1] => 2
                [2] => 12
                [3] => 11
                [4] => 10
                [5] => 1
            )
    
    )
    Array
    (
        [0] => Array
            (
                [0] => 10
                [1] => 100
                [2] => 100
                [3] => a
            )
    
        [1] => Array
            (
                [0] => 1
                [1] => 3
                [2] => 2
                [3] => 1
            )
    
    )
    Array
    (
        [0] => 10
        [1] => a
        [2] => 100
        [3] => 100
    )
    Array
    (
        [0] => 1
        [1] => 1
        [2] => 2
        [3] => 3
    )
    bool(true)
    Array
    (
        [0] => Array
        (
            [0] => 2
            [1] => 8
            [2] => 2
            [3] => 2
            [4] => 8
            [5] => 8
        )
    
        [1] => Array
        (
            [0] => 7
            [1] => 2
            [2] => 7
            [3] => 4
            [4] => 8
            [5] => 1
        )
    
        [2] => Array
        (
            [0] => 1
            [1] => 4
            [2] => 8
            [3] => 0
            [4] => 6
            [5] => 2
        )
    
        [3] => Array
        (
            [0] => 8
            [1] => 4
            [2] => 1
            [3] => 0
            [4] => 7
            [5] => 1
        )
    
        [4] => Array
        (
            [0] => 20
            [1] => 2
            [2] => 12
            [3] => 11
            [4] => 10
            [5] => 1
        )
    
    )
    Array
    (
        [0] => Array
        (
            [0] => 10
            [1] => 100
            [2] => 100
            [3] => a
        )
    
        [1] => Array
        (
            [0] => 1
            [1] => 3
            [2] => 2
            [3] => 1
        )
    
    )
    Array
    (
        [0] => 10
        [1] => a
        [2] => 100
        [3] => 100
    )
    Array
    (
        [0] => 1
        [1] => 1
        [2] => 2
        [3] => 3
    )
    Arrays/multisort_empty.php: SUCCEEDED
    Arrays/nonarray%20access%20%2322019.php: SUCCEEDED
    Arrays/optimizations.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    3
    4
    5
    a
    b
    c
    
    Warning: strtolower() expects parameter 1 to be string, array given in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 15
    
    cablo
    3
    4
    5
    a
    b
    c
    array
    cablo
    Arrays/recursion.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    f1:
    array(2) {
      ["a"]=>
      array(5) {
        ["a"]=>
        &array(3) {
          ["a"]=>
          &array(3) {
            ["a"]=>
            *RECURSION*
            [0]=>
            string(1) "y"
            [1]=>
            string(1) "z"
          }
          [0]=>
          string(1) "y"
          [1]=>
          string(1) "z"
        }
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        string(1) "x"
      }
      [0]=>
      string(1) "w"
    }
    f2:
    array(1) {
      ["A"]=>
      &array(2) {
        ["a"]=>
        &array(2) {
          ["a"]=>
          *RECURSION*
          [0]=>
          string(1) "z"
        }
        [0]=>
        string(1) "z"
      }
    }
    f3:
    array(2) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) {
          [0]=>
          *RECURSION*
          [1]=>
          string(1) "z"
        }
        [1]=>
        string(1) "z"
      }
      [1]=>
      string(1) "z"
    }
    f4:
    
    Warning: array_merge_recursive(): recursion detected in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 37
    array(1) {
      ["a"]=>
      &array(3) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
      }
    }
    f5:
    array(1) {
      ["a"]=>
      array(6) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        int(1)
        [4]=>
        int(2)
        [5]=>
        int(3)
      }
    }
    f6:
    array(1) {
      ["a"]=>
      array(2) {
        [0]=>
        string(2) "xx"
        [1]=>
        int(2)
      }
    }
    f7:
    array(1) {
      ["a"]=>
      array(1) {
        ["a"]=>
        array(1) {
          ["a"]=>
          &array(1) {
            ["a"]=>
            &array(1) {
              ["a"]=>
              *RECURSION*
            }
          }
        }
      }
    }
    f1:
    array(2) {
      ["a"]=>
      array(5) {
        ["a"]=>
        &array(3) {
          ["a"]=>
          &array(3) [recursion]
          [0]=>
          string(1) "y"
          [1]=>
          string(1) "z"
        }
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        string(1) "x"
      }
      [0]=>
      string(1) "w"
    }
    f2:
    array(1) {
      ["A"]=>
      &array(2) {
        ["a"]=>
        &array(2) [recursion]
        [0]=>
        string(1) "z"
      }
    }
    f3:
    array(2) {
      [0]=>
      &array(2) [recursion]
      [1]=>
      string(1) "z"
    }
    f4:
    array(1) {
      ["a"]=>
      array(6) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        int(1)
        [4]=>
        int(2)
        [5]=>
        int(3)
      }
    }
    f5:
    array(1) {
      ["a"]=>
      array(6) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        int(1)
        [4]=>
        int(2)
        [5]=>
        int(3)
      }
    }
    f6:
    array(1) {
      ["a"]=>
      array(2) {
        [0]=>
        string(2) "xx"
        [1]=>
        int(2)
      }
    }
    f7:
    array(1) {
      ["a"]=>
      &array(1) {
        ["a"]=>
        &array(1) [recursion]
      }
    }
    Arrays/sort.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    sort regular:
    Array
    (
        [0] => 0
        [1] => 1
        [2] => 1
        [3] => 8
        [4] => 0x10
        [5] => 10x
        [6] => 20x
        [7] => ach0
        [8] => add1
        [9] => x10
        [10] => x2
    )
    
    sort numeric:
    Array
    (
        [0] => add1
        [1] => x2
        [2] => 0x10
        [3] => ach0
        [4] => 0
        [5] => x10
        [6] => 1
        [7] => 1
        [8] => 8
        [9] => 10x
        [10] => 20x
    )
    
    sort string:
    Array
    (
        [0] => 0
        [1] => 0x10
        [2] => 1
        [3] => 1
        [4] => 10x
        [5] => 20x
        [6] => 8
        [7] => ach0
        [8] => add1
        [9] => x10
        [10] => x2
    )
    
    sort locale:
    Array
    (
        [0] => 0
        [1] => 0x10
        [2] => 1
        [3] => 1
        [4] => 10x
        [5] => 20x
        [6] => 8
        [7] => ach0
        [8] => add1
        [9] => x10
        [10] => x2
    )
    
    ksort regular:
    Array
    (
        [x] => 8
        [z] => 1
        [0] => x10
        [1] => 10x
        [2b] => 1
        [2] => 20x
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [10a] => 0
    )
    
    ksort numeric:
    Array
    (
        [x] => 8
        [z] => 1
        [0] => x10
        [1] => 10x
        [2b] => 1
        [2] => 20x
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [10a] => 0
    )
    
    ksort string:
    Array
    (
        [0] => x10
        [1] => 10x
        [10a] => 0
        [2] => 20x
        [2b] => 1
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [x] => 8
        [z] => 1
    )
    
    ksort locale:
    Array
    (
        [0] => x10
        [1] => 10x
        [10a] => 0
        [2] => 20x
        [2b] => 1
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [x] => 8
        [z] => 1
    )
    
    asort regular:
    Array
    (
        [10a] => 0
        [2b] => 1
        [z] => 1
        [x] => 8
        [4] => 0x10
        [1] => 10x
        [2] => 20x
        [5] => ach0
        [6] => add1
        [0] => x10
        [3] => x2
    )
    
    asort numeric:
    Array
    (
        [6] => add1
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [10a] => 0
        [0] => x10
        [z] => 1
        [2b] => 1
        [x] => 8
        [1] => 10x
        [2] => 20x
    )
    
    asort string:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [z] => 1
        [2b] => 1
        [1] => 10x
        [2] => 20x
        [x] => 8
        [5] => ach0
        [6] => add1
        [0] => x10
        [3] => x2
    )
    
    asort locale:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [z] => 1
        [2b] => 1
        [1] => 10x
        [2] => 20x
        [x] => 8
        [5] => ach0
        [6] => add1
        [0] => x10
        [3] => x2
    )
    
    rsort regular:
    Array
    (
        [0] => x2
        [1] => x10
        [2] => add1
        [3] => ach0
        [4] => 20x
        [5] => 10x
        [6] => 0x10
        [7] => 8
        [8] => 1
        [9] => 1
        [10] => 0
    )
    
    rsort numeric:
    Array
    (
        [0] => 20x
        [1] => 10x
        [2] => 8
        [3] => 1
        [4] => 1
        [5] => ach0
        [6] => add1
        [7] => 0x10
        [8] => x2
        [9] => x10
        [10] => 0
    )
    
    rsort string:
    Array
    (
        [0] => x2
        [1] => x10
        [2] => add1
        [3] => ach0
        [4] => 8
        [5] => 20x
        [6] => 10x
        [7] => 1
        [8] => 1
        [9] => 0x10
        [10] => 0
    )
    
    rsort locale:
    Array
    (
        [0] => x2
        [1] => x10
        [2] => add1
        [3] => ach0
        [4] => 8
        [5] => 20x
        [6] => 10x
        [7] => 1
        [8] => 1
        [9] => 0x10
        [10] => 0
    )
    
    natsort:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [2b] => 1
        [z] => 1
        [x] => 8
        [1] => 10x
        [2] => 20x
        [5] => ach0
        [6] => add1
        [3] => x2
        [0] => x10
    )
    sort regular:
    Array
    (
        [0] => 0x10
        [1] => 10x
        [2] => 20x
        [3] => ach0
        [4] => add1
        [5] => x10
        [6] => 0
        [7] => x2
        [8] => 1
        [9] => 1
        [10] => 8
    )
    
    sort numeric:
    Array
    (
        [0] => x10
        [1] => 0
        [2] => x2
        [3] => ach0
        [4] => add1
        [5] => 1
        [6] => 1
        [7] => 8
        [8] => 10x
        [9] => 0x10
        [10] => 20x
    )
    
    sort string:
    Array
    (
        [0] => 0
        [1] => 0x10
        [2] => 1
        [3] => 1
        [4] => 10x
        [5] => 20x
        [6] => 8
        [7] => ach0
        [8] => add1
        [9] => x10
        [10] => x2
    )
    
    sort locale:
    Array
    (
        [0] => 0
        [1] => 0x10
        [2] => 1
        [3] => 1
        [4] => 10x
        [5] => 20x
        [6] => 8
        [7] => add1
        [8] => ach0
        [9] => x10
        [10] => x2
    )
    
    ksort regular:
    Array
    (
        [x] => 8
        [z] => 1
        [0] => x10
        [1] => 10x
        [2] => 20x
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [10a] => 0
        [2b] => 1
    )
    
    ksort numeric:
    Array
    (
        [x] => 8
        [z] => 1
        [0] => x10
        [1] => 10x
        [2b] => 1
        [2] => 20x
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [10a] => 0
    )
    
    ksort string:
    Array
    (
        [0] => x10
        [1] => 10x
        [10a] => 0
        [2] => 20x
        [2b] => 1
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [x] => 8
        [z] => 1
    )
    
    ksort locale:
    Array
    (
        [0] => x10
        [1] => 10x
        [10a] => 0
        [2] => 20x
        [2b] => 1
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [x] => 8
        [z] => 1
    )
    
    asort regular:
    Array
    (
        [4] => 0x10
        [1] => 10x
        [2] => 20x
        [5] => ach0
        [6] => add1
        [0] => x10
        [10a] => 0
        [3] => x2
        [z] => 1
        [2b] => 1
        [x] => 8
    )
    
    asort numeric:
    Array
    (
        [0] => x10
        [10a] => 0
        [3] => x2
        [5] => ach0
        [6] => add1
        [z] => 1
        [2b] => 1
        [x] => 8
        [1] => 10x
        [4] => 0x10
        [2] => 20x
    )
    
    asort string:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [z] => 1
        [2b] => 1
        [1] => 10x
        [2] => 20x
        [x] => 8
        [5] => ach0
        [6] => add1
        [0] => x10
        [3] => x2
    )
    
    asort locale:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [z] => 1
        [2b] => 1
        [1] => 10x
        [2] => 20x
        [x] => 8
        [6] => add1
        [5] => ach0
        [0] => x10
        [3] => x2
    )
    
    rsort regular:
    Array
    (
        [0] => 8
        [1] => 1
        [2] => 1
        [3] => x2
        [4] => x10
        [5] => 0
        [6] => add1
        [7] => ach0
        [8] => 20x
        [9] => 10x
        [10] => 0x10
    )
    
    rsort numeric:
    Array
    (
        [0] => 20x
        [1] => 0x10
        [2] => 10x
        [3] => 8
        [4] => 1
        [5] => 1
        [6] => x10
        [7] => 0
        [8] => x2
        [9] => ach0
        [10] => add1
    )
    
    rsort string:
    Array
    (
        [0] => x2
        [1] => x10
        [2] => add1
        [3] => ach0
        [4] => 8
        [5] => 20x
        [6] => 10x
        [7] => 1
        [8] => 1
        [9] => 0x10
        [10] => 0
    )
    
    rsort locale:
    Array
    (
        [0] => x2
        [1] => x10
        [2] => ach0
        [3] => add1
        [4] => 8
        [5] => 20x
        [6] => 10x
        [7] => 1
        [8] => 1
        [9] => 0x10
        [10] => 0
    )
    
    natsort:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [z] => 1
        [2b] => 1
        [x] => 8
        [1] => 10x
        [2] => 20x
        [5] => ach0
        [6] => add1
        [3] => x2
        [0] => x10
    )
    Arrays/usort.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    Array
    (
        [0] => 10
        [1] => 9
        [2] => 8
        [3] => 7
        [4] => 6
        [5] => 5
        [6] => 4
        [7] => 3
        [8] => 2
        [9] => 1
    )
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Array
    (
        [0] => 10
        [1] => 9
        [2] => 8
        [3] => 7
        [4] => 6
        [5] => 5
        [6] => 4
        [7] => 3
        [8] => 2
        [9] => 1
    )
    Arrays/lazy_copy/001.php: SUCCEEDED
    Arrays/lazy_copy/002.php: SUCCEEDED
    Arrays/lazy_copy/003.php: SUCCEEDED
    Arrays/lazy_copy/004.php: SUCCEEDED
    Arrays/lazy_copy/005.php: SUCCEEDED
    Arrays/lazy_copy/006.php: SUCCEEDED
    Bugs/class_incompletepart.php: SUCCEEDED
    Bugs/division-by-zero.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    DIVISION
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 6
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 8
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 10
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 12
    bool(false)
    MODULO
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 16
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 18
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 20
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 22
    bool(false)
    DIVISION
    bool(false)
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt at expression on line 10, column 2.
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt at expression on line 12, column 2.
    bool(false)
    MODULO
    bool(false)
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt at expression on line 20, column 2.
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt at expression on line 22, column 2.
    bool(false)
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt(6,10): warning PHP0150: Division by zero
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt(8,9): warning PHP0150: Division by zero
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt(16,10): warning PHP0150: Division by zero
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt(18,9): warning PHP0150: Division by zero
    
    Bugs/function-in-unknown-class.php: SUCCEEDED
    Bugs/is_a_null_value.php: SUCCEEDED
    Bugs/preg-named-groups.php: SUCCEEDED
    Bugs/preg-replace-advanced.php: SUCCEEDED
    Bugs/preg-replace-range.php: SUCCEEDED
    Bugs/preg-replace.php: SUCCEEDED
    Bugs/preg-this-dynamic.php: FAILED
    Script hung upNo errorsSuccess
    Expected test outputReal script output
    Unhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---> PHP.Core.Debug+AssertException: Assertion failed: 
       at PHP.Core.Debug.Fail(String message)
       at PHP.Core.Debug.Assert(Boolean condition)
       at PHP.Core.RelativePath.ParseCanonical(String relativePath)
       at PHP.Core.Emit.TransientAssemblyBuilder.Build(String sourceCode, SourceCodeDescriptor descriptor, EvalKinds kind, CompilationContext context, ScriptContext scriptContext, DTypeDesc referringType, NamingContext namingContext, Boolean completeSource)
       at PHP.Core.DynamicCode.EvalInternal(String prefix, String code, String suffix, EvalKinds kind, ScriptContext scriptContext, Dictionary`2 localVariables, DObject self, DTypeDesc referringType, SourceCodeDescriptor descriptor, Boolean entireFile, NamingContext namingContext)
       at PHP.Core.DynamicCode.Eval(String code, Boolean synthetic, ScriptContext context, Dictionary`2 definedVariables, DObject self, DTypeDesc referringType, String callerRelativeSourcePath, Int32 line, Int32 column, Int32 containerId, NamingContext namingContext)
       at PHP.Library.PerlRegExp.Evaluator.ReplaceCodeExecute(Match m)
       at System.Text.RegularExpressions.RegexReplacement.Replace(MatchEvaluator evaluator, Regex regex, String input, Int32 count, Int32 startat)
       at System.Text.RegularExpressions.Regex.Replace(String input, MatchEvaluator evaluator, Int32 count)
       at PHP.Library.PerlRegExp.ReplaceInternal(DObject self, Dictionary`2 definedVariables, PerlRegExpConverter converter, PhpCallback callback, String str, Int32 limit, SourceCodeDescriptor sourceCodeDesc, Int32& count)
       at PHP.Library.PerlRegExp.SimpleReplace(DObject self, Dictionary`2 definedVariables, Object pattern, String replacement, PhpCallback callback, Object data, Int32 limit, SourceCodeDescriptor descriptor, Int32& count)
       at PHP.Library.PerlRegExp.Replace(ScriptContext context, DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, PhpCallback callback, Object data, Int32 limit, Int32& count)
       at PHP.Library.PerlRegExp.Replace(ScriptContext context, DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, Object data)
       at PHP.Dynamic.PhpNetClassLibrary.preg_replace(Object , PhpStack )
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <__input.txt>.a.a(ScriptContext ) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt:line 16
       at <__input.txt>.a.<Mediator>(ScriptContext )
       at <__input.txt>.a.a(Object instance, PhpStack stack)
       at <__input.txt>.<Script>.<Main>(ScriptContext <context>, Dictionary`2 <locals>, DObject , DTypeDesc , Boolean ) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt:line 19
       at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)
       at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)
       --- End of inner exception stack trace ---
       at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)
       at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)
       at <Global>.Run(String[] )
    
    Bugs/preg-this-dynamic2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    foo: ahoj
    foo: lidi
    foo: rozkladame
    foo: ahoj
    foo: lidi
    foo: rozkladame
    foo: ahoj
    foo: lidi
    foo: rozkladame
    
    Notice: Undefined variable: this.
    
    Error: Call to a member function foo() on a non-object.
    Bugs/preg-this.php: SUCCEEDED
    Bugs/preg-ungreedy-bugs.php: SUCCEEDED
    Bugs/preg-unkn.php: SUCCEEDED
    Bugs/trigger_error%20line%20number%20%232787.php: SUCCEEDED
    Compiler/abstracts.php: SUCCEEDED
    Compiler/aliased%20assign%20add.php: SUCCEEDED
    Compiler/assignments.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ---1---1float(-1.5)
    float(2.5)
    float(0.83333333333333)
    int(6)
    int(8)
    ---2---2float(8.8333333333333)
    float(8.8333333333333)
    float(8.8333333333333)
    int(8)
    int(8)
    ---3---3---4---4---5---5array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [1]=>
      array(1) {
        [2]=>
        array(1) {
          [3]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    ---6---6array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "u"
    }
    array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "v"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    ---7---7array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    ---8---8
    ---1---1float(-1.5)
    float(2.5)
    float(0.833333333333333)
    int(6)
    int(8)
    ---2---2float(8.83333333333333)
    float(8.83333333333333)
    float(8.83333333333333)
    int(8)
    int(8)
    ---3---3---4---4---5---5array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [1]=>
      array(1) {
        [2]=>
        array(1) {
          [3]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    ---6---6array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "u"
    }
    array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "v"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    ---7---7array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    ---8---8
    Compiler/assign_in_call.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    g1:
    f(x)
    u(x)
    'x'
    
    g2:
    f(x)
    u(x)
    'b'
    
    g3:
    f(x)
    u(x)
    'b'
    
    g4:
    f(x)
    u(x)
    'b'
    
    g5:
    f()
    u()
    integer(1)
    
    g6:
    f(3)
    u(3)
    integer(3)
    
    g7:
    f(2)
    u(10)
    integer(10)
    
    g8:
    f(1)
    f(1)
    f(1)
    u(1)
    u()
    u(1)
    
    g9:
    known:
    __get(p) = 0
    __set(p,1)
    f(1)
    unknown:
    __get(p) = 1
    __set(p,3)
    u(3)
    
    g10:
    Done.
    g1:
    f(x)
    u(x)
    'x'
    
    g2:
    f(x)
    u(x)
    'b'
    
    g3:
    f(x)
    u(x)
    'b'
    
    g4:
    f(x)
    u(x)
    'b'
    
    g5:
    f()
    u()
    integer(1)
    
    g6:
    f(3)
    u(3)
    integer(3)
    
    g7:
    f(2)
    u(10)
    integer(10)
    
    g8:
    f(1)
    f(1)
    f(1)
    u(1)
    u()
    u(1)
    
    g9:
    known:
    __get(p) = 0
    __set(p,1)
    __get(p) = 1
    f(1)
    unknown:
    __get(p) = 1
    __set(p,3)
    __get(p) = 3
    u(3)
    
    g10:
    Done.
    Compiler/auto_globals_001.php: SUCCEEDED
    Compiler/auto_globals_002.php: SUCCEEDED
    Compiler/auto_globals_003.php: SUCCEEDED
    Compiler/break_in_global_code.php: SUCCEEDED
    Compiler/chaining_test.php: SUCCEEDED
    Compiler/chain_ending_by_string_index.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        string(1) "f"
      }
    }
    array(1) {
      [0]=>
      string(4) "xubu"
    }
    object(C)#1 (1) {
      ["f"]=>
      string(4) "kuxu"
    }
    string(5) "helxo"
    string(5) "helxo"
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        string(1) "f"
      }
    }
    array(1) {
      [0]=>
      string(4) "bubu"
    }
    
    Warning: A string item used as a reference in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt at expression on line 19, column 1.
    object(C)(1) {
      ["f"]=>
      string(4) "kuku"
    }
    
    Warning: A string item used as a reference in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt at expression on line 25, column 1.
    string(5) "hello"
    
    Warning: A string item used as a reference in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt at expression on line 31, column 1.
    string(5) "hello"
    Compiler/continue_in_global_code.php: SUCCEEDED
    Compiler/deep_copy.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array(1) {
      [0]=>
      &array(1) {
        [0]=>
        &array(1) {
          [0]=>
          *RECURSION*
        }
      }
    }
    array(1) {
      [0]=>
      &array(1) {
        [0]=>
        &array(1) {
          [0]=>
          *RECURSION*
        }
      }
    }
    array(2) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) {
          [0]=>
          *RECURSION*
          [1]=>
          int(1)
        }
        [1]=>
        int(1)
      }
      [1]=>
      int(1)
    }
    array(1) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) {
          [0]=>
          *RECURSION*
          [1]=>
          int(1)
        }
        [1]=>
        int(1)
      }
    }
    array(1) {
      [0]=>
      &array(1) [recursion]
    }
    array(1) {
      [0]=>
      &array(1) {
        [0]=>
        &array(1) [recursion]
      }
    }
    array(2) {
      [0]=>
      &array(2) [recursion]
      [1]=>
      int(1)
    }
    array(1) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) [recursion]
        [1]=>
        int(1)
      }
    }
    Compiler/deep_copy_refbox.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Strict Standards: Only variables should be passed by reference in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt on line 42
    array
    {
      0 => integer(1)
    }
    
    Strict Standards: Only variables should be passed by reference in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt on line 45
    array
    {
      0 => integer(1)
    }
    
    Strict Standards: Only variables should be passed by reference in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt on line 49
    array
    {
      0 => integer(1)
    }
    
    Strict Standards: Only variables should be passed by reference in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt on line 52
    array
    {
      0 => integer(1)
    }
    array
    {
      0 => integer(1)
      1 => integer(1)
    }
    array
    {
      0 => integer(1)
      1 => integer(1)
    }
    array
    {
      0 => integer(1)
      1 => integer(1)
    }
    array
    {
      0 => integer(1)
      1 => integer(1)
    }
    Compiler/expr_init.php: SUCCEEDED
    Compiler/foreach1.php: SUCCEEDED
    Compiler/foreach_arrays.php: SUCCEEDED
    Compiler/for_loop.php: SUCCEEDED
    Compiler/function_002.php: SUCCEEDED
    Compiler/function_003.php: SUCCEEDED
    Compiler/function_004.php: SUCCEEDED
    Compiler/function_call.php: SUCCEEDED
    Compiler/if_statement.php: SUCCEEDED
    Compiler/indirect_001.php: SUCCEEDED
    Compiler/indirect_002.php: SUCCEEDED
    Compiler/indirect_003.php: SUCCEEDED
    Compiler/indirect_004.php: SUCCEEDED
    Compiler/indirect_005.php: SUCCEEDED
    Compiler/indirect_007.php: SUCCEEDED
    Compiler/indirect_global.php: SUCCEEDED
    Compiler/inheritance.php: SUCCEEDED
    Compiler/inheritance2.php: SUCCEEDED
    Compiler/isset_unset_001.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Testing x in global code:  <br>
    1 <br>
     <br>
    Testing x (object) in optimized function:  <br>
    1 <br>
     <br>
    Testing x (PhpReference) in optimized function:  <br>
    1 <br>
     <br>
    
    Notice: Undefined variable: y in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt on line 29
    Testing $$x (created at runtime) in optimized function:  <br>
    1 <br>
    Testing x in global code:  <br>
    1 <br>
     <br>
    Testing x (object) in optimized function:  <br>
    1 <br>
     <br>
    Testing x (PhpReference) in optimized function:  <br>
    1 <br>
     <br>
    Testing $$x (created at runtime) in optimized function:  <br>
    1 <br>
    Compiler/list%20%2326681.php: SUCCEEDED
    Compiler/null_hints.php: SUCCEEDED
    Compiler/pure_create_function.php: SUCCEEDED
    Compiler/pure_function_exists.php: SUCCEEDED
    Compiler/pure_math_str.php: SUCCEEDED
    Compiler/static_call.php: SUCCEEDED
    Compiler/switch.php: SUCCEEDED
    Compiler/ternary_ex.php: SUCCEEDED
    Compiler/this%20call.php: SUCCEEDED
    Compiler/typehint_check.php: SUCCEEDED
    Compiler/__call.php: SUCCEEDED
    Compiler/Inclusions/include2.php: SUCCEEDED
    Compiler/Inclusions/include3.php: SUCCEEDED
    Compiler/Inclusions/include6.php: SUCCEEDED
    Compiler/Inclusions/include_test.php: SUCCEEDED
    Compiler/Inclusions/script.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t01.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t02.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t03.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t04.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t05.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t08.php: SUCCEEDED
    Compiler/PseudoConst/parent.php: SUCCEEDED
    Compiler/PseudoConst/parent2.php: SUCCEEDED
    Compiler/PseudoConst/self.php: SUCCEEDED
    Compiler/PseudoConst/t01.php: SUCCEEDED
    Compiler/PseudoConst/t02.php: SUCCEEDED
    Compiler/PseudoConst/t03.php: SUCCEEDED
    Compiler/PseudoConst/t04.php: SUCCEEDED
    Compiler/PseudoConst/t05.php: SUCCEEDED
    Compiler/PseudoConst/t06.php: SUCCEEDED
    Compiler/PseudoConst/t07.php: SUCCEEDED
    Compiler/PseudoConst/t08.php: SUCCEEDED
    Compiler/PseudoConst/t09.php: SUCCEEDED
    Compiler/PseudoConst/t10.php: SUCCEEDED
    Compiler/PseudoConst/t11.php: SUCCEEDED
    Compiler/PseudoConst/_class_.php: SUCCEEDED
    Compiler/PseudoConst/_dir_.php: SUCCEEDED
    Compiler/PseudoConst/_function_.php: SUCCEEDED
    Compiler/References/array_argument.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(2)
        [1]=>
        int(3)
      }
    }
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    Compiler/References/array_local.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(2)
        [1]=>
        int(3)
      }
    }
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    Compiler/References/array_ret_argument.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(2)
        [1]=>
        int(3)
      }
    }
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    Compiler/References/array_ret_argument2.php: SUCCEEDED
    Compiler/References/deepcopy.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <br/><br/>globalobjects: array(2) {
      [0]=>
      int(1)
      [1]=>
      int(7)
    }
    <br/><br/>globalobjects: array(2) {
      [0]=>
      int(1)
      [1]=>
      &int(7)
    }
    Compiler/References/explicitclear.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Construyendo Y
    call foo12Destruyendo Y
    3object(X)#1 (2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      int(54)
    }
    array(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      string(10) "Init Value"
    }
    x: object(X)#1 (2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      int(1004)
    }
    <br/>checkpoint array(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      int(54)
    }
    Construyendo Y
    call foo123object(X)(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      &int(54)
    }
    array(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      &int(54)
    }
    x: object(X)(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      &int(1004)
    }
    <br/>checkpoint array(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      &int(1004)
    }
    Destruyendo Y
    Compiler/References/field_argument.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: int(7)
    <br/><br/>checkpoint array(1) {
      ["objects"]=>
      int(8)
    }
    x: int(7)
    <br/><br/>checkpoint array(1) {
      ["objects"]=>
      &int(7)
    }
    Compiler/References/field_local.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: object(X)#1 (1) {
      ["objects"]=>
      int(25)
    }
    <br/>checkpoint array(1) {
      ["objects"]=>
      int(7)
    }
    x: object(X)(1) {
      ["objects"]=>
      &int(25)
    }
    <br/>checkpoint array(1) {
      ["objects"]=>
      &int(25)
    }
    Compiler/References/ref_arrayitem.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(2)
        [1]=>
        int(3)
      }
    }
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    Compiler/References/ref_reasign.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    object(X)#1 (2) {
      ["objects"]=>
      int(54)
      ["objects2"]=>
      &int(222)
    }
    array(2) {
      ["objects"]=>
      int(7)
      ["objects2"]=>
      &int(222)
    }
    x: object(X)#1 (2) {
      ["objects"]=>
      int(1004)
      ["objects2"]=>
      int(777)
    }
    <br/>checkpoint array(2) {
      ["objects"]=>
      int(54)
      ["objects2"]=>
      int(222)
    }
    object(X)(2) {
      ["objects"]=>
      &int(54)
      ["objects2"]=>
      &int(222)
    }
    array(2) {
      ["objects"]=>
      &int(54)
      ["objects2"]=>
      &int(222)
    }
    x: object(X)(2) {
      ["objects"]=>
      &int(1004)
      ["objects2"]=>
      &int(777)
    }
    <br/>checkpoint array(2) {
      ["objects"]=>
      &int(1004)
      ["objects2"]=>
      &int(777)
    }
    Compiler/Unreachable/t13.php: SUCCEEDED
    Compiler/Unset/calluserfunc.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Warning: call_user_func() expects parameter 1 to be a valid callback, function 'unset' not found or invalid function name in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\Unset\__input.txt on line 3
    int(10)
    Error: call_user_func(): Call to undefined function: 'unset' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\Unset\__input.txt at expression on line 3, column 1.
    Compiler/Unset/issetref2.php: SUCCEEDED
    Compiler/Unset/unsetglobal.php: SUCCEEDED
    Compiler/Unset/unsetglobal2.php: SUCCEEDED
    Compiler/Unset/unsetindirect.php: SUCCEEDED
    Compiler/Unset/unsetproblem.php: SUCCEEDED
    Compiler/Unset/unsetref.php: SUCCEEDED
    Compiler/Unset/unsetref2.php: SUCCEEDED
    Compiler/Unset/unsetref3.php: SUCCEEDED
    Compiler/Unset/__unset.php: SUCCEEDED
    DateTime/strftime.php: SUCCEEDED
    DateTime/strtotime1.php: SUCCEEDED
    DateTime/strtotime2.php: SUCCEEDED
    DateTime/strtotime3.php: SUCCEEDED
    DateTime/strtotime4.php: SUCCEEDED
    DateTime/strtotime5.php: SUCCEEDED
    DateTime/time.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    -189388800:-189475200 - 86400
    1964-01-01T00:00:00+0000
    1963-12-31T00:00:00+0000
    1964-06-06
    1963-06-06
    1964-01-06
    1133305200
    -189388800:-189475200 - 86400
    1964-01-01T00:00:00+0000
    1963-12-31T00:00:00+0000
    1964-06-06
    1963-06-06
    1964-01-06
    DateTime/timezones1.php: SUCCEEDED
    FileSystem/basename.php: SUCCEEDED
    FileSystem/basename2.php: SUCCEEDED
    FileSystem/chdir.php: SUCCEEDED
    FileSystem/csv.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    --- write ---
    72
    24
    44
    2
    6
    
    --- read ---
    "hello\n
    world";"aaa""bbb""ccc";"blah blah;";none;"tab\ttab";"space space"\n
    hh'ee;"ss\nsadasdasd s"\n
    """""""""""""""""""""";"""";;"""""";"xxx"""\n
    x\n
    "x\y"\n
    --- write ---
    72
    24
    44
    2
    6
    
    --- read ---
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    FileSystem/date.php: SUCCEEDED
    FileSystem/date2.php: SUCCEEDED
    FileSystem/date3.php: SUCCEEDED
    FileSystem/date_unix.php: SUCCEEDED
    FileSystem/dirname.php: SUCCEEDED
    FileSystem/dirname2.php: SUCCEEDED
    FileSystem/disk_free_space.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    738 GB
    Drive C: 37 GB
    Drive D: 738 GB
    Drive E: 
    Warning: disk_free_space(): The system cannot find the path specified.
     in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 14
    false
    Drive F: 
    Warning: disk_free_space(): The device is not ready.
     in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 14
    false
    738 GB
    Drive C: 37 GB
    Drive D: 738 GB
    Drive E: false
    Drive F: false
    FileSystem/disk_total_space.php: SUCCEEDED
    FileSystem/fgets.php: SUCCEEDED
    FileSystem/file.php: SUCCEEDED
    FileSystem/filesize.php: SUCCEEDED
    FileSystem/file_exists.php: SUCCEEDED
    FileSystem/file_get_contents.php: SUCCEEDED
    FileSystem/fpassthru.php: SUCCEEDED
    FileSystem/fread.php: SUCCEEDED
    FileSystem/fread1.php: SUCCEEDED
    FileSystem/fread2.php: SUCCEEDED
    FileSystem/fseek.php: SUCCEEDED
    FileSystem/fsockopen.php: SUCCEEDED
    FileSystem/ftell.php: SUCCEEDED
    FileSystem/is_dir.php: SUCCEEDED
    FileSystem/is_executable.php: SUCCEEDED
    FileSystem/pathinfo.php: SUCCEEDED
    FileSystem/popen.php: SUCCEEDED
    FileSystem/readdir.php: SUCCEEDED
    FileSystem/readfile.php: SUCCEEDED
    FileSystem/readline.php: SUCCEEDED
    FileSystem/realpath.php: SUCCEEDED
    FileSystem/scandir.php: SUCCEEDED
    FileSystem/stat.php: SUCCEEDED
    FileSystem/stream_context_set_option.php: SUCCEEDED
    FileSystem/stream_copy_to_stream.php: SUCCEEDED
    FileSystem/stream_copy_to_stream2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <p>Read <b>rb</b>, Write <b>wb</b>
    
    
    COPIED: <b>28640</b>
    <p>Read <b>rb</b>, Write <b>wt</b>
    
    
    COPIED: <b>28658</b>
    <p>Read <b>rb</b>, Write <b>wb</b>
    
    
    COPIED: <b>28658</b>
    <p>Read <b>rb</b>, Write <b>wt</b>
    
    
    COPIED: <b>28640</b>
    FileSystem/testinc.php: SUCCEEDED
    FileSystem/touch.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Warning: touch(): Utime failed: Bad file descriptor in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 8
    Sorry Could Not change modification time of touch.txt
    Warning: touch(): Utime failed: Bad file descriptor in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 14
    
    Warning: touch(): Utime failed: Bad file descriptor in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 16
    
    Warning: touch(): Utime failed: Bad file descriptor in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 17
    <pre>[ARRAY
      [INT (0)] => [STRING: "May 10, 2011; [00:50:21] (00h) ctime test.txt (1304981421)"]
      [INT (1)] => [STRING: "February 19, 2011; [22:06:05] (22h) mtime test.txt (1298149565)"]
      [INT (2)] => [STRING: "May 10, 2011; [00:50:21] (00h) ctime touch.txt (1304981421)"]
      [INT (3)] => [STRING: "February 19, 2011; [22:06:05] (22h) mtime touch.txt (1298149565)"]
      [INT (4)] => [STRING: "May 10, 2011; [00:50:21] (00h) atime touch.txt (1304981421)"]
      [INT (5)] => [STRING: "February 19, 2011; [22:06:05] (22h) mtime summer.txt (1298149565)"]
      [INT (6)] => [STRING: "February 19, 2011; [22:06:05] (22h) mtime winter.txt (1298149565)"]
    ]</pre>
    Warning: touch(): Unable to access (D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\touch.txt): Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 8, column 5.
    Sorry Could Not change modification time of touch.txt
    Warning: touch(): Unable to access (D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\touch.txt): Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 14, column 1.
    
    Warning: touch(): Unable to access (D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\winter.txt): Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 16, column 1.
    
    Warning: touch(): Unable to access (D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\summer.txt): Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 17, column 1.
    <pre>[ARRAY
      [INT (0)] => [STRING: "May 10, 2011; [00:50:21] (00h) ctime test.txt (1304981421)"]
      [INT (1)] => [STRING: "February 19, 2011; [23:06:05] (23h) mtime test.txt (1298153165)"]
      [INT (2)] => [STRING: "May 10, 2011; [00:50:21] (00h) ctime touch.txt (1304981421)"]
      [INT (3)] => [STRING: "February 19, 2011; [23:06:05] (23h) mtime touch.txt (1298153165)"]
      [INT (4)] => [STRING: "May 10, 2011; [00:50:21] (00h) atime touch.txt (1304981421)"]
      [INT (5)] => [STRING: "February 19, 2011; [23:06:05] (23h) mtime summer.txt (1298153165)"]
      [INT (6)] => [STRING: "February 19, 2011; [23:06:05] (23h) mtime winter.txt (1298153165)"]
    ]</pre>
    FileSystem/tar/tar_test.php: SUCCEEDED
    FileSystem/zip/zip.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    correct
    Error: Call to undefined function: 'zip_open' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\zip\__input.txt at expression on line 3, column 1.
    Math/abs.php: SUCCEEDED
    Math/atan2.php: SUCCEEDED
    Math/base_convert.php: SUCCEEDED
    Math/bindec.php: SUCCEEDED
    Math/ceil.php: SUCCEEDED
    Math/cos.php: SUCCEEDED
    Math/decbin.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <pre>
    [double: 2294967295]
    10001000110010100110101111111111
    [double: 4294967296]
    0
    [double: 8589934590]
    11111111111111111111111111111110
    [double: 8589934590]
    11111111111111111111111111111110
    [double: 8589934591]
    11111111111111111111111111111111
    [Int: 1000.000.000.000]
    11010100101001010001000000000000
    <hr>(-1, -5435, 2.14, 0, 26)
    11111111111111111111111111111111
    11111111111111111110101011000101
    10
    0
    11010 
    </pre>
    <pre>
    [???: 2294967295]
    10001000110010100110101111111111
    [???: 4294967296]
    0
    [???: 8589934590]
    11111111111111111111111111111110
    [???: 8589934590]
    11111111111111111111111111111110
    [???: 8589934591]
    11111111111111111111111111111111
    [Int: 1000.000.000.000]
    11010100101001010001000000000000
    <hr>(-1, -5435, 2.14, 0, 26)
    11111111111111111111111111111111
    11111111111111111110101011000101
    10
    0
    11010 
    </pre>
    Math/dechex.php: SUCCEEDED
    Math/decoct.php: SUCCEEDED
    Math/deg2rad.php: SUCCEEDED
    Math/exp.php: SUCCEEDED
    Math/floor.php: SUCCEEDED
    Math/fmod.php: SUCCEEDED
    Math/hexdec.php: SUCCEEDED
    Math/max.php: SUCCEEDED
    Math/min.php: SUCCEEDED
    Math/modulo_warn.php: SUCCEEDED
    Math/octdec.php: SUCCEEDED
    Math/pow.php: SUCCEEDED
    Math/rad2deg.php: SUCCEEDED
    Math/round.php: SUCCEEDED
    Math/sin.php: SUCCEEDED
    Math/sqrt.php: SUCCEEDED
    Math/tan.php: SUCCEEDED
    Math/uniqid.php: SUCCEEDED
    Misc/calendar_extension.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0
    0
    2375840
    0
    14
    32
    2
    There are 31 days in August 2003
    There are 28 days in February 2003
    There are 29 days in February 2004
    There are 31 days in December 2034
    1748326
    1748324
    374867
    0
    322f32322f35373633
    ebe120e7f9e5ef20e4faf9f1e2
    ebe120e7f9e5ef20e427faf9f1e2
    ebe120e7f9e5ef20e420e0ecf4e9ed20faf9f1e2
    ebe120e7f9e5ef20e42720e0ecf4e9ed20faf9f1e2
    eb22e120e7f9e5ef20e4faf9f122e2
    e12720e7f9e5ef20e4faf9f122e2
    e12720e7f9e5ef20e427faf9f122e2
    e12720e7f9e5ef20e420e0ecf4e9ed20faf9f122e2
    e12720e7f9e5ef20e42720e0ecf4e9ed20faf9f122e2
    Error: Call to undefined function: 'frenchtojd' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt at expression on line 2, column 1.
    Misc/fgetcsv%20%2327492.php: SUCCEEDED
    Misc/hash%20functions%20%2326667.php: SUCCEEDED
    Misc/ini_parse.php: SUCCEEDED
    Misc/json%20%2327838.php: SUCCEEDED
    Misc/lexer.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    T_INLINE_HTML
    311 '\r\n'
    T_OPEN_TAG
    368 '&lt;?'
    T_WHITESPACE
    371 ' \r\n\r\n'
    T_FINAL
    345 'final'
    T_WHITESPACE
    371 ' '
    T_CLASS
    353 'class'
    T_WHITESPACE
    371 ' '
    T_STRING
    307 'A'
    T_WHITESPACE
    371 ' \r\n'
        '{'
    T_WHITESPACE
    371 ' \r\n  '
    T_FUNCTION
    334 'function'
    T_WHITESPACE
    371 ' '
    T_STRING
    307 '__get'
        '('
    T_VARIABLE
    309 '$x'
        ')'
    T_WHITESPACE
    371 ' \r\n  '
        '{'
    T_WHITESPACE
    371 ' \r\n    '
    T_VARIABLE
    309 '$x'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_START_HEREDOC
    372 '&lt;&lt;&lt;EOOOOOOOOOOOOOOT\r\n'
    T_ENCAPSED_AND_WHITESPACE
    314 '         &lt;&lt;&lt;hello\r\nEOOOOOOOOOOOOOOt;\r\nEOOOOOOOOOOOOOT;\r\n'
    T_END_HEREDOC
    373 'EOOOOOOOOOOOOOOT'
        ';'
    T_WHITESPACE
    371 '\r\n\r\n    '
        '$'
    T_VARIABLE
    309 '$y'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_ARRAY
    360 'array'
    T_WHITESPACE
    371 ' '
        '('
    T_LNUMBER
    305 '1'
        ','
    T_DNUMBER
    306 '100000000000000'
        ','
    T_DNUMBER
    306 '999999999999999999999999999999999'
        ','
    T_STRING
    307 'true'
        ','
    T_STRING
    307 'false'
        ')'
        ';'
    T_WHITESPACE
    371 '\r\n    '
        '$'
        '{'
        '&quot;'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
    T_DOLLAR_OPEN_CURLY_BRACES
    374 '${'
        '$'
        '{'
    T_CONSTANT_ENCAPSED_STRING
    315 '&quot;xxx&quot;'
        '}'
        '}'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
        '&quot;'
        '}'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_LNUMBER
    305 '1'
        ';'
    T_WHITESPACE
    371 '\r\n    '
        '$'
        '{'
        '&quot;'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
    T_DOLLAR_OPEN_CURLY_BRACES
    374 '${'
        '$'
        '{'
        '&quot;'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
    T_VARIABLE
    309 '$x'
    T_ENCAPSED_AND_WHITESPACE
    314 '-&gt;$$'
    T_VARIABLE
    309 '$x0xx'
        '&quot;'
        '}'
        '}'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
        '&quot;'
        '}'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_LNUMBER
    305 '1'
        ';'
    T_WHITESPACE
    371 '\r\n  '
        '}'
    T_WHITESPACE
    371 ' \r\n'
        '}'
    T_WHITESPACE
    371 '\r\n\r\n'
    T_CLOSE_TAG
    370 '?&gt;'
    '
    '
        '&lt;?'
        ' 
    
    '
        'final'
        ' '
        'class'
        ' '
        'A'
        ' 
    '
        '{'
        ' 
      '
        'function'
        ' '
    259
    259 '
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt at expression on line 10, column 7.
    '
        '('
        '$x'
        ')'
        ' 
      '
        '{'
        ' 
        '
        '$x'
        ' '
        '='
        ' '
        '&lt;&lt;&lt;EOOOOOOOOOOOOOOT
    '
        '         &lt;&lt;&lt;'
        'hello'
        '
    '
        'EOOOOOOOOOOOOOOt;
    '
        'EOOOOOOOOOOOOOT;
    '
        'EOOOOOOOOOOOOOOT'
        ';'
        '
    
        '
        '$'
        '$y'
        ' '
        '='
        ' '
        'array'
        ' '
        '('
        '1'
        ','
        '100000000000000'
        ','
        '999999999999999999999999999999999'
        ','
    256
    256 '
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt at expression on line 10, column 7.
    '
        ','
    257
    257 '
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt at expression on line 10, column 7.
    '
        ')'
        ';'
        '
        '
        '$'
        '{'
        '&quot;'
        'x'
        '${'
        '$'
        '{'
    -29
    -29 '
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt at expression on line 10, column 7.
    '
        '}'
        '}'
        'x'
        '&quot;'
        '}'
        ' '
        '='
        ' '
        '1'
        ';'
        '
        '
        '$'
        '{'
        '&quot;'
        'x'
        '${'
        '$'
        '{'
        '&quot;'
        'x'
        '$x'
        '-&gt;'
        '$'
        '$'
        '$x0xx'
        '&quot;'
        '}'
        '}'
        'x'
        '&quot;'
        '}'
        ' '
        '='
        ' '
        '1'
        ';'
        '
      '
        '}'
        ' 
    '
        '}'
        '
    
    '
        '?&gt;'
    Misc/locale.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string(1) "C"
    double(1.54)
    double(Infinity)
    654564.145400
    Sat Saturday Apr April
    --------------
    string(19) "Danish_Denmark.1252"
    double(1.54)
    double(Infinity)
    654564,145400
    lo lordag apr april
    --------------
    string(25) "Czech_Czech Republic.1250"
    double(1.54)
    double(Infinity)
    654564,145400
    so sobota IV duben
    --------------
    string(1) "C"
    float(1.54)
    float(Infinity)
    654564.145400
    Sat Saturday Apr April
    --------------
    string(19) "Danish_Denmark.1252"
    float(1.54)
    float(Infinity)
    654564,145400
    lo lordag apr april
    --------------
    string(25) "Czech_Czech Republic.1250"
    float(1.54)
    float(Infinity)
    654564,145400
    so sobota 4 duben
    --------------
    Misc/output2.php: SUCCEEDED
    Misc/parse_url%20%2327377.php: SUCCEEDED
    Misc/parse_url_at_bug.php: SUCCEEDED
    Misc/stack_trace.php: FAILED
    Script hung upNo errorsSuccess
    Expected test outputReal script output
    Unhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---> System.IndexOutOfRangeException: Index was outside the bounds of the array.
       at PHP.Core.PhpStackFrame..ctor(ScriptContext context, StackFrame frame, FrameKinds kind)
       at PHP.Core.PhpStackTrace..ctor(ScriptContext context, StackTrace clrTrace)
       at PHP.Core.PhpStackTrace..ctor(ScriptContext context, Int32 skipFrames)
       at PHP.Library.Errors.Backtrace()
       at <stack_trace.inc>.<Script>.j(ScriptContext <context>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\stack_trace.inc:line 11
       at <stack_trace.inc>.<Script>.j(Object instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <stack_trace.inc>.<Script>.i(ScriptContext <context>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\stack_trace.inc:line 6
       at <stack_trace.inc>.<Script>.i(Object instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <^0>.<Global>.<?0>.h(ScriptContext <context>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt:line 14
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack, DTypeDesc caller)
       at PHP.Core.PhpCallback.InvokeInternal(Object[] args)
       at PHP.Core.PhpCallback.Invoke(Object[] args)
       at PHP.Library.PhpArrays.Map(DTypeDesc caller, PhpCallback map, PhpArray[] arrays)
       at <__input.txt>.<Script>.<Lambda>(ScriptContext <context>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt:line 4
       at <__input.txt>.<Script>.<Lambda>(Object instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <__input.txt>.<Script>.f(ScriptContext <context>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt:line 6
       at <__input.txt>.<Script>.f(Object instance, PhpStack stack)
       at <__input.txt>.<Script>.<Main>(ScriptContext <context>, Dictionary`2 <locals>, DObject , DTypeDesc , Boolean ) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt:line 18
       at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)
       at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)
       --- End of inner exception stack trace ---
       at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)
       at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)
       at <Global>.Run(String[] )
    
    Misc/str_getcsv%20%2326691.php: SUCCEEDED
    Misc/tokens.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    T_REQUIRE_ONCE = 258,
    T_REQUIRE = 259,
    T_EVAL = 260,
    T_INCLUDE_ONCE = 261,
    T_INCLUDE = 262,
    T_LOGICAL_OR = 263,
    T_LOGICAL_XOR = 264,
    T_LOGICAL_AND = 265,
    T_PRINT = 266,
    T_SR_EQUAL = 267,
    T_SL_EQUAL = 268,
    T_XOR_EQUAL = 269,
    T_OR_EQUAL = 270,
    T_AND_EQUAL = 271,
    T_MOD_EQUAL = 272,
    T_CONCAT_EQUAL = 273,
    T_DIV_EQUAL = 274,
    T_MUL_EQUAL = 275,
    T_MINUS_EQUAL = 276,
    T_PLUS_EQUAL = 277,
    T_BOOLEAN_OR = 278,
    T_BOOLEAN_AND = 279,
    T_IS_NOT_IDENTICAL = 280,
    T_IS_IDENTICAL = 281,
    T_IS_NOT_EQUAL = 282,
    T_IS_EQUAL = 283,
    T_IS_GREATER_OR_EQUAL = 284,
    T_IS_SMALLER_OR_EQUAL = 285,
    T_SR = 286,
    T_SL = 287,
    T_INSTANCEOF = 288,
    T_UNSET_CAST = 289,
    T_BOOL_CAST = 290,
    T_OBJECT_CAST = 291,
    T_ARRAY_CAST = 292,
    T_STRING_CAST = 293,
    T_DOUBLE_CAST = 294,
    T_INT_CAST = 295,
    T_DEC = 296,
    T_INC = 297,
    T_CLONE = 298,
    T_NEW = 299,
    T_EXIT = 300,
    T_IF = 301,
    T_ELSEIF = 302,
    T_ELSE = 303,
    T_ENDIF = 304,
    T_LNUMBER = 305,
    T_DNUMBER = 306,
    T_STRING = 307,
    T_STRING_VARNAME = 308,
    T_VARIABLE = 309,
    T_NUM_STRING = 310,
    T_INLINE_HTML = 311,
    T_CHARACTER = 312,
    T_BAD_CHARACTER = 313,
    T_ENCAPSED_AND_WHITESPACE = 314,
    T_CONSTANT_ENCAPSED_STRING = 315,
    T_ECHO = 316,
    T_DO = 317,
    T_WHILE = 318,
    T_ENDWHILE = 319,
    T_FOR = 320,
    T_ENDFOR = 321,
    T_FOREACH = 322,
    T_ENDFOREACH = 323,
    T_DECLARE = 324,
    T_ENDDECLARE = 325,
    T_AS = 326,
    T_SWITCH = 327,
    T_ENDSWITCH = 328,
    T_CASE = 329,
    T_DEFAULT = 330,
    T_BREAK = 331,
    T_CONTINUE = 332,
    T_GOTO = 333,
    T_FUNCTION = 334,
    T_CONST = 335,
    T_RETURN = 336,
    T_TRY = 337,
    T_CATCH = 338,
    T_THROW = 339,
    T_USE = 340,
    T_GLOBAL = 341,
    T_PUBLIC = 342,
    T_PROTECTED = 343,
    T_PRIVATE = 344,
    T_FINAL = 345,
    T_ABSTRACT = 346,
    T_STATIC = 347,
    T_VAR = 348,
    T_UNSET = 349,
    T_ISSET = 350,
    T_EMPTY = 351,
    T_HALT_COMPILER = 352,
    T_CLASS = 353,
    T_INTERFACE = 354,
    T_EXTENDS = 355,
    T_IMPLEMENTS = 356,
    T_OBJECT_OPERATOR = 357,
    T_DOUBLE_ARROW = 358,
    T_LIST = 359,
    T_ARRAY = 360,
    T_CLASS_C = 361,
    T_METHOD_C = 362,
    T_FUNC_C = 363,
    T_LINE = 364,
    T_FILE = 365,
    T_COMMENT = 366,
    T_DOC_COMMENT = 367,
    T_OPEN_TAG = 368,
    T_OPEN_TAG_WITH_ECHO = 369,
    T_CLOSE_TAG = 370,
    T_WHITESPACE = 371,
    T_START_HEREDOC = 372,
    T_END_HEREDOC = 373,
    T_DOLLAR_OPEN_CURLY_BRACES = 374,
    T_CURLY_OPEN = 375,
    T_PAAMAYIM_NEKUDOTAYIM = 376,
    T_DOUBLE_COLON = 376,
    T_NAMESPACE = 377,
    T_NS_C = 378,
    T_DIR = 379,
    T_NS_SEPARATOR = 380,
    T_INCLUDE = 129,
    T_INCLUDE_ONCE = 130,
    T_EVAL = 131,
    T_REQUIRE = 132,
    T_REQUIRE_ONCE = 133,
    T_LOGICAL_OR = 136,
    T_LOGICAL_XOR = 137,
    T_LOGICAL_AND = 138,
    T_PRINT = 139,
    T_PLUS_EQUAL = 140,
    T_MINUS_EQUAL = 141,
    T_MUL_EQUAL = 142,
    T_DIV_EQUAL = 143,
    T_CONCAT_EQUAL = 144,
    T_MOD_EQUAL = 145,
    T_AND_EQUAL = 146,
    T_OR_EQUAL = 147,
    T_XOR_EQUAL = 148,
    T_SL_EQUAL = 149,
    T_SR_EQUAL = 150,
    T_BOOLEAN_OR = 151,
    T_BOOLEAN_AND = 152,
    T_IS_EQUAL = 153,
    T_IS_NOT_EQUAL = 154,
    T_IS_IDENTICAL = 155,
    T_IS_NOT_IDENTICAL = 156,
    T_IS_SMALLER_OR_EQUAL = 157,
    T_IS_GREATER_OR_EQUAL = 158,
    T_SL = 159,
    T_SR = 160,
    T_INC = 161,
    T_DEC = 162,
    T_NEW = 164,
    T_INSTANCEOF = 165,
    T_CLONE = 167,
    T_LNUMBER = 168,
    T_DNUMBER = 170,
    T_STRING = 171,
    T_STRING_VARNAME = 172,
    T_VARIABLE = 173,
    T_NUM_STRING = 174,
    T_INLINE_HTML = 175,
    T_CHARACTER = 176,
    T_BAD_CHARACTER = 177,
    T_ENCAPSED_AND_WHITESPACE = 178,
    T_CONSTANT_ENCAPSED_STRING = 179,
    T_EXIT = 180,
    T_IF = 181,
    T_ELSEIF = 182,
    T_ELSE = 183,
    T_ENDIF = 184,
    T_ECHO = 185,
    T_DO = 186,
    T_WHILE = 187,
    T_ENDWHILE = 188,
    T_FOR = 189,
    T_ENDFOR = 190,
    T_FOREACH = 191,
    T_ENDFOREACH = 192,
    T_AS = 193,
    T_SWITCH = 194,
    T_ENDSWITCH = 195,
    T_CASE = 196,
    T_DEFAULT = 197,
    T_BREAK = 198,
    T_CONTINUE = 199,
    T_FUNCTION = 200,
    T_CONST = 201,
    T_RETURN = 202,
    T_GLOBAL = 203,
    T_STATIC = 204,
    T_VAR = 205,
    T_UNSET = 206,
    T_ISSET = 207,
    T_EMPTY = 208,
    T_CLASS = 209,
    T_EXTENDS = 210,
    T_OBJECT_OPERATOR = 211,
    T_DOUBLE_ARROW = 212,
    T_LIST = 213,
    T_ARRAY = 214,
    T_CLASS_C = 215,
    T_METHOD_C = 216,
    T_FUNC_C = 217,
    T_LINE = 218,
    T_FILE = 219,
    T_DIR = 220,
    T_COMMENT = 221,
    T_DOC_COMMENT = 222,
    T_OPEN_TAG = 227,
    T_OPEN_TAG_WITH_ECHO = 228,
    T_CLOSE_TAG = 229,
    T_WHITESPACE = 230,
    T_START_HEREDOC = 231,
    T_END_HEREDOC = 232,
    T_DOLLAR_OPEN_CURLY_BRACES = 233,
    T_CURLY_OPEN = 234,
    T_DOUBLE_COLON = 235,
    T_PAAMAYIM_NEKUDOTAYIM = 235,
    T_GOTO = 237,
    T_TRY = 238,
    T_CATCH = 239,
    T_THROW = 240,
    T_INTERFACE = 241,
    T_IMPLEMENTS = 242,
    T_ABSTRACT = 243,
    T_FINAL = 244,
    T_PRIVATE = 245,
    T_PROTECTED = 246,
    T_PUBLIC = 247,
    T_BOOL_CAST = 287,
    T_INT_CAST = 290,
    T_DOUBLE_CAST = 296,
    T_STRING_CAST = 299,
    T_ARRAY_CAST = 302,
    T_OBJECT_CAST = 303,
    T_UNSET_CAST = 304,
    T_HALT_COMPILER = 351,
    Misc/user_error_handlers.php: SUCCEEDED
    Objects/accessing%20property%20line%20number%20%2326052.php: SUCCEEDED
    Objects/conditional1.php: SUCCEEDED
    Objects/conditional2.php: SUCCEEDED
    Objects/conditional_base_class.php: SUCCEEDED
    Objects/constant_test.php: SUCCEEDED
    Objects/evaled_parent.php: SUCCEEDED
    Objects/getter_setter_bug28444.php: SUCCEEDED
    Objects/instanceof.php: SUCCEEDED
    Objects/new_via_unknown_ctor.php: SUCCEEDED
    Objects/object_creation_test.php: SUCCEEDED
    Objects/overrides%20%231285.php: SUCCEEDED
    Objects/static_field_test.php: SUCCEEDED
    Objects/static_inheritence.php: SUCCEEDED
    Objects/static_method_test.php: SUCCEEDED
    Objects/static_object_vars.php: SUCCEEDED
    Objects/sys_class_const.php: SUCCEEDED
    Objects/this2.php: SUCCEEDED
    RegEx/backreferences.php: SUCCEEDED
    RegEx/dolar_escape.php: SUCCEEDED
    RegEx/ereg.php: SUCCEEDED
    RegEx/namedbackref.php: SUCCEEDED
    RegEx/namedgroups.php: SUCCEEDED
    RegEx/preg_match_unmatched_groups.php: SUCCEEDED
    RegEx/preg_replace_eval.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ab"01300 as"00da sd"0asdsa das asd 11asd a1sd a
    ab"01300 as"00da sd"0(aasdasdkjask,$a,\,\l,a,s,d,a,s,d,k,j,a,s,${120})(ldjaklsdjalk,$l,\,\l,d,j,a,k,l,s,d,j,a,l,${120})djdsa das asd 11asd a1sd a
    ab"01300 as"00da sd"0asdsa das asd 11asd a1sd a
    ab"01300 as"00da sd"0(aasdasdkjask,$a,\,\l,a,s,d,a,s,d,k,j,,,${120})(ldjaklsdjalk,$l,\,\l,d,j,a,k,l,s,d,j,,,${120})djdsa das asd 11asd a1sd a
    RegEx/regexp-sql.php: SUCCEEDED
    RegEx/regexp_smiles.php: SUCCEEDED
    RegEx/Perl/cache.php: SUCCEEDED
    RegEx/Perl/grep1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      [3] => string(3) "1.5"
      [6] => string(5) "58.54"
    }
    Notice: preg_grep(): Array to string conversion in D:\Documents\Projects\Phalanger\Main\Testing\Tests\RegEx\Perl\__input.txt at expression on line 5, column 1.
    array(2) {
      [3]=>
      string(3) "1.5"
      [6]=>
      string(5) "58.54"
    }
    RegEx/Perl/grep2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Food  array
    (
      [0] => apple
      [1] => banana
      [2] => squid
      [3] => pear
    )
    Fruit array
    (
      [0] => apple
      [1] => banana
      [3] => pear
    )
    Food  Array
    (
        [0] => apple
        [1] => banana
        [2] => squid
        [3] => pear
    )
    Fruit Array
    (
        [0] => apple
        [1] => banana
        [3] => pear
    )
    RegEx/Perl/match1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array [empty]
    array
    (
      [0] => array
      (
        [0] => def
        [1] => 3
      )
    )
    Array
    (
    )
    Array
    (
        [0] => Array
        (
            [0] => def
            [1] => 3
        )
    
    )
    RegEx/Perl/match10.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    (
      [0] => 1231
      [1] => 1
      [2] => 23
      [3] => 1
    )
    Array
    (
        [0] => 1231
        [1] => 1
        [2] => 23
        [3] => 1
    )
    RegEx/Perl/match2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    (
      [0] => array
      (
        [0] => def
        [1] => 0
      )
    )
    Array
    (
        [0] => Array
        (
            [0] => def
            [1] => 0
        )
    
    )
    RegEx/Perl/match3.php: SUCCEEDED
    RegEx/Perl/match4.php: SUCCEEDED
    RegEx/Perl/match5.php: SUCCEEDED
    RegEx/Perl/match6.php: SUCCEEDED
    RegEx/Perl/match7.php: SUCCEEDED
    RegEx/Perl/match8.php: SUCCEEDED
    RegEx/Perl/match9.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    (
      [0] => 209.6.145.47 - - [22/Nov/2003:19:02:30 -0500] "GET /dir/doc.htm HTTP/1.0" 200 6776 "http://search.yahoo.com/search?p=key+words=UTF-8" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)"
      [1] => 209.6.145.47
      [2] => -
      [3] => -
      [4] => 22/Nov/2003:19:02:30 -0500
      [5] => GET
      [6] => /dir/doc.htm
      [7] => HTTP
      [8] => 1.0
      [9] => 200
      [10] => 6776
      [11] => "http://search.yahoo.com/search?p=key+words=UTF-8"
      [12] => "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)"
    )
    Array
    (
        [0] => 209.6.145.47 - - [22/Nov/2003:19:02:30 -0500] "GET /dir/doc.htm HTTP/1.0" 200 6776 "http://search.yahoo.com/search?p=key+words=UTF-8" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)"
        [1] => 209.6.145.47
        [2] => -
        [3] => -
        [4] => 22/Nov/2003:19:02:30 -0500
        [5] => GET
        [6] => /dir/doc.htm
        [7] => HTTP
        [8] => 1.0
        [9] => 200
        [10] => 6776
        [11] => "http://search.yahoo.com/search?p=key+words=UTF-8"
        [12] => "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)"
    )
    RegEx/Perl/match_all1.php: SUCCEEDED
    RegEx/Perl/match_all2.php: SUCCEEDED
    RegEx/Perl/match_all3.php: SUCCEEDED
    RegEx/Perl/match_all4.php: SUCCEEDED
    RegEx/Perl/match_dollar.php: SUCCEEDED
    RegEx/Perl/overflow.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string("kfkaj +j k45´┐Ż´┐Ż´┐Ż´┐Ż´┐Ż3#$%^&kjakfjkaj|kfj")
    string("kfkaj +j k45�����3#$%^&kjakfjkaj|kfj")
    RegEx/Perl/quote1.php: SUCCEEDED
    RegEx/Perl/quote2.php: SUCCEEDED
    RegEx/Perl/quote3.php: SUCCEEDED
    RegEx/Perl/replace1.php: SUCCEEDED
    RegEx/Perl/replace2.php: SUCCEEDED
    RegEx/Perl/replace3.php: SUCCEEDED
    RegEx/Perl/replace4.php: SUCCEEDED
    RegEx/Perl/replace5.php: SUCCEEDED
    RegEx/Perl/replace6.php: SUCCEEDED
    RegEx/Perl/replace7.php: SUCCEEDED
    RegEx/Perl/replace8.php: SUCCEEDED
    RegEx/Perl/replace9.php: SUCCEEDED
    RegEx/Perl/replace_callback1.php: SUCCEEDED
    RegEx/Perl/replace_callback2.php: SUCCEEDED
    RegEx/Perl/split1.php: SUCCEEDED
    RegEx/Perl/split2.php: SUCCEEDED
    RegEx/Perl/split3.php: SUCCEEDED
    RegEx/Perl/split4.php: SUCCEEDED
    RegEx/Perl/split5.php: SUCCEEDED
    RegEx/Perl/split6.php: SUCCEEDED
    RegEx/Perl/ungreedy.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    aaa
    a
    aaa
    
    a
    aa
    aaa
    aa
    aaa
    aaa
    a
    aaa
    a
    a
    aa
    aaa
    aa
    aaa
    RegEx/Perl/unsuccessful-preg_match_all.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0
    4
    1
    4
    0
    4
    1
    7
    RegEx/Perl/withoutdelimiters.php: SUCCEEDED
    SPL/ArrayAccess_offsetExists.php: SUCCEEDED
    SPL/Autoload_ctor.php: SUCCEEDED
    SPL/Autoload_extends.php: SUCCEEDED
    SPL/exceptions.php: SUCCEEDED
    Strings/addcslashes.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    \f\o\o\[ \]
    Issues a Warning:
    // echo addcslashes("zoo['.']", 'z..A');
    // output:  \zoo['\.']
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 4, column 1.
    
    Issues a Warning:
    // echo addcslashes("zoo['.']", 'z..A');
    // output:  \zoo['\.']
    Strings/addslashes.php: SUCCEEDED
    Strings/chunk_split.php: SUCCEEDED
    Strings/concat.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string(2) "ab"
    string(2) "ab"
    string(2) "ab"
    string(2) "ab"
    string(2) "ab"
    string(2) "aB"
    string(2) "Ab"
    string(2) "AB"
    string(2) "ab"
    string(2) "a1"
    string(2) "1b"
    string(2) "11"
    string(2) "ab"
    string(2) "aB"
    string(2) "Ab"
    string[binary](2) "\x41\x42"
    string(2) "ab"
    string(2) "ab"
    string(2) "ab"
    string(2) "ab"
    string(2) "ab"
    string(2) "aB"
    string(2) "Ab"
    string(2) "AB"
    string(2) "ab"
    string(2) "a1"
    string(2) "1b"
    string(2) "11"
    string(2) "ab"
    string[binary](2) "aB"
    string[binary](2) "Ab"
    string[binary](2) "AB"
    Strings/count_chars.php: SUCCEEDED
    Strings/crc32.php: SUCCEEDED
    Strings/crypt.php: SUCCEEDED
    Strings/crypt2.php: SUCCEEDED
    Strings/echo.php: SUCCEEDED
    Strings/explode.php: SUCCEEDED
    Strings/get_html_translation_table.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <hr>[&] => &amp;
    [>] => &gt;
    [<] => &lt;
    ["] => &quot;
    <hr>Hallo &amp; &lt;Frau&gt; &amp; Kr&iuml;&iquest;&frac12;mer
    <hr>[&] => &amp;
    [>] => &gt;
    [<] => &lt;
    ["] => &quot;
    <hr>Hallo &amp; &lt;Frau&gt; &amp; Kr�mer
    Strings/mb_strlen.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Call to undefined function mb_strlen() in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 4
    Error: Call to undefined function: 'mb_strlen' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 4, column 1.
    Strings/nl2br.php: SUCCEEDED
    Strings/pack.php: SUCCEEDED
    Strings/pos.php: SUCCEEDED
    Strings/runtime-quotes.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    fread = (x''y"z)
    fgets = (x''y"z)
    file[0] = (x''y"z)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    
    Warning: fopen(runtime-quotes2.txt): failed to open stream: Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 33
    
    Warning: fwrite() expects parameter 1 to be resource, boolean given in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 35
    fwrite = ()
    
    Warning: fputs() expects parameter 1 to be resource, boolean given in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 38
    fputs = ()
    
    Warning: fclose() expects parameter 1 to be resource, boolean given in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 41
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (x'y"z)
    fgets = (x'y"z)
    file[0] = (x'y"z)
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (a\'b"\\ca\)
    fgets = (a\'b"\\ca\'b"\\c)
    file[0] = (a\'b"\\ca\'b"\\c)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    e'e
    e''e
    e'e
    e'e
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    e'e
    e'e
    e'e
    e'e
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    fread = (x''y"z)
    fgets = (x''y"z)
    file[0] = (x''y"z)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    
    Warning: fopen(): Unable to access (D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\runtime-quotes2.txt): Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 33, column 3.
    
    Warning: Cannot convert boolean to resource implicitly in a call to function fwrite() in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 35, column 3.
    fwrite = (0)
    
    Warning: Cannot convert boolean to resource implicitly in a call to function fputs() in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 38, column 3.
    fputs = (0)
    
    Warning: Cannot convert boolean to resource implicitly in a call to function fclose() in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 41, column 3.
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (x'y"z)
    fgets = (x'y"z)
    file[0] = (x'y"z)
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (a\'b"\\ca\)
    fgets = (a\'b"\\ca\'b"\\c)
    file[0] = (a\'b"\\ca\'b"\\c)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    e'e
    e''e
    e'e
    e'e
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    e'e
    e'e
    e'e
    e'e
    Strings/sprintf.php: SUCCEEDED
    Strings/sprintf2.php: SUCCEEDED
    Strings/strtr.php: SUCCEEDED
    Strings/str_ireplace.php: SUCCEEDED
    Strings/str_replace.php: SUCCEEDED
    Strings/str_word_count.php: SUCCEEDED
    Strings/substr_operations.php: SUCCEEDED
    Strings/wordwrap.php: SUCCEEDED
    Variables/advanced_serialize.php: SUCCEEDED
    Variables/arguments.php: SUCCEEDED
    Variables/bitwise.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "00"
    string(2) "31"
    string(2) "31"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    0
    0
    0
    5
    0
    5
    40
    5
    45
    string(48) "000000000000000000000000000000000000000000000000"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(14) "31323331323331"
    string(2) "30"
    string(14) "31323331323331"
    string(16) "3635343635343536"
    string(2) "30"
    string(16) "3635343635343536"
    string(14) "337a5e8be43d7a"
    string(14) "00002130120201"
    string(48) "337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42"
    string(16) "347d598ce33a7e77"
    string(16) "0200243214040100"
    string(48) "367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42"
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "00"
    string(2) "31"
    string(2) "31"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    0
    -9223372036854775808
    -9223372036854775808
    -9223372036854775803
    0
    -9223372036854775803
    40
    5
    45
    string(48) "000000000000000000000000000000000000000000000000"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(14) "31323331323331"
    string(2) "30"
    string(14) "31323331323331"
    string(16) "3635343635343536"
    string(2) "30"
    string(16) "3635343635343536"
    string(14) "337a5e8be43d7a"
    string(14) "00002130120201"
    string(48) "337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42"
    string(16) "347d598ce33a7e77"
    string(16) "0200243214040100"
    string(48) "367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42"
    Variables/comparisons.php: SUCCEEDED
    Variables/constant.php: SUCCEEDED
    Variables/extract%20refs.php: SUCCEEDED
    Variables/extract.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    EXTR_PREFIX_ALL
    integer(4)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
      'prefix_non_existent' => integer(1)
    }
    <hr>EXTR_PREFIX_INVALID
    integer(5)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => integer(2)
      'non_existent' => integer(1)
      'prefix_' => integer(1)
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => 'hello'
    }
    <hr>EXTR_PREFIX_SAME
    integer(3)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'non_existent' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>EXTR_PREFIX_IF_EXISTS
    integer(3)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>
    EXTR_PREFIX_ALL
    integer(4)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
      'prefix_non_existent' => integer(1)
    }
    <hr>EXTR_PREFIX_INVALID
    integer(5)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => integer(2)
      'non_existent' => integer(1)
      'prefix_' => integer(1)
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => 'hello'
    }
    <hr>EXTR_PREFIX_SAME
    integer(4)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'non_existent' => integer(1)
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>EXTR_PREFIX_IF_EXISTS
    integer(3)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>
    Variables/func_get_args.php: SUCCEEDED
    Variables/is_number.php: SUCCEEDED
    Variables/serialize.php: SUCCEEDED
    Variables/unserialize_objects.php: SUCCEEDED
    Variables/var_dumping.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Array
    (
        [0] => 1
        [1] => 
        [2] => 1
        [3] => 1.2
        [4] => 
        [5] => asdas
        [6] => Array
            (
                [0] => 1
            )
    
        [7] => stdClass Object
            (
            )
    
        [8] => Resource id #1
    )
    array(9) {
      [0]=>
      bool(true)
      [1]=>
      bool(false)
      [2]=>
      int(1)
      [3]=>
      float(1.2)
      [4]=>
      NULL
      [5]=>
      string(5) "asdas"
      [6]=>
      array(1) {
        [0]=>
        int(1)
      }
      [7]=>
      object(stdClass)#1 (0) {
      }
      [8]=>
      resource(1) of type (stream)
    }
    array (
      0 => true,
      1 => false,
      2 => 1,
      3 => 1.2,
      4 => NULL,
      5 => 'asdas',
      6 => 
      array (
        0 => 1,
      ),
      7 => 
      stdClass::__set_state(array(
      )),
      8 => NULL,
    )
    Array
    (
        [0] => 1
        [1] => 
        [2] => 1
        [3] => 1.2
        [4] => 
        [5] => asdas
        [6] => Array
        (
            [0] => 1
        )
    
        [7] => stdClass Object
        (
        )
    
        [8] => resource id #4
    
    )
    array(9) {
      [0]=>
      bool(true)
      [1]=>
      bool(false)
      [2]=>
      int(1)
      [3]=>
      float(1.2)
      [4]=>
      NULL
      [5]=>
      string(5) "asdas"
      [6]=>
      array(1) {
        [0]=>
        int(1)
      }
      [7]=>
      object(stdClass)(0) {
      }
      [8]=>
      resource(4) of type (stream)
    }
    array
    (
      '0' => true,
      '1' => false,
      '2' => 1,
      '3' => 1.2,
      '4' => NULL,
      '5' => 'asdas',
      '6' => array
      (
        '0' => 1
      ),
      '7' => class stdClass
      {
    
      },
      '8' => NULL
    )
    Xml/025.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
      'foo' => 'foobar'
    }
    array
    {
      'html' => 'http://www.w3.org/1999/xhtml'
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
    }
    array
    {
      'html' => 'http://www.w3.org/1999/xhtml'
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'foo' => 'foobar'
      'baz' => 'foobarbaz'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
    }
    array
    {
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
      'baz' => 'foobarbaz'
      'foo' => 'foobar'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
      'baz' => 'foobarbaz'
      'foo' => 'foobar'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
    }
    array
    {
    }
    Xml/026.php: SUCCEEDED
    Xml/027.php: SUCCEEDED
    Xml/028.php: SUCCEEDED
    Xml/029.php: SUCCEEDED
    Xml/030.php: SUCCEEDED
    Xml/032.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    FALSE
    FALSE
    FALSE
    TRUE
    TRUE
    TRUE
    Xml/033.php: SUCCEEDED
    Xml/bug26384.php: SUCCEEDED
    Xml/bug28721.php: SUCCEEDED
    Xml/bug28817.php: SUCCEEDED
    Xml/bug32615.php: SUCCEEDED
    Xml/bug33853.php: SUCCEEDED
    Xml/bug34276.php: SUCCEEDED
    Xml/bug35342.php: SUCCEEDED
    Xml/bug36756.php: SUCCEEDED
    Xml/bug37277.php: SUCCEEDED
    Xml/dom002.php: SUCCEEDED
    Xml/dom003.php: SUCCEEDED
    Xml/dom006.php: SUCCEEDED
    Xml/dom007.php: SUCCEEDED
    Xml/dom_set_attr_node.php: SUCCEEDED
    Xml/xmlhandler.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test begins
    <br/>
    <br/>test begins
    <br/>empty begins
    <br/>empty ends
    <br/>nocontent begins
    <br/>nocontent ends
    <br/>content begins
    <br/>empty begins
    <br/>empty ends
    <br/>empty begins
    <br/>empty ends
    <br/>content ends
    <br/>empty begins
    <br/>empty ends
    <br/>empty begins
    <br/>empty ends
    <br/>test ends
    <br/>Test ends
    <br/>
    <br/>
    Test begins
    <br/>
    <br/>
    Error: Call to undefined function: 'xml_parser_create' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Xml\__input.txt at expression on line 18, column 3.
    Xml/xslt001.php: SUCCEEDED
    Xml/xslt002.php: SUCCEEDED
    Xml/xslt003.php: SUCCEEDED
    Xml/xslt004.php: SUCCEEDED
    Xml/xslt005.php: SUCCEEDED
    Xml/xslt006.php: SUCCEEDED
    Xml/xslt007.php: SUCCEEDED
    Xml/xslt010.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test 10: EXSLT Support
      
      
      Test Date : 0001-12-31Z
        year                 : 1
        leap-year            : false
        month-in-year        : 12
        month-name           : December
        month-abbreviation   : Dec
        week-in-year         : 1
        day-in-year          : 365
        day-in-month         : 31
        day-of-week-in-month : 5
        day-in-week          : 2
        day-name             : Monday
        day-abbreviation     : Mon
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : 3000-01-31
        year                 : 3000
        leap-year            : false
        month-in-year        : 1
        month-name           : January
        month-abbreviation   : Jan
        week-in-year         : 5
        day-in-year          : 31
        day-in-month         : 31
        day-of-week-in-month : 5
        day-in-week          : 6
        day-name             : Friday
        day-abbreviation     : Fri
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : 2000-02-29
        year                 : 2000
        leap-year            : true
        month-in-year        : 2
        month-name           : February
        month-abbreviation   : Feb
        week-in-year         : 9
        day-in-year          : 60
        day-in-month         : 29
        day-of-week-in-month : 5
        day-in-week          : 3
        day-name             : Tuesday
        day-abbreviation     : Tue
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : 9990001-12-31Z
        year                 : 9990001
        leap-year            : false
        month-in-year        : 12
        month-name           : December
        month-abbreviation   : Dec
        week-in-year         : 1
        day-in-year          : 365
        day-in-month         : 31
        day-of-week-in-month : 5
        day-in-week          : 2
        day-name             : Monday
        day-abbreviation     : Mon
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : -0004-02-29
        year                 : -4
        leap-year            : true
        month-in-year        : 2
        month-name           : February
        month-abbreviation   : Feb
        week-in-year         : 9
        day-in-year          : 60
        day-in-month         : 29
        day-of-week-in-month : 5
        day-in-week          : 1
        day-name             : Sunday
        day-abbreviation     : Sun
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
    Test 10: EXSLT Support
    Warning: Cannot find a script or an extension object associated with namespace 'http://exslt.org/dates-and-times'..
    
    Warning: Illegal string offset '-1' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Phalanger.inc at expression on line 7, column 6.
    Xml/xslt011.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test 11: php:function Support
    
    Warning: XSLTProcessor::transformToXml(): A PHP Object cannot be converted to a XPath-string in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Xml\__input.txt on line 18
    <?xml version="1.0"?>
    foobar - secondArg
    foobar - 
    this is from an external DomDocument
    from the Input Document
    static
    Test 11: php:function Support
    <?xml version="1.0" encoding="utf-8"?>foobar - secondArg
    foobar - 
    this is from an external DomDocument
    from the Input Document
    static
    not a DomNode object
    Xml/xslt012.php: SUCCEEDED
    ================================================ FILE: Testing/Tests/TestLogs/TestLog (1833).htm ================================================ PHP.NET Compiler test log

    PHP.NET Compiler test log

    (89%) 821 succeeded, 105 failed
    Test ResultCompiler error outputExpected test result
    @PHP/classes/array_access_001.php: SUCCEEDED
    @PHP/classes/array_access_002.php: SUCCEEDED
    @PHP/classes/array_access_003.php: SUCCEEDED
    @PHP/classes/array_access_004.php: SUCCEEDED
    @PHP/classes/array_access_005.php: SUCCEEDED
    @PHP/classes/array_access_006.php: SUCCEEDED
    @PHP/classes/array_access_007.php: SUCCEEDED
    @PHP/classes/array_access_008.php: SUCCEEDED
    @PHP/classes/array_access_009.php: SUCCEEDED
    @PHP/classes/array_access_010.php: SUCCEEDED
    @PHP/classes/array_access_011.php: SUCCEEDED
    @PHP/classes/array_access_013.php: SUCCEEDED
    @PHP/classes/assign_op_property_001.php: SUCCEEDED
    @PHP/classes/autoload_001.php: SUCCEEDED
    @PHP/classes/autoload_002.php: SUCCEEDED
    @PHP/classes/autoload_003.php: SUCCEEDED
    @PHP/classes/autoload_005.php: SUCCEEDED
    @PHP/classes/autoload_006.php: SUCCEEDED
    @PHP/classes/bug23951.php: SUCCEEDED
    @PHP/classes/bug24399.php: SUCCEEDED
    @PHP/classes/bug24445.php: SUCCEEDED
    @PHP/classes/bug26737.php: SUCCEEDED
    @PHP/classes/bug27468.php: SUCCEEDED
    @PHP/classes/bug27504.php: SUCCEEDED
    @PHP/classes/class_example.php: SUCCEEDED
    @PHP/classes/class_stdclass.php: SUCCEEDED
    @PHP/classes/clone_001.php: SUCCEEDED
    @PHP/classes/clone_002.php: SUCCEEDED
    @PHP/classes/clone_003.php: SUCCEEDED
    @PHP/classes/clone_004.php: SUCCEEDED
    @PHP/classes/clone_006.php: SUCCEEDED
    @PHP/classes/constants_scope_001.php: SUCCEEDED
    @PHP/classes/ctor_dtor.php: SUCCEEDED
    @PHP/classes/ctor_dtor_inheritance.php: SUCCEEDED
    @PHP/classes/ctor_name_clash.php: SUCCEEDED
    @PHP/classes/dereferencing_001.php: SUCCEEDED
    @PHP/classes/destructor_and_echo.php: SUCCEEDED
    @PHP/classes/destructor_and_references.php: SUCCEEDED
    @PHP/classes/destructor_inheritance.php: SUCCEEDED
    @PHP/classes/destructor_visibility_003.php: SUCCEEDED
    @PHP/classes/factory_001.php: SUCCEEDED
    @PHP/classes/factory_and_singleton_001.php: SUCCEEDED
    @PHP/classes/factory_and_singleton_002.php: SUCCEEDED
    @PHP/classes/final.php: SUCCEEDED
    @PHP/classes/incdec_property_001.php: SUCCEEDED
    @PHP/classes/incdec_property_002.php: SUCCEEDED
    @PHP/classes/incdec_property_003.php: SUCCEEDED
    @PHP/classes/incdec_property_004.php: SUCCEEDED
    @PHP/classes/inheritance.php: SUCCEEDED
    @PHP/classes/inheritance_002.php: SUCCEEDED
    @PHP/classes/interfaces_001.php: SUCCEEDED
    @PHP/classes/interface_construct.php: SUCCEEDED
    @PHP/classes/interface_doubled.php: SUCCEEDED
    @PHP/classes/interface_implemented.php: SUCCEEDED
    @PHP/classes/iterators_001.php: SUCCEEDED
    @PHP/classes/iterators_002.php: SUCCEEDED
    @PHP/classes/iterators_003.php: SUCCEEDED
    @PHP/classes/iterators_004.php: SUCCEEDED
    @PHP/classes/iterators_006.php: SUCCEEDED
    @PHP/classes/iterators_007.php: SUCCEEDED
    @PHP/classes/object_reference_001.php: SUCCEEDED
    @PHP/classes/private_001.php: SUCCEEDED
    @PHP/classes/private_002.php: SUCCEEDED
    @PHP/classes/private_003.php: SUCCEEDED
    @PHP/classes/private_003b.php: SUCCEEDED
    @PHP/classes/private_004.php: SUCCEEDED
    @PHP/classes/private_004b.php: SUCCEEDED
    @PHP/classes/private_005.php: SUCCEEDED
    @PHP/classes/private_005b.php: SUCCEEDED
    @PHP/classes/private_006.php: SUCCEEDED
    @PHP/classes/private_006b.php: SUCCEEDED
    @PHP/classes/private_007.php: SUCCEEDED
    @PHP/classes/private_007b.php: SUCCEEDED
    @PHP/classes/private_members.php: SUCCEEDED
    @PHP/classes/private_redeclare.php: SUCCEEDED
    @PHP/classes/protected_001.php: SUCCEEDED
    @PHP/classes/protected_001b.php: SUCCEEDED
    @PHP/classes/protected_002.php: SUCCEEDED
    @PHP/classes/serialize_001.php: SUCCEEDED
    @PHP/classes/singleton_001.php: SUCCEEDED
    @PHP/classes/static_properties_001.php: SUCCEEDED
    @PHP/classes/type_hinting_001.php: SUCCEEDED
    @PHP/classes/type_hinting_003.php: SUCCEEDED
    @PHP/classes/visibility_000c.php: SUCCEEDED
    @PHP/classes/visibility_001c.php: SUCCEEDED
    @PHP/classes/visibility_002c.php: SUCCEEDED
    @PHP/classes/visibility_003a.php: SUCCEEDED
    @PHP/classes/visibility_003c.php: SUCCEEDED
    @PHP/classes/visibility_004a.php: SUCCEEDED
    @PHP/classes/visibility_004b.php: SUCCEEDED
    @PHP/classes/visibility_004c.php: SUCCEEDED
    @PHP/classes/visibility_005.php: SUCCEEDED
    @PHP/classes/__call_001.php: SUCCEEDED
    @PHP/classes/__set_data_corrupt.php: SUCCEEDED
    @PHP/classes/__set__get_001.php: SUCCEEDED
    @PHP/classes/__set__get_004.php: SUCCEEDED
    @PHP/classes/__set__get_005.php: SUCCEEDED
    @PHP/date/bug17988.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2002-06-25 12:18:48
    2002-06-25 14:18:48
    2002-06-25 13:18:48
    2002-06-25 12:18:48
    2002-06-25 18:18:48
    2002-06-25 14:18:48
    2002-06-25 14:18:48
    2002-06-25 18:18:48
    2002-06-25 10:18:48
    2002-06-25 17:18:48
    2002-06-25 11:18:48
    2002-06-25 17:48:48
    2002-06-25 10:48:48
    2002-06-25 14:18:48
    2002-06-25 14:18:48
    2002-06-25 13:18:48
    2002-06-25 12:18:48
    2002-06-25 18:18:48
    2002-06-25 14:18:48
    2002-06-25 14:18:48
    2002-06-25 18:18:48
    2002-06-25 10:18:48
    2002-06-25 17:18:48
    2002-06-25 11:18:48
    2002-06-25 17:48:48
    2002-06-25 10:48:48
    @PHP/date/bug26317.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2003-11-19 17:20:42
    2003-11-19 17:20:42
    2003-11-19 17:20:42
    2003-11-19 16:20:42
    2003-11-19 16:20:42
    2003-11-19 16:20:42
    @PHP/date/bug26320.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2003-11-19 12:30:42
    2003-11-19 13:30:42
    2003-11-19 12:30:42
    2003-11-19 12:30:42
    @PHP/date/bug28088.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    The following line rightly shows the correct date time:
    04/04/04 2145
    But the following line fails to show the correct date time:
    04/03/04 2245
    The following line rightly shows the correct date time:
    04/04/04 2345
    But the following line fails to show the correct date time:
    04/04/04 0045
    @PHP/date/bug28599.php: SUCCEEDED
    @PHP/date/bug29150.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2005-06-19 22:00:00
    2005-06-20 00:00:00
    @PHP/date/bug29585.php: SUCCEEDED
    @PHP/date/bug29595.php: SUCCEEDED
    @PHP/date/bug33056.php: SUCCEEDED
    @PHP/date/bug33452.php: SUCCEEDED
    @PHP/date/bug33562.php: SUCCEEDED
    @PHP/date/bug33563.php: SUCCEEDED
    @PHP/date/bug33578.php: SUCCEEDED
    @PHP/date/bug33869.php: SUCCEEDED
    @PHP/date/bug34676.php: SUCCEEDED
    @PHP/date/bug34771.php: SUCCEEDED
    @PHP/date/bug35143.php: SUCCEEDED
    @PHP/date/bug35414.php: SUCCEEDED
    @PHP/date/bug35422.php: SUCCEEDED
    @PHP/date/bug35425.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    integer(42)
    integer(1)
    integer(1)
    integer(1)
    integer(1)
    integer(0)
    integer(0)
    integer(1)
    integer(1)
    integer(31)
    integer(1104537661)
    integer(6)
    integer(53)
    integer(5)
    integer(2005)
    integer(0)
    integer(3600)
    integer(292)
    integer(1)
    integer(1)
    integer(1)
    integer(1)
    integer(0)
    integer(0)
    integer(1)
    integer(1)
    integer(31)
    integer(1104559261)
    integer(6)
    integer(53)
    integer(5)
    integer(2005)
    integer(0)
    integer(-18000)
    @PHP/date/bug35456.php: SUCCEEDED
    @PHP/date/bug35624.php: SUCCEEDED
    @PHP/date/bug35630.php: SUCCEEDED
    @PHP/date/bug35699.php: SUCCEEDED
    @PHP/date/bug35705.php: SUCCEEDED
    @PHP/date/bug35885.php: SUCCEEDED
    @PHP/date/bug35887.php: SUCCEEDED
    @PHP/date/date.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    c: 2003-01-23T13:20:59+01:00
    r: Thu, 23 Jan 2003 13:20:59 +0100
    c: 2003-01-23T13:20:59+01:00
    r: Thu, 23 Jan 2003 13:20:59 +0100
    c: 2003-01-23T12:20:59+00:00
    r: Thu, 23 Jan 2003 12:20:59 +0000
    c: 2003-01-23T13:20:59+01:00
    r: Thu, 23 Jan 2003 13:20:59 +0100
    @PHP/date/date_create-1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\date\__input.txt on line 28
    SKIP
    @PHP/date/date_create-2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\date\__input.txt on line 6
    SKIP
    @PHP/date/date_default_timezone_get-3.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Europe/Prague
    America/Chicago
    Europe/Rome
    America/Chicago
    @PHP/date/date_modify-1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\date\__input.txt on line 6
    SKIP
    @PHP/date/date_modify-2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\date\__input.txt on line 6
    SKIP
    @PHP/date/default-timezone-1.php: SUCCEEDED
    @PHP/date/default-timezone-2.php: SUCCEEDED
    @PHP/date/format-negative-timestamp.php: SUCCEEDED
    @PHP/date/strtotime.php: SUCCEEDED
    @PHP/date/timezone-configuration.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    1119125744
    1119125744
    1119125744
    1119125744
    1119129344
    1119125744
    @PHP/doc_examples/test001.php: SUCCEEDED
    @PHP/doc_examples/test002.php: SUCCEEDED
    @PHP/doc_examples/test003.php: SUCCEEDED
    @PHP/doc_examples/test004.php: SUCCEEDED
    @PHP/doc_examples/test005.php: SUCCEEDED
    @PHP/doc_examples/test006.php: SUCCEEDED
    @PHP/doc_examples/test007.php: SUCCEEDED
    @PHP/doc_examples/test008.php: SUCCEEDED
    @PHP/doc_examples/test009.php: SUCCEEDED
    @PHP/doc_examples/test010.php: SUCCEEDED
    @PHP/doc_examples/test011.php: SUCCEEDED
    @PHP/doc_examples/test013.php: SUCCEEDED
    @PHP/doc_examples/test014.php: SUCCEEDED
    @PHP/doc_examples/test015.php: SUCCEEDED
    @PHP/doc_examples/test016.php: SUCCEEDED
    @PHP/doc_examples/test017.php: SUCCEEDED
    @PHP/doc_examples/test018.php: SUCCEEDED
    @PHP/doc_examples/test019.php: SUCCEEDED
    @PHP/doc_examples/test020.php: SUCCEEDED
    @PHP/doc_examples/test021.php: SUCCEEDED
    @PHP/doc_examples/test022.php: SUCCEEDED
    @PHP/doc_examples/test023.php: SUCCEEDED
    @PHP/doc_examples/test024.php: SUCCEEDED
    @PHP/doc_examples/test025.php: SUCCEEDED
    @PHP/doc_examples/test026.php: SUCCEEDED
    @PHP/doc_examples/test027.php: SUCCEEDED
    @PHP/doc_examples/test028.php: SUCCEEDED
    @PHP/doc_examples/test029.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ´┐Żauky
    �auky
    @PHP/doc_examples/test030.php: SUCCEEDED
    @PHP/doc_examples/test031.php: SUCCEEDED
    @PHP/doc_examples/test032.php: SUCCEEDED
    @PHP/doc_examples/test033.php: SUCCEEDED
    @PHP/doc_examples/test034.php: SUCCEEDED
    @PHP/doc_examples/test035.php: SUCCEEDED
    @PHP/doc_examples/test036.php: SUCCEEDED
    @PHP/doc_examples/test037.php: SUCCEEDED
    @PHP/doc_examples/test038.php: SUCCEEDED
    @PHP/doc_examples/test039.php: SUCCEEDED
    @PHP/doc_examples/test040.php: SUCCEEDED
    @PHP/doc_examples/test041.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    call_user_func():
    hello world!
    Strict Standards: call_user_func(): Non-static method MyClass::myCallbackMethod() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\doc_examples\__input.txt at expression on line 17, column 1.
    Hello World!Hello World!
    @PHP/doc_examples/test042.php: SUCCEEDED
    @PHP/doc_examples/test043.php: SUCCEEDED
    @PHP/doc_examples/test044.php: SUCCEEDED
    @PHP/doc_examples/test045.php: SUCCEEDED
    @PHP/doc_examples/test046.php: SUCCEEDED
    @PHP/doc_examples/test047.php: SUCCEEDED
    @PHP/doc_examples/test048.php: SUCCEEDED
    @PHP/doc_examples/test049.php: SUCCEEDED
    @PHP/doc_examples/test050.php: SUCCEEDED
    @PHP/doc_examples/test051.php: SUCCEEDED
    @PHP/doc_examples/test052.php: SUCCEEDED
    @PHP/doc_examples/test053.php: SUCCEEDED
    @PHP/doc_examples/test054.php: SUCCEEDED
    @PHP/doc_examples/test055.php: SUCCEEDED
    @PHP/doc_examples/test056.php: SUCCEEDED
    @PHP/doc_examples/test057.php: SUCCEEDED
    @PHP/doc_examples/test058.php: SUCCEEDED
    @PHP/doc_examples/test059.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    Deprecated: Assigning the return value of new by reference is deprecated in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\doc_examples\__input.txt on line 4
    NULL
    object(stdClass)#1 (0) {
    }
    NULL
    object(stdClass)(0) {
    }
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\doc_examples\__input.txt(4,5): warning PHP0181: Assigning the return value of new by reference is deprecated
    
    @PHP/doc_examples/test060.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    Deprecated: Assigning the return value of new by reference is deprecated in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\doc_examples\__input.txt on line 9
    Static object: NULL
    Static object: NULL
    
    Static object: NULL
    Static object: object(stdClass)#3 (1) {
      ["property"]=>
      int(1)
    }
    Static object: NULL
    Static object: NULL
    
    Static object: NULL
    Static object: object(stdClass)(1) {
      ["property"]=>
      int(1)
    }
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\doc_examples\__input.txt(9,9): warning PHP0181: Assigning the return value of new by reference is deprecated
    
    @PHP/doc_examples/test061.php: SUCCEEDED
    @PHP/doc_examples/test062.php: SUCCEEDED
    @PHP/doc_examples/test063.php: SUCCEEDED
    @PHP/doc_examples/test064.php: SUCCEEDED
    @PHP/doc_examples/test065.php: SUCCEEDED
    @PHP/doc_examples/test066.php: SUCCEEDED
    @PHP/doc_examples/test067.php: SUCCEEDED
    @PHP/doc_examples/test068.php: SUCCEEDED
    @PHP/doc_examples/test069.php: SUCCEEDED
    @PHP/doc_examples/test070.php: SUCCEEDED
    @PHP/doc_examples/test071.php: SUCCEEDED
    @PHP/doc_examples/test072.php: SUCCEEDED
    @PHP/doc_examples/test073.php: SUCCEEDED
    @PHP/doc_examples/test074.php: SUCCEEDED
    @PHP/doc_examples/test075.php: SUCCEEDED
    @PHP/doc_examples/test076.php: SUCCEEDED
    @PHP/doc_examples/test077.php: SUCCEEDED
    @PHP/doc_examples/test078.php: SUCCEEDED
    @PHP/doc_examples/test079.php: SUCCEEDED
    @PHP/doc_examples/test080.php: SUCCEEDED
    @PHP/doc_examples/test081.php: SUCCEEDED
    @PHP/doc_examples/test082.php: SUCCEEDED
    @PHP/doc_examples/test083.php: SUCCEEDED
    @PHP/doc_examples/test084.php: SUCCEEDED
    @PHP/doc_examples/test085.php: SUCCEEDED
    @PHP/doc_examples/test086.php: SUCCEEDED
    @PHP/doc_examples/test087.php: SUCCEEDED
    @PHP/doc_examples/test088.php: SUCCEEDED
    @PHP/doc_examples/test089.php: SUCCEEDED
    @PHP/doc_examples/test090.php: SUCCEEDED
    @PHP/doc_examples/test091.php: SUCCEEDED
    @PHP/doc_examples/test092.php: SUCCEEDED
    @PHP/doc_examples/test093.php: SUCCEEDED
    @PHP/doc_examples/test094.php: SUCCEEDED
    @PHP/doc_examples/test095.php: SUCCEEDED
    @PHP/doc_examples/test096.php: SUCCEEDED
    @PHP/doc_examples/test097.php: SUCCEEDED
    @PHP/doc_examples/test098.php: SUCCEEDED
    @PHP/doc_examples/test099.php: SUCCEEDED
    @PHP/doc_examples/test100.php: SUCCEEDED
    @PHP/doc_examples/test102.php: SUCCEEDED
    @PHP/doc_examples/test103.php: SUCCEEDED
    @PHP/doc_examples/test104.php: SUCCEEDED
    @PHP/doc_examples/test105.php: SUCCEEDED
    @PHP/doc_examples/test107.php: SUCCEEDED
    @PHP/doc_examples/test108.php: SUCCEEDED
    @PHP/doc_examples/test109.php: SUCCEEDED
    @PHP/doc_examples/test110.php: SUCCEEDED
    @PHP/doc_examples/test111.php: SUCCEEDED
    @PHP/doc_examples/test112.php: SUCCEEDED
    @PHP/doc_examples/test113.php: SUCCEEDED
    @PHP/doc_examples/test114.php: SUCCEEDED
    @PHP/doc_examples/test115.php: SUCCEEDED
    @PHP/doc_examples/test116.php: SUCCEEDED
    @PHP/doc_examples/test117.php: SUCCEEDED
    @PHP/doc_examples/test118.php: SUCCEEDED
    @PHP/doc_examples/test119.php: SUCCEEDED
    @PHP/doc_examples/test120.php: SUCCEEDED
    @PHP/doc_examples/test121.php: SUCCEEDED
    @PHP/doc_examples/test122.php: SUCCEEDED
    @PHP/doc_examples/test123.php: SUCCEEDED
    @PHP/doc_examples/test124.php: SUCCEEDED
    @PHP/doc_examples/test125.php: SUCCEEDED
    @PHP/doc_examples/test126.php: SUCCEEDED
    @PHP/doc_examples/test127.php: SUCCEEDED
    @PHP/doc_examples/test128.php: SUCCEEDED
    @PHP/doc_examples/test129.php: SUCCEEDED
    @PHP/doc_examples/test130.php: SUCCEEDED
    @PHP/doc_examples/test131.php: SUCCEEDED
    @PHP/doc_examples/test132.php: SUCCEEDED
    @PHP/doc_examples/test133.php: SUCCEEDED
    @PHP/doc_examples/test134.php: SUCCEEDED
    @PHP/doc_examples/test136.php: SUCCEEDED
    @PHP/doc_examples/test137.php: SUCCEEDED
    @PHP/doc_examples/test138.php: SUCCEEDED
    @PHP/doc_examples/test139.php: SUCCEEDED
    @PHP/doc_examples/test148.php: SUCCEEDED
    @PHP/doc_examples/test149.php: SUCCEEDED
    @PHP/doc_examples/test150.php: SUCCEEDED
    @PHP/doc_examples/test151.php: SUCCEEDED
    @PHP/doc_examples/test152.php: SUCCEEDED
    @PHP/doc_examples/test153.php: SUCCEEDED
    @PHP/doc_examples/test154.php: SUCCEEDED
    @PHP/doc_examples/test155.php: SUCCEEDED
    @PHP/doc_examples/test156.php: SUCCEEDED
    @PHP/doc_examples/test158.php: SUCCEEDED
    @PHP/lang/001.php: SUCCEEDED
    @PHP/lang/002.php: SUCCEEDED
    @PHP/lang/003.php: SUCCEEDED
    @PHP/lang/004.php: SUCCEEDED
    @PHP/lang/005.php: SUCCEEDED
    @PHP/lang/006.php: SUCCEEDED
    @PHP/lang/007.php: SUCCEEDED
    @PHP/lang/008.php: SUCCEEDED
    @PHP/lang/009.php: SUCCEEDED
    @PHP/lang/010.php: SUCCEEDED
    @PHP/lang/011.php: SUCCEEDED
    @PHP/lang/012.php: SUCCEEDED
    @PHP/lang/013.php: SUCCEEDED
    @PHP/lang/014.php: SUCCEEDED
    @PHP/lang/015.php: SUCCEEDED
    @PHP/lang/016.php: SUCCEEDED
    @PHP/lang/017.php: SUCCEEDED
    @PHP/lang/018.php: SUCCEEDED
    @PHP/lang/019.php: SUCCEEDED
    @PHP/lang/020.php: SUCCEEDED
    @PHP/lang/021.php: SUCCEEDED
    @PHP/lang/022.php: SUCCEEDED
    @PHP/lang/023.php: SUCCEEDED
    @PHP/lang/024.php: SUCCEEDED
    @PHP/lang/025.php: SUCCEEDED
    @PHP/lang/026.php: SUCCEEDED
    @PHP/lang/027.php: SUCCEEDED
    @PHP/lang/028.php: SUCCEEDED
    @PHP/lang/030.php: SUCCEEDED
    @PHP/lang/032.php: SUCCEEDED
    @PHP/lang/036.php: SUCCEEDED
    @PHP/lang/037.php: SUCCEEDED
    @PHP/lang/038.php: SUCCEEDED
    @PHP/lang/039.php: SUCCEEDED
    @PHP/lang/040.php: SUCCEEDED
    @PHP/lang/bison1.php: SUCCEEDED
    @PHP/lang/bug17115.php: SUCCEEDED
    @PHP/lang/bug18872.php: SUCCEEDED
    @PHP/lang/bug19943.php: SUCCEEDED
    @PHP/lang/bug20175.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    Deprecated: Assigning the return value of new by reference is deprecated in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\lang\__input.txt on line 110
    foo_static()
    foo_global()
    foo:1
    foo_static()
    foo:1
    bar_static()
    bar_global()
    bar:1
    bar_static()
    bar:1
    wow_static()
    wow_global()
    wow:1
    wow_static()
    wow:1
    oop_test()
    oop_static()
    oop_class()
    oop:1
    oop_static()
    oop:1
    oop_test()
    oop_static()
    oop:1
    foo_static()
    foo_global()
    foo:1
    foo_static()
    foo:1
    bar_static()
    bar_global()
    bar:1
    bar_static()
    bar_global()
    bar:2
    wow_static()
    wow_global()
    wow:1
    wow_static()
    wow:1
    oop_test()
    oop_static()
    oop_class()
    oop:1
    oop_static()
    oop:1
    oop_test()
    oop_static()
    oop:1
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\lang\__input.txt(110,4): warning PHP0181: Assigning the return value of new by reference is deprecated
    
    @PHP/lang/bug21094.php: SUCCEEDED
    @PHP/lang/bug21600.php: SUCCEEDED
    @PHP/lang/bug21669.php: SUCCEEDED
    @PHP/lang/bug21849.php: SUCCEEDED
    @PHP/lang/bug21961.php: SUCCEEDED
    @PHP/lang/bug22231.php: SUCCEEDED
    @PHP/lang/bug22367.php: SUCCEEDED
    @PHP/lang/bug22510.php: SUCCEEDED
    @PHP/lang/bug22592.php: SUCCEEDED
    @PHP/lang/bug22690.php: SUCCEEDED
    @PHP/lang/bug23279.php: SUCCEEDED
    @PHP/lang/bug23384.php: SUCCEEDED
    @PHP/lang/bug23489.php: SUCCEEDED
    @PHP/lang/bug23524.php: SUCCEEDED
    @PHP/lang/bug23922.php: SUCCEEDED
    @PHP/lang/bug24054.php: SUCCEEDED
    @PHP/lang/bug24396.php: SUCCEEDED
    @PHP/lang/bug24403.php: SUCCEEDED
    @PHP/lang/bug24436.php: SUCCEEDED
    @PHP/lang/bug24499.php: SUCCEEDED
    @PHP/lang/bug24640.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    double(1700000000000000089258092433847514422797596587883870563356951996370064178581143932836831337636761368874297554515902592900802289500112731978596146714137401870842258241575178866354311397451139753100927220499450359906637902366244989496126909662726242240784739940994096632824796638102733857671280980918272.0000000000)
    1.7E+300
    
    ------
    double(0.0000000000)
    1.7E-300
    
    ------
    double(17000000000000001584208052028780237480128823455860622330108867175329927830437888.0000000000)
    1.7E+79
    
    ------
    double(0.0000000000)
    1.7E-79
    
    ------
    double(169999999999999996096025832433329868941658043870400163508258284150340918121070592.0000000000)
    1.7E+80
    
    ------
    double(0.0000000000)
    1.7E-80
    
    ------
    double(1700000000000000013616404158611892038375594280539217794530130541777964808366194688.0000000000)
    1.7E+81
    
    ------
    double(0.0000000000)
    1.7E-81
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    1.6999810742106E-319
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    1.7000798873397E-320
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    1.6995858216939E-321
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    0
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    0
    
    ------
    double(1700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+300
    
    ------
    double(0.0000000000)
    1.70000000000003E-300
    
    ------
    double(17000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+79
    
    ------
    double(0.0000000000)
    1.70000000000001E-79
    
    ------
    double(170000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+80
    
    ------
    double(0.0000000000)
    1.70000000000001E-80
    
    ------
    double(1700000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+81
    
    ------
    double(0.0000000000)
    1.70000000000001E-81
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    1.69998107421056E-319
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    1.70007988733973E-320
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    1.69464516523548E-321
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    0
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    0
    
    ------
    @PHP/lang/bug24652.php: SUCCEEDED
    @PHP/lang/bug24658.php: SUCCEEDED
    @PHP/lang/bug24783.php: SUCCEEDED
    @PHP/lang/bug24926.php: SUCCEEDED
    @PHP/lang/bug25547.php: SUCCEEDED
    @PHP/lang/bug25652.php: SUCCEEDED
    @PHP/lang/bug25922.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Undefined index here: 'error'
    Undefined index here: ''
    @PHP/lang/bug26182.php: SUCCEEDED
    @PHP/lang/bug26696.php: SUCCEEDED
    @PHP/lang/bug26866.php: SUCCEEDED
    @PHP/lang/bug26869.php: SUCCEEDED
    @PHP/lang/bug27354.php: SUCCEEDED
    @PHP/lang/bug27439.php: SUCCEEDED
    @PHP/lang/bug27535.php: SUCCEEDED
    @PHP/lang/bug28213.php: SUCCEEDED
    @PHP/lang/bug28800.php: SUCCEEDED
    @PHP/lang/bug29566.php: SUCCEEDED
    @PHP/lang/bug29893.php: SUCCEEDED
    @PHP/lang/bug29944.php: SUCCEEDED
    @PHP/lang/bug30638.php: SUCCEEDED
    @PHP/lang/bug30726.php: SUCCEEDED
    @PHP/lang/bug30862.php: SUCCEEDED
    @PHP/lang/bug32924.php: SUCCEEDED
    @PHP/lang/bug35382.php: SUCCEEDED
    @PHP/lang/bug7515.php: SUCCEEDED
    @PHP/lang/each_binary_safety.php: SUCCEEDED
    @PHP/lang/error_2_exception_001.php: SUCCEEDED
    @PHP/lang/foreach_with_object_001.php: SUCCEEDED
    @PHP/lang/foreach_with_references_001.php: SUCCEEDED
    @PHP/lang/type_hints_001.php: SUCCEEDED
    @PHP/standard/array/001.php: SUCCEEDED
    @PHP/standard/array/003.php: SUCCEEDED
    @PHP/standard/array/004.php: SUCCEEDED
    @PHP/standard/array/005.php: SUCCEEDED
    @PHP/standard/array/008.php: SUCCEEDED
    @PHP/standard/array/array_change_key_case.php: SUCCEEDED
    @PHP/standard/array/array_chunk.php: SUCCEEDED
    @PHP/standard/array/array_count_values.php: SUCCEEDED
    @PHP/standard/array/array_diff_1.php: SUCCEEDED
    @PHP/standard/array/array_diff_key.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ------ Test 1 --------
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 2 --------
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 3 --------
    array(6) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [2]=>
      int(4)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [2]=>
      int(4)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 4 --------
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 5 --------
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 6 --------
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 7 --------
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    ------ Test 8 --------
    array(6) {
      [0]=>
      int(0)
      [7]=>
      int(14)
      [2]=>
      int(4)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [0]=>
      int(0)
      [7]=>
      int(14)
      [2]=>
      int(4)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 9 --------
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    ------ Test 1 --------
    array(4) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(4) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 2 --------
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 3 --------
    array(6) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [2]=>
      &int(4)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [2]=>
      &int(4)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 4 --------
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 5 --------
    array(4) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(4) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 6 --------
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 7 --------
    array(3) {
      [7]=>
      &int(14)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
    }
    array(3) {
      [7]=>
      &int(14)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
    }
    ------ Test 8 --------
    array(6) {
      [0]=>
      &int(0)
      [7]=>
      &int(14)
      [2]=>
      &int(4)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [0]=>
      &int(0)
      [7]=>
      &int(14)
      [2]=>
      &int(4)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 9 --------
    array(3) {
      [7]=>
      &int(14)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
    }
    array(3) {
      [7]=>
      &int(14)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
    }
    @PHP/standard/array/array_intersect_key.php: SUCCEEDED
    @PHP/standard/array/array_sum.php: SUCCEEDED
    @PHP/standard/array/array_walk_recursive.php: SUCCEEDED
    @PHP/standard/array/bug12776.php: SUCCEEDED
    @PHP/standard/array/bug14580.php: SUCCEEDED
    @PHP/standard/array/bug20381.php: SUCCEEDED
    @PHP/standard/array/bug20865.php: SUCCEEDED
    @PHP/standard/array/bug21182.php: SUCCEEDED
    @PHP/standard/array/bug21918.php: SUCCEEDED
    @PHP/standard/array/bug21998.php: SUCCEEDED
    @PHP/standard/array/bug22088.php: SUCCEEDED
    @PHP/standard/array/bug22463.php: SUCCEEDED
    @PHP/standard/array/bug23581.php: SUCCEEDED
    @PHP/standard/array/bug23788.php: SUCCEEDED
    @PHP/standard/array/bug24198.php: SUCCEEDED
    @PHP/standard/array/bug24220.php: SUCCEEDED
    @PHP/standard/array/bug24766.php: SUCCEEDED
    @PHP/standard/array/bug24897.php: SUCCEEDED
    @PHP/standard/array/bug24980.php: SUCCEEDED
    @PHP/standard/array/bug25359.php: SUCCEEDED
    @PHP/standard/array/bug25708.php: SUCCEEDED
    @PHP/standard/array/bug25758.php: SUCCEEDED
    @PHP/standard/array/bug26458.php: SUCCEEDED
    @PHP/standard/array/bug28974.php: SUCCEEDED
    @PHP/standard/array/bug29493.php: SUCCEEDED
    @PHP/standard/array/bug30266.php: SUCCEEDED
    @PHP/standard/array/bug30833.php: SUCCEEDED
    @PHP/standard/array/bug31158.php: SUCCEEDED
    @PHP/standard/array/bug31213.php: SUCCEEDED
    @PHP/standard/array/bug32021.php: SUCCEEDED
    @PHP/standard/array/bug33382.php: SUCCEEDED
    @PHP/standard/array/bug33989.php: SUCCEEDED
    @PHP/standard/array/bug34227.php: SUCCEEDED
    @PHP/standard/array/bug34982.php: SUCCEEDED
    @PHP/standard/array/bug35014.php: SUCCEEDED
    @PHP/standard/array/bug35022.php: SUCCEEDED
    @PHP/standard/array/bug35821.php: SUCCEEDED
    @PHP/standard/array/count_recursive.php: SUCCEEDED
    @PHP/standard/array/locale_sort.php: SUCCEEDED
    @PHP/standard/array/range.php: SUCCEEDED
    @PHP/standard/assert/assert.php: SUCCEEDED
    @PHP/standard/general_functions/001.php: SUCCEEDED
    @PHP/standard/general_functions/002.php: SUCCEEDED
    @PHP/standard/general_functions/003.php: SUCCEEDED
    @PHP/standard/general_functions/004.php: SUCCEEDED
    @PHP/standard/general_functions/005.php: SUCCEEDED
    @PHP/standard/general_functions/006.php: SUCCEEDED
    @PHP/standard/general_functions/007.php: SUCCEEDED
    @PHP/standard/general_functions/009.php: SUCCEEDED
    @PHP/standard/general_functions/bug25038.php: SUCCEEDED
    @PHP/standard/general_functions/bug27678.php: SUCCEEDED
    @PHP/standard/general_functions/bug29038.php: SUCCEEDED
    @PHP/standard/general_functions/bug31190.php: SUCCEEDED
    @PHP/standard/general_functions/bug32647.php: SUCCEEDED
    @PHP/standard/general_functions/bug35229.php: SUCCEEDED
    @PHP/standard/general_functions/is_resource.php: SUCCEEDED
    @PHP/standard/math/abs.php: SUCCEEDED
    @PHP/standard/math/bug24142.php: SUCCEEDED
    @PHP/standard/math/bug25694.php: SUCCEEDED
    @PHP/standard/math/bug27646.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    double(INF-INF)
    'd:-INF;'
    double(INF-INF)
    double(INF-INF)
    'd:INF;'
    double(INF-INF)
    double(NaNInfini)
    'd:NAN;'
    double(NaNInfini)
    double(-Infinity)
    'd:-INF;'
    double(-Infinity)
    double(Infinity)
    'd:INF;'
    double(Infinity)
    double(NaN)
    'd:NAN;'
    double(NaN)
    @PHP/standard/math/bug30069.php: SUCCEEDED
    @PHP/standard/math/bug30695.php: SUCCEEDED
    @PHP/standard/math/floorceil.php: SUCCEEDED
    @PHP/standard/math/hexdec.php: SUCCEEDED
    @PHP/standard/math/log.php: SUCCEEDED
    @PHP/standard/math/pow.php: SUCCEEDED
    @PHP/standard/math/round.php: SUCCEEDED
    @PHP/standard/reg/001.php: SUCCEEDED
    @PHP/standard/reg/002.php: SUCCEEDED
    @PHP/standard/reg/003.php: SUCCEEDED
    @PHP/standard/reg/004.php: SUCCEEDED
    @PHP/standard/reg/005.php: SUCCEEDED
    @PHP/standard/reg/006.php: SUCCEEDED
    @PHP/standard/reg/007.php: SUCCEEDED
    @PHP/standard/reg/008.php: SUCCEEDED
    @PHP/standard/reg/009.php: SUCCEEDED
    @PHP/standard/reg/010.php: SUCCEEDED
    @PHP/standard/reg/011.php: SUCCEEDED
    @PHP/standard/reg/012.php: SUCCEEDED
    @PHP/standard/reg/013.php: SUCCEEDED
    @PHP/standard/reg/014.php: SUCCEEDED
    @PHP/standard/reg/015.php: SUCCEEDED
    @PHP/standard/reg/016.php: SUCCEEDED
    @PHP/standard/serialize/001.php: SUCCEEDED
    @PHP/standard/serialize/002.php: SUCCEEDED
    @PHP/standard/serialize/003.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    d:100;
    double(100.0000000000)
    
    d:51999999999999996980101120;
    double(51999999999999996980101120.0000000000)
    
    d:8.9999999999999995265585574287341141808127531476202420890331268310546875E-9;
    double(0.0000000090)
    d:100;
    double(100.0000000000)
    
    d:5.2000000000000006E+25;
    double(52000000000000000000000000.0000000000)
    
    d:9.0000000000000045E-09;
    double(0.0000000090)
    @PHP/standard/serialize/004.php: SUCCEEDED
    @PHP/standard/serialize/005.php: SUCCEEDED
    @PHP/standard/serialize/006.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    'O:3:"´┐Ż":1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    object
    {
      '´┐Ż' => '´┐Ż'
    }
    'a:1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    array
    {
      '´┐Ż' => '´┐Ż'
    }
    'O:3:"´┐Ż":1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    object
    {
      'ďż˝' => '´┐Ż'
    }
    'a:1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    array
    {
      'ďż˝' => '´┐Ż'
    }
    @PHP/standard/serialize/bug14293.php: SUCCEEDED
    @PHP/standard/serialize/bug21957.php: SUCCEEDED
    @PHP/standard/serialize/bug23298.php: SUCCEEDED
    @PHP/standard/serialize/bug24063.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0.1 0.1
    0.01 0.01
    0.001 0.001
    0.0001 0.0001
    1.0E-5 1.0E-5
    1.0E-6 1.0E-6
    1.0E-7 1.0E-7
    1.0E-8 1.0E-8
    1.0E-9 1.0E-9
    0.1 0.1
    0.01 0.01
    0.001 0.001
    0.0001 0.0001
    1E-05 1E-05
    1E-06 1E-06
    1E-07 1E-07
    1E-08 1E-08
    1E-09 1E-09
    @PHP/standard/serialize/bug25378.php: SUCCEEDED
    @PHP/standard/serialize/bug26762.php: SUCCEEDED
    @PHP/standard/serialize/bug27469.php: SUCCEEDED
    @PHP/standard/serialize/bug28325.php: SUCCEEDED
    @PHP/standard/serialize/bug30234.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    FALSE
    FALSE
    __autoload(Autoload_Implements)
    object [invalid]
    FALSE
    FALSE
    FALSE
    FALSE
    TRUE
    __autoload(Autoload_Implements)
    object [invalid]
    FALSE
    FALSE
    TRUE
    @PHP/standard/serialize/bug31402.php: SUCCEEDED
    @PHP/standard/serialize/bug31442.php: SUCCEEDED
    @PHP/standard/strings/add-and-stripcslashes.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    kaboemkara!
    foo\b\a\r\b\az
    \f\o\o\[ \]
    \zoo['\.']
    \abcd\e\f\g\h\i\j\k\l\m\n\o\pqrstuvwxy\z
    1
    5d
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\standard\strings\__input.txt at expression on line 3, column 1.
    
    kaboemkara!
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\standard\strings\__input.txt at expression on line 5, column 1.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\standard\strings\__input.txt at expression on line 6, column 1.
    
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\standard\strings\__input.txt at expression on line 8, column 1.
    
    1
    5d
    @PHP/standard/strings/add-and-stripslashes.php: SUCCEEDED
    @PHP/standard/strings/basename.php: SUCCEEDED
    @PHP/standard/strings/bin2hex.php: SUCCEEDED
    @PHP/standard/strings/bug20108.php: SUCCEEDED
    @PHP/standard/strings/bug20169.php: SUCCEEDED
    @PHP/standard/strings/bug20261.php: SUCCEEDED
    @PHP/standard/strings/bug20927.php: SUCCEEDED
    @PHP/standard/strings/bug21338.php: SUCCEEDED
    @PHP/standard/strings/bug21453.php: SUCCEEDED
    @PHP/standard/strings/bug21730.php: SUCCEEDED
    @PHP/standard/strings/bug21744.php: SUCCEEDED
    @PHP/standard/strings/bug22008.php: SUCCEEDED
    @PHP/standard/strings/bug22187.php: SUCCEEDED
    @PHP/standard/strings/bug22224.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      0 => 
      object
      {
      }
      1 => 
      object
      {
      }
    }
    @PHP/standard/strings/bug22227.php: SUCCEEDED
    @PHP/standard/strings/bug22904.php: SUCCEEDED
    @PHP/standard/strings/bug23650.php: SUCCEEDED
    @PHP/standard/strings/bug23894.php: SUCCEEDED
    @PHP/standard/strings/bug24098.php: SUCCEEDED
    @PHP/standard/strings/bug24208.php: SUCCEEDED
    @PHP/standard/strings/bug24281.php: SUCCEEDED
    @PHP/standard/strings/bug25671.php: SUCCEEDED
    @PHP/standard/strings/bug25707.php: SUCCEEDED
    @PHP/standard/strings/bug26878.php: SUCCEEDED
    @PHP/standard/strings/bug26973.php: SUCCEEDED
    @PHP/standard/strings/bug27276.php: SUCCEEDED
    @PHP/standard/strings/bug27278.php: SUCCEEDED
    @PHP/standard/strings/bug27295.php: SUCCEEDED
    @PHP/standard/strings/bug27457.php: SUCCEEDED
    @PHP/standard/strings/bug27675.php: SUCCEEDED
    @PHP/standard/strings/bug28386.php: SUCCEEDED
    @PHP/standard/strings/bug33076.php: SUCCEEDED
    @PHP/standard/strings/chr_ord.php: SUCCEEDED
    @PHP/standard/strings/chunk_split.php: SUCCEEDED
    @PHP/standard/strings/count_chars.php: SUCCEEDED
    @PHP/standard/strings/crc32.php: SUCCEEDED
    @PHP/standard/strings/explode.php: SUCCEEDED
    @PHP/standard/strings/implode.php: SUCCEEDED
    @PHP/standard/strings/md5.php: SUCCEEDED
    @PHP/standard/strings/md5raw.php: SUCCEEDED
    @PHP/standard/strings/nl2br.php: SUCCEEDED
    @PHP/standard/strings/sha1.php: SUCCEEDED
    @PHP/standard/strings/sha1raw.php: SUCCEEDED
    @PHP/standard/strings/sprintf_f.php: SUCCEEDED
    @PHP/standard/strings/strcspn.php: SUCCEEDED
    @PHP/standard/strings/strings001.php: SUCCEEDED
    @PHP/standard/strings/strpos.php: SUCCEEDED
    @PHP/standard/strings/strrev.php: SUCCEEDED
    @PHP/standard/strings/strripos.php: SUCCEEDED
    @PHP/standard/strings/strrpos.php: SUCCEEDED
    @PHP/standard/strings/strspn.php: SUCCEEDED
    @PHP/standard/strings/strstr.php: SUCCEEDED
    @PHP/standard/strings/strtoupper.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    cfbfbdcfbfbdcfbfbd
    cfafbdcfafbdcfafbd
    @PHP/standard/strings/strtr.php: SUCCEEDED
    @PHP/standard/strings/strval.php: SUCCEEDED
    @PHP/standard/strings/str_repeat.php: SUCCEEDED
    @PHP/standard/strings/str_shuffle.php: SUCCEEDED
    @PHP/standard/strings/str_word_count.php: SUCCEEDED
    @PHP/standard/strings/substr_count.php: SUCCEEDED
    @PHP/standard/strings/substr_replace.php: SUCCEEDED
    @PHP/standard/strings/wordwrap.php: SUCCEEDED
    @PHP/standard/time/001.php: SUCCEEDED
    @PHP/standard/time/idate.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    U: 1043324459
    Y: 2003
    z: 22
    y: 3
    m: 1
    n: 1
    d: 23
    j: 23
    H: 13
    G: 13
    h: 1
    g: 1
    i: 20
    s: 59
    t: 31
    w: 4
    L: 0
    B: 556
    I: 0
    W: 4
    U: 1043324459
    Y: 2003
    z: 22
    y: 3
    m: 1
    n: 1
    d: 23
    j: 23
    H: 12
    G: 12
    h: 12
    g: 12
    i: 20
    s: 59
    t: 31
    w: 4
    L: 0
    B: 556
    I: 0
    W: 4
    @PHP/strings/001.php: SUCCEEDED
    @PHP/strings/002.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    fprintf test 1:abcde
    20
    printf test 1:simple string
    printf test 2:42
    printf test 3:3.333333
    printf test 4:3.3333333333
    printf test 5:2.50      
    printf test 6:2.50000000
    printf test 7:0000002.50
    printf test 8:<                 foo>
    printf test 9:<bar                 >
    printf test 10: 123456789012345
    printf test 10:<h´┐Żyesterettsjustitiarius>
    printf test 11: 123456789012345678901234567890
    printf test 11:<    h´┐Żyesterettsjustitiarius>
    printf test 12:-12.34
    printf test 13:  -12
    printf test 14:@
    printf test 15:10101010
    printf test 16:aa
    printf test 17:AA
    printf test 18:        10101010
    printf test 19:              aa
    printf test 20:              AA
    printf test 21:0000000010101010
    printf test 22:00000000000000aa
    printf test 23:00000000000000AA
    printf test 24:abcde
    printf test 25:gazonk
    printf test 26:2 1
    printf test 27:3 1 2
    printf test 28:02  1
    printf test 29:2   1
    printf test 30:x
    vprintf test 1:2   1
    fprintf test 1:abcde
    20
    printf test 1:simple string
    printf test 2:42
    printf test 3:3.333333
    printf test 4:3.3333333333
    printf test 5:2.50      
    printf test 6:2.50000000
    printf test 7:0000002.50
    printf test 8:<                 foo>
    printf test 9:<bar                 >
    printf test 10: 123456789012345
    printf test 10:<h�yesterettsjustitiarius>
    printf test 11: 123456789012345678901234567890
    printf test 11:<    h�yesterettsjustitiarius>
    printf test 12:-12.34
    printf test 13:  -12
    printf test 14:@
    printf test 15:10101010
    printf test 16:aa
    printf test 17:AA
    printf test 18:        10101010
    printf test 19:              aa
    printf test 20:              AA
    printf test 21:0000000010101010
    printf test 22:00000000000000aa
    printf test 23:00000000000000AA
    printf test 24:abcde
    printf test 25:gazonk
    printf test 26:2 1
    printf test 27:3 1 2
    printf test 28:02  1
    printf test 29:2   1
    printf test 30:x
    vprintf test 1:2   1
    @PHP/strings/bug22592.php: SUCCEEDED
    Arrays/array1.php: SUCCEEDED
    Arrays/array_diff_intersect.php: SUCCEEDED
    Arrays/array_diff_intersect2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Strict Standards: array_udiff() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 35
    Array
    (
        [0.5] => cr Object
            (
                [priv_member:cr:private] => 12
            )
    
        [0] => cr Object
            (
                [priv_member:cr:private] => 23
            )
    
    )
    
    Strict Standards: array_udiff_assoc() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 36
    Array
    (
        [0.1] => cr Object
            (
                [priv_member:cr:private] => 9
            )
    
        [0.5] => cr Object
            (
                [priv_member:cr:private] => 12
            )
    
        [0] => cr Object
            (
                [priv_member:cr:private] => 23
            )
    
    )
    
    Strict Standards: array_udiff_uassoc() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 37
    
    Strict Standards: array_udiff_uassoc() expects parameter 4 to be a valid callback, non-static method cr::comp_func_key() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 37
    Array
    (
        [0.1] => cr Object
            (
                [priv_member:cr:private] => 9
            )
    
        [0.5] => cr Object
            (
                [priv_member:cr:private] => 12
            )
    
        [0] => cr Object
            (
                [priv_member:cr:private] => 23
            )
    
    )
    Array
    (
        [b] => brown
        [c] => blue
        [0] => red
    )
    ------------------------------------
    
    Strict Standards: array_uintersect() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 40
    Array
    (
        [0.1] => cr Object
            (
                [priv_member:cr:private] => 9
            )
    
        [1] => cr Object
            (
                [priv_member:cr:private] => 4
            )
    
        [2] => cr Object
            (
                [priv_member:cr:private] => -15
            )
    
    )
    
    Strict Standards: array_uintersect_assoc() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 41
    Array
    (
        [1] => cr Object
            (
                [priv_member:cr:private] => 4
            )
    
        [2] => cr Object
            (
                [priv_member:cr:private] => -15
            )
    
    )
    
    Strict Standards: array_uintersect_uassoc() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 42
    
    Strict Standards: array_uintersect_uassoc() expects parameter 4 to be a valid callback, non-static method cr::comp_func_key() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 42
    Array
    (
        [1] => cr Object
            (
                [priv_member:cr:private] => 4
            )
    
        [2] => cr Object
            (
                [priv_member:cr:private] => -15
            )
    
    )
    Array
    (
        [a] => green
    )
    Array
    (
        [0.5] => cr Object
        (
            [priv_member:private] => 12
        )
    
        [0] => cr Object
        (
            [priv_member:private] => 23
        )
    
    )
    Array
    (
        [0.1] => cr Object
        (
            [priv_member:private] => 9
        )
    
        [0.5] => cr Object
        (
            [priv_member:private] => 12
        )
    
        [0] => cr Object
        (
            [priv_member:private] => 23
        )
    
    )
    Array
    (
        [0.1] => cr Object
        (
            [priv_member:private] => 9
        )
    
        [0.5] => cr Object
        (
            [priv_member:private] => 12
        )
    
        [0] => cr Object
        (
            [priv_member:private] => 23
        )
    
    )
    Array
    (
        [b] => brown
        [c] => blue
        [0] => red
    )
    ------------------------------------
    Array
    (
        [0.1] => cr Object
        (
            [priv_member:private] => 9
        )
    
        [1] => cr Object
        (
            [priv_member:private] => 4
        )
    
        [2] => cr Object
        (
            [priv_member:private] => -15
        )
    
    )
    Array
    (
        [1] => cr Object
        (
            [priv_member:private] => 4
        )
    
        [2] => cr Object
        (
            [priv_member:private] => -15
        )
    
    )
    Array
    (
        [1] => cr Object
        (
            [priv_member:private] => 4
        )
    
        [2] => cr Object
        (
            [priv_member:private] => -15
        )
    
    )
    Array
    (
        [a] => green
    )
    Arrays/array_diff_intersect3.php: SUCCEEDED
    Arrays/array_filter%20false%20entries%20%2322016.php: SUCCEEDED
    Arrays/array_map.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Array
    (
        [0] => Array
            (
                [0] => 1
                [1] => A
                [2] => 0
            )
    
        [1] => Array
            (
                [0] => 2
                [1] => B
                [2] => 0
            )
    
        [2] => Array
            (
                [0] => 3
                [1] => C
                [2] => 
            )
    
    )
    Array
    (
        [0] => 1 A 0
        [1] => 2 B 0
        [2] => 3 C 
    )
    Array
    (
        [A] => 2
        [10] => 3
    )
    Array
    (
        [0] => 1
        [1] => 2
        [2] => 3
    )
    Array
    (
        [0] => A
        [1] => B
        [2] => C
    )
    Array
    (
        [0] => 0
        [1] => 0
    )
    Array
    (
        [A] => 1
        [10] => 2
    )
    Array
    (
        [0] => Array
        (
            [0] => 1
            [1] => A
            [2] => 0
        )
    
        [1] => Array
        (
            [0] => 2
            [1] => B
            [2] => 0
        )
    
        [2] => Array
        (
            [0] => 3
            [1] => C
            [2] => 
        )
    
    )
    Array
    (
        [0] => 1 A 0
        [1] => 2 B 0
        [2] => 3 C 
    )
    Array
    (
        [A] => 2
        [10] => 3
    )
    Array
    (
        [0] => 1
        [1] => 2
        [2] => 3
    )
    Array
    (
        [0] => A
        [1] => B
        [2] => C
    )
    Array
    (
        [0] => x
        [1] => x
    )
    Array
    (
        [A] => 1
        [10] => 2
    )
    Arrays/array_merge_recursive.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Array
    (
        [color] => Array
            (
                [favorite] => Array
                    (
                        [0] => red
                        [1] => green
                    )
    
                [0] => blue
            )
    
        [0] => Array
            (
                [0] => 1
                [1] => 2
                [2] => 3
            )
    
        [q] => Array
            (
                [0] => 
                [1] => 
                [2] => x
            )
    
        [1] => 10
        [2] => Array
            (
                [0] => 4
                [1] => 5
                [2] => 6
            )
    
    )
    Array
    (
        [a] => Array
            (
                [0] => 1
                [1] => 2
                [2] => 3
                [3] => e
            )
    
    )
    Array
    (
        [a] => Array
            (
                [0] => 1
                [1] => 2
                [2] => 3
                [3] => e
            )
    
    )
    Array
    (
        [a] => 1
        [b] => 2
    )
    Array
    (
        [a] => xxx
        [b] => 2
    )
    Array
    (
        [a] => Array
            (
                [a] => Array
                    (
                        [a] => Array
     *RECURSION*
                    )
    
                [0] => 1
                [1] => 2
                [2] => 3
            )
    
    )
    Array
    (
        [a] => Array
            (
                [b] => Array
                    (
                        [0] => 1
                        [1] => 1
                    )
    
                [c] => 1
                [d] => Array
                    (
                        [0] => 2
                        [1] => 3
                    )
    
            )
    
    )
    Array
    (
        [a] => Array
            (
                [0] => 
                [1] => 
            )
    
    )
    Array
    (
        [a] => Array
            (
                [0] => 
                [1] => 
            )
    
    )
    Array
    (
        [color] => Array
        (
            [favorite] => Array
            (
                [0] => red
                [1] => green
            )
    
            [0] => blue
        )
    
        [0] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
        )
    
        [q] => Array
        (
            [0] => x
        )
    
        [1] => 10
        [2] => Array
        (
            [0] => 4
            [1] => 5
            [2] => 6
        )
    
    )
    Array
    (
        [a] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
            [3] => e
        )
    
    )
    Array
    (
        [a] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
            [3] => e
        )
    
    )
    Array
    (
        [a] => 1
        [b] => 2
    )
    Array
    (
        [a] => xxx
        [b] => 2
    )
    Array
    (
        [a] => Array
        (
            [a] => Array
            (
                [a] => Array [recursion]
    
    
            )
    
            [0] => 1
            [1] => 2
            [2] => 3
        )
    
    )
    Array
    (
        [a] => Array
        (
            [b] => Array
            (
                [0] => 1
                [1] => 1
            )
    
            [c] => 1
            [d] => Array
            (
                [0] => 2
                [1] => 3
            )
    
        )
    
    )
    Array
    (
        [a] => Array
        (
        )
    
    )
    Array
    (
        [a] => Array
        (
        )
    
    )
    Arrays/array_reduce1.php: SUCCEEDED
    Arrays/array_reduce2.php: SUCCEEDED
    Arrays/array_slice.php: SUCCEEDED
    Arrays/array_sumprod.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    float(8.3)
    float(0)
    int(6)
    int(6)
    float(4294967297)
    float(9.2233720282648E+18)
    bool(true)
    bool(false)
    float(-7.7)
    float(-38.4)
    int(6)
    int(6)
    int64(4294967297)
    int64(9223372028264841218)
    bool(true)
    bool(true)
    Arrays/array_unshift.php: SUCCEEDED
    Arrays/array_walk.php: SUCCEEDED
    Arrays/array_walk_recursive.php: SUCCEEDED
    Arrays/multisort.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    bool(true)
    Array
    (
        [0] => Array
            (
                [0] => 2
                [1] => 8
                [2] => 2
                [3] => 2
                [4] => 8
                [5] => 8
            )
    
        [1] => Array
            (
                [0] => 7
                [1] => 2
                [2] => 7
                [3] => 4
                [4] => 8
                [5] => 1
            )
    
        [2] => Array
            (
                [0] => 1
                [1] => 4
                [2] => 8
                [3] => 0
                [4] => 6
                [5] => 2
            )
    
        [3] => Array
            (
                [0] => 8
                [1] => 4
                [2] => 1
                [3] => 0
                [4] => 7
                [5] => 1
            )
    
        [4] => Array
            (
                [0] => 20
                [1] => 2
                [2] => 12
                [3] => 11
                [4] => 10
                [5] => 1
            )
    
    )
    Array
    (
        [0] => Array
            (
                [0] => 10
                [1] => 100
                [2] => 100
                [3] => a
            )
    
        [1] => Array
            (
                [0] => 1
                [1] => 3
                [2] => 2
                [3] => 1
            )
    
    )
    Array
    (
        [0] => 10
        [1] => a
        [2] => 100
        [3] => 100
    )
    Array
    (
        [0] => 1
        [1] => 1
        [2] => 2
        [3] => 3
    )
    bool(true)
    Array
    (
        [0] => Array
        (
            [0] => 2
            [1] => 8
            [2] => 2
            [3] => 2
            [4] => 8
            [5] => 8
        )
    
        [1] => Array
        (
            [0] => 7
            [1] => 2
            [2] => 7
            [3] => 4
            [4] => 8
            [5] => 1
        )
    
        [2] => Array
        (
            [0] => 1
            [1] => 4
            [2] => 8
            [3] => 0
            [4] => 6
            [5] => 2
        )
    
        [3] => Array
        (
            [0] => 8
            [1] => 4
            [2] => 1
            [3] => 0
            [4] => 7
            [5] => 1
        )
    
        [4] => Array
        (
            [0] => 20
            [1] => 2
            [2] => 12
            [3] => 11
            [4] => 10
            [5] => 1
        )
    
    )
    Array
    (
        [0] => Array
        (
            [0] => 10
            [1] => 100
            [2] => 100
            [3] => a
        )
    
        [1] => Array
        (
            [0] => 1
            [1] => 3
            [2] => 2
            [3] => 1
        )
    
    )
    Array
    (
        [0] => 10
        [1] => a
        [2] => 100
        [3] => 100
    )
    Array
    (
        [0] => 1
        [1] => 1
        [2] => 2
        [3] => 3
    )
    Arrays/multisort_empty.php: SUCCEEDED
    Arrays/nonarray%20access%20%2322019.php: SUCCEEDED
    Arrays/optimizations.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    3
    4
    5
    a
    b
    c
    
    Warning: strtolower() expects parameter 1 to be string, array given in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 15
    
    cablo
    3
    4
    5
    a
    b
    c
    array
    cablo
    Arrays/recursion.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    f1:
    array(2) {
      ["a"]=>
      array(5) {
        ["a"]=>
        &array(3) {
          ["a"]=>
          &array(3) {
            ["a"]=>
            *RECURSION*
            [0]=>
            string(1) "y"
            [1]=>
            string(1) "z"
          }
          [0]=>
          string(1) "y"
          [1]=>
          string(1) "z"
        }
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        string(1) "x"
      }
      [0]=>
      string(1) "w"
    }
    f2:
    array(1) {
      ["A"]=>
      &array(2) {
        ["a"]=>
        &array(2) {
          ["a"]=>
          *RECURSION*
          [0]=>
          string(1) "z"
        }
        [0]=>
        string(1) "z"
      }
    }
    f3:
    array(2) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) {
          [0]=>
          *RECURSION*
          [1]=>
          string(1) "z"
        }
        [1]=>
        string(1) "z"
      }
      [1]=>
      string(1) "z"
    }
    f4:
    
    Warning: array_merge_recursive(): recursion detected in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 37
    array(1) {
      ["a"]=>
      &array(3) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
      }
    }
    f5:
    array(1) {
      ["a"]=>
      array(6) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        int(1)
        [4]=>
        int(2)
        [5]=>
        int(3)
      }
    }
    f6:
    array(1) {
      ["a"]=>
      array(2) {
        [0]=>
        string(2) "xx"
        [1]=>
        int(2)
      }
    }
    f7:
    array(1) {
      ["a"]=>
      array(1) {
        ["a"]=>
        array(1) {
          ["a"]=>
          &array(1) {
            ["a"]=>
            &array(1) {
              ["a"]=>
              *RECURSION*
            }
          }
        }
      }
    }
    f1:
    array(2) {
      ["a"]=>
      array(5) {
        ["a"]=>
        &array(3) {
          ["a"]=>
          &array(3) [recursion]
          [0]=>
          string(1) "y"
          [1]=>
          string(1) "z"
        }
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        string(1) "x"
      }
      [0]=>
      string(1) "w"
    }
    f2:
    array(1) {
      ["A"]=>
      &array(2) {
        ["a"]=>
        &array(2) [recursion]
        [0]=>
        string(1) "z"
      }
    }
    f3:
    array(2) {
      [0]=>
      &array(2) [recursion]
      [1]=>
      string(1) "z"
    }
    f4:
    array(1) {
      ["a"]=>
      array(6) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        int(1)
        [4]=>
        int(2)
        [5]=>
        int(3)
      }
    }
    f5:
    array(1) {
      ["a"]=>
      array(6) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        int(1)
        [4]=>
        int(2)
        [5]=>
        int(3)
      }
    }
    f6:
    array(1) {
      ["a"]=>
      array(2) {
        [0]=>
        string(2) "xx"
        [1]=>
        int(2)
      }
    }
    f7:
    array(1) {
      ["a"]=>
      &array(1) {
        ["a"]=>
        &array(1) [recursion]
      }
    }
    Arrays/sort.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    sort regular:
    Array
    (
        [0] => 0
        [1] => 1
        [2] => 1
        [3] => 8
        [4] => 0x10
        [5] => 10x
        [6] => 20x
        [7] => ach0
        [8] => add1
        [9] => x10
        [10] => x2
    )
    
    sort numeric:
    Array
    (
        [0] => add1
        [1] => x2
        [2] => 0x10
        [3] => ach0
        [4] => 0
        [5] => x10
        [6] => 1
        [7] => 1
        [8] => 8
        [9] => 10x
        [10] => 20x
    )
    
    sort string:
    Array
    (
        [0] => 0
        [1] => 0x10
        [2] => 1
        [3] => 1
        [4] => 10x
        [5] => 20x
        [6] => 8
        [7] => ach0
        [8] => add1
        [9] => x10
        [10] => x2
    )
    
    sort locale:
    Array
    (
        [0] => 0
        [1] => 0x10
        [2] => 1
        [3] => 1
        [4] => 10x
        [5] => 20x
        [6] => 8
        [7] => ach0
        [8] => add1
        [9] => x10
        [10] => x2
    )
    
    ksort regular:
    Array
    (
        [x] => 8
        [z] => 1
        [0] => x10
        [1] => 10x
        [2b] => 1
        [2] => 20x
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [10a] => 0
    )
    
    ksort numeric:
    Array
    (
        [x] => 8
        [z] => 1
        [0] => x10
        [1] => 10x
        [2b] => 1
        [2] => 20x
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [10a] => 0
    )
    
    ksort string:
    Array
    (
        [0] => x10
        [1] => 10x
        [10a] => 0
        [2] => 20x
        [2b] => 1
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [x] => 8
        [z] => 1
    )
    
    ksort locale:
    Array
    (
        [0] => x10
        [1] => 10x
        [10a] => 0
        [2] => 20x
        [2b] => 1
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [x] => 8
        [z] => 1
    )
    
    asort regular:
    Array
    (
        [10a] => 0
        [2b] => 1
        [z] => 1
        [x] => 8
        [4] => 0x10
        [1] => 10x
        [2] => 20x
        [5] => ach0
        [6] => add1
        [0] => x10
        [3] => x2
    )
    
    asort numeric:
    Array
    (
        [6] => add1
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [10a] => 0
        [0] => x10
        [z] => 1
        [2b] => 1
        [x] => 8
        [1] => 10x
        [2] => 20x
    )
    
    asort string:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [z] => 1
        [2b] => 1
        [1] => 10x
        [2] => 20x
        [x] => 8
        [5] => ach0
        [6] => add1
        [0] => x10
        [3] => x2
    )
    
    asort locale:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [z] => 1
        [2b] => 1
        [1] => 10x
        [2] => 20x
        [x] => 8
        [5] => ach0
        [6] => add1
        [0] => x10
        [3] => x2
    )
    
    rsort regular:
    Array
    (
        [0] => x2
        [1] => x10
        [2] => add1
        [3] => ach0
        [4] => 20x
        [5] => 10x
        [6] => 0x10
        [7] => 8
        [8] => 1
        [9] => 1
        [10] => 0
    )
    
    rsort numeric:
    Array
    (
        [0] => 20x
        [1] => 10x
        [2] => 8
        [3] => 1
        [4] => 1
        [5] => ach0
        [6] => add1
        [7] => 0x10
        [8] => x2
        [9] => x10
        [10] => 0
    )
    
    rsort string:
    Array
    (
        [0] => x2
        [1] => x10
        [2] => add1
        [3] => ach0
        [4] => 8
        [5] => 20x
        [6] => 10x
        [7] => 1
        [8] => 1
        [9] => 0x10
        [10] => 0
    )
    
    rsort locale:
    Array
    (
        [0] => x2
        [1] => x10
        [2] => add1
        [3] => ach0
        [4] => 8
        [5] => 20x
        [6] => 10x
        [7] => 1
        [8] => 1
        [9] => 0x10
        [10] => 0
    )
    
    natsort:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [2b] => 1
        [z] => 1
        [x] => 8
        [1] => 10x
        [2] => 20x
        [5] => ach0
        [6] => add1
        [3] => x2
        [0] => x10
    )
    sort regular:
    Array
    (
        [0] => 0x10
        [1] => 10x
        [2] => 20x
        [3] => ach0
        [4] => add1
        [5] => x10
        [6] => 0
        [7] => x2
        [8] => 1
        [9] => 1
        [10] => 8
    )
    
    sort numeric:
    Array
    (
        [0] => x10
        [1] => 0
        [2] => x2
        [3] => ach0
        [4] => add1
        [5] => 1
        [6] => 1
        [7] => 8
        [8] => 10x
        [9] => 0x10
        [10] => 20x
    )
    
    sort string:
    Array
    (
        [0] => 0
        [1] => 0x10
        [2] => 1
        [3] => 1
        [4] => 10x
        [5] => 20x
        [6] => 8
        [7] => ach0
        [8] => add1
        [9] => x10
        [10] => x2
    )
    
    sort locale:
    Array
    (
        [0] => 0
        [1] => 0x10
        [2] => 1
        [3] => 1
        [4] => 10x
        [5] => 20x
        [6] => 8
        [7] => add1
        [8] => ach0
        [9] => x10
        [10] => x2
    )
    
    ksort regular:
    Array
    (
        [x] => 8
        [z] => 1
        [0] => x10
        [1] => 10x
        [2] => 20x
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [10a] => 0
        [2b] => 1
    )
    
    ksort numeric:
    Array
    (
        [x] => 8
        [z] => 1
        [0] => x10
        [1] => 10x
        [2b] => 1
        [2] => 20x
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [10a] => 0
    )
    
    ksort string:
    Array
    (
        [0] => x10
        [1] => 10x
        [10a] => 0
        [2] => 20x
        [2b] => 1
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [x] => 8
        [z] => 1
    )
    
    ksort locale:
    Array
    (
        [0] => x10
        [1] => 10x
        [10a] => 0
        [2] => 20x
        [2b] => 1
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [x] => 8
        [z] => 1
    )
    
    asort regular:
    Array
    (
        [4] => 0x10
        [1] => 10x
        [2] => 20x
        [5] => ach0
        [6] => add1
        [0] => x10
        [10a] => 0
        [3] => x2
        [z] => 1
        [2b] => 1
        [x] => 8
    )
    
    asort numeric:
    Array
    (
        [0] => x10
        [10a] => 0
        [3] => x2
        [5] => ach0
        [6] => add1
        [z] => 1
        [2b] => 1
        [x] => 8
        [1] => 10x
        [4] => 0x10
        [2] => 20x
    )
    
    asort string:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [z] => 1
        [2b] => 1
        [1] => 10x
        [2] => 20x
        [x] => 8
        [5] => ach0
        [6] => add1
        [0] => x10
        [3] => x2
    )
    
    asort locale:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [z] => 1
        [2b] => 1
        [1] => 10x
        [2] => 20x
        [x] => 8
        [6] => add1
        [5] => ach0
        [0] => x10
        [3] => x2
    )
    
    rsort regular:
    Array
    (
        [0] => 8
        [1] => 1
        [2] => 1
        [3] => x2
        [4] => x10
        [5] => 0
        [6] => add1
        [7] => ach0
        [8] => 20x
        [9] => 10x
        [10] => 0x10
    )
    
    rsort numeric:
    Array
    (
        [0] => 20x
        [1] => 0x10
        [2] => 10x
        [3] => 8
        [4] => 1
        [5] => 1
        [6] => x10
        [7] => 0
        [8] => x2
        [9] => ach0
        [10] => add1
    )
    
    rsort string:
    Array
    (
        [0] => x2
        [1] => x10
        [2] => add1
        [3] => ach0
        [4] => 8
        [5] => 20x
        [6] => 10x
        [7] => 1
        [8] => 1
        [9] => 0x10
        [10] => 0
    )
    
    rsort locale:
    Array
    (
        [0] => x2
        [1] => x10
        [2] => ach0
        [3] => add1
        [4] => 8
        [5] => 20x
        [6] => 10x
        [7] => 1
        [8] => 1
        [9] => 0x10
        [10] => 0
    )
    
    natsort:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [z] => 1
        [2b] => 1
        [x] => 8
        [1] => 10x
        [2] => 20x
        [5] => ach0
        [6] => add1
        [3] => x2
        [0] => x10
    )
    Arrays/usort.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    Array
    (
        [0] => 10
        [1] => 9
        [2] => 8
        [3] => 7
        [4] => 6
        [5] => 5
        [6] => 4
        [7] => 3
        [8] => 2
        [9] => 1
    )
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Array
    (
        [0] => 10
        [1] => 9
        [2] => 8
        [3] => 7
        [4] => 6
        [5] => 5
        [6] => 4
        [7] => 3
        [8] => 2
        [9] => 1
    )
    Arrays/lazy_copy/001.php: SUCCEEDED
    Arrays/lazy_copy/002.php: SUCCEEDED
    Arrays/lazy_copy/003.php: SUCCEEDED
    Arrays/lazy_copy/004.php: SUCCEEDED
    Arrays/lazy_copy/005.php: SUCCEEDED
    Arrays/lazy_copy/006.php: SUCCEEDED
    Bugs/class_incompletepart.php: SUCCEEDED
    Bugs/division-by-zero.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    DIVISION
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 6
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 8
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 10
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 12
    bool(false)
    MODULO
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 16
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 18
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 20
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 22
    bool(false)
    DIVISION
    bool(false)
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt at expression on line 10, column 2.
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt at expression on line 12, column 2.
    bool(false)
    MODULO
    bool(false)
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt at expression on line 20, column 2.
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt at expression on line 22, column 2.
    bool(false)
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt(6,10): warning PHP0150: Division by zero
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt(8,9): warning PHP0150: Division by zero
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt(16,10): warning PHP0150: Division by zero
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt(18,9): warning PHP0150: Division by zero
    
    Bugs/function-in-unknown-class.php: SUCCEEDED
    Bugs/is_a_null_value.php: SUCCEEDED
    Bugs/preg-named-groups.php: SUCCEEDED
    Bugs/preg-replace-advanced.php: SUCCEEDED
    Bugs/preg-replace-range.php: SUCCEEDED
    Bugs/preg-replace.php: SUCCEEDED
    Bugs/preg-this-dynamic.php: FAILED
    Script hung upNo errorsSuccess
    Expected test outputReal script output
    Unhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---> PHP.Core.Debug+AssertException: Assertion failed: 
       at PHP.Core.Debug.Fail(String message)
       at PHP.Core.Debug.Assert(Boolean condition)
       at PHP.Core.RelativePath.ParseCanonical(String relativePath)
       at PHP.Core.Emit.TransientAssemblyBuilder.Build(String sourceCode, SourceCodeDescriptor descriptor, EvalKinds kind, CompilationContext context, ScriptContext scriptContext, DTypeDesc referringType, NamingContext namingContext, Boolean completeSource)
       at PHP.Core.DynamicCode.EvalInternal(String prefix, String code, String suffix, EvalKinds kind, ScriptContext scriptContext, Dictionary`2 localVariables, DObject self, DTypeDesc referringType, SourceCodeDescriptor descriptor, Boolean entireFile, NamingContext namingContext)
       at PHP.Core.DynamicCode.Eval(String code, Boolean synthetic, ScriptContext context, Dictionary`2 definedVariables, DObject self, DTypeDesc referringType, String callerRelativeSourcePath, Int32 line, Int32 column, Int32 containerId, NamingContext namingContext)
       at PHP.Library.PerlRegExp.Evaluator.ReplaceCodeExecute(Match m)
       at System.Text.RegularExpressions.RegexReplacement.Replace(MatchEvaluator evaluator, Regex regex, String input, Int32 count, Int32 startat)
       at System.Text.RegularExpressions.Regex.Replace(String input, MatchEvaluator evaluator, Int32 count)
       at PHP.Library.PerlRegExp.ReplaceInternal(DObject self, Dictionary`2 definedVariables, PerlRegExpConverter converter, PhpCallback callback, String str, Int32 limit, SourceCodeDescriptor sourceCodeDesc, Int32& count)
       at PHP.Library.PerlRegExp.SimpleReplace(DObject self, Dictionary`2 definedVariables, Object pattern, String replacement, PhpCallback callback, Object data, Int32 limit, SourceCodeDescriptor descriptor, Int32& count)
       at PHP.Library.PerlRegExp.Replace(ScriptContext context, DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, PhpCallback callback, Object data, Int32 limit, Int32& count)
       at PHP.Library.PerlRegExp.Replace(ScriptContext context, DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, Object data)
       at PHP.Dynamic.PhpNetClassLibrary.preg_replace(Object , PhpStack )
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <__input.txt>.a.a(ScriptContext ) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt:line 16
       at <__input.txt>.a.<Mediator>(ScriptContext )
       at <__input.txt>.a.a(Object instance, PhpStack stack)
       at <__input.txt>.<Script>.<Main>(ScriptContext <context>, Dictionary`2 <locals>, DObject , DTypeDesc , Boolean ) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt:line 19
       at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)
       at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)
       --- End of inner exception stack trace ---
       at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)
       at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)
       at <Global>.Run(String[] )
    
    Bugs/preg-this-dynamic2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    foo: ahoj
    foo: lidi
    foo: rozkladame
    foo: ahoj
    foo: lidi
    foo: rozkladame
    foo: ahoj
    foo: lidi
    foo: rozkladame
    
    Notice: Undefined variable: this.
    
    Error: Call to a member function foo() on a non-object.
    Bugs/preg-this.php: SUCCEEDED
    Bugs/preg-ungreedy-bugs.php: SUCCEEDED
    Bugs/preg-unkn.php: SUCCEEDED
    Bugs/trigger_error%20line%20number%20%232787.php: SUCCEEDED
    CLR/BaseTypes.php: FAILED
    Phalanger misbehaviour while compiling [file] sectionSee belowSuccess
    Expected test outputReal script output
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(10,2): error PHP1021: Cannot extend 'C' because it is not an interface
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(13,2): error PHP1022: Cannot extend 'I' because it is not a class
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(14,2): error PHP1022: Cannot extend 'I' because it is not a class
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(14,2): error PHP1020: Cannot implement 'D' because it is not an interface
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(19,2): error PHP1081: Type 'I' cannot be used with generic type arguments
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(21,2): error PHP1081: Type 'I' cannot be used with generic type arguments
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(23,2): error PHP1021: Cannot extend 'E' because it is not an interface
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(24,2): error PHP1022: Cannot extend 'K' because it is not a class
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(24,2): error PHP1020: Cannot implement 'E' because it is not an interface
    
    CLR/ConditionalDecls.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    T2::f
    g2
    CLR/ConditionalDecls2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    object(T)(0)
    {
    }
    CLR/foreach.php: FAILED
    Phalanger misbehaviour while compiling [file] sectionSee belowSuccess
    Expected test outputReal script output
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(3,8): error PHP2014: Syntax error: unexpected token 'namespace'
    
    CLR/Inheritance1.php: FAILED
    Phalanger misbehaviour while compiling [file] sectionSee belowSuccess
    Expected test outputReal script output
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(3,2): error PHP2031: Circular interface inheritance dependency involving 'I4' and 'I1'
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(6,2): (related location)
    
    CLR/Inheritance2.php: FAILED
    Phalanger misbehaviour while compiling [file] sectionSee belowSuccess
    Expected test outputReal script output
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(3,2): error PHP2031: Circular interface inheritance dependency involving 'J4' and 'J1'
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(6,2): (related location)
    
    CLR/Inheritance3.php: FAILED
    Phalanger misbehaviour while compiling [file] sectionSee belowSuccess
    Expected test outputReal script output
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(3,2): error PHP2031: Circular interface inheritance dependency involving 'J5' and 'J5'
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(3,2): (related location)
    
    CLR/Inheritance4.php: FAILED
    Phalanger misbehaviour while compiling [file] sectionSee belowSuccess
    Expected test outputReal script output
    error PHP2007: Internal error! 
    Please, report this bug via http://www.codeplex.com/WorkItem/List.aspx?ProjectName=Phalanger.
    Additional information: 
    Could not load type '<__input.txt>.J`1' from assembly 'Inheritance4_file, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' because it has recursive generic definition.
       at System.Reflection.Emit.TypeBuilder.TermCreateClass(RuntimeModule module, Int32 tk, ObjectHandleOnStack type)
       at System.Reflection.Emit.TypeBuilder.CreateTypeNoLock()
       at System.Reflection.Emit.TypeBuilder.CreateType()
       at PHP.Core.Reflection.PhpType.Bake()
       at PHP.Core.Reflection.ScriptCompilationUnit.Bake()
       at PHP.Core.Reflection.InclusionGraphBuilder.EmitAllUnits(CodeGenerator codeGenerator)
       at PHP.Core.Emit.ScriptAssemblyBuilder.CompileScripts(IEnumerable`1 sourceFiles, String duckPath, String duckNamespace, CompilationContext context)
       at PHP.Core.Emit.ScriptAssemblyBuilder.Build(IEnumerable`1 sourceFiles, CompilationContext context)
       at PHP.Core.ApplicationCompiler.Compile(ApplicationContext applicationContext, CompilerConfiguration config, ErrorSink errorSink, CompilationParameters ps)
    
    
    CLR/Inheritance5.php: SUCCEEDED
    CLR/Inheritance6.php: SUCCEEDED
    CLR/Inheritance7.php: SUCCEEDED
    CLR/Inheritance8.php: SUCCEEDED
    CLR/Inheritance9.php: FAILED
    Phalanger misbehaviour while compiling [file] sectionSee belowSuccess
    Expected test outputReal script output
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(14,2): error PHP1018: Class 'D' doesn't implement abstract method I::f()
    
    CLR/Lambdas.php: FAILED
    Phalanger misbehaviour while compiling [file] sectionSee belowSuccess
    Expected test outputReal script output
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(4,3): error PHP1120: Unknown custom attribute; neither of types 'AttributeUsage' and 'AttributeUsageAttribute' exists
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(17,3): error PHP1120: Unknown custom attribute; neither of types 'MyAttribute' and 'MyAttributeAttribute' exists
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(27,22): error PHP1120: Unknown custom attribute; neither of types 'MyAttribute' and 'MyAttributeAttribute' exists
    
    CLR/NameResolving.php: FAILED
    Phalanger misbehaviour while compiling [file] sectionSee belowSuccess
    Expected test outputReal script output
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(2,12): error PHP2014: Syntax error: unexpected token 'N'
    
    Compiler/abstracts.php: SUCCEEDED
    Compiler/aliased%20assign%20add.php: SUCCEEDED
    Compiler/assignments.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ---1---1float(-1.5)
    float(2.5)
    float(0.83333333333333)
    int(6)
    int(8)
    ---2---2float(8.8333333333333)
    float(8.8333333333333)
    float(8.8333333333333)
    int(8)
    int(8)
    ---3---3---4---4---5---5array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [1]=>
      array(1) {
        [2]=>
        array(1) {
          [3]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    ---6---6array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "u"
    }
    array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "v"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    ---7---7array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    ---8---8
    ---1---1float(-1.5)
    float(2.5)
    float(0.833333333333333)
    int(6)
    int(8)
    ---2---2float(8.83333333333333)
    float(8.83333333333333)
    float(8.83333333333333)
    int(8)
    int(8)
    ---3---3---4---4---5---5array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [1]=>
      array(1) {
        [2]=>
        array(1) {
          [3]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    ---6---6array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "u"
    }
    array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "v"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    ---7---7array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    ---8---8
    Compiler/assign_in_call.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    g1:
    f(x)
    u(x)
    'x'
    
    g2:
    f(x)
    u(x)
    'b'
    
    g3:
    f(x)
    u(x)
    'b'
    
    g4:
    f(x)
    u(x)
    'b'
    
    g5:
    f()
    u()
    integer(1)
    
    g6:
    f(3)
    u(3)
    integer(3)
    
    g7:
    f(2)
    u(10)
    integer(10)
    
    g8:
    f(1)
    f(1)
    f(1)
    u(1)
    u()
    u(1)
    
    g9:
    known:
    __get(p) = 0
    __set(p,1)
    f(1)
    unknown:
    __get(p) = 1
    __set(p,3)
    u(3)
    
    g10:
    Done.
    g1:
    f(x)
    u(x)
    'x'
    
    g2:
    f(x)
    u(x)
    'b'
    
    g3:
    f(x)
    u(x)
    'b'
    
    g4:
    f(x)
    u(x)
    'b'
    
    g5:
    f()
    u()
    integer(1)
    
    g6:
    f(3)
    u(3)
    integer(3)
    
    g7:
    f(2)
    u(10)
    integer(10)
    
    g8:
    f(1)
    f(1)
    f(1)
    u(1)
    u()
    u(1)
    
    g9:
    known:
    __get(p) = 0
    __set(p,1)
    __get(p) = 1
    f(1)
    unknown:
    __get(p) = 1
    __set(p,3)
    __get(p) = 3
    u(3)
    
    g10:
    Done.
    Compiler/auto_globals_001.php: SUCCEEDED
    Compiler/auto_globals_002.php: SUCCEEDED
    Compiler/auto_globals_003.php: SUCCEEDED
    Compiler/break_in_global_code.php: SUCCEEDED
    Compiler/chaining_test.php: SUCCEEDED
    Compiler/chain_ending_by_string_index.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        string(1) "f"
      }
    }
    array(1) {
      [0]=>
      string(4) "xubu"
    }
    object(C)#1 (1) {
      ["f"]=>
      string(4) "kuxu"
    }
    string(5) "helxo"
    string(5) "helxo"
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        string(1) "f"
      }
    }
    array(1) {
      [0]=>
      string(4) "bubu"
    }
    
    Warning: A string item used as a reference in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt at expression on line 19, column 1.
    object(C)(1) {
      ["f"]=>
      string(4) "kuku"
    }
    
    Warning: A string item used as a reference in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt at expression on line 25, column 1.
    string(5) "hello"
    
    Warning: A string item used as a reference in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt at expression on line 31, column 1.
    string(5) "hello"
    Compiler/continue_in_global_code.php: SUCCEEDED
    Compiler/deep_copy.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array(1) {
      [0]=>
      &array(1) {
        [0]=>
        &array(1) {
          [0]=>
          *RECURSION*
        }
      }
    }
    array(1) {
      [0]=>
      &array(1) {
        [0]=>
        &array(1) {
          [0]=>
          *RECURSION*
        }
      }
    }
    array(2) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) {
          [0]=>
          *RECURSION*
          [1]=>
          int(1)
        }
        [1]=>
        int(1)
      }
      [1]=>
      int(1)
    }
    array(1) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) {
          [0]=>
          *RECURSION*
          [1]=>
          int(1)
        }
        [1]=>
        int(1)
      }
    }
    array(1) {
      [0]=>
      &array(1) [recursion]
    }
    array(1) {
      [0]=>
      &array(1) {
        [0]=>
        &array(1) [recursion]
      }
    }
    array(2) {
      [0]=>
      &array(2) [recursion]
      [1]=>
      int(1)
    }
    array(1) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) [recursion]
        [1]=>
        int(1)
      }
    }
    Compiler/deep_copy_refbox.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Strict Standards: Only variables should be passed by reference in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt on line 42
    array
    {
      0 => integer(1)
    }
    
    Strict Standards: Only variables should be passed by reference in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt on line 45
    array
    {
      0 => integer(1)
    }
    
    Strict Standards: Only variables should be passed by reference in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt on line 49
    array
    {
      0 => integer(1)
    }
    
    Strict Standards: Only variables should be passed by reference in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt on line 52
    array
    {
      0 => integer(1)
    }
    array
    {
      0 => integer(1)
      1 => integer(1)
    }
    array
    {
      0 => integer(1)
      1 => integer(1)
    }
    array
    {
      0 => integer(1)
      1 => integer(1)
    }
    array
    {
      0 => integer(1)
      1 => integer(1)
    }
    Compiler/expr_init.php: SUCCEEDED
    Compiler/foreach1.php: SUCCEEDED
    Compiler/foreach_arrays.php: SUCCEEDED
    Compiler/for_loop.php: SUCCEEDED
    Compiler/function_002.php: SUCCEEDED
    Compiler/function_003.php: SUCCEEDED
    Compiler/function_004.php: SUCCEEDED
    Compiler/function_call.php: SUCCEEDED
    Compiler/func_get_args.php: SUCCEEDED
    Compiler/if_statement.php: SUCCEEDED
    Compiler/indirect_001.php: SUCCEEDED
    Compiler/indirect_002.php: SUCCEEDED
    Compiler/indirect_003.php: SUCCEEDED
    Compiler/indirect_004.php: SUCCEEDED
    Compiler/indirect_005.php: SUCCEEDED
    Compiler/indirect_007.php: SUCCEEDED
    Compiler/indirect_global.php: SUCCEEDED
    Compiler/inheritance.php: SUCCEEDED
    Compiler/inheritance2.php: SUCCEEDED
    Compiler/isset_unset_001.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Testing x in global code:  <br>
    1 <br>
     <br>
    Testing x (object) in optimized function:  <br>
    1 <br>
     <br>
    Testing x (PhpReference) in optimized function:  <br>
    1 <br>
     <br>
    
    Notice: Undefined variable: y in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt on line 29
    Testing $$x (created at runtime) in optimized function:  <br>
    1 <br>
    Testing x in global code:  <br>
    1 <br>
     <br>
    Testing x (object) in optimized function:  <br>
    1 <br>
     <br>
    Testing x (PhpReference) in optimized function:  <br>
    1 <br>
     <br>
    Testing $$x (created at runtime) in optimized function:  <br>
    1 <br>
    Compiler/list%20%2326681.php: SUCCEEDED
    Compiler/null_hints.php: SUCCEEDED
    Compiler/pure_create_function.php: SUCCEEDED
    Compiler/pure_function_exists.php: SUCCEEDED
    Compiler/pure_math_str.php: SUCCEEDED
    Compiler/static_call.php: SUCCEEDED
    Compiler/switch.php: SUCCEEDED
    Compiler/ternary_ex.php: SUCCEEDED
    Compiler/this%20call.php: SUCCEEDED
    Compiler/typehint_check.php: SUCCEEDED
    Compiler/__call.php: SUCCEEDED
    Compiler/Inclusions/include2.php: SUCCEEDED
    Compiler/Inclusions/include3.php: SUCCEEDED
    Compiler/Inclusions/include6.php: SUCCEEDED
    Compiler/Inclusions/include_test.php: SUCCEEDED
    Compiler/Inclusions/script.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t01.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t02.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t03.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t04.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t05.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t08.php: SUCCEEDED
    Compiler/PseudoConst/parent.php: SUCCEEDED
    Compiler/PseudoConst/parent2.php: SUCCEEDED
    Compiler/PseudoConst/self.php: SUCCEEDED
    Compiler/PseudoConst/t01.php: SUCCEEDED
    Compiler/PseudoConst/t02.php: SUCCEEDED
    Compiler/PseudoConst/t03.php: SUCCEEDED
    Compiler/PseudoConst/t04.php: SUCCEEDED
    Compiler/PseudoConst/t05.php: SUCCEEDED
    Compiler/PseudoConst/t06.php: SUCCEEDED
    Compiler/PseudoConst/t07.php: SUCCEEDED
    Compiler/PseudoConst/t08.php: SUCCEEDED
    Compiler/PseudoConst/t09.php: SUCCEEDED
    Compiler/PseudoConst/t10.php: SUCCEEDED
    Compiler/PseudoConst/t11.php: SUCCEEDED
    Compiler/PseudoConst/_class_.php: SUCCEEDED
    Compiler/PseudoConst/_dir_.php: SUCCEEDED
    Compiler/PseudoConst/_function_.php: SUCCEEDED
    Compiler/References/array_argument.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(2)
        [1]=>
        int(3)
      }
    }
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    Compiler/References/array_local.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(2)
        [1]=>
        int(3)
      }
    }
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    Compiler/References/array_ret_argument.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(2)
        [1]=>
        int(3)
      }
    }
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    Compiler/References/array_ret_argument2.php: SUCCEEDED
    Compiler/References/deepcopy.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <br/><br/>globalobjects: array(2) {
      [0]=>
      int(1)
      [1]=>
      int(7)
    }
    <br/><br/>globalobjects: array(2) {
      [0]=>
      int(1)
      [1]=>
      &int(7)
    }
    Compiler/References/explicitclear.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Construyendo Y
    call foo12Destruyendo Y
    3object(X)#1 (2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      int(54)
    }
    array(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      string(10) "Init Value"
    }
    x: object(X)#1 (2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      int(1004)
    }
    <br/>checkpoint array(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      int(54)
    }
    Construyendo Y
    call foo123object(X)(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      &int(54)
    }
    array(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      &int(54)
    }
    x: object(X)(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      &int(1004)
    }
    <br/>checkpoint array(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      &int(1004)
    }
    Destruyendo Y
    Compiler/References/field_argument.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: int(7)
    <br/><br/>checkpoint array(1) {
      ["objects"]=>
      int(8)
    }
    x: int(7)
    <br/><br/>checkpoint array(1) {
      ["objects"]=>
      &int(7)
    }
    Compiler/References/field_local.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: object(X)#1 (1) {
      ["objects"]=>
      int(25)
    }
    <br/>checkpoint array(1) {
      ["objects"]=>
      int(7)
    }
    x: object(X)(1) {
      ["objects"]=>
      &int(25)
    }
    <br/>checkpoint array(1) {
      ["objects"]=>
      &int(25)
    }
    Compiler/References/ref_arrayitem.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(2)
        [1]=>
        int(3)
      }
    }
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    Compiler/References/ref_reasign.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    object(X)#1 (2) {
      ["objects"]=>
      int(54)
      ["objects2"]=>
      &int(222)
    }
    array(2) {
      ["objects"]=>
      int(7)
      ["objects2"]=>
      &int(222)
    }
    x: object(X)#1 (2) {
      ["objects"]=>
      int(1004)
      ["objects2"]=>
      int(777)
    }
    <br/>checkpoint array(2) {
      ["objects"]=>
      int(54)
      ["objects2"]=>
      int(222)
    }
    object(X)(2) {
      ["objects"]=>
      &int(54)
      ["objects2"]=>
      &int(222)
    }
    array(2) {
      ["objects"]=>
      &int(54)
      ["objects2"]=>
      &int(222)
    }
    x: object(X)(2) {
      ["objects"]=>
      &int(1004)
      ["objects2"]=>
      &int(777)
    }
    <br/>checkpoint array(2) {
      ["objects"]=>
      &int(1004)
      ["objects2"]=>
      &int(777)
    }
    Compiler/Unreachable/t13.php: SUCCEEDED
    Compiler/Unset/calluserfunc.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Warning: call_user_func() expects parameter 1 to be a valid callback, function 'unset' not found or invalid function name in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\Unset\__input.txt on line 3
    int(10)
    Error: call_user_func(): Call to undefined function: 'unset' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\Unset\__input.txt at expression on line 3, column 1.
    Compiler/Unset/issetref2.php: SUCCEEDED
    Compiler/Unset/unsetglobal.php: SUCCEEDED
    Compiler/Unset/unsetglobal2.php: SUCCEEDED
    Compiler/Unset/unsetindirect.php: SUCCEEDED
    Compiler/Unset/unsetproblem.php: SUCCEEDED
    Compiler/Unset/unsetref.php: SUCCEEDED
    Compiler/Unset/unsetref2.php: SUCCEEDED
    Compiler/Unset/unsetref3.php: SUCCEEDED
    Compiler/Unset/__unset.php: SUCCEEDED
    DateTime/strftime.php: SUCCEEDED
    DateTime/strtotime1.php: SUCCEEDED
    DateTime/strtotime2.php: SUCCEEDED
    DateTime/strtotime3.php: SUCCEEDED
    DateTime/strtotime4.php: SUCCEEDED
    DateTime/strtotime5.php: SUCCEEDED
    DateTime/time.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    -189388800:-189475200 - 86400
    1964-01-01T00:00:00+0000
    1963-12-31T00:00:00+0000
    1964-06-06
    1963-06-06
    1964-01-06
    1133305200
    -189388800:-189475200 - 86400
    1964-01-01T00:00:00+0000
    1963-12-31T00:00:00+0000
    1964-06-06
    1963-06-06
    1964-01-06
    DateTime/timezones1.php: SUCCEEDED
    FileSystem/basename.php: SUCCEEDED
    FileSystem/basename2.php: SUCCEEDED
    FileSystem/chdir.php: SUCCEEDED
    FileSystem/csv.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    --- write ---
    72
    24
    44
    2
    6
    
    --- read ---
    "hello\n
    world";"aaa""bbb""ccc";"blah blah;";none;"tab\ttab";"space space"\n
    hh'ee;"ss\nsadasdasd s"\n
    """""""""""""""""""""";"""";;"""""";"xxx"""\n
    x\n
    "x\y"\n
    --- write ---
    72
    24
    44
    2
    6
    
    --- read ---
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    FileSystem/date.php: SUCCEEDED
    FileSystem/date2.php: SUCCEEDED
    FileSystem/date3.php: SUCCEEDED
    FileSystem/date_unix.php: SUCCEEDED
    FileSystem/dirname.php: SUCCEEDED
    FileSystem/dirname2.php: SUCCEEDED
    FileSystem/disk_free_space.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    739 GB
    Drive C: 36 GB
    Drive D: 739 GB
    Drive E: 
    Warning: disk_free_space(): The system cannot find the path specified.
     in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 14
    false
    Drive F: 
    Warning: disk_free_space(): The device is not ready.
     in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 14
    false
    739 GB
    Drive C: 36 GB
    Drive D: 739 GB
    Drive E: false
    Drive F: false
    FileSystem/disk_total_space.php: SUCCEEDED
    FileSystem/fgets.php: SUCCEEDED
    FileSystem/file.php: SUCCEEDED
    FileSystem/filesize.php: SUCCEEDED
    FileSystem/file_exists.php: SUCCEEDED
    FileSystem/file_get_contents.php: SUCCEEDED
    FileSystem/fpassthru.php: SUCCEEDED
    FileSystem/fread.php: SUCCEEDED
    FileSystem/fread1.php: SUCCEEDED
    FileSystem/fread2.php: SUCCEEDED
    FileSystem/fseek.php: SUCCEEDED
    FileSystem/fsockopen.php: SUCCEEDED
    FileSystem/ftell.php: SUCCEEDED
    FileSystem/is_dir.php: SUCCEEDED
    FileSystem/is_executable.php: SUCCEEDED
    FileSystem/pathinfo.php: SUCCEEDED
    FileSystem/popen.php: SUCCEEDED
    FileSystem/readdir.php: SUCCEEDED
    FileSystem/readfile.php: SUCCEEDED
    FileSystem/readline.php: SUCCEEDED
    FileSystem/realpath.php: SUCCEEDED
    FileSystem/scandir.php: SUCCEEDED
    FileSystem/stat.php: SUCCEEDED
    FileSystem/stream_context_set_option.php: SUCCEEDED
    FileSystem/stream_copy_to_stream.php: SUCCEEDED
    FileSystem/stream_copy_to_stream2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <p>Read <b>rb</b>, Write <b>wb</b>
    
    
    COPIED: <b>30193</b>
    <p>Read <b>rb</b>, Write <b>wt</b>
    
    
    COPIED: <b>30170</b>
    <p>Read <b>rb</b>, Write <b>wb</b>
    
    
    COPIED: <b>30157</b>
    <p>Read <b>rb</b>, Write <b>wt</b>
    
    
    COPIED: <b>30157</b>
    FileSystem/testinc.php: SUCCEEDED
    FileSystem/touch.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Warning: touch(): Utime failed: Bad file descriptor in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 8
    Sorry Could Not change modification time of touch.txt
    Warning: touch(): Utime failed: Bad file descriptor in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 14
    
    Warning: touch(): Utime failed: Bad file descriptor in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 16
    
    Warning: touch(): Utime failed: Bad file descriptor in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 17
    <pre>[ARRAY
      [INT (0)] => [STRING: "May 10, 2011; [00:50:21] (00h) ctime test.txt (1304981421)"]
      [INT (1)] => [STRING: "February 19, 2011; [22:06:05] (22h) mtime test.txt (1298149565)"]
      [INT (2)] => [STRING: "May 10, 2011; [00:50:21] (00h) ctime touch.txt (1304981421)"]
      [INT (3)] => [STRING: "February 19, 2011; [22:06:05] (22h) mtime touch.txt (1298149565)"]
      [INT (4)] => [STRING: "May 10, 2011; [00:50:21] (00h) atime touch.txt (1304981421)"]
      [INT (5)] => [STRING: "February 19, 2011; [22:06:05] (22h) mtime summer.txt (1298149565)"]
      [INT (6)] => [STRING: "February 19, 2011; [22:06:05] (22h) mtime winter.txt (1298149565)"]
    ]</pre>
    Warning: touch(): Unable to access (D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\touch.txt): Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 8, column 5.
    Sorry Could Not change modification time of touch.txt
    Warning: touch(): Unable to access (D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\touch.txt): Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 14, column 1.
    
    Warning: touch(): Unable to access (D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\winter.txt): Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 16, column 1.
    
    Warning: touch(): Unable to access (D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\summer.txt): Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 17, column 1.
    <pre>[ARRAY
      [INT (0)] => [STRING: "May 10, 2011; [00:50:21] (00h) ctime test.txt (1304981421)"]
      [INT (1)] => [STRING: "February 19, 2011; [23:06:05] (23h) mtime test.txt (1298153165)"]
      [INT (2)] => [STRING: "May 10, 2011; [00:50:21] (00h) ctime touch.txt (1304981421)"]
      [INT (3)] => [STRING: "February 19, 2011; [23:06:05] (23h) mtime touch.txt (1298153165)"]
      [INT (4)] => [STRING: "May 10, 2011; [00:50:21] (00h) atime touch.txt (1304981421)"]
      [INT (5)] => [STRING: "February 19, 2011; [23:06:05] (23h) mtime summer.txt (1298153165)"]
      [INT (6)] => [STRING: "February 19, 2011; [23:06:05] (23h) mtime winter.txt (1298153165)"]
    ]</pre>
    FileSystem/tar/tar_test.php: SUCCEEDED
    FileSystem/zip/zip.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    correct
    Error: Call to undefined function: 'zip_open' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\zip\__input.txt at expression on line 3, column 1.
    Math/abs.php: SUCCEEDED
    Math/atan2.php: SUCCEEDED
    Math/base_convert.php: SUCCEEDED
    Math/bindec.php: SUCCEEDED
    Math/ceil.php: SUCCEEDED
    Math/cos.php: SUCCEEDED
    Math/decbin.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <pre>
    [double: 2294967295]
    10001000110010100110101111111111
    [double: 4294967296]
    0
    [double: 8589934590]
    11111111111111111111111111111110
    [double: 8589934590]
    11111111111111111111111111111110
    [double: 8589934591]
    11111111111111111111111111111111
    [Int: 1000.000.000.000]
    11010100101001010001000000000000
    <hr>(-1, -5435, 2.14, 0, 26)
    11111111111111111111111111111111
    11111111111111111110101011000101
    10
    0
    11010 
    </pre>
    <pre>
    [???: 2294967295]
    10001000110010100110101111111111
    [???: 4294967296]
    0
    [???: 8589934590]
    11111111111111111111111111111110
    [???: 8589934590]
    11111111111111111111111111111110
    [???: 8589934591]
    11111111111111111111111111111111
    [Int: 1000.000.000.000]
    11010100101001010001000000000000
    <hr>(-1, -5435, 2.14, 0, 26)
    11111111111111111111111111111111
    11111111111111111110101011000101
    10
    0
    11010 
    </pre>
    Math/dechex.php: SUCCEEDED
    Math/decoct.php: SUCCEEDED
    Math/deg2rad.php: SUCCEEDED
    Math/exp.php: SUCCEEDED
    Math/floor.php: SUCCEEDED
    Math/fmod.php: SUCCEEDED
    Math/hexdec.php: SUCCEEDED
    Math/max.php: SUCCEEDED
    Math/min.php: SUCCEEDED
    Math/modulo_warn.php: SUCCEEDED
    Math/octdec.php: SUCCEEDED
    Math/pow.php: SUCCEEDED
    Math/rad2deg.php: SUCCEEDED
    Math/round.php: SUCCEEDED
    Math/sin.php: SUCCEEDED
    Math/sqrt.php: SUCCEEDED
    Math/tan.php: SUCCEEDED
    Math/uniqid.php: SUCCEEDED
    Misc/calendar_extension.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0
    0
    2375840
    0
    14
    32
    2
    There are 31 days in August 2003
    There are 28 days in February 2003
    There are 29 days in February 2004
    There are 31 days in December 2034
    1748326
    1748324
    374867
    0
    322f32322f35373633
    ebe120e7f9e5ef20e4faf9f1e2
    ebe120e7f9e5ef20e427faf9f1e2
    ebe120e7f9e5ef20e420e0ecf4e9ed20faf9f1e2
    ebe120e7f9e5ef20e42720e0ecf4e9ed20faf9f1e2
    eb22e120e7f9e5ef20e4faf9f122e2
    e12720e7f9e5ef20e4faf9f122e2
    e12720e7f9e5ef20e427faf9f122e2
    e12720e7f9e5ef20e420e0ecf4e9ed20faf9f122e2
    e12720e7f9e5ef20e42720e0ecf4e9ed20faf9f122e2
    Error: Call to undefined function: 'frenchtojd' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt at expression on line 2, column 1.
    Misc/fgetcsv%20%2327492.php: SUCCEEDED
    Misc/hash%20functions%20%2326667.php: SUCCEEDED
    Misc/ini_parse.php: SUCCEEDED
    Misc/json%20%2327838.php: SUCCEEDED
    Misc/lexer.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    T_INLINE_HTML
    311 '\r\n'
    T_OPEN_TAG
    368 '&lt;?'
    T_WHITESPACE
    371 ' \r\n\r\n'
    T_FINAL
    345 'final'
    T_WHITESPACE
    371 ' '
    T_CLASS
    353 'class'
    T_WHITESPACE
    371 ' '
    T_STRING
    307 'A'
    T_WHITESPACE
    371 ' \r\n'
        '{'
    T_WHITESPACE
    371 ' \r\n  '
    T_FUNCTION
    334 'function'
    T_WHITESPACE
    371 ' '
    T_STRING
    307 '__get'
        '('
    T_VARIABLE
    309 '$x'
        ')'
    T_WHITESPACE
    371 ' \r\n  '
        '{'
    T_WHITESPACE
    371 ' \r\n    '
    T_VARIABLE
    309 '$x'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_START_HEREDOC
    372 '&lt;&lt;&lt;EOOOOOOOOOOOOOOT\r\n'
    T_ENCAPSED_AND_WHITESPACE
    314 '         &lt;&lt;&lt;hello\r\nEOOOOOOOOOOOOOOt;\r\nEOOOOOOOOOOOOOT;\r\n'
    T_END_HEREDOC
    373 'EOOOOOOOOOOOOOOT'
        ';'
    T_WHITESPACE
    371 '\r\n\r\n    '
        '$'
    T_VARIABLE
    309 '$y'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_ARRAY
    360 'array'
    T_WHITESPACE
    371 ' '
        '('
    T_LNUMBER
    305 '1'
        ','
    T_DNUMBER
    306 '100000000000000'
        ','
    T_DNUMBER
    306 '999999999999999999999999999999999'
        ','
    T_STRING
    307 'true'
        ','
    T_STRING
    307 'false'
        ')'
        ';'
    T_WHITESPACE
    371 '\r\n    '
        '$'
        '{'
        '&quot;'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
    T_DOLLAR_OPEN_CURLY_BRACES
    374 '${'
        '$'
        '{'
    T_CONSTANT_ENCAPSED_STRING
    315 '&quot;xxx&quot;'
        '}'
        '}'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
        '&quot;'
        '}'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_LNUMBER
    305 '1'
        ';'
    T_WHITESPACE
    371 '\r\n    '
        '$'
        '{'
        '&quot;'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
    T_DOLLAR_OPEN_CURLY_BRACES
    374 '${'
        '$'
        '{'
        '&quot;'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
    T_VARIABLE
    309 '$x'
    T_ENCAPSED_AND_WHITESPACE
    314 '-&gt;$$'
    T_VARIABLE
    309 '$x0xx'
        '&quot;'
        '}'
        '}'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
        '&quot;'
        '}'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_LNUMBER
    305 '1'
        ';'
    T_WHITESPACE
    371 '\r\n  '
        '}'
    T_WHITESPACE
    371 ' \r\n'
        '}'
    T_WHITESPACE
    371 '\r\n\r\n'
    T_CLOSE_TAG
    370 '?&gt;'
    '
    '
        '&lt;?'
        ' 
    
    '
        'final'
        ' '
        'class'
        ' '
        'A'
        ' 
    '
        '{'
        ' 
      '
        'function'
        ' '
    259
    259 '
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt at expression on line 10, column 7.
    '
        '('
        '$x'
        ')'
        ' 
      '
        '{'
        ' 
        '
        '$x'
        ' '
        '='
        ' '
        '&lt;&lt;&lt;EOOOOOOOOOOOOOOT
    '
        '         &lt;&lt;&lt;'
        'hello'
        '
    '
        'EOOOOOOOOOOOOOOt;
    '
        'EOOOOOOOOOOOOOT;
    '
        'EOOOOOOOOOOOOOOT'
        ';'
        '
    
        '
        '$'
        '$y'
        ' '
        '='
        ' '
        'array'
        ' '
        '('
        '1'
        ','
        '100000000000000'
        ','
        '999999999999999999999999999999999'
        ','
    256
    256 '
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt at expression on line 10, column 7.
    '
        ','
    257
    257 '
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt at expression on line 10, column 7.
    '
        ')'
        ';'
        '
        '
        '$'
        '{'
        '&quot;'
        'x'
        '${'
        '$'
        '{'
    -29
    -29 '
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt at expression on line 10, column 7.
    '
        '}'
        '}'
        'x'
        '&quot;'
        '}'
        ' '
        '='
        ' '
        '1'
        ';'
        '
        '
        '$'
        '{'
        '&quot;'
        'x'
        '${'
        '$'
        '{'
        '&quot;'
        'x'
        '$x'
        '-&gt;'
        '$'
        '$'
        '$x0xx'
        '&quot;'
        '}'
        '}'
        'x'
        '&quot;'
        '}'
        ' '
        '='
        ' '
        '1'
        ';'
        '
      '
        '}'
        ' 
    '
        '}'
        '
    
    '
        '?&gt;'
    Misc/locale.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string(1) "C"
    double(1.54)
    double(Infinity)
    654564.145400
    Sat Saturday Apr April
    --------------
    string(19) "Danish_Denmark.1252"
    double(1.54)
    double(Infinity)
    654564,145400
    lo lordag apr april
    --------------
    string(25) "Czech_Czech Republic.1250"
    double(1.54)
    double(Infinity)
    654564,145400
    so sobota IV duben
    --------------
    string(1) "C"
    float(1.54)
    float(Infinity)
    654564.145400
    Sat Saturday Apr April
    --------------
    string(19) "Danish_Denmark.1252"
    float(1.54)
    float(Infinity)
    654564,145400
    lo lordag apr april
    --------------
    string(25) "Czech_Czech Republic.1250"
    float(1.54)
    float(Infinity)
    654564,145400
    so sobota 4 duben
    --------------
    Misc/output2.php: SUCCEEDED
    Misc/parse_url%20%2327377.php: SUCCEEDED
    Misc/parse_url_at_bug.php: SUCCEEDED
    Misc/stack_trace.php: FAILED
    Script hung upNo errorsSuccess
    Expected test outputReal script output
    Unhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---> System.IndexOutOfRangeException: Index was outside the bounds of the array.
       at PHP.Core.PhpStackFrame..ctor(ScriptContext context, StackFrame frame, FrameKinds kind)
       at PHP.Core.PhpStackTrace..ctor(ScriptContext context, StackTrace clrTrace)
       at PHP.Core.PhpStackTrace..ctor(ScriptContext context, Int32 skipFrames)
       at PHP.Library.Errors.Backtrace()
       at <stack_trace.inc>.<Script>.j(ScriptContext <context>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\stack_trace.inc:line 11
       at <stack_trace.inc>.<Script>.j(Object instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <stack_trace.inc>.<Script>.i(ScriptContext <context>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\stack_trace.inc:line 6
       at <stack_trace.inc>.<Script>.i(Object instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <^0>.<Global>.<?0>.h(ScriptContext <context>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt:line 14
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack, DTypeDesc caller)
       at PHP.Core.PhpCallback.InvokeInternal(Object[] args)
       at PHP.Core.PhpCallback.Invoke(Object[] args)
       at PHP.Library.PhpArrays.Map(DTypeDesc caller, PhpCallback map, PhpArray[] arrays)
       at <__input.txt>.<Script>.<Lambda>(ScriptContext <context>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt:line 4
       at <__input.txt>.<Script>.<Lambda>(Object instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <__input.txt>.<Script>.f(ScriptContext <context>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt:line 6
       at <__input.txt>.<Script>.f(Object instance, PhpStack stack)
       at <__input.txt>.<Script>.<Main>(ScriptContext <context>, Dictionary`2 <locals>, DObject , DTypeDesc , Boolean ) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt:line 18
       at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)
       at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)
       --- End of inner exception stack trace ---
       at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)
       at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)
       at <Global>.Run(String[] )
    
    Misc/str_getcsv%20%2326691.php: SUCCEEDED
    Misc/tokens.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    T_REQUIRE_ONCE = 258,
    T_REQUIRE = 259,
    T_EVAL = 260,
    T_INCLUDE_ONCE = 261,
    T_INCLUDE = 262,
    T_LOGICAL_OR = 263,
    T_LOGICAL_XOR = 264,
    T_LOGICAL_AND = 265,
    T_PRINT = 266,
    T_SR_EQUAL = 267,
    T_SL_EQUAL = 268,
    T_XOR_EQUAL = 269,
    T_OR_EQUAL = 270,
    T_AND_EQUAL = 271,
    T_MOD_EQUAL = 272,
    T_CONCAT_EQUAL = 273,
    T_DIV_EQUAL = 274,
    T_MUL_EQUAL = 275,
    T_MINUS_EQUAL = 276,
    T_PLUS_EQUAL = 277,
    T_BOOLEAN_OR = 278,
    T_BOOLEAN_AND = 279,
    T_IS_NOT_IDENTICAL = 280,
    T_IS_IDENTICAL = 281,
    T_IS_NOT_EQUAL = 282,
    T_IS_EQUAL = 283,
    T_IS_GREATER_OR_EQUAL = 284,
    T_IS_SMALLER_OR_EQUAL = 285,
    T_SR = 286,
    T_SL = 287,
    T_INSTANCEOF = 288,
    T_UNSET_CAST = 289,
    T_BOOL_CAST = 290,
    T_OBJECT_CAST = 291,
    T_ARRAY_CAST = 292,
    T_STRING_CAST = 293,
    T_DOUBLE_CAST = 294,
    T_INT_CAST = 295,
    T_DEC = 296,
    T_INC = 297,
    T_CLONE = 298,
    T_NEW = 299,
    T_EXIT = 300,
    T_IF = 301,
    T_ELSEIF = 302,
    T_ELSE = 303,
    T_ENDIF = 304,
    T_LNUMBER = 305,
    T_DNUMBER = 306,
    T_STRING = 307,
    T_STRING_VARNAME = 308,
    T_VARIABLE = 309,
    T_NUM_STRING = 310,
    T_INLINE_HTML = 311,
    T_CHARACTER = 312,
    T_BAD_CHARACTER = 313,
    T_ENCAPSED_AND_WHITESPACE = 314,
    T_CONSTANT_ENCAPSED_STRING = 315,
    T_ECHO = 316,
    T_DO = 317,
    T_WHILE = 318,
    T_ENDWHILE = 319,
    T_FOR = 320,
    T_ENDFOR = 321,
    T_FOREACH = 322,
    T_ENDFOREACH = 323,
    T_DECLARE = 324,
    T_ENDDECLARE = 325,
    T_AS = 326,
    T_SWITCH = 327,
    T_ENDSWITCH = 328,
    T_CASE = 329,
    T_DEFAULT = 330,
    T_BREAK = 331,
    T_CONTINUE = 332,
    T_GOTO = 333,
    T_FUNCTION = 334,
    T_CONST = 335,
    T_RETURN = 336,
    T_TRY = 337,
    T_CATCH = 338,
    T_THROW = 339,
    T_USE = 340,
    T_GLOBAL = 341,
    T_PUBLIC = 342,
    T_PROTECTED = 343,
    T_PRIVATE = 344,
    T_FINAL = 345,
    T_ABSTRACT = 346,
    T_STATIC = 347,
    T_VAR = 348,
    T_UNSET = 349,
    T_ISSET = 350,
    T_EMPTY = 351,
    T_HALT_COMPILER = 352,
    T_CLASS = 353,
    T_INTERFACE = 354,
    T_EXTENDS = 355,
    T_IMPLEMENTS = 356,
    T_OBJECT_OPERATOR = 357,
    T_DOUBLE_ARROW = 358,
    T_LIST = 359,
    T_ARRAY = 360,
    T_CLASS_C = 361,
    T_METHOD_C = 362,
    T_FUNC_C = 363,
    T_LINE = 364,
    T_FILE = 365,
    T_COMMENT = 366,
    T_DOC_COMMENT = 367,
    T_OPEN_TAG = 368,
    T_OPEN_TAG_WITH_ECHO = 369,
    T_CLOSE_TAG = 370,
    T_WHITESPACE = 371,
    T_START_HEREDOC = 372,
    T_END_HEREDOC = 373,
    T_DOLLAR_OPEN_CURLY_BRACES = 374,
    T_CURLY_OPEN = 375,
    T_PAAMAYIM_NEKUDOTAYIM = 376,
    T_DOUBLE_COLON = 376,
    T_NAMESPACE = 377,
    T_NS_C = 378,
    T_DIR = 379,
    T_NS_SEPARATOR = 380,
    T_INCLUDE = 129,
    T_INCLUDE_ONCE = 130,
    T_EVAL = 131,
    T_REQUIRE = 132,
    T_REQUIRE_ONCE = 133,
    T_LOGICAL_OR = 136,
    T_LOGICAL_XOR = 137,
    T_LOGICAL_AND = 138,
    T_PRINT = 139,
    T_PLUS_EQUAL = 140,
    T_MINUS_EQUAL = 141,
    T_MUL_EQUAL = 142,
    T_DIV_EQUAL = 143,
    T_CONCAT_EQUAL = 144,
    T_MOD_EQUAL = 145,
    T_AND_EQUAL = 146,
    T_OR_EQUAL = 147,
    T_XOR_EQUAL = 148,
    T_SL_EQUAL = 149,
    T_SR_EQUAL = 150,
    T_BOOLEAN_OR = 151,
    T_BOOLEAN_AND = 152,
    T_IS_EQUAL = 153,
    T_IS_NOT_EQUAL = 154,
    T_IS_IDENTICAL = 155,
    T_IS_NOT_IDENTICAL = 156,
    T_IS_SMALLER_OR_EQUAL = 157,
    T_IS_GREATER_OR_EQUAL = 158,
    T_SL = 159,
    T_SR = 160,
    T_INC = 161,
    T_DEC = 162,
    T_NEW = 164,
    T_INSTANCEOF = 165,
    T_CLONE = 167,
    T_LNUMBER = 168,
    T_DNUMBER = 170,
    T_STRING = 171,
    T_STRING_VARNAME = 172,
    T_VARIABLE = 173,
    T_NUM_STRING = 174,
    T_INLINE_HTML = 175,
    T_CHARACTER = 176,
    T_BAD_CHARACTER = 177,
    T_ENCAPSED_AND_WHITESPACE = 178,
    T_CONSTANT_ENCAPSED_STRING = 179,
    T_EXIT = 180,
    T_IF = 181,
    T_ELSEIF = 182,
    T_ELSE = 183,
    T_ENDIF = 184,
    T_ECHO = 185,
    T_DO = 186,
    T_WHILE = 187,
    T_ENDWHILE = 188,
    T_FOR = 189,
    T_ENDFOR = 190,
    T_FOREACH = 191,
    T_ENDFOREACH = 192,
    T_AS = 193,
    T_SWITCH = 194,
    T_ENDSWITCH = 195,
    T_CASE = 196,
    T_DEFAULT = 197,
    T_BREAK = 198,
    T_CONTINUE = 199,
    T_FUNCTION = 200,
    T_CONST = 201,
    T_RETURN = 202,
    T_GLOBAL = 203,
    T_STATIC = 204,
    T_VAR = 205,
    T_UNSET = 206,
    T_ISSET = 207,
    T_EMPTY = 208,
    T_CLASS = 209,
    T_EXTENDS = 210,
    T_OBJECT_OPERATOR = 211,
    T_DOUBLE_ARROW = 212,
    T_LIST = 213,
    T_ARRAY = 214,
    T_CLASS_C = 215,
    T_METHOD_C = 216,
    T_FUNC_C = 217,
    T_LINE = 218,
    T_FILE = 219,
    T_DIR = 220,
    T_COMMENT = 221,
    T_DOC_COMMENT = 222,
    T_OPEN_TAG = 227,
    T_OPEN_TAG_WITH_ECHO = 228,
    T_CLOSE_TAG = 229,
    T_WHITESPACE = 230,
    T_START_HEREDOC = 231,
    T_END_HEREDOC = 232,
    T_DOLLAR_OPEN_CURLY_BRACES = 233,
    T_CURLY_OPEN = 234,
    T_DOUBLE_COLON = 235,
    T_PAAMAYIM_NEKUDOTAYIM = 235,
    T_GOTO = 237,
    T_TRY = 238,
    T_CATCH = 239,
    T_THROW = 240,
    T_INTERFACE = 241,
    T_IMPLEMENTS = 242,
    T_ABSTRACT = 243,
    T_FINAL = 244,
    T_PRIVATE = 245,
    T_PROTECTED = 246,
    T_PUBLIC = 247,
    T_BOOL_CAST = 287,
    T_INT_CAST = 290,
    T_DOUBLE_CAST = 296,
    T_STRING_CAST = 299,
    T_ARRAY_CAST = 302,
    T_OBJECT_CAST = 303,
    T_UNSET_CAST = 304,
    T_HALT_COMPILER = 351,
    Misc/user_error_handlers.php: SUCCEEDED
    Objects/accessing%20property%20line%20number%20%2326052.php: SUCCEEDED
    Objects/conditional1.php: SUCCEEDED
    Objects/conditional2.php: SUCCEEDED
    Objects/conditional_base_class.php: SUCCEEDED
    Objects/constant_test.php: SUCCEEDED
    Objects/evaled_parent.php: SUCCEEDED
    Objects/getter_setter_bug28444.php: SUCCEEDED
    Objects/instanceof.php: SUCCEEDED
    Objects/new_via_unknown_ctor.php: SUCCEEDED
    Objects/object_creation_test.php: SUCCEEDED
    Objects/overrides%20%231285.php: SUCCEEDED
    Objects/static_field_test.php: SUCCEEDED
    Objects/static_inheritence.php: SUCCEEDED
    Objects/static_method_test.php: SUCCEEDED
    Objects/static_object_vars.php: SUCCEEDED
    Objects/sys_class_const.php: SUCCEEDED
    Objects/this2.php: SUCCEEDED
    RegEx/backreferences.php: SUCCEEDED
    RegEx/dolar_escape.php: SUCCEEDED
    RegEx/ereg.php: SUCCEEDED
    RegEx/namedbackref.php: SUCCEEDED
    RegEx/namedgroups.php: SUCCEEDED
    RegEx/preg_match_unmatched_groups.php: SUCCEEDED
    RegEx/preg_replace_eval.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ab"01300 as"00da sd"0asdsa das asd 11asd a1sd a
    ab"01300 as"00da sd"0(aasdasdkjask,$a,\,\l,a,s,d,a,s,d,k,j,a,s,${120})(ldjaklsdjalk,$l,\,\l,d,j,a,k,l,s,d,j,a,l,${120})djdsa das asd 11asd a1sd a
    ab"01300 as"00da sd"0asdsa das asd 11asd a1sd a
    ab"01300 as"00da sd"0(aasdasdkjask,$a,\,\l,a,s,d,a,s,d,k,j,,,${120})(ldjaklsdjalk,$l,\,\l,d,j,a,k,l,s,d,j,,,${120})djdsa das asd 11asd a1sd a
    RegEx/regexp-sql.php: SUCCEEDED
    RegEx/regexp_smiles.php: SUCCEEDED
    RegEx/Perl/cache.php: SUCCEEDED
    RegEx/Perl/grep1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      [3] => string(3) "1.5"
      [6] => string(5) "58.54"
    }
    Notice: preg_grep(): Array to string conversion in D:\Documents\Projects\Phalanger\Main\Testing\Tests\RegEx\Perl\__input.txt at expression on line 5, column 1.
    array(2) {
      [3]=>
      string(3) "1.5"
      [6]=>
      string(5) "58.54"
    }
    RegEx/Perl/grep2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Food  array
    (
      [0] => apple
      [1] => banana
      [2] => squid
      [3] => pear
    )
    Fruit array
    (
      [0] => apple
      [1] => banana
      [3] => pear
    )
    Food  Array
    (
        [0] => apple
        [1] => banana
        [2] => squid
        [3] => pear
    )
    Fruit Array
    (
        [0] => apple
        [1] => banana
        [3] => pear
    )
    RegEx/Perl/match1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array [empty]
    array
    (
      [0] => array
      (
        [0] => def
        [1] => 3
      )
    )
    Array
    (
    )
    Array
    (
        [0] => Array
        (
            [0] => def
            [1] => 3
        )
    
    )
    RegEx/Perl/match10.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    (
      [0] => 1231
      [1] => 1
      [2] => 23
      [3] => 1
    )
    Array
    (
        [0] => 1231
        [1] => 1
        [2] => 23
        [3] => 1
    )
    RegEx/Perl/match2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    (
      [0] => array
      (
        [0] => def
        [1] => 0
      )
    )
    Array
    (
        [0] => Array
        (
            [0] => def
            [1] => 0
        )
    
    )
    RegEx/Perl/match3.php: SUCCEEDED
    RegEx/Perl/match4.php: SUCCEEDED
    RegEx/Perl/match5.php: SUCCEEDED
    RegEx/Perl/match6.php: SUCCEEDED
    RegEx/Perl/match7.php: SUCCEEDED
    RegEx/Perl/match8.php: SUCCEEDED
    RegEx/Perl/match9.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    (
      [0] => 209.6.145.47 - - [22/Nov/2003:19:02:30 -0500] "GET /dir/doc.htm HTTP/1.0" 200 6776 "http://search.yahoo.com/search?p=key+words=UTF-8" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)"
      [1] => 209.6.145.47
      [2] => -
      [3] => -
      [4] => 22/Nov/2003:19:02:30 -0500
      [5] => GET
      [6] => /dir/doc.htm
      [7] => HTTP
      [8] => 1.0
      [9] => 200
      [10] => 6776
      [11] => "http://search.yahoo.com/search?p=key+words=UTF-8"
      [12] => "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)"
    )
    Array
    (
        [0] => 209.6.145.47 - - [22/Nov/2003:19:02:30 -0500] "GET /dir/doc.htm HTTP/1.0" 200 6776 "http://search.yahoo.com/search?p=key+words=UTF-8" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)"
        [1] => 209.6.145.47
        [2] => -
        [3] => -
        [4] => 22/Nov/2003:19:02:30 -0500
        [5] => GET
        [6] => /dir/doc.htm
        [7] => HTTP
        [8] => 1.0
        [9] => 200
        [10] => 6776
        [11] => "http://search.yahoo.com/search?p=key+words=UTF-8"
        [12] => "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)"
    )
    RegEx/Perl/match_all1.php: SUCCEEDED
    RegEx/Perl/match_all2.php: SUCCEEDED
    RegEx/Perl/match_all3.php: SUCCEEDED
    RegEx/Perl/match_all4.php: SUCCEEDED
    RegEx/Perl/match_dollar.php: SUCCEEDED
    RegEx/Perl/overflow.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string("kfkaj +j k45´┐Ż´┐Ż´┐Ż´┐Ż´┐Ż3#$%^&kjakfjkaj|kfj")
    string("kfkaj +j k45�����3#$%^&kjakfjkaj|kfj")
    RegEx/Perl/quote1.php: SUCCEEDED
    RegEx/Perl/quote2.php: SUCCEEDED
    RegEx/Perl/quote3.php: SUCCEEDED
    RegEx/Perl/replace1.php: SUCCEEDED
    RegEx/Perl/replace2.php: SUCCEEDED
    RegEx/Perl/replace3.php: SUCCEEDED
    RegEx/Perl/replace4.php: SUCCEEDED
    RegEx/Perl/replace5.php: SUCCEEDED
    RegEx/Perl/replace6.php: SUCCEEDED
    RegEx/Perl/replace7.php: SUCCEEDED
    RegEx/Perl/replace8.php: SUCCEEDED
    RegEx/Perl/replace9.php: SUCCEEDED
    RegEx/Perl/replace_callback1.php: SUCCEEDED
    RegEx/Perl/replace_callback2.php: SUCCEEDED
    RegEx/Perl/split1.php: SUCCEEDED
    RegEx/Perl/split2.php: SUCCEEDED
    RegEx/Perl/split3.php: SUCCEEDED
    RegEx/Perl/split4.php: SUCCEEDED
    RegEx/Perl/split5.php: SUCCEEDED
    RegEx/Perl/split6.php: SUCCEEDED
    RegEx/Perl/ungreedy.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    aaa
    a
    aaa
    
    a
    aa
    aaa
    aa
    aaa
    aaa
    a
    aaa
    a
    a
    aa
    aaa
    aa
    aaa
    RegEx/Perl/unsuccessful-preg_match_all.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0
    4
    1
    4
    0
    4
    1
    7
    RegEx/Perl/withoutdelimiters.php: SUCCEEDED
    SPL/ArrayAccess_offsetExists.php: SUCCEEDED
    SPL/Autoload_ctor.php: SUCCEEDED
    SPL/Autoload_extends.php: SUCCEEDED
    SPL/exceptions.php: SUCCEEDED
    Strings/addcslashes.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    \f\o\o\[ \]
    Issues a Warning:
    // echo addcslashes("zoo['.']", 'z..A');
    // output:  \zoo['\.']
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 4, column 1.
    
    Issues a Warning:
    // echo addcslashes("zoo['.']", 'z..A');
    // output:  \zoo['\.']
    Strings/addslashes.php: SUCCEEDED
    Strings/chunk_split.php: SUCCEEDED
    Strings/concat.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string(2) "ab"
    string(2) "ab"
    string(2) "ab"
    string(2) "ab"
    string(2) "ab"
    string(2) "aB"
    string(2) "Ab"
    string(2) "AB"
    string(2) "ab"
    string(2) "a1"
    string(2) "1b"
    string(2) "11"
    string(2) "ab"
    string(2) "aB"
    string(2) "Ab"
    string[binary](2) "\x41\x42"
    string(2) "ab"
    string(2) "ab"
    string(2) "ab"
    string(2) "ab"
    string(2) "ab"
    string(2) "aB"
    string(2) "Ab"
    string(2) "AB"
    string(2) "ab"
    string(2) "a1"
    string(2) "1b"
    string(2) "11"
    string(2) "ab"
    string[binary](2) "aB"
    string[binary](2) "Ab"
    string[binary](2) "AB"
    Strings/count_chars.php: SUCCEEDED
    Strings/crc32.php: SUCCEEDED
    Strings/crypt.php: SUCCEEDED
    Strings/crypt2.php: SUCCEEDED
    Strings/echo.php: SUCCEEDED
    Strings/explode.php: SUCCEEDED
    Strings/get_html_translation_table.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <hr>[&] => &amp;
    [>] => &gt;
    [<] => &lt;
    ["] => &quot;
    <hr>Hallo &amp; &lt;Frau&gt; &amp; Kr&iuml;&iquest;&frac12;mer
    <hr>[&] => &amp;
    [>] => &gt;
    [<] => &lt;
    ["] => &quot;
    <hr>Hallo &amp; &lt;Frau&gt; &amp; Kr�mer
    Strings/mb_strlen.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Call to undefined function mb_strlen() in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 4
    Error: Call to undefined function: 'mb_strlen' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 4, column 1.
    Strings/nl2br.php: SUCCEEDED
    Strings/pack.php: SUCCEEDED
    Strings/pos.php: SUCCEEDED
    Strings/runtime-quotes.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    fread = (x''y"z)
    fgets = (x''y"z)
    file[0] = (x''y"z)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    
    Warning: fopen(runtime-quotes2.txt): failed to open stream: Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 33
    
    Warning: fwrite() expects parameter 1 to be resource, boolean given in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 35
    fwrite = ()
    
    Warning: fputs() expects parameter 1 to be resource, boolean given in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 38
    fputs = ()
    
    Warning: fclose() expects parameter 1 to be resource, boolean given in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 41
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (x'y"z)
    fgets = (x'y"z)
    file[0] = (x'y"z)
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (a\'b"\\ca\)
    fgets = (a\'b"\\ca\'b"\\c)
    file[0] = (a\'b"\\ca\'b"\\c)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    e'e
    e''e
    e'e
    e'e
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    e'e
    e'e
    e'e
    e'e
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    fread = (x''y"z)
    fgets = (x''y"z)
    file[0] = (x''y"z)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    
    Warning: fopen(): Unable to access (D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\runtime-quotes2.txt): Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 33, column 3.
    
    Warning: Cannot convert boolean to resource implicitly in a call to function fwrite() in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 35, column 3.
    fwrite = (0)
    
    Warning: Cannot convert boolean to resource implicitly in a call to function fputs() in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 38, column 3.
    fputs = (0)
    
    Warning: Cannot convert boolean to resource implicitly in a call to function fclose() in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 41, column 3.
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (x'y"z)
    fgets = (x'y"z)
    file[0] = (x'y"z)
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (a\'b"\\ca\)
    fgets = (a\'b"\\ca\'b"\\c)
    file[0] = (a\'b"\\ca\'b"\\c)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    e'e
    e''e
    e'e
    e'e
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    e'e
    e'e
    e'e
    e'e
    Strings/sprintf.php: SUCCEEDED
    Strings/sprintf2.php: SUCCEEDED
    Strings/strtr.php: SUCCEEDED
    Strings/str_ireplace.php: SUCCEEDED
    Strings/str_replace.php: SUCCEEDED
    Strings/str_word_count.php: SUCCEEDED
    Strings/substr_operations.php: SUCCEEDED
    Strings/wordwrap.php: SUCCEEDED
    Variables/advanced_serialize.php: SUCCEEDED
    Variables/arguments.php: SUCCEEDED
    Variables/bitwise.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "00"
    string(2) "31"
    string(2) "31"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    0
    0
    0
    5
    0
    5
    40
    5
    45
    string(48) "000000000000000000000000000000000000000000000000"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(14) "31323331323331"
    string(2) "30"
    string(14) "31323331323331"
    string(16) "3635343635343536"
    string(2) "30"
    string(16) "3635343635343536"
    string(14) "337a5e8be43d7a"
    string(14) "00002130120201"
    string(48) "337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42"
    string(16) "347d598ce33a7e77"
    string(16) "0200243214040100"
    string(48) "367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42"
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "00"
    string(2) "31"
    string(2) "31"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    0
    -9223372036854775808
    -9223372036854775808
    -9223372036854775803
    0
    -9223372036854775803
    40
    5
    45
    string(48) "000000000000000000000000000000000000000000000000"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(14) "31323331323331"
    string(2) "30"
    string(14) "31323331323331"
    string(16) "3635343635343536"
    string(2) "30"
    string(16) "3635343635343536"
    string(14) "337a5e8be43d7a"
    string(14) "00002130120201"
    string(48) "337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42"
    string(16) "347d598ce33a7e77"
    string(16) "0200243214040100"
    string(48) "367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42"
    Variables/comparisons.php: SUCCEEDED
    Variables/constant.php: SUCCEEDED
    Variables/extract%20refs.php: SUCCEEDED
    Variables/extract.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    EXTR_PREFIX_ALL
    integer(4)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
      'prefix_non_existent' => integer(1)
    }
    <hr>EXTR_PREFIX_INVALID
    integer(5)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => integer(2)
      'non_existent' => integer(1)
      'prefix_' => integer(1)
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => 'hello'
    }
    <hr>EXTR_PREFIX_SAME
    integer(3)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'non_existent' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>EXTR_PREFIX_IF_EXISTS
    integer(3)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>
    EXTR_PREFIX_ALL
    integer(4)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
      'prefix_non_existent' => integer(1)
    }
    <hr>EXTR_PREFIX_INVALID
    integer(5)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => integer(2)
      'non_existent' => integer(1)
      'prefix_' => integer(1)
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => 'hello'
    }
    <hr>EXTR_PREFIX_SAME
    integer(4)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'non_existent' => integer(1)
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>EXTR_PREFIX_IF_EXISTS
    integer(3)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>
    Variables/func_get_args.php: SUCCEEDED
    Variables/is_number.php: SUCCEEDED
    Variables/serialize.php: SUCCEEDED
    Variables/unserialize_objects.php: SUCCEEDED
    Variables/var_dumping.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Array
    (
        [0] => 1
        [1] => 
        [2] => 1
        [3] => 1.2
        [4] => 
        [5] => asdas
        [6] => Array
            (
                [0] => 1
            )
    
        [7] => stdClass Object
            (
            )
    
        [8] => Resource id #1
    )
    array(9) {
      [0]=>
      bool(true)
      [1]=>
      bool(false)
      [2]=>
      int(1)
      [3]=>
      float(1.2)
      [4]=>
      NULL
      [5]=>
      string(5) "asdas"
      [6]=>
      array(1) {
        [0]=>
        int(1)
      }
      [7]=>
      object(stdClass)#1 (0) {
      }
      [8]=>
      resource(1) of type (stream)
    }
    array (
      0 => true,
      1 => false,
      2 => 1,
      3 => 1.2,
      4 => NULL,
      5 => 'asdas',
      6 => 
      array (
        0 => 1,
      ),
      7 => 
      stdClass::__set_state(array(
      )),
      8 => NULL,
    )
    Array
    (
        [0] => 1
        [1] => 
        [2] => 1
        [3] => 1.2
        [4] => 
        [5] => asdas
        [6] => Array
        (
            [0] => 1
        )
    
        [7] => stdClass Object
        (
        )
    
        [8] => resource id #4
    
    )
    array(9) {
      [0]=>
      bool(true)
      [1]=>
      bool(false)
      [2]=>
      int(1)
      [3]=>
      float(1.2)
      [4]=>
      NULL
      [5]=>
      string(5) "asdas"
      [6]=>
      array(1) {
        [0]=>
        int(1)
      }
      [7]=>
      object(stdClass)(0) {
      }
      [8]=>
      resource(4) of type (stream)
    }
    array
    (
      '0' => true,
      '1' => false,
      '2' => 1,
      '3' => 1.2,
      '4' => NULL,
      '5' => 'asdas',
      '6' => array
      (
        '0' => 1
      ),
      '7' => class stdClass
      {
    
      },
      '8' => NULL
    )
    Xml/025.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
      'foo' => 'foobar'
    }
    array
    {
      'html' => 'http://www.w3.org/1999/xhtml'
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
    }
    array
    {
      'html' => 'http://www.w3.org/1999/xhtml'
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'foo' => 'foobar'
      'baz' => 'foobarbaz'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
    }
    array
    {
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
      'baz' => 'foobarbaz'
      'foo' => 'foobar'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
      'baz' => 'foobarbaz'
      'foo' => 'foobar'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
    }
    array
    {
    }
    Xml/026.php: SUCCEEDED
    Xml/027.php: SUCCEEDED
    Xml/028.php: SUCCEEDED
    Xml/029.php: SUCCEEDED
    Xml/030.php: SUCCEEDED
    Xml/032.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    FALSE
    FALSE
    FALSE
    TRUE
    TRUE
    TRUE
    Xml/033.php: SUCCEEDED
    Xml/bug26384.php: SUCCEEDED
    Xml/bug28721.php: SUCCEEDED
    Xml/bug28817.php: SUCCEEDED
    Xml/bug32615.php: SUCCEEDED
    Xml/bug33853.php: SUCCEEDED
    Xml/bug34276.php: SUCCEEDED
    Xml/bug35342.php: SUCCEEDED
    Xml/bug36756.php: SUCCEEDED
    Xml/bug37277.php: SUCCEEDED
    Xml/dom002.php: SUCCEEDED
    Xml/dom003.php: SUCCEEDED
    Xml/dom006.php: SUCCEEDED
    Xml/dom007.php: SUCCEEDED
    Xml/dom_set_attr_node.php: SUCCEEDED
    Xml/xmlhandler.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test begins
    <br/>
    <br/>test begins
    <br/>empty begins
    <br/>empty ends
    <br/>nocontent begins
    <br/>nocontent ends
    <br/>content begins
    <br/>empty begins
    <br/>empty ends
    <br/>empty begins
    <br/>empty ends
    <br/>content ends
    <br/>empty begins
    <br/>empty ends
    <br/>empty begins
    <br/>empty ends
    <br/>test ends
    <br/>Test ends
    <br/>
    <br/>
    Test begins
    <br/>
    <br/>
    Error: Call to undefined function: 'xml_parser_create' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Xml\__input.txt at expression on line 18, column 3.
    Xml/xslt001.php: SUCCEEDED
    Xml/xslt002.php: SUCCEEDED
    Xml/xslt003.php: SUCCEEDED
    Xml/xslt004.php: SUCCEEDED
    Xml/xslt005.php: SUCCEEDED
    Xml/xslt006.php: SUCCEEDED
    Xml/xslt007.php: SUCCEEDED
    Xml/xslt010.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test 10: EXSLT Support
      
      
      Test Date : 0001-12-31Z
        year                 : 1
        leap-year            : false
        month-in-year        : 12
        month-name           : December
        month-abbreviation   : Dec
        week-in-year         : 1
        day-in-year          : 365
        day-in-month         : 31
        day-of-week-in-month : 5
        day-in-week          : 2
        day-name             : Monday
        day-abbreviation     : Mon
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : 3000-01-31
        year                 : 3000
        leap-year            : false
        month-in-year        : 1
        month-name           : January
        month-abbreviation   : Jan
        week-in-year         : 5
        day-in-year          : 31
        day-in-month         : 31
        day-of-week-in-month : 5
        day-in-week          : 6
        day-name             : Friday
        day-abbreviation     : Fri
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : 2000-02-29
        year                 : 2000
        leap-year            : true
        month-in-year        : 2
        month-name           : February
        month-abbreviation   : Feb
        week-in-year         : 9
        day-in-year          : 60
        day-in-month         : 29
        day-of-week-in-month : 5
        day-in-week          : 3
        day-name             : Tuesday
        day-abbreviation     : Tue
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : 9990001-12-31Z
        year                 : 9990001
        leap-year            : false
        month-in-year        : 12
        month-name           : December
        month-abbreviation   : Dec
        week-in-year         : 1
        day-in-year          : 365
        day-in-month         : 31
        day-of-week-in-month : 5
        day-in-week          : 2
        day-name             : Monday
        day-abbreviation     : Mon
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : -0004-02-29
        year                 : -4
        leap-year            : true
        month-in-year        : 2
        month-name           : February
        month-abbreviation   : Feb
        week-in-year         : 9
        day-in-year          : 60
        day-in-month         : 29
        day-of-week-in-month : 5
        day-in-week          : 1
        day-name             : Sunday
        day-abbreviation     : Sun
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
    Test 10: EXSLT Support
    Warning: Cannot find a script or an extension object associated with namespace 'http://exslt.org/dates-and-times'..
    
    Warning: Illegal string offset '-1' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Phalanger.inc at expression on line 7, column 6.
    Xml/xslt011.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test 11: php:function Support
    
    Warning: XSLTProcessor::transformToXml(): A PHP Object cannot be converted to a XPath-string in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Xml\__input.txt on line 18
    <?xml version="1.0"?>
    foobar - secondArg
    foobar - 
    this is from an external DomDocument
    from the Input Document
    static
    Test 11: php:function Support
    <?xml version="1.0" encoding="utf-8"?>foobar - secondArg
    foobar - 
    this is from an external DomDocument
    from the Input Document
    static
    not a DomNode object
    Xml/xslt012.php: SUCCEEDED
    ================================================ FILE: Testing/Tests/TestLogs/TestLog (1870).htm ================================================ PHP.NET Compiler test log

    PHP.NET Compiler test log

    (89%) 832 succeeded, 102 failed
    Test ResultCompiler error outputExpected test result
    @PHP/classes/array_access_001.php: SUCCEEDED
    @PHP/classes/array_access_002.php: SUCCEEDED
    @PHP/classes/array_access_003.php: SUCCEEDED
    @PHP/classes/array_access_004.php: SUCCEEDED
    @PHP/classes/array_access_005.php: SUCCEEDED
    @PHP/classes/array_access_006.php: SUCCEEDED
    @PHP/classes/array_access_007.php: SUCCEEDED
    @PHP/classes/array_access_008.php: SUCCEEDED
    @PHP/classes/array_access_009.php: SUCCEEDED
    @PHP/classes/array_access_010.php: SUCCEEDED
    @PHP/classes/array_access_011.php: SUCCEEDED
    @PHP/classes/array_access_013.php: SUCCEEDED
    @PHP/classes/assign_op_property_001.php: SUCCEEDED
    @PHP/classes/autoload_001.php: SUCCEEDED
    @PHP/classes/autoload_002.php: SUCCEEDED
    @PHP/classes/autoload_003.php: SUCCEEDED
    @PHP/classes/autoload_005.php: SUCCEEDED
    @PHP/classes/autoload_006.php: SUCCEEDED
    @PHP/classes/bug23951.php: SUCCEEDED
    @PHP/classes/bug24399.php: SUCCEEDED
    @PHP/classes/bug24445.php: SUCCEEDED
    @PHP/classes/bug26737.php: SUCCEEDED
    @PHP/classes/bug27468.php: SUCCEEDED
    @PHP/classes/bug27504.php: SUCCEEDED
    @PHP/classes/class_example.php: SUCCEEDED
    @PHP/classes/class_stdclass.php: SUCCEEDED
    @PHP/classes/clone_001.php: SUCCEEDED
    @PHP/classes/clone_002.php: SUCCEEDED
    @PHP/classes/clone_003.php: SUCCEEDED
    @PHP/classes/clone_004.php: SUCCEEDED
    @PHP/classes/clone_006.php: SUCCEEDED
    @PHP/classes/constants_scope_001.php: SUCCEEDED
    @PHP/classes/ctor_dtor.php: SUCCEEDED
    @PHP/classes/ctor_dtor_inheritance.php: SUCCEEDED
    @PHP/classes/ctor_name_clash.php: SUCCEEDED
    @PHP/classes/dereferencing_001.php: SUCCEEDED
    @PHP/classes/destructor_and_echo.php: SUCCEEDED
    @PHP/classes/destructor_and_references.php: SUCCEEDED
    @PHP/classes/destructor_inheritance.php: SUCCEEDED
    @PHP/classes/destructor_visibility_003.php: SUCCEEDED
    @PHP/classes/factory_001.php: SUCCEEDED
    @PHP/classes/factory_and_singleton_001.php: SUCCEEDED
    @PHP/classes/factory_and_singleton_002.php: SUCCEEDED
    @PHP/classes/final.php: SUCCEEDED
    @PHP/classes/incdec_property_001.php: SUCCEEDED
    @PHP/classes/incdec_property_002.php: SUCCEEDED
    @PHP/classes/incdec_property_003.php: SUCCEEDED
    @PHP/classes/incdec_property_004.php: SUCCEEDED
    @PHP/classes/inheritance.php: SUCCEEDED
    @PHP/classes/inheritance_002.php: SUCCEEDED
    @PHP/classes/interfaces_001.php: SUCCEEDED
    @PHP/classes/interface_construct.php: SUCCEEDED
    @PHP/classes/interface_doubled.php: SUCCEEDED
    @PHP/classes/interface_implemented.php: SUCCEEDED
    @PHP/classes/iterators_001.php: SUCCEEDED
    @PHP/classes/iterators_002.php: SUCCEEDED
    @PHP/classes/iterators_003.php: SUCCEEDED
    @PHP/classes/iterators_004.php: SUCCEEDED
    @PHP/classes/iterators_006.php: SUCCEEDED
    @PHP/classes/iterators_007.php: SUCCEEDED
    @PHP/classes/object_reference_001.php: SUCCEEDED
    @PHP/classes/private_001.php: SUCCEEDED
    @PHP/classes/private_002.php: SUCCEEDED
    @PHP/classes/private_003.php: SUCCEEDED
    @PHP/classes/private_003b.php: SUCCEEDED
    @PHP/classes/private_004.php: SUCCEEDED
    @PHP/classes/private_004b.php: SUCCEEDED
    @PHP/classes/private_005.php: SUCCEEDED
    @PHP/classes/private_005b.php: SUCCEEDED
    @PHP/classes/private_006.php: SUCCEEDED
    @PHP/classes/private_006b.php: SUCCEEDED
    @PHP/classes/private_007.php: SUCCEEDED
    @PHP/classes/private_007b.php: SUCCEEDED
    @PHP/classes/private_members.php: SUCCEEDED
    @PHP/classes/private_redeclare.php: SUCCEEDED
    @PHP/classes/protected_001.php: SUCCEEDED
    @PHP/classes/protected_001b.php: SUCCEEDED
    @PHP/classes/protected_002.php: SUCCEEDED
    @PHP/classes/serialize_001.php: SUCCEEDED
    @PHP/classes/singleton_001.php: SUCCEEDED
    @PHP/classes/static_properties_001.php: SUCCEEDED
    @PHP/classes/type_hinting_001.php: SUCCEEDED
    @PHP/classes/type_hinting_003.php: SUCCEEDED
    @PHP/classes/visibility_000c.php: SUCCEEDED
    @PHP/classes/visibility_001c.php: SUCCEEDED
    @PHP/classes/visibility_002c.php: SUCCEEDED
    @PHP/classes/visibility_003a.php: SUCCEEDED
    @PHP/classes/visibility_003c.php: SUCCEEDED
    @PHP/classes/visibility_004a.php: SUCCEEDED
    @PHP/classes/visibility_004b.php: SUCCEEDED
    @PHP/classes/visibility_004c.php: SUCCEEDED
    @PHP/classes/visibility_005.php: SUCCEEDED
    @PHP/classes/__call_001.php: SUCCEEDED
    @PHP/classes/__set_data_corrupt.php: SUCCEEDED
    @PHP/classes/__set__get_001.php: SUCCEEDED
    @PHP/classes/__set__get_004.php: SUCCEEDED
    @PHP/classes/__set__get_005.php: SUCCEEDED
    @PHP/date/bug17988.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2002-06-25 12:18:48
    2002-06-25 14:18:48
    2002-06-25 13:18:48
    2002-06-25 12:18:48
    2002-06-25 18:18:48
    2002-06-25 14:18:48
    2002-06-25 14:18:48
    2002-06-25 18:18:48
    2002-06-25 10:18:48
    2002-06-25 17:18:48
    2002-06-25 11:18:48
    2002-06-25 17:48:48
    2002-06-25 10:48:48
    2002-06-25 14:18:48
    2002-06-25 14:18:48
    2002-06-25 13:18:48
    2002-06-25 12:18:48
    2002-06-25 18:18:48
    2002-06-25 14:18:48
    2002-06-25 14:18:48
    2002-06-25 18:18:48
    2002-06-25 10:18:48
    2002-06-25 17:18:48
    2002-06-25 11:18:48
    2002-06-25 17:48:48
    2002-06-25 10:48:48
    @PHP/date/bug26317.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2003-11-19 17:20:42
    2003-11-19 17:20:42
    2003-11-19 17:20:42
    2003-11-19 16:20:42
    2003-11-19 16:20:42
    2003-11-19 16:20:42
    @PHP/date/bug26320.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2003-11-19 12:30:42
    2003-11-19 13:30:42
    2003-11-19 12:30:42
    2003-11-19 12:30:42
    @PHP/date/bug28088.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    The following line rightly shows the correct date time:
    04/04/04 2145
    But the following line fails to show the correct date time:
    04/03/04 2245
    The following line rightly shows the correct date time:
    04/04/04 2345
    But the following line fails to show the correct date time:
    04/04/04 0045
    @PHP/date/bug28599.php: SUCCEEDED
    @PHP/date/bug29150.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2005-06-19 22:00:00
    2005-06-20 00:00:00
    @PHP/date/bug29585.php: SUCCEEDED
    @PHP/date/bug29595.php: SUCCEEDED
    @PHP/date/bug33056.php: SUCCEEDED
    @PHP/date/bug33452.php: SUCCEEDED
    @PHP/date/bug33562.php: SUCCEEDED
    @PHP/date/bug33563.php: SUCCEEDED
    @PHP/date/bug33578.php: SUCCEEDED
    @PHP/date/bug33869.php: SUCCEEDED
    @PHP/date/bug34676.php: SUCCEEDED
    @PHP/date/bug34771.php: SUCCEEDED
    @PHP/date/bug35143.php: SUCCEEDED
    @PHP/date/bug35414.php: SUCCEEDED
    @PHP/date/bug35422.php: SUCCEEDED
    @PHP/date/bug35425.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    integer(42)
    integer(1)
    integer(1)
    integer(1)
    integer(1)
    integer(0)
    integer(0)
    integer(1)
    integer(1)
    integer(31)
    integer(1104537661)
    integer(6)
    integer(53)
    integer(5)
    integer(2005)
    integer(0)
    integer(3600)
    integer(292)
    integer(1)
    integer(1)
    integer(1)
    integer(1)
    integer(0)
    integer(0)
    integer(1)
    integer(1)
    integer(31)
    integer(1104559261)
    integer(6)
    integer(53)
    integer(5)
    integer(2005)
    integer(0)
    integer(-18000)
    @PHP/date/bug35456.php: SUCCEEDED
    @PHP/date/bug35624.php: SUCCEEDED
    @PHP/date/bug35630.php: SUCCEEDED
    @PHP/date/bug35699.php: SUCCEEDED
    @PHP/date/bug35705.php: SUCCEEDED
    @PHP/date/bug35885.php: SUCCEEDED
    @PHP/date/bug35887.php: SUCCEEDED
    @PHP/date/date.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    c: 2003-01-23T13:20:59+01:00
    r: Thu, 23 Jan 2003 13:20:59 +0100
    c: 2003-01-23T13:20:59+01:00
    r: Thu, 23 Jan 2003 13:20:59 +0100
    c: 2003-01-23T12:20:59+00:00
    r: Thu, 23 Jan 2003 12:20:59 +0000
    c: 2003-01-23T13:20:59+01:00
    r: Thu, 23 Jan 2003 13:20:59 +0100
    @PHP/date/date_create-1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\date\__input.txt on line 28
    SKIP
    @PHP/date/date_create-2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\date\__input.txt on line 6
    SKIP
    @PHP/date/date_default_timezone_get-3.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Europe/Prague
    America/Chicago
    Europe/Rome
    America/Chicago
    @PHP/date/date_modify-1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\date\__input.txt on line 6
    SKIP
    @PHP/date/date_modify-2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\date\__input.txt on line 6
    SKIP
    @PHP/date/default-timezone-1.php: SUCCEEDED
    @PHP/date/default-timezone-2.php: SUCCEEDED
    @PHP/date/format-negative-timestamp.php: SUCCEEDED
    @PHP/date/strtotime.php: SUCCEEDED
    @PHP/date/timezone-configuration.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    1119125744
    1119125744
    1119125744
    1119125744
    1119129344
    1119125744
    @PHP/doc_examples/test001.php: SUCCEEDED
    @PHP/doc_examples/test002.php: SUCCEEDED
    @PHP/doc_examples/test003.php: SUCCEEDED
    @PHP/doc_examples/test004.php: SUCCEEDED
    @PHP/doc_examples/test005.php: SUCCEEDED
    @PHP/doc_examples/test006.php: SUCCEEDED
    @PHP/doc_examples/test007.php: SUCCEEDED
    @PHP/doc_examples/test008.php: SUCCEEDED
    @PHP/doc_examples/test009.php: SUCCEEDED
    @PHP/doc_examples/test010.php: SUCCEEDED
    @PHP/doc_examples/test011.php: SUCCEEDED
    @PHP/doc_examples/test013.php: SUCCEEDED
    @PHP/doc_examples/test014.php: SUCCEEDED
    @PHP/doc_examples/test015.php: SUCCEEDED
    @PHP/doc_examples/test016.php: SUCCEEDED
    @PHP/doc_examples/test017.php: SUCCEEDED
    @PHP/doc_examples/test018.php: SUCCEEDED
    @PHP/doc_examples/test019.php: SUCCEEDED
    @PHP/doc_examples/test020.php: SUCCEEDED
    @PHP/doc_examples/test021.php: SUCCEEDED
    @PHP/doc_examples/test022.php: SUCCEEDED
    @PHP/doc_examples/test023.php: SUCCEEDED
    @PHP/doc_examples/test024.php: SUCCEEDED
    @PHP/doc_examples/test025.php: SUCCEEDED
    @PHP/doc_examples/test026.php: SUCCEEDED
    @PHP/doc_examples/test027.php: SUCCEEDED
    @PHP/doc_examples/test028.php: SUCCEEDED
    @PHP/doc_examples/test029.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ´┐Żauky
    �auky
    @PHP/doc_examples/test030.php: SUCCEEDED
    @PHP/doc_examples/test031.php: SUCCEEDED
    @PHP/doc_examples/test032.php: SUCCEEDED
    @PHP/doc_examples/test033.php: SUCCEEDED
    @PHP/doc_examples/test034.php: SUCCEEDED
    @PHP/doc_examples/test035.php: SUCCEEDED
    @PHP/doc_examples/test036.php: SUCCEEDED
    @PHP/doc_examples/test037.php: SUCCEEDED
    @PHP/doc_examples/test038.php: SUCCEEDED
    @PHP/doc_examples/test039.php: SUCCEEDED
    @PHP/doc_examples/test040.php: SUCCEEDED
    @PHP/doc_examples/test041.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    call_user_func():
    hello world!
    Strict Standards: call_user_func(): Non-static method MyClass::myCallbackMethod() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\doc_examples\__input.txt at expression on line 17, column 1.
    Hello World!Hello World!
    @PHP/doc_examples/test042.php: SUCCEEDED
    @PHP/doc_examples/test043.php: SUCCEEDED
    @PHP/doc_examples/test044.php: SUCCEEDED
    @PHP/doc_examples/test045.php: SUCCEEDED
    @PHP/doc_examples/test046.php: SUCCEEDED
    @PHP/doc_examples/test047.php: SUCCEEDED
    @PHP/doc_examples/test048.php: SUCCEEDED
    @PHP/doc_examples/test049.php: SUCCEEDED
    @PHP/doc_examples/test050.php: SUCCEEDED
    @PHP/doc_examples/test051.php: SUCCEEDED
    @PHP/doc_examples/test052.php: SUCCEEDED
    @PHP/doc_examples/test053.php: SUCCEEDED
    @PHP/doc_examples/test054.php: SUCCEEDED
    @PHP/doc_examples/test055.php: SUCCEEDED
    @PHP/doc_examples/test056.php: SUCCEEDED
    @PHP/doc_examples/test057.php: SUCCEEDED
    @PHP/doc_examples/test058.php: SUCCEEDED
    @PHP/doc_examples/test059.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    Deprecated: Assigning the return value of new by reference is deprecated in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\doc_examples\__input.txt on line 4
    NULL
    object(stdClass)#1 (0) {
    }
    NULL
    object(stdClass)(0) {
    }
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\doc_examples\__input.txt(4,5): warning PHP0181: Assigning the return value of new by reference is deprecated
    
    @PHP/doc_examples/test060.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    Deprecated: Assigning the return value of new by reference is deprecated in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\doc_examples\__input.txt on line 9
    Static object: NULL
    Static object: NULL
    
    Static object: NULL
    Static object: object(stdClass)#3 (1) {
      ["property"]=>
      int(1)
    }
    Static object: NULL
    Static object: NULL
    
    Static object: NULL
    Static object: object(stdClass)(1) {
      ["property"]=>
      int(1)
    }
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\doc_examples\__input.txt(9,9): warning PHP0181: Assigning the return value of new by reference is deprecated
    
    @PHP/doc_examples/test061.php: SUCCEEDED
    @PHP/doc_examples/test062.php: SUCCEEDED
    @PHP/doc_examples/test063.php: SUCCEEDED
    @PHP/doc_examples/test064.php: SUCCEEDED
    @PHP/doc_examples/test065.php: SUCCEEDED
    @PHP/doc_examples/test066.php: SUCCEEDED
    @PHP/doc_examples/test067.php: SUCCEEDED
    @PHP/doc_examples/test068.php: SUCCEEDED
    @PHP/doc_examples/test069.php: SUCCEEDED
    @PHP/doc_examples/test070.php: SUCCEEDED
    @PHP/doc_examples/test071.php: SUCCEEDED
    @PHP/doc_examples/test072.php: SUCCEEDED
    @PHP/doc_examples/test073.php: SUCCEEDED
    @PHP/doc_examples/test074.php: SUCCEEDED
    @PHP/doc_examples/test075.php: SUCCEEDED
    @PHP/doc_examples/test076.php: SUCCEEDED
    @PHP/doc_examples/test077.php: SUCCEEDED
    @PHP/doc_examples/test078.php: SUCCEEDED
    @PHP/doc_examples/test079.php: SUCCEEDED
    @PHP/doc_examples/test080.php: SUCCEEDED
    @PHP/doc_examples/test081.php: SUCCEEDED
    @PHP/doc_examples/test082.php: SUCCEEDED
    @PHP/doc_examples/test083.php: SUCCEEDED
    @PHP/doc_examples/test084.php: SUCCEEDED
    @PHP/doc_examples/test085.php: SUCCEEDED
    @PHP/doc_examples/test086.php: SUCCEEDED
    @PHP/doc_examples/test087.php: SUCCEEDED
    @PHP/doc_examples/test088.php: SUCCEEDED
    @PHP/doc_examples/test089.php: SUCCEEDED
    @PHP/doc_examples/test090.php: SUCCEEDED
    @PHP/doc_examples/test091.php: SUCCEEDED
    @PHP/doc_examples/test092.php: SUCCEEDED
    @PHP/doc_examples/test093.php: SUCCEEDED
    @PHP/doc_examples/test094.php: SUCCEEDED
    @PHP/doc_examples/test095.php: SUCCEEDED
    @PHP/doc_examples/test096.php: SUCCEEDED
    @PHP/doc_examples/test097.php: SUCCEEDED
    @PHP/doc_examples/test098.php: SUCCEEDED
    @PHP/doc_examples/test099.php: SUCCEEDED
    @PHP/doc_examples/test100.php: SUCCEEDED
    @PHP/doc_examples/test102.php: SUCCEEDED
    @PHP/doc_examples/test103.php: SUCCEEDED
    @PHP/doc_examples/test104.php: SUCCEEDED
    @PHP/doc_examples/test105.php: SUCCEEDED
    @PHP/doc_examples/test107.php: SUCCEEDED
    @PHP/doc_examples/test108.php: SUCCEEDED
    @PHP/doc_examples/test109.php: SUCCEEDED
    @PHP/doc_examples/test110.php: SUCCEEDED
    @PHP/doc_examples/test111.php: SUCCEEDED
    @PHP/doc_examples/test112.php: SUCCEEDED
    @PHP/doc_examples/test113.php: SUCCEEDED
    @PHP/doc_examples/test114.php: SUCCEEDED
    @PHP/doc_examples/test115.php: SUCCEEDED
    @PHP/doc_examples/test116.php: SUCCEEDED
    @PHP/doc_examples/test117.php: SUCCEEDED
    @PHP/doc_examples/test118.php: SUCCEEDED
    @PHP/doc_examples/test119.php: SUCCEEDED
    @PHP/doc_examples/test120.php: SUCCEEDED
    @PHP/doc_examples/test121.php: SUCCEEDED
    @PHP/doc_examples/test122.php: SUCCEEDED
    @PHP/doc_examples/test123.php: SUCCEEDED
    @PHP/doc_examples/test124.php: SUCCEEDED
    @PHP/doc_examples/test125.php: SUCCEEDED
    @PHP/doc_examples/test126.php: SUCCEEDED
    @PHP/doc_examples/test127.php: SUCCEEDED
    @PHP/doc_examples/test128.php: SUCCEEDED
    @PHP/doc_examples/test129.php: SUCCEEDED
    @PHP/doc_examples/test130.php: SUCCEEDED
    @PHP/doc_examples/test131.php: SUCCEEDED
    @PHP/doc_examples/test132.php: SUCCEEDED
    @PHP/doc_examples/test133.php: SUCCEEDED
    @PHP/doc_examples/test134.php: SUCCEEDED
    @PHP/doc_examples/test136.php: SUCCEEDED
    @PHP/doc_examples/test137.php: SUCCEEDED
    @PHP/doc_examples/test138.php: SUCCEEDED
    @PHP/doc_examples/test139.php: SUCCEEDED
    @PHP/doc_examples/test148.php: SUCCEEDED
    @PHP/doc_examples/test149.php: SUCCEEDED
    @PHP/doc_examples/test150.php: SUCCEEDED
    @PHP/doc_examples/test151.php: SUCCEEDED
    @PHP/doc_examples/test152.php: SUCCEEDED
    @PHP/doc_examples/test153.php: SUCCEEDED
    @PHP/doc_examples/test154.php: SUCCEEDED
    @PHP/doc_examples/test155.php: SUCCEEDED
    @PHP/doc_examples/test156.php: SUCCEEDED
    @PHP/doc_examples/test158.php: SUCCEEDED
    @PHP/lang/001.php: SUCCEEDED
    @PHP/lang/002.php: SUCCEEDED
    @PHP/lang/003.php: SUCCEEDED
    @PHP/lang/004.php: SUCCEEDED
    @PHP/lang/005.php: SUCCEEDED
    @PHP/lang/006.php: SUCCEEDED
    @PHP/lang/007.php: SUCCEEDED
    @PHP/lang/008.php: SUCCEEDED
    @PHP/lang/009.php: SUCCEEDED
    @PHP/lang/010.php: SUCCEEDED
    @PHP/lang/011.php: SUCCEEDED
    @PHP/lang/012.php: SUCCEEDED
    @PHP/lang/013.php: SUCCEEDED
    @PHP/lang/014.php: SUCCEEDED
    @PHP/lang/015.php: SUCCEEDED
    @PHP/lang/016.php: SUCCEEDED
    @PHP/lang/017.php: SUCCEEDED
    @PHP/lang/018.php: SUCCEEDED
    @PHP/lang/019.php: SUCCEEDED
    @PHP/lang/020.php: SUCCEEDED
    @PHP/lang/021.php: SUCCEEDED
    @PHP/lang/022.php: SUCCEEDED
    @PHP/lang/023.php: SUCCEEDED
    @PHP/lang/024.php: SUCCEEDED
    @PHP/lang/025.php: SUCCEEDED
    @PHP/lang/026.php: SUCCEEDED
    @PHP/lang/027.php: SUCCEEDED
    @PHP/lang/028.php: SUCCEEDED
    @PHP/lang/030.php: SUCCEEDED
    @PHP/lang/032.php: SUCCEEDED
    @PHP/lang/036.php: SUCCEEDED
    @PHP/lang/037.php: SUCCEEDED
    @PHP/lang/038.php: SUCCEEDED
    @PHP/lang/039.php: SUCCEEDED
    @PHP/lang/040.php: SUCCEEDED
    @PHP/lang/bison1.php: SUCCEEDED
    @PHP/lang/bug17115.php: SUCCEEDED
    @PHP/lang/bug18872.php: SUCCEEDED
    @PHP/lang/bug19943.php: SUCCEEDED
    @PHP/lang/bug20175.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    Deprecated: Assigning the return value of new by reference is deprecated in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\lang\__input.txt on line 110
    foo_static()
    foo_global()
    foo:1
    foo_static()
    foo:1
    bar_static()
    bar_global()
    bar:1
    bar_static()
    bar:1
    wow_static()
    wow_global()
    wow:1
    wow_static()
    wow:1
    oop_test()
    oop_static()
    oop_class()
    oop:1
    oop_static()
    oop:1
    oop_test()
    oop_static()
    oop:1
    foo_static()
    foo_global()
    foo:1
    foo_static()
    foo:1
    bar_static()
    bar_global()
    bar:1
    bar_static()
    bar_global()
    bar:2
    wow_static()
    wow_global()
    wow:1
    wow_static()
    wow:1
    oop_test()
    oop_static()
    oop_class()
    oop:1
    oop_static()
    oop:1
    oop_test()
    oop_static()
    oop:1
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\lang\__input.txt(110,4): warning PHP0181: Assigning the return value of new by reference is deprecated
    
    @PHP/lang/bug21094.php: SUCCEEDED
    @PHP/lang/bug21600.php: SUCCEEDED
    @PHP/lang/bug21669.php: SUCCEEDED
    @PHP/lang/bug21849.php: SUCCEEDED
    @PHP/lang/bug21961.php: SUCCEEDED
    @PHP/lang/bug22231.php: SUCCEEDED
    @PHP/lang/bug22367.php: SUCCEEDED
    @PHP/lang/bug22510.php: SUCCEEDED
    @PHP/lang/bug22592.php: SUCCEEDED
    @PHP/lang/bug22690.php: SUCCEEDED
    @PHP/lang/bug23279.php: SUCCEEDED
    @PHP/lang/bug23384.php: SUCCEEDED
    @PHP/lang/bug23489.php: SUCCEEDED
    @PHP/lang/bug23524.php: SUCCEEDED
    @PHP/lang/bug23922.php: SUCCEEDED
    @PHP/lang/bug24054.php: SUCCEEDED
    @PHP/lang/bug24396.php: SUCCEEDED
    @PHP/lang/bug24403.php: SUCCEEDED
    @PHP/lang/bug24436.php: SUCCEEDED
    @PHP/lang/bug24499.php: SUCCEEDED
    @PHP/lang/bug24640.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    double(1700000000000000089258092433847514422797596587883870563356951996370064178581143932836831337636761368874297554515902592900802289500112731978596146714137401870842258241575178866354311397451139753100927220499450359906637902366244989496126909662726242240784739940994096632824796638102733857671280980918272.0000000000)
    1.7E+300
    
    ------
    double(0.0000000000)
    1.7E-300
    
    ------
    double(17000000000000001584208052028780237480128823455860622330108867175329927830437888.0000000000)
    1.7E+79
    
    ------
    double(0.0000000000)
    1.7E-79
    
    ------
    double(169999999999999996096025832433329868941658043870400163508258284150340918121070592.0000000000)
    1.7E+80
    
    ------
    double(0.0000000000)
    1.7E-80
    
    ------
    double(1700000000000000013616404158611892038375594280539217794530130541777964808366194688.0000000000)
    1.7E+81
    
    ------
    double(0.0000000000)
    1.7E-81
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    1.6999810742106E-319
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    1.7000798873397E-320
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    1.6995858216939E-321
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    0
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    0
    
    ------
    double(1700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+300
    
    ------
    double(0.0000000000)
    1.70000000000003E-300
    
    ------
    double(17000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+79
    
    ------
    double(0.0000000000)
    1.70000000000001E-79
    
    ------
    double(170000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+80
    
    ------
    double(0.0000000000)
    1.70000000000001E-80
    
    ------
    double(1700000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+81
    
    ------
    double(0.0000000000)
    1.70000000000001E-81
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    1.69998107421056E-319
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    1.70007988733973E-320
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    1.69464516523548E-321
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    0
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    0
    
    ------
    @PHP/lang/bug24652.php: SUCCEEDED
    @PHP/lang/bug24658.php: SUCCEEDED
    @PHP/lang/bug24783.php: SUCCEEDED
    @PHP/lang/bug24926.php: SUCCEEDED
    @PHP/lang/bug25547.php: SUCCEEDED
    @PHP/lang/bug25652.php: SUCCEEDED
    @PHP/lang/bug25922.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Undefined index here: 'error'
    Undefined index here: ''
    @PHP/lang/bug26182.php: SUCCEEDED
    @PHP/lang/bug26696.php: SUCCEEDED
    @PHP/lang/bug26866.php: SUCCEEDED
    @PHP/lang/bug26869.php: SUCCEEDED
    @PHP/lang/bug27354.php: SUCCEEDED
    @PHP/lang/bug27439.php: SUCCEEDED
    @PHP/lang/bug27535.php: SUCCEEDED
    @PHP/lang/bug28213.php: SUCCEEDED
    @PHP/lang/bug28800.php: SUCCEEDED
    @PHP/lang/bug29566.php: SUCCEEDED
    @PHP/lang/bug29893.php: SUCCEEDED
    @PHP/lang/bug29944.php: SUCCEEDED
    @PHP/lang/bug30638.php: SUCCEEDED
    @PHP/lang/bug30726.php: SUCCEEDED
    @PHP/lang/bug30862.php: SUCCEEDED
    @PHP/lang/bug32924.php: SUCCEEDED
    @PHP/lang/bug35382.php: SUCCEEDED
    @PHP/lang/bug7515.php: SUCCEEDED
    @PHP/lang/each_binary_safety.php: SUCCEEDED
    @PHP/lang/error_2_exception_001.php: SUCCEEDED
    @PHP/lang/foreach_with_object_001.php: SUCCEEDED
    @PHP/lang/foreach_with_references_001.php: SUCCEEDED
    @PHP/lang/type_hints_001.php: SUCCEEDED
    @PHP/standard/array/001.php: SUCCEEDED
    @PHP/standard/array/003.php: SUCCEEDED
    @PHP/standard/array/004.php: SUCCEEDED
    @PHP/standard/array/005.php: SUCCEEDED
    @PHP/standard/array/008.php: SUCCEEDED
    @PHP/standard/array/array_change_key_case.php: SUCCEEDED
    @PHP/standard/array/array_chunk.php: SUCCEEDED
    @PHP/standard/array/array_count_values.php: SUCCEEDED
    @PHP/standard/array/array_diff_1.php: SUCCEEDED
    @PHP/standard/array/array_diff_key.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ------ Test 1 --------
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 2 --------
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 3 --------
    array(6) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [2]=>
      int(4)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [2]=>
      int(4)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 4 --------
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 5 --------
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 6 --------
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 7 --------
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    ------ Test 8 --------
    array(6) {
      [0]=>
      int(0)
      [7]=>
      int(14)
      [2]=>
      int(4)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [0]=>
      int(0)
      [7]=>
      int(14)
      [2]=>
      int(4)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 9 --------
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    ------ Test 1 --------
    array(4) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(4) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 2 --------
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 3 --------
    array(6) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [2]=>
      &int(4)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [2]=>
      &int(4)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 4 --------
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 5 --------
    array(4) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(4) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 6 --------
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 7 --------
    array(3) {
      [7]=>
      &int(14)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
    }
    array(3) {
      [7]=>
      &int(14)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
    }
    ------ Test 8 --------
    array(6) {
      [0]=>
      &int(0)
      [7]=>
      &int(14)
      [2]=>
      &int(4)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [0]=>
      &int(0)
      [7]=>
      &int(14)
      [2]=>
      &int(4)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 9 --------
    array(3) {
      [7]=>
      &int(14)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
    }
    array(3) {
      [7]=>
      &int(14)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
    }
    @PHP/standard/array/array_intersect_key.php: SUCCEEDED
    @PHP/standard/array/array_sum.php: SUCCEEDED
    @PHP/standard/array/array_walk_recursive.php: SUCCEEDED
    @PHP/standard/array/bug12776.php: SUCCEEDED
    @PHP/standard/array/bug14580.php: SUCCEEDED
    @PHP/standard/array/bug20381.php: SUCCEEDED
    @PHP/standard/array/bug20865.php: SUCCEEDED
    @PHP/standard/array/bug21182.php: SUCCEEDED
    @PHP/standard/array/bug21918.php: SUCCEEDED
    @PHP/standard/array/bug21998.php: SUCCEEDED
    @PHP/standard/array/bug22088.php: SUCCEEDED
    @PHP/standard/array/bug22463.php: SUCCEEDED
    @PHP/standard/array/bug23581.php: SUCCEEDED
    @PHP/standard/array/bug23788.php: SUCCEEDED
    @PHP/standard/array/bug24198.php: SUCCEEDED
    @PHP/standard/array/bug24220.php: SUCCEEDED
    @PHP/standard/array/bug24766.php: SUCCEEDED
    @PHP/standard/array/bug24897.php: SUCCEEDED
    @PHP/standard/array/bug24980.php: SUCCEEDED
    @PHP/standard/array/bug25359.php: SUCCEEDED
    @PHP/standard/array/bug25708.php: SUCCEEDED
    @PHP/standard/array/bug25758.php: SUCCEEDED
    @PHP/standard/array/bug26458.php: SUCCEEDED
    @PHP/standard/array/bug28974.php: SUCCEEDED
    @PHP/standard/array/bug29493.php: SUCCEEDED
    @PHP/standard/array/bug30266.php: SUCCEEDED
    @PHP/standard/array/bug30833.php: SUCCEEDED
    @PHP/standard/array/bug31158.php: SUCCEEDED
    @PHP/standard/array/bug31213.php: SUCCEEDED
    @PHP/standard/array/bug32021.php: SUCCEEDED
    @PHP/standard/array/bug33382.php: SUCCEEDED
    @PHP/standard/array/bug33989.php: SUCCEEDED
    @PHP/standard/array/bug34227.php: SUCCEEDED
    @PHP/standard/array/bug34982.php: SUCCEEDED
    @PHP/standard/array/bug35014.php: SUCCEEDED
    @PHP/standard/array/bug35022.php: SUCCEEDED
    @PHP/standard/array/bug35821.php: SUCCEEDED
    @PHP/standard/array/count_recursive.php: SUCCEEDED
    @PHP/standard/array/locale_sort.php: SUCCEEDED
    @PHP/standard/array/range.php: SUCCEEDED
    @PHP/standard/assert/assert.php: SUCCEEDED
    @PHP/standard/general_functions/001.php: SUCCEEDED
    @PHP/standard/general_functions/002.php: SUCCEEDED
    @PHP/standard/general_functions/003.php: SUCCEEDED
    @PHP/standard/general_functions/004.php: SUCCEEDED
    @PHP/standard/general_functions/005.php: SUCCEEDED
    @PHP/standard/general_functions/006.php: SUCCEEDED
    @PHP/standard/general_functions/007.php: SUCCEEDED
    @PHP/standard/general_functions/009.php: SUCCEEDED
    @PHP/standard/general_functions/bug25038.php: SUCCEEDED
    @PHP/standard/general_functions/bug27678.php: SUCCEEDED
    @PHP/standard/general_functions/bug29038.php: SUCCEEDED
    @PHP/standard/general_functions/bug31190.php: SUCCEEDED
    @PHP/standard/general_functions/bug32647.php: SUCCEEDED
    @PHP/standard/general_functions/bug35229.php: SUCCEEDED
    @PHP/standard/general_functions/is_resource.php: SUCCEEDED
    @PHP/standard/math/abs.php: SUCCEEDED
    @PHP/standard/math/bug24142.php: SUCCEEDED
    @PHP/standard/math/bug25694.php: SUCCEEDED
    @PHP/standard/math/bug27646.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    double(INF-INF)
    'd:-INF;'
    double(INF-INF)
    double(INF-INF)
    'd:INF;'
    double(INF-INF)
    double(NaNInfini)
    'd:NAN;'
    double(NaNInfini)
    double(-Infinity)
    'd:-INF;'
    double(-Infinity)
    double(Infinity)
    'd:INF;'
    double(Infinity)
    double(NaN)
    'd:NAN;'
    double(NaN)
    @PHP/standard/math/bug30069.php: SUCCEEDED
    @PHP/standard/math/bug30695.php: SUCCEEDED
    @PHP/standard/math/floorceil.php: SUCCEEDED
    @PHP/standard/math/hexdec.php: SUCCEEDED
    @PHP/standard/math/log.php: SUCCEEDED
    @PHP/standard/math/pow.php: SUCCEEDED
    @PHP/standard/math/round.php: SUCCEEDED
    @PHP/standard/reg/001.php: SUCCEEDED
    @PHP/standard/reg/002.php: SUCCEEDED
    @PHP/standard/reg/003.php: SUCCEEDED
    @PHP/standard/reg/004.php: SUCCEEDED
    @PHP/standard/reg/005.php: SUCCEEDED
    @PHP/standard/reg/006.php: SUCCEEDED
    @PHP/standard/reg/007.php: SUCCEEDED
    @PHP/standard/reg/008.php: SUCCEEDED
    @PHP/standard/reg/009.php: SUCCEEDED
    @PHP/standard/reg/010.php: SUCCEEDED
    @PHP/standard/reg/011.php: SUCCEEDED
    @PHP/standard/reg/012.php: SUCCEEDED
    @PHP/standard/reg/013.php: SUCCEEDED
    @PHP/standard/reg/014.php: SUCCEEDED
    @PHP/standard/reg/015.php: SUCCEEDED
    @PHP/standard/reg/016.php: SUCCEEDED
    @PHP/standard/serialize/001.php: SUCCEEDED
    @PHP/standard/serialize/002.php: SUCCEEDED
    @PHP/standard/serialize/003.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    d:100;
    double(100.0000000000)
    
    d:51999999999999996980101120;
    double(51999999999999996980101120.0000000000)
    
    d:8.9999999999999995265585574287341141808127531476202420890331268310546875E-9;
    double(0.0000000090)
    d:100;
    double(100.0000000000)
    
    d:5.2000000000000006E+25;
    double(52000000000000000000000000.0000000000)
    
    d:9.0000000000000045E-09;
    double(0.0000000090)
    @PHP/standard/serialize/004.php: SUCCEEDED
    @PHP/standard/serialize/005.php: SUCCEEDED
    @PHP/standard/serialize/006.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    'O:3:"´┐Ż":1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    object
    {
      '´┐Ż' => '´┐Ż'
    }
    'a:1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    array
    {
      '´┐Ż' => '´┐Ż'
    }
    'O:3:"´┐Ż":1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    object
    {
      'ďż˝' => '´┐Ż'
    }
    'a:1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    array
    {
      'ďż˝' => '´┐Ż'
    }
    @PHP/standard/serialize/bug14293.php: SUCCEEDED
    @PHP/standard/serialize/bug21957.php: SUCCEEDED
    @PHP/standard/serialize/bug23298.php: SUCCEEDED
    @PHP/standard/serialize/bug24063.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0.1 0.1
    0.01 0.01
    0.001 0.001
    0.0001 0.0001
    1.0E-5 1.0E-5
    1.0E-6 1.0E-6
    1.0E-7 1.0E-7
    1.0E-8 1.0E-8
    1.0E-9 1.0E-9
    0.1 0.1
    0.01 0.01
    0.001 0.001
    0.0001 0.0001
    1E-05 1E-05
    1E-06 1E-06
    1E-07 1E-07
    1E-08 1E-08
    1E-09 1E-09
    @PHP/standard/serialize/bug25378.php: SUCCEEDED
    @PHP/standard/serialize/bug26762.php: SUCCEEDED
    @PHP/standard/serialize/bug27469.php: SUCCEEDED
    @PHP/standard/serialize/bug28325.php: SUCCEEDED
    @PHP/standard/serialize/bug30234.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    FALSE
    FALSE
    __autoload(Autoload_Implements)
    object [invalid]
    FALSE
    FALSE
    FALSE
    FALSE
    TRUE
    __autoload(Autoload_Implements)
    object [invalid]
    FALSE
    FALSE
    TRUE
    @PHP/standard/serialize/bug31402.php: SUCCEEDED
    @PHP/standard/serialize/bug31442.php: SUCCEEDED
    @PHP/standard/strings/add-and-stripcslashes.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    kaboemkara!
    foo\b\a\r\b\az
    \f\o\o\[ \]
    \zoo['\.']
    \abcd\e\f\g\h\i\j\k\l\m\n\o\pqrstuvwxy\z
    1
    5d
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\standard\strings\__input.txt at expression on line 3, column 1.
    
    kaboemkara!
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\standard\strings\__input.txt at expression on line 5, column 1.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\standard\strings\__input.txt at expression on line 6, column 1.
    
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\standard\strings\__input.txt at expression on line 8, column 1.
    
    1
    5d
    @PHP/standard/strings/add-and-stripslashes.php: SUCCEEDED
    @PHP/standard/strings/basename.php: SUCCEEDED
    @PHP/standard/strings/bin2hex.php: SUCCEEDED
    @PHP/standard/strings/bug20108.php: SUCCEEDED
    @PHP/standard/strings/bug20169.php: SUCCEEDED
    @PHP/standard/strings/bug20261.php: SUCCEEDED
    @PHP/standard/strings/bug20927.php: SUCCEEDED
    @PHP/standard/strings/bug21338.php: SUCCEEDED
    @PHP/standard/strings/bug21453.php: SUCCEEDED
    @PHP/standard/strings/bug21730.php: SUCCEEDED
    @PHP/standard/strings/bug21744.php: SUCCEEDED
    @PHP/standard/strings/bug22008.php: SUCCEEDED
    @PHP/standard/strings/bug22187.php: SUCCEEDED
    @PHP/standard/strings/bug22224.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      0 => 
      object
      {
      }
      1 => 
      object
      {
      }
    }
    @PHP/standard/strings/bug22227.php: SUCCEEDED
    @PHP/standard/strings/bug22904.php: SUCCEEDED
    @PHP/standard/strings/bug23650.php: SUCCEEDED
    @PHP/standard/strings/bug23894.php: SUCCEEDED
    @PHP/standard/strings/bug24098.php: SUCCEEDED
    @PHP/standard/strings/bug24208.php: SUCCEEDED
    @PHP/standard/strings/bug24281.php: SUCCEEDED
    @PHP/standard/strings/bug25671.php: SUCCEEDED
    @PHP/standard/strings/bug25707.php: SUCCEEDED
    @PHP/standard/strings/bug26878.php: SUCCEEDED
    @PHP/standard/strings/bug26973.php: SUCCEEDED
    @PHP/standard/strings/bug27276.php: SUCCEEDED
    @PHP/standard/strings/bug27278.php: SUCCEEDED
    @PHP/standard/strings/bug27295.php: SUCCEEDED
    @PHP/standard/strings/bug27457.php: SUCCEEDED
    @PHP/standard/strings/bug27675.php: SUCCEEDED
    @PHP/standard/strings/bug28386.php: SUCCEEDED
    @PHP/standard/strings/bug33076.php: SUCCEEDED
    @PHP/standard/strings/chr_ord.php: SUCCEEDED
    @PHP/standard/strings/chunk_split.php: SUCCEEDED
    @PHP/standard/strings/count_chars.php: SUCCEEDED
    @PHP/standard/strings/crc32.php: SUCCEEDED
    @PHP/standard/strings/explode.php: SUCCEEDED
    @PHP/standard/strings/implode.php: SUCCEEDED
    @PHP/standard/strings/md5.php: SUCCEEDED
    @PHP/standard/strings/md5raw.php: SUCCEEDED
    @PHP/standard/strings/nl2br.php: SUCCEEDED
    @PHP/standard/strings/sha1.php: SUCCEEDED
    @PHP/standard/strings/sha1raw.php: SUCCEEDED
    @PHP/standard/strings/sprintf_f.php: SUCCEEDED
    @PHP/standard/strings/strcspn.php: SUCCEEDED
    @PHP/standard/strings/strings001.php: SUCCEEDED
    @PHP/standard/strings/strpos.php: SUCCEEDED
    @PHP/standard/strings/strrev.php: SUCCEEDED
    @PHP/standard/strings/strripos.php: SUCCEEDED
    @PHP/standard/strings/strrpos.php: SUCCEEDED
    @PHP/standard/strings/strspn.php: SUCCEEDED
    @PHP/standard/strings/strstr.php: SUCCEEDED
    @PHP/standard/strings/strtoupper.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    cfbfbdcfbfbdcfbfbd
    cfafbdcfafbdcfafbd
    @PHP/standard/strings/strtr.php: SUCCEEDED
    @PHP/standard/strings/strval.php: SUCCEEDED
    @PHP/standard/strings/str_repeat.php: SUCCEEDED
    @PHP/standard/strings/str_shuffle.php: SUCCEEDED
    @PHP/standard/strings/str_word_count.php: SUCCEEDED
    @PHP/standard/strings/substr_count.php: SUCCEEDED
    @PHP/standard/strings/substr_replace.php: SUCCEEDED
    @PHP/standard/strings/wordwrap.php: SUCCEEDED
    @PHP/standard/time/001.php: SUCCEEDED
    @PHP/standard/time/idate.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    U: 1043324459
    Y: 2003
    z: 22
    y: 3
    m: 1
    n: 1
    d: 23
    j: 23
    H: 13
    G: 13
    h: 1
    g: 1
    i: 20
    s: 59
    t: 31
    w: 4
    L: 0
    B: 556
    I: 0
    W: 4
    U: 1043324459
    Y: 2003
    z: 22
    y: 3
    m: 1
    n: 1
    d: 23
    j: 23
    H: 12
    G: 12
    h: 12
    g: 12
    i: 20
    s: 59
    t: 31
    w: 4
    L: 0
    B: 556
    I: 0
    W: 4
    @PHP/strings/001.php: SUCCEEDED
    @PHP/strings/002.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    fprintf test 1:abcde
    20
    printf test 1:simple string
    printf test 2:42
    printf test 3:3.333333
    printf test 4:3.3333333333
    printf test 5:2.50      
    printf test 6:2.50000000
    printf test 7:0000002.50
    printf test 8:<                 foo>
    printf test 9:<bar                 >
    printf test 10: 123456789012345
    printf test 10:<h´┐Żyesterettsjustitiarius>
    printf test 11: 123456789012345678901234567890
    printf test 11:<    h´┐Żyesterettsjustitiarius>
    printf test 12:-12.34
    printf test 13:  -12
    printf test 14:@
    printf test 15:10101010
    printf test 16:aa
    printf test 17:AA
    printf test 18:        10101010
    printf test 19:              aa
    printf test 20:              AA
    printf test 21:0000000010101010
    printf test 22:00000000000000aa
    printf test 23:00000000000000AA
    printf test 24:abcde
    printf test 25:gazonk
    printf test 26:2 1
    printf test 27:3 1 2
    printf test 28:02  1
    printf test 29:2   1
    printf test 30:x
    vprintf test 1:2   1
    fprintf test 1:abcde
    20
    printf test 1:simple string
    printf test 2:42
    printf test 3:3.333333
    printf test 4:3.3333333333
    printf test 5:2.50      
    printf test 6:2.50000000
    printf test 7:0000002.50
    printf test 8:<                 foo>
    printf test 9:<bar                 >
    printf test 10: 123456789012345
    printf test 10:<h�yesterettsjustitiarius>
    printf test 11: 123456789012345678901234567890
    printf test 11:<    h�yesterettsjustitiarius>
    printf test 12:-12.34
    printf test 13:  -12
    printf test 14:@
    printf test 15:10101010
    printf test 16:aa
    printf test 17:AA
    printf test 18:        10101010
    printf test 19:              aa
    printf test 20:              AA
    printf test 21:0000000010101010
    printf test 22:00000000000000aa
    printf test 23:00000000000000AA
    printf test 24:abcde
    printf test 25:gazonk
    printf test 26:2 1
    printf test 27:3 1 2
    printf test 28:02  1
    printf test 29:2   1
    printf test 30:x
    vprintf test 1:2   1
    @PHP/strings/bug22592.php: SUCCEEDED
    Arrays/array1.php: SUCCEEDED
    Arrays/array_diff_intersect.php: SUCCEEDED
    Arrays/array_diff_intersect2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Strict Standards: array_udiff() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 35
    Array
    (
        [0.5] => cr Object
            (
                [priv_member:cr:private] => 12
            )
    
        [0] => cr Object
            (
                [priv_member:cr:private] => 23
            )
    
    )
    
    Strict Standards: array_udiff_assoc() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 36
    Array
    (
        [0.1] => cr Object
            (
                [priv_member:cr:private] => 9
            )
    
        [0.5] => cr Object
            (
                [priv_member:cr:private] => 12
            )
    
        [0] => cr Object
            (
                [priv_member:cr:private] => 23
            )
    
    )
    
    Strict Standards: array_udiff_uassoc() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 37
    
    Strict Standards: array_udiff_uassoc() expects parameter 4 to be a valid callback, non-static method cr::comp_func_key() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 37
    Array
    (
        [0.1] => cr Object
            (
                [priv_member:cr:private] => 9
            )
    
        [0.5] => cr Object
            (
                [priv_member:cr:private] => 12
            )
    
        [0] => cr Object
            (
                [priv_member:cr:private] => 23
            )
    
    )
    Array
    (
        [b] => brown
        [c] => blue
        [0] => red
    )
    ------------------------------------
    
    Strict Standards: array_uintersect() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 40
    Array
    (
        [0.1] => cr Object
            (
                [priv_member:cr:private] => 9
            )
    
        [1] => cr Object
            (
                [priv_member:cr:private] => 4
            )
    
        [2] => cr Object
            (
                [priv_member:cr:private] => -15
            )
    
    )
    
    Strict Standards: array_uintersect_assoc() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 41
    Array
    (
        [1] => cr Object
            (
                [priv_member:cr:private] => 4
            )
    
        [2] => cr Object
            (
                [priv_member:cr:private] => -15
            )
    
    )
    
    Strict Standards: array_uintersect_uassoc() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 42
    
    Strict Standards: array_uintersect_uassoc() expects parameter 4 to be a valid callback, non-static method cr::comp_func_key() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 42
    Array
    (
        [1] => cr Object
            (
                [priv_member:cr:private] => 4
            )
    
        [2] => cr Object
            (
                [priv_member:cr:private] => -15
            )
    
    )
    Array
    (
        [a] => green
    )
    Array
    (
        [0.5] => cr Object
        (
            [priv_member:private] => 12
        )
    
        [0] => cr Object
        (
            [priv_member:private] => 23
        )
    
    )
    Array
    (
        [0.1] => cr Object
        (
            [priv_member:private] => 9
        )
    
        [0.5] => cr Object
        (
            [priv_member:private] => 12
        )
    
        [0] => cr Object
        (
            [priv_member:private] => 23
        )
    
    )
    Array
    (
        [0.1] => cr Object
        (
            [priv_member:private] => 9
        )
    
        [0.5] => cr Object
        (
            [priv_member:private] => 12
        )
    
        [0] => cr Object
        (
            [priv_member:private] => 23
        )
    
    )
    Array
    (
        [b] => brown
        [c] => blue
        [0] => red
    )
    ------------------------------------
    Array
    (
        [0.1] => cr Object
        (
            [priv_member:private] => 9
        )
    
        [1] => cr Object
        (
            [priv_member:private] => 4
        )
    
        [2] => cr Object
        (
            [priv_member:private] => -15
        )
    
    )
    Array
    (
        [1] => cr Object
        (
            [priv_member:private] => 4
        )
    
        [2] => cr Object
        (
            [priv_member:private] => -15
        )
    
    )
    Array
    (
        [1] => cr Object
        (
            [priv_member:private] => 4
        )
    
        [2] => cr Object
        (
            [priv_member:private] => -15
        )
    
    )
    Array
    (
        [a] => green
    )
    Arrays/array_diff_intersect3.php: SUCCEEDED
    Arrays/array_filter%20false%20entries%20%2322016.php: SUCCEEDED
    Arrays/array_map.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Array
    (
        [0] => Array
            (
                [0] => 1
                [1] => A
                [2] => 0
            )
    
        [1] => Array
            (
                [0] => 2
                [1] => B
                [2] => 0
            )
    
        [2] => Array
            (
                [0] => 3
                [1] => C
                [2] => 
            )
    
    )
    Array
    (
        [0] => 1 A 0
        [1] => 2 B 0
        [2] => 3 C 
    )
    Array
    (
        [A] => 2
        [10] => 3
    )
    Array
    (
        [0] => 1
        [1] => 2
        [2] => 3
    )
    Array
    (
        [0] => A
        [1] => B
        [2] => C
    )
    Array
    (
        [0] => 0
        [1] => 0
    )
    Array
    (
        [A] => 1
        [10] => 2
    )
    Array
    (
        [0] => Array
        (
            [0] => 1
            [1] => A
            [2] => 0
        )
    
        [1] => Array
        (
            [0] => 2
            [1] => B
            [2] => 0
        )
    
        [2] => Array
        (
            [0] => 3
            [1] => C
            [2] => 
        )
    
    )
    Array
    (
        [0] => 1 A 0
        [1] => 2 B 0
        [2] => 3 C 
    )
    Array
    (
        [A] => 2
        [10] => 3
    )
    Array
    (
        [0] => 1
        [1] => 2
        [2] => 3
    )
    Array
    (
        [0] => A
        [1] => B
        [2] => C
    )
    Array
    (
        [0] => x
        [1] => x
    )
    Array
    (
        [A] => 1
        [10] => 2
    )
    Arrays/array_merge_recursive.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Array
    (
        [color] => Array
            (
                [favorite] => Array
                    (
                        [0] => red
                        [1] => green
                    )
    
                [0] => blue
            )
    
        [0] => Array
            (
                [0] => 1
                [1] => 2
                [2] => 3
            )
    
        [q] => Array
            (
                [0] => 
                [1] => 
                [2] => x
            )
    
        [1] => 10
        [2] => Array
            (
                [0] => 4
                [1] => 5
                [2] => 6
            )
    
    )
    Array
    (
        [a] => Array
            (
                [0] => 1
                [1] => 2
                [2] => 3
                [3] => e
            )
    
    )
    Array
    (
        [a] => Array
            (
                [0] => 1
                [1] => 2
                [2] => 3
                [3] => e
            )
    
    )
    Array
    (
        [a] => 1
        [b] => 2
    )
    Array
    (
        [a] => xxx
        [b] => 2
    )
    Array
    (
        [a] => Array
            (
                [a] => Array
                    (
                        [a] => Array
     *RECURSION*
                    )
    
                [0] => 1
                [1] => 2
                [2] => 3
            )
    
    )
    Array
    (
        [a] => Array
            (
                [b] => Array
                    (
                        [0] => 1
                        [1] => 1
                    )
    
                [c] => 1
                [d] => Array
                    (
                        [0] => 2
                        [1] => 3
                    )
    
            )
    
    )
    Array
    (
        [a] => Array
            (
                [0] => 
                [1] => 
            )
    
    )
    Array
    (
        [a] => Array
            (
                [0] => 
                [1] => 
            )
    
    )
    Array
    (
        [color] => Array
        (
            [favorite] => Array
            (
                [0] => red
                [1] => green
            )
    
            [0] => blue
        )
    
        [0] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
        )
    
        [q] => Array
        (
            [0] => x
        )
    
        [1] => 10
        [2] => Array
        (
            [0] => 4
            [1] => 5
            [2] => 6
        )
    
    )
    Array
    (
        [a] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
            [3] => e
        )
    
    )
    Array
    (
        [a] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
            [3] => e
        )
    
    )
    Array
    (
        [a] => 1
        [b] => 2
    )
    Array
    (
        [a] => xxx
        [b] => 2
    )
    Array
    (
        [a] => Array
        (
            [a] => Array
            (
                [a] => Array [recursion]
    
    
            )
    
            [0] => 1
            [1] => 2
            [2] => 3
        )
    
    )
    Array
    (
        [a] => Array
        (
            [b] => Array
            (
                [0] => 1
                [1] => 1
            )
    
            [c] => 1
            [d] => Array
            (
                [0] => 2
                [1] => 3
            )
    
        )
    
    )
    Array
    (
        [a] => Array
        (
        )
    
    )
    Array
    (
        [a] => Array
        (
        )
    
    )
    Arrays/array_reduce1.php: SUCCEEDED
    Arrays/array_reduce2.php: SUCCEEDED
    Arrays/array_slice.php: SUCCEEDED
    Arrays/array_sumprod.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    float(8.3)
    float(0)
    int(6)
    int(6)
    float(4294967297)
    float(9.2233720282648E+18)
    bool(true)
    bool(false)
    float(-7.7)
    float(-38.4)
    int(6)
    int(6)
    int64(4294967297)
    int64(9223372028264841218)
    bool(true)
    bool(true)
    Arrays/array_unshift.php: SUCCEEDED
    Arrays/array_walk.php: SUCCEEDED
    Arrays/array_walk_recursive.php: SUCCEEDED
    Arrays/multisort.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    bool(true)
    Array
    (
        [0] => Array
            (
                [0] => 2
                [1] => 8
                [2] => 2
                [3] => 2
                [4] => 8
                [5] => 8
            )
    
        [1] => Array
            (
                [0] => 7
                [1] => 2
                [2] => 7
                [3] => 4
                [4] => 8
                [5] => 1
            )
    
        [2] => Array
            (
                [0] => 1
                [1] => 4
                [2] => 8
                [3] => 0
                [4] => 6
                [5] => 2
            )
    
        [3] => Array
            (
                [0] => 8
                [1] => 4
                [2] => 1
                [3] => 0
                [4] => 7
                [5] => 1
            )
    
        [4] => Array
            (
                [0] => 20
                [1] => 2
                [2] => 12
                [3] => 11
                [4] => 10
                [5] => 1
            )
    
    )
    Array
    (
        [0] => Array
            (
                [0] => 10
                [1] => 100
                [2] => 100
                [3] => a
            )
    
        [1] => Array
            (
                [0] => 1
                [1] => 3
                [2] => 2
                [3] => 1
            )
    
    )
    Array
    (
        [0] => 10
        [1] => a
        [2] => 100
        [3] => 100
    )
    Array
    (
        [0] => 1
        [1] => 1
        [2] => 2
        [3] => 3
    )
    bool(true)
    Array
    (
        [0] => Array
        (
            [0] => 2
            [1] => 8
            [2] => 2
            [3] => 2
            [4] => 8
            [5] => 8
        )
    
        [1] => Array
        (
            [0] => 7
            [1] => 2
            [2] => 7
            [3] => 4
            [4] => 8
            [5] => 1
        )
    
        [2] => Array
        (
            [0] => 1
            [1] => 4
            [2] => 8
            [3] => 0
            [4] => 6
            [5] => 2
        )
    
        [3] => Array
        (
            [0] => 8
            [1] => 4
            [2] => 1
            [3] => 0
            [4] => 7
            [5] => 1
        )
    
        [4] => Array
        (
            [0] => 20
            [1] => 2
            [2] => 12
            [3] => 11
            [4] => 10
            [5] => 1
        )
    
    )
    Array
    (
        [0] => Array
        (
            [0] => 10
            [1] => 100
            [2] => 100
            [3] => a
        )
    
        [1] => Array
        (
            [0] => 1
            [1] => 3
            [2] => 2
            [3] => 1
        )
    
    )
    Array
    (
        [0] => 10
        [1] => a
        [2] => 100
        [3] => 100
    )
    Array
    (
        [0] => 1
        [1] => 1
        [2] => 2
        [3] => 3
    )
    Arrays/multisort_empty.php: SUCCEEDED
    Arrays/nonarray%20access%20%2322019.php: SUCCEEDED
    Arrays/optimizations.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    3
    4
    5
    a
    b
    c
    
    Warning: strtolower() expects parameter 1 to be string, array given in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 15
    
    cablo
    3
    4
    5
    a
    b
    c
    array
    cablo
    Arrays/recursion.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    f1:
    array(2) {
      ["a"]=>
      array(5) {
        ["a"]=>
        &array(3) {
          ["a"]=>
          &array(3) {
            ["a"]=>
            *RECURSION*
            [0]=>
            string(1) "y"
            [1]=>
            string(1) "z"
          }
          [0]=>
          string(1) "y"
          [1]=>
          string(1) "z"
        }
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        string(1) "x"
      }
      [0]=>
      string(1) "w"
    }
    f2:
    array(1) {
      ["A"]=>
      &array(2) {
        ["a"]=>
        &array(2) {
          ["a"]=>
          *RECURSION*
          [0]=>
          string(1) "z"
        }
        [0]=>
        string(1) "z"
      }
    }
    f3:
    array(2) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) {
          [0]=>
          *RECURSION*
          [1]=>
          string(1) "z"
        }
        [1]=>
        string(1) "z"
      }
      [1]=>
      string(1) "z"
    }
    f4:
    
    Warning: array_merge_recursive(): recursion detected in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 37
    array(1) {
      ["a"]=>
      &array(3) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
      }
    }
    f5:
    array(1) {
      ["a"]=>
      array(6) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        int(1)
        [4]=>
        int(2)
        [5]=>
        int(3)
      }
    }
    f6:
    array(1) {
      ["a"]=>
      array(2) {
        [0]=>
        string(2) "xx"
        [1]=>
        int(2)
      }
    }
    f7:
    array(1) {
      ["a"]=>
      array(1) {
        ["a"]=>
        array(1) {
          ["a"]=>
          &array(1) {
            ["a"]=>
            &array(1) {
              ["a"]=>
              *RECURSION*
            }
          }
        }
      }
    }
    f1:
    array(2) {
      ["a"]=>
      array(5) {
        ["a"]=>
        &array(3) {
          ["a"]=>
          &array(3) [recursion]
          [0]=>
          string(1) "y"
          [1]=>
          string(1) "z"
        }
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        string(1) "x"
      }
      [0]=>
      string(1) "w"
    }
    f2:
    array(1) {
      ["A"]=>
      &array(2) {
        ["a"]=>
        &array(2) [recursion]
        [0]=>
        string(1) "z"
      }
    }
    f3:
    array(2) {
      [0]=>
      &array(2) [recursion]
      [1]=>
      string(1) "z"
    }
    f4:
    array(1) {
      ["a"]=>
      array(6) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        int(1)
        [4]=>
        int(2)
        [5]=>
        int(3)
      }
    }
    f5:
    array(1) {
      ["a"]=>
      array(6) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        int(1)
        [4]=>
        int(2)
        [5]=>
        int(3)
      }
    }
    f6:
    array(1) {
      ["a"]=>
      array(2) {
        [0]=>
        string(2) "xx"
        [1]=>
        int(2)
      }
    }
    f7:
    array(1) {
      ["a"]=>
      &array(1) {
        ["a"]=>
        &array(1) [recursion]
      }
    }
    Arrays/sort.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    sort regular:
    Array
    (
        [0] => 0
        [1] => 1
        [2] => 1
        [3] => 8
        [4] => 0x10
        [5] => 10x
        [6] => 20x
        [7] => ach0
        [8] => add1
        [9] => x10
        [10] => x2
    )
    
    sort numeric:
    Array
    (
        [0] => add1
        [1] => x2
        [2] => 0x10
        [3] => ach0
        [4] => 0
        [5] => x10
        [6] => 1
        [7] => 1
        [8] => 8
        [9] => 10x
        [10] => 20x
    )
    
    sort string:
    Array
    (
        [0] => 0
        [1] => 0x10
        [2] => 1
        [3] => 1
        [4] => 10x
        [5] => 20x
        [6] => 8
        [7] => ach0
        [8] => add1
        [9] => x10
        [10] => x2
    )
    
    sort locale:
    Array
    (
        [0] => 0
        [1] => 0x10
        [2] => 1
        [3] => 1
        [4] => 10x
        [5] => 20x
        [6] => 8
        [7] => ach0
        [8] => add1
        [9] => x10
        [10] => x2
    )
    
    ksort regular:
    Array
    (
        [x] => 8
        [z] => 1
        [0] => x10
        [1] => 10x
        [2b] => 1
        [2] => 20x
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [10a] => 0
    )
    
    ksort numeric:
    Array
    (
        [x] => 8
        [z] => 1
        [0] => x10
        [1] => 10x
        [2b] => 1
        [2] => 20x
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [10a] => 0
    )
    
    ksort string:
    Array
    (
        [0] => x10
        [1] => 10x
        [10a] => 0
        [2] => 20x
        [2b] => 1
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [x] => 8
        [z] => 1
    )
    
    ksort locale:
    Array
    (
        [0] => x10
        [1] => 10x
        [10a] => 0
        [2] => 20x
        [2b] => 1
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [x] => 8
        [z] => 1
    )
    
    asort regular:
    Array
    (
        [10a] => 0
        [2b] => 1
        [z] => 1
        [x] => 8
        [4] => 0x10
        [1] => 10x
        [2] => 20x
        [5] => ach0
        [6] => add1
        [0] => x10
        [3] => x2
    )
    
    asort numeric:
    Array
    (
        [6] => add1
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [10a] => 0
        [0] => x10
        [z] => 1
        [2b] => 1
        [x] => 8
        [1] => 10x
        [2] => 20x
    )
    
    asort string:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [z] => 1
        [2b] => 1
        [1] => 10x
        [2] => 20x
        [x] => 8
        [5] => ach0
        [6] => add1
        [0] => x10
        [3] => x2
    )
    
    asort locale:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [z] => 1
        [2b] => 1
        [1] => 10x
        [2] => 20x
        [x] => 8
        [5] => ach0
        [6] => add1
        [0] => x10
        [3] => x2
    )
    
    rsort regular:
    Array
    (
        [0] => x2
        [1] => x10
        [2] => add1
        [3] => ach0
        [4] => 20x
        [5] => 10x
        [6] => 0x10
        [7] => 8
        [8] => 1
        [9] => 1
        [10] => 0
    )
    
    rsort numeric:
    Array
    (
        [0] => 20x
        [1] => 10x
        [2] => 8
        [3] => 1
        [4] => 1
        [5] => ach0
        [6] => add1
        [7] => 0x10
        [8] => x2
        [9] => x10
        [10] => 0
    )
    
    rsort string:
    Array
    (
        [0] => x2
        [1] => x10
        [2] => add1
        [3] => ach0
        [4] => 8
        [5] => 20x
        [6] => 10x
        [7] => 1
        [8] => 1
        [9] => 0x10
        [10] => 0
    )
    
    rsort locale:
    Array
    (
        [0] => x2
        [1] => x10
        [2] => add1
        [3] => ach0
        [4] => 8
        [5] => 20x
        [6] => 10x
        [7] => 1
        [8] => 1
        [9] => 0x10
        [10] => 0
    )
    
    natsort:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [2b] => 1
        [z] => 1
        [x] => 8
        [1] => 10x
        [2] => 20x
        [5] => ach0
        [6] => add1
        [3] => x2
        [0] => x10
    )
    sort regular:
    Array
    (
        [0] => 0x10
        [1] => 10x
        [2] => 20x
        [3] => ach0
        [4] => add1
        [5] => x10
        [6] => 0
        [7] => x2
        [8] => 1
        [9] => 1
        [10] => 8
    )
    
    sort numeric:
    Array
    (
        [0] => x10
        [1] => 0
        [2] => x2
        [3] => ach0
        [4] => add1
        [5] => 1
        [6] => 1
        [7] => 8
        [8] => 10x
        [9] => 0x10
        [10] => 20x
    )
    
    sort string:
    Array
    (
        [0] => 0
        [1] => 0x10
        [2] => 1
        [3] => 1
        [4] => 10x
        [5] => 20x
        [6] => 8
        [7] => ach0
        [8] => add1
        [9] => x10
        [10] => x2
    )
    
    sort locale:
    Array
    (
        [0] => 0
        [1] => 0x10
        [2] => 1
        [3] => 1
        [4] => 10x
        [5] => 20x
        [6] => 8
        [7] => add1
        [8] => ach0
        [9] => x10
        [10] => x2
    )
    
    ksort regular:
    Array
    (
        [x] => 8
        [z] => 1
        [0] => x10
        [1] => 10x
        [2] => 20x
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [10a] => 0
        [2b] => 1
    )
    
    ksort numeric:
    Array
    (
        [x] => 8
        [z] => 1
        [0] => x10
        [1] => 10x
        [2b] => 1
        [2] => 20x
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [10a] => 0
    )
    
    ksort string:
    Array
    (
        [0] => x10
        [1] => 10x
        [10a] => 0
        [2] => 20x
        [2b] => 1
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [x] => 8
        [z] => 1
    )
    
    ksort locale:
    Array
    (
        [0] => x10
        [1] => 10x
        [10a] => 0
        [2] => 20x
        [2b] => 1
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [x] => 8
        [z] => 1
    )
    
    asort regular:
    Array
    (
        [4] => 0x10
        [1] => 10x
        [2] => 20x
        [5] => ach0
        [6] => add1
        [0] => x10
        [10a] => 0
        [3] => x2
        [z] => 1
        [2b] => 1
        [x] => 8
    )
    
    asort numeric:
    Array
    (
        [0] => x10
        [10a] => 0
        [3] => x2
        [5] => ach0
        [6] => add1
        [z] => 1
        [2b] => 1
        [x] => 8
        [1] => 10x
        [4] => 0x10
        [2] => 20x
    )
    
    asort string:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [z] => 1
        [2b] => 1
        [1] => 10x
        [2] => 20x
        [x] => 8
        [5] => ach0
        [6] => add1
        [0] => x10
        [3] => x2
    )
    
    asort locale:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [z] => 1
        [2b] => 1
        [1] => 10x
        [2] => 20x
        [x] => 8
        [6] => add1
        [5] => ach0
        [0] => x10
        [3] => x2
    )
    
    rsort regular:
    Array
    (
        [0] => 8
        [1] => 1
        [2] => 1
        [3] => x2
        [4] => x10
        [5] => 0
        [6] => add1
        [7] => ach0
        [8] => 20x
        [9] => 10x
        [10] => 0x10
    )
    
    rsort numeric:
    Array
    (
        [0] => 20x
        [1] => 0x10
        [2] => 10x
        [3] => 8
        [4] => 1
        [5] => 1
        [6] => x10
        [7] => 0
        [8] => x2
        [9] => ach0
        [10] => add1
    )
    
    rsort string:
    Array
    (
        [0] => x2
        [1] => x10
        [2] => add1
        [3] => ach0
        [4] => 8
        [5] => 20x
        [6] => 10x
        [7] => 1
        [8] => 1
        [9] => 0x10
        [10] => 0
    )
    
    rsort locale:
    Array
    (
        [0] => x2
        [1] => x10
        [2] => ach0
        [3] => add1
        [4] => 8
        [5] => 20x
        [6] => 10x
        [7] => 1
        [8] => 1
        [9] => 0x10
        [10] => 0
    )
    
    natsort:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [z] => 1
        [2b] => 1
        [x] => 8
        [1] => 10x
        [2] => 20x
        [5] => ach0
        [6] => add1
        [3] => x2
        [0] => x10
    )
    Arrays/usort.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    Array
    (
        [0] => 10
        [1] => 9
        [2] => 8
        [3] => 7
        [4] => 6
        [5] => 5
        [6] => 4
        [7] => 3
        [8] => 2
        [9] => 1
    )
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Array
    (
        [0] => 10
        [1] => 9
        [2] => 8
        [3] => 7
        [4] => 6
        [5] => 5
        [6] => 4
        [7] => 3
        [8] => 2
        [9] => 1
    )
    Arrays/lazy_copy/001.php: SUCCEEDED
    Arrays/lazy_copy/002.php: SUCCEEDED
    Arrays/lazy_copy/003.php: SUCCEEDED
    Arrays/lazy_copy/004.php: SUCCEEDED
    Arrays/lazy_copy/005.php: SUCCEEDED
    Arrays/lazy_copy/006.php: SUCCEEDED
    Bugs/class_incompletepart.php: SUCCEEDED
    Bugs/division-by-zero.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    DIVISION
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 6
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 8
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 10
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 12
    bool(false)
    MODULO
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 16
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 18
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 20
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 22
    bool(false)
    DIVISION
    bool(false)
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt at expression on line 10, column 2.
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt at expression on line 12, column 2.
    bool(false)
    MODULO
    bool(false)
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt at expression on line 20, column 2.
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt at expression on line 22, column 2.
    bool(false)
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt(6,10): warning PHP0150: Division by zero
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt(8,9): warning PHP0150: Division by zero
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt(16,10): warning PHP0150: Division by zero
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt(18,9): warning PHP0150: Division by zero
    
    Bugs/function-in-unknown-class.php: SUCCEEDED
    Bugs/is_a_null_value.php: SUCCEEDED
    Bugs/preg-named-groups.php: SUCCEEDED
    Bugs/preg-replace-advanced.php: SUCCEEDED
    Bugs/preg-replace-range.php: SUCCEEDED
    Bugs/preg-replace.php: SUCCEEDED
    Bugs/preg-this-dynamic.php: FAILED
    Script hung upNo errorsSuccess
    Expected test outputReal script output
    Unhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---> PHP.Core.Debug+AssertException: Assertion failed: 
       at PHP.Core.Debug.Fail(String message)
       at PHP.Core.Debug.Assert(Boolean condition)
       at PHP.Core.RelativePath.ParseCanonical(String relativePath)
       at PHP.Core.Emit.TransientAssemblyBuilder.Build(String sourceCode, SourceCodeDescriptor descriptor, EvalKinds kind, CompilationContext context, ScriptContext scriptContext, DTypeDesc referringType, NamingContext namingContext, Boolean completeSource)
       at PHP.Core.DynamicCode.EvalInternal(String prefix, String code, String suffix, EvalKinds kind, ScriptContext scriptContext, Dictionary`2 localVariables, DObject self, DTypeDesc referringType, SourceCodeDescriptor descriptor, Boolean entireFile, NamingContext namingContext)
       at PHP.Core.DynamicCode.Eval(String code, Boolean synthetic, ScriptContext context, Dictionary`2 definedVariables, DObject self, DTypeDesc referringType, String callerRelativeSourcePath, Int32 line, Int32 column, Int32 containerId, NamingContext namingContext)
       at PHP.Library.PerlRegExp.Evaluator.ReplaceCodeExecute(Match m)
       at System.Text.RegularExpressions.RegexReplacement.Replace(MatchEvaluator evaluator, Regex regex, String input, Int32 count, Int32 startat)
       at System.Text.RegularExpressions.Regex.Replace(String input, MatchEvaluator evaluator, Int32 count)
       at PHP.Library.PerlRegExp.ReplaceInternal(DObject self, Dictionary`2 definedVariables, PerlRegExpConverter converter, PhpCallback callback, String str, Int32 limit, SourceCodeDescriptor sourceCodeDesc, Int32& count)
       at PHP.Library.PerlRegExp.SimpleReplace(DObject self, Dictionary`2 definedVariables, Object pattern, String replacement, PhpCallback callback, Object data, Int32 limit, SourceCodeDescriptor descriptor, Int32& count)
       at PHP.Library.PerlRegExp.Replace(ScriptContext context, DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, PhpCallback callback, Object data, Int32 limit, Int32& count)
       at PHP.Library.PerlRegExp.Replace(ScriptContext context, DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, Object data)
       at PHP.Dynamic.PhpNetClassLibrary.preg_replace(Object , PhpStack )
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <__input.txt>.a.a(ScriptContext ) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt:line 16
       at <__input.txt>.a.<Mediator>(ScriptContext )
       at <__input.txt>.a.a(Object instance, PhpStack stack)
       at <__input.txt>.<Script>.<Main>(ScriptContext <context>, Dictionary`2 <locals>, DObject , DTypeDesc , Boolean ) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt:line 19
       at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)
       at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)
       --- End of inner exception stack trace ---
       at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)
       at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)
       at <Global>.Run(String[] )
    
    Bugs/preg-this-dynamic2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    foo: ahoj
    foo: lidi
    foo: rozkladame
    foo: ahoj
    foo: lidi
    foo: rozkladame
    foo: ahoj
    foo: lidi
    foo: rozkladame
    
    Notice: Undefined variable: this.
    
    Error: Call to a member function foo() on a non-object.
    Bugs/preg-this.php: SUCCEEDED
    Bugs/preg-ungreedy-bugs.php: SUCCEEDED
    Bugs/preg-unkn.php: SUCCEEDED
    Bugs/trigger_error%20line%20number%20%232787.php: SUCCEEDED
    CLR/BaseTypes.php: SUCCEEDED
    CLR/ConditionalDecls.php: SUCCEEDED
    CLR/ConditionalDecls2.php: SUCCEEDED
    CLR/foreach.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    1, 2, 3, 4, 5, OK
    Strict Standards: Non-static method P::CreateList() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt at expression on line 17, column 3.
    8, 5, , , , , , 
    Notice: Object of class System:::Object to string conversion in D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt at expression on line 20, column 33.
    System.Object, 
    Notice: Object of class System:::Object to string conversion in D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt at expression on line 20, column 33.
    System.Object, , , OK
    CLR/handle_enum.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    int(2)
    DONE
    int(5)
    DONE
    CLR/Inheritance1.php: FAILED
    Phalanger misbehaviour while compiling [file] sectionSee belowSuccess
    Expected test outputReal script output
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(3,2): error PHP2031: Circular interface inheritance dependency involving 'I4' and 'I1'
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(6,2): (related location)
    
    CLR/Inheritance2.php: FAILED
    Phalanger misbehaviour while compiling [file] sectionSee belowSuccess
    Expected test outputReal script output
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(3,2): error PHP2031: Circular interface inheritance dependency involving 'J4' and 'J1'
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(6,2): (related location)
    
    CLR/Inheritance3.php: FAILED
    Phalanger misbehaviour while compiling [file] sectionSee belowSuccess
    Expected test outputReal script output
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(3,2): error PHP2031: Circular interface inheritance dependency involving 'J5' and 'J5'
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(3,2): (related location)
    
    CLR/Inheritance4.php: FAILED
    Phalanger misbehaviour while compiling [file] sectionSee belowSuccess
    Expected test outputReal script output
    error PHP2007: Internal error! 
    Please, report this bug via http://www.codeplex.com/WorkItem/List.aspx?ProjectName=Phalanger.
    Additional information: 
    Could not load type '<__input.txt>.J`1' from assembly 'Inheritance4_file, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' because it has recursive generic definition.
       at System.Reflection.Emit.TypeBuilder.TermCreateClass(RuntimeModule module, Int32 tk, ObjectHandleOnStack type)
       at System.Reflection.Emit.TypeBuilder.CreateTypeNoLock()
       at System.Reflection.Emit.TypeBuilder.CreateType()
       at PHP.Core.Reflection.PhpType.Bake()
       at PHP.Core.Reflection.ScriptCompilationUnit.Bake()
       at PHP.Core.Reflection.InclusionGraphBuilder.EmitAllUnits(CodeGenerator codeGenerator)
       at PHP.Core.Emit.ScriptAssemblyBuilder.CompileScripts(IEnumerable`1 sourceFiles, String duckPath, String duckNamespace, CompilationContext context)
       at PHP.Core.Emit.ScriptAssemblyBuilder.Build(IEnumerable`1 sourceFiles, CompilationContext context)
       at PHP.Core.ApplicationCompiler.Compile(ApplicationContext applicationContext, CompilerConfiguration config, ErrorSink errorSink, CompilationParameters ps)
    
    
    CLR/Inheritance5.php: SUCCEEDED
    CLR/Inheritance6.php: SUCCEEDED
    CLR/Inheritance7.php: SUCCEEDED
    CLR/Inheritance8.php: SUCCEEDED
    CLR/Inheritance9.php: SUCCEEDED
    CLR/Lambdas.php: FAILED
    Phalanger misbehaviour while compiling [file] sectionSee belowCompile error
    Expected test outputReal script output
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(4,3): error PHP1120: Unknown custom attribute; neither of types 'AttributeUsage' and 'AttributeUsageAttribute' exists
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(10,19): warning PHP0180: Declaration of MyAttribute::__construct() should be compatible with that of System:::Attribute::.ctor()
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(5,2): error PHP1018: Class 'MyAttribute' doesn't implement abstract method System:::Attribute::GetTypeInfoCount()
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(5,2): error PHP1018: Class 'MyAttribute' doesn't implement abstract method System:::Attribute::_Attribute.GetTypeInfoCount()
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(5,2): error PHP1018: Class 'MyAttribute' doesn't implement abstract method System:::Attribute::GetTypeInfo()
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(5,2): error PHP1018: Class 'MyAttribute' doesn't implement abstract method System:::Attribute::_Attribute.GetTypeInfo()
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(5,2): error PHP1018: Class 'MyAttribute' doesn't implement abstract method System:::Attribute::GetIDsOfNames()
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(5,2): error PHP1018: Class 'MyAttribute' doesn't implement abstract method System:::Attribute::_Attribute.GetIDsOfNames()
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(5,2): error PHP1018: Class 'MyAttribute' doesn't implement abstract method System:::Attribute::Invoke()
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(5,2): error PHP1018: Class 'MyAttribute' doesn't implement abstract method System:::Attribute::_Attribute.Invoke()
    
    CLR/NameResolving.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    bool(false)
    bool(true)
    object(Directory)(2) {
      ["handle"] => NULL
      ["path"] => NULL
    }
    bool(false)
    
    Error: Class 'Dictionary' not found in D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt at expression on line 12, column 4.
    Compiler/abstracts.php: SUCCEEDED
    Compiler/aliased%20assign%20add.php: SUCCEEDED
    Compiler/assignments.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ---1---1float(-1.5)
    float(2.5)
    float(0.83333333333333)
    int(6)
    int(8)
    ---2---2float(8.8333333333333)
    float(8.8333333333333)
    float(8.8333333333333)
    int(8)
    int(8)
    ---3---3---4---4---5---5array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [1]=>
      array(1) {
        [2]=>
        array(1) {
          [3]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    ---6---6array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "u"
    }
    array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "v"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    ---7---7array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    ---8---8
    ---1---1float(-1.5)
    float(2.5)
    float(0.833333333333333)
    int(6)
    int(8)
    ---2---2float(8.83333333333333)
    float(8.83333333333333)
    float(8.83333333333333)
    int(8)
    int(8)
    ---3---3---4---4---5---5array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [1]=>
      array(1) {
        [2]=>
        array(1) {
          [3]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    ---6---6array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "u"
    }
    array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "v"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    ---7---7array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    ---8---8
    Compiler/assign_in_call.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    g1:
    f(x)
    u(x)
    'x'
    
    g2:
    f(x)
    u(x)
    'b'
    
    g3:
    f(x)
    u(x)
    'b'
    
    g4:
    f(x)
    u(x)
    'b'
    
    g5:
    f()
    u()
    integer(1)
    
    g6:
    f(3)
    u(3)
    integer(3)
    
    g7:
    f(2)
    u(10)
    integer(10)
    
    g8:
    f(1)
    f(1)
    f(1)
    u(1)
    u()
    u(1)
    
    g9:
    known:
    __get(p) = 0
    __set(p,1)
    f(1)
    unknown:
    __get(p) = 1
    __set(p,3)
    u(3)
    
    g10:
    Done.
    g1:
    f(x)
    u(x)
    'x'
    
    g2:
    f(x)
    u(x)
    'b'
    
    g3:
    f(x)
    u(x)
    'b'
    
    g4:
    f(x)
    u(x)
    'b'
    
    g5:
    f()
    u()
    integer(1)
    
    g6:
    f(3)
    u(3)
    integer(3)
    
    g7:
    f(2)
    u(10)
    integer(10)
    
    g8:
    f(1)
    f(1)
    f(1)
    u(1)
    u()
    u(1)
    
    g9:
    known:
    __get(p) = 0
    __set(p,1)
    __get(p) = 1
    f(1)
    unknown:
    __get(p) = 1
    __set(p,3)
    __get(p) = 3
    u(3)
    
    g10:
    Done.
    Compiler/auto_globals_001.php: SUCCEEDED
    Compiler/auto_globals_002.php: SUCCEEDED
    Compiler/auto_globals_003.php: SUCCEEDED
    Compiler/break_in_global_code.php: SUCCEEDED
    Compiler/chaining_test.php: SUCCEEDED
    Compiler/chain_ending_by_string_index.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        string(1) "f"
      }
    }
    array(1) {
      [0]=>
      string(4) "xubu"
    }
    object(C)#1 (1) {
      ["f"]=>
      string(4) "kuxu"
    }
    string(5) "helxo"
    string(5) "helxo"
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        string(1) "f"
      }
    }
    array(1) {
      [0]=>
      string(4) "bubu"
    }
    
    Warning: A string item used as a reference in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt at expression on line 19, column 1.
    object(C)(1) {
      ["f"]=>
      string(4) "kuku"
    }
    
    Warning: A string item used as a reference in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt at expression on line 25, column 1.
    string(5) "hello"
    
    Warning: A string item used as a reference in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt at expression on line 31, column 1.
    string(5) "hello"
    Compiler/continue_in_global_code.php: SUCCEEDED
    Compiler/deep_copy.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array(1) {
      [0]=>
      &array(1) {
        [0]=>
        &array(1) {
          [0]=>
          *RECURSION*
        }
      }
    }
    array(1) {
      [0]=>
      &array(1) {
        [0]=>
        &array(1) {
          [0]=>
          *RECURSION*
        }
      }
    }
    array(2) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) {
          [0]=>
          *RECURSION*
          [1]=>
          int(1)
        }
        [1]=>
        int(1)
      }
      [1]=>
      int(1)
    }
    array(1) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) {
          [0]=>
          *RECURSION*
          [1]=>
          int(1)
        }
        [1]=>
        int(1)
      }
    }
    array(1) {
      [0]=>
      &array(1) [recursion]
    }
    array(1) {
      [0]=>
      &array(1) {
        [0]=>
        &array(1) [recursion]
      }
    }
    array(2) {
      [0]=>
      &array(2) [recursion]
      [1]=>
      int(1)
    }
    array(1) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) [recursion]
        [1]=>
        int(1)
      }
    }
    Compiler/deep_copy_refbox.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Strict Standards: Only variables should be passed by reference in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt on line 42
    array
    {
      0 => integer(1)
    }
    
    Strict Standards: Only variables should be passed by reference in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt on line 45
    array
    {
      0 => integer(1)
    }
    
    Strict Standards: Only variables should be passed by reference in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt on line 49
    array
    {
      0 => integer(1)
    }
    
    Strict Standards: Only variables should be passed by reference in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt on line 52
    array
    {
      0 => integer(1)
    }
    array
    {
      0 => integer(1)
      1 => integer(1)
    }
    array
    {
      0 => integer(1)
      1 => integer(1)
    }
    array
    {
      0 => integer(1)
      1 => integer(1)
    }
    array
    {
      0 => integer(1)
      1 => integer(1)
    }
    Compiler/expr_init.php: SUCCEEDED
    Compiler/foreach1.php: SUCCEEDED
    Compiler/foreach_arrays.php: SUCCEEDED
    Compiler/for_loop.php: SUCCEEDED
    Compiler/function_002.php: SUCCEEDED
    Compiler/function_003.php: SUCCEEDED
    Compiler/function_004.php: SUCCEEDED
    Compiler/function_call.php: SUCCEEDED
    Compiler/func_get_args.php: SUCCEEDED
    Compiler/if_statement.php: SUCCEEDED
    Compiler/indirect_001.php: SUCCEEDED
    Compiler/indirect_002.php: SUCCEEDED
    Compiler/indirect_003.php: SUCCEEDED
    Compiler/indirect_004.php: SUCCEEDED
    Compiler/indirect_005.php: SUCCEEDED
    Compiler/indirect_007.php: SUCCEEDED
    Compiler/indirect_global.php: SUCCEEDED
    Compiler/inheritance.php: SUCCEEDED
    Compiler/inheritance2.php: SUCCEEDED
    Compiler/isset_unset_001.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Testing x in global code:  <br>
    1 <br>
     <br>
    Testing x (object) in optimized function:  <br>
    1 <br>
     <br>
    Testing x (PhpReference) in optimized function:  <br>
    1 <br>
     <br>
    
    Notice: Undefined variable: y in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt on line 29
    Testing $$x (created at runtime) in optimized function:  <br>
    1 <br>
    Testing x in global code:  <br>
    1 <br>
     <br>
    Testing x (object) in optimized function:  <br>
    1 <br>
     <br>
    Testing x (PhpReference) in optimized function:  <br>
    1 <br>
     <br>
    Testing $$x (created at runtime) in optimized function:  <br>
    1 <br>
    Compiler/list%20%2326681.php: SUCCEEDED
    Compiler/null_hints.php: SUCCEEDED
    Compiler/pure_create_function.php: SUCCEEDED
    Compiler/pure_function_exists.php: SUCCEEDED
    Compiler/pure_math_str.php: SUCCEEDED
    Compiler/static_call.php: SUCCEEDED
    Compiler/switch.php: SUCCEEDED
    Compiler/ternary_ex.php: SUCCEEDED
    Compiler/this%20call.php: SUCCEEDED
    Compiler/typehint_check.php: SUCCEEDED
    Compiler/__call.php: SUCCEEDED
    Compiler/Inclusions/include2.php: SUCCEEDED
    Compiler/Inclusions/include3.php: SUCCEEDED
    Compiler/Inclusions/include6.php: SUCCEEDED
    Compiler/Inclusions/include_test.php: SUCCEEDED
    Compiler/Inclusions/script.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t01.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t02.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t03.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t04.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t05.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t08.php: SUCCEEDED
    Compiler/PseudoConst/parent.php: SUCCEEDED
    Compiler/PseudoConst/parent2.php: SUCCEEDED
    Compiler/PseudoConst/self.php: SUCCEEDED
    Compiler/PseudoConst/t01.php: SUCCEEDED
    Compiler/PseudoConst/t02.php: SUCCEEDED
    Compiler/PseudoConst/t03.php: SUCCEEDED
    Compiler/PseudoConst/t04.php: SUCCEEDED
    Compiler/PseudoConst/t05.php: SUCCEEDED
    Compiler/PseudoConst/t06.php: SUCCEEDED
    Compiler/PseudoConst/t07.php: SUCCEEDED
    Compiler/PseudoConst/t08.php: SUCCEEDED
    Compiler/PseudoConst/t09.php: SUCCEEDED
    Compiler/PseudoConst/t10.php: SUCCEEDED
    Compiler/PseudoConst/t11.php: SUCCEEDED
    Compiler/PseudoConst/_class_.php: SUCCEEDED
    Compiler/PseudoConst/_dir_.php: SUCCEEDED
    Compiler/PseudoConst/_function_.php: SUCCEEDED
    Compiler/References/array_argument.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(2)
        [1]=>
        int(3)
      }
    }
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    Compiler/References/array_local.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(2)
        [1]=>
        int(3)
      }
    }
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    Compiler/References/array_ret_argument.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(2)
        [1]=>
        int(3)
      }
    }
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    Compiler/References/array_ret_argument2.php: SUCCEEDED
    Compiler/References/deepcopy.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <br/><br/>globalobjects: array(2) {
      [0]=>
      int(1)
      [1]=>
      int(7)
    }
    <br/><br/>globalobjects: array(2) {
      [0]=>
      int(1)
      [1]=>
      &int(7)
    }
    Compiler/References/explicitclear.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Construyendo Y
    call foo12Destruyendo Y
    3object(X)#1 (2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      int(54)
    }
    array(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      string(10) "Init Value"
    }
    x: object(X)#1 (2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      int(1004)
    }
    <br/>checkpoint array(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      int(54)
    }
    Construyendo Y
    call foo123object(X)(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      &int(54)
    }
    array(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      &int(54)
    }
    x: object(X)(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      &int(1004)
    }
    <br/>checkpoint array(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      &int(1004)
    }
    Destruyendo Y
    Compiler/References/field_argument.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: int(7)
    <br/><br/>checkpoint array(1) {
      ["objects"]=>
      int(8)
    }
    x: int(7)
    <br/><br/>checkpoint array(1) {
      ["objects"]=>
      &int(7)
    }
    Compiler/References/field_local.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: object(X)#1 (1) {
      ["objects"]=>
      int(25)
    }
    <br/>checkpoint array(1) {
      ["objects"]=>
      int(7)
    }
    x: object(X)(1) {
      ["objects"]=>
      &int(25)
    }
    <br/>checkpoint array(1) {
      ["objects"]=>
      &int(25)
    }
    Compiler/References/ref_arrayitem.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(2)
        [1]=>
        int(3)
      }
    }
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    Compiler/References/ref_reasign.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    object(X)#1 (2) {
      ["objects"]=>
      int(54)
      ["objects2"]=>
      &int(222)
    }
    array(2) {
      ["objects"]=>
      int(7)
      ["objects2"]=>
      &int(222)
    }
    x: object(X)#1 (2) {
      ["objects"]=>
      int(1004)
      ["objects2"]=>
      int(777)
    }
    <br/>checkpoint array(2) {
      ["objects"]=>
      int(54)
      ["objects2"]=>
      int(222)
    }
    object(X)(2) {
      ["objects"]=>
      &int(54)
      ["objects2"]=>
      &int(222)
    }
    array(2) {
      ["objects"]=>
      &int(54)
      ["objects2"]=>
      &int(222)
    }
    x: object(X)(2) {
      ["objects"]=>
      &int(1004)
      ["objects2"]=>
      &int(777)
    }
    <br/>checkpoint array(2) {
      ["objects"]=>
      &int(1004)
      ["objects2"]=>
      &int(777)
    }
    Compiler/Unreachable/t13.php: SUCCEEDED
    Compiler/Unset/calluserfunc.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Warning: call_user_func() expects parameter 1 to be a valid callback, function 'unset' not found or invalid function name in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\Unset\__input.txt on line 3
    int(10)
    Error: call_user_func(): Call to undefined function: 'unset' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\Unset\__input.txt at expression on line 3, column 1.
    Compiler/Unset/issetref2.php: SUCCEEDED
    Compiler/Unset/unsetglobal.php: SUCCEEDED
    Compiler/Unset/unsetglobal2.php: SUCCEEDED
    Compiler/Unset/unsetindirect.php: SUCCEEDED
    Compiler/Unset/unsetproblem.php: SUCCEEDED
    Compiler/Unset/unsetref.php: SUCCEEDED
    Compiler/Unset/unsetref2.php: SUCCEEDED
    Compiler/Unset/unsetref3.php: SUCCEEDED
    Compiler/Unset/__unset.php: SUCCEEDED
    DateTime/strftime.php: SUCCEEDED
    DateTime/strtotime1.php: SUCCEEDED
    DateTime/strtotime2.php: SUCCEEDED
    DateTime/strtotime3.php: SUCCEEDED
    DateTime/strtotime4.php: SUCCEEDED
    DateTime/strtotime5.php: SUCCEEDED
    DateTime/time.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    -189388800:-189475200 - 86400
    1964-01-01T00:00:00+0000
    1963-12-31T00:00:00+0000
    1964-06-06
    1963-06-06
    1964-01-06
    1133305200
    -189388800:-189475200 - 86400
    1964-01-01T00:00:00+0000
    1963-12-31T00:00:00+0000
    1964-06-06
    1963-06-06
    1964-01-06
    DateTime/timezones1.php: SUCCEEDED
    DLR/classContext.php: SUCCEEDED
    DLR/classContext1.php: SUCCEEDED
    DLR/classContext2.php: SUCCEEDED
    DLR/restrictions%20generics.php: SUCCEEDED
    DLR/restrictions.php: SUCCEEDED
    DLR/targets.php: SUCCEEDED
    FileSystem/basename.php: SUCCEEDED
    FileSystem/basename2.php: SUCCEEDED
    FileSystem/chdir.php: SUCCEEDED
    FileSystem/csv.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    --- write ---
    72
    24
    44
    2
    6
    
    --- read ---
    "hello\n
    world";"aaa""bbb""ccc";"blah blah;";none;"tab\ttab";"space space"\n
    hh'ee;"ss\nsadasdasd s"\n
    """""""""""""""""""""";"""";;"""""";"xxx"""\n
    x\n
    "x\y"\n
    --- write ---
    72
    24
    44
    2
    6
    
    --- read ---
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    FileSystem/date.php: SUCCEEDED
    FileSystem/date2.php: SUCCEEDED
    FileSystem/date3.php: SUCCEEDED
    FileSystem/date_unix.php: SUCCEEDED
    FileSystem/dirname.php: SUCCEEDED
    FileSystem/dirname2.php: SUCCEEDED
    FileSystem/disk_free_space.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    731 GB
    Drive C: 38 GB
    Drive D: 731 GB
    Drive E: 
    Warning: disk_free_space(): The system cannot find the path specified.
     in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 14
    false
    Drive F: 
    Warning: disk_free_space(): The device is not ready.
     in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 14
    false
    731 GB
    Drive C: 38 GB
    Drive D: 731 GB
    Drive E: false
    Drive F: false
    FileSystem/disk_total_space.php: SUCCEEDED
    FileSystem/fgets.php: SUCCEEDED
    FileSystem/file.php: SUCCEEDED
    FileSystem/filesize.php: SUCCEEDED
    FileSystem/file_exists.php: SUCCEEDED
    FileSystem/file_get_contents.php: SUCCEEDED
    FileSystem/fpassthru.php: SUCCEEDED
    FileSystem/fread.php: SUCCEEDED
    FileSystem/fread1.php: SUCCEEDED
    FileSystem/fread2.php: SUCCEEDED
    FileSystem/fseek.php: SUCCEEDED
    FileSystem/fsockopen.php: SUCCEEDED
    FileSystem/ftell.php: SUCCEEDED
    FileSystem/is_dir.php: SUCCEEDED
    FileSystem/is_executable.php: SUCCEEDED
    FileSystem/pathinfo.php: SUCCEEDED
    FileSystem/popen.php: SUCCEEDED
    FileSystem/readdir.php: SUCCEEDED
    FileSystem/readfile.php: SUCCEEDED
    FileSystem/readline.php: SUCCEEDED
    FileSystem/realpath.php: SUCCEEDED
    FileSystem/scandir.php: SUCCEEDED
    FileSystem/stat.php: SUCCEEDED
    FileSystem/stream_context_set_option.php: SUCCEEDED
    FileSystem/stream_copy_to_stream.php: SUCCEEDED
    FileSystem/stream_copy_to_stream2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <p>Read <b>rb</b>, Write <b>wb</b>
    
    
    COPIED: <b>28802</b>
    <p>Read <b>rb</b>, Write <b>wt</b>
    
    
    COPIED: <b>28784</b>
    <p>Read <b>rb</b>, Write <b>wb</b>
    
    
    COPIED: <b>28820</b>
    <p>Read <b>rb</b>, Write <b>wt</b>
    
    
    COPIED: <b>28784</b>
    FileSystem/testinc.php: SUCCEEDED
    FileSystem/touch.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Warning: touch(): Utime failed: Bad file descriptor in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 8
    Sorry Could Not change modification time of touch.txt
    Warning: touch(): Utime failed: Bad file descriptor in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 14
    
    Warning: touch(): Utime failed: Bad file descriptor in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 16
    
    Warning: touch(): Utime failed: Bad file descriptor in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 17
    <pre>[ARRAY
      [INT (0)] => [STRING: "May 10, 2011; [00:50:21] (00h) ctime test.txt (1304981421)"]
      [INT (1)] => [STRING: "February 19, 2011; [22:06:05] (22h) mtime test.txt (1298149565)"]
      [INT (2)] => [STRING: "May 10, 2011; [00:50:21] (00h) ctime touch.txt (1304981421)"]
      [INT (3)] => [STRING: "February 19, 2011; [22:06:05] (22h) mtime touch.txt (1298149565)"]
      [INT (4)] => [STRING: "May 10, 2011; [00:50:21] (00h) atime touch.txt (1304981421)"]
      [INT (5)] => [STRING: "February 19, 2011; [22:06:05] (22h) mtime summer.txt (1298149565)"]
      [INT (6)] => [STRING: "February 19, 2011; [22:06:05] (22h) mtime winter.txt (1298149565)"]
    ]</pre>
    Warning: touch(): Unable to access (D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\touch.txt): Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 8, column 5.
    Sorry Could Not change modification time of touch.txt
    Warning: touch(): Unable to access (D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\touch.txt): Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 14, column 1.
    
    Warning: touch(): Unable to access (D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\winter.txt): Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 16, column 1.
    
    Warning: touch(): Unable to access (D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\summer.txt): Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 17, column 1.
    <pre>[ARRAY
      [INT (0)] => [STRING: "May 10, 2011; [00:50:21] (00h) ctime test.txt (1304981421)"]
      [INT (1)] => [STRING: "February 19, 2011; [23:06:05] (23h) mtime test.txt (1298153165)"]
      [INT (2)] => [STRING: "May 10, 2011; [00:50:21] (00h) ctime touch.txt (1304981421)"]
      [INT (3)] => [STRING: "February 19, 2011; [23:06:05] (23h) mtime touch.txt (1298153165)"]
      [INT (4)] => [STRING: "May 10, 2011; [00:50:21] (00h) atime touch.txt (1304981421)"]
      [INT (5)] => [STRING: "February 19, 2011; [23:06:05] (23h) mtime summer.txt (1298153165)"]
      [INT (6)] => [STRING: "February 19, 2011; [23:06:05] (23h) mtime winter.txt (1298153165)"]
    ]</pre>
    FileSystem/tar/tar_test.php: SUCCEEDED
    FileSystem/zip/zip.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    correct
    Error: Call to undefined function: 'zip_open' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\zip\__input.txt at expression on line 3, column 1.
    Math/abs.php: SUCCEEDED
    Math/atan2.php: SUCCEEDED
    Math/base_convert.php: SUCCEEDED
    Math/bindec.php: SUCCEEDED
    Math/ceil.php: SUCCEEDED
    Math/cos.php: SUCCEEDED
    Math/decbin.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <pre>
    [double: 2294967295]
    10001000110010100110101111111111
    [double: 4294967296]
    0
    [double: 8589934590]
    11111111111111111111111111111110
    [double: 8589934590]
    11111111111111111111111111111110
    [double: 8589934591]
    11111111111111111111111111111111
    [Int: 1000.000.000.000]
    11010100101001010001000000000000
    <hr>(-1, -5435, 2.14, 0, 26)
    11111111111111111111111111111111
    11111111111111111110101011000101
    10
    0
    11010 
    </pre>
    <pre>
    [???: 2294967295]
    10001000110010100110101111111111
    [???: 4294967296]
    0
    [???: 8589934590]
    11111111111111111111111111111110
    [???: 8589934590]
    11111111111111111111111111111110
    [???: 8589934591]
    11111111111111111111111111111111
    [Int: 1000.000.000.000]
    11010100101001010001000000000000
    <hr>(-1, -5435, 2.14, 0, 26)
    11111111111111111111111111111111
    11111111111111111110101011000101
    10
    0
    11010 
    </pre>
    Math/dechex.php: SUCCEEDED
    Math/decoct.php: SUCCEEDED
    Math/deg2rad.php: SUCCEEDED
    Math/exp.php: SUCCEEDED
    Math/floor.php: SUCCEEDED
    Math/fmod.php: SUCCEEDED
    Math/hexdec.php: SUCCEEDED
    Math/max.php: SUCCEEDED
    Math/min.php: SUCCEEDED
    Math/modulo_warn.php: SUCCEEDED
    Math/octdec.php: SUCCEEDED
    Math/pow.php: SUCCEEDED
    Math/rad2deg.php: SUCCEEDED
    Math/round.php: SUCCEEDED
    Math/sin.php: SUCCEEDED
    Math/sqrt.php: SUCCEEDED
    Math/tan.php: SUCCEEDED
    Math/uniqid.php: SUCCEEDED
    Misc/calendar_extension.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0
    0
    2375840
    0
    14
    32
    2
    There are 31 days in August 2003
    There are 28 days in February 2003
    There are 29 days in February 2004
    There are 31 days in December 2034
    1748326
    1748324
    374867
    0
    322f32322f35373633
    ebe120e7f9e5ef20e4faf9f1e2
    ebe120e7f9e5ef20e427faf9f1e2
    ebe120e7f9e5ef20e420e0ecf4e9ed20faf9f1e2
    ebe120e7f9e5ef20e42720e0ecf4e9ed20faf9f1e2
    eb22e120e7f9e5ef20e4faf9f122e2
    e12720e7f9e5ef20e4faf9f122e2
    e12720e7f9e5ef20e427faf9f122e2
    e12720e7f9e5ef20e420e0ecf4e9ed20faf9f122e2
    e12720e7f9e5ef20e42720e0ecf4e9ed20faf9f122e2
    Error: Call to undefined function: 'frenchtojd' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt at expression on line 2, column 1.
    Misc/dir_read.php: SUCCEEDED
    Misc/fgetcsv%20%2327492.php: SUCCEEDED
    Misc/hash%20functions%20%2326667.php: SUCCEEDED
    Misc/ini_parse.php: SUCCEEDED
    Misc/json%20%2327838.php: SUCCEEDED
    Misc/lexer.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    T_INLINE_HTML
    311 '\r\n'
    T_OPEN_TAG
    368 '&lt;?'
    T_WHITESPACE
    371 ' \r\n\r\n'
    T_FINAL
    345 'final'
    T_WHITESPACE
    371 ' '
    T_CLASS
    353 'class'
    T_WHITESPACE
    371 ' '
    T_STRING
    307 'A'
    T_WHITESPACE
    371 ' \r\n'
        '{'
    T_WHITESPACE
    371 ' \r\n  '
    T_FUNCTION
    334 'function'
    T_WHITESPACE
    371 ' '
    T_STRING
    307 '__get'
        '('
    T_VARIABLE
    309 '$x'
        ')'
    T_WHITESPACE
    371 ' \r\n  '
        '{'
    T_WHITESPACE
    371 ' \r\n    '
    T_VARIABLE
    309 '$x'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_START_HEREDOC
    372 '&lt;&lt;&lt;EOOOOOOOOOOOOOOT\r\n'
    T_ENCAPSED_AND_WHITESPACE
    314 '         &lt;&lt;&lt;hello\r\nEOOOOOOOOOOOOOOt;\r\nEOOOOOOOOOOOOOT;\r\n'
    T_END_HEREDOC
    373 'EOOOOOOOOOOOOOOT'
        ';'
    T_WHITESPACE
    371 '\r\n\r\n    '
        '$'
    T_VARIABLE
    309 '$y'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_ARRAY
    360 'array'
    T_WHITESPACE
    371 ' '
        '('
    T_LNUMBER
    305 '1'
        ','
    T_DNUMBER
    306 '100000000000000'
        ','
    T_DNUMBER
    306 '999999999999999999999999999999999'
        ','
    T_STRING
    307 'true'
        ','
    T_STRING
    307 'false'
        ')'
        ';'
    T_WHITESPACE
    371 '\r\n    '
        '$'
        '{'
        '&quot;'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
    T_DOLLAR_OPEN_CURLY_BRACES
    374 '${'
        '$'
        '{'
    T_CONSTANT_ENCAPSED_STRING
    315 '&quot;xxx&quot;'
        '}'
        '}'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
        '&quot;'
        '}'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_LNUMBER
    305 '1'
        ';'
    T_WHITESPACE
    371 '\r\n    '
        '$'
        '{'
        '&quot;'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
    T_DOLLAR_OPEN_CURLY_BRACES
    374 '${'
        '$'
        '{'
        '&quot;'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
    T_VARIABLE
    309 '$x'
    T_ENCAPSED_AND_WHITESPACE
    314 '-&gt;$$'
    T_VARIABLE
    309 '$x0xx'
        '&quot;'
        '}'
        '}'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
        '&quot;'
        '}'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_LNUMBER
    305 '1'
        ';'
    T_WHITESPACE
    371 '\r\n  '
        '}'
    T_WHITESPACE
    371 ' \r\n'
        '}'
    T_WHITESPACE
    371 '\r\n\r\n'
    T_CLOSE_TAG
    370 '?&gt;'
    '
    '
        '&lt;?'
        ' 
    
    '
        'final'
        ' '
        'class'
        ' '
        'A'
        ' 
    '
        '{'
        ' 
      '
        'function'
        ' '
    259
    259 '
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt at expression on line 10, column 7.
    '
        '('
        '$x'
        ')'
        ' 
      '
        '{'
        ' 
        '
        '$x'
        ' '
        '='
        ' '
        '&lt;&lt;&lt;EOOOOOOOOOOOOOOT
    '
        '         &lt;&lt;&lt;'
        'hello'
        '
    '
        'EOOOOOOOOOOOOOOt;
    '
        'EOOOOOOOOOOOOOT;
    '
        'EOOOOOOOOOOOOOOT'
        ';'
        '
    
        '
        '$'
        '$y'
        ' '
        '='
        ' '
        'array'
        ' '
        '('
        '1'
        ','
        '100000000000000'
        ','
        '999999999999999999999999999999999'
        ','
    256
    256 '
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt at expression on line 10, column 7.
    '
        ','
    257
    257 '
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt at expression on line 10, column 7.
    '
        ')'
        ';'
        '
        '
        '$'
        '{'
        '&quot;'
        'x'
        '${'
        '$'
        '{'
    -29
    -29 '
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt at expression on line 10, column 7.
    '
        '}'
        '}'
        'x'
        '&quot;'
        '}'
        ' '
        '='
        ' '
        '1'
        ';'
        '
        '
        '$'
        '{'
        '&quot;'
        'x'
        '${'
        '$'
        '{'
        '&quot;'
        'x'
        '$x'
        '-&gt;'
        '$'
        '$'
        '$x0xx'
        '&quot;'
        '}'
        '}'
        'x'
        '&quot;'
        '}'
        ' '
        '='
        ' '
        '1'
        ';'
        '
      '
        '}'
        ' 
    '
        '}'
        '
    
    '
        '?&gt;'
    Misc/locale.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string(1) "C"
    double(1.54)
    double(Infinity)
    654564.145400
    Sat Saturday Apr April
    --------------
    string(19) "Danish_Denmark.1252"
    double(1.54)
    double(Infinity)
    654564,145400
    lo lordag apr april
    --------------
    string(25) "Czech_Czech Republic.1250"
    double(1.54)
    double(Infinity)
    654564,145400
    so sobota IV duben
    --------------
    string(1) "C"
    float(1.54)
    float(Infinity)
    654564.145400
    Sat Saturday Apr April
    --------------
    string(19) "Danish_Denmark.1252"
    float(1.54)
    float(Infinity)
    654564,145400
    lo lordag apr april
    --------------
    string(25) "Czech_Czech Republic.1250"
    float(1.54)
    float(Infinity)
    654564,145400
    so sobota 4 duben
    --------------
    Misc/output2.php: SUCCEEDED
    Misc/parse_url%20%2327377.php: SUCCEEDED
    Misc/parse_url_at_bug.php: SUCCEEDED
    Misc/stack_trace.php: FAILED
    Script hung upNo errorsSuccess
    Expected test outputReal script output
    Unhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---> System.IndexOutOfRangeException: Index was outside the bounds of the array.
       at PHP.Core.PhpStackFrame..ctor(ScriptContext context, StackFrame frame, FrameKinds kind)
       at PHP.Core.PhpStackTrace..ctor(ScriptContext context, StackTrace clrTrace)
       at PHP.Core.PhpStackTrace..ctor(ScriptContext context, Int32 skipFrames)
       at PHP.Library.Errors.Backtrace()
       at <stack_trace.inc>.<Script>.j(ScriptContext <context>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\stack_trace.inc:line 11
       at <stack_trace.inc>.<Script>.j(Object instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <stack_trace.inc>.<Script>.i(ScriptContext <context>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\stack_trace.inc:line 6
       at <stack_trace.inc>.<Script>.i(Object instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <^0>.<Global>.<?0>.h(ScriptContext <context>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt:line 14
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack, DTypeDesc caller)
       at PHP.Core.PhpCallback.InvokeInternal(Object[] args)
       at PHP.Core.PhpCallback.Invoke(Object[] args)
       at PHP.Library.PhpArrays.Map(DTypeDesc caller, PhpCallback map, PhpArray[] arrays)
       at <__input.txt>.<Script>.<Lambda>(ScriptContext <context>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt:line 4
       at <__input.txt>.<Script>.<Lambda>(Object instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <__input.txt>.<Script>.f(ScriptContext <context>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt:line 6
       at <__input.txt>.<Script>.f(Object instance, PhpStack stack)
       at <__input.txt>.<Script>.<Main>(ScriptContext <context>, Dictionary`2 <locals>, DObject , DTypeDesc , Boolean ) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt:line 18
       at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)
       at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)
       --- End of inner exception stack trace ---
       at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)
       at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)
       at <Global>.Run(String[] )
    
    Misc/str_getcsv%20%2326691.php: SUCCEEDED
    Misc/tokens.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    T_REQUIRE_ONCE = 258,
    T_REQUIRE = 259,
    T_EVAL = 260,
    T_INCLUDE_ONCE = 261,
    T_INCLUDE = 262,
    T_LOGICAL_OR = 263,
    T_LOGICAL_XOR = 264,
    T_LOGICAL_AND = 265,
    T_PRINT = 266,
    T_SR_EQUAL = 267,
    T_SL_EQUAL = 268,
    T_XOR_EQUAL = 269,
    T_OR_EQUAL = 270,
    T_AND_EQUAL = 271,
    T_MOD_EQUAL = 272,
    T_CONCAT_EQUAL = 273,
    T_DIV_EQUAL = 274,
    T_MUL_EQUAL = 275,
    T_MINUS_EQUAL = 276,
    T_PLUS_EQUAL = 277,
    T_BOOLEAN_OR = 278,
    T_BOOLEAN_AND = 279,
    T_IS_NOT_IDENTICAL = 280,
    T_IS_IDENTICAL = 281,
    T_IS_NOT_EQUAL = 282,
    T_IS_EQUAL = 283,
    T_IS_GREATER_OR_EQUAL = 284,
    T_IS_SMALLER_OR_EQUAL = 285,
    T_SR = 286,
    T_SL = 287,
    T_INSTANCEOF = 288,
    T_UNSET_CAST = 289,
    T_BOOL_CAST = 290,
    T_OBJECT_CAST = 291,
    T_ARRAY_CAST = 292,
    T_STRING_CAST = 293,
    T_DOUBLE_CAST = 294,
    T_INT_CAST = 295,
    T_DEC = 296,
    T_INC = 297,
    T_CLONE = 298,
    T_NEW = 299,
    T_EXIT = 300,
    T_IF = 301,
    T_ELSEIF = 302,
    T_ELSE = 303,
    T_ENDIF = 304,
    T_LNUMBER = 305,
    T_DNUMBER = 306,
    T_STRING = 307,
    T_STRING_VARNAME = 308,
    T_VARIABLE = 309,
    T_NUM_STRING = 310,
    T_INLINE_HTML = 311,
    T_CHARACTER = 312,
    T_BAD_CHARACTER = 313,
    T_ENCAPSED_AND_WHITESPACE = 314,
    T_CONSTANT_ENCAPSED_STRING = 315,
    T_ECHO = 316,
    T_DO = 317,
    T_WHILE = 318,
    T_ENDWHILE = 319,
    T_FOR = 320,
    T_ENDFOR = 321,
    T_FOREACH = 322,
    T_ENDFOREACH = 323,
    T_DECLARE = 324,
    T_ENDDECLARE = 325,
    T_AS = 326,
    T_SWITCH = 327,
    T_ENDSWITCH = 328,
    T_CASE = 329,
    T_DEFAULT = 330,
    T_BREAK = 331,
    T_CONTINUE = 332,
    T_GOTO = 333,
    T_FUNCTION = 334,
    T_CONST = 335,
    T_RETURN = 336,
    T_TRY = 337,
    T_CATCH = 338,
    T_THROW = 339,
    T_USE = 340,
    T_GLOBAL = 341,
    T_PUBLIC = 342,
    T_PROTECTED = 343,
    T_PRIVATE = 344,
    T_FINAL = 345,
    T_ABSTRACT = 346,
    T_STATIC = 347,
    T_VAR = 348,
    T_UNSET = 349,
    T_ISSET = 350,
    T_EMPTY = 351,
    T_HALT_COMPILER = 352,
    T_CLASS = 353,
    T_INTERFACE = 354,
    T_EXTENDS = 355,
    T_IMPLEMENTS = 356,
    T_OBJECT_OPERATOR = 357,
    T_DOUBLE_ARROW = 358,
    T_LIST = 359,
    T_ARRAY = 360,
    T_CLASS_C = 361,
    T_METHOD_C = 362,
    T_FUNC_C = 363,
    T_LINE = 364,
    T_FILE = 365,
    T_COMMENT = 366,
    T_DOC_COMMENT = 367,
    T_OPEN_TAG = 368,
    T_OPEN_TAG_WITH_ECHO = 369,
    T_CLOSE_TAG = 370,
    T_WHITESPACE = 371,
    T_START_HEREDOC = 372,
    T_END_HEREDOC = 373,
    T_DOLLAR_OPEN_CURLY_BRACES = 374,
    T_CURLY_OPEN = 375,
    T_PAAMAYIM_NEKUDOTAYIM = 376,
    T_DOUBLE_COLON = 376,
    T_NAMESPACE = 377,
    T_NS_C = 378,
    T_DIR = 379,
    T_NS_SEPARATOR = 380,
    T_INCLUDE = 129,
    T_INCLUDE_ONCE = 130,
    T_EVAL = 131,
    T_REQUIRE = 132,
    T_REQUIRE_ONCE = 133,
    T_LOGICAL_OR = 136,
    T_LOGICAL_XOR = 137,
    T_LOGICAL_AND = 138,
    T_PRINT = 139,
    T_PLUS_EQUAL = 140,
    T_MINUS_EQUAL = 141,
    T_MUL_EQUAL = 142,
    T_DIV_EQUAL = 143,
    T_CONCAT_EQUAL = 144,
    T_MOD_EQUAL = 145,
    T_AND_EQUAL = 146,
    T_OR_EQUAL = 147,
    T_XOR_EQUAL = 148,
    T_SL_EQUAL = 149,
    T_SR_EQUAL = 150,
    T_BOOLEAN_OR = 151,
    T_BOOLEAN_AND = 152,
    T_IS_EQUAL = 153,
    T_IS_NOT_EQUAL = 154,
    T_IS_IDENTICAL = 155,
    T_IS_NOT_IDENTICAL = 156,
    T_IS_SMALLER_OR_EQUAL = 157,
    T_IS_GREATER_OR_EQUAL = 158,
    T_SL = 159,
    T_SR = 160,
    T_INC = 161,
    T_DEC = 162,
    T_NEW = 164,
    T_INSTANCEOF = 165,
    T_CLONE = 167,
    T_LNUMBER = 168,
    T_DNUMBER = 170,
    T_STRING = 171,
    T_STRING_VARNAME = 172,
    T_VARIABLE = 173,
    T_NUM_STRING = 174,
    T_INLINE_HTML = 175,
    T_CHARACTER = 176,
    T_BAD_CHARACTER = 177,
    T_ENCAPSED_AND_WHITESPACE = 178,
    T_CONSTANT_ENCAPSED_STRING = 179,
    T_EXIT = 180,
    T_IF = 181,
    T_ELSEIF = 182,
    T_ELSE = 183,
    T_ENDIF = 184,
    T_ECHO = 185,
    T_DO = 186,
    T_WHILE = 187,
    T_ENDWHILE = 188,
    T_FOR = 189,
    T_ENDFOR = 190,
    T_FOREACH = 191,
    T_ENDFOREACH = 192,
    T_AS = 193,
    T_SWITCH = 194,
    T_ENDSWITCH = 195,
    T_CASE = 196,
    T_DEFAULT = 197,
    T_BREAK = 198,
    T_CONTINUE = 199,
    T_FUNCTION = 200,
    T_CONST = 201,
    T_RETURN = 202,
    T_GLOBAL = 203,
    T_STATIC = 204,
    T_VAR = 205,
    T_UNSET = 206,
    T_ISSET = 207,
    T_EMPTY = 208,
    T_CLASS = 209,
    T_EXTENDS = 210,
    T_OBJECT_OPERATOR = 211,
    T_DOUBLE_ARROW = 212,
    T_LIST = 213,
    T_ARRAY = 214,
    T_CLASS_C = 215,
    T_METHOD_C = 216,
    T_FUNC_C = 217,
    T_LINE = 218,
    T_FILE = 219,
    T_DIR = 220,
    T_COMMENT = 221,
    T_DOC_COMMENT = 222,
    T_OPEN_TAG = 227,
    T_OPEN_TAG_WITH_ECHO = 228,
    T_CLOSE_TAG = 229,
    T_WHITESPACE = 230,
    T_START_HEREDOC = 231,
    T_END_HEREDOC = 232,
    T_DOLLAR_OPEN_CURLY_BRACES = 233,
    T_CURLY_OPEN = 234,
    T_DOUBLE_COLON = 235,
    T_PAAMAYIM_NEKUDOTAYIM = 235,
    T_GOTO = 237,
    T_TRY = 238,
    T_CATCH = 239,
    T_THROW = 240,
    T_INTERFACE = 241,
    T_IMPLEMENTS = 242,
    T_ABSTRACT = 243,
    T_FINAL = 244,
    T_PRIVATE = 245,
    T_PROTECTED = 246,
    T_PUBLIC = 247,
    T_BOOL_CAST = 287,
    T_INT_CAST = 290,
    T_DOUBLE_CAST = 296,
    T_STRING_CAST = 299,
    T_ARRAY_CAST = 302,
    T_OBJECT_CAST = 303,
    T_UNSET_CAST = 304,
    T_HALT_COMPILER = 351,
    Misc/user_error_handlers.php: SUCCEEDED
    Objects/accessing%20property%20line%20number%20%2326052.php: SUCCEEDED
    Objects/conditional1.php: SUCCEEDED
    Objects/conditional2.php: SUCCEEDED
    Objects/conditional_base_class.php: SUCCEEDED
    Objects/constant_test.php: SUCCEEDED
    Objects/evaled_parent.php: SUCCEEDED
    Objects/getter_setter_bug28444.php: SUCCEEDED
    Objects/instanceof.php: SUCCEEDED
    Objects/new_via_unknown_ctor.php: SUCCEEDED
    Objects/object_creation_test.php: SUCCEEDED
    Objects/overrides%20%231285.php: SUCCEEDED
    Objects/static_field_test.php: SUCCEEDED
    Objects/static_inheritence.php: SUCCEEDED
    Objects/static_method_test.php: SUCCEEDED
    Objects/static_object_vars.php: SUCCEEDED
    Objects/sys_class_const.php: SUCCEEDED
    Objects/this2.php: SUCCEEDED
    RegEx/backreferences.php: SUCCEEDED
    RegEx/dolar_escape.php: SUCCEEDED
    RegEx/ereg.php: SUCCEEDED
    RegEx/namedbackref.php: SUCCEEDED
    RegEx/namedgroups.php: SUCCEEDED
    RegEx/preg_match_unmatched_groups.php: SUCCEEDED
    RegEx/preg_replace_eval.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ab"01300 as"00da sd"0asdsa das asd 11asd a1sd a
    ab"01300 as"00da sd"0(aasdasdkjask,$a,\,\l,a,s,d,a,s,d,k,j,a,s,${120})(ldjaklsdjalk,$l,\,\l,d,j,a,k,l,s,d,j,a,l,${120})djdsa das asd 11asd a1sd a
    ab"01300 as"00da sd"0asdsa das asd 11asd a1sd a
    ab"01300 as"00da sd"0(aasdasdkjask,$a,\,\l,a,s,d,a,s,d,k,j,,,${120})(ldjaklsdjalk,$l,\,\l,d,j,a,k,l,s,d,j,,,${120})djdsa das asd 11asd a1sd a
    RegEx/regexp-sql.php: SUCCEEDED
    RegEx/regexp_smiles.php: SUCCEEDED
    RegEx/Perl/cache.php: SUCCEEDED
    RegEx/Perl/grep1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      [3] => string(3) "1.5"
      [6] => string(5) "58.54"
    }
    Notice: preg_grep(): Array to string conversion in D:\Documents\Projects\Phalanger\Main\Testing\Tests\RegEx\Perl\__input.txt at expression on line 5, column 1.
    array(2) {
      [3]=>
      string(3) "1.5"
      [6]=>
      string(5) "58.54"
    }
    RegEx/Perl/grep2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Food  array
    (
      [0] => apple
      [1] => banana
      [2] => squid
      [3] => pear
    )
    Fruit array
    (
      [0] => apple
      [1] => banana
      [3] => pear
    )
    Food  Array
    (
        [0] => apple
        [1] => banana
        [2] => squid
        [3] => pear
    )
    Fruit Array
    (
        [0] => apple
        [1] => banana
        [3] => pear
    )
    RegEx/Perl/match1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array [empty]
    array
    (
      [0] => array
      (
        [0] => def
        [1] => 3
      )
    )
    Array
    (
    )
    Array
    (
        [0] => Array
        (
            [0] => def
            [1] => 3
        )
    
    )
    RegEx/Perl/match10.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    (
      [0] => 1231
      [1] => 1
      [2] => 23
      [3] => 1
    )
    Array
    (
        [0] => 1231
        [1] => 1
        [2] => 23
        [3] => 1
    )
    RegEx/Perl/match2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    (
      [0] => array
      (
        [0] => def
        [1] => 0
      )
    )
    Array
    (
        [0] => Array
        (
            [0] => def
            [1] => 0
        )
    
    )
    RegEx/Perl/match3.php: SUCCEEDED
    RegEx/Perl/match4.php: SUCCEEDED
    RegEx/Perl/match5.php: SUCCEEDED
    RegEx/Perl/match6.php: SUCCEEDED
    RegEx/Perl/match7.php: SUCCEEDED
    RegEx/Perl/match8.php: SUCCEEDED
    RegEx/Perl/match9.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    (
      [0] => 209.6.145.47 - - [22/Nov/2003:19:02:30 -0500] "GET /dir/doc.htm HTTP/1.0" 200 6776 "http://search.yahoo.com/search?p=key+words=UTF-8" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)"
      [1] => 209.6.145.47
      [2] => -
      [3] => -
      [4] => 22/Nov/2003:19:02:30 -0500
      [5] => GET
      [6] => /dir/doc.htm
      [7] => HTTP
      [8] => 1.0
      [9] => 200
      [10] => 6776
      [11] => "http://search.yahoo.com/search?p=key+words=UTF-8"
      [12] => "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)"
    )
    Array
    (
        [0] => 209.6.145.47 - - [22/Nov/2003:19:02:30 -0500] "GET /dir/doc.htm HTTP/1.0" 200 6776 "http://search.yahoo.com/search?p=key+words=UTF-8" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)"
        [1] => 209.6.145.47
        [2] => -
        [3] => -
        [4] => 22/Nov/2003:19:02:30 -0500
        [5] => GET
        [6] => /dir/doc.htm
        [7] => HTTP
        [8] => 1.0
        [9] => 200
        [10] => 6776
        [11] => "http://search.yahoo.com/search?p=key+words=UTF-8"
        [12] => "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)"
    )
    RegEx/Perl/match_all1.php: SUCCEEDED
    RegEx/Perl/match_all2.php: SUCCEEDED
    RegEx/Perl/match_all3.php: SUCCEEDED
    RegEx/Perl/match_all4.php: SUCCEEDED
    RegEx/Perl/match_dollar.php: SUCCEEDED
    RegEx/Perl/overflow.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string("kfkaj +j k45´┐Ż´┐Ż´┐Ż´┐Ż´┐Ż3#$%^&kjakfjkaj|kfj")
    string("kfkaj +j k45�����3#$%^&kjakfjkaj|kfj")
    RegEx/Perl/quote1.php: SUCCEEDED
    RegEx/Perl/quote2.php: SUCCEEDED
    RegEx/Perl/quote3.php: SUCCEEDED
    RegEx/Perl/replace1.php: SUCCEEDED
    RegEx/Perl/replace2.php: SUCCEEDED
    RegEx/Perl/replace3.php: SUCCEEDED
    RegEx/Perl/replace4.php: SUCCEEDED
    RegEx/Perl/replace5.php: SUCCEEDED
    RegEx/Perl/replace6.php: SUCCEEDED
    RegEx/Perl/replace7.php: SUCCEEDED
    RegEx/Perl/replace8.php: SUCCEEDED
    RegEx/Perl/replace9.php: SUCCEEDED
    RegEx/Perl/replace_callback1.php: SUCCEEDED
    RegEx/Perl/replace_callback2.php: SUCCEEDED
    RegEx/Perl/split1.php: SUCCEEDED
    RegEx/Perl/split2.php: SUCCEEDED
    RegEx/Perl/split3.php: SUCCEEDED
    RegEx/Perl/split4.php: SUCCEEDED
    RegEx/Perl/split5.php: SUCCEEDED
    RegEx/Perl/split6.php: SUCCEEDED
    RegEx/Perl/ungreedy.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    aaa
    a
    aaa
    
    a
    aa
    aaa
    aa
    aaa
    aaa
    a
    aaa
    a
    a
    aa
    aaa
    aa
    aaa
    RegEx/Perl/unsuccessful-preg_match_all.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0
    4
    1
    4
    0
    4
    1
    7
    RegEx/Perl/withoutdelimiters.php: SUCCEEDED
    SPL/ArrayAccess_offsetExists.php: SUCCEEDED
    SPL/Autoload_ctor.php: SUCCEEDED
    SPL/Autoload_extends.php: SUCCEEDED
    SPL/exceptions.php: SUCCEEDED
    Strings/addcslashes.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    \f\o\o\[ \]
    Issues a Warning:
    // echo addcslashes("zoo['.']", 'z..A');
    // output:  \zoo['\.']
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 4, column 1.
    
    Issues a Warning:
    // echo addcslashes("zoo['.']", 'z..A');
    // output:  \zoo['\.']
    Strings/addslashes.php: SUCCEEDED
    Strings/chunk_split.php: SUCCEEDED
    Strings/concat.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string(2) "ab"
    string(2) "ab"
    string(2) "ab"
    string(2) "ab"
    string(2) "ab"
    string(2) "aB"
    string(2) "Ab"
    string(2) "AB"
    string(2) "ab"
    string(2) "a1"
    string(2) "1b"
    string(2) "11"
    string(2) "ab"
    string(2) "aB"
    string(2) "Ab"
    string[binary](2) "\x41\x42"
    string(2) "ab"
    string(2) "ab"
    string(2) "ab"
    string(2) "ab"
    string(2) "ab"
    string(2) "aB"
    string(2) "Ab"
    string(2) "AB"
    string(2) "ab"
    string(2) "a1"
    string(2) "1b"
    string(2) "11"
    string(2) "ab"
    string[binary](2) "aB"
    string[binary](2) "Ab"
    string[binary](2) "AB"
    Strings/count_chars.php: SUCCEEDED
    Strings/crc32.php: SUCCEEDED
    Strings/crypt.php: SUCCEEDED
    Strings/crypt2.php: SUCCEEDED
    Strings/echo.php: SUCCEEDED
    Strings/explode.php: SUCCEEDED
    Strings/get_html_translation_table.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <hr>[&] => &amp;
    [>] => &gt;
    [<] => &lt;
    ["] => &quot;
    <hr>Hallo &amp; &lt;Frau&gt; &amp; Kr&iuml;&iquest;&frac12;mer
    <hr>[&] => &amp;
    [>] => &gt;
    [<] => &lt;
    ["] => &quot;
    <hr>Hallo &amp; &lt;Frau&gt; &amp; Kr�mer
    Strings/mb_strlen.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Call to undefined function mb_strlen() in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 4
    Error: Call to undefined function: 'mb_strlen' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 4, column 1.
    Strings/nl2br.php: SUCCEEDED
    Strings/pack.php: SUCCEEDED
    Strings/pos.php: SUCCEEDED
    Strings/runtime-quotes.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    fread = (x''y"z)
    fgets = (x''y"z)
    file[0] = (x''y"z)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    
    Warning: fopen(runtime-quotes2.txt): failed to open stream: Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 33
    
    Warning: fwrite() expects parameter 1 to be resource, boolean given in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 35
    fwrite = ()
    
    Warning: fputs() expects parameter 1 to be resource, boolean given in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 38
    fputs = ()
    
    Warning: fclose() expects parameter 1 to be resource, boolean given in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 41
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (x'y"z)
    fgets = (x'y"z)
    file[0] = (x'y"z)
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (a\'b"\\ca\)
    fgets = (a\'b"\\ca\'b"\\c)
    file[0] = (a\'b"\\ca\'b"\\c)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    e'e
    e''e
    e'e
    e'e
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    e'e
    e'e
    e'e
    e'e
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    fread = (x''y"z)
    fgets = (x''y"z)
    file[0] = (x''y"z)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    
    Warning: fopen(): Unable to access (D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\runtime-quotes2.txt): Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 33, column 3.
    
    Warning: Cannot convert boolean to resource implicitly in a call to function fwrite() in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 35, column 3.
    fwrite = (0)
    
    Warning: Cannot convert boolean to resource implicitly in a call to function fputs() in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 38, column 3.
    fputs = (0)
    
    Warning: Cannot convert boolean to resource implicitly in a call to function fclose() in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 41, column 3.
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (x'y"z)
    fgets = (x'y"z)
    file[0] = (x'y"z)
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (a\'b"\\ca\)
    fgets = (a\'b"\\ca\'b"\\c)
    file[0] = (a\'b"\\ca\'b"\\c)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    e'e
    e''e
    e'e
    e'e
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    e'e
    e'e
    e'e
    e'e
    Strings/sprintf.php: SUCCEEDED
    Strings/sprintf2.php: SUCCEEDED
    Strings/strtr.php: SUCCEEDED
    Strings/str_ireplace.php: SUCCEEDED
    Strings/str_replace.php: SUCCEEDED
    Strings/str_word_count.php: SUCCEEDED
    Strings/substr_operations.php: SUCCEEDED
    Strings/wordwrap.php: SUCCEEDED
    Variables/advanced_serialize.php: SUCCEEDED
    Variables/arguments.php: SUCCEEDED
    Variables/bitwise.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "00"
    string(2) "31"
    string(2) "31"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    0
    0
    0
    5
    0
    5
    40
    5
    45
    string(48) "000000000000000000000000000000000000000000000000"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(14) "31323331323331"
    string(2) "30"
    string(14) "31323331323331"
    string(16) "3635343635343536"
    string(2) "30"
    string(16) "3635343635343536"
    string(14) "337a5e8be43d7a"
    string(14) "00002130120201"
    string(48) "337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42"
    string(16) "347d598ce33a7e77"
    string(16) "0200243214040100"
    string(48) "367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42"
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "00"
    string(2) "31"
    string(2) "31"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    0
    -9223372036854775808
    -9223372036854775808
    -9223372036854775803
    0
    -9223372036854775803
    40
    5
    45
    string(48) "000000000000000000000000000000000000000000000000"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(14) "31323331323331"
    string(2) "30"
    string(14) "31323331323331"
    string(16) "3635343635343536"
    string(2) "30"
    string(16) "3635343635343536"
    string(14) "337a5e8be43d7a"
    string(14) "00002130120201"
    string(48) "337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42"
    string(16) "347d598ce33a7e77"
    string(16) "0200243214040100"
    string(48) "367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42"
    Variables/comparisons.php: SUCCEEDED
    Variables/constant.php: SUCCEEDED
    Variables/extract%20refs.php: SUCCEEDED
    Variables/extract.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    EXTR_PREFIX_ALL
    integer(4)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
      'prefix_non_existent' => integer(1)
    }
    <hr>EXTR_PREFIX_INVALID
    integer(5)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => integer(2)
      'non_existent' => integer(1)
      'prefix_' => integer(1)
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => 'hello'
    }
    <hr>EXTR_PREFIX_SAME
    integer(3)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'non_existent' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>EXTR_PREFIX_IF_EXISTS
    integer(3)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>
    EXTR_PREFIX_ALL
    integer(4)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
      'prefix_non_existent' => integer(1)
    }
    <hr>EXTR_PREFIX_INVALID
    integer(5)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => integer(2)
      'non_existent' => integer(1)
      'prefix_' => integer(1)
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => 'hello'
    }
    <hr>EXTR_PREFIX_SAME
    integer(4)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'non_existent' => integer(1)
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>EXTR_PREFIX_IF_EXISTS
    integer(3)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>
    Variables/func_get_args.php: SUCCEEDED
    Variables/is_number.php: SUCCEEDED
    Variables/serialize.php: SUCCEEDED
    Variables/unserialize_objects.php: SUCCEEDED
    Variables/var_dumping.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Array
    (
        [0] => 1
        [1] => 
        [2] => 1
        [3] => 1.2
        [4] => 
        [5] => asdas
        [6] => Array
            (
                [0] => 1
            )
    
        [7] => stdClass Object
            (
            )
    
        [8] => Resource id #1
    )
    array(9) {
      [0]=>
      bool(true)
      [1]=>
      bool(false)
      [2]=>
      int(1)
      [3]=>
      float(1.2)
      [4]=>
      NULL
      [5]=>
      string(5) "asdas"
      [6]=>
      array(1) {
        [0]=>
        int(1)
      }
      [7]=>
      object(stdClass)#1 (0) {
      }
      [8]=>
      resource(1) of type (stream)
    }
    array (
      0 => true,
      1 => false,
      2 => 1,
      3 => 1.2,
      4 => NULL,
      5 => 'asdas',
      6 => 
      array (
        0 => 1,
      ),
      7 => 
      stdClass::__set_state(array(
      )),
      8 => NULL,
    )
    Array
    (
        [0] => 1
        [1] => 
        [2] => 1
        [3] => 1.2
        [4] => 
        [5] => asdas
        [6] => Array
        (
            [0] => 1
        )
    
        [7] => stdClass Object
        (
        )
    
        [8] => resource id #4
    
    )
    array(9) {
      [0]=>
      bool(true)
      [1]=>
      bool(false)
      [2]=>
      int(1)
      [3]=>
      float(1.2)
      [4]=>
      NULL
      [5]=>
      string(5) "asdas"
      [6]=>
      array(1) {
        [0]=>
        int(1)
      }
      [7]=>
      object(stdClass)(0) {
      }
      [8]=>
      resource(4) of type (stream)
    }
    array
    (
      '0' => true,
      '1' => false,
      '2' => 1,
      '3' => 1.2,
      '4' => NULL,
      '5' => 'asdas',
      '6' => array
      (
        '0' => 1
      ),
      '7' => class stdClass
      {
    
      },
      '8' => NULL
    )
    Xml/025.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
      'foo' => 'foobar'
    }
    array
    {
      'html' => 'http://www.w3.org/1999/xhtml'
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
    }
    array
    {
      'html' => 'http://www.w3.org/1999/xhtml'
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'foo' => 'foobar'
      'baz' => 'foobarbaz'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
    }
    array
    {
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
      'baz' => 'foobarbaz'
      'foo' => 'foobar'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
      'baz' => 'foobarbaz'
      'foo' => 'foobar'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
    }
    array
    {
    }
    Xml/026.php: SUCCEEDED
    Xml/027.php: SUCCEEDED
    Xml/028.php: SUCCEEDED
    Xml/029.php: SUCCEEDED
    Xml/030.php: SUCCEEDED
    Xml/032.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    FALSE
    FALSE
    FALSE
    TRUE
    TRUE
    TRUE
    Xml/033.php: SUCCEEDED
    Xml/bug26384.php: SUCCEEDED
    Xml/bug28721.php: SUCCEEDED
    Xml/bug28817.php: SUCCEEDED
    Xml/bug32615.php: SUCCEEDED
    Xml/bug33853.php: SUCCEEDED
    Xml/bug34276.php: SUCCEEDED
    Xml/bug35342.php: SUCCEEDED
    Xml/bug36756.php: SUCCEEDED
    Xml/bug37277.php: SUCCEEDED
    Xml/dom002.php: SUCCEEDED
    Xml/dom003.php: SUCCEEDED
    Xml/dom006.php: SUCCEEDED
    Xml/dom007.php: SUCCEEDED
    Xml/dom_set_attr_node.php: SUCCEEDED
    Xml/xmlhandler.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test begins
    <br/>
    <br/>test begins
    <br/>empty begins
    <br/>empty ends
    <br/>nocontent begins
    <br/>nocontent ends
    <br/>content begins
    <br/>empty begins
    <br/>empty ends
    <br/>empty begins
    <br/>empty ends
    <br/>content ends
    <br/>empty begins
    <br/>empty ends
    <br/>empty begins
    <br/>empty ends
    <br/>test ends
    <br/>Test ends
    <br/>
    <br/>
    Test begins
    <br/>
    <br/>
    Error: Call to undefined function: 'xml_parser_create' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Xml\__input.txt at expression on line 18, column 3.
    Xml/xslt001.php: SUCCEEDED
    Xml/xslt002.php: SUCCEEDED
    Xml/xslt003.php: SUCCEEDED
    Xml/xslt004.php: SUCCEEDED
    Xml/xslt005.php: SUCCEEDED
    Xml/xslt006.php: SUCCEEDED
    Xml/xslt007.php: SUCCEEDED
    Xml/xslt010.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test 10: EXSLT Support
      
      
      Test Date : 0001-12-31Z
        year                 : 1
        leap-year            : false
        month-in-year        : 12
        month-name           : December
        month-abbreviation   : Dec
        week-in-year         : 1
        day-in-year          : 365
        day-in-month         : 31
        day-of-week-in-month : 5
        day-in-week          : 2
        day-name             : Monday
        day-abbreviation     : Mon
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : 3000-01-31
        year                 : 3000
        leap-year            : false
        month-in-year        : 1
        month-name           : January
        month-abbreviation   : Jan
        week-in-year         : 5
        day-in-year          : 31
        day-in-month         : 31
        day-of-week-in-month : 5
        day-in-week          : 6
        day-name             : Friday
        day-abbreviation     : Fri
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : 2000-02-29
        year                 : 2000
        leap-year            : true
        month-in-year        : 2
        month-name           : February
        month-abbreviation   : Feb
        week-in-year         : 9
        day-in-year          : 60
        day-in-month         : 29
        day-of-week-in-month : 5
        day-in-week          : 3
        day-name             : Tuesday
        day-abbreviation     : Tue
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : 9990001-12-31Z
        year                 : 9990001
        leap-year            : false
        month-in-year        : 12
        month-name           : December
        month-abbreviation   : Dec
        week-in-year         : 1
        day-in-year          : 365
        day-in-month         : 31
        day-of-week-in-month : 5
        day-in-week          : 2
        day-name             : Monday
        day-abbreviation     : Mon
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : -0004-02-29
        year                 : -4
        leap-year            : true
        month-in-year        : 2
        month-name           : February
        month-abbreviation   : Feb
        week-in-year         : 9
        day-in-year          : 60
        day-in-month         : 29
        day-of-week-in-month : 5
        day-in-week          : 1
        day-name             : Sunday
        day-abbreviation     : Sun
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
    Test 10: EXSLT Support
    Warning: Cannot find a script or an extension object associated with namespace 'http://exslt.org/dates-and-times'..
    
    Warning: Illegal string offset '-1' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Phalanger.inc at expression on line 7, column 6.
    Xml/xslt011.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test 11: php:function Support
    
    Warning: XSLTProcessor::transformToXml(): A PHP Object cannot be converted to a XPath-string in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Xml\__input.txt on line 18
    <?xml version="1.0"?>
    foobar - secondArg
    foobar - 
    this is from an external DomDocument
    from the Input Document
    static
    Test 11: php:function Support
    <?xml version="1.0" encoding="utf-8"?>foobar - secondArg
    foobar - 
    this is from an external DomDocument
    from the Input Document
    static
    not a DomNode object
    Xml/xslt012.php: SUCCEEDED
    ================================================ FILE: Testing/Tests/TestLogs/TestLog (1891).htm ================================================ PHP.NET Compiler test log

    PHP.NET Compiler test log

    (89%) 835 succeeded, 101 failed
    Test ResultCompiler error outputExpected test result
    @PHP/classes/array_access_001.php: SUCCEEDED
    @PHP/classes/array_access_002.php: SUCCEEDED
    @PHP/classes/array_access_003.php: SUCCEEDED
    @PHP/classes/array_access_004.php: SUCCEEDED
    @PHP/classes/array_access_005.php: SUCCEEDED
    @PHP/classes/array_access_006.php: SUCCEEDED
    @PHP/classes/array_access_007.php: SUCCEEDED
    @PHP/classes/array_access_008.php: SUCCEEDED
    @PHP/classes/array_access_009.php: SUCCEEDED
    @PHP/classes/array_access_010.php: SUCCEEDED
    @PHP/classes/array_access_011.php: SUCCEEDED
    @PHP/classes/array_access_013.php: SUCCEEDED
    @PHP/classes/assign_op_property_001.php: SUCCEEDED
    @PHP/classes/autoload_001.php: SUCCEEDED
    @PHP/classes/autoload_002.php: SUCCEEDED
    @PHP/classes/autoload_003.php: SUCCEEDED
    @PHP/classes/autoload_005.php: SUCCEEDED
    @PHP/classes/autoload_006.php: SUCCEEDED
    @PHP/classes/bug23951.php: SUCCEEDED
    @PHP/classes/bug24399.php: SUCCEEDED
    @PHP/classes/bug24445.php: SUCCEEDED
    @PHP/classes/bug26737.php: SUCCEEDED
    @PHP/classes/bug27468.php: SUCCEEDED
    @PHP/classes/bug27504.php: SUCCEEDED
    @PHP/classes/class_example.php: SUCCEEDED
    @PHP/classes/class_stdclass.php: SUCCEEDED
    @PHP/classes/clone_001.php: SUCCEEDED
    @PHP/classes/clone_002.php: SUCCEEDED
    @PHP/classes/clone_003.php: SUCCEEDED
    @PHP/classes/clone_004.php: SUCCEEDED
    @PHP/classes/clone_006.php: SUCCEEDED
    @PHP/classes/constants_scope_001.php: SUCCEEDED
    @PHP/classes/ctor_dtor.php: SUCCEEDED
    @PHP/classes/ctor_dtor_inheritance.php: SUCCEEDED
    @PHP/classes/ctor_name_clash.php: SUCCEEDED
    @PHP/classes/dereferencing_001.php: SUCCEEDED
    @PHP/classes/destructor_and_echo.php: SUCCEEDED
    @PHP/classes/destructor_and_references.php: SUCCEEDED
    @PHP/classes/destructor_inheritance.php: SUCCEEDED
    @PHP/classes/destructor_visibility_003.php: SUCCEEDED
    @PHP/classes/factory_001.php: SUCCEEDED
    @PHP/classes/factory_and_singleton_001.php: SUCCEEDED
    @PHP/classes/factory_and_singleton_002.php: SUCCEEDED
    @PHP/classes/final.php: SUCCEEDED
    @PHP/classes/incdec_property_001.php: SUCCEEDED
    @PHP/classes/incdec_property_002.php: SUCCEEDED
    @PHP/classes/incdec_property_003.php: SUCCEEDED
    @PHP/classes/incdec_property_004.php: SUCCEEDED
    @PHP/classes/inheritance.php: SUCCEEDED
    @PHP/classes/inheritance_002.php: SUCCEEDED
    @PHP/classes/interfaces_001.php: SUCCEEDED
    @PHP/classes/interface_construct.php: SUCCEEDED
    @PHP/classes/interface_doubled.php: SUCCEEDED
    @PHP/classes/interface_implemented.php: SUCCEEDED
    @PHP/classes/iterators_001.php: SUCCEEDED
    @PHP/classes/iterators_002.php: SUCCEEDED
    @PHP/classes/iterators_003.php: SUCCEEDED
    @PHP/classes/iterators_004.php: SUCCEEDED
    @PHP/classes/iterators_006.php: SUCCEEDED
    @PHP/classes/iterators_007.php: SUCCEEDED
    @PHP/classes/object_reference_001.php: SUCCEEDED
    @PHP/classes/private_001.php: SUCCEEDED
    @PHP/classes/private_002.php: SUCCEEDED
    @PHP/classes/private_003.php: SUCCEEDED
    @PHP/classes/private_003b.php: SUCCEEDED
    @PHP/classes/private_004.php: SUCCEEDED
    @PHP/classes/private_004b.php: SUCCEEDED
    @PHP/classes/private_005.php: SUCCEEDED
    @PHP/classes/private_005b.php: SUCCEEDED
    @PHP/classes/private_006.php: SUCCEEDED
    @PHP/classes/private_006b.php: SUCCEEDED
    @PHP/classes/private_007.php: SUCCEEDED
    @PHP/classes/private_007b.php: SUCCEEDED
    @PHP/classes/private_members.php: SUCCEEDED
    @PHP/classes/private_redeclare.php: SUCCEEDED
    @PHP/classes/protected_001.php: SUCCEEDED
    @PHP/classes/protected_001b.php: SUCCEEDED
    @PHP/classes/protected_002.php: SUCCEEDED
    @PHP/classes/serialize_001.php: SUCCEEDED
    @PHP/classes/singleton_001.php: SUCCEEDED
    @PHP/classes/static_properties_001.php: SUCCEEDED
    @PHP/classes/type_hinting_001.php: SUCCEEDED
    @PHP/classes/type_hinting_003.php: SUCCEEDED
    @PHP/classes/visibility_000c.php: SUCCEEDED
    @PHP/classes/visibility_001c.php: SUCCEEDED
    @PHP/classes/visibility_002c.php: SUCCEEDED
    @PHP/classes/visibility_003a.php: SUCCEEDED
    @PHP/classes/visibility_003c.php: SUCCEEDED
    @PHP/classes/visibility_004a.php: SUCCEEDED
    @PHP/classes/visibility_004b.php: SUCCEEDED
    @PHP/classes/visibility_004c.php: SUCCEEDED
    @PHP/classes/visibility_005.php: SUCCEEDED
    @PHP/classes/__call_001.php: SUCCEEDED
    @PHP/classes/__set_data_corrupt.php: SUCCEEDED
    @PHP/classes/__set__get_001.php: SUCCEEDED
    @PHP/classes/__set__get_004.php: SUCCEEDED
    @PHP/classes/__set__get_005.php: SUCCEEDED
    @PHP/date/bug17988.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2002-06-25 12:18:48
    2002-06-25 14:18:48
    2002-06-25 13:18:48
    2002-06-25 12:18:48
    2002-06-25 18:18:48
    2002-06-25 14:18:48
    2002-06-25 14:18:48
    2002-06-25 18:18:48
    2002-06-25 10:18:48
    2002-06-25 17:18:48
    2002-06-25 11:18:48
    2002-06-25 17:48:48
    2002-06-25 10:48:48
    2002-06-25 14:18:48
    2002-06-25 14:18:48
    2002-06-25 13:18:48
    2002-06-25 12:18:48
    2002-06-25 18:18:48
    2002-06-25 14:18:48
    2002-06-25 14:18:48
    2002-06-25 18:18:48
    2002-06-25 10:18:48
    2002-06-25 17:18:48
    2002-06-25 11:18:48
    2002-06-25 17:48:48
    2002-06-25 10:48:48
    @PHP/date/bug26317.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2003-11-19 17:20:42
    2003-11-19 17:20:42
    2003-11-19 17:20:42
    2003-11-19 16:20:42
    2003-11-19 16:20:42
    2003-11-19 16:20:42
    @PHP/date/bug26320.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2003-11-19 12:30:42
    2003-11-19 13:30:42
    2003-11-19 12:30:42
    2003-11-19 12:30:42
    @PHP/date/bug28088.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    The following line rightly shows the correct date time:
    04/04/04 2145
    But the following line fails to show the correct date time:
    04/03/04 2245
    The following line rightly shows the correct date time:
    04/04/04 2345
    But the following line fails to show the correct date time:
    04/04/04 0045
    @PHP/date/bug28599.php: SUCCEEDED
    @PHP/date/bug29150.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2005-06-19 22:00:00
    2005-06-20 00:00:00
    @PHP/date/bug29585.php: SUCCEEDED
    @PHP/date/bug29595.php: SUCCEEDED
    @PHP/date/bug33056.php: SUCCEEDED
    @PHP/date/bug33452.php: SUCCEEDED
    @PHP/date/bug33562.php: SUCCEEDED
    @PHP/date/bug33563.php: SUCCEEDED
    @PHP/date/bug33578.php: SUCCEEDED
    @PHP/date/bug33869.php: SUCCEEDED
    @PHP/date/bug34676.php: SUCCEEDED
    @PHP/date/bug34771.php: SUCCEEDED
    @PHP/date/bug35143.php: SUCCEEDED
    @PHP/date/bug35414.php: SUCCEEDED
    @PHP/date/bug35422.php: SUCCEEDED
    @PHP/date/bug35425.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    integer(42)
    integer(1)
    integer(1)
    integer(1)
    integer(1)
    integer(0)
    integer(0)
    integer(1)
    integer(1)
    integer(31)
    integer(1104537661)
    integer(6)
    integer(53)
    integer(5)
    integer(2005)
    integer(0)
    integer(3600)
    integer(292)
    integer(1)
    integer(1)
    integer(1)
    integer(1)
    integer(0)
    integer(0)
    integer(1)
    integer(1)
    integer(31)
    integer(1104559261)
    integer(6)
    integer(53)
    integer(5)
    integer(2005)
    integer(0)
    integer(-18000)
    @PHP/date/bug35456.php: SUCCEEDED
    @PHP/date/bug35624.php: SUCCEEDED
    @PHP/date/bug35630.php: SUCCEEDED
    @PHP/date/bug35699.php: SUCCEEDED
    @PHP/date/bug35705.php: SUCCEEDED
    @PHP/date/bug35885.php: SUCCEEDED
    @PHP/date/bug35887.php: SUCCEEDED
    @PHP/date/date.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    c: 2003-01-23T13:20:59+01:00
    r: Thu, 23 Jan 2003 13:20:59 +0100
    c: 2003-01-23T13:20:59+01:00
    r: Thu, 23 Jan 2003 13:20:59 +0100
    c: 2003-01-23T12:20:59+00:00
    r: Thu, 23 Jan 2003 12:20:59 +0000
    c: 2003-01-23T13:20:59+01:00
    r: Thu, 23 Jan 2003 13:20:59 +0100
    @PHP/date/date_create-1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\date\__input.txt on line 28
    SKIP
    @PHP/date/date_create-2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\date\__input.txt on line 6
    SKIP
    @PHP/date/date_default_timezone_get-3.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Europe/Prague
    America/Chicago
    Europe/Rome
    America/Chicago
    @PHP/date/date_modify-1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\date\__input.txt on line 6
    SKIP
    @PHP/date/date_modify-2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\date\__input.txt on line 6
    SKIP
    @PHP/date/default-timezone-1.php: SUCCEEDED
    @PHP/date/default-timezone-2.php: SUCCEEDED
    @PHP/date/format-negative-timestamp.php: SUCCEEDED
    @PHP/date/strtotime.php: SUCCEEDED
    @PHP/date/timezone-configuration.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    1119125744
    1119125744
    1119125744
    1119125744
    1119129344
    1119125744
    @PHP/doc_examples/test001.php: SUCCEEDED
    @PHP/doc_examples/test002.php: SUCCEEDED
    @PHP/doc_examples/test003.php: SUCCEEDED
    @PHP/doc_examples/test004.php: SUCCEEDED
    @PHP/doc_examples/test005.php: SUCCEEDED
    @PHP/doc_examples/test006.php: SUCCEEDED
    @PHP/doc_examples/test007.php: SUCCEEDED
    @PHP/doc_examples/test008.php: SUCCEEDED
    @PHP/doc_examples/test009.php: SUCCEEDED
    @PHP/doc_examples/test010.php: SUCCEEDED
    @PHP/doc_examples/test011.php: SUCCEEDED
    @PHP/doc_examples/test013.php: SUCCEEDED
    @PHP/doc_examples/test014.php: SUCCEEDED
    @PHP/doc_examples/test015.php: SUCCEEDED
    @PHP/doc_examples/test016.php: SUCCEEDED
    @PHP/doc_examples/test017.php: SUCCEEDED
    @PHP/doc_examples/test018.php: SUCCEEDED
    @PHP/doc_examples/test019.php: SUCCEEDED
    @PHP/doc_examples/test020.php: SUCCEEDED
    @PHP/doc_examples/test021.php: SUCCEEDED
    @PHP/doc_examples/test022.php: SUCCEEDED
    @PHP/doc_examples/test023.php: SUCCEEDED
    @PHP/doc_examples/test024.php: SUCCEEDED
    @PHP/doc_examples/test025.php: SUCCEEDED
    @PHP/doc_examples/test026.php: SUCCEEDED
    @PHP/doc_examples/test027.php: SUCCEEDED
    @PHP/doc_examples/test028.php: SUCCEEDED
    @PHP/doc_examples/test029.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ´┐Żauky
    �auky
    @PHP/doc_examples/test030.php: SUCCEEDED
    @PHP/doc_examples/test031.php: SUCCEEDED
    @PHP/doc_examples/test032.php: SUCCEEDED
    @PHP/doc_examples/test033.php: SUCCEEDED
    @PHP/doc_examples/test034.php: SUCCEEDED
    @PHP/doc_examples/test035.php: SUCCEEDED
    @PHP/doc_examples/test036.php: SUCCEEDED
    @PHP/doc_examples/test037.php: SUCCEEDED
    @PHP/doc_examples/test038.php: SUCCEEDED
    @PHP/doc_examples/test039.php: SUCCEEDED
    @PHP/doc_examples/test040.php: SUCCEEDED
    @PHP/doc_examples/test041.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    call_user_func():
    hello world!
    Strict Standards: call_user_func(): Non-static method MyClass::myCallbackMethod() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\doc_examples\__input.txt at expression on line 17, column 1.
    Hello World!Hello World!
    @PHP/doc_examples/test042.php: SUCCEEDED
    @PHP/doc_examples/test043.php: SUCCEEDED
    @PHP/doc_examples/test044.php: SUCCEEDED
    @PHP/doc_examples/test045.php: SUCCEEDED
    @PHP/doc_examples/test046.php: SUCCEEDED
    @PHP/doc_examples/test047.php: SUCCEEDED
    @PHP/doc_examples/test048.php: SUCCEEDED
    @PHP/doc_examples/test049.php: SUCCEEDED
    @PHP/doc_examples/test050.php: SUCCEEDED
    @PHP/doc_examples/test051.php: SUCCEEDED
    @PHP/doc_examples/test052.php: SUCCEEDED
    @PHP/doc_examples/test053.php: SUCCEEDED
    @PHP/doc_examples/test054.php: SUCCEEDED
    @PHP/doc_examples/test055.php: SUCCEEDED
    @PHP/doc_examples/test056.php: SUCCEEDED
    @PHP/doc_examples/test057.php: SUCCEEDED
    @PHP/doc_examples/test058.php: SUCCEEDED
    @PHP/doc_examples/test059.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    Deprecated: Assigning the return value of new by reference is deprecated in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\doc_examples\__input.txt on line 4
    NULL
    object(stdClass)#1 (0) {
    }
    NULL
    object(stdClass)(0) {
    }
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\doc_examples\__input.txt(4,5): warning PHP0181: Assigning the return value of new by reference is deprecated
    
    @PHP/doc_examples/test060.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    Deprecated: Assigning the return value of new by reference is deprecated in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\doc_examples\__input.txt on line 9
    Static object: NULL
    Static object: NULL
    
    Static object: NULL
    Static object: object(stdClass)#3 (1) {
      ["property"]=>
      int(1)
    }
    Static object: NULL
    Static object: NULL
    
    Static object: NULL
    Static object: object(stdClass)(1) {
      ["property"]=>
      int(1)
    }
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\doc_examples\__input.txt(9,9): warning PHP0181: Assigning the return value of new by reference is deprecated
    
    @PHP/doc_examples/test061.php: SUCCEEDED
    @PHP/doc_examples/test062.php: SUCCEEDED
    @PHP/doc_examples/test063.php: SUCCEEDED
    @PHP/doc_examples/test064.php: SUCCEEDED
    @PHP/doc_examples/test065.php: SUCCEEDED
    @PHP/doc_examples/test066.php: SUCCEEDED
    @PHP/doc_examples/test067.php: SUCCEEDED
    @PHP/doc_examples/test068.php: SUCCEEDED
    @PHP/doc_examples/test069.php: SUCCEEDED
    @PHP/doc_examples/test070.php: SUCCEEDED
    @PHP/doc_examples/test071.php: SUCCEEDED
    @PHP/doc_examples/test072.php: SUCCEEDED
    @PHP/doc_examples/test073.php: SUCCEEDED
    @PHP/doc_examples/test074.php: SUCCEEDED
    @PHP/doc_examples/test075.php: SUCCEEDED
    @PHP/doc_examples/test076.php: SUCCEEDED
    @PHP/doc_examples/test077.php: SUCCEEDED
    @PHP/doc_examples/test078.php: SUCCEEDED
    @PHP/doc_examples/test079.php: SUCCEEDED
    @PHP/doc_examples/test080.php: SUCCEEDED
    @PHP/doc_examples/test081.php: SUCCEEDED
    @PHP/doc_examples/test082.php: SUCCEEDED
    @PHP/doc_examples/test083.php: SUCCEEDED
    @PHP/doc_examples/test084.php: SUCCEEDED
    @PHP/doc_examples/test085.php: SUCCEEDED
    @PHP/doc_examples/test086.php: SUCCEEDED
    @PHP/doc_examples/test087.php: SUCCEEDED
    @PHP/doc_examples/test088.php: SUCCEEDED
    @PHP/doc_examples/test089.php: SUCCEEDED
    @PHP/doc_examples/test090.php: SUCCEEDED
    @PHP/doc_examples/test091.php: SUCCEEDED
    @PHP/doc_examples/test092.php: SUCCEEDED
    @PHP/doc_examples/test093.php: SUCCEEDED
    @PHP/doc_examples/test094.php: SUCCEEDED
    @PHP/doc_examples/test095.php: SUCCEEDED
    @PHP/doc_examples/test096.php: SUCCEEDED
    @PHP/doc_examples/test097.php: SUCCEEDED
    @PHP/doc_examples/test098.php: SUCCEEDED
    @PHP/doc_examples/test099.php: SUCCEEDED
    @PHP/doc_examples/test100.php: SUCCEEDED
    @PHP/doc_examples/test102.php: SUCCEEDED
    @PHP/doc_examples/test103.php: SUCCEEDED
    @PHP/doc_examples/test104.php: SUCCEEDED
    @PHP/doc_examples/test105.php: SUCCEEDED
    @PHP/doc_examples/test107.php: SUCCEEDED
    @PHP/doc_examples/test108.php: SUCCEEDED
    @PHP/doc_examples/test109.php: SUCCEEDED
    @PHP/doc_examples/test110.php: SUCCEEDED
    @PHP/doc_examples/test111.php: SUCCEEDED
    @PHP/doc_examples/test112.php: SUCCEEDED
    @PHP/doc_examples/test113.php: SUCCEEDED
    @PHP/doc_examples/test114.php: SUCCEEDED
    @PHP/doc_examples/test115.php: SUCCEEDED
    @PHP/doc_examples/test116.php: SUCCEEDED
    @PHP/doc_examples/test117.php: SUCCEEDED
    @PHP/doc_examples/test118.php: SUCCEEDED
    @PHP/doc_examples/test119.php: SUCCEEDED
    @PHP/doc_examples/test120.php: SUCCEEDED
    @PHP/doc_examples/test121.php: SUCCEEDED
    @PHP/doc_examples/test122.php: SUCCEEDED
    @PHP/doc_examples/test123.php: SUCCEEDED
    @PHP/doc_examples/test124.php: SUCCEEDED
    @PHP/doc_examples/test125.php: SUCCEEDED
    @PHP/doc_examples/test126.php: SUCCEEDED
    @PHP/doc_examples/test127.php: SUCCEEDED
    @PHP/doc_examples/test128.php: SUCCEEDED
    @PHP/doc_examples/test129.php: SUCCEEDED
    @PHP/doc_examples/test130.php: SUCCEEDED
    @PHP/doc_examples/test131.php: SUCCEEDED
    @PHP/doc_examples/test132.php: SUCCEEDED
    @PHP/doc_examples/test133.php: SUCCEEDED
    @PHP/doc_examples/test134.php: SUCCEEDED
    @PHP/doc_examples/test136.php: SUCCEEDED
    @PHP/doc_examples/test137.php: SUCCEEDED
    @PHP/doc_examples/test138.php: SUCCEEDED
    @PHP/doc_examples/test139.php: SUCCEEDED
    @PHP/doc_examples/test148.php: SUCCEEDED
    @PHP/doc_examples/test149.php: SUCCEEDED
    @PHP/doc_examples/test150.php: SUCCEEDED
    @PHP/doc_examples/test151.php: SUCCEEDED
    @PHP/doc_examples/test152.php: SUCCEEDED
    @PHP/doc_examples/test153.php: SUCCEEDED
    @PHP/doc_examples/test154.php: SUCCEEDED
    @PHP/doc_examples/test155.php: SUCCEEDED
    @PHP/doc_examples/test156.php: SUCCEEDED
    @PHP/doc_examples/test158.php: SUCCEEDED
    @PHP/lang/001.php: SUCCEEDED
    @PHP/lang/002.php: SUCCEEDED
    @PHP/lang/003.php: SUCCEEDED
    @PHP/lang/004.php: SUCCEEDED
    @PHP/lang/005.php: SUCCEEDED
    @PHP/lang/006.php: SUCCEEDED
    @PHP/lang/007.php: SUCCEEDED
    @PHP/lang/008.php: SUCCEEDED
    @PHP/lang/009.php: SUCCEEDED
    @PHP/lang/010.php: SUCCEEDED
    @PHP/lang/011.php: SUCCEEDED
    @PHP/lang/012.php: SUCCEEDED
    @PHP/lang/013.php: SUCCEEDED
    @PHP/lang/014.php: SUCCEEDED
    @PHP/lang/015.php: SUCCEEDED
    @PHP/lang/016.php: SUCCEEDED
    @PHP/lang/017.php: SUCCEEDED
    @PHP/lang/018.php: SUCCEEDED
    @PHP/lang/019.php: SUCCEEDED
    @PHP/lang/020.php: SUCCEEDED
    @PHP/lang/021.php: SUCCEEDED
    @PHP/lang/022.php: SUCCEEDED
    @PHP/lang/023.php: SUCCEEDED
    @PHP/lang/024.php: SUCCEEDED
    @PHP/lang/025.php: SUCCEEDED
    @PHP/lang/026.php: SUCCEEDED
    @PHP/lang/027.php: SUCCEEDED
    @PHP/lang/028.php: SUCCEEDED
    @PHP/lang/030.php: SUCCEEDED
    @PHP/lang/032.php: SUCCEEDED
    @PHP/lang/036.php: SUCCEEDED
    @PHP/lang/037.php: SUCCEEDED
    @PHP/lang/038.php: SUCCEEDED
    @PHP/lang/039.php: SUCCEEDED
    @PHP/lang/040.php: SUCCEEDED
    @PHP/lang/bison1.php: SUCCEEDED
    @PHP/lang/bug17115.php: SUCCEEDED
    @PHP/lang/bug18872.php: SUCCEEDED
    @PHP/lang/bug19943.php: SUCCEEDED
    @PHP/lang/bug20175.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    Deprecated: Assigning the return value of new by reference is deprecated in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\lang\__input.txt on line 110
    foo_static()
    foo_global()
    foo:1
    foo_static()
    foo:1
    bar_static()
    bar_global()
    bar:1
    bar_static()
    bar:1
    wow_static()
    wow_global()
    wow:1
    wow_static()
    wow:1
    oop_test()
    oop_static()
    oop_class()
    oop:1
    oop_static()
    oop:1
    oop_test()
    oop_static()
    oop:1
    foo_static()
    foo_global()
    foo:1
    foo_static()
    foo:1
    bar_static()
    bar_global()
    bar:1
    bar_static()
    bar_global()
    bar:2
    wow_static()
    wow_global()
    wow:1
    wow_static()
    wow:1
    oop_test()
    oop_static()
    oop_class()
    oop:1
    oop_static()
    oop:1
    oop_test()
    oop_static()
    oop:1
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\lang\__input.txt(110,4): warning PHP0181: Assigning the return value of new by reference is deprecated
    
    @PHP/lang/bug21094.php: SUCCEEDED
    @PHP/lang/bug21600.php: SUCCEEDED
    @PHP/lang/bug21669.php: SUCCEEDED
    @PHP/lang/bug21849.php: SUCCEEDED
    @PHP/lang/bug21961.php: SUCCEEDED
    @PHP/lang/bug22231.php: SUCCEEDED
    @PHP/lang/bug22367.php: SUCCEEDED
    @PHP/lang/bug22510.php: SUCCEEDED
    @PHP/lang/bug22592.php: SUCCEEDED
    @PHP/lang/bug22690.php: SUCCEEDED
    @PHP/lang/bug23279.php: SUCCEEDED
    @PHP/lang/bug23384.php: SUCCEEDED
    @PHP/lang/bug23489.php: SUCCEEDED
    @PHP/lang/bug23524.php: SUCCEEDED
    @PHP/lang/bug23922.php: SUCCEEDED
    @PHP/lang/bug24054.php: SUCCEEDED
    @PHP/lang/bug24396.php: SUCCEEDED
    @PHP/lang/bug24403.php: SUCCEEDED
    @PHP/lang/bug24436.php: SUCCEEDED
    @PHP/lang/bug24499.php: SUCCEEDED
    @PHP/lang/bug24640.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    double(1700000000000000089258092433847514422797596587883870563356951996370064178581143932836831337636761368874297554515902592900802289500112731978596146714137401870842258241575178866354311397451139753100927220499450359906637902366244989496126909662726242240784739940994096632824796638102733857671280980918272.0000000000)
    1.7E+300
    
    ------
    double(0.0000000000)
    1.7E-300
    
    ------
    double(17000000000000001584208052028780237480128823455860622330108867175329927830437888.0000000000)
    1.7E+79
    
    ------
    double(0.0000000000)
    1.7E-79
    
    ------
    double(169999999999999996096025832433329868941658043870400163508258284150340918121070592.0000000000)
    1.7E+80
    
    ------
    double(0.0000000000)
    1.7E-80
    
    ------
    double(1700000000000000013616404158611892038375594280539217794530130541777964808366194688.0000000000)
    1.7E+81
    
    ------
    double(0.0000000000)
    1.7E-81
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    1.6999810742106E-319
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    1.7000798873397E-320
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    1.6995858216939E-321
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    0
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    0
    
    ------
    double(1700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+300
    
    ------
    double(0.0000000000)
    1.70000000000003E-300
    
    ------
    double(17000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+79
    
    ------
    double(0.0000000000)
    1.70000000000001E-79
    
    ------
    double(170000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+80
    
    ------
    double(0.0000000000)
    1.70000000000001E-80
    
    ------
    double(1700000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+81
    
    ------
    double(0.0000000000)
    1.70000000000001E-81
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    1.69998107421056E-319
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    1.70007988733973E-320
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    1.69464516523548E-321
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    0
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    0
    
    ------
    @PHP/lang/bug24652.php: SUCCEEDED
    @PHP/lang/bug24658.php: SUCCEEDED
    @PHP/lang/bug24783.php: SUCCEEDED
    @PHP/lang/bug24926.php: SUCCEEDED
    @PHP/lang/bug25547.php: SUCCEEDED
    @PHP/lang/bug25652.php: SUCCEEDED
    @PHP/lang/bug25922.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Undefined index here: 'error'
    Undefined index here: ''
    @PHP/lang/bug26182.php: SUCCEEDED
    @PHP/lang/bug26696.php: SUCCEEDED
    @PHP/lang/bug26866.php: SUCCEEDED
    @PHP/lang/bug26869.php: SUCCEEDED
    @PHP/lang/bug27354.php: SUCCEEDED
    @PHP/lang/bug27439.php: SUCCEEDED
    @PHP/lang/bug27535.php: SUCCEEDED
    @PHP/lang/bug28213.php: SUCCEEDED
    @PHP/lang/bug28800.php: SUCCEEDED
    @PHP/lang/bug29566.php: SUCCEEDED
    @PHP/lang/bug29893.php: SUCCEEDED
    @PHP/lang/bug29944.php: SUCCEEDED
    @PHP/lang/bug30638.php: SUCCEEDED
    @PHP/lang/bug30726.php: SUCCEEDED
    @PHP/lang/bug30862.php: SUCCEEDED
    @PHP/lang/bug32924.php: SUCCEEDED
    @PHP/lang/bug35382.php: SUCCEEDED
    @PHP/lang/bug7515.php: SUCCEEDED
    @PHP/lang/each_binary_safety.php: SUCCEEDED
    @PHP/lang/error_2_exception_001.php: SUCCEEDED
    @PHP/lang/foreach_with_object_001.php: SUCCEEDED
    @PHP/lang/foreach_with_references_001.php: SUCCEEDED
    @PHP/lang/type_hints_001.php: SUCCEEDED
    @PHP/standard/array/001.php: SUCCEEDED
    @PHP/standard/array/003.php: SUCCEEDED
    @PHP/standard/array/004.php: SUCCEEDED
    @PHP/standard/array/005.php: SUCCEEDED
    @PHP/standard/array/008.php: SUCCEEDED
    @PHP/standard/array/array_change_key_case.php: SUCCEEDED
    @PHP/standard/array/array_chunk.php: SUCCEEDED
    @PHP/standard/array/array_count_values.php: SUCCEEDED
    @PHP/standard/array/array_diff_1.php: SUCCEEDED
    @PHP/standard/array/array_diff_key.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ------ Test 1 --------
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 2 --------
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 3 --------
    array(6) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [2]=>
      int(4)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [2]=>
      int(4)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 4 --------
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 5 --------
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 6 --------
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 7 --------
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    ------ Test 8 --------
    array(6) {
      [0]=>
      int(0)
      [7]=>
      int(14)
      [2]=>
      int(4)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [0]=>
      int(0)
      [7]=>
      int(14)
      [2]=>
      int(4)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 9 --------
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    ------ Test 1 --------
    array(4) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(4) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 2 --------
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 3 --------
    array(6) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [2]=>
      &int(4)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [2]=>
      &int(4)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 4 --------
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 5 --------
    array(4) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(4) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 6 --------
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 7 --------
    array(3) {
      [7]=>
      &int(14)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
    }
    array(3) {
      [7]=>
      &int(14)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
    }
    ------ Test 8 --------
    array(6) {
      [0]=>
      &int(0)
      [7]=>
      &int(14)
      [2]=>
      &int(4)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [0]=>
      &int(0)
      [7]=>
      &int(14)
      [2]=>
      &int(4)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 9 --------
    array(3) {
      [7]=>
      &int(14)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
    }
    array(3) {
      [7]=>
      &int(14)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
    }
    @PHP/standard/array/array_intersect_key.php: SUCCEEDED
    @PHP/standard/array/array_sum.php: SUCCEEDED
    @PHP/standard/array/array_walk_recursive.php: SUCCEEDED
    @PHP/standard/array/bug12776.php: SUCCEEDED
    @PHP/standard/array/bug14580.php: SUCCEEDED
    @PHP/standard/array/bug20381.php: SUCCEEDED
    @PHP/standard/array/bug20865.php: SUCCEEDED
    @PHP/standard/array/bug21182.php: SUCCEEDED
    @PHP/standard/array/bug21918.php: SUCCEEDED
    @PHP/standard/array/bug21998.php: SUCCEEDED
    @PHP/standard/array/bug22088.php: SUCCEEDED
    @PHP/standard/array/bug22463.php: SUCCEEDED
    @PHP/standard/array/bug23581.php: SUCCEEDED
    @PHP/standard/array/bug23788.php: SUCCEEDED
    @PHP/standard/array/bug24198.php: SUCCEEDED
    @PHP/standard/array/bug24220.php: SUCCEEDED
    @PHP/standard/array/bug24766.php: SUCCEEDED
    @PHP/standard/array/bug24897.php: SUCCEEDED
    @PHP/standard/array/bug24980.php: SUCCEEDED
    @PHP/standard/array/bug25359.php: SUCCEEDED
    @PHP/standard/array/bug25708.php: SUCCEEDED
    @PHP/standard/array/bug25758.php: SUCCEEDED
    @PHP/standard/array/bug26458.php: SUCCEEDED
    @PHP/standard/array/bug28974.php: SUCCEEDED
    @PHP/standard/array/bug29493.php: SUCCEEDED
    @PHP/standard/array/bug30266.php: SUCCEEDED
    @PHP/standard/array/bug30833.php: SUCCEEDED
    @PHP/standard/array/bug31158.php: SUCCEEDED
    @PHP/standard/array/bug31213.php: SUCCEEDED
    @PHP/standard/array/bug32021.php: SUCCEEDED
    @PHP/standard/array/bug33382.php: SUCCEEDED
    @PHP/standard/array/bug33989.php: SUCCEEDED
    @PHP/standard/array/bug34227.php: SUCCEEDED
    @PHP/standard/array/bug34982.php: SUCCEEDED
    @PHP/standard/array/bug35014.php: SUCCEEDED
    @PHP/standard/array/bug35022.php: SUCCEEDED
    @PHP/standard/array/bug35821.php: SUCCEEDED
    @PHP/standard/array/count_recursive.php: SUCCEEDED
    @PHP/standard/array/locale_sort.php: SUCCEEDED
    @PHP/standard/array/range.php: SUCCEEDED
    @PHP/standard/assert/assert.php: SUCCEEDED
    @PHP/standard/general_functions/001.php: SUCCEEDED
    @PHP/standard/general_functions/002.php: SUCCEEDED
    @PHP/standard/general_functions/003.php: SUCCEEDED
    @PHP/standard/general_functions/004.php: SUCCEEDED
    @PHP/standard/general_functions/005.php: SUCCEEDED
    @PHP/standard/general_functions/006.php: SUCCEEDED
    @PHP/standard/general_functions/007.php: SUCCEEDED
    @PHP/standard/general_functions/009.php: SUCCEEDED
    @PHP/standard/general_functions/bug25038.php: SUCCEEDED
    @PHP/standard/general_functions/bug27678.php: SUCCEEDED
    @PHP/standard/general_functions/bug29038.php: SUCCEEDED
    @PHP/standard/general_functions/bug31190.php: SUCCEEDED
    @PHP/standard/general_functions/bug32647.php: SUCCEEDED
    @PHP/standard/general_functions/bug35229.php: SUCCEEDED
    @PHP/standard/general_functions/is_resource.php: SUCCEEDED
    @PHP/standard/math/abs.php: SUCCEEDED
    @PHP/standard/math/bug24142.php: SUCCEEDED
    @PHP/standard/math/bug25694.php: SUCCEEDED
    @PHP/standard/math/bug27646.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    double(INF-INF)
    'd:-INF;'
    double(INF-INF)
    double(INF-INF)
    'd:INF;'
    double(INF-INF)
    double(NaNInfini)
    'd:NAN;'
    double(NaNInfini)
    double(-Infinity)
    'd:-INF;'
    double(-Infinity)
    double(Infinity)
    'd:INF;'
    double(Infinity)
    double(NaN)
    'd:NAN;'
    double(NaN)
    @PHP/standard/math/bug30069.php: SUCCEEDED
    @PHP/standard/math/bug30695.php: SUCCEEDED
    @PHP/standard/math/floorceil.php: SUCCEEDED
    @PHP/standard/math/hexdec.php: SUCCEEDED
    @PHP/standard/math/log.php: SUCCEEDED
    @PHP/standard/math/pow.php: SUCCEEDED
    @PHP/standard/math/round.php: SUCCEEDED
    @PHP/standard/reg/001.php: SUCCEEDED
    @PHP/standard/reg/002.php: SUCCEEDED
    @PHP/standard/reg/003.php: SUCCEEDED
    @PHP/standard/reg/004.php: SUCCEEDED
    @PHP/standard/reg/005.php: SUCCEEDED
    @PHP/standard/reg/006.php: SUCCEEDED
    @PHP/standard/reg/007.php: SUCCEEDED
    @PHP/standard/reg/008.php: SUCCEEDED
    @PHP/standard/reg/009.php: SUCCEEDED
    @PHP/standard/reg/010.php: SUCCEEDED
    @PHP/standard/reg/011.php: SUCCEEDED
    @PHP/standard/reg/012.php: SUCCEEDED
    @PHP/standard/reg/013.php: SUCCEEDED
    @PHP/standard/reg/014.php: SUCCEEDED
    @PHP/standard/reg/015.php: SUCCEEDED
    @PHP/standard/reg/016.php: SUCCEEDED
    @PHP/standard/serialize/001.php: SUCCEEDED
    @PHP/standard/serialize/002.php: SUCCEEDED
    @PHP/standard/serialize/003.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    d:100;
    double(100.0000000000)
    
    d:51999999999999996980101120;
    double(51999999999999996980101120.0000000000)
    
    d:8.9999999999999995265585574287341141808127531476202420890331268310546875E-9;
    double(0.0000000090)
    d:100;
    double(100.0000000000)
    
    d:5.2000000000000006E+25;
    double(52000000000000000000000000.0000000000)
    
    d:9.0000000000000045E-09;
    double(0.0000000090)
    @PHP/standard/serialize/004.php: SUCCEEDED
    @PHP/standard/serialize/005.php: SUCCEEDED
    @PHP/standard/serialize/006.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    'O:3:"´┐Ż":1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    object
    {
      '´┐Ż' => '´┐Ż'
    }
    'a:1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    array
    {
      '´┐Ż' => '´┐Ż'
    }
    'O:3:"´┐Ż":1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    object
    {
      'ďż˝' => '´┐Ż'
    }
    'a:1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    array
    {
      'ďż˝' => '´┐Ż'
    }
    @PHP/standard/serialize/bug14293.php: SUCCEEDED
    @PHP/standard/serialize/bug21957.php: SUCCEEDED
    @PHP/standard/serialize/bug23298.php: SUCCEEDED
    @PHP/standard/serialize/bug24063.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0.1 0.1
    0.01 0.01
    0.001 0.001
    0.0001 0.0001
    1.0E-5 1.0E-5
    1.0E-6 1.0E-6
    1.0E-7 1.0E-7
    1.0E-8 1.0E-8
    1.0E-9 1.0E-9
    0.1 0.1
    0.01 0.01
    0.001 0.001
    0.0001 0.0001
    1E-05 1E-05
    1E-06 1E-06
    1E-07 1E-07
    1E-08 1E-08
    1E-09 1E-09
    @PHP/standard/serialize/bug25378.php: SUCCEEDED
    @PHP/standard/serialize/bug26762.php: SUCCEEDED
    @PHP/standard/serialize/bug27469.php: SUCCEEDED
    @PHP/standard/serialize/bug28325.php: SUCCEEDED
    @PHP/standard/serialize/bug30234.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    FALSE
    FALSE
    __autoload(Autoload_Implements)
    object [invalid]
    FALSE
    FALSE
    FALSE
    FALSE
    TRUE
    __autoload(Autoload_Implements)
    object [invalid]
    FALSE
    FALSE
    TRUE
    @PHP/standard/serialize/bug31402.php: SUCCEEDED
    @PHP/standard/serialize/bug31442.php: SUCCEEDED
    @PHP/standard/strings/add-and-stripcslashes.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    kaboemkara!
    foo\b\a\r\b\az
    \f\o\o\[ \]
    \zoo['\.']
    \abcd\e\f\g\h\i\j\k\l\m\n\o\pqrstuvwxy\z
    1
    5d
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\standard\strings\__input.txt at expression on line 3, column 1.
    
    kaboemkara!
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\standard\strings\__input.txt at expression on line 5, column 1.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\standard\strings\__input.txt at expression on line 6, column 1.
    
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\standard\strings\__input.txt at expression on line 8, column 1.
    
    1
    5d
    @PHP/standard/strings/add-and-stripslashes.php: SUCCEEDED
    @PHP/standard/strings/basename.php: SUCCEEDED
    @PHP/standard/strings/bin2hex.php: SUCCEEDED
    @PHP/standard/strings/bug20108.php: SUCCEEDED
    @PHP/standard/strings/bug20169.php: SUCCEEDED
    @PHP/standard/strings/bug20261.php: SUCCEEDED
    @PHP/standard/strings/bug20927.php: SUCCEEDED
    @PHP/standard/strings/bug21338.php: SUCCEEDED
    @PHP/standard/strings/bug21453.php: SUCCEEDED
    @PHP/standard/strings/bug21730.php: SUCCEEDED
    @PHP/standard/strings/bug21744.php: SUCCEEDED
    @PHP/standard/strings/bug22008.php: SUCCEEDED
    @PHP/standard/strings/bug22187.php: SUCCEEDED
    @PHP/standard/strings/bug22224.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      0 => 
      object
      {
      }
      1 => 
      object
      {
      }
    }
    @PHP/standard/strings/bug22227.php: SUCCEEDED
    @PHP/standard/strings/bug22904.php: SUCCEEDED
    @PHP/standard/strings/bug23650.php: SUCCEEDED
    @PHP/standard/strings/bug23894.php: SUCCEEDED
    @PHP/standard/strings/bug24098.php: SUCCEEDED
    @PHP/standard/strings/bug24208.php: SUCCEEDED
    @PHP/standard/strings/bug24281.php: SUCCEEDED
    @PHP/standard/strings/bug25671.php: SUCCEEDED
    @PHP/standard/strings/bug25707.php: SUCCEEDED
    @PHP/standard/strings/bug26878.php: SUCCEEDED
    @PHP/standard/strings/bug26973.php: SUCCEEDED
    @PHP/standard/strings/bug27276.php: SUCCEEDED
    @PHP/standard/strings/bug27278.php: SUCCEEDED
    @PHP/standard/strings/bug27295.php: SUCCEEDED
    @PHP/standard/strings/bug27457.php: SUCCEEDED
    @PHP/standard/strings/bug27675.php: SUCCEEDED
    @PHP/standard/strings/bug28386.php: SUCCEEDED
    @PHP/standard/strings/bug33076.php: SUCCEEDED
    @PHP/standard/strings/chr_ord.php: SUCCEEDED
    @PHP/standard/strings/chunk_split.php: SUCCEEDED
    @PHP/standard/strings/count_chars.php: SUCCEEDED
    @PHP/standard/strings/crc32.php: SUCCEEDED
    @PHP/standard/strings/explode.php: SUCCEEDED
    @PHP/standard/strings/implode.php: SUCCEEDED
    @PHP/standard/strings/md5.php: SUCCEEDED
    @PHP/standard/strings/md5raw.php: SUCCEEDED
    @PHP/standard/strings/nl2br.php: SUCCEEDED
    @PHP/standard/strings/sha1.php: SUCCEEDED
    @PHP/standard/strings/sha1raw.php: SUCCEEDED
    @PHP/standard/strings/sprintf_f.php: SUCCEEDED
    @PHP/standard/strings/strcspn.php: SUCCEEDED
    @PHP/standard/strings/strings001.php: SUCCEEDED
    @PHP/standard/strings/strpos.php: SUCCEEDED
    @PHP/standard/strings/strrev.php: SUCCEEDED
    @PHP/standard/strings/strripos.php: SUCCEEDED
    @PHP/standard/strings/strrpos.php: SUCCEEDED
    @PHP/standard/strings/strspn.php: SUCCEEDED
    @PHP/standard/strings/strstr.php: SUCCEEDED
    @PHP/standard/strings/strtoupper.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    cfbfbdcfbfbdcfbfbd
    cfafbdcfafbdcfafbd
    @PHP/standard/strings/strtr.php: SUCCEEDED
    @PHP/standard/strings/strval.php: SUCCEEDED
    @PHP/standard/strings/str_repeat.php: SUCCEEDED
    @PHP/standard/strings/str_shuffle.php: SUCCEEDED
    @PHP/standard/strings/str_word_count.php: SUCCEEDED
    @PHP/standard/strings/substr_count.php: SUCCEEDED
    @PHP/standard/strings/substr_replace.php: SUCCEEDED
    @PHP/standard/strings/wordwrap.php: SUCCEEDED
    @PHP/standard/time/001.php: SUCCEEDED
    @PHP/standard/time/idate.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    U: 1043324459
    Y: 2003
    z: 22
    y: 3
    m: 1
    n: 1
    d: 23
    j: 23
    H: 13
    G: 13
    h: 1
    g: 1
    i: 20
    s: 59
    t: 31
    w: 4
    L: 0
    B: 556
    I: 0
    W: 4
    U: 1043324459
    Y: 2003
    z: 22
    y: 3
    m: 1
    n: 1
    d: 23
    j: 23
    H: 12
    G: 12
    h: 12
    g: 12
    i: 20
    s: 59
    t: 31
    w: 4
    L: 0
    B: 556
    I: 0
    W: 4
    @PHP/strings/001.php: SUCCEEDED
    @PHP/strings/002.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    fprintf test 1:abcde
    20
    printf test 1:simple string
    printf test 2:42
    printf test 3:3.333333
    printf test 4:3.3333333333
    printf test 5:2.50      
    printf test 6:2.50000000
    printf test 7:0000002.50
    printf test 8:<                 foo>
    printf test 9:<bar                 >
    printf test 10: 123456789012345
    printf test 10:<h´┐Żyesterettsjustitiarius>
    printf test 11: 123456789012345678901234567890
    printf test 11:<    h´┐Żyesterettsjustitiarius>
    printf test 12:-12.34
    printf test 13:  -12
    printf test 14:@
    printf test 15:10101010
    printf test 16:aa
    printf test 17:AA
    printf test 18:        10101010
    printf test 19:              aa
    printf test 20:              AA
    printf test 21:0000000010101010
    printf test 22:00000000000000aa
    printf test 23:00000000000000AA
    printf test 24:abcde
    printf test 25:gazonk
    printf test 26:2 1
    printf test 27:3 1 2
    printf test 28:02  1
    printf test 29:2   1
    printf test 30:x
    vprintf test 1:2   1
    fprintf test 1:abcde
    20
    printf test 1:simple string
    printf test 2:42
    printf test 3:3.333333
    printf test 4:3.3333333333
    printf test 5:2.50      
    printf test 6:2.50000000
    printf test 7:0000002.50
    printf test 8:<                 foo>
    printf test 9:<bar                 >
    printf test 10: 123456789012345
    printf test 10:<h�yesterettsjustitiarius>
    printf test 11: 123456789012345678901234567890
    printf test 11:<    h�yesterettsjustitiarius>
    printf test 12:-12.34
    printf test 13:  -12
    printf test 14:@
    printf test 15:10101010
    printf test 16:aa
    printf test 17:AA
    printf test 18:        10101010
    printf test 19:              aa
    printf test 20:              AA
    printf test 21:0000000010101010
    printf test 22:00000000000000aa
    printf test 23:00000000000000AA
    printf test 24:abcde
    printf test 25:gazonk
    printf test 26:2 1
    printf test 27:3 1 2
    printf test 28:02  1
    printf test 29:2   1
    printf test 30:x
    vprintf test 1:2   1
    @PHP/strings/bug22592.php: SUCCEEDED
    Arrays/array1.php: SUCCEEDED
    Arrays/array_diff_intersect.php: SUCCEEDED
    Arrays/array_diff_intersect2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Strict Standards: array_udiff() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 35
    Array
    (
        [0.5] => cr Object
            (
                [priv_member:cr:private] => 12
            )
    
        [0] => cr Object
            (
                [priv_member:cr:private] => 23
            )
    
    )
    
    Strict Standards: array_udiff_assoc() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 36
    Array
    (
        [0.1] => cr Object
            (
                [priv_member:cr:private] => 9
            )
    
        [0.5] => cr Object
            (
                [priv_member:cr:private] => 12
            )
    
        [0] => cr Object
            (
                [priv_member:cr:private] => 23
            )
    
    )
    
    Strict Standards: array_udiff_uassoc() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 37
    
    Strict Standards: array_udiff_uassoc() expects parameter 4 to be a valid callback, non-static method cr::comp_func_key() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 37
    Array
    (
        [0.1] => cr Object
            (
                [priv_member:cr:private] => 9
            )
    
        [0.5] => cr Object
            (
                [priv_member:cr:private] => 12
            )
    
        [0] => cr Object
            (
                [priv_member:cr:private] => 23
            )
    
    )
    Array
    (
        [b] => brown
        [c] => blue
        [0] => red
    )
    ------------------------------------
    
    Strict Standards: array_uintersect() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 40
    Array
    (
        [0.1] => cr Object
            (
                [priv_member:cr:private] => 9
            )
    
        [1] => cr Object
            (
                [priv_member:cr:private] => 4
            )
    
        [2] => cr Object
            (
                [priv_member:cr:private] => -15
            )
    
    )
    
    Strict Standards: array_uintersect_assoc() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 41
    Array
    (
        [1] => cr Object
            (
                [priv_member:cr:private] => 4
            )
    
        [2] => cr Object
            (
                [priv_member:cr:private] => -15
            )
    
    )
    
    Strict Standards: array_uintersect_uassoc() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 42
    
    Strict Standards: array_uintersect_uassoc() expects parameter 4 to be a valid callback, non-static method cr::comp_func_key() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 42
    Array
    (
        [1] => cr Object
            (
                [priv_member:cr:private] => 4
            )
    
        [2] => cr Object
            (
                [priv_member:cr:private] => -15
            )
    
    )
    Array
    (
        [a] => green
    )
    Array
    (
        [0.5] => cr Object
        (
            [priv_member:private] => 12
        )
    
        [0] => cr Object
        (
            [priv_member:private] => 23
        )
    
    )
    Array
    (
        [0.1] => cr Object
        (
            [priv_member:private] => 9
        )
    
        [0.5] => cr Object
        (
            [priv_member:private] => 12
        )
    
        [0] => cr Object
        (
            [priv_member:private] => 23
        )
    
    )
    Array
    (
        [0.1] => cr Object
        (
            [priv_member:private] => 9
        )
    
        [0.5] => cr Object
        (
            [priv_member:private] => 12
        )
    
        [0] => cr Object
        (
            [priv_member:private] => 23
        )
    
    )
    Array
    (
        [b] => brown
        [c] => blue
        [0] => red
    )
    ------------------------------------
    Array
    (
        [0.1] => cr Object
        (
            [priv_member:private] => 9
        )
    
        [1] => cr Object
        (
            [priv_member:private] => 4
        )
    
        [2] => cr Object
        (
            [priv_member:private] => -15
        )
    
    )
    Array
    (
        [1] => cr Object
        (
            [priv_member:private] => 4
        )
    
        [2] => cr Object
        (
            [priv_member:private] => -15
        )
    
    )
    Array
    (
        [1] => cr Object
        (
            [priv_member:private] => 4
        )
    
        [2] => cr Object
        (
            [priv_member:private] => -15
        )
    
    )
    Array
    (
        [a] => green
    )
    Arrays/array_diff_intersect3.php: SUCCEEDED
    Arrays/array_filter%20false%20entries%20%2322016.php: SUCCEEDED
    Arrays/array_map.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Array
    (
        [0] => Array
            (
                [0] => 1
                [1] => A
                [2] => 0
            )
    
        [1] => Array
            (
                [0] => 2
                [1] => B
                [2] => 0
            )
    
        [2] => Array
            (
                [0] => 3
                [1] => C
                [2] => 
            )
    
    )
    Array
    (
        [0] => 1 A 0
        [1] => 2 B 0
        [2] => 3 C 
    )
    Array
    (
        [A] => 2
        [10] => 3
    )
    Array
    (
        [0] => 1
        [1] => 2
        [2] => 3
    )
    Array
    (
        [0] => A
        [1] => B
        [2] => C
    )
    Array
    (
        [0] => 0
        [1] => 0
    )
    Array
    (
        [A] => 1
        [10] => 2
    )
    Array
    (
        [0] => Array
        (
            [0] => 1
            [1] => A
            [2] => 0
        )
    
        [1] => Array
        (
            [0] => 2
            [1] => B
            [2] => 0
        )
    
        [2] => Array
        (
            [0] => 3
            [1] => C
            [2] => 
        )
    
    )
    Array
    (
        [0] => 1 A 0
        [1] => 2 B 0
        [2] => 3 C 
    )
    Array
    (
        [A] => 2
        [10] => 3
    )
    Array
    (
        [0] => 1
        [1] => 2
        [2] => 3
    )
    Array
    (
        [0] => A
        [1] => B
        [2] => C
    )
    Array
    (
        [0] => x
        [1] => x
    )
    Array
    (
        [A] => 1
        [10] => 2
    )
    Arrays/array_merge_recursive.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Array
    (
        [color] => Array
            (
                [favorite] => Array
                    (
                        [0] => red
                        [1] => green
                    )
    
                [0] => blue
            )
    
        [0] => Array
            (
                [0] => 1
                [1] => 2
                [2] => 3
            )
    
        [q] => Array
            (
                [0] => 
                [1] => 
                [2] => x
            )
    
        [1] => 10
        [2] => Array
            (
                [0] => 4
                [1] => 5
                [2] => 6
            )
    
    )
    Array
    (
        [a] => Array
            (
                [0] => 1
                [1] => 2
                [2] => 3
                [3] => e
            )
    
    )
    Array
    (
        [a] => Array
            (
                [0] => 1
                [1] => 2
                [2] => 3
                [3] => e
            )
    
    )
    Array
    (
        [a] => 1
        [b] => 2
    )
    Array
    (
        [a] => xxx
        [b] => 2
    )
    Array
    (
        [a] => Array
            (
                [a] => Array
                    (
                        [a] => Array
     *RECURSION*
                    )
    
                [0] => 1
                [1] => 2
                [2] => 3
            )
    
    )
    Array
    (
        [a] => Array
            (
                [b] => Array
                    (
                        [0] => 1
                        [1] => 1
                    )
    
                [c] => 1
                [d] => Array
                    (
                        [0] => 2
                        [1] => 3
                    )
    
            )
    
    )
    Array
    (
        [a] => Array
            (
                [0] => 
                [1] => 
            )
    
    )
    Array
    (
        [a] => Array
            (
                [0] => 
                [1] => 
            )
    
    )
    Array
    (
        [color] => Array
        (
            [favorite] => Array
            (
                [0] => red
                [1] => green
            )
    
            [0] => blue
        )
    
        [0] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
        )
    
        [q] => Array
        (
            [0] => x
        )
    
        [1] => 10
        [2] => Array
        (
            [0] => 4
            [1] => 5
            [2] => 6
        )
    
    )
    Array
    (
        [a] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
            [3] => e
        )
    
    )
    Array
    (
        [a] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
            [3] => e
        )
    
    )
    Array
    (
        [a] => 1
        [b] => 2
    )
    Array
    (
        [a] => xxx
        [b] => 2
    )
    Array
    (
        [a] => Array
        (
            [a] => Array
            (
                [a] => Array [recursion]
    
    
            )
    
            [0] => 1
            [1] => 2
            [2] => 3
        )
    
    )
    Array
    (
        [a] => Array
        (
            [b] => Array
            (
                [0] => 1
                [1] => 1
            )
    
            [c] => 1
            [d] => Array
            (
                [0] => 2
                [1] => 3
            )
    
        )
    
    )
    Array
    (
        [a] => Array
        (
        )
    
    )
    Array
    (
        [a] => Array
        (
        )
    
    )
    Arrays/array_reduce1.php: SUCCEEDED
    Arrays/array_reduce2.php: SUCCEEDED
    Arrays/array_slice.php: SUCCEEDED
    Arrays/array_sumprod.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    float(8.3)
    float(0)
    int(6)
    int(6)
    float(4294967297)
    float(9.2233720282648E+18)
    bool(true)
    bool(false)
    float(-7.7)
    float(-38.4)
    int(6)
    int(6)
    int64(4294967297)
    int64(9223372028264841218)
    bool(true)
    bool(true)
    Arrays/array_unshift.php: SUCCEEDED
    Arrays/array_walk.php: SUCCEEDED
    Arrays/array_walk_recursive.php: SUCCEEDED
    Arrays/multisort.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    bool(true)
    Array
    (
        [0] => Array
            (
                [0] => 2
                [1] => 8
                [2] => 2
                [3] => 2
                [4] => 8
                [5] => 8
            )
    
        [1] => Array
            (
                [0] => 7
                [1] => 2
                [2] => 7
                [3] => 4
                [4] => 8
                [5] => 1
            )
    
        [2] => Array
            (
                [0] => 1
                [1] => 4
                [2] => 8
                [3] => 0
                [4] => 6
                [5] => 2
            )
    
        [3] => Array
            (
                [0] => 8
                [1] => 4
                [2] => 1
                [3] => 0
                [4] => 7
                [5] => 1
            )
    
        [4] => Array
            (
                [0] => 20
                [1] => 2
                [2] => 12
                [3] => 11
                [4] => 10
                [5] => 1
            )
    
    )
    Array
    (
        [0] => Array
            (
                [0] => 10
                [1] => 100
                [2] => 100
                [3] => a
            )
    
        [1] => Array
            (
                [0] => 1
                [1] => 3
                [2] => 2
                [3] => 1
            )
    
    )
    Array
    (
        [0] => 10
        [1] => a
        [2] => 100
        [3] => 100
    )
    Array
    (
        [0] => 1
        [1] => 1
        [2] => 2
        [3] => 3
    )
    bool(true)
    Array
    (
        [0] => Array
        (
            [0] => 2
            [1] => 8
            [2] => 2
            [3] => 2
            [4] => 8
            [5] => 8
        )
    
        [1] => Array
        (
            [0] => 7
            [1] => 2
            [2] => 7
            [3] => 4
            [4] => 8
            [5] => 1
        )
    
        [2] => Array
        (
            [0] => 1
            [1] => 4
            [2] => 8
            [3] => 0
            [4] => 6
            [5] => 2
        )
    
        [3] => Array
        (
            [0] => 8
            [1] => 4
            [2] => 1
            [3] => 0
            [4] => 7
            [5] => 1
        )
    
        [4] => Array
        (
            [0] => 20
            [1] => 2
            [2] => 12
            [3] => 11
            [4] => 10
            [5] => 1
        )
    
    )
    Array
    (
        [0] => Array
        (
            [0] => 10
            [1] => 100
            [2] => 100
            [3] => a
        )
    
        [1] => Array
        (
            [0] => 1
            [1] => 3
            [2] => 2
            [3] => 1
        )
    
    )
    Array
    (
        [0] => 10
        [1] => a
        [2] => 100
        [3] => 100
    )
    Array
    (
        [0] => 1
        [1] => 1
        [2] => 2
        [3] => 3
    )
    Arrays/multisort_empty.php: SUCCEEDED
    Arrays/nonarray%20access%20%2322019.php: SUCCEEDED
    Arrays/optimizations.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    3
    4
    5
    a
    b
    c
    
    Warning: strtolower() expects parameter 1 to be string, array given in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 15
    
    cablo
    3
    4
    5
    a
    b
    c
    array
    cablo
    Arrays/recursion.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    f1:
    array(2) {
      ["a"]=>
      array(5) {
        ["a"]=>
        &array(3) {
          ["a"]=>
          &array(3) {
            ["a"]=>
            *RECURSION*
            [0]=>
            string(1) "y"
            [1]=>
            string(1) "z"
          }
          [0]=>
          string(1) "y"
          [1]=>
          string(1) "z"
        }
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        string(1) "x"
      }
      [0]=>
      string(1) "w"
    }
    f2:
    array(1) {
      ["A"]=>
      &array(2) {
        ["a"]=>
        &array(2) {
          ["a"]=>
          *RECURSION*
          [0]=>
          string(1) "z"
        }
        [0]=>
        string(1) "z"
      }
    }
    f3:
    array(2) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) {
          [0]=>
          *RECURSION*
          [1]=>
          string(1) "z"
        }
        [1]=>
        string(1) "z"
      }
      [1]=>
      string(1) "z"
    }
    f4:
    
    Warning: array_merge_recursive(): recursion detected in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 37
    array(1) {
      ["a"]=>
      &array(3) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
      }
    }
    f5:
    array(1) {
      ["a"]=>
      array(6) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        int(1)
        [4]=>
        int(2)
        [5]=>
        int(3)
      }
    }
    f6:
    array(1) {
      ["a"]=>
      array(2) {
        [0]=>
        string(2) "xx"
        [1]=>
        int(2)
      }
    }
    f7:
    array(1) {
      ["a"]=>
      array(1) {
        ["a"]=>
        array(1) {
          ["a"]=>
          &array(1) {
            ["a"]=>
            &array(1) {
              ["a"]=>
              *RECURSION*
            }
          }
        }
      }
    }
    f1:
    array(2) {
      ["a"]=>
      array(5) {
        ["a"]=>
        &array(3) {
          ["a"]=>
          &array(3) [recursion]
          [0]=>
          string(1) "y"
          [1]=>
          string(1) "z"
        }
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        string(1) "x"
      }
      [0]=>
      string(1) "w"
    }
    f2:
    array(1) {
      ["A"]=>
      &array(2) {
        ["a"]=>
        &array(2) [recursion]
        [0]=>
        string(1) "z"
      }
    }
    f3:
    array(2) {
      [0]=>
      &array(2) [recursion]
      [1]=>
      string(1) "z"
    }
    f4:
    array(1) {
      ["a"]=>
      array(6) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        int(1)
        [4]=>
        int(2)
        [5]=>
        int(3)
      }
    }
    f5:
    array(1) {
      ["a"]=>
      array(6) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        int(1)
        [4]=>
        int(2)
        [5]=>
        int(3)
      }
    }
    f6:
    array(1) {
      ["a"]=>
      array(2) {
        [0]=>
        string(2) "xx"
        [1]=>
        int(2)
      }
    }
    f7:
    array(1) {
      ["a"]=>
      &array(1) {
        ["a"]=>
        &array(1) [recursion]
      }
    }
    Arrays/sort.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    sort regular:
    Array
    (
        [0] => 0
        [1] => 1
        [2] => 1
        [3] => 8
        [4] => 0x10
        [5] => 10x
        [6] => 20x
        [7] => ach0
        [8] => add1
        [9] => x10
        [10] => x2
    )
    
    sort numeric:
    Array
    (
        [0] => add1
        [1] => x2
        [2] => 0x10
        [3] => ach0
        [4] => 0
        [5] => x10
        [6] => 1
        [7] => 1
        [8] => 8
        [9] => 10x
        [10] => 20x
    )
    
    sort string:
    Array
    (
        [0] => 0
        [1] => 0x10
        [2] => 1
        [3] => 1
        [4] => 10x
        [5] => 20x
        [6] => 8
        [7] => ach0
        [8] => add1
        [9] => x10
        [10] => x2
    )
    
    sort locale:
    Array
    (
        [0] => 0
        [1] => 0x10
        [2] => 1
        [3] => 1
        [4] => 10x
        [5] => 20x
        [6] => 8
        [7] => ach0
        [8] => add1
        [9] => x10
        [10] => x2
    )
    
    ksort regular:
    Array
    (
        [x] => 8
        [z] => 1
        [0] => x10
        [1] => 10x
        [2b] => 1
        [2] => 20x
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [10a] => 0
    )
    
    ksort numeric:
    Array
    (
        [x] => 8
        [z] => 1
        [0] => x10
        [1] => 10x
        [2b] => 1
        [2] => 20x
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [10a] => 0
    )
    
    ksort string:
    Array
    (
        [0] => x10
        [1] => 10x
        [10a] => 0
        [2] => 20x
        [2b] => 1
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [x] => 8
        [z] => 1
    )
    
    ksort locale:
    Array
    (
        [0] => x10
        [1] => 10x
        [10a] => 0
        [2] => 20x
        [2b] => 1
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [x] => 8
        [z] => 1
    )
    
    asort regular:
    Array
    (
        [10a] => 0
        [2b] => 1
        [z] => 1
        [x] => 8
        [4] => 0x10
        [1] => 10x
        [2] => 20x
        [5] => ach0
        [6] => add1
        [0] => x10
        [3] => x2
    )
    
    asort numeric:
    Array
    (
        [6] => add1
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [10a] => 0
        [0] => x10
        [z] => 1
        [2b] => 1
        [x] => 8
        [1] => 10x
        [2] => 20x
    )
    
    asort string:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [z] => 1
        [2b] => 1
        [1] => 10x
        [2] => 20x
        [x] => 8
        [5] => ach0
        [6] => add1
        [0] => x10
        [3] => x2
    )
    
    asort locale:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [z] => 1
        [2b] => 1
        [1] => 10x
        [2] => 20x
        [x] => 8
        [5] => ach0
        [6] => add1
        [0] => x10
        [3] => x2
    )
    
    rsort regular:
    Array
    (
        [0] => x2
        [1] => x10
        [2] => add1
        [3] => ach0
        [4] => 20x
        [5] => 10x
        [6] => 0x10
        [7] => 8
        [8] => 1
        [9] => 1
        [10] => 0
    )
    
    rsort numeric:
    Array
    (
        [0] => 20x
        [1] => 10x
        [2] => 8
        [3] => 1
        [4] => 1
        [5] => ach0
        [6] => add1
        [7] => 0x10
        [8] => x2
        [9] => x10
        [10] => 0
    )
    
    rsort string:
    Array
    (
        [0] => x2
        [1] => x10
        [2] => add1
        [3] => ach0
        [4] => 8
        [5] => 20x
        [6] => 10x
        [7] => 1
        [8] => 1
        [9] => 0x10
        [10] => 0
    )
    
    rsort locale:
    Array
    (
        [0] => x2
        [1] => x10
        [2] => add1
        [3] => ach0
        [4] => 8
        [5] => 20x
        [6] => 10x
        [7] => 1
        [8] => 1
        [9] => 0x10
        [10] => 0
    )
    
    natsort:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [2b] => 1
        [z] => 1
        [x] => 8
        [1] => 10x
        [2] => 20x
        [5] => ach0
        [6] => add1
        [3] => x2
        [0] => x10
    )
    sort regular:
    Array
    (
        [0] => 0x10
        [1] => 10x
        [2] => 20x
        [3] => ach0
        [4] => add1
        [5] => x10
        [6] => 0
        [7] => x2
        [8] => 1
        [9] => 1
        [10] => 8
    )
    
    sort numeric:
    Array
    (
        [0] => x10
        [1] => 0
        [2] => x2
        [3] => ach0
        [4] => add1
        [5] => 1
        [6] => 1
        [7] => 8
        [8] => 10x
        [9] => 0x10
        [10] => 20x
    )
    
    sort string:
    Array
    (
        [0] => 0
        [1] => 0x10
        [2] => 1
        [3] => 1
        [4] => 10x
        [5] => 20x
        [6] => 8
        [7] => ach0
        [8] => add1
        [9] => x10
        [10] => x2
    )
    
    sort locale:
    Array
    (
        [0] => 0
        [1] => 0x10
        [2] => 1
        [3] => 1
        [4] => 10x
        [5] => 20x
        [6] => 8
        [7] => add1
        [8] => ach0
        [9] => x10
        [10] => x2
    )
    
    ksort regular:
    Array
    (
        [x] => 8
        [z] => 1
        [0] => x10
        [1] => 10x
        [2] => 20x
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [10a] => 0
        [2b] => 1
    )
    
    ksort numeric:
    Array
    (
        [x] => 8
        [z] => 1
        [0] => x10
        [1] => 10x
        [2b] => 1
        [2] => 20x
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [10a] => 0
    )
    
    ksort string:
    Array
    (
        [0] => x10
        [1] => 10x
        [10a] => 0
        [2] => 20x
        [2b] => 1
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [x] => 8
        [z] => 1
    )
    
    ksort locale:
    Array
    (
        [0] => x10
        [1] => 10x
        [10a] => 0
        [2] => 20x
        [2b] => 1
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [x] => 8
        [z] => 1
    )
    
    asort regular:
    Array
    (
        [4] => 0x10
        [1] => 10x
        [2] => 20x
        [5] => ach0
        [6] => add1
        [0] => x10
        [10a] => 0
        [3] => x2
        [z] => 1
        [2b] => 1
        [x] => 8
    )
    
    asort numeric:
    Array
    (
        [0] => x10
        [10a] => 0
        [3] => x2
        [5] => ach0
        [6] => add1
        [z] => 1
        [2b] => 1
        [x] => 8
        [1] => 10x
        [4] => 0x10
        [2] => 20x
    )
    
    asort string:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [z] => 1
        [2b] => 1
        [1] => 10x
        [2] => 20x
        [x] => 8
        [5] => ach0
        [6] => add1
        [0] => x10
        [3] => x2
    )
    
    asort locale:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [z] => 1
        [2b] => 1
        [1] => 10x
        [2] => 20x
        [x] => 8
        [6] => add1
        [5] => ach0
        [0] => x10
        [3] => x2
    )
    
    rsort regular:
    Array
    (
        [0] => 8
        [1] => 1
        [2] => 1
        [3] => x2
        [4] => x10
        [5] => 0
        [6] => add1
        [7] => ach0
        [8] => 20x
        [9] => 10x
        [10] => 0x10
    )
    
    rsort numeric:
    Array
    (
        [0] => 20x
        [1] => 0x10
        [2] => 10x
        [3] => 8
        [4] => 1
        [5] => 1
        [6] => x10
        [7] => 0
        [8] => x2
        [9] => ach0
        [10] => add1
    )
    
    rsort string:
    Array
    (
        [0] => x2
        [1] => x10
        [2] => add1
        [3] => ach0
        [4] => 8
        [5] => 20x
        [6] => 10x
        [7] => 1
        [8] => 1
        [9] => 0x10
        [10] => 0
    )
    
    rsort locale:
    Array
    (
        [0] => x2
        [1] => x10
        [2] => ach0
        [3] => add1
        [4] => 8
        [5] => 20x
        [6] => 10x
        [7] => 1
        [8] => 1
        [9] => 0x10
        [10] => 0
    )
    
    natsort:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [z] => 1
        [2b] => 1
        [x] => 8
        [1] => 10x
        [2] => 20x
        [5] => ach0
        [6] => add1
        [3] => x2
        [0] => x10
    )
    Arrays/usort.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    Array
    (
        [0] => 10
        [1] => 9
        [2] => 8
        [3] => 7
        [4] => 6
        [5] => 5
        [6] => 4
        [7] => 3
        [8] => 2
        [9] => 1
    )
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Array
    (
        [0] => 10
        [1] => 9
        [2] => 8
        [3] => 7
        [4] => 6
        [5] => 5
        [6] => 4
        [7] => 3
        [8] => 2
        [9] => 1
    )
    Arrays/lazy_copy/001.php: SUCCEEDED
    Arrays/lazy_copy/002.php: SUCCEEDED
    Arrays/lazy_copy/003.php: SUCCEEDED
    Arrays/lazy_copy/004.php: SUCCEEDED
    Arrays/lazy_copy/005.php: SUCCEEDED
    Arrays/lazy_copy/006.php: SUCCEEDED
    Bugs/class_incompletepart.php: SUCCEEDED
    Bugs/division-by-zero.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    DIVISION
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 6
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 8
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 10
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 12
    bool(false)
    MODULO
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 16
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 18
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 20
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 22
    bool(false)
    DIVISION
    bool(false)
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt at expression on line 10, column 2.
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt at expression on line 12, column 2.
    bool(false)
    MODULO
    bool(false)
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt at expression on line 20, column 2.
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt at expression on line 22, column 2.
    bool(false)
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt(6,10): warning PHP0150: Division by zero
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt(8,9): warning PHP0150: Division by zero
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt(16,10): warning PHP0150: Division by zero
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt(18,9): warning PHP0150: Division by zero
    
    Bugs/function-in-unknown-class.php: SUCCEEDED
    Bugs/is_a_null_value.php: SUCCEEDED
    Bugs/preg-named-groups.php: SUCCEEDED
    Bugs/preg-replace-advanced.php: SUCCEEDED
    Bugs/preg-replace-range.php: SUCCEEDED
    Bugs/preg-replace.php: SUCCEEDED
    Bugs/preg-this-dynamic.php: FAILED
    Script hung upNo errorsSuccess
    Expected test outputReal script output
    Unhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---> PHP.Core.Debug+AssertException: Assertion failed: 
       at PHP.Core.Debug.Fail(String message)
       at PHP.Core.Debug.Assert(Boolean condition)
       at PHP.Core.RelativePath.ParseCanonical(String relativePath)
       at PHP.Core.Emit.TransientAssemblyBuilder.Build(String sourceCode, SourceCodeDescriptor descriptor, EvalKinds kind, CompilationContext context, ScriptContext scriptContext, DTypeDesc referringType, NamingContext namingContext, Boolean completeSource)
       at PHP.Core.DynamicCode.EvalInternal(String prefix, String code, String suffix, EvalKinds kind, ScriptContext scriptContext, Dictionary`2 localVariables, DObject self, DTypeDesc referringType, SourceCodeDescriptor descriptor, Boolean entireFile, NamingContext namingContext)
       at PHP.Core.DynamicCode.Eval(String code, Boolean synthetic, ScriptContext context, Dictionary`2 definedVariables, DObject self, DTypeDesc referringType, String callerRelativeSourcePath, Int32 line, Int32 column, Int32 containerId, NamingContext namingContext)
       at PHP.Library.PerlRegExp.Evaluator.ReplaceCodeExecute(Match m)
       at System.Text.RegularExpressions.RegexReplacement.Replace(MatchEvaluator evaluator, Regex regex, String input, Int32 count, Int32 startat)
       at System.Text.RegularExpressions.Regex.Replace(String input, MatchEvaluator evaluator, Int32 count)
       at PHP.Library.PerlRegExp.ReplaceInternal(DObject self, Dictionary`2 definedVariables, PerlRegExpConverter converter, PhpCallback callback, String str, Int32 limit, SourceCodeDescriptor sourceCodeDesc, Int32& count)
       at PHP.Library.PerlRegExp.SimpleReplace(DObject self, Dictionary`2 definedVariables, Object pattern, String replacement, PhpCallback callback, Object data, Int32 limit, SourceCodeDescriptor descriptor, Int32& count)
       at PHP.Library.PerlRegExp.Replace(ScriptContext context, DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, PhpCallback callback, Object data, Int32 limit, Int32& count)
       at PHP.Library.PerlRegExp.Replace(ScriptContext context, DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, Object data)
       at PHP.Dynamic.PhpNetClassLibrary.preg_replace(Object , PhpStack )
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <__input.txt>.a.a(ScriptContext ) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt:line 16
       at <__input.txt>.a.<Mediator>(ScriptContext )
       at <__input.txt>.a.a(Object instance, PhpStack stack)
       at <__input.txt>.<Script>.<Main>(ScriptContext <context>, Dictionary`2 <locals>, DObject , DTypeDesc , Boolean ) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt:line 19
       at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)
       at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)
       --- End of inner exception stack trace ---
       at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)
       at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)
       at <Global>.Run(String[] )
    
    Bugs/preg-this-dynamic2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    foo: ahoj
    foo: lidi
    foo: rozkladame
    foo: ahoj
    foo: lidi
    foo: rozkladame
    foo: ahoj
    foo: lidi
    foo: rozkladame
    
    Notice: Undefined variable: this.
    
    Error: Call to a member function foo() on a non-object.
    Bugs/preg-this.php: SUCCEEDED
    Bugs/preg-ungreedy-bugs.php: SUCCEEDED
    Bugs/preg-unkn.php: SUCCEEDED
    Bugs/trigger_error%20line%20number%20%232787.php: SUCCEEDED
    CLR/BaseTypes.php: SUCCEEDED
    CLR/ClrEvent.php: SUCCEEDED
    CLR/ConditionalDecls.php: SUCCEEDED
    CLR/ConditionalDecls2.php: SUCCEEDED
    CLR/foreach.php: SUCCEEDED
    CLR/handle_enum.php: SUCCEEDED
    CLR/Inheritance1.php: FAILED
    Phalanger misbehaviour while compiling [file] sectionSee belowSuccess
    Expected test outputReal script output
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(3,2): error PHP2031: Circular interface inheritance dependency involving 'I4' and 'I1'
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(6,2): (related location)
    
    CLR/Inheritance2.php: FAILED
    Phalanger misbehaviour while compiling [file] sectionSee belowSuccess
    Expected test outputReal script output
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(3,2): error PHP2031: Circular interface inheritance dependency involving 'J4' and 'J1'
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(6,2): (related location)
    
    CLR/Inheritance3.php: FAILED
    Phalanger misbehaviour while compiling [file] sectionSee belowSuccess
    Expected test outputReal script output
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(3,2): error PHP2031: Circular interface inheritance dependency involving 'J5' and 'J5'
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(3,2): (related location)
    
    CLR/Inheritance4.php: FAILED
    Phalanger misbehaviour while compiling [file] sectionSee belowSuccess
    Expected test outputReal script output
    error PHP2007: Internal error! 
    Please, report this bug via http://www.codeplex.com/WorkItem/List.aspx?ProjectName=Phalanger.
    Additional information: 
    Could not load type '<__input.txt>.J`1' from assembly 'Inheritance4_file, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' because it has recursive generic definition.
       at System.Reflection.Emit.TypeBuilder.TermCreateClass(RuntimeModule module, Int32 tk, ObjectHandleOnStack type)
       at System.Reflection.Emit.TypeBuilder.CreateTypeNoLock()
       at System.Reflection.Emit.TypeBuilder.CreateType()
       at PHP.Core.Reflection.PhpType.Bake()
       at PHP.Core.Reflection.ScriptCompilationUnit.Bake()
       at PHP.Core.Reflection.InclusionGraphBuilder.EmitAllUnits(CodeGenerator codeGenerator)
       at PHP.Core.Emit.ScriptAssemblyBuilder.CompileScripts(IEnumerable`1 sourceFiles, String duckPath, String duckNamespace, CompilationContext context)
       at PHP.Core.Emit.ScriptAssemblyBuilder.Build(IEnumerable`1 sourceFiles, CompilationContext context)
       at PHP.Core.ApplicationCompiler.Compile(ApplicationContext applicationContext, CompilerConfiguration config, ErrorSink errorSink, CompilationParameters ps)
    
    
    CLR/Inheritance5.php: SUCCEEDED
    CLR/Inheritance6.php: SUCCEEDED
    CLR/Inheritance7.php: SUCCEEDED
    CLR/Inheritance8.php: SUCCEEDED
    CLR/Inheritance9.php: FAILED
    Phalanger misbehaviour while compiling [file] sectionSee belowSuccess
    Expected test outputReal script output
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(14,2): error PHP1018: Class 'D' doesn't implement abstract method I::f()
    
    CLR/Lambdas.php: FAILED
    Phalanger misbehaviour while compiling [file] sectionSee belowCompile error
    Expected test outputReal script output
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(4,3): error PHP1120: Unknown custom attribute; neither of types 'AttributeUsage' and 'AttributeUsageAttribute' exists
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(17,3): error PHP1120: Unknown custom attribute; neither of types 'MyAttribute' and 'MyAttributeAttribute' exists
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(27,22): error PHP1120: Unknown custom attribute; neither of types 'MyAttribute' and 'MyAttributeAttribute' exists
    
    CLR/NameResolving.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    bool(false)
    bool(true)
    object(Directory)(2)
    {
      ["handle"] => NULL
      ["path"] => NULL
    }
    bool(false)
    
    Error: Class 'Dictionary' not found in D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt at expression on line 12, column 4.
    Compiler/abstracts.php: SUCCEEDED
    Compiler/aliased%20assign%20add.php: SUCCEEDED
    Compiler/assignments.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ---1---1float(-1.5)
    float(2.5)
    float(0.83333333333333)
    int(6)
    int(8)
    ---2---2float(8.8333333333333)
    float(8.8333333333333)
    float(8.8333333333333)
    int(8)
    int(8)
    ---3---3---4---4---5---5array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [1]=>
      array(1) {
        [2]=>
        array(1) {
          [3]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    ---6---6array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "u"
    }
    array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "v"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    ---7---7array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    ---8---8
    ---1---1float(-1.5)
    float(2.5)
    float(0.833333333333333)
    int(6)
    int(8)
    ---2---2float(8.83333333333333)
    float(8.83333333333333)
    float(8.83333333333333)
    int(8)
    int(8)
    ---3---3---4---4---5---5array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [1]=>
      array(1) {
        [2]=>
        array(1) {
          [3]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    ---6---6array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "u"
    }
    array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "v"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    ---7---7array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    ---8---8
    Compiler/assign_in_call.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    g1:
    f(x)
    u(x)
    'x'
    
    g2:
    f(x)
    u(x)
    'b'
    
    g3:
    f(x)
    u(x)
    'b'
    
    g4:
    f(x)
    u(x)
    'b'
    
    g5:
    f()
    u()
    integer(1)
    
    g6:
    f(3)
    u(3)
    integer(3)
    
    g7:
    f(2)
    u(10)
    integer(10)
    
    g8:
    f(1)
    f(1)
    f(1)
    u(1)
    u()
    u(1)
    
    g9:
    known:
    __get(p) = 0
    __set(p,1)
    f(1)
    unknown:
    __get(p) = 1
    __set(p,3)
    u(3)
    
    g10:
    Done.
    g1:
    f(x)
    u(x)
    'x'
    
    g2:
    f(x)
    u(x)
    'b'
    
    g3:
    f(x)
    u(x)
    'b'
    
    g4:
    f(x)
    u(x)
    'b'
    
    g5:
    f()
    u()
    integer(1)
    
    g6:
    f(3)
    u(3)
    integer(3)
    
    g7:
    f(2)
    u(10)
    integer(10)
    
    g8:
    f(1)
    f(1)
    f(1)
    u(1)
    u()
    u(1)
    
    g9:
    known:
    __get(p) = 0
    __set(p,1)
    __get(p) = 1
    f(1)
    unknown:
    __get(p) = 1
    __set(p,3)
    __get(p) = 3
    u(3)
    
    g10:
    Done.
    Compiler/auto_globals_001.php: SUCCEEDED
    Compiler/auto_globals_002.php: SUCCEEDED
    Compiler/auto_globals_003.php: SUCCEEDED
    Compiler/break_in_global_code.php: SUCCEEDED
    Compiler/chaining_test.php: SUCCEEDED
    Compiler/chain_ending_by_string_index.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        string(1) "f"
      }
    }
    array(1) {
      [0]=>
      string(4) "xubu"
    }
    object(C)#1 (1) {
      ["f"]=>
      string(4) "kuxu"
    }
    string(5) "helxo"
    string(5) "helxo"
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        string(1) "f"
      }
    }
    array(1) {
      [0]=>
      string(4) "bubu"
    }
    
    Warning: A string item used as a reference in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt at expression on line 19, column 1.
    object(C)(1) {
      ["f"]=>
      string(4) "kuku"
    }
    
    Warning: A string item used as a reference in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt at expression on line 25, column 1.
    string(5) "hello"
    
    Warning: A string item used as a reference in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt at expression on line 31, column 1.
    string(5) "hello"
    Compiler/continue_in_global_code.php: SUCCEEDED
    Compiler/deep_copy.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array(1) {
      [0]=>
      &array(1) {
        [0]=>
        &array(1) {
          [0]=>
          *RECURSION*
        }
      }
    }
    array(1) {
      [0]=>
      &array(1) {
        [0]=>
        &array(1) {
          [0]=>
          *RECURSION*
        }
      }
    }
    array(2) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) {
          [0]=>
          *RECURSION*
          [1]=>
          int(1)
        }
        [1]=>
        int(1)
      }
      [1]=>
      int(1)
    }
    array(1) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) {
          [0]=>
          *RECURSION*
          [1]=>
          int(1)
        }
        [1]=>
        int(1)
      }
    }
    array(1) {
      [0]=>
      &array(1) [recursion]
    }
    array(1) {
      [0]=>
      &array(1) {
        [0]=>
        &array(1) [recursion]
      }
    }
    array(2) {
      [0]=>
      &array(2) [recursion]
      [1]=>
      int(1)
    }
    array(1) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) [recursion]
        [1]=>
        int(1)
      }
    }
    Compiler/deep_copy_refbox.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Strict Standards: Only variables should be passed by reference in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt on line 42
    array
    {
      0 => integer(1)
    }
    
    Strict Standards: Only variables should be passed by reference in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt on line 45
    array
    {
      0 => integer(1)
    }
    
    Strict Standards: Only variables should be passed by reference in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt on line 49
    array
    {
      0 => integer(1)
    }
    
    Strict Standards: Only variables should be passed by reference in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt on line 52
    array
    {
      0 => integer(1)
    }
    array
    {
      0 => integer(1)
      1 => integer(1)
    }
    array
    {
      0 => integer(1)
      1 => integer(1)
    }
    array
    {
      0 => integer(1)
      1 => integer(1)
    }
    array
    {
      0 => integer(1)
      1 => integer(1)
    }
    Compiler/expr_init.php: SUCCEEDED
    Compiler/foreach1.php: SUCCEEDED
    Compiler/foreach_arrays.php: SUCCEEDED
    Compiler/for_loop.php: SUCCEEDED
    Compiler/function_002.php: SUCCEEDED
    Compiler/function_003.php: SUCCEEDED
    Compiler/function_004.php: SUCCEEDED
    Compiler/function_call.php: SUCCEEDED
    Compiler/func_get_args.php: SUCCEEDED
    Compiler/if_statement.php: SUCCEEDED
    Compiler/indirect_001.php: SUCCEEDED
    Compiler/indirect_002.php: SUCCEEDED
    Compiler/indirect_003.php: SUCCEEDED
    Compiler/indirect_004.php: SUCCEEDED
    Compiler/indirect_005.php: SUCCEEDED
    Compiler/indirect_007.php: SUCCEEDED
    Compiler/indirect_global.php: SUCCEEDED
    Compiler/inheritance.php: SUCCEEDED
    Compiler/inheritance2.php: SUCCEEDED
    Compiler/isset_unset_001.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Testing x in global code:  <br>
    1 <br>
     <br>
    Testing x (object) in optimized function:  <br>
    1 <br>
     <br>
    Testing x (PhpReference) in optimized function:  <br>
    1 <br>
     <br>
    
    Notice: Undefined variable: y in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt on line 29
    Testing $$x (created at runtime) in optimized function:  <br>
    1 <br>
    Testing x in global code:  <br>
    1 <br>
     <br>
    Testing x (object) in optimized function:  <br>
    1 <br>
     <br>
    Testing x (PhpReference) in optimized function:  <br>
    1 <br>
     <br>
    Testing $$x (created at runtime) in optimized function:  <br>
    1 <br>
    Compiler/list%20%2326681.php: SUCCEEDED
    Compiler/new_array_item_assignadd.php: SUCCEEDED
    Compiler/null_hints.php: SUCCEEDED
    Compiler/pure_create_function.php: SUCCEEDED
    Compiler/pure_function_exists.php: SUCCEEDED
    Compiler/pure_math_str.php: SUCCEEDED
    Compiler/static_call.php: SUCCEEDED
    Compiler/switch.php: SUCCEEDED
    Compiler/ternary_ex.php: SUCCEEDED
    Compiler/this%20call.php: SUCCEEDED
    Compiler/typehint_check.php: SUCCEEDED
    Compiler/__call.php: SUCCEEDED
    Compiler/Inclusions/include2.php: SUCCEEDED
    Compiler/Inclusions/include3.php: SUCCEEDED
    Compiler/Inclusions/include6.php: SUCCEEDED
    Compiler/Inclusions/include_test.php: SUCCEEDED
    Compiler/Inclusions/script.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t01.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t02.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t03.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t04.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t05.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t08.php: SUCCEEDED
    Compiler/PseudoConst/parent.php: SUCCEEDED
    Compiler/PseudoConst/parent2.php: SUCCEEDED
    Compiler/PseudoConst/self.php: SUCCEEDED
    Compiler/PseudoConst/t01.php: SUCCEEDED
    Compiler/PseudoConst/t02.php: SUCCEEDED
    Compiler/PseudoConst/t03.php: SUCCEEDED
    Compiler/PseudoConst/t04.php: SUCCEEDED
    Compiler/PseudoConst/t05.php: SUCCEEDED
    Compiler/PseudoConst/t06.php: SUCCEEDED
    Compiler/PseudoConst/t07.php: SUCCEEDED
    Compiler/PseudoConst/t08.php: SUCCEEDED
    Compiler/PseudoConst/t09.php: SUCCEEDED
    Compiler/PseudoConst/t10.php: SUCCEEDED
    Compiler/PseudoConst/t11.php: SUCCEEDED
    Compiler/PseudoConst/_class_.php: SUCCEEDED
    Compiler/PseudoConst/_dir_.php: SUCCEEDED
    Compiler/PseudoConst/_function_.php: SUCCEEDED
    Compiler/References/array_argument.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(2)
        [1]=>
        int(3)
      }
    }
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    Compiler/References/array_local.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(2)
        [1]=>
        int(3)
      }
    }
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    Compiler/References/array_ret_argument.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(2)
        [1]=>
        int(3)
      }
    }
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    Compiler/References/array_ret_argument2.php: SUCCEEDED
    Compiler/References/deepcopy.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <br/><br/>globalobjects: array(2) {
      [0]=>
      int(1)
      [1]=>
      int(7)
    }
    <br/><br/>globalobjects: array(2) {
      [0]=>
      int(1)
      [1]=>
      &int(7)
    }
    Compiler/References/explicitclear.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Construyendo Y
    call foo12Destruyendo Y
    3object(X)#1 (2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      int(54)
    }
    array(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      string(10) "Init Value"
    }
    x: object(X)#1 (2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      int(1004)
    }
    <br/>checkpoint array(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      int(54)
    }
    Construyendo Y
    call foo123object(X)(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      &int(54)
    }
    array(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      &int(54)
    }
    x: object(X)(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      &int(1004)
    }
    <br/>checkpoint array(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      &int(1004)
    }
    Destruyendo Y
    Compiler/References/field_argument.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: int(7)
    <br/><br/>checkpoint array(1) {
      ["objects"]=>
      int(8)
    }
    x: int(7)
    <br/><br/>checkpoint array(1) {
      ["objects"]=>
      &int(7)
    }
    Compiler/References/field_local.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: object(X)#1 (1) {
      ["objects"]=>
      int(25)
    }
    <br/>checkpoint array(1) {
      ["objects"]=>
      int(7)
    }
    x: object(X)(1) {
      ["objects"]=>
      &int(25)
    }
    <br/>checkpoint array(1) {
      ["objects"]=>
      &int(25)
    }
    Compiler/References/ref_arrayitem.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(2)
        [1]=>
        int(3)
      }
    }
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    Compiler/References/ref_reasign.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    object(X)#1 (2) {
      ["objects"]=>
      int(54)
      ["objects2"]=>
      &int(222)
    }
    array(2) {
      ["objects"]=>
      int(7)
      ["objects2"]=>
      &int(222)
    }
    x: object(X)#1 (2) {
      ["objects"]=>
      int(1004)
      ["objects2"]=>
      int(777)
    }
    <br/>checkpoint array(2) {
      ["objects"]=>
      int(54)
      ["objects2"]=>
      int(222)
    }
    object(X)(2) {
      ["objects"]=>
      &int(54)
      ["objects2"]=>
      &int(222)
    }
    array(2) {
      ["objects"]=>
      &int(54)
      ["objects2"]=>
      &int(222)
    }
    x: object(X)(2) {
      ["objects"]=>
      &int(1004)
      ["objects2"]=>
      &int(777)
    }
    <br/>checkpoint array(2) {
      ["objects"]=>
      &int(1004)
      ["objects2"]=>
      &int(777)
    }
    Compiler/Unreachable/t13.php: SUCCEEDED
    Compiler/Unset/calluserfunc.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Warning: call_user_func() expects parameter 1 to be a valid callback, function 'unset' not found or invalid function name in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\Unset\__input.txt on line 3
    int(10)
    Error: call_user_func(): Call to undefined function: 'unset' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\Unset\__input.txt at expression on line 3, column 1.
    Compiler/Unset/issetref2.php: SUCCEEDED
    Compiler/Unset/unsetglobal.php: SUCCEEDED
    Compiler/Unset/unsetglobal2.php: SUCCEEDED
    Compiler/Unset/unsetindirect.php: SUCCEEDED
    Compiler/Unset/unsetproblem.php: SUCCEEDED
    Compiler/Unset/unsetref.php: SUCCEEDED
    Compiler/Unset/unsetref2.php: SUCCEEDED
    Compiler/Unset/unsetref3.php: SUCCEEDED
    Compiler/Unset/__unset.php: SUCCEEDED
    DateTime/strftime.php: SUCCEEDED
    DateTime/strtotime1.php: SUCCEEDED
    DateTime/strtotime2.php: SUCCEEDED
    DateTime/strtotime3.php: SUCCEEDED
    DateTime/strtotime4.php: SUCCEEDED
    DateTime/strtotime5.php: SUCCEEDED
    DateTime/time.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    -189388800:-189475200 - 86400
    1964-01-01T00:00:00+0000
    1963-12-31T00:00:00+0000
    1964-06-06
    1963-06-06
    1964-01-06
    1133305200
    -189388800:-189475200 - 86400
    1964-01-01T00:00:00+0000
    1963-12-31T00:00:00+0000
    1964-06-06
    1963-06-06
    1964-01-06
    DateTime/timezones1.php: SUCCEEDED
    DLR/classContext.php: SUCCEEDED
    DLR/classContext1.php: SUCCEEDED
    DLR/classContext2.php: SUCCEEDED
    DLR/restrictions%20generics.php: SUCCEEDED
    DLR/restrictions.php: SUCCEEDED
    DLR/targets.php: SUCCEEDED
    FileSystem/basename.php: SUCCEEDED
    FileSystem/basename2.php: SUCCEEDED
    FileSystem/chdir.php: SUCCEEDED
    FileSystem/csv.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    --- write ---
    72
    24
    44
    2
    6
    
    --- read ---
    "hello\n
    world";"aaa""bbb""ccc";"blah blah;";none;"tab\ttab";"space space"\n
    hh'ee;"ss\nsadasdasd s"\n
    """""""""""""""""""""";"""";;"""""";"xxx"""\n
    x\n
    "x\y"\n
    --- write ---
    72
    24
    44
    2
    6
    
    --- read ---
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    FileSystem/date.php: SUCCEEDED
    FileSystem/date2.php: SUCCEEDED
    FileSystem/date3.php: SUCCEEDED
    FileSystem/date_unix.php: SUCCEEDED
    FileSystem/dirname.php: SUCCEEDED
    FileSystem/dirname2.php: SUCCEEDED
    FileSystem/disk_free_space.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    692 GB
    Drive C: 38 GB
    Drive D: 692 GB
    Drive E: 
    Warning: disk_free_space(): The device is not ready.
     in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 14
    false
    Drive F: 
    Warning: disk_free_space(): The device is not ready.
     in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 14
    false
    692 GB
    Drive C: 38 GB
    Drive D: 692 GB
    Drive E: false
    Drive F: false
    FileSystem/disk_total_space.php: SUCCEEDED
    FileSystem/fgets.php: SUCCEEDED
    FileSystem/file.php: SUCCEEDED
    FileSystem/filesize.php: SUCCEEDED
    FileSystem/file_exists.php: SUCCEEDED
    FileSystem/file_get_contents.php: SUCCEEDED
    FileSystem/fpassthru.php: SUCCEEDED
    FileSystem/fread.php: SUCCEEDED
    FileSystem/fread1.php: SUCCEEDED
    FileSystem/fread2.php: SUCCEEDED
    FileSystem/fseek.php: SUCCEEDED
    FileSystem/fsockopen.php: SUCCEEDED
    FileSystem/ftell.php: SUCCEEDED
    FileSystem/is_dir.php: SUCCEEDED
    FileSystem/is_executable.php: SUCCEEDED
    FileSystem/pathinfo.php: SUCCEEDED
    FileSystem/popen.php: SUCCEEDED
    FileSystem/readdir.php: SUCCEEDED
    FileSystem/readfile.php: SUCCEEDED
    FileSystem/readline.php: SUCCEEDED
    FileSystem/realpath.php: SUCCEEDED
    FileSystem/scandir.php: SUCCEEDED
    FileSystem/stat.php: SUCCEEDED
    FileSystem/stream_context_set_option.php: SUCCEEDED
    FileSystem/stream_copy_to_stream.php: SUCCEEDED
    FileSystem/stream_copy_to_stream2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <p>Read <b>rb</b>, Write <b>wb</b>
    
    
    COPIED: <b>29465</b>
    <p>Read <b>rb</b>, Write <b>wt</b>
    
    
    COPIED: <b>29465</b>
    <p>Read <b>rb</b>, Write <b>wb</b>
    
    
    COPIED: <b>29447</b>
    <p>Read <b>rb</b>, Write <b>wt</b>
    
    
    COPIED: <b>29447</b>
    FileSystem/testinc.php: SUCCEEDED
    FileSystem/touch.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Warning: touch(): Utime failed: Bad file descriptor in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 8
    Sorry Could Not change modification time of touch.txt
    Warning: touch(): Utime failed: Bad file descriptor in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 14
    
    Warning: touch(): Utime failed: Bad file descriptor in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 16
    
    Warning: touch(): Utime failed: Bad file descriptor in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 17
    <pre>[ARRAY
      [INT (0)] => [STRING: "May 10, 2011; [00:50:21] (00h) ctime test.txt (1304981421)"]
      [INT (1)] => [STRING: "February 19, 2011; [22:06:05] (22h) mtime test.txt (1298149565)"]
      [INT (2)] => [STRING: "May 10, 2011; [00:50:21] (00h) ctime touch.txt (1304981421)"]
      [INT (3)] => [STRING: "February 19, 2011; [22:06:05] (22h) mtime touch.txt (1298149565)"]
      [INT (4)] => [STRING: "May 10, 2011; [00:50:21] (00h) atime touch.txt (1304981421)"]
      [INT (5)] => [STRING: "February 19, 2011; [22:06:05] (22h) mtime summer.txt (1298149565)"]
      [INT (6)] => [STRING: "February 19, 2011; [22:06:05] (22h) mtime winter.txt (1298149565)"]
    ]</pre>
    Warning: touch(): Unable to access (D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\touch.txt): Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 8, column 5.
    Sorry Could Not change modification time of touch.txt
    Warning: touch(): Unable to access (D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\touch.txt): Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 14, column 1.
    
    Warning: touch(): Unable to access (D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\winter.txt): Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 16, column 1.
    
    Warning: touch(): Unable to access (D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\summer.txt): Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 17, column 1.
    <pre>[ARRAY
      [INT (0)] => [STRING: "May 10, 2011; [00:50:21] (00h) ctime test.txt (1304981421)"]
      [INT (1)] => [STRING: "February 19, 2011; [23:06:05] (23h) mtime test.txt (1298153165)"]
      [INT (2)] => [STRING: "May 10, 2011; [00:50:21] (00h) ctime touch.txt (1304981421)"]
      [INT (3)] => [STRING: "February 19, 2011; [23:06:05] (23h) mtime touch.txt (1298153165)"]
      [INT (4)] => [STRING: "May 10, 2011; [00:50:21] (00h) atime touch.txt (1304981421)"]
      [INT (5)] => [STRING: "February 19, 2011; [23:06:05] (23h) mtime summer.txt (1298153165)"]
      [INT (6)] => [STRING: "February 19, 2011; [23:06:05] (23h) mtime winter.txt (1298153165)"]
    ]</pre>
    FileSystem/tar/tar_test.php: SUCCEEDED
    FileSystem/zip/zip.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    correct
    Error: Call to undefined function: 'zip_open' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\zip\__input.txt at expression on line 3, column 1.
    Math/abs.php: SUCCEEDED
    Math/atan2.php: SUCCEEDED
    Math/base_convert.php: SUCCEEDED
    Math/bindec.php: SUCCEEDED
    Math/ceil.php: SUCCEEDED
    Math/cos.php: SUCCEEDED
    Math/decbin.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <pre>
    [double: 2294967295]
    10001000110010100110101111111111
    [double: 4294967296]
    0
    [double: 8589934590]
    11111111111111111111111111111110
    [double: 8589934590]
    11111111111111111111111111111110
    [double: 8589934591]
    11111111111111111111111111111111
    [Int: 1000.000.000.000]
    11010100101001010001000000000000
    <hr>(-1, -5435, 2.14, 0, 26)
    11111111111111111111111111111111
    11111111111111111110101011000101
    10
    0
    11010 
    </pre>
    <pre>
    [???: 2294967295]
    10001000110010100110101111111111
    [???: 4294967296]
    0
    [???: 8589934590]
    11111111111111111111111111111110
    [???: 8589934590]
    11111111111111111111111111111110
    [???: 8589934591]
    11111111111111111111111111111111
    [Int: 1000.000.000.000]
    11010100101001010001000000000000
    <hr>(-1, -5435, 2.14, 0, 26)
    11111111111111111111111111111111
    11111111111111111110101011000101
    10
    0
    11010 
    </pre>
    Math/dechex.php: SUCCEEDED
    Math/decoct.php: SUCCEEDED
    Math/deg2rad.php: SUCCEEDED
    Math/exp.php: SUCCEEDED
    Math/floor.php: SUCCEEDED
    Math/fmod.php: SUCCEEDED
    Math/hexdec.php: SUCCEEDED
    Math/max.php: SUCCEEDED
    Math/min.php: SUCCEEDED
    Math/modulo_warn.php: SUCCEEDED
    Math/octdec.php: SUCCEEDED
    Math/pow.php: SUCCEEDED
    Math/rad2deg.php: SUCCEEDED
    Math/round.php: SUCCEEDED
    Math/sin.php: SUCCEEDED
    Math/sqrt.php: SUCCEEDED
    Math/tan.php: SUCCEEDED
    Math/uniqid.php: SUCCEEDED
    Misc/calendar_extension.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0
    0
    2375840
    0
    14
    32
    2
    There are 31 days in August 2003
    There are 28 days in February 2003
    There are 29 days in February 2004
    There are 31 days in December 2034
    1748326
    1748324
    374867
    0
    322f32322f35373633
    ebe120e7f9e5ef20e4faf9f1e2
    ebe120e7f9e5ef20e427faf9f1e2
    ebe120e7f9e5ef20e420e0ecf4e9ed20faf9f1e2
    ebe120e7f9e5ef20e42720e0ecf4e9ed20faf9f1e2
    eb22e120e7f9e5ef20e4faf9f122e2
    e12720e7f9e5ef20e4faf9f122e2
    e12720e7f9e5ef20e427faf9f122e2
    e12720e7f9e5ef20e420e0ecf4e9ed20faf9f122e2
    e12720e7f9e5ef20e42720e0ecf4e9ed20faf9f122e2
    Error: Call to undefined function: 'frenchtojd' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt at expression on line 2, column 1.
    Misc/dir_read.php: SUCCEEDED
    Misc/fgetcsv%20%2327492.php: SUCCEEDED
    Misc/hash%20functions%20%2326667.php: SUCCEEDED
    Misc/ini_parse.php: SUCCEEDED
    Misc/json%20%2327838.php: SUCCEEDED
    Misc/lexer.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    T_INLINE_HTML
    311 '\r\n'
    T_OPEN_TAG
    368 '&lt;?'
    T_WHITESPACE
    371 ' \r\n\r\n'
    T_FINAL
    345 'final'
    T_WHITESPACE
    371 ' '
    T_CLASS
    353 'class'
    T_WHITESPACE
    371 ' '
    T_STRING
    307 'A'
    T_WHITESPACE
    371 ' \r\n'
        '{'
    T_WHITESPACE
    371 ' \r\n  '
    T_FUNCTION
    334 'function'
    T_WHITESPACE
    371 ' '
    T_STRING
    307 '__get'
        '('
    T_VARIABLE
    309 '$x'
        ')'
    T_WHITESPACE
    371 ' \r\n  '
        '{'
    T_WHITESPACE
    371 ' \r\n    '
    T_VARIABLE
    309 '$x'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_START_HEREDOC
    372 '&lt;&lt;&lt;EOOOOOOOOOOOOOOT\r\n'
    T_ENCAPSED_AND_WHITESPACE
    314 '         &lt;&lt;&lt;hello\r\nEOOOOOOOOOOOOOOt;\r\nEOOOOOOOOOOOOOT;\r\n'
    T_END_HEREDOC
    373 'EOOOOOOOOOOOOOOT'
        ';'
    T_WHITESPACE
    371 '\r\n\r\n    '
        '$'
    T_VARIABLE
    309 '$y'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_ARRAY
    360 'array'
    T_WHITESPACE
    371 ' '
        '('
    T_LNUMBER
    305 '1'
        ','
    T_DNUMBER
    306 '100000000000000'
        ','
    T_DNUMBER
    306 '999999999999999999999999999999999'
        ','
    T_STRING
    307 'true'
        ','
    T_STRING
    307 'false'
        ')'
        ';'
    T_WHITESPACE
    371 '\r\n    '
        '$'
        '{'
        '&quot;'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
    T_DOLLAR_OPEN_CURLY_BRACES
    374 '${'
        '$'
        '{'
    T_CONSTANT_ENCAPSED_STRING
    315 '&quot;xxx&quot;'
        '}'
        '}'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
        '&quot;'
        '}'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_LNUMBER
    305 '1'
        ';'
    T_WHITESPACE
    371 '\r\n    '
        '$'
        '{'
        '&quot;'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
    T_DOLLAR_OPEN_CURLY_BRACES
    374 '${'
        '$'
        '{'
        '&quot;'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
    T_VARIABLE
    309 '$x'
    T_ENCAPSED_AND_WHITESPACE
    314 '-&gt;$$'
    T_VARIABLE
    309 '$x0xx'
        '&quot;'
        '}'
        '}'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
        '&quot;'
        '}'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_LNUMBER
    305 '1'
        ';'
    T_WHITESPACE
    371 '\r\n  '
        '}'
    T_WHITESPACE
    371 ' \r\n'
        '}'
    T_WHITESPACE
    371 '\r\n\r\n'
    T_CLOSE_TAG
    370 '?&gt;'
    '
    '
        '&lt;?'
        ' 
    
    '
        'final'
        ' '
        'class'
        ' '
        'A'
        ' 
    '
        '{'
        ' 
      '
        'function'
        ' '
    259
    259 '
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt at expression on line 10, column 7.
    '
        '('
        '$x'
        ')'
        ' 
      '
        '{'
        ' 
        '
        '$x'
        ' '
        '='
        ' '
        '&lt;&lt;&lt;EOOOOOOOOOOOOOOT
    '
        '         &lt;&lt;&lt;'
        'hello'
        '
    '
        'EOOOOOOOOOOOOOOt;
    '
        'EOOOOOOOOOOOOOT;
    '
        'EOOOOOOOOOOOOOOT'
        ';'
        '
    
        '
        '$'
        '$y'
        ' '
        '='
        ' '
        'array'
        ' '
        '('
        '1'
        ','
        '100000000000000'
        ','
        '999999999999999999999999999999999'
        ','
    256
    256 '
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt at expression on line 10, column 7.
    '
        ','
    257
    257 '
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt at expression on line 10, column 7.
    '
        ')'
        ';'
        '
        '
        '$'
        '{'
        '&quot;'
        'x'
        '${'
        '$'
        '{'
    -29
    -29 '
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt at expression on line 10, column 7.
    '
        '}'
        '}'
        'x'
        '&quot;'
        '}'
        ' '
        '='
        ' '
        '1'
        ';'
        '
        '
        '$'
        '{'
        '&quot;'
        'x'
        '${'
        '$'
        '{'
        '&quot;'
        'x'
        '$x'
        '-&gt;'
        '$'
        '$'
        '$x0xx'
        '&quot;'
        '}'
        '}'
        'x'
        '&quot;'
        '}'
        ' '
        '='
        ' '
        '1'
        ';'
        '
      '
        '}'
        ' 
    '
        '}'
        '
    
    '
        '?&gt;'
    Misc/locale.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string(1) "C"
    double(1.54)
    double(Infinity)
    654564.145400
    Sat Saturday Apr April
    --------------
    string(19) "Danish_Denmark.1252"
    double(1.54)
    double(Infinity)
    654564,145400
    lo lordag apr april
    --------------
    string(25) "Czech_Czech Republic.1250"
    double(1.54)
    double(Infinity)
    654564,145400
    so sobota IV duben
    --------------
    string(1) "C"
    float(1.54)
    float(Infinity)
    654564.145400
    Sat Saturday Apr April
    --------------
    string(19) "Danish_Denmark.1252"
    float(1.54)
    float(Infinity)
    654564,145400
    lo lordag apr april
    --------------
    string(25) "Czech_Czech Republic.1250"
    float(1.54)
    float(Infinity)
    654564,145400
    so sobota 4 duben
    --------------
    Misc/output2.php: SUCCEEDED
    Misc/parse_url%20%2327377.php: SUCCEEDED
    Misc/parse_url_at_bug.php: SUCCEEDED
    Misc/stack_trace.php: FAILED
    Script hung upNo errorsSuccess
    Expected test outputReal script output
    Unhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---> System.IndexOutOfRangeException: Index was outside the bounds of the array.
       at PHP.Core.PhpStackFrame..ctor(ScriptContext context, StackFrame frame, FrameKinds kind)
       at PHP.Core.PhpStackTrace..ctor(ScriptContext context, StackTrace clrTrace)
       at PHP.Core.PhpStackTrace..ctor(ScriptContext context, Int32 skipFrames)
       at PHP.Library.Errors.Backtrace()
       at <stack_trace.inc>.<Script>.j(ScriptContext <context>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\stack_trace.inc:line 11
       at <stack_trace.inc>.<Script>.j(Object instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <stack_trace.inc>.<Script>.i(ScriptContext <context>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\stack_trace.inc:line 6
       at <stack_trace.inc>.<Script>.i(Object instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <^0>.<Global>.<?0>.h(ScriptContext <context>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt:line 14
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack, DTypeDesc caller)
       at PHP.Core.PhpCallback.InvokeInternal(Object[] args)
       at PHP.Core.PhpCallback.Invoke(Object[] args)
       at PHP.Library.PhpArrays.Map(DTypeDesc caller, PhpCallback map, PhpArray[] arrays)
       at <__input.txt>.<Script>.<Lambda>(ScriptContext <context>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt:line 4
       at <__input.txt>.<Script>.<Lambda>(Object instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <__input.txt>.<Script>.f(ScriptContext <context>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt:line 6
       at <__input.txt>.<Script>.f(Object instance, PhpStack stack)
       at <__input.txt>.<Script>.<Main>(ScriptContext <context>, Dictionary`2 <locals>, DObject , DTypeDesc , Boolean ) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt:line 18
       at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)
       at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)
       --- End of inner exception stack trace ---
       at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)
       at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)
       at <Global>.Run(String[] )
    
    Misc/str_getcsv%20%2326691.php: SUCCEEDED
    Misc/tokens.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    T_REQUIRE_ONCE = 258,
    T_REQUIRE = 259,
    T_EVAL = 260,
    T_INCLUDE_ONCE = 261,
    T_INCLUDE = 262,
    T_LOGICAL_OR = 263,
    T_LOGICAL_XOR = 264,
    T_LOGICAL_AND = 265,
    T_PRINT = 266,
    T_SR_EQUAL = 267,
    T_SL_EQUAL = 268,
    T_XOR_EQUAL = 269,
    T_OR_EQUAL = 270,
    T_AND_EQUAL = 271,
    T_MOD_EQUAL = 272,
    T_CONCAT_EQUAL = 273,
    T_DIV_EQUAL = 274,
    T_MUL_EQUAL = 275,
    T_MINUS_EQUAL = 276,
    T_PLUS_EQUAL = 277,
    T_BOOLEAN_OR = 278,
    T_BOOLEAN_AND = 279,
    T_IS_NOT_IDENTICAL = 280,
    T_IS_IDENTICAL = 281,
    T_IS_NOT_EQUAL = 282,
    T_IS_EQUAL = 283,
    T_IS_GREATER_OR_EQUAL = 284,
    T_IS_SMALLER_OR_EQUAL = 285,
    T_SR = 286,
    T_SL = 287,
    T_INSTANCEOF = 288,
    T_UNSET_CAST = 289,
    T_BOOL_CAST = 290,
    T_OBJECT_CAST = 291,
    T_ARRAY_CAST = 292,
    T_STRING_CAST = 293,
    T_DOUBLE_CAST = 294,
    T_INT_CAST = 295,
    T_DEC = 296,
    T_INC = 297,
    T_CLONE = 298,
    T_NEW = 299,
    T_EXIT = 300,
    T_IF = 301,
    T_ELSEIF = 302,
    T_ELSE = 303,
    T_ENDIF = 304,
    T_LNUMBER = 305,
    T_DNUMBER = 306,
    T_STRING = 307,
    T_STRING_VARNAME = 308,
    T_VARIABLE = 309,
    T_NUM_STRING = 310,
    T_INLINE_HTML = 311,
    T_CHARACTER = 312,
    T_BAD_CHARACTER = 313,
    T_ENCAPSED_AND_WHITESPACE = 314,
    T_CONSTANT_ENCAPSED_STRING = 315,
    T_ECHO = 316,
    T_DO = 317,
    T_WHILE = 318,
    T_ENDWHILE = 319,
    T_FOR = 320,
    T_ENDFOR = 321,
    T_FOREACH = 322,
    T_ENDFOREACH = 323,
    T_DECLARE = 324,
    T_ENDDECLARE = 325,
    T_AS = 326,
    T_SWITCH = 327,
    T_ENDSWITCH = 328,
    T_CASE = 329,
    T_DEFAULT = 330,
    T_BREAK = 331,
    T_CONTINUE = 332,
    T_GOTO = 333,
    T_FUNCTION = 334,
    T_CONST = 335,
    T_RETURN = 336,
    T_TRY = 337,
    T_CATCH = 338,
    T_THROW = 339,
    T_USE = 340,
    T_GLOBAL = 341,
    T_PUBLIC = 342,
    T_PROTECTED = 343,
    T_PRIVATE = 344,
    T_FINAL = 345,
    T_ABSTRACT = 346,
    T_STATIC = 347,
    T_VAR = 348,
    T_UNSET = 349,
    T_ISSET = 350,
    T_EMPTY = 351,
    T_HALT_COMPILER = 352,
    T_CLASS = 353,
    T_INTERFACE = 354,
    T_EXTENDS = 355,
    T_IMPLEMENTS = 356,
    T_OBJECT_OPERATOR = 357,
    T_DOUBLE_ARROW = 358,
    T_LIST = 359,
    T_ARRAY = 360,
    T_CLASS_C = 361,
    T_METHOD_C = 362,
    T_FUNC_C = 363,
    T_LINE = 364,
    T_FILE = 365,
    T_COMMENT = 366,
    T_DOC_COMMENT = 367,
    T_OPEN_TAG = 368,
    T_OPEN_TAG_WITH_ECHO = 369,
    T_CLOSE_TAG = 370,
    T_WHITESPACE = 371,
    T_START_HEREDOC = 372,
    T_END_HEREDOC = 373,
    T_DOLLAR_OPEN_CURLY_BRACES = 374,
    T_CURLY_OPEN = 375,
    T_PAAMAYIM_NEKUDOTAYIM = 376,
    T_DOUBLE_COLON = 376,
    T_NAMESPACE = 377,
    T_NS_C = 378,
    T_DIR = 379,
    T_NS_SEPARATOR = 380,
    T_INCLUDE = 129,
    T_INCLUDE_ONCE = 130,
    T_EVAL = 131,
    T_REQUIRE = 132,
    T_REQUIRE_ONCE = 133,
    T_LOGICAL_OR = 136,
    T_LOGICAL_XOR = 137,
    T_LOGICAL_AND = 138,
    T_PRINT = 139,
    T_PLUS_EQUAL = 140,
    T_MINUS_EQUAL = 141,
    T_MUL_EQUAL = 142,
    T_DIV_EQUAL = 143,
    T_CONCAT_EQUAL = 144,
    T_MOD_EQUAL = 145,
    T_AND_EQUAL = 146,
    T_OR_EQUAL = 147,
    T_XOR_EQUAL = 148,
    T_SL_EQUAL = 149,
    T_SR_EQUAL = 150,
    T_BOOLEAN_OR = 151,
    T_BOOLEAN_AND = 152,
    T_IS_EQUAL = 153,
    T_IS_NOT_EQUAL = 154,
    T_IS_IDENTICAL = 155,
    T_IS_NOT_IDENTICAL = 156,
    T_IS_SMALLER_OR_EQUAL = 157,
    T_IS_GREATER_OR_EQUAL = 158,
    T_SL = 159,
    T_SR = 160,
    T_INC = 161,
    T_DEC = 162,
    T_NEW = 164,
    T_INSTANCEOF = 165,
    T_CLONE = 167,
    T_LNUMBER = 168,
    T_DNUMBER = 170,
    T_STRING = 171,
    T_STRING_VARNAME = 172,
    T_VARIABLE = 173,
    T_NUM_STRING = 174,
    T_INLINE_HTML = 175,
    T_CHARACTER = 176,
    T_BAD_CHARACTER = 177,
    T_ENCAPSED_AND_WHITESPACE = 178,
    T_CONSTANT_ENCAPSED_STRING = 179,
    T_EXIT = 180,
    T_IF = 181,
    T_ELSEIF = 182,
    T_ELSE = 183,
    T_ENDIF = 184,
    T_ECHO = 185,
    T_DO = 186,
    T_WHILE = 187,
    T_ENDWHILE = 188,
    T_FOR = 189,
    T_ENDFOR = 190,
    T_FOREACH = 191,
    T_ENDFOREACH = 192,
    T_AS = 193,
    T_SWITCH = 194,
    T_ENDSWITCH = 195,
    T_CASE = 196,
    T_DEFAULT = 197,
    T_BREAK = 198,
    T_CONTINUE = 199,
    T_FUNCTION = 200,
    T_CONST = 201,
    T_RETURN = 202,
    T_GLOBAL = 203,
    T_STATIC = 204,
    T_VAR = 205,
    T_UNSET = 206,
    T_ISSET = 207,
    T_EMPTY = 208,
    T_CLASS = 209,
    T_EXTENDS = 210,
    T_OBJECT_OPERATOR = 211,
    T_DOUBLE_ARROW = 212,
    T_LIST = 213,
    T_ARRAY = 214,
    T_CLASS_C = 215,
    T_METHOD_C = 216,
    T_FUNC_C = 217,
    T_LINE = 218,
    T_FILE = 219,
    T_DIR = 220,
    T_COMMENT = 221,
    T_DOC_COMMENT = 222,
    T_OPEN_TAG = 227,
    T_OPEN_TAG_WITH_ECHO = 228,
    T_CLOSE_TAG = 229,
    T_WHITESPACE = 230,
    T_START_HEREDOC = 231,
    T_END_HEREDOC = 232,
    T_DOLLAR_OPEN_CURLY_BRACES = 233,
    T_CURLY_OPEN = 234,
    T_DOUBLE_COLON = 235,
    T_PAAMAYIM_NEKUDOTAYIM = 235,
    T_GOTO = 237,
    T_TRY = 238,
    T_CATCH = 239,
    T_THROW = 240,
    T_INTERFACE = 241,
    T_IMPLEMENTS = 242,
    T_ABSTRACT = 243,
    T_FINAL = 244,
    T_PRIVATE = 245,
    T_PROTECTED = 246,
    T_PUBLIC = 247,
    T_BOOL_CAST = 287,
    T_INT_CAST = 290,
    T_DOUBLE_CAST = 296,
    T_STRING_CAST = 299,
    T_ARRAY_CAST = 302,
    T_OBJECT_CAST = 303,
    T_UNSET_CAST = 304,
    T_HALT_COMPILER = 351,
    Misc/user_error_handlers.php: SUCCEEDED
    Objects/accessing%20property%20line%20number%20%2326052.php: SUCCEEDED
    Objects/conditional1.php: SUCCEEDED
    Objects/conditional2.php: SUCCEEDED
    Objects/conditional_base_class.php: SUCCEEDED
    Objects/constant_test.php: SUCCEEDED
    Objects/evaled_parent.php: SUCCEEDED
    Objects/getter_setter_bug28444.php: SUCCEEDED
    Objects/instanceof.php: SUCCEEDED
    Objects/new_via_unknown_ctor.php: SUCCEEDED
    Objects/object_creation_test.php: SUCCEEDED
    Objects/overrides%20%231285.php: SUCCEEDED
    Objects/static_field_test.php: SUCCEEDED
    Objects/static_inheritence.php: SUCCEEDED
    Objects/static_method_test.php: SUCCEEDED
    Objects/static_object_vars.php: SUCCEEDED
    Objects/sys_class_const.php: SUCCEEDED
    Objects/this2.php: SUCCEEDED
    RegEx/backreferences.php: SUCCEEDED
    RegEx/dolar_escape.php: SUCCEEDED
    RegEx/ereg.php: SUCCEEDED
    RegEx/namedbackref.php: SUCCEEDED
    RegEx/namedgroups.php: SUCCEEDED
    RegEx/preg_match_unmatched_groups.php: SUCCEEDED
    RegEx/preg_replace_eval.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ab"01300 as"00da sd"0asdsa das asd 11asd a1sd a
    ab"01300 as"00da sd"0(aasdasdkjask,$a,\,\l,a,s,d,a,s,d,k,j,a,s,${120})(ldjaklsdjalk,$l,\,\l,d,j,a,k,l,s,d,j,a,l,${120})djdsa das asd 11asd a1sd a
    ab"01300 as"00da sd"0asdsa das asd 11asd a1sd a
    ab"01300 as"00da sd"0(aasdasdkjask,$a,\,\l,a,s,d,a,s,d,k,j,,,${120})(ldjaklsdjalk,$l,\,\l,d,j,a,k,l,s,d,j,,,${120})djdsa das asd 11asd a1sd a
    RegEx/regexp-sql.php: SUCCEEDED
    RegEx/regexp_smiles.php: SUCCEEDED
    RegEx/Perl/cache.php: SUCCEEDED
    RegEx/Perl/grep1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      [3] => string(3) "1.5"
      [6] => string(5) "58.54"
    }
    Notice: preg_grep(): Array to string conversion in D:\Documents\Projects\Phalanger\Main\Testing\Tests\RegEx\Perl\__input.txt at expression on line 5, column 1.
    array(2) {
      [3]=>
      string(3) "1.5"
      [6]=>
      string(5) "58.54"
    }
    RegEx/Perl/grep2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Food  array
    (
      [0] => apple
      [1] => banana
      [2] => squid
      [3] => pear
    )
    Fruit array
    (
      [0] => apple
      [1] => banana
      [3] => pear
    )
    Food  Array
    (
        [0] => apple
        [1] => banana
        [2] => squid
        [3] => pear
    )
    Fruit Array
    (
        [0] => apple
        [1] => banana
        [3] => pear
    )
    RegEx/Perl/match1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array [empty]
    array
    (
      [0] => array
      (
        [0] => def
        [1] => 3
      )
    )
    Array
    (
    )
    Array
    (
        [0] => Array
        (
            [0] => def
            [1] => 3
        )
    
    )
    RegEx/Perl/match10.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    (
      [0] => 1231
      [1] => 1
      [2] => 23
      [3] => 1
    )
    Array
    (
        [0] => 1231
        [1] => 1
        [2] => 23
        [3] => 1
    )
    RegEx/Perl/match2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    (
      [0] => array
      (
        [0] => def
        [1] => 0
      )
    )
    Array
    (
        [0] => Array
        (
            [0] => def
            [1] => 0
        )
    
    )
    RegEx/Perl/match3.php: SUCCEEDED
    RegEx/Perl/match4.php: SUCCEEDED
    RegEx/Perl/match5.php: SUCCEEDED
    RegEx/Perl/match6.php: SUCCEEDED
    RegEx/Perl/match7.php: SUCCEEDED
    RegEx/Perl/match8.php: SUCCEEDED
    RegEx/Perl/match9.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    (
      [0] => 209.6.145.47 - - [22/Nov/2003:19:02:30 -0500] "GET /dir/doc.htm HTTP/1.0" 200 6776 "http://search.yahoo.com/search?p=key+words=UTF-8" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)"
      [1] => 209.6.145.47
      [2] => -
      [3] => -
      [4] => 22/Nov/2003:19:02:30 -0500
      [5] => GET
      [6] => /dir/doc.htm
      [7] => HTTP
      [8] => 1.0
      [9] => 200
      [10] => 6776
      [11] => "http://search.yahoo.com/search?p=key+words=UTF-8"
      [12] => "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)"
    )
    Array
    (
        [0] => 209.6.145.47 - - [22/Nov/2003:19:02:30 -0500] "GET /dir/doc.htm HTTP/1.0" 200 6776 "http://search.yahoo.com/search?p=key+words=UTF-8" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)"
        [1] => 209.6.145.47
        [2] => -
        [3] => -
        [4] => 22/Nov/2003:19:02:30 -0500
        [5] => GET
        [6] => /dir/doc.htm
        [7] => HTTP
        [8] => 1.0
        [9] => 200
        [10] => 6776
        [11] => "http://search.yahoo.com/search?p=key+words=UTF-8"
        [12] => "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)"
    )
    RegEx/Perl/match_all1.php: SUCCEEDED
    RegEx/Perl/match_all2.php: SUCCEEDED
    RegEx/Perl/match_all3.php: SUCCEEDED
    RegEx/Perl/match_all4.php: SUCCEEDED
    RegEx/Perl/match_dollar.php: SUCCEEDED
    RegEx/Perl/overflow.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string("kfkaj +j k45´┐Ż´┐Ż´┐Ż´┐Ż´┐Ż3#$%^&kjakfjkaj|kfj")
    string("kfkaj +j k45�����3#$%^&kjakfjkaj|kfj")
    RegEx/Perl/quote1.php: SUCCEEDED
    RegEx/Perl/quote2.php: SUCCEEDED
    RegEx/Perl/quote3.php: SUCCEEDED
    RegEx/Perl/replace1.php: SUCCEEDED
    RegEx/Perl/replace2.php: SUCCEEDED
    RegEx/Perl/replace3.php: SUCCEEDED
    RegEx/Perl/replace4.php: SUCCEEDED
    RegEx/Perl/replace5.php: SUCCEEDED
    RegEx/Perl/replace6.php: SUCCEEDED
    RegEx/Perl/replace7.php: SUCCEEDED
    RegEx/Perl/replace8.php: SUCCEEDED
    RegEx/Perl/replace9.php: SUCCEEDED
    RegEx/Perl/replace_callback1.php: SUCCEEDED
    RegEx/Perl/replace_callback2.php: SUCCEEDED
    RegEx/Perl/split1.php: SUCCEEDED
    RegEx/Perl/split2.php: SUCCEEDED
    RegEx/Perl/split3.php: SUCCEEDED
    RegEx/Perl/split4.php: SUCCEEDED
    RegEx/Perl/split5.php: SUCCEEDED
    RegEx/Perl/split6.php: SUCCEEDED
    RegEx/Perl/ungreedy.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    aaa
    a
    aaa
    
    a
    aa
    aaa
    aa
    aaa
    aaa
    a
    aaa
    a
    a
    aa
    aaa
    aa
    aaa
    RegEx/Perl/unsuccessful-preg_match_all.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0
    4
    1
    4
    0
    4
    1
    7
    RegEx/Perl/withoutdelimiters.php: SUCCEEDED
    SPL/ArrayAccess_offsetExists.php: SUCCEEDED
    SPL/Autoload_ctor.php: SUCCEEDED
    SPL/Autoload_extends.php: SUCCEEDED
    SPL/exceptions.php: SUCCEEDED
    Strings/addcslashes.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    \f\o\o\[ \]
    Issues a Warning:
    // echo addcslashes("zoo['.']", 'z..A');
    // output:  \zoo['\.']
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 4, column 1.
    
    Issues a Warning:
    // echo addcslashes("zoo['.']", 'z..A');
    // output:  \zoo['\.']
    Strings/addslashes.php: SUCCEEDED
    Strings/chunk_split.php: SUCCEEDED
    Strings/concat.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string(2) "ab"
    string(2) "ab"
    string(2) "ab"
    string(2) "ab"
    string(2) "ab"
    string(2) "aB"
    string(2) "Ab"
    string(2) "AB"
    string(2) "ab"
    string(2) "a1"
    string(2) "1b"
    string(2) "11"
    string(2) "ab"
    string(2) "aB"
    string(2) "Ab"
    string[binary](2) "\x41\x42"
    string(2) "ab"
    string(2) "ab"
    string(2) "ab"
    string(2) "ab"
    string(2) "ab"
    string(2) "aB"
    string(2) "Ab"
    string(2) "AB"
    string(2) "ab"
    string(2) "a1"
    string(2) "1b"
    string(2) "11"
    string(2) "ab"
    string[binary](2) "aB"
    string[binary](2) "Ab"
    string[binary](2) "AB"
    Strings/count_chars.php: SUCCEEDED
    Strings/crc32.php: SUCCEEDED
    Strings/crypt.php: SUCCEEDED
    Strings/crypt2.php: SUCCEEDED
    Strings/echo.php: SUCCEEDED
    Strings/explode.php: SUCCEEDED
    Strings/get_html_translation_table.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <hr>[&] => &amp;
    [>] => &gt;
    [<] => &lt;
    ["] => &quot;
    <hr>Hallo &amp; &lt;Frau&gt; &amp; Kr&iuml;&iquest;&frac12;mer
    <hr>[&] => &amp;
    [>] => &gt;
    [<] => &lt;
    ["] => &quot;
    <hr>Hallo &amp; &lt;Frau&gt; &amp; Kr�mer
    Strings/mb_strlen.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Call to undefined function mb_strlen() in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 4
    Error: Call to undefined function: 'mb_strlen' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 4, column 1.
    Strings/nl2br.php: SUCCEEDED
    Strings/pack.php: SUCCEEDED
    Strings/pos.php: SUCCEEDED
    Strings/runtime-quotes.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    fread = (x''y"z)
    fgets = (x''y"z)
    file[0] = (x''y"z)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    
    Warning: fopen(runtime-quotes2.txt): failed to open stream: Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 33
    
    Warning: fwrite() expects parameter 1 to be resource, boolean given in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 35
    fwrite = ()
    
    Warning: fputs() expects parameter 1 to be resource, boolean given in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 38
    fputs = ()
    
    Warning: fclose() expects parameter 1 to be resource, boolean given in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 41
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (x'y"z)
    fgets = (x'y"z)
    file[0] = (x'y"z)
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (a\'b"\\ca\)
    fgets = (a\'b"\\ca\'b"\\c)
    file[0] = (a\'b"\\ca\'b"\\c)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    e'e
    e''e
    e'e
    e'e
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    e'e
    e'e
    e'e
    e'e
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    fread = (x''y"z)
    fgets = (x''y"z)
    file[0] = (x''y"z)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    
    Warning: fopen(): Unable to access (D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\runtime-quotes2.txt): Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 33, column 3.
    
    Warning: Cannot convert boolean to resource implicitly in a call to function fwrite() in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 35, column 3.
    fwrite = (0)
    
    Warning: Cannot convert boolean to resource implicitly in a call to function fputs() in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 38, column 3.
    fputs = (0)
    
    Warning: Cannot convert boolean to resource implicitly in a call to function fclose() in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 41, column 3.
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (x'y"z)
    fgets = (x'y"z)
    file[0] = (x'y"z)
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (a\'b"\\ca\)
    fgets = (a\'b"\\ca\'b"\\c)
    file[0] = (a\'b"\\ca\'b"\\c)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    e'e
    e''e
    e'e
    e'e
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    e'e
    e'e
    e'e
    e'e
    Strings/sprintf.php: SUCCEEDED
    Strings/sprintf2.php: SUCCEEDED
    Strings/strtr.php: SUCCEEDED
    Strings/str_ireplace.php: SUCCEEDED
    Strings/str_replace.php: SUCCEEDED
    Strings/str_word_count.php: SUCCEEDED
    Strings/substr_operations.php: SUCCEEDED
    Strings/wordwrap.php: SUCCEEDED
    Variables/advanced_serialize.php: SUCCEEDED
    Variables/arguments.php: SUCCEEDED
    Variables/bitwise.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "00"
    string(2) "31"
    string(2) "31"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    0
    0
    0
    5
    0
    5
    40
    5
    45
    string(48) "000000000000000000000000000000000000000000000000"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(14) "31323331323331"
    string(2) "30"
    string(14) "31323331323331"
    string(16) "3635343635343536"
    string(2) "30"
    string(16) "3635343635343536"
    string(14) "337a5e8be43d7a"
    string(14) "00002130120201"
    string(48) "337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42"
    string(16) "347d598ce33a7e77"
    string(16) "0200243214040100"
    string(48) "367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42"
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "00"
    string(2) "31"
    string(2) "31"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    0
    -9223372036854775808
    -9223372036854775808
    -9223372036854775803
    0
    -9223372036854775803
    40
    5
    45
    string(48) "000000000000000000000000000000000000000000000000"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(14) "31323331323331"
    string(2) "30"
    string(14) "31323331323331"
    string(16) "3635343635343536"
    string(2) "30"
    string(16) "3635343635343536"
    string(14) "337a5e8be43d7a"
    string(14) "00002130120201"
    string(48) "337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42"
    string(16) "347d598ce33a7e77"
    string(16) "0200243214040100"
    string(48) "367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42"
    Variables/comparisons.php: SUCCEEDED
    Variables/constant.php: SUCCEEDED
    Variables/extract%20refs.php: SUCCEEDED
    Variables/extract.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    EXTR_PREFIX_ALL
    integer(4)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
      'prefix_non_existent' => integer(1)
    }
    <hr>EXTR_PREFIX_INVALID
    integer(5)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => integer(2)
      'non_existent' => integer(1)
      'prefix_' => integer(1)
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => 'hello'
    }
    <hr>EXTR_PREFIX_SAME
    integer(3)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'non_existent' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>EXTR_PREFIX_IF_EXISTS
    integer(3)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>
    EXTR_PREFIX_ALL
    integer(4)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
      'prefix_non_existent' => integer(1)
    }
    <hr>EXTR_PREFIX_INVALID
    integer(5)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => integer(2)
      'non_existent' => integer(1)
      'prefix_' => integer(1)
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => 'hello'
    }
    <hr>EXTR_PREFIX_SAME
    integer(4)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'non_existent' => integer(1)
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>EXTR_PREFIX_IF_EXISTS
    integer(3)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>
    Variables/func_get_args.php: SUCCEEDED
    Variables/is_number.php: SUCCEEDED
    Variables/serialize.php: SUCCEEDED
    Variables/unserialize_objects.php: SUCCEEDED
    Variables/var_dumping.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Array
    (
        [0] => 1
        [1] => 
        [2] => 1
        [3] => 1.2
        [4] => 
        [5] => asdas
        [6] => Array
            (
                [0] => 1
            )
    
        [7] => stdClass Object
            (
            )
    
        [8] => Resource id #1
    )
    array(9) {
      [0]=>
      bool(true)
      [1]=>
      bool(false)
      [2]=>
      int(1)
      [3]=>
      float(1.2)
      [4]=>
      NULL
      [5]=>
      string(5) "asdas"
      [6]=>
      array(1) {
        [0]=>
        int(1)
      }
      [7]=>
      object(stdClass)#1 (0) {
      }
      [8]=>
      resource(1) of type (stream)
    }
    array (
      0 => true,
      1 => false,
      2 => 1,
      3 => 1.2,
      4 => NULL,
      5 => 'asdas',
      6 => 
      array (
        0 => 1,
      ),
      7 => 
      stdClass::__set_state(array(
      )),
      8 => NULL,
    )
    Array
    (
        [0] => 1
        [1] => 
        [2] => 1
        [3] => 1.2
        [4] => 
        [5] => asdas
        [6] => Array
        (
            [0] => 1
        )
    
        [7] => stdClass Object
        (
        )
    
        [8] => resource id #4
    
    )
    array(9) {
      [0]=>
      bool(true)
      [1]=>
      bool(false)
      [2]=>
      int(1)
      [3]=>
      float(1.2)
      [4]=>
      NULL
      [5]=>
      string(5) "asdas"
      [6]=>
      array(1) {
        [0]=>
        int(1)
      }
      [7]=>
      object(stdClass)(0) {
      }
      [8]=>
      resource(4) of type (stream)
    }
    array
    (
      '0' => true,
      '1' => false,
      '2' => 1,
      '3' => 1.2,
      '4' => NULL,
      '5' => 'asdas',
      '6' => array
      (
        '0' => 1
      ),
      '7' => class stdClass
      {
    
      },
      '8' => NULL
    )
    Xml/025.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
      'foo' => 'foobar'
    }
    array
    {
      'html' => 'http://www.w3.org/1999/xhtml'
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
    }
    array
    {
      'html' => 'http://www.w3.org/1999/xhtml'
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'foo' => 'foobar'
      'baz' => 'foobarbaz'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
    }
    array
    {
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
      'baz' => 'foobarbaz'
      'foo' => 'foobar'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
      'baz' => 'foobarbaz'
      'foo' => 'foobar'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
    }
    array
    {
    }
    Xml/026.php: SUCCEEDED
    Xml/027.php: SUCCEEDED
    Xml/028.php: SUCCEEDED
    Xml/029.php: SUCCEEDED
    Xml/030.php: SUCCEEDED
    Xml/032.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    FALSE
    FALSE
    FALSE
    TRUE
    TRUE
    TRUE
    Xml/033.php: SUCCEEDED
    Xml/bug26384.php: SUCCEEDED
    Xml/bug28721.php: SUCCEEDED
    Xml/bug28817.php: SUCCEEDED
    Xml/bug32615.php: SUCCEEDED
    Xml/bug33853.php: SUCCEEDED
    Xml/bug34276.php: SUCCEEDED
    Xml/bug35342.php: SUCCEEDED
    Xml/bug36756.php: SUCCEEDED
    Xml/bug37277.php: SUCCEEDED
    Xml/dom002.php: SUCCEEDED
    Xml/dom003.php: SUCCEEDED
    Xml/dom006.php: SUCCEEDED
    Xml/dom007.php: SUCCEEDED
    Xml/dom_set_attr_node.php: SUCCEEDED
    Xml/xmlhandler.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test begins
    <br/>
    <br/>test begins
    <br/>empty begins
    <br/>empty ends
    <br/>nocontent begins
    <br/>nocontent ends
    <br/>content begins
    <br/>empty begins
    <br/>empty ends
    <br/>empty begins
    <br/>empty ends
    <br/>content ends
    <br/>empty begins
    <br/>empty ends
    <br/>empty begins
    <br/>empty ends
    <br/>test ends
    <br/>Test ends
    <br/>
    <br/>
    Test begins
    <br/>
    <br/>
    Error: Call to undefined function: 'xml_parser_create' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Xml\__input.txt at expression on line 18, column 3.
    Xml/xslt001.php: SUCCEEDED
    Xml/xslt002.php: SUCCEEDED
    Xml/xslt003.php: SUCCEEDED
    Xml/xslt004.php: SUCCEEDED
    Xml/xslt005.php: SUCCEEDED
    Xml/xslt006.php: SUCCEEDED
    Xml/xslt007.php: SUCCEEDED
    Xml/xslt010.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test 10: EXSLT Support
      
      
      Test Date : 0001-12-31Z
        year                 : 1
        leap-year            : false
        month-in-year        : 12
        month-name           : December
        month-abbreviation   : Dec
        week-in-year         : 1
        day-in-year          : 365
        day-in-month         : 31
        day-of-week-in-month : 5
        day-in-week          : 2
        day-name             : Monday
        day-abbreviation     : Mon
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : 3000-01-31
        year                 : 3000
        leap-year            : false
        month-in-year        : 1
        month-name           : January
        month-abbreviation   : Jan
        week-in-year         : 5
        day-in-year          : 31
        day-in-month         : 31
        day-of-week-in-month : 5
        day-in-week          : 6
        day-name             : Friday
        day-abbreviation     : Fri
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : 2000-02-29
        year                 : 2000
        leap-year            : true
        month-in-year        : 2
        month-name           : February
        month-abbreviation   : Feb
        week-in-year         : 9
        day-in-year          : 60
        day-in-month         : 29
        day-of-week-in-month : 5
        day-in-week          : 3
        day-name             : Tuesday
        day-abbreviation     : Tue
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : 9990001-12-31Z
        year                 : 9990001
        leap-year            : false
        month-in-year        : 12
        month-name           : December
        month-abbreviation   : Dec
        week-in-year         : 1
        day-in-year          : 365
        day-in-month         : 31
        day-of-week-in-month : 5
        day-in-week          : 2
        day-name             : Monday
        day-abbreviation     : Mon
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : -0004-02-29
        year                 : -4
        leap-year            : true
        month-in-year        : 2
        month-name           : February
        month-abbreviation   : Feb
        week-in-year         : 9
        day-in-year          : 60
        day-in-month         : 29
        day-of-week-in-month : 5
        day-in-week          : 1
        day-name             : Sunday
        day-abbreviation     : Sun
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
    Test 10: EXSLT Support
    Warning: Cannot find a script or an extension object associated with namespace 'http://exslt.org/dates-and-times'..
    
    Warning: Illegal string offset '-1' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Phalanger.inc at expression on line 7, column 6.
    Xml/xslt011.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test 11: php:function Support
    
    Warning: XSLTProcessor::transformToXml(): A PHP Object cannot be converted to a XPath-string in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Xml\__input.txt on line 18
    <?xml version="1.0"?>
    foobar - secondArg
    foobar - 
    this is from an external DomDocument
    from the Input Document
    static
    Test 11: php:function Support
    <?xml version="1.0" encoding="utf-8"?>foobar - secondArg
    foobar - 
    this is from an external DomDocument
    from the Input Document
    static
    not a DomNode object
    Xml/xslt012.php: SUCCEEDED
    ================================================ FILE: Testing/Tests/TestLogs/TestLog (1902).htm ================================================ PHP.NET Compiler test log

    PHP.NET Compiler test log

    (89%) 846 succeeded, 104 failed
    Test ResultCompiler error outputExpected test result
    @PHP/classes/array_access_001.php: SUCCEEDED
    @PHP/classes/array_access_002.php: SUCCEEDED
    @PHP/classes/array_access_003.php: SUCCEEDED
    @PHP/classes/array_access_004.php: SUCCEEDED
    @PHP/classes/array_access_005.php: SUCCEEDED
    @PHP/classes/array_access_006.php: SUCCEEDED
    @PHP/classes/array_access_007.php: SUCCEEDED
    @PHP/classes/array_access_008.php: SUCCEEDED
    @PHP/classes/array_access_009.php: SUCCEEDED
    @PHP/classes/array_access_010.php: SUCCEEDED
    @PHP/classes/array_access_011.php: SUCCEEDED
    @PHP/classes/array_access_013.php: SUCCEEDED
    @PHP/classes/assign_op_property_001.php: SUCCEEDED
    @PHP/classes/autoload_001.php: SUCCEEDED
    @PHP/classes/autoload_002.php: SUCCEEDED
    @PHP/classes/autoload_003.php: SUCCEEDED
    @PHP/classes/autoload_005.php: SUCCEEDED
    @PHP/classes/autoload_006.php: SUCCEEDED
    @PHP/classes/bug23951.php: SUCCEEDED
    @PHP/classes/bug24399.php: SUCCEEDED
    @PHP/classes/bug24445.php: SUCCEEDED
    @PHP/classes/bug26737.php: SUCCEEDED
    @PHP/classes/bug27468.php: SUCCEEDED
    @PHP/classes/bug27504.php: SUCCEEDED
    @PHP/classes/class_example.php: SUCCEEDED
    @PHP/classes/class_stdclass.php: SUCCEEDED
    @PHP/classes/clone_001.php: SUCCEEDED
    @PHP/classes/clone_002.php: SUCCEEDED
    @PHP/classes/clone_003.php: SUCCEEDED
    @PHP/classes/clone_004.php: SUCCEEDED
    @PHP/classes/clone_006.php: SUCCEEDED
    @PHP/classes/constants_scope_001.php: SUCCEEDED
    @PHP/classes/ctor_dtor.php: SUCCEEDED
    @PHP/classes/ctor_dtor_inheritance.php: SUCCEEDED
    @PHP/classes/ctor_name_clash.php: SUCCEEDED
    @PHP/classes/dereferencing_001.php: SUCCEEDED
    @PHP/classes/destructor_and_echo.php: SUCCEEDED
    @PHP/classes/destructor_and_references.php: SUCCEEDED
    @PHP/classes/destructor_inheritance.php: SUCCEEDED
    @PHP/classes/destructor_visibility_003.php: SUCCEEDED
    @PHP/classes/factory_001.php: SUCCEEDED
    @PHP/classes/factory_and_singleton_001.php: SUCCEEDED
    @PHP/classes/factory_and_singleton_002.php: SUCCEEDED
    @PHP/classes/final.php: SUCCEEDED
    @PHP/classes/incdec_property_001.php: SUCCEEDED
    @PHP/classes/incdec_property_002.php: SUCCEEDED
    @PHP/classes/incdec_property_003.php: SUCCEEDED
    @PHP/classes/incdec_property_004.php: SUCCEEDED
    @PHP/classes/inheritance.php: SUCCEEDED
    @PHP/classes/inheritance_002.php: SUCCEEDED
    @PHP/classes/interfaces_001.php: SUCCEEDED
    @PHP/classes/interface_construct.php: SUCCEEDED
    @PHP/classes/interface_doubled.php: SUCCEEDED
    @PHP/classes/interface_implemented.php: SUCCEEDED
    @PHP/classes/iterators_001.php: SUCCEEDED
    @PHP/classes/iterators_002.php: SUCCEEDED
    @PHP/classes/iterators_003.php: SUCCEEDED
    @PHP/classes/iterators_004.php: SUCCEEDED
    @PHP/classes/iterators_006.php: SUCCEEDED
    @PHP/classes/iterators_007.php: SUCCEEDED
    @PHP/classes/object_reference_001.php: SUCCEEDED
    @PHP/classes/private_001.php: SUCCEEDED
    @PHP/classes/private_002.php: SUCCEEDED
    @PHP/classes/private_003.php: SUCCEEDED
    @PHP/classes/private_003b.php: SUCCEEDED
    @PHP/classes/private_004.php: SUCCEEDED
    @PHP/classes/private_004b.php: SUCCEEDED
    @PHP/classes/private_005.php: SUCCEEDED
    @PHP/classes/private_005b.php: SUCCEEDED
    @PHP/classes/private_006.php: SUCCEEDED
    @PHP/classes/private_006b.php: SUCCEEDED
    @PHP/classes/private_007.php: SUCCEEDED
    @PHP/classes/private_007b.php: SUCCEEDED
    @PHP/classes/private_members.php: SUCCEEDED
    @PHP/classes/private_redeclare.php: SUCCEEDED
    @PHP/classes/protected_001.php: SUCCEEDED
    @PHP/classes/protected_001b.php: SUCCEEDED
    @PHP/classes/protected_002.php: SUCCEEDED
    @PHP/classes/serialize_001.php: SUCCEEDED
    @PHP/classes/singleton_001.php: SUCCEEDED
    @PHP/classes/static_properties_001.php: SUCCEEDED
    @PHP/classes/type_hinting_001.php: SUCCEEDED
    @PHP/classes/type_hinting_003.php: SUCCEEDED
    @PHP/classes/visibility_000c.php: SUCCEEDED
    @PHP/classes/visibility_001c.php: SUCCEEDED
    @PHP/classes/visibility_002c.php: SUCCEEDED
    @PHP/classes/visibility_003a.php: SUCCEEDED
    @PHP/classes/visibility_003c.php: SUCCEEDED
    @PHP/classes/visibility_004a.php: SUCCEEDED
    @PHP/classes/visibility_004b.php: SUCCEEDED
    @PHP/classes/visibility_004c.php: SUCCEEDED
    @PHP/classes/visibility_005.php: SUCCEEDED
    @PHP/classes/__call_001.php: SUCCEEDED
    @PHP/classes/__set_data_corrupt.php: SUCCEEDED
    @PHP/classes/__set__get_001.php: SUCCEEDED
    @PHP/classes/__set__get_004.php: SUCCEEDED
    @PHP/classes/__set__get_005.php: SUCCEEDED
    @PHP/date/bug17988.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2002-06-25 12:18:48
    2002-06-25 14:18:48
    2002-06-25 13:18:48
    2002-06-25 12:18:48
    2002-06-25 18:18:48
    2002-06-25 14:18:48
    2002-06-25 14:18:48
    2002-06-25 18:18:48
    2002-06-25 10:18:48
    2002-06-25 17:18:48
    2002-06-25 11:18:48
    2002-06-25 17:48:48
    2002-06-25 10:48:48
    2002-06-25 14:18:48
    2002-06-25 14:18:48
    2002-06-25 13:18:48
    2002-06-25 12:18:48
    2002-06-25 18:18:48
    2002-06-25 14:18:48
    2002-06-25 14:18:48
    2002-06-25 18:18:48
    2002-06-25 10:18:48
    2002-06-25 17:18:48
    2002-06-25 11:18:48
    2002-06-25 17:48:48
    2002-06-25 10:48:48
    @PHP/date/bug26317.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2003-11-19 17:20:42
    2003-11-19 17:20:42
    2003-11-19 17:20:42
    2003-11-19 16:20:42
    2003-11-19 16:20:42
    2003-11-19 16:20:42
    @PHP/date/bug26320.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2003-11-19 12:30:42
    2003-11-19 13:30:42
    2003-11-19 12:30:42
    2003-11-19 12:30:42
    @PHP/date/bug28088.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    The following line rightly shows the correct date time:
    04/04/04 2145
    But the following line fails to show the correct date time:
    04/03/04 2245
    The following line rightly shows the correct date time:
    04/04/04 2345
    But the following line fails to show the correct date time:
    04/04/04 0045
    @PHP/date/bug28599.php: SUCCEEDED
    @PHP/date/bug29150.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2005-06-19 22:00:00
    2005-06-20 00:00:00
    @PHP/date/bug29585.php: SUCCEEDED
    @PHP/date/bug29595.php: SUCCEEDED
    @PHP/date/bug33056.php: SUCCEEDED
    @PHP/date/bug33452.php: SUCCEEDED
    @PHP/date/bug33562.php: SUCCEEDED
    @PHP/date/bug33563.php: SUCCEEDED
    @PHP/date/bug33578.php: SUCCEEDED
    @PHP/date/bug33869.php: SUCCEEDED
    @PHP/date/bug34676.php: SUCCEEDED
    @PHP/date/bug34771.php: SUCCEEDED
    @PHP/date/bug35143.php: SUCCEEDED
    @PHP/date/bug35414.php: SUCCEEDED
    @PHP/date/bug35422.php: SUCCEEDED
    @PHP/date/bug35425.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    integer(42)
    integer(1)
    integer(1)
    integer(1)
    integer(1)
    integer(0)
    integer(0)
    integer(1)
    integer(1)
    integer(31)
    integer(1104537661)
    integer(6)
    integer(53)
    integer(5)
    integer(2005)
    integer(0)
    integer(3600)
    integer(292)
    integer(1)
    integer(1)
    integer(1)
    integer(1)
    integer(0)
    integer(0)
    integer(1)
    integer(1)
    integer(31)
    integer(1104559261)
    integer(6)
    integer(53)
    integer(5)
    integer(2005)
    integer(0)
    integer(-18000)
    @PHP/date/bug35456.php: SUCCEEDED
    @PHP/date/bug35624.php: SUCCEEDED
    @PHP/date/bug35630.php: SUCCEEDED
    @PHP/date/bug35699.php: SUCCEEDED
    @PHP/date/bug35705.php: SUCCEEDED
    @PHP/date/bug35885.php: SUCCEEDED
    @PHP/date/bug35887.php: SUCCEEDED
    @PHP/date/date.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    c: 2003-01-23T13:20:59+01:00
    r: Thu, 23 Jan 2003 13:20:59 +0100
    c: 2003-01-23T13:20:59+01:00
    r: Thu, 23 Jan 2003 13:20:59 +0100
    c: 2003-01-23T12:20:59+00:00
    r: Thu, 23 Jan 2003 12:20:59 +0000
    c: 2003-01-23T13:20:59+01:00
    r: Thu, 23 Jan 2003 13:20:59 +0100
    @PHP/date/date_create-1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\@PHP\date\__input.txt on line 28
    SKIP
    @PHP/date/date_create-2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\@PHP\date\__input.txt on line 6
    SKIP
    @PHP/date/date_default_timezone_get-3.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Europe/Prague
    America/Chicago
    Europe/Rome
    America/Chicago
    @PHP/date/date_modify-1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\@PHP\date\__input.txt on line 6
    SKIP
    @PHP/date/date_modify-2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\@PHP\date\__input.txt on line 6
    SKIP
    @PHP/date/default-timezone-1.php: SUCCEEDED
    @PHP/date/default-timezone-2.php: SUCCEEDED
    @PHP/date/format-negative-timestamp.php: SUCCEEDED
    @PHP/date/strtotime.php: SUCCEEDED
    @PHP/date/timezone-configuration.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    1119125744
    1119125744
    1119125744
    1119125744
    1119129344
    1119125744
    @PHP/doc_examples/test001.php: SUCCEEDED
    @PHP/doc_examples/test002.php: SUCCEEDED
    @PHP/doc_examples/test003.php: SUCCEEDED
    @PHP/doc_examples/test004.php: SUCCEEDED
    @PHP/doc_examples/test005.php: SUCCEEDED
    @PHP/doc_examples/test006.php: SUCCEEDED
    @PHP/doc_examples/test007.php: SUCCEEDED
    @PHP/doc_examples/test008.php: SUCCEEDED
    @PHP/doc_examples/test009.php: SUCCEEDED
    @PHP/doc_examples/test010.php: SUCCEEDED
    @PHP/doc_examples/test011.php: SUCCEEDED
    @PHP/doc_examples/test013.php: SUCCEEDED
    @PHP/doc_examples/test014.php: SUCCEEDED
    @PHP/doc_examples/test015.php: SUCCEEDED
    @PHP/doc_examples/test016.php: SUCCEEDED
    @PHP/doc_examples/test017.php: SUCCEEDED
    @PHP/doc_examples/test018.php: SUCCEEDED
    @PHP/doc_examples/test019.php: SUCCEEDED
    @PHP/doc_examples/test020.php: SUCCEEDED
    @PHP/doc_examples/test021.php: SUCCEEDED
    @PHP/doc_examples/test022.php: SUCCEEDED
    @PHP/doc_examples/test023.php: SUCCEEDED
    @PHP/doc_examples/test024.php: SUCCEEDED
    @PHP/doc_examples/test025.php: SUCCEEDED
    @PHP/doc_examples/test026.php: SUCCEEDED
    @PHP/doc_examples/test027.php: SUCCEEDED
    @PHP/doc_examples/test028.php: SUCCEEDED
    @PHP/doc_examples/test029.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ´┐Żauky
    �auky
    @PHP/doc_examples/test030.php: SUCCEEDED
    @PHP/doc_examples/test031.php: SUCCEEDED
    @PHP/doc_examples/test032.php: SUCCEEDED
    @PHP/doc_examples/test033.php: SUCCEEDED
    @PHP/doc_examples/test034.php: SUCCEEDED
    @PHP/doc_examples/test035.php: SUCCEEDED
    @PHP/doc_examples/test036.php: SUCCEEDED
    @PHP/doc_examples/test037.php: SUCCEEDED
    @PHP/doc_examples/test038.php: SUCCEEDED
    @PHP/doc_examples/test039.php: SUCCEEDED
    @PHP/doc_examples/test040.php: SUCCEEDED
    @PHP/doc_examples/test041.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    call_user_func():
    hello world!
    Strict Standards: call_user_func(): Non-static method MyClass::myCallbackMethod() should not be called statically in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\@PHP\doc_examples\__input.txt at expression on line 17, column 1.
    Hello World!Hello World!
    @PHP/doc_examples/test042.php: SUCCEEDED
    @PHP/doc_examples/test043.php: SUCCEEDED
    @PHP/doc_examples/test044.php: SUCCEEDED
    @PHP/doc_examples/test045.php: SUCCEEDED
    @PHP/doc_examples/test046.php: SUCCEEDED
    @PHP/doc_examples/test047.php: SUCCEEDED
    @PHP/doc_examples/test048.php: SUCCEEDED
    @PHP/doc_examples/test049.php: SUCCEEDED
    @PHP/doc_examples/test050.php: SUCCEEDED
    @PHP/doc_examples/test051.php: SUCCEEDED
    @PHP/doc_examples/test052.php: SUCCEEDED
    @PHP/doc_examples/test053.php: SUCCEEDED
    @PHP/doc_examples/test054.php: SUCCEEDED
    @PHP/doc_examples/test055.php: SUCCEEDED
    @PHP/doc_examples/test056.php: SUCCEEDED
    @PHP/doc_examples/test057.php: SUCCEEDED
    @PHP/doc_examples/test058.php: SUCCEEDED
    @PHP/doc_examples/test059.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    Deprecated: Assigning the return value of new by reference is deprecated in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\@PHP\doc_examples\__input.txt on line 4
    NULL
    object(stdClass)#1 (0) {
    }
    NULL
    object(stdClass)(0) {
    }
    C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\@PHP\doc_examples\__input.txt(4,5): warning PHP0181: Assigning the return value of new by reference is deprecated
    
    @PHP/doc_examples/test060.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    Deprecated: Assigning the return value of new by reference is deprecated in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\@PHP\doc_examples\__input.txt on line 9
    Static object: NULL
    Static object: NULL
    
    Static object: NULL
    Static object: object(stdClass)#3 (1) {
      ["property"]=>
      int(1)
    }
    Static object: NULL
    Static object: NULL
    
    Static object: NULL
    Static object: object(stdClass)(1) {
      ["property"]=>
      int(1)
    }
    C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\@PHP\doc_examples\__input.txt(9,9): warning PHP0181: Assigning the return value of new by reference is deprecated
    
    @PHP/doc_examples/test061.php: SUCCEEDED
    @PHP/doc_examples/test062.php: SUCCEEDED
    @PHP/doc_examples/test063.php: SUCCEEDED
    @PHP/doc_examples/test064.php: SUCCEEDED
    @PHP/doc_examples/test065.php: SUCCEEDED
    @PHP/doc_examples/test066.php: SUCCEEDED
    @PHP/doc_examples/test067.php: SUCCEEDED
    @PHP/doc_examples/test068.php: SUCCEEDED
    @PHP/doc_examples/test069.php: SUCCEEDED
    @PHP/doc_examples/test070.php: SUCCEEDED
    @PHP/doc_examples/test071.php: SUCCEEDED
    @PHP/doc_examples/test072.php: SUCCEEDED
    @PHP/doc_examples/test073.php: SUCCEEDED
    @PHP/doc_examples/test074.php: SUCCEEDED
    @PHP/doc_examples/test075.php: SUCCEEDED
    @PHP/doc_examples/test076.php: SUCCEEDED
    @PHP/doc_examples/test077.php: SUCCEEDED
    @PHP/doc_examples/test078.php: SUCCEEDED
    @PHP/doc_examples/test079.php: SUCCEEDED
    @PHP/doc_examples/test080.php: SUCCEEDED
    @PHP/doc_examples/test081.php: SUCCEEDED
    @PHP/doc_examples/test082.php: SUCCEEDED
    @PHP/doc_examples/test083.php: SUCCEEDED
    @PHP/doc_examples/test084.php: SUCCEEDED
    @PHP/doc_examples/test085.php: SUCCEEDED
    @PHP/doc_examples/test086.php: SUCCEEDED
    @PHP/doc_examples/test087.php: SUCCEEDED
    @PHP/doc_examples/test088.php: SUCCEEDED
    @PHP/doc_examples/test089.php: SUCCEEDED
    @PHP/doc_examples/test090.php: SUCCEEDED
    @PHP/doc_examples/test091.php: SUCCEEDED
    @PHP/doc_examples/test092.php: SUCCEEDED
    @PHP/doc_examples/test093.php: SUCCEEDED
    @PHP/doc_examples/test094.php: SUCCEEDED
    @PHP/doc_examples/test095.php: SUCCEEDED
    @PHP/doc_examples/test096.php: SUCCEEDED
    @PHP/doc_examples/test097.php: SUCCEEDED
    @PHP/doc_examples/test098.php: SUCCEEDED
    @PHP/doc_examples/test099.php: SUCCEEDED
    @PHP/doc_examples/test100.php: SUCCEEDED
    @PHP/doc_examples/test102.php: SUCCEEDED
    @PHP/doc_examples/test103.php: SUCCEEDED
    @PHP/doc_examples/test104.php: SUCCEEDED
    @PHP/doc_examples/test105.php: SUCCEEDED
    @PHP/doc_examples/test107.php: SUCCEEDED
    @PHP/doc_examples/test108.php: SUCCEEDED
    @PHP/doc_examples/test109.php: SUCCEEDED
    @PHP/doc_examples/test110.php: SUCCEEDED
    @PHP/doc_examples/test111.php: SUCCEEDED
    @PHP/doc_examples/test112.php: SUCCEEDED
    @PHP/doc_examples/test113.php: SUCCEEDED
    @PHP/doc_examples/test114.php: SUCCEEDED
    @PHP/doc_examples/test115.php: SUCCEEDED
    @PHP/doc_examples/test116.php: SUCCEEDED
    @PHP/doc_examples/test117.php: SUCCEEDED
    @PHP/doc_examples/test118.php: SUCCEEDED
    @PHP/doc_examples/test119.php: SUCCEEDED
    @PHP/doc_examples/test120.php: SUCCEEDED
    @PHP/doc_examples/test121.php: SUCCEEDED
    @PHP/doc_examples/test122.php: SUCCEEDED
    @PHP/doc_examples/test123.php: SUCCEEDED
    @PHP/doc_examples/test124.php: SUCCEEDED
    @PHP/doc_examples/test125.php: SUCCEEDED
    @PHP/doc_examples/test126.php: SUCCEEDED
    @PHP/doc_examples/test127.php: SUCCEEDED
    @PHP/doc_examples/test128.php: SUCCEEDED
    @PHP/doc_examples/test129.php: SUCCEEDED
    @PHP/doc_examples/test130.php: SUCCEEDED
    @PHP/doc_examples/test131.php: SUCCEEDED
    @PHP/doc_examples/test132.php: SUCCEEDED
    @PHP/doc_examples/test133.php: SUCCEEDED
    @PHP/doc_examples/test134.php: SUCCEEDED
    @PHP/doc_examples/test136.php: SUCCEEDED
    @PHP/doc_examples/test137.php: SUCCEEDED
    @PHP/doc_examples/test138.php: SUCCEEDED
    @PHP/doc_examples/test139.php: SUCCEEDED
    @PHP/doc_examples/test148.php: SUCCEEDED
    @PHP/doc_examples/test149.php: SUCCEEDED
    @PHP/doc_examples/test150.php: SUCCEEDED
    @PHP/doc_examples/test151.php: SUCCEEDED
    @PHP/doc_examples/test152.php: SUCCEEDED
    @PHP/doc_examples/test153.php: SUCCEEDED
    @PHP/doc_examples/test154.php: SUCCEEDED
    @PHP/doc_examples/test155.php: SUCCEEDED
    @PHP/doc_examples/test156.php: SUCCEEDED
    @PHP/doc_examples/test158.php: SUCCEEDED
    @PHP/lang/001.php: SUCCEEDED
    @PHP/lang/002.php: SUCCEEDED
    @PHP/lang/003.php: SUCCEEDED
    @PHP/lang/004.php: SUCCEEDED
    @PHP/lang/005.php: SUCCEEDED
    @PHP/lang/006.php: SUCCEEDED
    @PHP/lang/007.php: SUCCEEDED
    @PHP/lang/008.php: SUCCEEDED
    @PHP/lang/009.php: SUCCEEDED
    @PHP/lang/010.php: SUCCEEDED
    @PHP/lang/011.php: SUCCEEDED
    @PHP/lang/012.php: SUCCEEDED
    @PHP/lang/013.php: SUCCEEDED
    @PHP/lang/014.php: SUCCEEDED
    @PHP/lang/015.php: SUCCEEDED
    @PHP/lang/016.php: SUCCEEDED
    @PHP/lang/017.php: SUCCEEDED
    @PHP/lang/018.php: SUCCEEDED
    @PHP/lang/019.php: SUCCEEDED
    @PHP/lang/020.php: SUCCEEDED
    @PHP/lang/021.php: SUCCEEDED
    @PHP/lang/022.php: SUCCEEDED
    @PHP/lang/023.php: SUCCEEDED
    @PHP/lang/024.php: SUCCEEDED
    @PHP/lang/025.php: SUCCEEDED
    @PHP/lang/026.php: SUCCEEDED
    @PHP/lang/027.php: SUCCEEDED
    @PHP/lang/028.php: SUCCEEDED
    @PHP/lang/030.php: SUCCEEDED
    @PHP/lang/032.php: SUCCEEDED
    @PHP/lang/036.php: SUCCEEDED
    @PHP/lang/037.php: SUCCEEDED
    @PHP/lang/038.php: SUCCEEDED
    @PHP/lang/039.php: SUCCEEDED
    @PHP/lang/040.php: SUCCEEDED
    @PHP/lang/bison1.php: SUCCEEDED
    @PHP/lang/bug17115.php: SUCCEEDED
    @PHP/lang/bug18872.php: SUCCEEDED
    @PHP/lang/bug19943.php: SUCCEEDED
    @PHP/lang/bug20175.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    Deprecated: Assigning the return value of new by reference is deprecated in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\@PHP\lang\__input.txt on line 110
    foo_static()
    foo_global()
    foo:1
    foo_static()
    foo:1
    bar_static()
    bar_global()
    bar:1
    bar_static()
    bar:1
    wow_static()
    wow_global()
    wow:1
    wow_static()
    wow:1
    oop_test()
    oop_static()
    oop_class()
    oop:1
    oop_static()
    oop:1
    oop_test()
    oop_static()
    oop:1
    foo_static()
    foo_global()
    foo:1
    foo_static()
    foo:1
    bar_static()
    bar_global()
    bar:1
    bar_static()
    bar_global()
    bar:2
    wow_static()
    wow_global()
    wow:1
    wow_static()
    wow:1
    oop_test()
    oop_static()
    oop_class()
    oop:1
    oop_static()
    oop:1
    oop_test()
    oop_static()
    oop:1
    C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\@PHP\lang\__input.txt(110,4): warning PHP0181: Assigning the return value of new by reference is deprecated
    
    @PHP/lang/bug21094.php: SUCCEEDED
    @PHP/lang/bug21600.php: SUCCEEDED
    @PHP/lang/bug21669.php: SUCCEEDED
    @PHP/lang/bug21849.php: SUCCEEDED
    @PHP/lang/bug21961.php: SUCCEEDED
    @PHP/lang/bug22231.php: SUCCEEDED
    @PHP/lang/bug22367.php: SUCCEEDED
    @PHP/lang/bug22510.php: SUCCEEDED
    @PHP/lang/bug22592.php: SUCCEEDED
    @PHP/lang/bug22690.php: SUCCEEDED
    @PHP/lang/bug23279.php: SUCCEEDED
    @PHP/lang/bug23384.php: SUCCEEDED
    @PHP/lang/bug23489.php: SUCCEEDED
    @PHP/lang/bug23524.php: SUCCEEDED
    @PHP/lang/bug23922.php: SUCCEEDED
    @PHP/lang/bug24054.php: SUCCEEDED
    @PHP/lang/bug24396.php: SUCCEEDED
    @PHP/lang/bug24403.php: SUCCEEDED
    @PHP/lang/bug24436.php: SUCCEEDED
    @PHP/lang/bug24499.php: SUCCEEDED
    @PHP/lang/bug24640.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    double(1700000000000000089258092433847514422797596587883870563356951996370064178581143932836831337636761368874297554515902592900802289500112731978596146714137401870842258241575178866354311397451139753100927220499450359906637902366244989496126909662726242240784739940994096632824796638102733857671280980918272.0000000000)
    1.7E+300
    
    ------
    double(0.0000000000)
    1.7E-300
    
    ------
    double(17000000000000001584208052028780237480128823455860622330108867175329927830437888.0000000000)
    1.7E+79
    
    ------
    double(0.0000000000)
    1.7E-79
    
    ------
    double(169999999999999996096025832433329868941658043870400163508258284150340918121070592.0000000000)
    1.7E+80
    
    ------
    double(0.0000000000)
    1.7E-80
    
    ------
    double(1700000000000000013616404158611892038375594280539217794530130541777964808366194688.0000000000)
    1.7E+81
    
    ------
    double(0.0000000000)
    1.7E-81
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    1.6999810742106E-319
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    1.7000798873397E-320
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    1.6995858216939E-321
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    0
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    0
    
    ------
    double(1700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+300
    
    ------
    double(0.0000000000)
    1.70000000000003E-300
    
    ------
    double(17000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+79
    
    ------
    double(0.0000000000)
    1.70000000000001E-79
    
    ------
    double(170000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+80
    
    ------
    double(0.0000000000)
    1.70000000000001E-80
    
    ------
    double(1700000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+81
    
    ------
    double(0.0000000000)
    1.70000000000001E-81
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    1.69998107421056E-319
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    1.70007988733973E-320
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    1.69464516523548E-321
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    0
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    0
    
    ------
    @PHP/lang/bug24652.php: SUCCEEDED
    @PHP/lang/bug24658.php: SUCCEEDED
    @PHP/lang/bug24783.php: SUCCEEDED
    @PHP/lang/bug24926.php: SUCCEEDED
    @PHP/lang/bug25547.php: SUCCEEDED
    @PHP/lang/bug25652.php: SUCCEEDED
    @PHP/lang/bug25922.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Undefined index here: 'error'
    Undefined index here: ''
    @PHP/lang/bug26182.php: SUCCEEDED
    @PHP/lang/bug26696.php: SUCCEEDED
    @PHP/lang/bug26866.php: SUCCEEDED
    @PHP/lang/bug26869.php: SUCCEEDED
    @PHP/lang/bug27354.php: SUCCEEDED
    @PHP/lang/bug27439.php: SUCCEEDED
    @PHP/lang/bug27535.php: SUCCEEDED
    @PHP/lang/bug28213.php: SUCCEEDED
    @PHP/lang/bug28800.php: SUCCEEDED
    @PHP/lang/bug29566.php: SUCCEEDED
    @PHP/lang/bug29893.php: SUCCEEDED
    @PHP/lang/bug29944.php: SUCCEEDED
    @PHP/lang/bug30638.php: SUCCEEDED
    @PHP/lang/bug30726.php: SUCCEEDED
    @PHP/lang/bug30862.php: SUCCEEDED
    @PHP/lang/bug32924.php: SUCCEEDED
    @PHP/lang/bug35382.php: SUCCEEDED
    @PHP/lang/bug7515.php: SUCCEEDED
    @PHP/lang/each_binary_safety.php: SUCCEEDED
    @PHP/lang/error_2_exception_001.php: SUCCEEDED
    @PHP/lang/foreach_with_object_001.php: SUCCEEDED
    @PHP/lang/foreach_with_references_001.php: SUCCEEDED
    @PHP/lang/type_hints_001.php: SUCCEEDED
    @PHP/standard/array/001.php: SUCCEEDED
    @PHP/standard/array/003.php: SUCCEEDED
    @PHP/standard/array/004.php: SUCCEEDED
    @PHP/standard/array/005.php: SUCCEEDED
    @PHP/standard/array/008.php: SUCCEEDED
    @PHP/standard/array/array_change_key_case.php: SUCCEEDED
    @PHP/standard/array/array_chunk.php: SUCCEEDED
    @PHP/standard/array/array_count_values.php: SUCCEEDED
    @PHP/standard/array/array_diff_1.php: SUCCEEDED
    @PHP/standard/array/array_diff_key.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ------ Test 1 --------
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 2 --------
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 3 --------
    array(6) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [2]=>
      int(4)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [2]=>
      int(4)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 4 --------
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 5 --------
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 6 --------
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 7 --------
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    ------ Test 8 --------
    array(6) {
      [0]=>
      int(0)
      [7]=>
      int(14)
      [2]=>
      int(4)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [0]=>
      int(0)
      [7]=>
      int(14)
      [2]=>
      int(4)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 9 --------
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    ------ Test 1 --------
    array(4) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(4) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 2 --------
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 3 --------
    array(6) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [2]=>
      &int(4)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [2]=>
      &int(4)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 4 --------
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 5 --------
    array(4) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(4) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 6 --------
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 7 --------
    array(3) {
      [7]=>
      &int(14)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
    }
    array(3) {
      [7]=>
      &int(14)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
    }
    ------ Test 8 --------
    array(6) {
      [0]=>
      &int(0)
      [7]=>
      &int(14)
      [2]=>
      &int(4)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [0]=>
      &int(0)
      [7]=>
      &int(14)
      [2]=>
      &int(4)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 9 --------
    array(3) {
      [7]=>
      &int(14)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
    }
    array(3) {
      [7]=>
      &int(14)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
    }
    @PHP/standard/array/array_intersect_key.php: SUCCEEDED
    @PHP/standard/array/array_sum.php: SUCCEEDED
    @PHP/standard/array/array_walk_recursive.php: SUCCEEDED
    @PHP/standard/array/bug12776.php: SUCCEEDED
    @PHP/standard/array/bug14580.php: SUCCEEDED
    @PHP/standard/array/bug20381.php: SUCCEEDED
    @PHP/standard/array/bug20865.php: SUCCEEDED
    @PHP/standard/array/bug21182.php: SUCCEEDED
    @PHP/standard/array/bug21918.php: SUCCEEDED
    @PHP/standard/array/bug21998.php: SUCCEEDED
    @PHP/standard/array/bug22088.php: SUCCEEDED
    @PHP/standard/array/bug22463.php: SUCCEEDED
    @PHP/standard/array/bug23581.php: SUCCEEDED
    @PHP/standard/array/bug23788.php: SUCCEEDED
    @PHP/standard/array/bug24198.php: SUCCEEDED
    @PHP/standard/array/bug24220.php: SUCCEEDED
    @PHP/standard/array/bug24766.php: SUCCEEDED
    @PHP/standard/array/bug24897.php: SUCCEEDED
    @PHP/standard/array/bug24980.php: SUCCEEDED
    @PHP/standard/array/bug25359.php: SUCCEEDED
    @PHP/standard/array/bug25708.php: SUCCEEDED
    @PHP/standard/array/bug25758.php: SUCCEEDED
    @PHP/standard/array/bug26458.php: SUCCEEDED
    @PHP/standard/array/bug28974.php: SUCCEEDED
    @PHP/standard/array/bug29493.php: SUCCEEDED
    @PHP/standard/array/bug30266.php: SUCCEEDED
    @PHP/standard/array/bug30833.php: SUCCEEDED
    @PHP/standard/array/bug31158.php: SUCCEEDED
    @PHP/standard/array/bug31213.php: SUCCEEDED
    @PHP/standard/array/bug32021.php: SUCCEEDED
    @PHP/standard/array/bug33382.php: SUCCEEDED
    @PHP/standard/array/bug33989.php: SUCCEEDED
    @PHP/standard/array/bug34227.php: SUCCEEDED
    @PHP/standard/array/bug34982.php: SUCCEEDED
    @PHP/standard/array/bug35014.php: SUCCEEDED
    @PHP/standard/array/bug35022.php: SUCCEEDED
    @PHP/standard/array/bug35821.php: SUCCEEDED
    @PHP/standard/array/count_recursive.php: SUCCEEDED
    @PHP/standard/array/locale_sort.php: SUCCEEDED
    @PHP/standard/array/range.php: SUCCEEDED
    @PHP/standard/assert/assert.php: SUCCEEDED
    @PHP/standard/general_functions/001.php: SUCCEEDED
    @PHP/standard/general_functions/002.php: SUCCEEDED
    @PHP/standard/general_functions/003.php: SUCCEEDED
    @PHP/standard/general_functions/004.php: SUCCEEDED
    @PHP/standard/general_functions/005.php: SUCCEEDED
    @PHP/standard/general_functions/006.php: SUCCEEDED
    @PHP/standard/general_functions/007.php: SUCCEEDED
    @PHP/standard/general_functions/009.php: SUCCEEDED
    @PHP/standard/general_functions/bug25038.php: SUCCEEDED
    @PHP/standard/general_functions/bug27678.php: SUCCEEDED
    @PHP/standard/general_functions/bug29038.php: SUCCEEDED
    @PHP/standard/general_functions/bug31190.php: SUCCEEDED
    @PHP/standard/general_functions/bug32647.php: SUCCEEDED
    @PHP/standard/general_functions/bug35229.php: SUCCEEDED
    @PHP/standard/general_functions/is_resource.php: SUCCEEDED
    @PHP/standard/math/abs.php: SUCCEEDED
    @PHP/standard/math/bug24142.php: SUCCEEDED
    @PHP/standard/math/bug25694.php: SUCCEEDED
    @PHP/standard/math/bug27646.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    double(INF-INF)
    'd:-INF;'
    double(INF-INF)
    double(INF-INF)
    'd:INF;'
    double(INF-INF)
    double(NaNInfini)
    'd:NAN;'
    double(NaNInfini)
    double(-Infinity)
    'd:-INF;'
    double(-Infinity)
    double(Infinity)
    'd:INF;'
    double(Infinity)
    double(NaN)
    'd:NAN;'
    double(NaN)
    @PHP/standard/math/bug30069.php: SUCCEEDED
    @PHP/standard/math/bug30695.php: SUCCEEDED
    @PHP/standard/math/floorceil.php: SUCCEEDED
    @PHP/standard/math/hexdec.php: SUCCEEDED
    @PHP/standard/math/log.php: SUCCEEDED
    @PHP/standard/math/pow.php: SUCCEEDED
    @PHP/standard/math/round.php: SUCCEEDED
    @PHP/standard/reg/001.php: SUCCEEDED
    @PHP/standard/reg/002.php: SUCCEEDED
    @PHP/standard/reg/003.php: SUCCEEDED
    @PHP/standard/reg/004.php: SUCCEEDED
    @PHP/standard/reg/005.php: SUCCEEDED
    @PHP/standard/reg/006.php: SUCCEEDED
    @PHP/standard/reg/007.php: SUCCEEDED
    @PHP/standard/reg/008.php: SUCCEEDED
    @PHP/standard/reg/009.php: SUCCEEDED
    @PHP/standard/reg/010.php: SUCCEEDED
    @PHP/standard/reg/011.php: SUCCEEDED
    @PHP/standard/reg/012.php: SUCCEEDED
    @PHP/standard/reg/013.php: SUCCEEDED
    @PHP/standard/reg/014.php: SUCCEEDED
    @PHP/standard/reg/015.php: SUCCEEDED
    @PHP/standard/reg/016.php: SUCCEEDED
    @PHP/standard/serialize/001.php: SUCCEEDED
    @PHP/standard/serialize/002.php: SUCCEEDED
    @PHP/standard/serialize/003.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    d:100;
    double(100.0000000000)
    
    d:51999999999999996980101120;
    double(51999999999999996980101120.0000000000)
    
    d:8.9999999999999995265585574287341141808127531476202420890331268310546875E-9;
    double(0.0000000090)
    d:100;
    double(100.0000000000)
    
    d:5.2000000000000006E+25;
    double(52000000000000000000000000.0000000000)
    
    d:9.0000000000000045E-09;
    double(0.0000000090)
    @PHP/standard/serialize/004.php: SUCCEEDED
    @PHP/standard/serialize/005.php: SUCCEEDED
    @PHP/standard/serialize/006.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    'O:3:"´┐Ż":1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    object
    {
      '´┐Ż' => '´┐Ż'
    }
    'a:1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    array
    {
      '´┐Ż' => '´┐Ż'
    }
    'O:3:"´┐Ż":1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    object
    {
      'ďż˝' => '´┐Ż'
    }
    'a:1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    array
    {
      'ďż˝' => '´┐Ż'
    }
    @PHP/standard/serialize/bug14293.php: SUCCEEDED
    @PHP/standard/serialize/bug21957.php: SUCCEEDED
    @PHP/standard/serialize/bug23298.php: SUCCEEDED
    @PHP/standard/serialize/bug24063.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0.1 0.1
    0.01 0.01
    0.001 0.001
    0.0001 0.0001
    1.0E-5 1.0E-5
    1.0E-6 1.0E-6
    1.0E-7 1.0E-7
    1.0E-8 1.0E-8
    1.0E-9 1.0E-9
    0.1 0.1
    0.01 0.01
    0.001 0.001
    0.0001 0.0001
    1E-05 1E-05
    1E-06 1E-06
    1E-07 1E-07
    1E-08 1E-08
    1E-09 1E-09
    @PHP/standard/serialize/bug25378.php: SUCCEEDED
    @PHP/standard/serialize/bug26762.php: SUCCEEDED
    @PHP/standard/serialize/bug27469.php: SUCCEEDED
    @PHP/standard/serialize/bug28325.php: SUCCEEDED
    @PHP/standard/serialize/bug30234.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    FALSE
    FALSE
    __autoload(Autoload_Implements)
    object [invalid]
    FALSE
    FALSE
    FALSE
    FALSE
    TRUE
    __autoload(Autoload_Implements)
    object [invalid]
    FALSE
    FALSE
    TRUE
    @PHP/standard/serialize/bug31402.php: SUCCEEDED
    @PHP/standard/serialize/bug31442.php: SUCCEEDED
    @PHP/standard/strings/add-and-stripcslashes.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    kaboemkara!
    foo\b\a\r\b\az
    \f\o\o\[ \]
    \zoo['\.']
    \abcd\e\f\g\h\i\j\k\l\m\n\o\pqrstuvwxy\z
    1
    5d
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\@PHP\standard\strings\__input.txt at expression on line 3, column 1.
    
    kaboemkara!
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\@PHP\standard\strings\__input.txt at expression on line 5, column 1.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\@PHP\standard\strings\__input.txt at expression on line 6, column 1.
    
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\@PHP\standard\strings\__input.txt at expression on line 8, column 1.
    
    1
    5d
    @PHP/standard/strings/add-and-stripslashes.php: SUCCEEDED
    @PHP/standard/strings/basename.php: SUCCEEDED
    @PHP/standard/strings/bin2hex.php: SUCCEEDED
    @PHP/standard/strings/bug20108.php: SUCCEEDED
    @PHP/standard/strings/bug20169.php: SUCCEEDED
    @PHP/standard/strings/bug20261.php: SUCCEEDED
    @PHP/standard/strings/bug20927.php: SUCCEEDED
    @PHP/standard/strings/bug21338.php: SUCCEEDED
    @PHP/standard/strings/bug21453.php: SUCCEEDED
    @PHP/standard/strings/bug21730.php: SUCCEEDED
    @PHP/standard/strings/bug21744.php: SUCCEEDED
    @PHP/standard/strings/bug22008.php: SUCCEEDED
    @PHP/standard/strings/bug22187.php: SUCCEEDED
    @PHP/standard/strings/bug22224.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      0 => 
      object
      {
      }
      1 => 
      object
      {
      }
    }
    @PHP/standard/strings/bug22227.php: SUCCEEDED
    @PHP/standard/strings/bug22904.php: SUCCEEDED
    @PHP/standard/strings/bug23650.php: SUCCEEDED
    @PHP/standard/strings/bug23894.php: SUCCEEDED
    @PHP/standard/strings/bug24098.php: SUCCEEDED
    @PHP/standard/strings/bug24208.php: SUCCEEDED
    @PHP/standard/strings/bug24281.php: SUCCEEDED
    @PHP/standard/strings/bug25671.php: SUCCEEDED
    @PHP/standard/strings/bug25707.php: SUCCEEDED
    @PHP/standard/strings/bug26878.php: SUCCEEDED
    @PHP/standard/strings/bug26973.php: SUCCEEDED
    @PHP/standard/strings/bug27276.php: SUCCEEDED
    @PHP/standard/strings/bug27278.php: SUCCEEDED
    @PHP/standard/strings/bug27295.php: SUCCEEDED
    @PHP/standard/strings/bug27457.php: SUCCEEDED
    @PHP/standard/strings/bug27675.php: SUCCEEDED
    @PHP/standard/strings/bug28386.php: SUCCEEDED
    @PHP/standard/strings/bug33076.php: SUCCEEDED
    @PHP/standard/strings/chr_ord.php: SUCCEEDED
    @PHP/standard/strings/chunk_split.php: SUCCEEDED
    @PHP/standard/strings/count_chars.php: SUCCEEDED
    @PHP/standard/strings/crc32.php: SUCCEEDED
    @PHP/standard/strings/explode.php: SUCCEEDED
    @PHP/standard/strings/implode.php: SUCCEEDED
    @PHP/standard/strings/md5.php: SUCCEEDED
    @PHP/standard/strings/md5raw.php: SUCCEEDED
    @PHP/standard/strings/nl2br.php: SUCCEEDED
    @PHP/standard/strings/sha1.php: SUCCEEDED
    @PHP/standard/strings/sha1raw.php: SUCCEEDED
    @PHP/standard/strings/sprintf_f.php: SUCCEEDED
    @PHP/standard/strings/strcspn.php: SUCCEEDED
    @PHP/standard/strings/strings001.php: SUCCEEDED
    @PHP/standard/strings/strpos.php: SUCCEEDED
    @PHP/standard/strings/strrev.php: SUCCEEDED
    @PHP/standard/strings/strripos.php: SUCCEEDED
    @PHP/standard/strings/strrpos.php: SUCCEEDED
    @PHP/standard/strings/strspn.php: SUCCEEDED
    @PHP/standard/strings/strstr.php: SUCCEEDED
    @PHP/standard/strings/strtoupper.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    cfbfbdcfbfbdcfbfbd
    cfafbdcfafbdcfafbd
    @PHP/standard/strings/strtr.php: SUCCEEDED
    @PHP/standard/strings/strval.php: SUCCEEDED
    @PHP/standard/strings/str_repeat.php: SUCCEEDED
    @PHP/standard/strings/str_shuffle.php: SUCCEEDED
    @PHP/standard/strings/str_word_count.php: SUCCEEDED
    @PHP/standard/strings/substr_count.php: SUCCEEDED
    @PHP/standard/strings/substr_replace.php: SUCCEEDED
    @PHP/standard/strings/wordwrap.php: SUCCEEDED
    @PHP/standard/time/001.php: SUCCEEDED
    @PHP/standard/time/idate.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    U: 1043324459
    Y: 2003
    z: 22
    y: 3
    m: 1
    n: 1
    d: 23
    j: 23
    H: 13
    G: 13
    h: 1
    g: 1
    i: 20
    s: 59
    t: 31
    w: 4
    L: 0
    B: 556
    I: 0
    W: 4
    U: 1043324459
    Y: 2003
    z: 22
    y: 3
    m: 1
    n: 1
    d: 23
    j: 23
    H: 12
    G: 12
    h: 12
    g: 12
    i: 20
    s: 59
    t: 31
    w: 4
    L: 0
    B: 556
    I: 0
    W: 4
    @PHP/strings/001.php: SUCCEEDED
    @PHP/strings/002.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    fprintf test 1:abcde
    20
    printf test 1:simple string
    printf test 2:42
    printf test 3:3.333333
    printf test 4:3.3333333333
    printf test 5:2.50      
    printf test 6:2.50000000
    printf test 7:0000002.50
    printf test 8:<                 foo>
    printf test 9:<bar                 >
    printf test 10: 123456789012345
    printf test 10:<h´┐Żyesterettsjustitiarius>
    printf test 11: 123456789012345678901234567890
    printf test 11:<    h´┐Żyesterettsjustitiarius>
    printf test 12:-12.34
    printf test 13:  -12
    printf test 14:@
    printf test 15:10101010
    printf test 16:aa
    printf test 17:AA
    printf test 18:        10101010
    printf test 19:              aa
    printf test 20:              AA
    printf test 21:0000000010101010
    printf test 22:00000000000000aa
    printf test 23:00000000000000AA
    printf test 24:abcde
    printf test 25:gazonk
    printf test 26:2 1
    printf test 27:3 1 2
    printf test 28:02  1
    printf test 29:2   1
    printf test 30:x
    vprintf test 1:2   1
    fprintf test 1:abcde
    20
    printf test 1:simple string
    printf test 2:42
    printf test 3:3.333333
    printf test 4:3.3333333333
    printf test 5:2.50      
    printf test 6:2.50000000
    printf test 7:0000002.50
    printf test 8:<                 foo>
    printf test 9:<bar                 >
    printf test 10: 123456789012345
    printf test 10:<h�yesterettsjustitiarius>
    printf test 11: 123456789012345678901234567890
    printf test 11:<    h�yesterettsjustitiarius>
    printf test 12:-12.34
    printf test 13:  -12
    printf test 14:@
    printf test 15:10101010
    printf test 16:aa
    printf test 17:AA
    printf test 18:        10101010
    printf test 19:              aa
    printf test 20:              AA
    printf test 21:0000000010101010
    printf test 22:00000000000000aa
    printf test 23:00000000000000AA
    printf test 24:abcde
    printf test 25:gazonk
    printf test 26:2 1
    printf test 27:3 1 2
    printf test 28:02  1
    printf test 29:2   1
    printf test 30:x
    vprintf test 1:2   1
    @PHP/strings/bug22592.php: SUCCEEDED
    Arrays/array1.php: SUCCEEDED
    Arrays/array_diff_intersect.php: SUCCEEDED
    Arrays/array_diff_intersect2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Strict Standards: array_udiff() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 35
    Array
    (
        [0.5] => cr Object
            (
                [priv_member:cr:private] => 12
            )
    
        [0] => cr Object
            (
                [priv_member:cr:private] => 23
            )
    
    )
    
    Strict Standards: array_udiff_assoc() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 36
    Array
    (
        [0.1] => cr Object
            (
                [priv_member:cr:private] => 9
            )
    
        [0.5] => cr Object
            (
                [priv_member:cr:private] => 12
            )
    
        [0] => cr Object
            (
                [priv_member:cr:private] => 23
            )
    
    )
    
    Strict Standards: array_udiff_uassoc() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 37
    
    Strict Standards: array_udiff_uassoc() expects parameter 4 to be a valid callback, non-static method cr::comp_func_key() should not be called statically in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 37
    Array
    (
        [0.1] => cr Object
            (
                [priv_member:cr:private] => 9
            )
    
        [0.5] => cr Object
            (
                [priv_member:cr:private] => 12
            )
    
        [0] => cr Object
            (
                [priv_member:cr:private] => 23
            )
    
    )
    Array
    (
        [b] => brown
        [c] => blue
        [0] => red
    )
    ------------------------------------
    
    Strict Standards: array_uintersect() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 40
    Array
    (
        [0.1] => cr Object
            (
                [priv_member:cr:private] => 9
            )
    
        [1] => cr Object
            (
                [priv_member:cr:private] => 4
            )
    
        [2] => cr Object
            (
                [priv_member:cr:private] => -15
            )
    
    )
    
    Strict Standards: array_uintersect_assoc() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 41
    Array
    (
        [1] => cr Object
            (
                [priv_member:cr:private] => 4
            )
    
        [2] => cr Object
            (
                [priv_member:cr:private] => -15
            )
    
    )
    
    Strict Standards: array_uintersect_uassoc() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 42
    
    Strict Standards: array_uintersect_uassoc() expects parameter 4 to be a valid callback, non-static method cr::comp_func_key() should not be called statically in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 42
    Array
    (
        [1] => cr Object
            (
                [priv_member:cr:private] => 4
            )
    
        [2] => cr Object
            (
                [priv_member:cr:private] => -15
            )
    
    )
    Array
    (
        [a] => green
    )
    Array
    (
        [0.5] => cr Object
        (
            [priv_member:private] => 12
        )
    
        [0] => cr Object
        (
            [priv_member:private] => 23
        )
    
    )
    Array
    (
        [0.1] => cr Object
        (
            [priv_member:private] => 9
        )
    
        [0.5] => cr Object
        (
            [priv_member:private] => 12
        )
    
        [0] => cr Object
        (
            [priv_member:private] => 23
        )
    
    )
    Array
    (
        [0.1] => cr Object
        (
            [priv_member:private] => 9
        )
    
        [0.5] => cr Object
        (
            [priv_member:private] => 12
        )
    
        [0] => cr Object
        (
            [priv_member:private] => 23
        )
    
    )
    Array
    (
        [b] => brown
        [c] => blue
        [0] => red
    )
    ------------------------------------
    Array
    (
        [0.1] => cr Object
        (
            [priv_member:private] => 9
        )
    
        [1] => cr Object
        (
            [priv_member:private] => 4
        )
    
        [2] => cr Object
        (
            [priv_member:private] => -15
        )
    
    )
    Array
    (
        [1] => cr Object
        (
            [priv_member:private] => 4
        )
    
        [2] => cr Object
        (
            [priv_member:private] => -15
        )
    
    )
    Array
    (
        [1] => cr Object
        (
            [priv_member:private] => 4
        )
    
        [2] => cr Object
        (
            [priv_member:private] => -15
        )
    
    )
    Array
    (
        [a] => green
    )
    Arrays/array_diff_intersect3.php: SUCCEEDED
    Arrays/array_filter%20false%20entries%20%2322016.php: SUCCEEDED
    Arrays/array_map.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Array
    (
        [0] => Array
            (
                [0] => 1
                [1] => A
                [2] => 0
            )
    
        [1] => Array
            (
                [0] => 2
                [1] => B
                [2] => 0
            )
    
        [2] => Array
            (
                [0] => 3
                [1] => C
                [2] => 
            )
    
    )
    Array
    (
        [0] => 1 A 0
        [1] => 2 B 0
        [2] => 3 C 
    )
    Array
    (
        [A] => 2
        [10] => 3
    )
    Array
    (
        [0] => 1
        [1] => 2
        [2] => 3
    )
    Array
    (
        [0] => A
        [1] => B
        [2] => C
    )
    Array
    (
        [0] => 0
        [1] => 0
    )
    Array
    (
        [A] => 1
        [10] => 2
    )
    Array
    (
        [0] => Array
        (
            [0] => 1
            [1] => A
            [2] => 0
        )
    
        [1] => Array
        (
            [0] => 2
            [1] => B
            [2] => 0
        )
    
        [2] => Array
        (
            [0] => 3
            [1] => C
            [2] => 
        )
    
    )
    Array
    (
        [0] => 1 A 0
        [1] => 2 B 0
        [2] => 3 C 
    )
    Array
    (
        [A] => 2
        [10] => 3
    )
    Array
    (
        [0] => 1
        [1] => 2
        [2] => 3
    )
    Array
    (
        [0] => A
        [1] => B
        [2] => C
    )
    Array
    (
        [0] => x
        [1] => x
    )
    Array
    (
        [A] => 1
        [10] => 2
    )
    Arrays/array_merge_recursive.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Array
    (
        [color] => Array
            (
                [favorite] => Array
                    (
                        [0] => red
                        [1] => green
                    )
    
                [0] => blue
            )
    
        [0] => Array
            (
                [0] => 1
                [1] => 2
                [2] => 3
            )
    
        [q] => Array
            (
                [0] => 
                [1] => 
                [2] => x
            )
    
        [1] => 10
        [2] => Array
            (
                [0] => 4
                [1] => 5
                [2] => 6
            )
    
    )
    Array
    (
        [a] => Array
            (
                [0] => 1
                [1] => 2
                [2] => 3
                [3] => e
            )
    
    )
    Array
    (
        [a] => Array
            (
                [0] => 1
                [1] => 2
                [2] => 3
                [3] => e
            )
    
    )
    Array
    (
        [a] => 1
        [b] => 2
    )
    Array
    (
        [a] => xxx
        [b] => 2
    )
    Array
    (
        [a] => Array
            (
                [a] => Array
                    (
                        [a] => Array
     *RECURSION*
                    )
    
                [0] => 1
                [1] => 2
                [2] => 3
            )
    
    )
    Array
    (
        [a] => Array
            (
                [b] => Array
                    (
                        [0] => 1
                        [1] => 1
                    )
    
                [c] => 1
                [d] => Array
                    (
                        [0] => 2
                        [1] => 3
                    )
    
            )
    
    )
    Array
    (
        [a] => Array
            (
                [0] => 
                [1] => 
            )
    
    )
    Array
    (
        [a] => Array
            (
                [0] => 
                [1] => 
            )
    
    )
    Array
    (
        [color] => Array
        (
            [favorite] => Array
            (
                [0] => red
                [1] => green
            )
    
            [0] => blue
        )
    
        [0] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
        )
    
        [q] => Array
        (
            [0] => x
        )
    
        [1] => 10
        [2] => Array
        (
            [0] => 4
            [1] => 5
            [2] => 6
        )
    
    )
    Array
    (
        [a] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
            [3] => e
        )
    
    )
    Array
    (
        [a] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
            [3] => e
        )
    
    )
    Array
    (
        [a] => 1
        [b] => 2
    )
    Array
    (
        [a] => xxx
        [b] => 2
    )
    Array
    (
        [a] => Array
        (
            [a] => Array
            (
                [a] => Array [recursion]
    
    
            )
    
            [0] => 1
            [1] => 2
            [2] => 3
        )
    
    )
    Array
    (
        [a] => Array
        (
            [b] => Array
            (
                [0] => 1
                [1] => 1
            )
    
            [c] => 1
            [d] => Array
            (
                [0] => 2
                [1] => 3
            )
    
        )
    
    )
    Array
    (
        [a] => Array
        (
        )
    
    )
    Array
    (
        [a] => Array
        (
        )
    
    )
    Arrays/array_reduce1.php: SUCCEEDED
    Arrays/array_reduce2.php: SUCCEEDED
    Arrays/array_slice.php: SUCCEEDED
    Arrays/array_sumprod.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    float(8.3)
    float(0)
    int(6)
    int(6)
    float(4294967297)
    float(9.2233720282648E+18)
    bool(true)
    bool(false)
    float(-7.7)
    float(-38.4)
    int(6)
    int(6)
    int64(4294967297)
    int64(9223372028264841218)
    bool(true)
    bool(true)
    Arrays/array_unshift.php: SUCCEEDED
    Arrays/array_walk.php: SUCCEEDED
    Arrays/array_walk_recursive.php: SUCCEEDED
    Arrays/multisort.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    bool(true)
    Array
    (
        [0] => Array
            (
                [0] => 2
                [1] => 8
                [2] => 2
                [3] => 2
                [4] => 8
                [5] => 8
            )
    
        [1] => Array
            (
                [0] => 7
                [1] => 2
                [2] => 7
                [3] => 4
                [4] => 8
                [5] => 1
            )
    
        [2] => Array
            (
                [0] => 1
                [1] => 4
                [2] => 8
                [3] => 0
                [4] => 6
                [5] => 2
            )
    
        [3] => Array
            (
                [0] => 8
                [1] => 4
                [2] => 1
                [3] => 0
                [4] => 7
                [5] => 1
            )
    
        [4] => Array
            (
                [0] => 20
                [1] => 2
                [2] => 12
                [3] => 11
                [4] => 10
                [5] => 1
            )
    
    )
    Array
    (
        [0] => Array
            (
                [0] => 10
                [1] => 100
                [2] => 100
                [3] => a
            )
    
        [1] => Array
            (
                [0] => 1
                [1] => 3
                [2] => 2
                [3] => 1
            )
    
    )
    Array
    (
        [0] => 10
        [1] => a
        [2] => 100
        [3] => 100
    )
    Array
    (
        [0] => 1
        [1] => 1
        [2] => 2
        [3] => 3
    )
    bool(true)
    Array
    (
        [0] => Array
        (
            [0] => 2
            [1] => 8
            [2] => 2
            [3] => 2
            [4] => 8
            [5] => 8
        )
    
        [1] => Array
        (
            [0] => 7
            [1] => 2
            [2] => 7
            [3] => 4
            [4] => 8
            [5] => 1
        )
    
        [2] => Array
        (
            [0] => 1
            [1] => 4
            [2] => 8
            [3] => 0
            [4] => 6
            [5] => 2
        )
    
        [3] => Array
        (
            [0] => 8
            [1] => 4
            [2] => 1
            [3] => 0
            [4] => 7
            [5] => 1
        )
    
        [4] => Array
        (
            [0] => 20
            [1] => 2
            [2] => 12
            [3] => 11
            [4] => 10
            [5] => 1
        )
    
    )
    Array
    (
        [0] => Array
        (
            [0] => 10
            [1] => 100
            [2] => 100
            [3] => a
        )
    
        [1] => Array
        (
            [0] => 1
            [1] => 3
            [2] => 2
            [3] => 1
        )
    
    )
    Array
    (
        [0] => 10
        [1] => a
        [2] => 100
        [3] => 100
    )
    Array
    (
        [0] => 1
        [1] => 1
        [2] => 2
        [3] => 3
    )
    Arrays/multisort_empty.php: SUCCEEDED
    Arrays/nonarray%20access%20%2322019.php: SUCCEEDED
    Arrays/optimizations.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    3
    4
    5
    a
    b
    c
    
    Warning: strtolower() expects parameter 1 to be string, array given in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 15
    
    cablo
    3
    4
    5
    a
    b
    c
    array
    cablo
    Arrays/recursion.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    f1:
    array(2) {
      ["a"]=>
      array(5) {
        ["a"]=>
        &array(3) {
          ["a"]=>
          &array(3) {
            ["a"]=>
            *RECURSION*
            [0]=>
            string(1) "y"
            [1]=>
            string(1) "z"
          }
          [0]=>
          string(1) "y"
          [1]=>
          string(1) "z"
        }
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        string(1) "x"
      }
      [0]=>
      string(1) "w"
    }
    f2:
    array(1) {
      ["A"]=>
      &array(2) {
        ["a"]=>
        &array(2) {
          ["a"]=>
          *RECURSION*
          [0]=>
          string(1) "z"
        }
        [0]=>
        string(1) "z"
      }
    }
    f3:
    array(2) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) {
          [0]=>
          *RECURSION*
          [1]=>
          string(1) "z"
        }
        [1]=>
        string(1) "z"
      }
      [1]=>
      string(1) "z"
    }
    f4:
    
    Warning: array_merge_recursive(): recursion detected in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 37
    array(1) {
      ["a"]=>
      &array(3) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
      }
    }
    f5:
    array(1) {
      ["a"]=>
      array(6) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        int(1)
        [4]=>
        int(2)
        [5]=>
        int(3)
      }
    }
    f6:
    array(1) {
      ["a"]=>
      array(2) {
        [0]=>
        string(2) "xx"
        [1]=>
        int(2)
      }
    }
    f7:
    array(1) {
      ["a"]=>
      array(1) {
        ["a"]=>
        array(1) {
          ["a"]=>
          &array(1) {
            ["a"]=>
            &array(1) {
              ["a"]=>
              *RECURSION*
            }
          }
        }
      }
    }
    f1:
    array(2) {
      ["a"]=>
      array(5) {
        ["a"]=>
        &array(3) {
          ["a"]=>
          &array(3) [recursion]
          [0]=>
          string(1) "y"
          [1]=>
          string(1) "z"
        }
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        string(1) "x"
      }
      [0]=>
      string(1) "w"
    }
    f2:
    array(1) {
      ["A"]=>
      &array(2) {
        ["a"]=>
        &array(2) [recursion]
        [0]=>
        string(1) "z"
      }
    }
    f3:
    array(2) {
      [0]=>
      &array(2) [recursion]
      [1]=>
      string(1) "z"
    }
    f4:
    array(1) {
      ["a"]=>
      array(6) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        int(1)
        [4]=>
        int(2)
        [5]=>
        int(3)
      }
    }
    f5:
    array(1) {
      ["a"]=>
      array(6) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        int(1)
        [4]=>
        int(2)
        [5]=>
        int(3)
      }
    }
    f6:
    array(1) {
      ["a"]=>
      array(2) {
        [0]=>
        string(2) "xx"
        [1]=>
        int(2)
      }
    }
    f7:
    array(1) {
      ["a"]=>
      &array(1) {
        ["a"]=>
        &array(1) [recursion]
      }
    }
    Arrays/sort.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    sort regular:
    Array
    (
        [0] => 0
        [1] => 1
        [2] => 1
        [3] => 8
        [4] => 0x10
        [5] => 10x
        [6] => 20x
        [7] => ach0
        [8] => add1
        [9] => x10
        [10] => x2
    )
    
    sort numeric:
    Array
    (
        [0] => add1
        [1] => x2
        [2] => 0x10
        [3] => ach0
        [4] => 0
        [5] => x10
        [6] => 1
        [7] => 1
        [8] => 8
        [9] => 10x
        [10] => 20x
    )
    
    sort string:
    Array
    (
        [0] => 0
        [1] => 0x10
        [2] => 1
        [3] => 1
        [4] => 10x
        [5] => 20x
        [6] => 8
        [7] => ach0
        [8] => add1
        [9] => x10
        [10] => x2
    )
    
    sort locale:
    Array
    (
        [0] => 0
        [1] => 0x10
        [2] => 1
        [3] => 1
        [4] => 10x
        [5] => 20x
        [6] => 8
        [7] => ach0
        [8] => add1
        [9] => x10
        [10] => x2
    )
    
    ksort regular:
    Array
    (
        [x] => 8
        [z] => 1
        [0] => x10
        [1] => 10x
        [2b] => 1
        [2] => 20x
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [10a] => 0
    )
    
    ksort numeric:
    Array
    (
        [x] => 8
        [z] => 1
        [0] => x10
        [1] => 10x
        [2b] => 1
        [2] => 20x
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [10a] => 0
    )
    
    ksort string:
    Array
    (
        [0] => x10
        [1] => 10x
        [10a] => 0
        [2] => 20x
        [2b] => 1
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [x] => 8
        [z] => 1
    )
    
    ksort locale:
    Array
    (
        [0] => x10
        [1] => 10x
        [10a] => 0
        [2] => 20x
        [2b] => 1
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [x] => 8
        [z] => 1
    )
    
    asort regular:
    Array
    (
        [10a] => 0
        [2b] => 1
        [z] => 1
        [x] => 8
        [4] => 0x10
        [1] => 10x
        [2] => 20x
        [5] => ach0
        [6] => add1
        [0] => x10
        [3] => x2
    )
    
    asort numeric:
    Array
    (
        [6] => add1
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [10a] => 0
        [0] => x10
        [z] => 1
        [2b] => 1
        [x] => 8
        [1] => 10x
        [2] => 20x
    )
    
    asort string:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [z] => 1
        [2b] => 1
        [1] => 10x
        [2] => 20x
        [x] => 8
        [5] => ach0
        [6] => add1
        [0] => x10
        [3] => x2
    )
    
    asort locale:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [z] => 1
        [2b] => 1
        [1] => 10x
        [2] => 20x
        [x] => 8
        [5] => ach0
        [6] => add1
        [0] => x10
        [3] => x2
    )
    
    rsort regular:
    Array
    (
        [0] => x2
        [1] => x10
        [2] => add1
        [3] => ach0
        [4] => 20x
        [5] => 10x
        [6] => 0x10
        [7] => 8
        [8] => 1
        [9] => 1
        [10] => 0
    )
    
    rsort numeric:
    Array
    (
        [0] => 20x
        [1] => 10x
        [2] => 8
        [3] => 1
        [4] => 1
        [5] => ach0
        [6] => add1
        [7] => 0x10
        [8] => x2
        [9] => x10
        [10] => 0
    )
    
    rsort string:
    Array
    (
        [0] => x2
        [1] => x10
        [2] => add1
        [3] => ach0
        [4] => 8
        [5] => 20x
        [6] => 10x
        [7] => 1
        [8] => 1
        [9] => 0x10
        [10] => 0
    )
    
    rsort locale:
    Array
    (
        [0] => x2
        [1] => x10
        [2] => add1
        [3] => ach0
        [4] => 8
        [5] => 20x
        [6] => 10x
        [7] => 1
        [8] => 1
        [9] => 0x10
        [10] => 0
    )
    
    natsort:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [2b] => 1
        [z] => 1
        [x] => 8
        [1] => 10x
        [2] => 20x
        [5] => ach0
        [6] => add1
        [3] => x2
        [0] => x10
    )
    sort regular:
    Array
    (
        [0] => 0x10
        [1] => 10x
        [2] => 20x
        [3] => ach0
        [4] => add1
        [5] => x10
        [6] => 0
        [7] => x2
        [8] => 1
        [9] => 1
        [10] => 8
    )
    
    sort numeric:
    Array
    (
        [0] => x10
        [1] => 0
        [2] => x2
        [3] => ach0
        [4] => add1
        [5] => 1
        [6] => 1
        [7] => 8
        [8] => 10x
        [9] => 0x10
        [10] => 20x
    )
    
    sort string:
    Array
    (
        [0] => 0
        [1] => 0x10
        [2] => 1
        [3] => 1
        [4] => 10x
        [5] => 20x
        [6] => 8
        [7] => ach0
        [8] => add1
        [9] => x10
        [10] => x2
    )
    
    sort locale:
    Array
    (
        [0] => 0
        [1] => 0x10
        [2] => 1
        [3] => 1
        [4] => 10x
        [5] => 20x
        [6] => 8
        [7] => add1
        [8] => ach0
        [9] => x10
        [10] => x2
    )
    
    ksort regular:
    Array
    (
        [x] => 8
        [z] => 1
        [0] => x10
        [1] => 10x
        [2] => 20x
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [10a] => 0
        [2b] => 1
    )
    
    ksort numeric:
    Array
    (
        [x] => 8
        [z] => 1
        [0] => x10
        [1] => 10x
        [2b] => 1
        [2] => 20x
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [10a] => 0
    )
    
    ksort string:
    Array
    (
        [0] => x10
        [1] => 10x
        [10a] => 0
        [2] => 20x
        [2b] => 1
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [x] => 8
        [z] => 1
    )
    
    ksort locale:
    Array
    (
        [0] => x10
        [1] => 10x
        [10a] => 0
        [2] => 20x
        [2b] => 1
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [x] => 8
        [z] => 1
    )
    
    asort regular:
    Array
    (
        [4] => 0x10
        [1] => 10x
        [2] => 20x
        [5] => ach0
        [6] => add1
        [0] => x10
        [10a] => 0
        [3] => x2
        [z] => 1
        [2b] => 1
        [x] => 8
    )
    
    asort numeric:
    Array
    (
        [0] => x10
        [10a] => 0
        [3] => x2
        [5] => ach0
        [6] => add1
        [z] => 1
        [2b] => 1
        [x] => 8
        [1] => 10x
        [4] => 0x10
        [2] => 20x
    )
    
    asort string:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [z] => 1
        [2b] => 1
        [1] => 10x
        [2] => 20x
        [x] => 8
        [5] => ach0
        [6] => add1
        [0] => x10
        [3] => x2
    )
    
    asort locale:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [z] => 1
        [2b] => 1
        [1] => 10x
        [2] => 20x
        [x] => 8
        [6] => add1
        [5] => ach0
        [0] => x10
        [3] => x2
    )
    
    rsort regular:
    Array
    (
        [0] => 8
        [1] => 1
        [2] => 1
        [3] => x2
        [4] => x10
        [5] => 0
        [6] => add1
        [7] => ach0
        [8] => 20x
        [9] => 10x
        [10] => 0x10
    )
    
    rsort numeric:
    Array
    (
        [0] => 20x
        [1] => 0x10
        [2] => 10x
        [3] => 8
        [4] => 1
        [5] => 1
        [6] => x10
        [7] => 0
        [8] => x2
        [9] => ach0
        [10] => add1
    )
    
    rsort string:
    Array
    (
        [0] => x2
        [1] => x10
        [2] => add1
        [3] => ach0
        [4] => 8
        [5] => 20x
        [6] => 10x
        [7] => 1
        [8] => 1
        [9] => 0x10
        [10] => 0
    )
    
    rsort locale:
    Array
    (
        [0] => x2
        [1] => x10
        [2] => ach0
        [3] => add1
        [4] => 8
        [5] => 20x
        [6] => 10x
        [7] => 1
        [8] => 1
        [9] => 0x10
        [10] => 0
    )
    
    natsort:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [z] => 1
        [2b] => 1
        [x] => 8
        [1] => 10x
        [2] => 20x
        [5] => ach0
        [6] => add1
        [3] => x2
        [0] => x10
    )
    Arrays/usort.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    Array
    (
        [0] => 10
        [1] => 9
        [2] => 8
        [3] => 7
        [4] => 6
        [5] => 5
        [6] => 4
        [7] => 3
        [8] => 2
        [9] => 1
    )
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Array
    (
        [0] => 10
        [1] => 9
        [2] => 8
        [3] => 7
        [4] => 6
        [5] => 5
        [6] => 4
        [7] => 3
        [8] => 2
        [9] => 1
    )
    Arrays/lazy_copy/001.php: SUCCEEDED
    Arrays/lazy_copy/002.php: SUCCEEDED
    Arrays/lazy_copy/003.php: SUCCEEDED
    Arrays/lazy_copy/004.php: SUCCEEDED
    Arrays/lazy_copy/005.php: SUCCEEDED
    Arrays/lazy_copy/006.php: SUCCEEDED
    Bugs/class_incompletepart.php: SUCCEEDED
    Bugs/division-by-zero.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    DIVISION
    
    Warning: Division by zero in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 6
    bool(false)
    
    Warning: Division by zero in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 8
    bool(false)
    
    Warning: Division by zero in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 10
    bool(false)
    
    Warning: Division by zero in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 12
    bool(false)
    MODULO
    
    Warning: Division by zero in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 16
    bool(false)
    
    Warning: Division by zero in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 18
    bool(false)
    
    Warning: Division by zero in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 20
    bool(false)
    
    Warning: Division by zero in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 22
    bool(false)
    DIVISION
    bool(false)
    bool(false)
    
    Warning: Division by zero in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt at expression on line 10, column 2.
    bool(false)
    
    Warning: Division by zero in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt at expression on line 12, column 2.
    bool(false)
    MODULO
    bool(false)
    bool(false)
    
    Warning: Division by zero in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt at expression on line 20, column 2.
    bool(false)
    
    Warning: Division by zero in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt at expression on line 22, column 2.
    bool(false)
    C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt(6,10): warning PHP0150: Division by zero
    C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt(8,9): warning PHP0150: Division by zero
    C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt(16,10): warning PHP0150: Division by zero
    C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt(18,9): warning PHP0150: Division by zero
    
    Bugs/function-in-unknown-class.php: SUCCEEDED
    Bugs/is_a_null_value.php: SUCCEEDED
    Bugs/preg-named-groups.php: SUCCEEDED
    Bugs/preg-replace-advanced.php: SUCCEEDED
    Bugs/preg-replace-range.php: SUCCEEDED
    Bugs/preg-replace.php: SUCCEEDED
    Bugs/preg-this-dynamic.php: FAILED
    Script hung upNo errorsSuccess
    Expected test outputReal script output
    Unhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---> PHP.Core.Debug+AssertException: Assertion failed: 
       at PHP.Core.Debug.Fail(String message)
       at PHP.Core.Debug.Assert(Boolean condition)
       at PHP.Core.RelativePath.ParseCanonical(String relativePath)
       at PHP.Core.Emit.TransientAssemblyBuilder.Build(String sourceCode, SourceCodeDescriptor descriptor, EvalKinds kind, CompilationContext context, ScriptContext scriptContext, DTypeDesc referringType, NamingContext namingContext, Boolean completeSource)
       at PHP.Core.DynamicCode.EvalInternal(String prefix, String code, String suffix, EvalKinds kind, ScriptContext scriptContext, Dictionary`2 localVariables, DObject self, DTypeDesc referringType, SourceCodeDescriptor descriptor, Boolean entireFile, NamingContext namingContext)
       at PHP.Core.DynamicCode.Eval(String code, Boolean synthetic, ScriptContext context, Dictionary`2 definedVariables, DObject self, DTypeDesc referringType, String callerRelativeSourcePath, Int32 line, Int32 column, Int32 containerId, NamingContext namingContext)
       at PHP.Library.PerlRegExp.Evaluator.ReplaceCodeExecute(Match m)
       at System.Text.RegularExpressions.RegexReplacement.Replace(MatchEvaluator evaluator, Regex regex, String input, Int32 count, Int32 startat)
       at System.Text.RegularExpressions.Regex.Replace(String input, MatchEvaluator evaluator, Int32 count)
       at PHP.Library.PerlRegExp.ReplaceInternal(DObject self, Dictionary`2 definedVariables, PerlRegExpConverter converter, PhpCallback callback, String str, Int32 limit, SourceCodeDescriptor sourceCodeDesc, Int32& count)
       at PHP.Library.PerlRegExp.SimpleReplace(DObject self, Dictionary`2 definedVariables, Object pattern, String replacement, PhpCallback callback, Object data, Int32 limit, SourceCodeDescriptor descriptor, Int32& count)
       at PHP.Library.PerlRegExp.Replace(ScriptContext context, DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, PhpCallback callback, Object data, Int32 limit, Int32& count)
       at PHP.Library.PerlRegExp.Replace(ScriptContext context, DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, Object data)
       at PHP.Dynamic.PhpNetClassLibrary.preg_replace(Object , PhpStack )
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <__input.txt>.a.a(ScriptContext ) in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt:line 16
       at <__input.txt>.a.<Mediator>(ScriptContext )
       at <__input.txt>.a.a(Object instance, PhpStack stack)
       at <__input.txt>.<Script>.<Main>(ScriptContext <context>, Dictionary`2 <locals>, DObject <self>, DTypeDesc <includer>, Boolean <request>) in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt:line 19
       at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)
       at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)
       --- End of inner exception stack trace ---
       at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)
       at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)
       at <Global>.Run(String[] )
    
    Bugs/preg-this-dynamic2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    foo: ahoj
    foo: lidi
    foo: rozkladame
    foo: ahoj
    foo: lidi
    foo: rozkladame
    foo: ahoj
    foo: lidi
    foo: rozkladame
    
    Notice: Undefined variable: this.
    
    Error: Call to a member function foo() on a non-object.
    Bugs/preg-this.php: SUCCEEDED
    Bugs/preg-ungreedy-bugs.php: SUCCEEDED
    Bugs/preg-unkn.php: SUCCEEDED
    Bugs/trigger_error%20line%20number%20%232787.php: SUCCEEDED
    CLR/BaseTypes.php: SUCCEEDED
    CLR/ClrEvent.php: SUCCEEDED
    CLR/ConditionalDecls.php: SUCCEEDED
    CLR/ConditionalDecls2.php: SUCCEEDED
    CLR/foreach.php: SUCCEEDED
    CLR/handle_enum.php: SUCCEEDED
    CLR/Inheritance1.php: FAILED
    Phalanger misbehaviour while compiling [file] sectionSee belowSuccess
    Expected test outputReal script output
    C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(3,2): error PHP2031: Circular interface inheritance dependency involving 'I4' and 'I1'
    C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(6,2): (related location)
    
    CLR/Inheritance2.php: FAILED
    Phalanger misbehaviour while compiling [file] sectionSee belowSuccess
    Expected test outputReal script output
    C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(3,2): error PHP2031: Circular interface inheritance dependency involving 'J4' and 'J1'
    C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(6,2): (related location)
    
    CLR/Inheritance3.php: FAILED
    Phalanger misbehaviour while compiling [file] sectionSee belowSuccess
    Expected test outputReal script output
    C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(3,2): error PHP2031: Circular interface inheritance dependency involving 'J5' and 'J5'
    C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(3,2): (related location)
    
    CLR/Inheritance4.php: FAILED
    Phalanger misbehaviour while compiling [file] sectionSee belowSuccess
    Expected test outputReal script output
    error PHP2007: Internal error! 
    Please, report this bug via http://www.codeplex.com/WorkItem/List.aspx?ProjectName=Phalanger.
    Additional information: 
    Could not load type '<__input.txt>.J`1' from assembly 'Inheritance4_file, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' because it has recursive generic definition.
       at System.Reflection.Emit.TypeBuilder.TermCreateClass(RuntimeModule module, Int32 tk, ObjectHandleOnStack type)
       at System.Reflection.Emit.TypeBuilder.CreateTypeNoLock()
       at System.Reflection.Emit.TypeBuilder.CreateType()
       at PHP.Core.Reflection.PhpType.Bake()
       at PHP.Core.Reflection.ScriptCompilationUnit.Bake()
       at PHP.Core.Reflection.InclusionGraphBuilder.EmitAllUnits(CodeGenerator codeGenerator)
       at PHP.Core.Emit.ScriptAssemblyBuilder.CompileScripts(IEnumerable`1 sourceFiles, String duckPath, String duckNamespace, CompilationContext context)
       at PHP.Core.Emit.ScriptAssemblyBuilder.Build(IEnumerable`1 sourceFiles, CompilationContext context)
       at PHP.Core.ApplicationCompiler.Compile(ApplicationContext applicationContext, CompilerConfiguration config, ErrorSink errorSink, CompilationParameters ps)
    
    
    CLR/Inheritance5.php: SUCCEEDED
    CLR/Inheritance6.php: SUCCEEDED
    CLR/Inheritance7.php: SUCCEEDED
    CLR/Inheritance8.php: SUCCEEDED
    CLR/Inheritance9.php: FAILED
    Phalanger misbehaviour while compiling [file] sectionSee belowSuccess
    Expected test outputReal script output
    C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(14,2): error PHP1018: Class 'D' doesn't implement abstract method I::f()
    
    CLR/Lambdas.php: FAILED
    Phalanger misbehaviour while compiling [file] sectionSee belowCompile error
    Expected test outputReal script output
    C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(4,3): error PHP1120: Unknown custom attribute; neither of types 'AttributeUsage' and 'AttributeUsageAttribute' exists
    C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(17,3): error PHP1120: Unknown custom attribute; neither of types 'MyAttribute' and 'MyAttributeAttribute' exists
    C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(27,22): error PHP1120: Unknown custom attribute; neither of types 'MyAttribute' and 'MyAttributeAttribute' exists
    
    CLR/NameResolving.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    bool(false)
    bool(true)
    object(Directory)(2)
    {
      ["handle"] => NULL
      ["path"] => NULL
    }
    bool(false)
    
    Error: Class 'Dictionary' not found in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt at expression on line 12, column 4.
    Compiler/abstracts.php: SUCCEEDED
    Compiler/aliased%20assign%20add.php: SUCCEEDED
    Compiler/assignments.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ---1---1float(-1.5)
    float(2.5)
    float(0.83333333333333)
    int(6)
    int(8)
    ---2---2float(8.8333333333333)
    float(8.8333333333333)
    float(8.8333333333333)
    int(8)
    int(8)
    ---3---3---4---4---5---5array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [1]=>
      array(1) {
        [2]=>
        array(1) {
          [3]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    ---6---6array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "u"
    }
    array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "v"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    ---7---7array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    ---8---8
    ---1---1float(-1.5)
    float(2.5)
    float(0.833333333333333)
    int(6)
    int(8)
    ---2---2float(8.83333333333333)
    float(8.83333333333333)
    float(8.83333333333333)
    int(8)
    int(8)
    ---3---3---4---4---5---5array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [1]=>
      array(1) {
        [2]=>
        array(1) {
          [3]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    ---6---6array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "u"
    }
    array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "v"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    ---7---7array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    ---8---8
    Compiler/assign_in_call.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    g1:
    f(x)
    u(x)
    'x'
    
    g2:
    f(x)
    u(x)
    'b'
    
    g3:
    f(x)
    u(x)
    'b'
    
    g4:
    f(x)
    u(x)
    'b'
    
    g5:
    f()
    u()
    integer(1)
    
    g6:
    f(3)
    u(3)
    integer(3)
    
    g7:
    f(2)
    u(10)
    integer(10)
    
    g8:
    f(1)
    f(1)
    f(1)
    u(1)
    u()
    u(1)
    
    g9:
    known:
    __get(p) = 0
    __set(p,1)
    f(1)
    unknown:
    __get(p) = 1
    __set(p,3)
    u(3)
    
    g10:
    Done.
    g1:
    f(x)
    u(x)
    'x'
    
    g2:
    f(x)
    u(x)
    'b'
    
    g3:
    f(x)
    u(x)
    'b'
    
    g4:
    f(x)
    u(x)
    'b'
    
    g5:
    f()
    u()
    integer(1)
    
    g6:
    f(3)
    u(3)
    integer(3)
    
    g7:
    f(2)
    u(10)
    integer(10)
    
    g8:
    f(1)
    f(1)
    f(1)
    u(1)
    u()
    u(1)
    
    g9:
    known:
    __get(p) = 0
    __set(p,1)
    __get(p) = 1
    f(1)
    unknown:
    __get(p) = 1
    __set(p,3)
    __get(p) = 3
    u(3)
    
    g10:
    Done.
    Compiler/auto_globals_001.php: SUCCEEDED
    Compiler/auto_globals_002.php: SUCCEEDED
    Compiler/auto_globals_003.php: SUCCEEDED
    Compiler/break_in_global_code.php: SUCCEEDED
    Compiler/chaining_test.php: SUCCEEDED
    Compiler/chain_ending_by_string_index.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        string(1) "f"
      }
    }
    array(1) {
      [0]=>
      string(4) "xubu"
    }
    object(C)#1 (1) {
      ["f"]=>
      string(4) "kuxu"
    }
    string(5) "helxo"
    string(5) "helxo"
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        string(1) "f"
      }
    }
    array(1) {
      [0]=>
      string(4) "bubu"
    }
    
    Warning: A string item used as a reference in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt at expression on line 19, column 1.
    object(C)(1) {
      ["f"]=>
      string(4) "kuku"
    }
    
    Warning: A string item used as a reference in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt at expression on line 25, column 1.
    string(5) "hello"
    
    Warning: A string item used as a reference in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt at expression on line 31, column 1.
    string(5) "hello"
    Compiler/continue_in_global_code.php: SUCCEEDED
    Compiler/deep_copy.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array(1) {
      [0]=>
      &array(1) {
        [0]=>
        &array(1) {
          [0]=>
          *RECURSION*
        }
      }
    }
    array(1) {
      [0]=>
      &array(1) {
        [0]=>
        &array(1) {
          [0]=>
          *RECURSION*
        }
      }
    }
    array(2) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) {
          [0]=>
          *RECURSION*
          [1]=>
          int(1)
        }
        [1]=>
        int(1)
      }
      [1]=>
      int(1)
    }
    array(1) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) {
          [0]=>
          *RECURSION*
          [1]=>
          int(1)
        }
        [1]=>
        int(1)
      }
    }
    array(1) {
      [0]=>
      &array(1) [recursion]
    }
    array(1) {
      [0]=>
      &array(1) {
        [0]=>
        &array(1) [recursion]
      }
    }
    array(2) {
      [0]=>
      &array(2) [recursion]
      [1]=>
      int(1)
    }
    array(1) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) [recursion]
        [1]=>
        int(1)
      }
    }
    Compiler/deep_copy_refbox.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Strict Standards: Only variables should be passed by reference in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt on line 42
    array
    {
      0 => integer(1)
    }
    
    Strict Standards: Only variables should be passed by reference in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt on line 45
    array
    {
      0 => integer(1)
    }
    
    Strict Standards: Only variables should be passed by reference in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt on line 49
    array
    {
      0 => integer(1)
    }
    
    Strict Standards: Only variables should be passed by reference in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt on line 52
    array
    {
      0 => integer(1)
    }
    array
    {
      0 => integer(1)
      1 => integer(1)
    }
    array
    {
      0 => integer(1)
      1 => integer(1)
    }
    array
    {
      0 => integer(1)
      1 => integer(1)
    }
    array
    {
      0 => integer(1)
      1 => integer(1)
    }
    Compiler/expr_init.php: SUCCEEDED
    Compiler/foreach1.php: SUCCEEDED
    Compiler/foreach_arrays.php: SUCCEEDED
    Compiler/for_loop.php: SUCCEEDED
    Compiler/function_002.php: SUCCEEDED
    Compiler/function_003.php: SUCCEEDED
    Compiler/function_004.php: SUCCEEDED
    Compiler/function_call.php: SUCCEEDED
    Compiler/func_get_args.php: SUCCEEDED
    Compiler/if_statement.php: SUCCEEDED
    Compiler/indirect_001.php: SUCCEEDED
    Compiler/indirect_002.php: SUCCEEDED
    Compiler/indirect_003.php: SUCCEEDED
    Compiler/indirect_004.php: SUCCEEDED
    Compiler/indirect_005.php: SUCCEEDED
    Compiler/indirect_007.php: SUCCEEDED
    Compiler/indirect_global.php: SUCCEEDED
    Compiler/inheritance.php: SUCCEEDED
    Compiler/inheritance2.php: SUCCEEDED
    Compiler/isset_unset_001.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Testing x in global code:  <br>
    1 <br>
     <br>
    Testing x (object) in optimized function:  <br>
    1 <br>
     <br>
    Testing x (PhpReference) in optimized function:  <br>
    1 <br>
     <br>
    
    Notice: Undefined variable: y in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt on line 29
    Testing $$x (created at runtime) in optimized function:  <br>
    1 <br>
    Testing x in global code:  <br>
    1 <br>
     <br>
    Testing x (object) in optimized function:  <br>
    1 <br>
     <br>
    Testing x (PhpReference) in optimized function:  <br>
    1 <br>
     <br>
    Testing $$x (created at runtime) in optimized function:  <br>
    1 <br>
    Compiler/list%20%2326681.php: SUCCEEDED
    Compiler/new_array_item_assignadd.php: SUCCEEDED
    Compiler/null_hints.php: SUCCEEDED
    Compiler/pure_create_function.php: SUCCEEDED
    Compiler/pure_function_exists.php: SUCCEEDED
    Compiler/pure_math_str.php: SUCCEEDED
    Compiler/static_call.php: SUCCEEDED
    Compiler/switch.php: SUCCEEDED
    Compiler/ternary_ex.php: SUCCEEDED
    Compiler/this%20call.php: SUCCEEDED
    Compiler/typehint_check.php: SUCCEEDED
    Compiler/__call.php: SUCCEEDED
    Compiler/Inclusions/include2.php: SUCCEEDED
    Compiler/Inclusions/include3.php: SUCCEEDED
    Compiler/Inclusions/include6.php: SUCCEEDED
    Compiler/Inclusions/include_test.php: SUCCEEDED
    Compiler/Inclusions/script.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t01.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t02.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t03.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t04.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t05.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t08.php: SUCCEEDED
    Compiler/PseudoConst/parent.php: SUCCEEDED
    Compiler/PseudoConst/parent2.php: SUCCEEDED
    Compiler/PseudoConst/self.php: SUCCEEDED
    Compiler/PseudoConst/t01.php: SUCCEEDED
    Compiler/PseudoConst/t02.php: SUCCEEDED
    Compiler/PseudoConst/t03.php: SUCCEEDED
    Compiler/PseudoConst/t04.php: SUCCEEDED
    Compiler/PseudoConst/t05.php: SUCCEEDED
    Compiler/PseudoConst/t06.php: SUCCEEDED
    Compiler/PseudoConst/t07.php: SUCCEEDED
    Compiler/PseudoConst/t08.php: SUCCEEDED
    Compiler/PseudoConst/t09.php: SUCCEEDED
    Compiler/PseudoConst/t10.php: SUCCEEDED
    Compiler/PseudoConst/t11.php: SUCCEEDED
    Compiler/PseudoConst/_class_.php: SUCCEEDED
    Compiler/PseudoConst/_function_.php: SUCCEEDED
    Compiler/References/array_argument.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(2)
        [1]=>
        int(3)
      }
    }
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    Compiler/References/array_local.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(2)
        [1]=>
        int(3)
      }
    }
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    Compiler/References/array_ret_argument.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(2)
        [1]=>
        int(3)
      }
    }
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    Compiler/References/array_ret_argument2.php: SUCCEEDED
    Compiler/References/deepcopy.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <br/><br/>globalobjects: array(2) {
      [0]=>
      int(1)
      [1]=>
      int(7)
    }
    <br/><br/>globalobjects: array(2) {
      [0]=>
      int(1)
      [1]=>
      &int(7)
    }
    Compiler/References/explicitclear.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Construyendo Y
    call foo12Destruyendo Y
    3object(X)#1 (2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      int(54)
    }
    array(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      string(10) "Init Value"
    }
    x: object(X)#1 (2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      int(1004)
    }
    <br/>checkpoint array(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      int(54)
    }
    Construyendo Y
    call foo123object(X)(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      &int(54)
    }
    array(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      &int(54)
    }
    x: object(X)(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      &int(1004)
    }
    <br/>checkpoint array(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      &int(1004)
    }
    Destruyendo Y
    Compiler/References/field_argument.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: int(7)
    <br/><br/>checkpoint array(1) {
      ["objects"]=>
      int(8)
    }
    x: int(7)
    <br/><br/>checkpoint array(1) {
      ["objects"]=>
      &int(7)
    }
    Compiler/References/field_local.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: object(X)#1 (1) {
      ["objects"]=>
      int(25)
    }
    <br/>checkpoint array(1) {
      ["objects"]=>
      int(7)
    }
    x: object(X)(1) {
      ["objects"]=>
      &int(25)
    }
    <br/>checkpoint array(1) {
      ["objects"]=>
      &int(25)
    }
    Compiler/References/ref_arrayitem.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(2)
        [1]=>
        int(3)
      }
    }
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    Compiler/References/ref_reasign.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    object(X)#1 (2) {
      ["objects"]=>
      int(54)
      ["objects2"]=>
      &int(222)
    }
    array(2) {
      ["objects"]=>
      int(7)
      ["objects2"]=>
      &int(222)
    }
    x: object(X)#1 (2) {
      ["objects"]=>
      int(1004)
      ["objects2"]=>
      int(777)
    }
    <br/>checkpoint array(2) {
      ["objects"]=>
      int(54)
      ["objects2"]=>
      int(222)
    }
    object(X)(2) {
      ["objects"]=>
      &int(54)
      ["objects2"]=>
      &int(222)
    }
    array(2) {
      ["objects"]=>
      &int(54)
      ["objects2"]=>
      &int(222)
    }
    x: object(X)(2) {
      ["objects"]=>
      &int(1004)
      ["objects2"]=>
      &int(777)
    }
    <br/>checkpoint array(2) {
      ["objects"]=>
      &int(1004)
      ["objects2"]=>
      &int(777)
    }
    Compiler/Unreachable/t13.php: SUCCEEDED
    Compiler/Unset/calluserfunc.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Warning: call_user_func() expects parameter 1 to be a valid callback, function 'unset' not found or invalid function name in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Compiler\Unset\__input.txt on line 3
    int(10)
    Error: call_user_func(): Call to undefined function: 'unset' in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Compiler\Unset\__input.txt at expression on line 3, column 1.
    Compiler/Unset/issetref2.php: SUCCEEDED
    Compiler/Unset/unsetglobal.php: SUCCEEDED
    Compiler/Unset/unsetglobal2.php: SUCCEEDED
    Compiler/Unset/unsetindirect.php: SUCCEEDED
    Compiler/Unset/unsetproblem.php: SUCCEEDED
    Compiler/Unset/unsetref.php: SUCCEEDED
    Compiler/Unset/unsetref2.php: SUCCEEDED
    Compiler/Unset/unsetref3.php: SUCCEEDED
    Compiler/Unset/__unset.php: SUCCEEDED
    DateTime/strftime.php: SUCCEEDED
    DateTime/strtotime1.php: SUCCEEDED
    DateTime/strtotime2.php: SUCCEEDED
    DateTime/strtotime3.php: SUCCEEDED
    DateTime/strtotime4.php: SUCCEEDED
    DateTime/strtotime5.php: SUCCEEDED
    DateTime/time.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    -189388800:-189475200 - 86400
    1964-01-01T00:00:00+0000
    1963-12-31T00:00:00+0000
    1964-06-06
    1963-06-06
    1964-01-06
    1133305200
    -189388800:-189475200 - 86400
    1964-01-01T00:00:00+0000
    1963-12-31T00:00:00+0000
    1964-06-06
    1963-06-06
    1964-01-06
    DateTime/timezones1.php: SUCCEEDED
    DLR/classContext.php: SUCCEEDED
    DLR/classContext1.php: SUCCEEDED
    DLR/classContext2.php: SUCCEEDED
    DLR/restrictions%20generics.php: SUCCEEDED
    DLR/restrictions.php: SUCCEEDED
    DLR/targets.php: SUCCEEDED
    FileSystem/basename.php: SUCCEEDED
    FileSystem/basename2.php: SUCCEEDED
    FileSystem/chdir.php: SUCCEEDED
    FileSystem/csv.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    --- write ---
    72
    24
    44
    2
    6
    
    --- read ---
    "hello\n
    world";"aaa""bbb""ccc";"blah blah;";none;"tab\ttab";"space space"\n
    hh'ee;"ss\nsadasdasd s"\n
    """""""""""""""""""""";"""";;"""""";"xxx"""\n
    x\n
    "x\y"\n
    --- write ---
    72
    24
    44
    2
    6
    
    --- read ---
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    FileSystem/date.php: SUCCEEDED
    FileSystem/date2.php: SUCCEEDED
    FileSystem/date3.php: SUCCEEDED
    FileSystem/date_unix.php: SUCCEEDED
    FileSystem/dirname.php: SUCCEEDED
    FileSystem/dirname2.php: SUCCEEDED
    FileSystem/disk_free_space.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    67 GB
    Drive C: 67 GB
    Drive D: 
    Warning: disk_free_space(): The device is not ready.
     in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 14
    false
    Drive E: 
    Warning: disk_free_space(): The system cannot find the path specified.
     in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 14
    false
    Drive F: 
    Warning: disk_free_space(): The system cannot find the path specified.
     in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 14
    false
    67 GB
    Drive C: 67 GB
    Drive D: false
    Drive E: false
    Drive F: false
    FileSystem/disk_total_space.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    127928365056
    127928365056
    
    Warning: disk_total_space(): The device is not ready.
     in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 8
    127928365056
    127928365056
    FileSystem/fgets.php: SUCCEEDED
    FileSystem/file.php: SUCCEEDED
    FileSystem/filesize.php: SUCCEEDED
    FileSystem/file_exists.php: SUCCEEDED
    FileSystem/file_get_contents.php: SUCCEEDED
    FileSystem/fpassthru.php: SUCCEEDED
    FileSystem/fread.php: SUCCEEDED
    FileSystem/fread1.php: SUCCEEDED
    FileSystem/fread2.php: SUCCEEDED
    FileSystem/fseek.php: SUCCEEDED
    FileSystem/fsockopen.php: SUCCEEDED
    FileSystem/ftell.php: SUCCEEDED
    FileSystem/glob_up_dirs.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string(7) "../@PHP"
    string(9) "../Arrays"
    string(7) "../Bugs"
    string(6) "../CLR"
    string(11) "../Compiler"
    string(6) "../DLR"
    string(11) "../DateTime"
    string(13) "../FileSystem"
    string(7) "../Math"
    string(7) "../Misc"
    string(10) "../Objects"
    string(10) "../PHP.NET"
    string(8) "../RegEx"
    string(6) "../SPL"
    string(10) "../Strings"
    string(12) "../Variables"
    string(6) "../Xml"
    string(7) "../@PHP"
    string(9) "../Arrays"
    string(7) "../Bugs"
    string(6) "../CLR"
    string(11) "../Compiler"
    string(11) "../DateTime"
    string(6) "../DLR"
    string(13) "../FileSystem"
    string(7) "../Math"
    string(7) "../Misc"
    string(10) "../Objects"
    string(10) "../PHP.NET"
    string(8) "../RegEx"
    string(6) "../SPL"
    string(10) "../Strings"
    string(12) "../Variables"
    string(6) "../Xml"
    FileSystem/is_dir.php: SUCCEEDED
    FileSystem/is_executable.php: SUCCEEDED
    FileSystem/pathinfo.php: SUCCEEDED
    FileSystem/popen.php: SUCCEEDED
    FileSystem/readdir.php: SUCCEEDED
    FileSystem/readfile.php: SUCCEEDED
    FileSystem/readline.php: SUCCEEDED
    FileSystem/realpath.php: SUCCEEDED
    FileSystem/scandir.php: SUCCEEDED
    FileSystem/stat.php: SUCCEEDED
    FileSystem/stream_context_set_option.php: SUCCEEDED
    FileSystem/stream_copy_to_stream.php: SUCCEEDED
    FileSystem/stream_copy_to_stream2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <p>Read <b>rb</b>, Write <b>wb</b>
    
    
    COPIED: <b>30003</b>
    <p>Read <b>rb</b>, Write <b>wt</b>
    
    
    COPIED: <b>30021</b>
    <p>Read <b>rb</b>, Write <b>wb</b>
    
    
    COPIED: <b>30021</b>
    <p>Read <b>rb</b>, Write <b>wt</b>
    
    
    COPIED: <b>30003</b>
    FileSystem/testinc.php: SUCCEEDED
    FileSystem/touch.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Warning: touch(): Utime failed: Bad file descriptor in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 8
    Sorry Could Not change modification time of touch.txt
    Warning: touch(): Utime failed: Bad file descriptor in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 14
    
    Warning: touch(): Utime failed: Bad file descriptor in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 16
    
    Warning: touch(): Utime failed: Bad file descriptor in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 17
    <pre>[ARRAY
      [INT (0)] => [STRING: "April 21, 2011; [14:43:17] (14h) ctime test.txt (1303389797)"]
      [INT (1)] => [STRING: "April 21, 2011; [14:43:17] (14h) mtime test.txt (1303389797)"]
      [INT (2)] => [STRING: "April 21, 2011; [14:43:17] (14h) ctime touch.txt (1303389797)"]
      [INT (3)] => [STRING: "April 21, 2011; [14:43:17] (14h) mtime touch.txt (1303389797)"]
      [INT (4)] => [STRING: "April 21, 2011; [14:43:17] (14h) atime touch.txt (1303389797)"]
      [INT (5)] => [STRING: "April 21, 2011; [14:43:17] (14h) mtime summer.txt (1303389797)"]
      [INT (6)] => [STRING: "April 21, 2011; [14:43:17] (14h) mtime winter.txt (1303389797)"]
    ]</pre>
    Warning: touch(): Unable to access (C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\FileSystem\touch.txt): Permission denied in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 8, column 5.
    Sorry Could Not change modification time of touch.txt
    Warning: touch(): Unable to access (C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\FileSystem\touch.txt): Permission denied in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 14, column 1.
    
    Warning: touch(): Unable to access (C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\FileSystem\winter.txt): Permission denied in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 16, column 1.
    
    Warning: touch(): Unable to access (C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\FileSystem\summer.txt): Permission denied in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 17, column 1.
    <pre>[ARRAY
      [INT (0)] => [STRING: "April 21, 2011; [14:43:17] (14h) ctime test.txt (1303389797)"]
      [INT (1)] => [STRING: "April 21, 2011; [14:43:17] (14h) mtime test.txt (1303389797)"]
      [INT (2)] => [STRING: "April 21, 2011; [14:43:17] (14h) ctime touch.txt (1303389797)"]
      [INT (3)] => [STRING: "April 21, 2011; [14:43:17] (14h) mtime touch.txt (1303389797)"]
      [INT (4)] => [STRING: "April 21, 2011; [14:43:17] (14h) atime touch.txt (1303389797)"]
      [INT (5)] => [STRING: "April 21, 2011; [14:43:17] (14h) mtime summer.txt (1303389797)"]
      [INT (6)] => [STRING: "April 21, 2011; [14:43:17] (14h) mtime winter.txt (1303389797)"]
    ]</pre>
    FileSystem/tar/tar_test.php: SUCCEEDED
    FileSystem/zip/zip.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    correct
    Error: Call to undefined function: 'zip_open' in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\FileSystem\zip\__input.txt at expression on line 3, column 1.
    Math/abs.php: SUCCEEDED
    Math/atan2.php: SUCCEEDED
    Math/base_convert.php: SUCCEEDED
    Math/bindec.php: SUCCEEDED
    Math/ceil.php: SUCCEEDED
    Math/cos.php: SUCCEEDED
    Math/decbin.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <pre>
    [double: 2294967295]
    10001000110010100110101111111111
    [double: 4294967296]
    0
    [double: 8589934590]
    11111111111111111111111111111110
    [double: 8589934590]
    11111111111111111111111111111110
    [double: 8589934591]
    11111111111111111111111111111111
    [Int: 1000.000.000.000]
    11010100101001010001000000000000
    <hr>(-1, -5435, 2.14, 0, 26)
    11111111111111111111111111111111
    11111111111111111110101011000101
    10
    0
    11010 
    </pre>
    <pre>
    [???: 2294967295]
    10001000110010100110101111111111
    [???: 4294967296]
    0
    [???: 8589934590]
    11111111111111111111111111111110
    [???: 8589934590]
    11111111111111111111111111111110
    [???: 8589934591]
    11111111111111111111111111111111
    [Int: 1000.000.000.000]
    11010100101001010001000000000000
    <hr>(-1, -5435, 2.14, 0, 26)
    11111111111111111111111111111111
    11111111111111111110101011000101
    10
    0
    11010 
    </pre>
    Math/dechex.php: SUCCEEDED
    Math/decoct.php: SUCCEEDED
    Math/deg2rad.php: SUCCEEDED
    Math/exp.php: SUCCEEDED
    Math/floor.php: SUCCEEDED
    Math/fmod.php: SUCCEEDED
    Math/hexdec.php: SUCCEEDED
    Math/max.php: SUCCEEDED
    Math/min.php: SUCCEEDED
    Math/modulo_warn.php: SUCCEEDED
    Math/octdec.php: SUCCEEDED
    Math/pow.php: SUCCEEDED
    Math/rad2deg.php: SUCCEEDED
    Math/round.php: SUCCEEDED
    Math/sin.php: SUCCEEDED
    Math/sqrt.php: SUCCEEDED
    Math/tan.php: SUCCEEDED
    Math/uniqid.php: SUCCEEDED
    Misc/calendar_extension.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0
    0
    2375840
    0
    14
    32
    2
    There are 31 days in August 2003
    There are 28 days in February 2003
    There are 29 days in February 2004
    There are 31 days in December 2034
    1748326
    1748324
    374867
    0
    322f32322f35373633
    ebe120e7f9e5ef20e4faf9f1e2
    ebe120e7f9e5ef20e427faf9f1e2
    ebe120e7f9e5ef20e420e0ecf4e9ed20faf9f1e2
    ebe120e7f9e5ef20e42720e0ecf4e9ed20faf9f1e2
    eb22e120e7f9e5ef20e4faf9f122e2
    e12720e7f9e5ef20e4faf9f122e2
    e12720e7f9e5ef20e427faf9f122e2
    e12720e7f9e5ef20e420e0ecf4e9ed20faf9f122e2
    e12720e7f9e5ef20e42720e0ecf4e9ed20faf9f122e2
    Error: Call to undefined function: 'frenchtojd' in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt at expression on line 2, column 1.
    Misc/dir_read.php: SUCCEEDED
    Misc/fgetcsv%20%2327492.php: SUCCEEDED
    Misc/hash%20functions%20%2326667.php: SUCCEEDED
    Misc/ini_parse.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    first => outofsection
    crash => 
    bugs => 
    all => CLR
    ano => 1
    thread_count => 12
    error_reporting => 30718
    precedence1 => 5
    precedence2 => 1
    precedence3 => 5
    precedence4 => 1
    precedence5 => 1
    precedence6 => 5
    quoted1 => a | b & c
    quoted2 => hello
    world
    quoted3 => to be
    or not
    to be
    system => 1
    user => 123
    bad => NO_SUCH_CONSTANT
    neg => -1
    first => outofsection
    section => 
    indented section => 
     section with whitespaces  => 
    s1 => 
      crash => 
      bugs => 
      all => CLR
      ano => 1
      thread_count => 12
      error_reporting => 30718
      precedence1 => 5
      precedence2 => 1
      precedence3 => 5
      precedence4 => 1
      precedence5 => 1
      precedence6 => 5
    s2 => 
      quoted1 => a | b & c
      quoted2 => hello
    world
      quoted3 => to be
    or not
    to be
    s3 => 
      system => 1
      user => 123
      bad => NO_SUCH_CONSTANT
    s4 => 
      neg => -1
    x => 1
    y => 2
    ano => 1
    ne => 
    multiline => 
    		line1
    		line2
    		line3
    first => 
    crash => 
    bugs => 
    all => 
    ano => 1
    thread_count => 12
    error_reporting => 30718
    precedence1 => 5
    precedence2 => 1
    precedence3 => 5
    precedence4 => 1
    precedence5 => 1
    precedence6 => 5
    quoted1 => a | b & c
    quoted2 => hello
    world
    quoted3 => to be
    or not
    to be
    system => 1
    user => 123
    bad => 
    neg => -1
    first => 
    section => 
    indented section => 
     section with whitespaces  => 
    s1 => 
      crash => 
      bugs => 
      all => 
      ano => 1
      thread_count => 12
      error_reporting => 30718
      precedence1 => 5
      precedence2 => 1
      precedence3 => 5
      precedence4 => 1
      precedence5 => 1
      precedence6 => 5
    s2 => 
      quoted1 => a | b & c
      quoted2 => hello
    world
      quoted3 => to be
    or not
    to be
    s3 => 
      system => 1
      user => 123
      bad => 
    s4 => 
      neg => -1
    x => 1
    y => 2
    ano => 1
    ne => 
    multiline => 
    		line1
    		line2
    		line3
    Misc/json%20%2327838.php: SUCCEEDED
    Misc/lexer.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    T_INLINE_HTML
    311 '\r\n'
    T_OPEN_TAG
    368 '&lt;?'
    T_WHITESPACE
    371 ' \r\n\r\n'
    T_FINAL
    345 'final'
    T_WHITESPACE
    371 ' '
    T_CLASS
    353 'class'
    T_WHITESPACE
    371 ' '
    T_STRING
    307 'A'
    T_WHITESPACE
    371 ' \r\n'
        '{'
    T_WHITESPACE
    371 ' \r\n  '
    T_FUNCTION
    334 'function'
    T_WHITESPACE
    371 ' '
    T_STRING
    307 '__get'
        '('
    T_VARIABLE
    309 '$x'
        ')'
    T_WHITESPACE
    371 ' \r\n  '
        '{'
    T_WHITESPACE
    371 ' \r\n    '
    T_VARIABLE
    309 '$x'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_START_HEREDOC
    372 '&lt;&lt;&lt;EOOOOOOOOOOOOOOT\r\n'
    T_ENCAPSED_AND_WHITESPACE
    314 '         &lt;&lt;&lt;hello\r\nEOOOOOOOOOOOOOOt;\r\nEOOOOOOOOOOOOOT;\r\n'
    T_END_HEREDOC
    373 'EOOOOOOOOOOOOOOT'
        ';'
    T_WHITESPACE
    371 '\r\n\r\n    '
        '$'
    T_VARIABLE
    309 '$y'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_ARRAY
    360 'array'
    T_WHITESPACE
    371 ' '
        '('
    T_LNUMBER
    305 '1'
        ','
    T_DNUMBER
    306 '100000000000000'
        ','
    T_DNUMBER
    306 '999999999999999999999999999999999'
        ','
    T_STRING
    307 'true'
        ','
    T_STRING
    307 'false'
        ')'
        ';'
    T_WHITESPACE
    371 '\r\n    '
        '$'
        '{'
        '&quot;'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
    T_DOLLAR_OPEN_CURLY_BRACES
    374 '${'
        '$'
        '{'
    T_CONSTANT_ENCAPSED_STRING
    315 '&quot;xxx&quot;'
        '}'
        '}'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
        '&quot;'
        '}'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_LNUMBER
    305 '1'
        ';'
    T_WHITESPACE
    371 '\r\n    '
        '$'
        '{'
        '&quot;'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
    T_DOLLAR_OPEN_CURLY_BRACES
    374 '${'
        '$'
        '{'
        '&quot;'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
    T_VARIABLE
    309 '$x'
    T_ENCAPSED_AND_WHITESPACE
    314 '-&gt;$$'
    T_VARIABLE
    309 '$x0xx'
        '&quot;'
        '}'
        '}'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
        '&quot;'
        '}'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_LNUMBER
    305 '1'
        ';'
    T_WHITESPACE
    371 '\r\n  '
        '}'
    T_WHITESPACE
    371 ' \r\n'
        '}'
    T_WHITESPACE
    371 '\r\n\r\n'
    T_CLOSE_TAG
    370 '?&gt;'
    '
    '
        '&lt;?'
        ' 
    
    '
        'final'
        ' '
        'class'
        ' '
        'A'
        ' 
    '
        '{'
        ' 
      '
        'function'
        ' '
    259
    259 '
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt at expression on line 10, column 7.
    '
        '('
        '$x'
        ')'
        ' 
      '
        '{'
        ' 
        '
        '$x'
        ' '
        '='
        ' '
        '&lt;&lt;&lt;EOOOOOOOOOOOOOOT
    '
        '         &lt;&lt;&lt;'
        'hello'
        '
    '
        'EOOOOOOOOOOOOOOt;
    '
        'EOOOOOOOOOOOOOT;
    '
        'EOOOOOOOOOOOOOOT'
        ';'
        '
    
        '
        '$'
        '$y'
        ' '
        '='
        ' '
        'array'
        ' '
        '('
        '1'
        ','
        '100000000000000'
        ','
        '999999999999999999999999999999999'
        ','
    256
    256 '
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt at expression on line 10, column 7.
    '
        ','
    257
    257 '
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt at expression on line 10, column 7.
    '
        ')'
        ';'
        '
        '
        '$'
        '{'
        '&quot;'
        'x'
        '${'
        '$'
        '{'
    -29
    -29 '
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt at expression on line 10, column 7.
    '
        '}'
        '}'
        'x'
        '&quot;'
        '}'
        ' '
        '='
        ' '
        '1'
        ';'
        '
        '
        '$'
        '{'
        '&quot;'
        'x'
        '${'
        '$'
        '{'
        '&quot;'
        'x'
        '$x'
        '-&gt;'
        '$'
        '$'
        '$x0xx'
        '&quot;'
        '}'
        '}'
        'x'
        '&quot;'
        '}'
        ' '
        '='
        ' '
        '1'
        ';'
        '
      '
        '}'
        ' 
    '
        '}'
        '
    
    '
        '?&gt;'
    Misc/locale.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string(1) "C"
    double(1.54)
    double(Infinity)
    654564.145400
    Sat Saturday Apr April
    --------------
    string(19) "Danish_Denmark.1252"
    double(1.54)
    double(Infinity)
    654564,145400
    lo lordag apr april
    --------------
    string(25) "Czech_Czech Republic.1250"
    double(1.54)
    double(Infinity)
    654564,145400
    so sobota IV duben
    --------------
    string(1) "C"
    float(1.54)
    float(Infinity)
    654564.145400
    Sat Saturday Apr April
    --------------
    string(19) "Danish_Denmark.1252"
    float(1.54)
    float(Infinity)
    654564,145400
    lo lordag apr april
    --------------
    string(25) "Czech_Czech Republic.1250"
    float(1.54)
    float(Infinity)
    654564,145400
    so sobota 4 duben
    --------------
    Misc/output2.php: SUCCEEDED
    Misc/parse_url%20%2327377.php: SUCCEEDED
    Misc/parse_url_at_bug.php: SUCCEEDED
    Misc/stack_trace.php: FAILED
    Script hung upNo errorsSuccess
    Expected test outputReal script output
    Unhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---> System.IndexOutOfRangeException: Index was outside the bounds of the array.
       at PHP.Core.PhpStackFrame..ctor(ScriptContext context, StackFrame frame, FrameKinds kind)
       at PHP.Core.PhpStackTrace..ctor(ScriptContext context, StackTrace clrTrace)
       at PHP.Core.PhpStackTrace..ctor(ScriptContext context, Int32 skipFrames)
       at PHP.Library.Errors.Backtrace()
       at <stack_trace.inc>.<Script>.j(ScriptContext <context>) in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Misc\stack_trace.inc:line 11
       at <stack_trace.inc>.<Script>.j(Object instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <stack_trace.inc>.<Script>.i(ScriptContext <context>) in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Misc\stack_trace.inc:line 6
       at <stack_trace.inc>.<Script>.i(Object instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <^0>.<Global>.<?0>.h(ScriptContext <context>) in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt:line 14
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack, DTypeDesc caller)
       at PHP.Core.PhpCallback.InvokeInternal(Object[] args)
       at PHP.Core.PhpCallback.Invoke(Object[] args)
       at PHP.Library.PhpArrays.Map(DTypeDesc caller, PhpCallback map, PhpArray[] arrays)
       at <__input.txt>.<Script>.<Lambda>(ScriptContext <context>) in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt:line 4
       at <__input.txt>.<Script>.<Lambda>(Object instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <__input.txt>.<Script>.f(ScriptContext <context>) in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt:line 6
       at <__input.txt>.<Script>.f(Object instance, PhpStack stack)
       at <__input.txt>.<Script>.<Main>(ScriptContext <context>, Dictionary`2 <locals>, DObject <self>, DTypeDesc <includer>, Boolean <request>) in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt:line 18
       at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)
       at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)
       --- End of inner exception stack trace ---
       at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)
       at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)
       at <Global>.Run(String[] )
    
    Misc/str_getcsv%20%2326691.php: SUCCEEDED
    Misc/tokens.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    T_REQUIRE_ONCE = 258,
    T_REQUIRE = 259,
    T_EVAL = 260,
    T_INCLUDE_ONCE = 261,
    T_INCLUDE = 262,
    T_LOGICAL_OR = 263,
    T_LOGICAL_XOR = 264,
    T_LOGICAL_AND = 265,
    T_PRINT = 266,
    T_SR_EQUAL = 267,
    T_SL_EQUAL = 268,
    T_XOR_EQUAL = 269,
    T_OR_EQUAL = 270,
    T_AND_EQUAL = 271,
    T_MOD_EQUAL = 272,
    T_CONCAT_EQUAL = 273,
    T_DIV_EQUAL = 274,
    T_MUL_EQUAL = 275,
    T_MINUS_EQUAL = 276,
    T_PLUS_EQUAL = 277,
    T_BOOLEAN_OR = 278,
    T_BOOLEAN_AND = 279,
    T_IS_NOT_IDENTICAL = 280,
    T_IS_IDENTICAL = 281,
    T_IS_NOT_EQUAL = 282,
    T_IS_EQUAL = 283,
    T_IS_GREATER_OR_EQUAL = 284,
    T_IS_SMALLER_OR_EQUAL = 285,
    T_SR = 286,
    T_SL = 287,
    T_INSTANCEOF = 288,
    T_UNSET_CAST = 289,
    T_BOOL_CAST = 290,
    T_OBJECT_CAST = 291,
    T_ARRAY_CAST = 292,
    T_STRING_CAST = 293,
    T_DOUBLE_CAST = 294,
    T_INT_CAST = 295,
    T_DEC = 296,
    T_INC = 297,
    T_CLONE = 298,
    T_NEW = 299,
    T_EXIT = 300,
    T_IF = 301,
    T_ELSEIF = 302,
    T_ELSE = 303,
    T_ENDIF = 304,
    T_LNUMBER = 305,
    T_DNUMBER = 306,
    T_STRING = 307,
    T_STRING_VARNAME = 308,
    T_VARIABLE = 309,
    T_NUM_STRING = 310,
    T_INLINE_HTML = 311,
    T_CHARACTER = 312,
    T_BAD_CHARACTER = 313,
    T_ENCAPSED_AND_WHITESPACE = 314,
    T_CONSTANT_ENCAPSED_STRING = 315,
    T_ECHO = 316,
    T_DO = 317,
    T_WHILE = 318,
    T_ENDWHILE = 319,
    T_FOR = 320,
    T_ENDFOR = 321,
    T_FOREACH = 322,
    T_ENDFOREACH = 323,
    T_DECLARE = 324,
    T_ENDDECLARE = 325,
    T_AS = 326,
    T_SWITCH = 327,
    T_ENDSWITCH = 328,
    T_CASE = 329,
    T_DEFAULT = 330,
    T_BREAK = 331,
    T_CONTINUE = 332,
    T_GOTO = 333,
    T_FUNCTION = 334,
    T_CONST = 335,
    T_RETURN = 336,
    T_TRY = 337,
    T_CATCH = 338,
    T_THROW = 339,
    T_USE = 340,
    T_GLOBAL = 341,
    T_PUBLIC = 342,
    T_PROTECTED = 343,
    T_PRIVATE = 344,
    T_FINAL = 345,
    T_ABSTRACT = 346,
    T_STATIC = 347,
    T_VAR = 348,
    T_UNSET = 349,
    T_ISSET = 350,
    T_EMPTY = 351,
    T_HALT_COMPILER = 352,
    T_CLASS = 353,
    T_INTERFACE = 354,
    T_EXTENDS = 355,
    T_IMPLEMENTS = 356,
    T_OBJECT_OPERATOR = 357,
    T_DOUBLE_ARROW = 358,
    T_LIST = 359,
    T_ARRAY = 360,
    T_CLASS_C = 361,
    T_METHOD_C = 362,
    T_FUNC_C = 363,
    T_LINE = 364,
    T_FILE = 365,
    T_COMMENT = 366,
    T_DOC_COMMENT = 367,
    T_OPEN_TAG = 368,
    T_OPEN_TAG_WITH_ECHO = 369,
    T_CLOSE_TAG = 370,
    T_WHITESPACE = 371,
    T_START_HEREDOC = 372,
    T_END_HEREDOC = 373,
    T_DOLLAR_OPEN_CURLY_BRACES = 374,
    T_CURLY_OPEN = 375,
    T_PAAMAYIM_NEKUDOTAYIM = 376,
    T_DOUBLE_COLON = 376,
    T_NAMESPACE = 377,
    T_NS_C = 378,
    T_DIR = 379,
    T_NS_SEPARATOR = 380,
    T_INCLUDE = 129,
    T_INCLUDE_ONCE = 130,
    T_EVAL = 131,
    T_REQUIRE = 132,
    T_REQUIRE_ONCE = 133,
    T_LOGICAL_OR = 136,
    T_LOGICAL_XOR = 137,
    T_LOGICAL_AND = 138,
    T_PRINT = 139,
    T_PLUS_EQUAL = 140,
    T_MINUS_EQUAL = 141,
    T_MUL_EQUAL = 142,
    T_DIV_EQUAL = 143,
    T_CONCAT_EQUAL = 144,
    T_MOD_EQUAL = 145,
    T_AND_EQUAL = 146,
    T_OR_EQUAL = 147,
    T_XOR_EQUAL = 148,
    T_SL_EQUAL = 149,
    T_SR_EQUAL = 150,
    T_BOOLEAN_OR = 151,
    T_BOOLEAN_AND = 152,
    T_IS_EQUAL = 153,
    T_IS_NOT_EQUAL = 154,
    T_IS_IDENTICAL = 155,
    T_IS_NOT_IDENTICAL = 156,
    T_IS_SMALLER_OR_EQUAL = 157,
    T_IS_GREATER_OR_EQUAL = 158,
    T_SL = 159,
    T_SR = 160,
    T_INC = 161,
    T_DEC = 162,
    T_NEW = 164,
    T_INSTANCEOF = 165,
    T_CLONE = 167,
    T_LNUMBER = 168,
    T_DNUMBER = 170,
    T_STRING = 171,
    T_STRING_VARNAME = 172,
    T_VARIABLE = 173,
    T_NUM_STRING = 174,
    T_INLINE_HTML = 175,
    T_CHARACTER = 176,
    T_BAD_CHARACTER = 177,
    T_ENCAPSED_AND_WHITESPACE = 178,
    T_CONSTANT_ENCAPSED_STRING = 179,
    T_EXIT = 180,
    T_IF = 181,
    T_ELSEIF = 182,
    T_ELSE = 183,
    T_ENDIF = 184,
    T_ECHO = 185,
    T_DO = 186,
    T_WHILE = 187,
    T_ENDWHILE = 188,
    T_FOR = 189,
    T_ENDFOR = 190,
    T_FOREACH = 191,
    T_ENDFOREACH = 192,
    T_AS = 193,
    T_SWITCH = 194,
    T_ENDSWITCH = 195,
    T_CASE = 196,
    T_DEFAULT = 197,
    T_BREAK = 198,
    T_CONTINUE = 199,
    T_FUNCTION = 200,
    T_CONST = 201,
    T_RETURN = 202,
    T_GLOBAL = 203,
    T_STATIC = 204,
    T_VAR = 205,
    T_UNSET = 206,
    T_ISSET = 207,
    T_EMPTY = 208,
    T_CLASS = 209,
    T_EXTENDS = 210,
    T_OBJECT_OPERATOR = 211,
    T_DOUBLE_ARROW = 212,
    T_LIST = 213,
    T_ARRAY = 214,
    T_CLASS_C = 215,
    T_METHOD_C = 216,
    T_FUNC_C = 217,
    T_LINE = 218,
    T_FILE = 219,
    T_DIR = 220,
    T_COMMENT = 221,
    T_DOC_COMMENT = 222,
    T_OPEN_TAG = 227,
    T_OPEN_TAG_WITH_ECHO = 228,
    T_CLOSE_TAG = 229,
    T_WHITESPACE = 230,
    T_START_HEREDOC = 231,
    T_END_HEREDOC = 232,
    T_DOLLAR_OPEN_CURLY_BRACES = 233,
    T_CURLY_OPEN = 234,
    T_DOUBLE_COLON = 235,
    T_PAAMAYIM_NEKUDOTAYIM = 235,
    T_GOTO = 237,
    T_TRY = 238,
    T_CATCH = 239,
    T_THROW = 240,
    T_INTERFACE = 241,
    T_IMPLEMENTS = 242,
    T_ABSTRACT = 243,
    T_FINAL = 244,
    T_PRIVATE = 245,
    T_PROTECTED = 246,
    T_PUBLIC = 247,
    T_BOOL_CAST = 287,
    T_INT_CAST = 290,
    T_DOUBLE_CAST = 296,
    T_STRING_CAST = 299,
    T_ARRAY_CAST = 302,
    T_OBJECT_CAST = 303,
    T_UNSET_CAST = 304,
    T_HALT_COMPILER = 351,
    Misc/user_error_handlers.php: SUCCEEDED
    Objects/accessing%20property%20line%20number%20%2326052.php: SUCCEEDED
    Objects/conditional1.php: SUCCEEDED
    Objects/conditional2.php: SUCCEEDED
    Objects/conditional_base_class.php: SUCCEEDED
    Objects/constant_test.php: SUCCEEDED
    Objects/evaled_parent.php: SUCCEEDED
    Objects/getter_setter_bug28444.php: SUCCEEDED
    Objects/instanceof.php: SUCCEEDED
    Objects/new_via_unknown_ctor.php: SUCCEEDED
    Objects/object_creation_test.php: SUCCEEDED
    Objects/overrides%20%231285.php: SUCCEEDED
    Objects/static_field_test.php: SUCCEEDED
    Objects/static_inheritence.php: SUCCEEDED
    Objects/static_method_test.php: SUCCEEDED
    Objects/static_object_vars.php: SUCCEEDED
    Objects/sys_class_const.php: SUCCEEDED
    Objects/this2.php: SUCCEEDED
    RegEx/backreferences.php: SUCCEEDED
    RegEx/dolar_escape.php: SUCCEEDED
    RegEx/ereg.php: SUCCEEDED
    RegEx/namedbackref.php: SUCCEEDED
    RegEx/namedgroups.php: SUCCEEDED
    RegEx/preg_match_unmatched_groups.php: SUCCEEDED
    RegEx/preg_replace_eval.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ab"01300 as"00da sd"0asdsa das asd 11asd a1sd a
    ab"01300 as"00da sd"0(aasdasdkjask,$a,\,\l,a,s,d,a,s,d,k,j,a,s,${120})(ldjaklsdjalk,$l,\,\l,d,j,a,k,l,s,d,j,a,l,${120})djdsa das asd 11asd a1sd a
    ab"01300 as"00da sd"0asdsa das asd 11asd a1sd a
    ab"01300 as"00da sd"0(aasdasdkjask,$a,\,\l,a,s,d,a,s,d,k,j,,,${120})(ldjaklsdjalk,$l,\,\l,d,j,a,k,l,s,d,j,,,${120})djdsa das asd 11asd a1sd a
    RegEx/regexp-sql.php: SUCCEEDED
    RegEx/regexp_smiles.php: SUCCEEDED
    RegEx/Perl/cache.php: SUCCEEDED
    RegEx/Perl/grep1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      [3] => string(3) "1.5"
      [6] => string(5) "58.54"
    }
    Notice: preg_grep(): Array to string conversion in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\RegEx\Perl\__input.txt at expression on line 5, column 1.
    array(2) {
      [3]=>
      string(3) "1.5"
      [6]=>
      string(5) "58.54"
    }
    RegEx/Perl/grep2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Food  array
    (
      [0] => apple
      [1] => banana
      [2] => squid
      [3] => pear
    )
    Fruit array
    (
      [0] => apple
      [1] => banana
      [3] => pear
    )
    Food  Array
    (
        [0] => apple
        [1] => banana
        [2] => squid
        [3] => pear
    )
    Fruit Array
    (
        [0] => apple
        [1] => banana
        [3] => pear
    )
    RegEx/Perl/match1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array [empty]
    array
    (
      [0] => array
      (
        [0] => def
        [1] => 3
      )
    )
    Array
    (
    )
    Array
    (
        [0] => Array
        (
            [0] => def
            [1] => 3
        )
    
    )
    RegEx/Perl/match10.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    (
      [0] => 1231
      [1] => 1
      [2] => 23
      [3] => 1
    )
    Array
    (
        [0] => 1231
        [1] => 1
        [2] => 23
        [3] => 1
    )
    RegEx/Perl/match2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    (
      [0] => array
      (
        [0] => def
        [1] => 0
      )
    )
    Array
    (
        [0] => Array
        (
            [0] => def
            [1] => 0
        )
    
    )
    RegEx/Perl/match3.php: SUCCEEDED
    RegEx/Perl/match4.php: SUCCEEDED
    RegEx/Perl/match5.php: SUCCEEDED
    RegEx/Perl/match6.php: SUCCEEDED
    RegEx/Perl/match7.php: SUCCEEDED
    RegEx/Perl/match8.php: SUCCEEDED
    RegEx/Perl/match9.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    (
      [0] => 209.6.145.47 - - [22/Nov/2003:19:02:30 -0500] "GET /dir/doc.htm HTTP/1.0" 200 6776 "http://search.yahoo.com/search?p=key+words=UTF-8" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)"
      [1] => 209.6.145.47
      [2] => -
      [3] => -
      [4] => 22/Nov/2003:19:02:30 -0500
      [5] => GET
      [6] => /dir/doc.htm
      [7] => HTTP
      [8] => 1.0
      [9] => 200
      [10] => 6776
      [11] => "http://search.yahoo.com/search?p=key+words=UTF-8"
      [12] => "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)"
    )
    Array
    (
        [0] => 209.6.145.47 - - [22/Nov/2003:19:02:30 -0500] "GET /dir/doc.htm HTTP/1.0" 200 6776 "http://search.yahoo.com/search?p=key+words=UTF-8" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)"
        [1] => 209.6.145.47
        [2] => -
        [3] => -
        [4] => 22/Nov/2003:19:02:30 -0500
        [5] => GET
        [6] => /dir/doc.htm
        [7] => HTTP
        [8] => 1.0
        [9] => 200
        [10] => 6776
        [11] => "http://search.yahoo.com/search?p=key+words=UTF-8"
        [12] => "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)"
    )
    RegEx/Perl/match_all1.php: SUCCEEDED
    RegEx/Perl/match_all2.php: SUCCEEDED
    RegEx/Perl/match_all3.php: SUCCEEDED
    RegEx/Perl/match_all4.php: SUCCEEDED
    RegEx/Perl/match_dollar.php: SUCCEEDED
    RegEx/Perl/overflow.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string("kfkaj +j k45´┐Ż´┐Ż´┐Ż´┐Ż´┐Ż3#$%^&kjakfjkaj|kfj")
    string("kfkaj +j k45�����3#$%^&kjakfjkaj|kfj")
    RegEx/Perl/quote1.php: SUCCEEDED
    RegEx/Perl/quote2.php: SUCCEEDED
    RegEx/Perl/quote3.php: SUCCEEDED
    RegEx/Perl/replace1.php: SUCCEEDED
    RegEx/Perl/replace2.php: SUCCEEDED
    RegEx/Perl/replace3.php: SUCCEEDED
    RegEx/Perl/replace4.php: SUCCEEDED
    RegEx/Perl/replace5.php: SUCCEEDED
    RegEx/Perl/replace6.php: SUCCEEDED
    RegEx/Perl/replace7.php: SUCCEEDED
    RegEx/Perl/replace8.php: SUCCEEDED
    RegEx/Perl/replace9.php: SUCCEEDED
    RegEx/Perl/replace_callback1.php: SUCCEEDED
    RegEx/Perl/replace_callback2.php: SUCCEEDED
    RegEx/Perl/split1.php: SUCCEEDED
    RegEx/Perl/split2.php: SUCCEEDED
    RegEx/Perl/split3.php: SUCCEEDED
    RegEx/Perl/split4.php: SUCCEEDED
    RegEx/Perl/split5.php: SUCCEEDED
    RegEx/Perl/split6.php: SUCCEEDED
    RegEx/Perl/ungreedy.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    aaa
    a
    aaa
    
    a
    aa
    aaa
    aa
    aaa
    aaa
    a
    aaa
    a
    a
    aa
    aaa
    aa
    aaa
    RegEx/Perl/unsuccessful-preg_match_all.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0
    4
    1
    4
    0
    4
    1
    7
    RegEx/Perl/withoutdelimiters.php: SUCCEEDED
    SPL/ArrayAccess_offsetExists.php: SUCCEEDED
    SPL/Autoload_ctor.php: SUCCEEDED
    SPL/Autoload_extends.php: SUCCEEDED
    SPL/exceptions.php: SUCCEEDED
    Strings/addcslashes.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    \f\o\o\[ \]
    Issues a Warning:
    // echo addcslashes("zoo['.']", 'z..A');
    // output:  \zoo['\.']
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 4, column 1.
    
    Issues a Warning:
    // echo addcslashes("zoo['.']", 'z..A');
    // output:  \zoo['\.']
    Strings/addslashes.php: SUCCEEDED
    Strings/chunk_split.php: SUCCEEDED
    Strings/concat.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string(2) "ab"
    string(2) "ab"
    string(2) "ab"
    string(2) "ab"
    string(2) "ab"
    string(2) "aB"
    string(2) "Ab"
    string(2) "AB"
    string(2) "ab"
    string(2) "a1"
    string(2) "1b"
    string(2) "11"
    string(2) "ab"
    string(2) "aB"
    string(2) "Ab"
    string[binary](2) "\x41\x42"
    string(2) "ab"
    string(2) "ab"
    string(2) "ab"
    string(2) "ab"
    string(2) "ab"
    string(2) "aB"
    string(2) "Ab"
    string(2) "AB"
    string(2) "ab"
    string(2) "a1"
    string(2) "1b"
    string(2) "11"
    string(2) "ab"
    string[binary](2) "aB"
    string[binary](2) "Ab"
    string[binary](2) "AB"
    Strings/count_chars.php: SUCCEEDED
    Strings/crc32.php: SUCCEEDED
    Strings/crypt.php: SUCCEEDED
    Strings/crypt2.php: SUCCEEDED
    Strings/echo.php: SUCCEEDED
    Strings/explode.php: SUCCEEDED
    Strings/get_html_translation_table.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <hr>[&] => &amp;
    [>] => &gt;
    [<] => &lt;
    ["] => &quot;
    <hr>Hallo &amp; &lt;Frau&gt; &amp; Kr&iuml;&iquest;&frac12;mer
    <hr>[&] => &amp;
    [>] => &gt;
    [<] => &lt;
    ["] => &quot;
    <hr>Hallo &amp; &lt;Frau&gt; &amp; Kr�mer
    Strings/mb_strlen.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Call to undefined function mb_strlen() in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 4
    Error: Call to undefined function: 'mb_strlen' in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 4, column 1.
    Strings/nl2br.php: SUCCEEDED
    Strings/pack.php: SUCCEEDED
    Strings/pos.php: SUCCEEDED
    Strings/runtime-quotes.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    fread = (x''y"z)
    fgets = (x''y"z)
    file[0] = (x''y"z)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    
    Warning: fopen(runtime-quotes2.txt): failed to open stream: Permission denied in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 33
    
    Warning: fwrite() expects parameter 1 to be resource, boolean given in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 35
    fwrite = ()
    
    Warning: fputs() expects parameter 1 to be resource, boolean given in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 38
    fputs = ()
    
    Warning: fclose() expects parameter 1 to be resource, boolean given in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 41
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (x'y"z)
    fgets = (x'y"z)
    file[0] = (x'y"z)
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (a\'b"\\ca\)
    fgets = (a\'b"\\ca\'b"\\c)
    file[0] = (a\'b"\\ca\'b"\\c)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    e'e
    e''e
    e'e
    e'e
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    e'e
    e'e
    e'e
    e'e
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    fread = (x''y"z)
    fgets = (x''y"z)
    file[0] = (x''y"z)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    
    Warning: fopen(): Unable to access (C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Strings\runtime-quotes2.txt): Permission denied in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 33, column 3.
    
    Warning: Cannot convert boolean to resource implicitly in a call to function fwrite() in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 35, column 3.
    fwrite = (0)
    
    Warning: Cannot convert boolean to resource implicitly in a call to function fputs() in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 38, column 3.
    fputs = (0)
    
    Warning: Cannot convert boolean to resource implicitly in a call to function fclose() in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 41, column 3.
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (x'y"z)
    fgets = (x'y"z)
    file[0] = (x'y"z)
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (a\'b"\\ca\)
    fgets = (a\'b"\\ca\'b"\\c)
    file[0] = (a\'b"\\ca\'b"\\c)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    e'e
    e''e
    e'e
    e'e
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    e'e
    e'e
    e'e
    e'e
    Strings/sprintf.php: SUCCEEDED
    Strings/sprintf2.php: SUCCEEDED
    Strings/strtr.php: SUCCEEDED
    Strings/str_ireplace.php: SUCCEEDED
    Strings/str_replace.php: SUCCEEDED
    Strings/str_word_count.php: SUCCEEDED
    Strings/substr_operations.php: SUCCEEDED
    Strings/wordwrap.php: SUCCEEDED
    Variables/advanced_serialize.php: SUCCEEDED
    Variables/arguments.php: SUCCEEDED
    Variables/bitwise.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "00"
    string(2) "31"
    string(2) "31"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    0
    0
    0
    5
    0
    5
    40
    5
    45
    string(48) "000000000000000000000000000000000000000000000000"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(14) "31323331323331"
    string(2) "30"
    string(14) "31323331323331"
    string(16) "3635343635343536"
    string(2) "30"
    string(16) "3635343635343536"
    string(14) "337a5e8be43d7a"
    string(14) "00002130120201"
    string(48) "337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42"
    string(16) "347d598ce33a7e77"
    string(16) "0200243214040100"
    string(48) "367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42"
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "00"
    string(2) "31"
    string(2) "31"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    0
    -9223372036854775808
    -9223372036854775808
    -9223372036854775803
    0
    -9223372036854775803
    40
    5
    45
    string(48) "000000000000000000000000000000000000000000000000"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(14) "31323331323331"
    string(2) "30"
    string(14) "31323331323331"
    string(16) "3635343635343536"
    string(2) "30"
    string(16) "3635343635343536"
    string(14) "337a5e8be43d7a"
    string(14) "00002130120201"
    string(48) "337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42"
    string(16) "347d598ce33a7e77"
    string(16) "0200243214040100"
    string(48) "367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42"
    Variables/class_constants.php: SUCCEEDED
    Variables/comparisons.php: SUCCEEDED
    Variables/constant.php: SUCCEEDED
    Variables/constants_defined.php: SUCCEEDED
    Variables/extract%20refs.php: SUCCEEDED
    Variables/extract.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    EXTR_PREFIX_ALL
    integer(4)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
      'prefix_non_existent' => integer(1)
    }
    <hr>EXTR_PREFIX_INVALID
    integer(5)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => integer(2)
      'non_existent' => integer(1)
      'prefix_' => integer(1)
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => 'hello'
    }
    <hr>EXTR_PREFIX_SAME
    integer(3)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'non_existent' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>EXTR_PREFIX_IF_EXISTS
    integer(3)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>
    EXTR_PREFIX_ALL
    integer(4)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
      'prefix_non_existent' => integer(1)
    }
    <hr>EXTR_PREFIX_INVALID
    integer(5)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => integer(2)
      'non_existent' => integer(1)
      'prefix_' => integer(1)
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => 'hello'
    }
    <hr>EXTR_PREFIX_SAME
    integer(4)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'non_existent' => integer(1)
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>EXTR_PREFIX_IF_EXISTS
    integer(3)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>
    Variables/func_get_args.php: SUCCEEDED
    Variables/is_number.php: SUCCEEDED
    Variables/serialize.php: SUCCEEDED
    Variables/unserialize_objects.php: SUCCEEDED
    Variables/var_dumping.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Array
    (
        [0] => 1
        [1] => 
        [2] => 1
        [3] => 1.2
        [4] => 
        [5] => asdas
        [6] => Array
            (
                [0] => 1
            )
    
        [7] => stdClass Object
            (
            )
    
        [8] => Resource id #1
    )
    array(9) {
      [0]=>
      bool(true)
      [1]=>
      bool(false)
      [2]=>
      int(1)
      [3]=>
      float(1.2)
      [4]=>
      NULL
      [5]=>
      string(5) "asdas"
      [6]=>
      array(1) {
        [0]=>
        int(1)
      }
      [7]=>
      object(stdClass)#1 (0) {
      }
      [8]=>
      resource(1) of type (stream)
    }
    array (
      0 => true,
      1 => false,
      2 => 1,
      3 => 1.2,
      4 => NULL,
      5 => 'asdas',
      6 => 
      array (
        0 => 1,
      ),
      7 => 
      stdClass::__set_state(array(
      )),
      8 => NULL,
    )
    Array
    (
        [0] => 1
        [1] => 
        [2] => 1
        [3] => 1.2
        [4] => 
        [5] => asdas
        [6] => Array
        (
            [0] => 1
        )
    
        [7] => stdClass Object
        (
        )
    
        [8] => resource id #4
    
    )
    array(9) {
      [0]=>
      bool(true)
      [1]=>
      bool(false)
      [2]=>
      int(1)
      [3]=>
      float(1.2)
      [4]=>
      NULL
      [5]=>
      string(5) "asdas"
      [6]=>
      array(1) {
        [0]=>
        int(1)
      }
      [7]=>
      object(stdClass)(0) {
      }
      [8]=>
      resource(4) of type (stream)
    }
    array
    (
      '0' => true,
      '1' => false,
      '2' => 1,
      '3' => 1.2,
      '4' => NULL,
      '5' => 'asdas',
      '6' => array
      (
        '0' => 1
      ),
      '7' => class stdClass
      {
    
      },
      '8' => NULL
    )
    Xml/005.php: SUCCEEDED
    Xml/006.php: SUCCEEDED
    Xml/007.php: SUCCEEDED
    Xml/008.php: SUCCEEDED
    Xml/009.php: SUCCEEDED
    Xml/011.php: SUCCEEDED
    Xml/013.php: SUCCEEDED
    Xml/017.php: SUCCEEDED
    Xml/018.php: SUCCEEDED
    Xml/019.php: SUCCEEDED
    Xml/020.php: SUCCEEDED
    Xml/021.php: SUCCEEDED
    Xml/025.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
      'foo' => 'foobar'
    }
    array
    {
      'html' => 'http://www.w3.org/1999/xhtml'
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
    }
    array
    {
      'html' => 'http://www.w3.org/1999/xhtml'
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'foo' => 'foobar'
      'baz' => 'foobarbaz'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
    }
    array
    {
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
      'baz' => 'foobarbaz'
      'foo' => 'foobar'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
      'baz' => 'foobarbaz'
      'foo' => 'foobar'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
    }
    array
    {
    }
    Xml/026.php: SUCCEEDED
    Xml/027.php: SUCCEEDED
    Xml/028.php: SUCCEEDED
    Xml/029.php: SUCCEEDED
    Xml/030.php: SUCCEEDED
    Xml/032.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    FALSE
    FALSE
    FALSE
    TRUE
    TRUE
    TRUE
    Xml/033.php: SUCCEEDED
    Xml/bug26384.php: SUCCEEDED
    Xml/bug28721.php: SUCCEEDED
    Xml/bug28817.php: SUCCEEDED
    Xml/bug32615.php: SUCCEEDED
    Xml/bug33853.php: SUCCEEDED
    Xml/bug34276.php: SUCCEEDED
    Xml/bug35342.php: SUCCEEDED
    Xml/bug36756.php: SUCCEEDED
    Xml/bug37277.php: SUCCEEDED
    Xml/dom002.php: SUCCEEDED
    Xml/dom003.php: SUCCEEDED
    Xml/dom006.php: SUCCEEDED
    Xml/dom007.php: SUCCEEDED
    Xml/dom_set_attr_node.php: SUCCEEDED
    Xml/xmlhandler.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test begins
    <br/>
    <br/>test begins
    <br/>empty begins
    <br/>empty ends
    <br/>nocontent begins
    <br/>nocontent ends
    <br/>content begins
    <br/>empty begins
    <br/>empty ends
    <br/>empty begins
    <br/>empty ends
    <br/>content ends
    <br/>empty begins
    <br/>empty ends
    <br/>empty begins
    <br/>empty ends
    <br/>test ends
    <br/>Test ends
    <br/>
    <br/>
    Test begins
    <br/>
    <br/>
    Error: Call to undefined function: 'xml_parser_create' in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Xml\__input.txt at expression on line 18, column 3.
    Xml/xslt001.php: SUCCEEDED
    Xml/xslt002.php: SUCCEEDED
    Xml/xslt003.php: SUCCEEDED
    Xml/xslt004.php: SUCCEEDED
    Xml/xslt005.php: SUCCEEDED
    Xml/xslt006.php: SUCCEEDED
    Xml/xslt007.php: SUCCEEDED
    Xml/xslt010.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test 10: EXSLT Support
      
      
      Test Date : 0001-12-31Z
        year                 : 1
        leap-year            : false
        month-in-year        : 12
        month-name           : December
        month-abbreviation   : Dec
        week-in-year         : 1
        day-in-year          : 365
        day-in-month         : 31
        day-of-week-in-month : 5
        day-in-week          : 2
        day-name             : Monday
        day-abbreviation     : Mon
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : 3000-01-31
        year                 : 3000
        leap-year            : false
        month-in-year        : 1
        month-name           : January
        month-abbreviation   : Jan
        week-in-year         : 5
        day-in-year          : 31
        day-in-month         : 31
        day-of-week-in-month : 5
        day-in-week          : 6
        day-name             : Friday
        day-abbreviation     : Fri
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : 2000-02-29
        year                 : 2000
        leap-year            : true
        month-in-year        : 2
        month-name           : February
        month-abbreviation   : Feb
        week-in-year         : 9
        day-in-year          : 60
        day-in-month         : 29
        day-of-week-in-month : 5
        day-in-week          : 3
        day-name             : Tuesday
        day-abbreviation     : Tue
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : 9990001-12-31Z
        year                 : 9990001
        leap-year            : false
        month-in-year        : 12
        month-name           : December
        month-abbreviation   : Dec
        week-in-year         : 1
        day-in-year          : 365
        day-in-month         : 31
        day-of-week-in-month : 5
        day-in-week          : 2
        day-name             : Monday
        day-abbreviation     : Mon
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : -0004-02-29
        year                 : -4
        leap-year            : true
        month-in-year        : 2
        month-name           : February
        month-abbreviation   : Feb
        week-in-year         : 9
        day-in-year          : 60
        day-in-month         : 29
        day-of-week-in-month : 5
        day-in-week          : 1
        day-name             : Sunday
        day-abbreviation     : Sun
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
    Test 10: EXSLT Support
    Warning: Cannot find a script or an extension object associated with namespace 'http://exslt.org/dates-and-times'..
    
    Warning: Illegal string offset '-1' in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Phalanger.inc at expression on line 7, column 6.
    Xml/xslt011.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test 11: php:function Support
    
    Warning: XSLTProcessor::transformToXml(): A PHP Object cannot be converted to a XPath-string in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Xml\__input.txt on line 18
    <?xml version="1.0"?>
    foobar - secondArg
    foobar - 
    this is from an external DomDocument
    from the Input Document
    static
    Test 11: php:function Support
    <?xml version="1.0" encoding="utf-8"?>foobar - secondArg
    foobar - 
    this is from an external DomDocument
    from the Input Document
    static
    not a DomNode object
    Xml/xslt012.php: SUCCEEDED
    ================================================ FILE: Testing/Tests/TestLogs/TestLog (1949).htm ================================================ PHP.NET Compiler test log

    PHP.NET Compiler test log

    (89%) 846 succeeded, 106 failed
    Test ResultCompiler error outputExpected test result
    @PHP/classes/array_access_001.php: SUCCEEDED
    @PHP/classes/array_access_002.php: SUCCEEDED
    @PHP/classes/array_access_003.php: SUCCEEDED
    @PHP/classes/array_access_004.php: SUCCEEDED
    @PHP/classes/array_access_005.php: SUCCEEDED
    @PHP/classes/array_access_006.php: SUCCEEDED
    @PHP/classes/array_access_007.php: SUCCEEDED
    @PHP/classes/array_access_008.php: SUCCEEDED
    @PHP/classes/array_access_009.php: SUCCEEDED
    @PHP/classes/array_access_010.php: SUCCEEDED
    @PHP/classes/array_access_011.php: SUCCEEDED
    @PHP/classes/array_access_013.php: SUCCEEDED
    @PHP/classes/assign_op_property_001.php: SUCCEEDED
    @PHP/classes/autoload_001.php: SUCCEEDED
    @PHP/classes/autoload_002.php: SUCCEEDED
    @PHP/classes/autoload_003.php: SUCCEEDED
    @PHP/classes/autoload_005.php: SUCCEEDED
    @PHP/classes/autoload_006.php: SUCCEEDED
    @PHP/classes/bug23951.php: SUCCEEDED
    @PHP/classes/bug24399.php: SUCCEEDED
    @PHP/classes/bug24445.php: SUCCEEDED
    @PHP/classes/bug26737.php: SUCCEEDED
    @PHP/classes/bug27468.php: SUCCEEDED
    @PHP/classes/bug27504.php: SUCCEEDED
    @PHP/classes/class_example.php: SUCCEEDED
    @PHP/classes/class_stdclass.php: SUCCEEDED
    @PHP/classes/clone_001.php: SUCCEEDED
    @PHP/classes/clone_002.php: SUCCEEDED
    @PHP/classes/clone_003.php: SUCCEEDED
    @PHP/classes/clone_004.php: SUCCEEDED
    @PHP/classes/clone_006.php: SUCCEEDED
    @PHP/classes/constants_scope_001.php: SUCCEEDED
    @PHP/classes/ctor_dtor.php: SUCCEEDED
    @PHP/classes/ctor_dtor_inheritance.php: SUCCEEDED
    @PHP/classes/ctor_name_clash.php: SUCCEEDED
    @PHP/classes/dereferencing_001.php: SUCCEEDED
    @PHP/classes/destructor_and_echo.php: SUCCEEDED
    @PHP/classes/destructor_and_references.php: SUCCEEDED
    @PHP/classes/destructor_inheritance.php: SUCCEEDED
    @PHP/classes/destructor_visibility_003.php: SUCCEEDED
    @PHP/classes/factory_001.php: SUCCEEDED
    @PHP/classes/factory_and_singleton_001.php: SUCCEEDED
    @PHP/classes/factory_and_singleton_002.php: SUCCEEDED
    @PHP/classes/final.php: SUCCEEDED
    @PHP/classes/incdec_property_001.php: SUCCEEDED
    @PHP/classes/incdec_property_002.php: SUCCEEDED
    @PHP/classes/incdec_property_003.php: SUCCEEDED
    @PHP/classes/incdec_property_004.php: SUCCEEDED
    @PHP/classes/inheritance.php: SUCCEEDED
    @PHP/classes/inheritance_002.php: SUCCEEDED
    @PHP/classes/interfaces_001.php: SUCCEEDED
    @PHP/classes/interface_construct.php: SUCCEEDED
    @PHP/classes/interface_doubled.php: SUCCEEDED
    @PHP/classes/interface_implemented.php: SUCCEEDED
    @PHP/classes/iterators_001.php: SUCCEEDED
    @PHP/classes/iterators_002.php: SUCCEEDED
    @PHP/classes/iterators_003.php: SUCCEEDED
    @PHP/classes/iterators_004.php: SUCCEEDED
    @PHP/classes/iterators_006.php: SUCCEEDED
    @PHP/classes/iterators_007.php: SUCCEEDED
    @PHP/classes/object_reference_001.php: SUCCEEDED
    @PHP/classes/private_001.php: SUCCEEDED
    @PHP/classes/private_002.php: SUCCEEDED
    @PHP/classes/private_003.php: SUCCEEDED
    @PHP/classes/private_003b.php: SUCCEEDED
    @PHP/classes/private_004.php: SUCCEEDED
    @PHP/classes/private_004b.php: SUCCEEDED
    @PHP/classes/private_005.php: SUCCEEDED
    @PHP/classes/private_005b.php: SUCCEEDED
    @PHP/classes/private_006.php: SUCCEEDED
    @PHP/classes/private_006b.php: SUCCEEDED
    @PHP/classes/private_007.php: SUCCEEDED
    @PHP/classes/private_007b.php: SUCCEEDED
    @PHP/classes/private_members.php: SUCCEEDED
    @PHP/classes/private_redeclare.php: SUCCEEDED
    @PHP/classes/protected_001.php: SUCCEEDED
    @PHP/classes/protected_001b.php: SUCCEEDED
    @PHP/classes/protected_002.php: SUCCEEDED
    @PHP/classes/serialize_001.php: SUCCEEDED
    @PHP/classes/singleton_001.php: SUCCEEDED
    @PHP/classes/static_properties_001.php: SUCCEEDED
    @PHP/classes/type_hinting_001.php: SUCCEEDED
    @PHP/classes/type_hinting_003.php: SUCCEEDED
    @PHP/classes/visibility_000c.php: SUCCEEDED
    @PHP/classes/visibility_001c.php: SUCCEEDED
    @PHP/classes/visibility_002c.php: SUCCEEDED
    @PHP/classes/visibility_003a.php: SUCCEEDED
    @PHP/classes/visibility_003c.php: SUCCEEDED
    @PHP/classes/visibility_004a.php: SUCCEEDED
    @PHP/classes/visibility_004b.php: SUCCEEDED
    @PHP/classes/visibility_004c.php: SUCCEEDED
    @PHP/classes/visibility_005.php: SUCCEEDED
    @PHP/classes/__call_001.php: SUCCEEDED
    @PHP/classes/__set_data_corrupt.php: SUCCEEDED
    @PHP/classes/__set__get_001.php: SUCCEEDED
    @PHP/classes/__set__get_004.php: SUCCEEDED
    @PHP/classes/__set__get_005.php: SUCCEEDED
    @PHP/date/bug17988.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2002-06-25 12:18:48
    2002-06-25 14:18:48
    2002-06-25 13:18:48
    2002-06-25 12:18:48
    2002-06-25 18:18:48
    2002-06-25 14:18:48
    2002-06-25 14:18:48
    2002-06-25 18:18:48
    2002-06-25 10:18:48
    2002-06-25 17:18:48
    2002-06-25 11:18:48
    2002-06-25 17:48:48
    2002-06-25 10:48:48
    2002-06-25 14:18:48
    2002-06-25 14:18:48
    2002-06-25 13:18:48
    2002-06-25 12:18:48
    2002-06-25 18:18:48
    2002-06-25 14:18:48
    2002-06-25 14:18:48
    2002-06-25 18:18:48
    2002-06-25 10:18:48
    2002-06-25 17:18:48
    2002-06-25 11:18:48
    2002-06-25 17:48:48
    2002-06-25 10:48:48
    @PHP/date/bug26317.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2003-11-19 17:20:42
    2003-11-19 17:20:42
    2003-11-19 17:20:42
    2003-11-19 16:20:42
    2003-11-19 16:20:42
    2003-11-19 16:20:42
    @PHP/date/bug26320.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2003-11-19 12:30:42
    2003-11-19 13:30:42
    2003-11-19 12:30:42
    2003-11-19 12:30:42
    @PHP/date/bug28088.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    The following line rightly shows the correct date time:
    04/04/04 2145
    But the following line fails to show the correct date time:
    04/03/04 2245
    The following line rightly shows the correct date time:
    04/04/04 2345
    But the following line fails to show the correct date time:
    04/04/04 0045
    @PHP/date/bug28599.php: SUCCEEDED
    @PHP/date/bug29150.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2005-06-19 22:00:00
    2005-06-20 00:00:00
    @PHP/date/bug29585.php: SUCCEEDED
    @PHP/date/bug29595.php: SUCCEEDED
    @PHP/date/bug33056.php: SUCCEEDED
    @PHP/date/bug33452.php: SUCCEEDED
    @PHP/date/bug33562.php: SUCCEEDED
    @PHP/date/bug33563.php: SUCCEEDED
    @PHP/date/bug33578.php: SUCCEEDED
    @PHP/date/bug33869.php: SUCCEEDED
    @PHP/date/bug34676.php: SUCCEEDED
    @PHP/date/bug34771.php: SUCCEEDED
    @PHP/date/bug35143.php: SUCCEEDED
    @PHP/date/bug35414.php: SUCCEEDED
    @PHP/date/bug35422.php: SUCCEEDED
    @PHP/date/bug35425.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    integer(42)
    integer(1)
    integer(1)
    integer(1)
    integer(1)
    integer(0)
    integer(0)
    integer(1)
    integer(1)
    integer(31)
    integer(1104537661)
    integer(6)
    integer(53)
    integer(5)
    integer(2005)
    integer(0)
    integer(3600)
    integer(292)
    integer(1)
    integer(1)
    integer(1)
    integer(1)
    integer(0)
    integer(0)
    integer(1)
    integer(1)
    integer(31)
    integer(1104559261)
    integer(6)
    integer(53)
    integer(5)
    integer(2005)
    integer(0)
    integer(-18000)
    @PHP/date/bug35456.php: SUCCEEDED
    @PHP/date/bug35624.php: SUCCEEDED
    @PHP/date/bug35630.php: SUCCEEDED
    @PHP/date/bug35699.php: SUCCEEDED
    @PHP/date/bug35705.php: SUCCEEDED
    @PHP/date/bug35885.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    T
    F
    @PHP/date/bug35887.php: SUCCEEDED
    @PHP/date/date.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    c: 2003-01-23T13:20:59+01:00
    r: Thu, 23 Jan 2003 13:20:59 +0100
    c: 2003-01-23T13:20:59+01:00
    r: Thu, 23 Jan 2003 13:20:59 +0100
    c: 2003-01-23T12:20:59+00:00
    r: Thu, 23 Jan 2003 12:20:59 +0000
    c: 2003-01-23T13:20:59+01:00
    r: Thu, 23 Jan 2003 13:20:59 +0100
    @PHP/date/date_create-1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\@PHP\date\__input.txt on line 28
    SKIP
    @PHP/date/date_create-2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\@PHP\date\__input.txt on line 6
    SKIP
    @PHP/date/date_default_timezone_get-3.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Europe/Prague
    America/Chicago
    Europe/Rome
    America/Chicago
    @PHP/date/date_modify-1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\@PHP\date\__input.txt on line 6
    SKIP
    @PHP/date/date_modify-2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\@PHP\date\__input.txt on line 6
    SKIP
    @PHP/date/default-timezone-1.php: SUCCEEDED
    @PHP/date/default-timezone-2.php: SUCCEEDED
    @PHP/date/format-negative-timestamp.php: SUCCEEDED
    @PHP/date/strtotime.php: SUCCEEDED
    @PHP/date/timezone-configuration.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    1119125744
    1119125744
    1119125744
    1119125744
    1119129344
    1119125744
    @PHP/doc_examples/test001.php: SUCCEEDED
    @PHP/doc_examples/test002.php: SUCCEEDED
    @PHP/doc_examples/test003.php: SUCCEEDED
    @PHP/doc_examples/test004.php: SUCCEEDED
    @PHP/doc_examples/test005.php: SUCCEEDED
    @PHP/doc_examples/test006.php: SUCCEEDED
    @PHP/doc_examples/test007.php: SUCCEEDED
    @PHP/doc_examples/test008.php: SUCCEEDED
    @PHP/doc_examples/test009.php: SUCCEEDED
    @PHP/doc_examples/test010.php: SUCCEEDED
    @PHP/doc_examples/test011.php: SUCCEEDED
    @PHP/doc_examples/test013.php: SUCCEEDED
    @PHP/doc_examples/test014.php: SUCCEEDED
    @PHP/doc_examples/test015.php: SUCCEEDED
    @PHP/doc_examples/test016.php: SUCCEEDED
    @PHP/doc_examples/test017.php: SUCCEEDED
    @PHP/doc_examples/test018.php: SUCCEEDED
    @PHP/doc_examples/test019.php: SUCCEEDED
    @PHP/doc_examples/test020.php: SUCCEEDED
    @PHP/doc_examples/test021.php: SUCCEEDED
    @PHP/doc_examples/test022.php: SUCCEEDED
    @PHP/doc_examples/test023.php: SUCCEEDED
    @PHP/doc_examples/test024.php: SUCCEEDED
    @PHP/doc_examples/test025.php: SUCCEEDED
    @PHP/doc_examples/test026.php: SUCCEEDED
    @PHP/doc_examples/test027.php: SUCCEEDED
    @PHP/doc_examples/test028.php: SUCCEEDED
    @PHP/doc_examples/test029.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ´┐Żauky
    �auky
    @PHP/doc_examples/test030.php: SUCCEEDED
    @PHP/doc_examples/test031.php: SUCCEEDED
    @PHP/doc_examples/test032.php: SUCCEEDED
    @PHP/doc_examples/test033.php: SUCCEEDED
    @PHP/doc_examples/test034.php: SUCCEEDED
    @PHP/doc_examples/test035.php: SUCCEEDED
    @PHP/doc_examples/test036.php: SUCCEEDED
    @PHP/doc_examples/test037.php: SUCCEEDED
    @PHP/doc_examples/test038.php: SUCCEEDED
    @PHP/doc_examples/test039.php: SUCCEEDED
    @PHP/doc_examples/test040.php: SUCCEEDED
    @PHP/doc_examples/test041.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    call_user_func():
    hello world!
    Strict Standards: call_user_func(): Non-static method MyClass::myCallbackMethod() should not be called statically in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\@PHP\doc_examples\__input.txt at expression on line 17, column 1.
    Hello World!Hello World!
    @PHP/doc_examples/test042.php: SUCCEEDED
    @PHP/doc_examples/test043.php: SUCCEEDED
    @PHP/doc_examples/test044.php: SUCCEEDED
    @PHP/doc_examples/test045.php: SUCCEEDED
    @PHP/doc_examples/test046.php: SUCCEEDED
    @PHP/doc_examples/test047.php: SUCCEEDED
    @PHP/doc_examples/test048.php: SUCCEEDED
    @PHP/doc_examples/test049.php: SUCCEEDED
    @PHP/doc_examples/test050.php: SUCCEEDED
    @PHP/doc_examples/test051.php: SUCCEEDED
    @PHP/doc_examples/test052.php: SUCCEEDED
    @PHP/doc_examples/test053.php: SUCCEEDED
    @PHP/doc_examples/test054.php: SUCCEEDED
    @PHP/doc_examples/test055.php: SUCCEEDED
    @PHP/doc_examples/test056.php: SUCCEEDED
    @PHP/doc_examples/test057.php: SUCCEEDED
    @PHP/doc_examples/test058.php: SUCCEEDED
    @PHP/doc_examples/test059.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    Deprecated: Assigning the return value of new by reference is deprecated in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\@PHP\doc_examples\__input.txt on line 4
    NULL
    object(stdClass)#1 (0) {
    }
    NULL
    object(stdClass)(0) {
    }
    C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\@PHP\doc_examples\__input.txt(4,5): warning PHP0181: Assigning the return value of new by reference is deprecated
    
    @PHP/doc_examples/test060.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    Deprecated: Assigning the return value of new by reference is deprecated in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\@PHP\doc_examples\__input.txt on line 9
    Static object: NULL
    Static object: NULL
    
    Static object: NULL
    Static object: object(stdClass)#3 (1) {
      ["property"]=>
      int(1)
    }
    Static object: NULL
    Static object: NULL
    
    Static object: NULL
    Static object: object(stdClass)(1) {
      ["property"]=>
      int(1)
    }
    C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\@PHP\doc_examples\__input.txt(9,9): warning PHP0181: Assigning the return value of new by reference is deprecated
    
    @PHP/doc_examples/test061.php: SUCCEEDED
    @PHP/doc_examples/test062.php: SUCCEEDED
    @PHP/doc_examples/test063.php: SUCCEEDED
    @PHP/doc_examples/test064.php: SUCCEEDED
    @PHP/doc_examples/test065.php: SUCCEEDED
    @PHP/doc_examples/test066.php: SUCCEEDED
    @PHP/doc_examples/test067.php: SUCCEEDED
    @PHP/doc_examples/test068.php: SUCCEEDED
    @PHP/doc_examples/test069.php: SUCCEEDED
    @PHP/doc_examples/test070.php: SUCCEEDED
    @PHP/doc_examples/test071.php: SUCCEEDED
    @PHP/doc_examples/test072.php: SUCCEEDED
    @PHP/doc_examples/test073.php: SUCCEEDED
    @PHP/doc_examples/test074.php: SUCCEEDED
    @PHP/doc_examples/test075.php: SUCCEEDED
    @PHP/doc_examples/test076.php: SUCCEEDED
    @PHP/doc_examples/test077.php: SUCCEEDED
    @PHP/doc_examples/test078.php: SUCCEEDED
    @PHP/doc_examples/test079.php: SUCCEEDED
    @PHP/doc_examples/test080.php: SUCCEEDED
    @PHP/doc_examples/test081.php: SUCCEEDED
    @PHP/doc_examples/test082.php: SUCCEEDED
    @PHP/doc_examples/test083.php: SUCCEEDED
    @PHP/doc_examples/test084.php: SUCCEEDED
    @PHP/doc_examples/test085.php: SUCCEEDED
    @PHP/doc_examples/test086.php: SUCCEEDED
    @PHP/doc_examples/test087.php: SUCCEEDED
    @PHP/doc_examples/test088.php: SUCCEEDED
    @PHP/doc_examples/test089.php: SUCCEEDED
    @PHP/doc_examples/test090.php: SUCCEEDED
    @PHP/doc_examples/test091.php: SUCCEEDED
    @PHP/doc_examples/test092.php: SUCCEEDED
    @PHP/doc_examples/test093.php: SUCCEEDED
    @PHP/doc_examples/test094.php: SUCCEEDED
    @PHP/doc_examples/test095.php: SUCCEEDED
    @PHP/doc_examples/test096.php: SUCCEEDED
    @PHP/doc_examples/test097.php: SUCCEEDED
    @PHP/doc_examples/test098.php: SUCCEEDED
    @PHP/doc_examples/test099.php: SUCCEEDED
    @PHP/doc_examples/test100.php: SUCCEEDED
    @PHP/doc_examples/test102.php: SUCCEEDED
    @PHP/doc_examples/test103.php: SUCCEEDED
    @PHP/doc_examples/test104.php: SUCCEEDED
    @PHP/doc_examples/test105.php: SUCCEEDED
    @PHP/doc_examples/test107.php: SUCCEEDED
    @PHP/doc_examples/test108.php: SUCCEEDED
    @PHP/doc_examples/test109.php: SUCCEEDED
    @PHP/doc_examples/test110.php: SUCCEEDED
    @PHP/doc_examples/test111.php: SUCCEEDED
    @PHP/doc_examples/test112.php: SUCCEEDED
    @PHP/doc_examples/test113.php: SUCCEEDED
    @PHP/doc_examples/test114.php: SUCCEEDED
    @PHP/doc_examples/test115.php: SUCCEEDED
    @PHP/doc_examples/test116.php: SUCCEEDED
    @PHP/doc_examples/test117.php: SUCCEEDED
    @PHP/doc_examples/test118.php: SUCCEEDED
    @PHP/doc_examples/test119.php: SUCCEEDED
    @PHP/doc_examples/test120.php: SUCCEEDED
    @PHP/doc_examples/test121.php: SUCCEEDED
    @PHP/doc_examples/test122.php: SUCCEEDED
    @PHP/doc_examples/test123.php: SUCCEEDED
    @PHP/doc_examples/test124.php: SUCCEEDED
    @PHP/doc_examples/test125.php: SUCCEEDED
    @PHP/doc_examples/test126.php: SUCCEEDED
    @PHP/doc_examples/test127.php: SUCCEEDED
    @PHP/doc_examples/test128.php: SUCCEEDED
    @PHP/doc_examples/test129.php: SUCCEEDED
    @PHP/doc_examples/test130.php: SUCCEEDED
    @PHP/doc_examples/test131.php: SUCCEEDED
    @PHP/doc_examples/test132.php: SUCCEEDED
    @PHP/doc_examples/test133.php: SUCCEEDED
    @PHP/doc_examples/test134.php: SUCCEEDED
    @PHP/doc_examples/test136.php: SUCCEEDED
    @PHP/doc_examples/test137.php: SUCCEEDED
    @PHP/doc_examples/test138.php: SUCCEEDED
    @PHP/doc_examples/test139.php: SUCCEEDED
    @PHP/doc_examples/test148.php: SUCCEEDED
    @PHP/doc_examples/test149.php: SUCCEEDED
    @PHP/doc_examples/test150.php: SUCCEEDED
    @PHP/doc_examples/test151.php: SUCCEEDED
    @PHP/doc_examples/test152.php: SUCCEEDED
    @PHP/doc_examples/test153.php: SUCCEEDED
    @PHP/doc_examples/test154.php: SUCCEEDED
    @PHP/doc_examples/test155.php: SUCCEEDED
    @PHP/doc_examples/test156.php: SUCCEEDED
    @PHP/doc_examples/test158.php: SUCCEEDED
    @PHP/lang/001.php: SUCCEEDED
    @PHP/lang/002.php: SUCCEEDED
    @PHP/lang/003.php: SUCCEEDED
    @PHP/lang/004.php: SUCCEEDED
    @PHP/lang/005.php: SUCCEEDED
    @PHP/lang/006.php: SUCCEEDED
    @PHP/lang/007.php: SUCCEEDED
    @PHP/lang/008.php: SUCCEEDED
    @PHP/lang/009.php: SUCCEEDED
    @PHP/lang/010.php: SUCCEEDED
    @PHP/lang/011.php: SUCCEEDED
    @PHP/lang/012.php: SUCCEEDED
    @PHP/lang/013.php: SUCCEEDED
    @PHP/lang/014.php: SUCCEEDED
    @PHP/lang/015.php: SUCCEEDED
    @PHP/lang/016.php: SUCCEEDED
    @PHP/lang/017.php: SUCCEEDED
    @PHP/lang/018.php: SUCCEEDED
    @PHP/lang/019.php: SUCCEEDED
    @PHP/lang/020.php: SUCCEEDED
    @PHP/lang/021.php: SUCCEEDED
    @PHP/lang/022.php: SUCCEEDED
    @PHP/lang/023.php: SUCCEEDED
    @PHP/lang/024.php: SUCCEEDED
    @PHP/lang/025.php: SUCCEEDED
    @PHP/lang/026.php: SUCCEEDED
    @PHP/lang/027.php: SUCCEEDED
    @PHP/lang/028.php: SUCCEEDED
    @PHP/lang/030.php: SUCCEEDED
    @PHP/lang/032.php: SUCCEEDED
    @PHP/lang/036.php: SUCCEEDED
    @PHP/lang/037.php: SUCCEEDED
    @PHP/lang/038.php: SUCCEEDED
    @PHP/lang/039.php: SUCCEEDED
    @PHP/lang/040.php: SUCCEEDED
    @PHP/lang/bison1.php: SUCCEEDED
    @PHP/lang/bug17115.php: SUCCEEDED
    @PHP/lang/bug18872.php: SUCCEEDED
    @PHP/lang/bug19943.php: SUCCEEDED
    @PHP/lang/bug20175.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    Deprecated: Assigning the return value of new by reference is deprecated in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\@PHP\lang\__input.txt on line 110
    foo_static()
    foo_global()
    foo:1
    foo_static()
    foo:1
    bar_static()
    bar_global()
    bar:1
    bar_static()
    bar:1
    wow_static()
    wow_global()
    wow:1
    wow_static()
    wow:1
    oop_test()
    oop_static()
    oop_class()
    oop:1
    oop_static()
    oop:1
    oop_test()
    oop_static()
    oop:1
    foo_static()
    foo_global()
    foo:1
    foo_static()
    foo:1
    bar_static()
    bar_global()
    bar:1
    bar_static()
    bar_global()
    bar:2
    wow_static()
    wow_global()
    wow:1
    wow_static()
    wow:1
    oop_test()
    oop_static()
    oop_class()
    oop:1
    oop_static()
    oop:1
    oop_test()
    oop_static()
    oop:1
    C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\@PHP\lang\__input.txt(110,4): warning PHP0181: Assigning the return value of new by reference is deprecated
    
    @PHP/lang/bug21094.php: SUCCEEDED
    @PHP/lang/bug21600.php: SUCCEEDED
    @PHP/lang/bug21669.php: SUCCEEDED
    @PHP/lang/bug21849.php: SUCCEEDED
    @PHP/lang/bug21961.php: SUCCEEDED
    @PHP/lang/bug22231.php: SUCCEEDED
    @PHP/lang/bug22367.php: SUCCEEDED
    @PHP/lang/bug22510.php: SUCCEEDED
    @PHP/lang/bug22592.php: SUCCEEDED
    @PHP/lang/bug22690.php: SUCCEEDED
    @PHP/lang/bug23279.php: SUCCEEDED
    @PHP/lang/bug23384.php: SUCCEEDED
    @PHP/lang/bug23489.php: SUCCEEDED
    @PHP/lang/bug23524.php: SUCCEEDED
    @PHP/lang/bug23922.php: SUCCEEDED
    @PHP/lang/bug24054.php: SUCCEEDED
    @PHP/lang/bug24396.php: SUCCEEDED
    @PHP/lang/bug24403.php: SUCCEEDED
    @PHP/lang/bug24436.php: SUCCEEDED
    @PHP/lang/bug24499.php: SUCCEEDED
    @PHP/lang/bug24640.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    double(1700000000000000089258092433847514422797596587883870563356951996370064178581143932836831337636761368874297554515902592900802289500112731978596146714137401870842258241575178866354311397451139753100927220499450359906637902366244989496126909662726242240784739940994096632824796638102733857671280980918272.0000000000)
    1.7E+300
    
    ------
    double(0.0000000000)
    1.7E-300
    
    ------
    double(17000000000000001584208052028780237480128823455860622330108867175329927830437888.0000000000)
    1.7E+79
    
    ------
    double(0.0000000000)
    1.7E-79
    
    ------
    double(169999999999999996096025832433329868941658043870400163508258284150340918121070592.0000000000)
    1.7E+80
    
    ------
    double(0.0000000000)
    1.7E-80
    
    ------
    double(1700000000000000013616404158611892038375594280539217794530130541777964808366194688.0000000000)
    1.7E+81
    
    ------
    double(0.0000000000)
    1.7E-81
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    1.6999810742106E-319
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    1.7000798873397E-320
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    1.6995858216939E-321
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    0
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    0
    
    ------
    double(1700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+300
    
    ------
    double(0.0000000000)
    1.70000000000003E-300
    
    ------
    double(17000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+79
    
    ------
    double(0.0000000000)
    1.70000000000001E-79
    
    ------
    double(170000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+80
    
    ------
    double(0.0000000000)
    1.70000000000001E-80
    
    ------
    double(1700000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+81
    
    ------
    double(0.0000000000)
    1.70000000000001E-81
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    1.69998107421056E-319
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    1.70007988733973E-320
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    1.69464516523548E-321
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    0
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    0
    
    ------
    @PHP/lang/bug24652.php: SUCCEEDED
    @PHP/lang/bug24658.php: SUCCEEDED
    @PHP/lang/bug24783.php: SUCCEEDED
    @PHP/lang/bug24926.php: SUCCEEDED
    @PHP/lang/bug25547.php: SUCCEEDED
    @PHP/lang/bug25652.php: SUCCEEDED
    @PHP/lang/bug25922.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Undefined index here: 'error'
    Undefined index here: ''
    @PHP/lang/bug26182.php: SUCCEEDED
    @PHP/lang/bug26696.php: SUCCEEDED
    @PHP/lang/bug26866.php: SUCCEEDED
    @PHP/lang/bug26869.php: SUCCEEDED
    @PHP/lang/bug27354.php: SUCCEEDED
    @PHP/lang/bug27439.php: SUCCEEDED
    @PHP/lang/bug27535.php: SUCCEEDED
    @PHP/lang/bug28213.php: SUCCEEDED
    @PHP/lang/bug28800.php: SUCCEEDED
    @PHP/lang/bug29566.php: SUCCEEDED
    @PHP/lang/bug29893.php: SUCCEEDED
    @PHP/lang/bug29944.php: SUCCEEDED
    @PHP/lang/bug30638.php: SUCCEEDED
    @PHP/lang/bug30726.php: SUCCEEDED
    @PHP/lang/bug30862.php: SUCCEEDED
    @PHP/lang/bug32924.php: SUCCEEDED
    @PHP/lang/bug35382.php: SUCCEEDED
    @PHP/lang/bug7515.php: SUCCEEDED
    @PHP/lang/each_binary_safety.php: SUCCEEDED
    @PHP/lang/error_2_exception_001.php: SUCCEEDED
    @PHP/lang/foreach_with_object_001.php: SUCCEEDED
    @PHP/lang/foreach_with_references_001.php: SUCCEEDED
    @PHP/lang/type_hints_001.php: SUCCEEDED
    @PHP/standard/array/001.php: SUCCEEDED
    @PHP/standard/array/003.php: SUCCEEDED
    @PHP/standard/array/004.php: SUCCEEDED
    @PHP/standard/array/005.php: SUCCEEDED
    @PHP/standard/array/008.php: SUCCEEDED
    @PHP/standard/array/array_change_key_case.php: SUCCEEDED
    @PHP/standard/array/array_chunk.php: SUCCEEDED
    @PHP/standard/array/array_count_values.php: SUCCEEDED
    @PHP/standard/array/array_diff_1.php: SUCCEEDED
    @PHP/standard/array/array_diff_key.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ------ Test 1 --------
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 2 --------
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 3 --------
    array(6) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [2]=>
      int(4)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [2]=>
      int(4)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 4 --------
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 5 --------
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 6 --------
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 7 --------
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    ------ Test 8 --------
    array(6) {
      [0]=>
      int(0)
      [7]=>
      int(14)
      [2]=>
      int(4)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [0]=>
      int(0)
      [7]=>
      int(14)
      [2]=>
      int(4)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 9 --------
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    ------ Test 1 --------
    array(4) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(4) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 2 --------
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 3 --------
    array(6) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [2]=>
      &int(4)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [2]=>
      &int(4)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 4 --------
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 5 --------
    array(4) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(4) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 6 --------
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 7 --------
    array(3) {
      [7]=>
      &int(14)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
    }
    array(3) {
      [7]=>
      &int(14)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
    }
    ------ Test 8 --------
    array(6) {
      [0]=>
      &int(0)
      [7]=>
      &int(14)
      [2]=>
      &int(4)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [0]=>
      &int(0)
      [7]=>
      &int(14)
      [2]=>
      &int(4)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 9 --------
    array(3) {
      [7]=>
      &int(14)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
    }
    array(3) {
      [7]=>
      &int(14)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
    }
    @PHP/standard/array/array_intersect_key.php: SUCCEEDED
    @PHP/standard/array/array_sum.php: SUCCEEDED
    @PHP/standard/array/array_walk_recursive.php: SUCCEEDED
    @PHP/standard/array/bug12776.php: SUCCEEDED
    @PHP/standard/array/bug14580.php: SUCCEEDED
    @PHP/standard/array/bug20381.php: SUCCEEDED
    @PHP/standard/array/bug20865.php: SUCCEEDED
    @PHP/standard/array/bug21182.php: SUCCEEDED
    @PHP/standard/array/bug21918.php: SUCCEEDED
    @PHP/standard/array/bug21998.php: SUCCEEDED
    @PHP/standard/array/bug22088.php: SUCCEEDED
    @PHP/standard/array/bug22463.php: SUCCEEDED
    @PHP/standard/array/bug23581.php: SUCCEEDED
    @PHP/standard/array/bug23788.php: SUCCEEDED
    @PHP/standard/array/bug24198.php: SUCCEEDED
    @PHP/standard/array/bug24220.php: SUCCEEDED
    @PHP/standard/array/bug24766.php: SUCCEEDED
    @PHP/standard/array/bug24897.php: SUCCEEDED
    @PHP/standard/array/bug24980.php: SUCCEEDED
    @PHP/standard/array/bug25359.php: SUCCEEDED
    @PHP/standard/array/bug25708.php: SUCCEEDED
    @PHP/standard/array/bug25758.php: SUCCEEDED
    @PHP/standard/array/bug26458.php: SUCCEEDED
    @PHP/standard/array/bug28974.php: SUCCEEDED
    @PHP/standard/array/bug29493.php: SUCCEEDED
    @PHP/standard/array/bug30266.php: SUCCEEDED
    @PHP/standard/array/bug30833.php: SUCCEEDED
    @PHP/standard/array/bug31158.php: SUCCEEDED
    @PHP/standard/array/bug31213.php: SUCCEEDED
    @PHP/standard/array/bug32021.php: SUCCEEDED
    @PHP/standard/array/bug33382.php: SUCCEEDED
    @PHP/standard/array/bug33989.php: SUCCEEDED
    @PHP/standard/array/bug34227.php: SUCCEEDED
    @PHP/standard/array/bug34982.php: SUCCEEDED
    @PHP/standard/array/bug35014.php: SUCCEEDED
    @PHP/standard/array/bug35022.php: SUCCEEDED
    @PHP/standard/array/bug35821.php: SUCCEEDED
    @PHP/standard/array/count_recursive.php: SUCCEEDED
    @PHP/standard/array/locale_sort.php: SUCCEEDED
    @PHP/standard/array/range.php: SUCCEEDED
    @PHP/standard/assert/assert.php: SUCCEEDED
    @PHP/standard/general_functions/001.php: SUCCEEDED
    @PHP/standard/general_functions/002.php: SUCCEEDED
    @PHP/standard/general_functions/003.php: SUCCEEDED
    @PHP/standard/general_functions/004.php: SUCCEEDED
    @PHP/standard/general_functions/005.php: SUCCEEDED
    @PHP/standard/general_functions/006.php: SUCCEEDED
    @PHP/standard/general_functions/007.php: SUCCEEDED
    @PHP/standard/general_functions/009.php: SUCCEEDED
    @PHP/standard/general_functions/bug25038.php: SUCCEEDED
    @PHP/standard/general_functions/bug27678.php: SUCCEEDED
    @PHP/standard/general_functions/bug29038.php: SUCCEEDED
    @PHP/standard/general_functions/bug31190.php: SUCCEEDED
    @PHP/standard/general_functions/bug32647.php: SUCCEEDED
    @PHP/standard/general_functions/bug35229.php: SUCCEEDED
    @PHP/standard/general_functions/is_resource.php: SUCCEEDED
    @PHP/standard/math/abs.php: SUCCEEDED
    @PHP/standard/math/bug24142.php: SUCCEEDED
    @PHP/standard/math/bug25694.php: SUCCEEDED
    @PHP/standard/math/bug27646.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    double(INF-INF)
    'd:-INF;'
    double(INF-INF)
    double(INF-INF)
    'd:INF;'
    double(INF-INF)
    double(NaNInfini)
    'd:NAN;'
    double(NaNInfini)
    double(-Infinity)
    'd:-INF;'
    double(-Infinity)
    double(Infinity)
    'd:INF;'
    double(Infinity)
    double(NaN)
    'd:NAN;'
    double(NaN)
    @PHP/standard/math/bug30069.php: SUCCEEDED
    @PHP/standard/math/bug30695.php: SUCCEEDED
    @PHP/standard/math/floorceil.php: SUCCEEDED
    @PHP/standard/math/hexdec.php: SUCCEEDED
    @PHP/standard/math/log.php: SUCCEEDED
    @PHP/standard/math/pow.php: SUCCEEDED
    @PHP/standard/math/round.php: SUCCEEDED
    @PHP/standard/reg/001.php: SUCCEEDED
    @PHP/standard/reg/002.php: SUCCEEDED
    @PHP/standard/reg/003.php: SUCCEEDED
    @PHP/standard/reg/004.php: SUCCEEDED
    @PHP/standard/reg/005.php: SUCCEEDED
    @PHP/standard/reg/006.php: SUCCEEDED
    @PHP/standard/reg/007.php: SUCCEEDED
    @PHP/standard/reg/008.php: SUCCEEDED
    @PHP/standard/reg/009.php: SUCCEEDED
    @PHP/standard/reg/010.php: SUCCEEDED
    @PHP/standard/reg/011.php: SUCCEEDED
    @PHP/standard/reg/012.php: SUCCEEDED
    @PHP/standard/reg/013.php: SUCCEEDED
    @PHP/standard/reg/014.php: SUCCEEDED
    @PHP/standard/reg/015.php: SUCCEEDED
    @PHP/standard/reg/016.php: SUCCEEDED
    @PHP/standard/serialize/001.php: SUCCEEDED
    @PHP/standard/serialize/002.php: SUCCEEDED
    @PHP/standard/serialize/003.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    d:100;
    double(100.0000000000)
    
    d:51999999999999996980101120;
    double(51999999999999996980101120.0000000000)
    
    d:8.9999999999999995265585574287341141808127531476202420890331268310546875E-9;
    double(0.0000000090)
    d:100;
    double(100.0000000000)
    
    d:5.2000000000000006E+25;
    double(52000000000000000000000000.0000000000)
    
    d:9.0000000000000045E-09;
    double(0.0000000090)
    @PHP/standard/serialize/004.php: SUCCEEDED
    @PHP/standard/serialize/005.php: SUCCEEDED
    @PHP/standard/serialize/006.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    'O:3:"´┐Ż":1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    object
    {
      '´┐Ż' => '´┐Ż'
    }
    'a:1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    array
    {
      '´┐Ż' => '´┐Ż'
    }
    'O:3:"´┐Ż":1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    object
    {
      'ďż˝' => '´┐Ż'
    }
    'a:1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    array
    {
      'ďż˝' => '´┐Ż'
    }
    @PHP/standard/serialize/bug14293.php: SUCCEEDED
    @PHP/standard/serialize/bug21957.php: SUCCEEDED
    @PHP/standard/serialize/bug23298.php: SUCCEEDED
    @PHP/standard/serialize/bug24063.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0.1 0.1
    0.01 0.01
    0.001 0.001
    0.0001 0.0001
    1.0E-5 1.0E-5
    1.0E-6 1.0E-6
    1.0E-7 1.0E-7
    1.0E-8 1.0E-8
    1.0E-9 1.0E-9
    0.1 0.1
    0.01 0.01
    0.001 0.001
    0.0001 0.0001
    1E-05 1E-05
    1E-06 1E-06
    1E-07 1E-07
    1E-08 1E-08
    1E-09 1E-09
    @PHP/standard/serialize/bug25378.php: SUCCEEDED
    @PHP/standard/serialize/bug26762.php: SUCCEEDED
    @PHP/standard/serialize/bug27469.php: SUCCEEDED
    @PHP/standard/serialize/bug28325.php: SUCCEEDED
    @PHP/standard/serialize/bug30234.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    FALSE
    FALSE
    __autoload(Autoload_Implements)
    object [invalid]
    FALSE
    FALSE
    FALSE
    FALSE
    TRUE
    __autoload(Autoload_Implements)
    object [invalid]
    FALSE
    FALSE
    TRUE
    @PHP/standard/serialize/bug31402.php: SUCCEEDED
    @PHP/standard/serialize/bug31442.php: SUCCEEDED
    @PHP/standard/strings/add-and-stripcslashes.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    kaboemkara!
    foo\b\a\r\b\az
    \f\o\o\[ \]
    \zoo['\.']
    \abcd\e\f\g\h\i\j\k\l\m\n\o\pqrstuvwxy\z
    1
    5d
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\@PHP\standard\strings\__input.txt at expression on line 3, column 1.
    
    kaboemkara!
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\@PHP\standard\strings\__input.txt at expression on line 5, column 1.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\@PHP\standard\strings\__input.txt at expression on line 6, column 1.
    
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\@PHP\standard\strings\__input.txt at expression on line 8, column 1.
    
    1
    5d
    @PHP/standard/strings/add-and-stripslashes.php: SUCCEEDED
    @PHP/standard/strings/basename.php: SUCCEEDED
    @PHP/standard/strings/bin2hex.php: SUCCEEDED
    @PHP/standard/strings/bug20108.php: SUCCEEDED
    @PHP/standard/strings/bug20169.php: SUCCEEDED
    @PHP/standard/strings/bug20261.php: SUCCEEDED
    @PHP/standard/strings/bug20927.php: SUCCEEDED
    @PHP/standard/strings/bug21338.php: SUCCEEDED
    @PHP/standard/strings/bug21453.php: SUCCEEDED
    @PHP/standard/strings/bug21730.php: SUCCEEDED
    @PHP/standard/strings/bug21744.php: SUCCEEDED
    @PHP/standard/strings/bug22008.php: SUCCEEDED
    @PHP/standard/strings/bug22187.php: SUCCEEDED
    @PHP/standard/strings/bug22224.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      0 => 
      object
      {
      }
      1 => 
      object
      {
      }
    }
    @PHP/standard/strings/bug22227.php: SUCCEEDED
    @PHP/standard/strings/bug22904.php: SUCCEEDED
    @PHP/standard/strings/bug23650.php: SUCCEEDED
    @PHP/standard/strings/bug23894.php: SUCCEEDED
    @PHP/standard/strings/bug24098.php: SUCCEEDED
    @PHP/standard/strings/bug24208.php: SUCCEEDED
    @PHP/standard/strings/bug24281.php: SUCCEEDED
    @PHP/standard/strings/bug25671.php: SUCCEEDED
    @PHP/standard/strings/bug25707.php: SUCCEEDED
    @PHP/standard/strings/bug26878.php: SUCCEEDED
    @PHP/standard/strings/bug26973.php: SUCCEEDED
    @PHP/standard/strings/bug27276.php: SUCCEEDED
    @PHP/standard/strings/bug27278.php: SUCCEEDED
    @PHP/standard/strings/bug27295.php: SUCCEEDED
    @PHP/standard/strings/bug27457.php: SUCCEEDED
    @PHP/standard/strings/bug27675.php: SUCCEEDED
    @PHP/standard/strings/bug28386.php: SUCCEEDED
    @PHP/standard/strings/bug33076.php: SUCCEEDED
    @PHP/standard/strings/chr_ord.php: SUCCEEDED
    @PHP/standard/strings/chunk_split.php: SUCCEEDED
    @PHP/standard/strings/count_chars.php: SUCCEEDED
    @PHP/standard/strings/crc32.php: SUCCEEDED
    @PHP/standard/strings/explode.php: SUCCEEDED
    @PHP/standard/strings/implode.php: SUCCEEDED
    @PHP/standard/strings/md5.php: SUCCEEDED
    @PHP/standard/strings/md5raw.php: SUCCEEDED
    @PHP/standard/strings/nl2br.php: SUCCEEDED
    @PHP/standard/strings/sha1.php: SUCCEEDED
    @PHP/standard/strings/sha1raw.php: SUCCEEDED
    @PHP/standard/strings/sprintf_f.php: SUCCEEDED
    @PHP/standard/strings/strcspn.php: SUCCEEDED
    @PHP/standard/strings/strings001.php: SUCCEEDED
    @PHP/standard/strings/strpos.php: SUCCEEDED
    @PHP/standard/strings/strrev.php: SUCCEEDED
    @PHP/standard/strings/strripos.php: SUCCEEDED
    @PHP/standard/strings/strrpos.php: SUCCEEDED
    @PHP/standard/strings/strspn.php: SUCCEEDED
    @PHP/standard/strings/strstr.php: SUCCEEDED
    @PHP/standard/strings/strtoupper.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    cfbfbdcfbfbdcfbfbd
    cfafbdcfafbdcfafbd
    @PHP/standard/strings/strtr.php: SUCCEEDED
    @PHP/standard/strings/strval.php: SUCCEEDED
    @PHP/standard/strings/str_repeat.php: SUCCEEDED
    @PHP/standard/strings/str_shuffle.php: SUCCEEDED
    @PHP/standard/strings/str_word_count.php: SUCCEEDED
    @PHP/standard/strings/substr_count.php: SUCCEEDED
    @PHP/standard/strings/substr_replace.php: SUCCEEDED
    @PHP/standard/strings/wordwrap.php: SUCCEEDED
    @PHP/standard/time/001.php: SUCCEEDED
    @PHP/standard/time/idate.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    U: 1043324459
    Y: 2003
    z: 22
    y: 3
    m: 1
    n: 1
    d: 23
    j: 23
    H: 13
    G: 13
    h: 1
    g: 1
    i: 20
    s: 59
    t: 31
    w: 4
    L: 0
    B: 556
    I: 0
    W: 4
    U: 1043324459
    Y: 2003
    z: 22
    y: 3
    m: 1
    n: 1
    d: 23
    j: 23
    H: 12
    G: 12
    h: 12
    g: 12
    i: 20
    s: 59
    t: 31
    w: 4
    L: 0
    B: 556
    I: 0
    W: 4
    @PHP/strings/001.php: SUCCEEDED
    @PHP/strings/002.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    fprintf test 1:abcde
    20
    printf test 1:simple string
    printf test 2:42
    printf test 3:3.333333
    printf test 4:3.3333333333
    printf test 5:2.50      
    printf test 6:2.50000000
    printf test 7:0000002.50
    printf test 8:<                 foo>
    printf test 9:<bar                 >
    printf test 10: 123456789012345
    printf test 10:<h´┐Żyesterettsjustitiarius>
    printf test 11: 123456789012345678901234567890
    printf test 11:<    h´┐Żyesterettsjustitiarius>
    printf test 12:-12.34
    printf test 13:  -12
    printf test 14:@
    printf test 15:10101010
    printf test 16:aa
    printf test 17:AA
    printf test 18:        10101010
    printf test 19:              aa
    printf test 20:              AA
    printf test 21:0000000010101010
    printf test 22:00000000000000aa
    printf test 23:00000000000000AA
    printf test 24:abcde
    printf test 25:gazonk
    printf test 26:2 1
    printf test 27:3 1 2
    printf test 28:02  1
    printf test 29:2   1
    printf test 30:x
    vprintf test 1:2   1
    fprintf test 1:abcde
    20
    printf test 1:simple string
    printf test 2:42
    printf test 3:3.333333
    printf test 4:3.3333333333
    printf test 5:2.50      
    printf test 6:2.50000000
    printf test 7:0000002.50
    printf test 8:<                 foo>
    printf test 9:<bar                 >
    printf test 10: 123456789012345
    printf test 10:<h�yesterettsjustitiarius>
    printf test 11: 123456789012345678901234567890
    printf test 11:<    h�yesterettsjustitiarius>
    printf test 12:-12.34
    printf test 13:  -12
    printf test 14:@
    printf test 15:10101010
    printf test 16:aa
    printf test 17:AA
    printf test 18:        10101010
    printf test 19:              aa
    printf test 20:              AA
    printf test 21:0000000010101010
    printf test 22:00000000000000aa
    printf test 23:00000000000000AA
    printf test 24:abcde
    printf test 25:gazonk
    printf test 26:2 1
    printf test 27:3 1 2
    printf test 28:02  1
    printf test 29:2   1
    printf test 30:x
    vprintf test 1:2   1
    @PHP/strings/bug22592.php: SUCCEEDED
    Arrays/array1.php: SUCCEEDED
    Arrays/array_diff_intersect.php: SUCCEEDED
    Arrays/array_diff_intersect2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Strict Standards: array_udiff() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 35
    Array
    (
        [0.5] => cr Object
            (
                [priv_member:cr:private] => 12
            )
    
        [0] => cr Object
            (
                [priv_member:cr:private] => 23
            )
    
    )
    
    Strict Standards: array_udiff_assoc() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 36
    Array
    (
        [0.1] => cr Object
            (
                [priv_member:cr:private] => 9
            )
    
        [0.5] => cr Object
            (
                [priv_member:cr:private] => 12
            )
    
        [0] => cr Object
            (
                [priv_member:cr:private] => 23
            )
    
    )
    
    Strict Standards: array_udiff_uassoc() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 37
    
    Strict Standards: array_udiff_uassoc() expects parameter 4 to be a valid callback, non-static method cr::comp_func_key() should not be called statically in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 37
    Array
    (
        [0.1] => cr Object
            (
                [priv_member:cr:private] => 9
            )
    
        [0.5] => cr Object
            (
                [priv_member:cr:private] => 12
            )
    
        [0] => cr Object
            (
                [priv_member:cr:private] => 23
            )
    
    )
    Array
    (
        [b] => brown
        [c] => blue
        [0] => red
    )
    ------------------------------------
    
    Strict Standards: array_uintersect() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 40
    Array
    (
        [0.1] => cr Object
            (
                [priv_member:cr:private] => 9
            )
    
        [1] => cr Object
            (
                [priv_member:cr:private] => 4
            )
    
        [2] => cr Object
            (
                [priv_member:cr:private] => -15
            )
    
    )
    
    Strict Standards: array_uintersect_assoc() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 41
    Array
    (
        [1] => cr Object
            (
                [priv_member:cr:private] => 4
            )
    
        [2] => cr Object
            (
                [priv_member:cr:private] => -15
            )
    
    )
    
    Strict Standards: array_uintersect_uassoc() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 42
    
    Strict Standards: array_uintersect_uassoc() expects parameter 4 to be a valid callback, non-static method cr::comp_func_key() should not be called statically in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 42
    Array
    (
        [1] => cr Object
            (
                [priv_member:cr:private] => 4
            )
    
        [2] => cr Object
            (
                [priv_member:cr:private] => -15
            )
    
    )
    Array
    (
        [a] => green
    )
    Array
    (
        [0.5] => cr Object
        (
            [priv_member:private] => 12
        )
    
        [0] => cr Object
        (
            [priv_member:private] => 23
        )
    
    )
    Array
    (
        [0.1] => cr Object
        (
            [priv_member:private] => 9
        )
    
        [0.5] => cr Object
        (
            [priv_member:private] => 12
        )
    
        [0] => cr Object
        (
            [priv_member:private] => 23
        )
    
    )
    Array
    (
        [0.1] => cr Object
        (
            [priv_member:private] => 9
        )
    
        [0.5] => cr Object
        (
            [priv_member:private] => 12
        )
    
        [0] => cr Object
        (
            [priv_member:private] => 23
        )
    
    )
    Array
    (
        [b] => brown
        [c] => blue
        [0] => red
    )
    ------------------------------------
    Array
    (
        [0.1] => cr Object
        (
            [priv_member:private] => 9
        )
    
        [1] => cr Object
        (
            [priv_member:private] => 4
        )
    
        [2] => cr Object
        (
            [priv_member:private] => -15
        )
    
    )
    Array
    (
        [1] => cr Object
        (
            [priv_member:private] => 4
        )
    
        [2] => cr Object
        (
            [priv_member:private] => -15
        )
    
    )
    Array
    (
        [1] => cr Object
        (
            [priv_member:private] => 4
        )
    
        [2] => cr Object
        (
            [priv_member:private] => -15
        )
    
    )
    Array
    (
        [a] => green
    )
    Arrays/array_diff_intersect3.php: SUCCEEDED
    Arrays/array_filter%20false%20entries%20%2322016.php: SUCCEEDED
    Arrays/array_map.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Array
    (
        [0] => Array
            (
                [0] => 1
                [1] => A
                [2] => 0
            )
    
        [1] => Array
            (
                [0] => 2
                [1] => B
                [2] => 0
            )
    
        [2] => Array
            (
                [0] => 3
                [1] => C
                [2] => 
            )
    
    )
    Array
    (
        [0] => 1 A 0
        [1] => 2 B 0
        [2] => 3 C 
    )
    Array
    (
        [A] => 2
        [10] => 3
    )
    Array
    (
        [0] => 1
        [1] => 2
        [2] => 3
    )
    Array
    (
        [0] => A
        [1] => B
        [2] => C
    )
    Array
    (
        [0] => 0
        [1] => 0
    )
    Array
    (
        [A] => 1
        [10] => 2
    )
    Array
    (
        [0] => Array
        (
            [0] => 1
            [1] => A
            [2] => 0
        )
    
        [1] => Array
        (
            [0] => 2
            [1] => B
            [2] => 0
        )
    
        [2] => Array
        (
            [0] => 3
            [1] => C
            [2] => 
        )
    
    )
    Array
    (
        [0] => 1 A 0
        [1] => 2 B 0
        [2] => 3 C 
    )
    Array
    (
        [A] => 2
        [10] => 3
    )
    Array
    (
        [0] => 1
        [1] => 2
        [2] => 3
    )
    Array
    (
        [0] => A
        [1] => B
        [2] => C
    )
    Array
    (
        [0] => x
        [1] => x
    )
    Array
    (
        [A] => 1
        [10] => 2
    )
    Arrays/array_merge_recursive.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Array
    (
        [color] => Array
            (
                [favorite] => Array
                    (
                        [0] => red
                        [1] => green
                    )
    
                [0] => blue
            )
    
        [0] => Array
            (
                [0] => 1
                [1] => 2
                [2] => 3
            )
    
        [q] => Array
            (
                [0] => 
                [1] => 
                [2] => x
            )
    
        [1] => 10
        [2] => Array
            (
                [0] => 4
                [1] => 5
                [2] => 6
            )
    
    )
    Array
    (
        [a] => Array
            (
                [0] => 1
                [1] => 2
                [2] => 3
                [3] => e
            )
    
    )
    Array
    (
        [a] => Array
            (
                [0] => 1
                [1] => 2
                [2] => 3
                [3] => e
            )
    
    )
    Array
    (
        [a] => 1
        [b] => 2
    )
    Array
    (
        [a] => xxx
        [b] => 2
    )
    Array
    (
        [a] => Array
            (
                [a] => Array
                    (
                        [a] => Array
     *RECURSION*
                    )
    
                [0] => 1
                [1] => 2
                [2] => 3
            )
    
    )
    Array
    (
        [a] => Array
            (
                [b] => Array
                    (
                        [0] => 1
                        [1] => 1
                    )
    
                [c] => 1
                [d] => Array
                    (
                        [0] => 2
                        [1] => 3
                    )
    
            )
    
    )
    Array
    (
        [a] => Array
            (
                [0] => 
                [1] => 
            )
    
    )
    Array
    (
        [a] => Array
            (
                [0] => 
                [1] => 
            )
    
    )
    Array
    (
        [color] => Array
        (
            [favorite] => Array
            (
                [0] => red
                [1] => green
            )
    
            [0] => blue
        )
    
        [0] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
        )
    
        [q] => Array
        (
            [0] => x
        )
    
        [1] => 10
        [2] => Array
        (
            [0] => 4
            [1] => 5
            [2] => 6
        )
    
    )
    Array
    (
        [a] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
            [3] => e
        )
    
    )
    Array
    (
        [a] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
            [3] => e
        )
    
    )
    Array
    (
        [a] => 1
        [b] => 2
    )
    Array
    (
        [a] => xxx
        [b] => 2
    )
    Array
    (
        [a] => Array
        (
            [a] => Array
            (
                [a] => Array [recursion]
    
    
            )
    
            [0] => 1
            [1] => 2
            [2] => 3
        )
    
    )
    Array
    (
        [a] => Array
        (
            [b] => Array
            (
                [0] => 1
                [1] => 1
            )
    
            [c] => 1
            [d] => Array
            (
                [0] => 2
                [1] => 3
            )
    
        )
    
    )
    Array
    (
        [a] => Array
        (
        )
    
    )
    Array
    (
        [a] => Array
        (
        )
    
    )
    Arrays/array_reduce1.php: SUCCEEDED
    Arrays/array_reduce2.php: SUCCEEDED
    Arrays/array_slice.php: SUCCEEDED
    Arrays/array_sumprod.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    float(8.3)
    float(0)
    int(6)
    int(6)
    float(4294967297)
    float(9.2233720282648E+18)
    bool(true)
    bool(false)
    float(-7.7)
    float(-38.4)
    int(6)
    int(6)
    int64(4294967297)
    int64(9223372028264841218)
    bool(true)
    bool(true)
    Arrays/array_unshift.php: SUCCEEDED
    Arrays/array_walk.php: SUCCEEDED
    Arrays/array_walk_recursive.php: SUCCEEDED
    Arrays/multisort.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    bool(true)
    Array
    (
        [0] => Array
            (
                [0] => 2
                [1] => 8
                [2] => 2
                [3] => 2
                [4] => 8
                [5] => 8
            )
    
        [1] => Array
            (
                [0] => 7
                [1] => 2
                [2] => 7
                [3] => 4
                [4] => 8
                [5] => 1
            )
    
        [2] => Array
            (
                [0] => 1
                [1] => 4
                [2] => 8
                [3] => 0
                [4] => 6
                [5] => 2
            )
    
        [3] => Array
            (
                [0] => 8
                [1] => 4
                [2] => 1
                [3] => 0
                [4] => 7
                [5] => 1
            )
    
        [4] => Array
            (
                [0] => 20
                [1] => 2
                [2] => 12
                [3] => 11
                [4] => 10
                [5] => 1
            )
    
    )
    Array
    (
        [0] => Array
            (
                [0] => 10
                [1] => 100
                [2] => 100
                [3] => a
            )
    
        [1] => Array
            (
                [0] => 1
                [1] => 3
                [2] => 2
                [3] => 1
            )
    
    )
    Array
    (
        [0] => 10
        [1] => a
        [2] => 100
        [3] => 100
    )
    Array
    (
        [0] => 1
        [1] => 1
        [2] => 2
        [3] => 3
    )
    bool(true)
    Array
    (
        [0] => Array
        (
            [0] => 2
            [1] => 8
            [2] => 2
            [3] => 2
            [4] => 8
            [5] => 8
        )
    
        [1] => Array
        (
            [0] => 7
            [1] => 2
            [2] => 7
            [3] => 4
            [4] => 8
            [5] => 1
        )
    
        [2] => Array
        (
            [0] => 1
            [1] => 4
            [2] => 8
            [3] => 0
            [4] => 6
            [5] => 2
        )
    
        [3] => Array
        (
            [0] => 8
            [1] => 4
            [2] => 1
            [3] => 0
            [4] => 7
            [5] => 1
        )
    
        [4] => Array
        (
            [0] => 20
            [1] => 2
            [2] => 12
            [3] => 11
            [4] => 10
            [5] => 1
        )
    
    )
    Array
    (
        [0] => Array
        (
            [0] => 10
            [1] => 100
            [2] => 100
            [3] => a
        )
    
        [1] => Array
        (
            [0] => 1
            [1] => 3
            [2] => 2
            [3] => 1
        )
    
    )
    Array
    (
        [0] => 10
        [1] => a
        [2] => 100
        [3] => 100
    )
    Array
    (
        [0] => 1
        [1] => 1
        [2] => 2
        [3] => 3
    )
    Arrays/multisort_empty.php: SUCCEEDED
    Arrays/nonarray%20access%20%2322019.php: SUCCEEDED
    Arrays/optimizations.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    3
    4
    5
    a
    b
    c
    
    Warning: strtolower() expects parameter 1 to be string, array given in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 15
    
    cablo
    3
    4
    5
    a
    b
    c
    array
    cablo
    Arrays/recursion.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    f1:
    array(2) {
      ["a"]=>
      array(5) {
        ["a"]=>
        &array(3) {
          ["a"]=>
          &array(3) {
            ["a"]=>
            *RECURSION*
            [0]=>
            string(1) "y"
            [1]=>
            string(1) "z"
          }
          [0]=>
          string(1) "y"
          [1]=>
          string(1) "z"
        }
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        string(1) "x"
      }
      [0]=>
      string(1) "w"
    }
    f2:
    array(1) {
      ["A"]=>
      &array(2) {
        ["a"]=>
        &array(2) {
          ["a"]=>
          *RECURSION*
          [0]=>
          string(1) "z"
        }
        [0]=>
        string(1) "z"
      }
    }
    f3:
    array(2) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) {
          [0]=>
          *RECURSION*
          [1]=>
          string(1) "z"
        }
        [1]=>
        string(1) "z"
      }
      [1]=>
      string(1) "z"
    }
    f4:
    
    Warning: array_merge_recursive(): recursion detected in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 37
    array(1) {
      ["a"]=>
      &array(3) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
      }
    }
    f5:
    array(1) {
      ["a"]=>
      array(6) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        int(1)
        [4]=>
        int(2)
        [5]=>
        int(3)
      }
    }
    f6:
    array(1) {
      ["a"]=>
      array(2) {
        [0]=>
        string(2) "xx"
        [1]=>
        int(2)
      }
    }
    f7:
    array(1) {
      ["a"]=>
      array(1) {
        ["a"]=>
        array(1) {
          ["a"]=>
          &array(1) {
            ["a"]=>
            &array(1) {
              ["a"]=>
              *RECURSION*
            }
          }
        }
      }
    }
    f1:
    array(2) {
      ["a"]=>
      array(5) {
        ["a"]=>
        &array(3) {
          ["a"]=>
          &array(3) [recursion]
          [0]=>
          string(1) "y"
          [1]=>
          string(1) "z"
        }
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        string(1) "x"
      }
      [0]=>
      string(1) "w"
    }
    f2:
    array(1) {
      ["A"]=>
      &array(2) {
        ["a"]=>
        &array(2) [recursion]
        [0]=>
        string(1) "z"
      }
    }
    f3:
    array(2) {
      [0]=>
      &array(2) [recursion]
      [1]=>
      string(1) "z"
    }
    f4:
    array(1) {
      ["a"]=>
      array(6) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        int(1)
        [4]=>
        int(2)
        [5]=>
        int(3)
      }
    }
    f5:
    array(1) {
      ["a"]=>
      array(6) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        int(1)
        [4]=>
        int(2)
        [5]=>
        int(3)
      }
    }
    f6:
    array(1) {
      ["a"]=>
      array(2) {
        [0]=>
        string(2) "xx"
        [1]=>
        int(2)
      }
    }
    f7:
    array(1) {
      ["a"]=>
      &array(1) {
        ["a"]=>
        &array(1) [recursion]
      }
    }
    Arrays/sort.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    sort regular:
    Array
    (
        [0] => 0
        [1] => 1
        [2] => 1
        [3] => 8
        [4] => 0x10
        [5] => 10x
        [6] => 20x
        [7] => ach0
        [8] => add1
        [9] => x10
        [10] => x2
    )
    
    sort numeric:
    Array
    (
        [0] => add1
        [1] => x2
        [2] => 0x10
        [3] => ach0
        [4] => 0
        [5] => x10
        [6] => 1
        [7] => 1
        [8] => 8
        [9] => 10x
        [10] => 20x
    )
    
    sort string:
    Array
    (
        [0] => 0
        [1] => 0x10
        [2] => 1
        [3] => 1
        [4] => 10x
        [5] => 20x
        [6] => 8
        [7] => ach0
        [8] => add1
        [9] => x10
        [10] => x2
    )
    
    sort locale:
    Array
    (
        [0] => 0
        [1] => 0x10
        [2] => 1
        [3] => 1
        [4] => 10x
        [5] => 20x
        [6] => 8
        [7] => ach0
        [8] => add1
        [9] => x10
        [10] => x2
    )
    
    ksort regular:
    Array
    (
        [x] => 8
        [z] => 1
        [0] => x10
        [1] => 10x
        [2b] => 1
        [2] => 20x
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [10a] => 0
    )
    
    ksort numeric:
    Array
    (
        [x] => 8
        [z] => 1
        [0] => x10
        [1] => 10x
        [2b] => 1
        [2] => 20x
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [10a] => 0
    )
    
    ksort string:
    Array
    (
        [0] => x10
        [1] => 10x
        [10a] => 0
        [2] => 20x
        [2b] => 1
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [x] => 8
        [z] => 1
    )
    
    ksort locale:
    Array
    (
        [0] => x10
        [1] => 10x
        [10a] => 0
        [2] => 20x
        [2b] => 1
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [x] => 8
        [z] => 1
    )
    
    asort regular:
    Array
    (
        [10a] => 0
        [2b] => 1
        [z] => 1
        [x] => 8
        [4] => 0x10
        [1] => 10x
        [2] => 20x
        [5] => ach0
        [6] => add1
        [0] => x10
        [3] => x2
    )
    
    asort numeric:
    Array
    (
        [6] => add1
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [10a] => 0
        [0] => x10
        [z] => 1
        [2b] => 1
        [x] => 8
        [1] => 10x
        [2] => 20x
    )
    
    asort string:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [z] => 1
        [2b] => 1
        [1] => 10x
        [2] => 20x
        [x] => 8
        [5] => ach0
        [6] => add1
        [0] => x10
        [3] => x2
    )
    
    asort locale:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [z] => 1
        [2b] => 1
        [1] => 10x
        [2] => 20x
        [x] => 8
        [5] => ach0
        [6] => add1
        [0] => x10
        [3] => x2
    )
    
    rsort regular:
    Array
    (
        [0] => x2
        [1] => x10
        [2] => add1
        [3] => ach0
        [4] => 20x
        [5] => 10x
        [6] => 0x10
        [7] => 8
        [8] => 1
        [9] => 1
        [10] => 0
    )
    
    rsort numeric:
    Array
    (
        [0] => 20x
        [1] => 10x
        [2] => 8
        [3] => 1
        [4] => 1
        [5] => ach0
        [6] => add1
        [7] => 0x10
        [8] => x2
        [9] => x10
        [10] => 0
    )
    
    rsort string:
    Array
    (
        [0] => x2
        [1] => x10
        [2] => add1
        [3] => ach0
        [4] => 8
        [5] => 20x
        [6] => 10x
        [7] => 1
        [8] => 1
        [9] => 0x10
        [10] => 0
    )
    
    rsort locale:
    Array
    (
        [0] => x2
        [1] => x10
        [2] => add1
        [3] => ach0
        [4] => 8
        [5] => 20x
        [6] => 10x
        [7] => 1
        [8] => 1
        [9] => 0x10
        [10] => 0
    )
    
    natsort:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [2b] => 1
        [z] => 1
        [x] => 8
        [1] => 10x
        [2] => 20x
        [5] => ach0
        [6] => add1
        [3] => x2
        [0] => x10
    )
    sort regular:
    Array
    (
        [0] => 0x10
        [1] => 10x
        [2] => 20x
        [3] => ach0
        [4] => add1
        [5] => x10
        [6] => 0
        [7] => x2
        [8] => 1
        [9] => 1
        [10] => 8
    )
    
    sort numeric:
    Array
    (
        [0] => x10
        [1] => 0
        [2] => x2
        [3] => ach0
        [4] => add1
        [5] => 1
        [6] => 1
        [7] => 8
        [8] => 10x
        [9] => 0x10
        [10] => 20x
    )
    
    sort string:
    Array
    (
        [0] => 0
        [1] => 0x10
        [2] => 1
        [3] => 1
        [4] => 10x
        [5] => 20x
        [6] => 8
        [7] => ach0
        [8] => add1
        [9] => x10
        [10] => x2
    )
    
    sort locale:
    Array
    (
        [0] => 0
        [1] => 0x10
        [2] => 1
        [3] => 1
        [4] => 10x
        [5] => 20x
        [6] => 8
        [7] => add1
        [8] => ach0
        [9] => x10
        [10] => x2
    )
    
    ksort regular:
    Array
    (
        [x] => 8
        [z] => 1
        [0] => x10
        [1] => 10x
        [2] => 20x
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [10a] => 0
        [2b] => 1
    )
    
    ksort numeric:
    Array
    (
        [x] => 8
        [z] => 1
        [0] => x10
        [1] => 10x
        [2b] => 1
        [2] => 20x
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [10a] => 0
    )
    
    ksort string:
    Array
    (
        [0] => x10
        [1] => 10x
        [10a] => 0
        [2] => 20x
        [2b] => 1
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [x] => 8
        [z] => 1
    )
    
    ksort locale:
    Array
    (
        [0] => x10
        [1] => 10x
        [10a] => 0
        [2] => 20x
        [2b] => 1
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [x] => 8
        [z] => 1
    )
    
    asort regular:
    Array
    (
        [4] => 0x10
        [1] => 10x
        [2] => 20x
        [5] => ach0
        [6] => add1
        [0] => x10
        [10a] => 0
        [3] => x2
        [z] => 1
        [2b] => 1
        [x] => 8
    )
    
    asort numeric:
    Array
    (
        [0] => x10
        [10a] => 0
        [3] => x2
        [5] => ach0
        [6] => add1
        [z] => 1
        [2b] => 1
        [x] => 8
        [1] => 10x
        [4] => 0x10
        [2] => 20x
    )
    
    asort string:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [z] => 1
        [2b] => 1
        [1] => 10x
        [2] => 20x
        [x] => 8
        [5] => ach0
        [6] => add1
        [0] => x10
        [3] => x2
    )
    
    asort locale:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [z] => 1
        [2b] => 1
        [1] => 10x
        [2] => 20x
        [x] => 8
        [6] => add1
        [5] => ach0
        [0] => x10
        [3] => x2
    )
    
    rsort regular:
    Array
    (
        [0] => 8
        [1] => 1
        [2] => 1
        [3] => x2
        [4] => x10
        [5] => 0
        [6] => add1
        [7] => ach0
        [8] => 20x
        [9] => 10x
        [10] => 0x10
    )
    
    rsort numeric:
    Array
    (
        [0] => 20x
        [1] => 0x10
        [2] => 10x
        [3] => 8
        [4] => 1
        [5] => 1
        [6] => x10
        [7] => 0
        [8] => x2
        [9] => ach0
        [10] => add1
    )
    
    rsort string:
    Array
    (
        [0] => x2
        [1] => x10
        [2] => add1
        [3] => ach0
        [4] => 8
        [5] => 20x
        [6] => 10x
        [7] => 1
        [8] => 1
        [9] => 0x10
        [10] => 0
    )
    
    rsort locale:
    Array
    (
        [0] => x2
        [1] => x10
        [2] => ach0
        [3] => add1
        [4] => 8
        [5] => 20x
        [6] => 10x
        [7] => 1
        [8] => 1
        [9] => 0x10
        [10] => 0
    )
    
    natsort:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [z] => 1
        [2b] => 1
        [x] => 8
        [1] => 10x
        [2] => 20x
        [5] => ach0
        [6] => add1
        [3] => x2
        [0] => x10
    )
    Arrays/usort.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    Array
    (
        [0] => 10
        [1] => 9
        [2] => 8
        [3] => 7
        [4] => 6
        [5] => 5
        [6] => 4
        [7] => 3
        [8] => 2
        [9] => 1
    )
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Array
    (
        [0] => 10
        [1] => 9
        [2] => 8
        [3] => 7
        [4] => 6
        [5] => 5
        [6] => 4
        [7] => 3
        [8] => 2
        [9] => 1
    )
    Arrays/lazy_copy/001.php: SUCCEEDED
    Arrays/lazy_copy/002.php: SUCCEEDED
    Arrays/lazy_copy/003.php: SUCCEEDED
    Arrays/lazy_copy/004.php: SUCCEEDED
    Arrays/lazy_copy/005.php: SUCCEEDED
    Arrays/lazy_copy/006.php: SUCCEEDED
    Bugs/class_incompletepart.php: SUCCEEDED
    Bugs/division-by-zero.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    DIVISION
    
    Warning: Division by zero in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 6
    bool(false)
    
    Warning: Division by zero in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 8
    bool(false)
    
    Warning: Division by zero in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 10
    bool(false)
    
    Warning: Division by zero in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 12
    bool(false)
    MODULO
    
    Warning: Division by zero in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 16
    bool(false)
    
    Warning: Division by zero in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 18
    bool(false)
    
    Warning: Division by zero in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 20
    bool(false)
    
    Warning: Division by zero in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 22
    bool(false)
    DIVISION
    bool(false)
    bool(false)
    
    Warning: Division by zero in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt at expression on line 10, column 2.
    bool(false)
    
    Warning: Division by zero in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt at expression on line 12, column 2.
    bool(false)
    MODULO
    bool(false)
    bool(false)
    
    Warning: Division by zero in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt at expression on line 20, column 2.
    bool(false)
    
    Warning: Division by zero in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt at expression on line 22, column 2.
    bool(false)
    C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt(6,10): warning PHP0150: Division by zero
    C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt(8,9): warning PHP0150: Division by zero
    C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt(16,10): warning PHP0150: Division by zero
    C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt(18,9): warning PHP0150: Division by zero
    
    Bugs/function-in-unknown-class.php: SUCCEEDED
    Bugs/if_if.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ok
    Notice: Use of undefined constant x - assumed 'x' in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt at expression on line 4, column 6.
    Bugs/is_a_null_value.php: SUCCEEDED
    Bugs/preg-named-groups.php: SUCCEEDED
    Bugs/preg-replace-advanced.php: SUCCEEDED
    Bugs/preg-replace-range.php: SUCCEEDED
    Bugs/preg-replace.php: SUCCEEDED
    Bugs/preg-this-dynamic.php: FAILED
    Script hung upNo errorsSuccess
    Expected test outputReal script output
    Unhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---> PHP.Core.Debug+AssertException: Assertion failed: 
       at PHP.Core.Debug.Fail(String message)
       at PHP.Core.Debug.Assert(Boolean condition)
       at PHP.Core.RelativePath.ParseCanonical(String relativePath)
       at PHP.Core.Emit.TransientAssemblyBuilder.Build(String sourceCode, SourceCodeDescriptor descriptor, EvalKinds kind, CompilationContext context, ScriptContext scriptContext, DTypeDesc referringType, NamingContext namingContext, Boolean completeSource)
       at PHP.Core.DynamicCode.EvalInternal(String prefix, String code, String suffix, EvalKinds kind, ScriptContext scriptContext, Dictionary`2 localVariables, DObject self, DTypeDesc referringType, SourceCodeDescriptor descriptor, Boolean entireFile, NamingContext namingContext)
       at PHP.Core.DynamicCode.Eval(String code, Boolean synthetic, ScriptContext context, Dictionary`2 definedVariables, DObject self, DTypeDesc referringType, String callerRelativeSourcePath, Int32 line, Int32 column, Int32 containerId, NamingContext namingContext)
       at PHP.Library.PerlRegExp.Evaluator.ReplaceCodeExecute(Match m)
       at System.Text.RegularExpressions.RegexReplacement.Replace(MatchEvaluator evaluator, Regex regex, String input, Int32 count, Int32 startat)
       at System.Text.RegularExpressions.Regex.Replace(String input, MatchEvaluator evaluator, Int32 count)
       at PHP.Library.PerlRegExp.ReplaceInternal(DObject self, Dictionary`2 definedVariables, PerlRegExpConverter converter, PhpCallback callback, String str, Int32 limit, SourceCodeDescriptor sourceCodeDesc, Int32& count)
       at PHP.Library.PerlRegExp.SimpleReplace(DObject self, Dictionary`2 definedVariables, Object pattern, String replacement, PhpCallback callback, Object data, Int32 limit, SourceCodeDescriptor descriptor, Int32& count)
       at PHP.Library.PerlRegExp.Replace(ScriptContext context, DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, PhpCallback callback, Object data, Int32 limit, Int32& count)
       at PHP.Library.PerlRegExp.Replace(ScriptContext context, DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, Object data)
       at PHP.Dynamic.PhpNetClassLibrary.preg_replace(Object , PhpStack )
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <__input.txt>.a.a(ScriptContext ) in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt:line 16
       at <__input.txt>.a.<Mediator>(ScriptContext )
       at <__input.txt>.a.a(Object instance, PhpStack stack)
       at <__input.txt>.<Script>.<Main>(ScriptContext <context>, Dictionary`2 <locals>, DObject <self>, DTypeDesc <includer>, Boolean <request>) in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt:line 19
       at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)
       at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)
       --- End of inner exception stack trace ---
       at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)
       at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)
       at <Global>.Run(String[] )
    
    Bugs/preg-this-dynamic2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    foo: ahoj
    foo: lidi
    foo: rozkladame
    foo: ahoj
    foo: lidi
    foo: rozkladame
    foo: ahoj
    foo: lidi
    foo: rozkladame
    
    Notice: Undefined variable: this.
    
    Error: Call to a member function foo() on a non-object.
    Bugs/preg-this.php: SUCCEEDED
    Bugs/preg-ungreedy-bugs.php: SUCCEEDED
    Bugs/preg-unkn.php: SUCCEEDED
    Bugs/trigger_error%20line%20number%20%232787.php: SUCCEEDED
    CLR/BaseTypes.php: SUCCEEDED
    CLR/ClrEvent.php: SUCCEEDED
    CLR/ConditionalDecls.php: SUCCEEDED
    CLR/ConditionalDecls2.php: SUCCEEDED
    CLR/foreach.php: SUCCEEDED
    CLR/handle_enum.php: SUCCEEDED
    CLR/Inheritance1.php: FAILED
    Phalanger misbehaviour while compiling [file] sectionSee belowSuccess
    Expected test outputReal script output
    C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(3,2): error PHP2031: Circular interface inheritance dependency involving 'I4' and 'I1'
    C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(6,2): (related location)
    
    CLR/Inheritance2.php: FAILED
    Phalanger misbehaviour while compiling [file] sectionSee belowSuccess
    Expected test outputReal script output
    C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(3,2): error PHP2031: Circular interface inheritance dependency involving 'J4' and 'J1'
    C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(6,2): (related location)
    
    CLR/Inheritance3.php: FAILED
    Phalanger misbehaviour while compiling [file] sectionSee belowSuccess
    Expected test outputReal script output
    C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(3,2): error PHP2031: Circular interface inheritance dependency involving 'J5' and 'J5'
    C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(3,2): (related location)
    
    CLR/Inheritance4.php: FAILED
    Phalanger misbehaviour while compiling [file] sectionSee belowSuccess
    Expected test outputReal script output
    error PHP2007: Internal error! 
    Please, report this bug via http://www.codeplex.com/WorkItem/List.aspx?ProjectName=Phalanger.
    Additional information: 
    Could not load type '<__input.txt>.J`1' from assembly 'Inheritance4_file, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' because it has recursive generic definition.
       at System.Reflection.Emit.TypeBuilder.TermCreateClass(RuntimeModule module, Int32 tk, ObjectHandleOnStack type)
       at System.Reflection.Emit.TypeBuilder.CreateTypeNoLock()
       at System.Reflection.Emit.TypeBuilder.CreateType()
       at PHP.Core.Reflection.PhpType.Bake()
       at PHP.Core.Reflection.ScriptCompilationUnit.Bake()
       at PHP.Core.Reflection.InclusionGraphBuilder.EmitAllUnits(CodeGenerator codeGenerator)
       at PHP.Core.Emit.ScriptAssemblyBuilder.CompileScripts(IEnumerable`1 sourceFiles, String duckPath, String duckNamespace, CompilationContext context)
       at PHP.Core.Emit.ScriptAssemblyBuilder.Build(IEnumerable`1 sourceFiles, CompilationContext context)
       at PHP.Core.ApplicationCompiler.Compile(ApplicationContext applicationContext, CompilerConfiguration config, ErrorSink errorSink, CompilationParameters ps)
    
    
    CLR/Inheritance5.php: SUCCEEDED
    CLR/Inheritance6.php: SUCCEEDED
    CLR/Inheritance7.php: SUCCEEDED
    CLR/Inheritance8.php: SUCCEEDED
    CLR/Inheritance9.php: FAILED
    Phalanger misbehaviour while compiling [file] sectionSee belowSuccess
    Expected test outputReal script output
    C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(14,2): error PHP1018: Class 'D' doesn't implement abstract method I::f()
    
    CLR/Lambdas.php: FAILED
    Phalanger misbehaviour while compiling [file] sectionSee belowCompile error
    Expected test outputReal script output
    C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(4,3): error PHP1120: Unknown custom attribute; neither of types 'AttributeUsage' and 'AttributeUsageAttribute' exists
    C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(17,3): error PHP1120: Unknown custom attribute; neither of types 'MyAttribute' and 'MyAttributeAttribute' exists
    C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(27,22): error PHP1120: Unknown custom attribute; neither of types 'MyAttribute' and 'MyAttributeAttribute' exists
    
    CLR/NameResolving.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    bool(false)
    bool(true)
    object(Directory)(2)
    {
      ["handle"] => NULL
      ["path"] => NULL
    }
    bool(false)
    
    Error: Class 'Dictionary' not found in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt at expression on line 12, column 4.
    Compiler/abstracts.php: SUCCEEDED
    Compiler/aliased%20assign%20add.php: SUCCEEDED
    Compiler/assignments.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ---1---1float(-1.5)
    float(2.5)
    float(0.83333333333333)
    int(6)
    int(8)
    ---2---2float(8.8333333333333)
    float(8.8333333333333)
    float(8.8333333333333)
    int(8)
    int(8)
    ---3---3---4---4---5---5array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [1]=>
      array(1) {
        [2]=>
        array(1) {
          [3]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    ---6---6array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "u"
    }
    array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "v"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    ---7---7array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    ---8---8
    ---1---1float(-1.5)
    float(2.5)
    float(0.833333333333333)
    int(6)
    int(8)
    ---2---2float(8.83333333333333)
    float(8.83333333333333)
    float(8.83333333333333)
    int(8)
    int(8)
    ---3---3---4---4---5---5array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [1]=>
      array(1) {
        [2]=>
        array(1) {
          [3]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    ---6---6array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "u"
    }
    array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "v"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    ---7---7array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    ---8---8
    Compiler/assign_in_call.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    g1:
    f(x)
    u(x)
    'x'
    
    g2:
    f(x)
    u(x)
    'b'
    
    g3:
    f(x)
    u(x)
    'b'
    
    g4:
    f(x)
    u(x)
    'b'
    
    g5:
    f()
    u()
    integer(1)
    
    g6:
    f(3)
    u(3)
    integer(3)
    
    g7:
    f(2)
    u(10)
    integer(10)
    
    g8:
    f(1)
    f(1)
    f(1)
    u(1)
    u()
    u(1)
    
    g9:
    known:
    __get(p) = 0
    __set(p,1)
    f(1)
    unknown:
    __get(p) = 1
    __set(p,3)
    u(3)
    
    g10:
    Done.
    g1:
    f(x)
    u(x)
    'x'
    
    g2:
    f(x)
    u(x)
    'b'
    
    g3:
    f(x)
    u(x)
    'b'
    
    g4:
    f(x)
    u(x)
    'b'
    
    g5:
    f()
    u()
    integer(1)
    
    g6:
    f(3)
    u(3)
    integer(3)
    
    g7:
    f(2)
    u(10)
    integer(10)
    
    g8:
    f(1)
    f(1)
    f(1)
    u(1)
    u()
    u(1)
    
    g9:
    known:
    __get(p) = 0
    __set(p,1)
    __get(p) = 1
    f(1)
    unknown:
    __get(p) = 1
    __set(p,3)
    __get(p) = 3
    u(3)
    
    g10:
    Done.
    Compiler/auto_globals_001.php: SUCCEEDED
    Compiler/auto_globals_002.php: SUCCEEDED
    Compiler/auto_globals_003.php: SUCCEEDED
    Compiler/break_in_global_code.php: SUCCEEDED
    Compiler/chaining_test.php: SUCCEEDED
    Compiler/chain_ending_by_string_index.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        string(1) "f"
      }
    }
    array(1) {
      [0]=>
      string(4) "xubu"
    }
    object(C)#1 (1) {
      ["f"]=>
      string(4) "kuxu"
    }
    string(5) "helxo"
    string(5) "helxo"
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        string(1) "f"
      }
    }
    array(1) {
      [0]=>
      string(4) "bubu"
    }
    
    Warning: A string item used as a reference in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt at expression on line 19, column 1.
    object(C)(1) {
      ["f"]=>
      string(4) "kuku"
    }
    
    Warning: A string item used as a reference in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt at expression on line 25, column 1.
    string(5) "hello"
    
    Warning: A string item used as a reference in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt at expression on line 31, column 1.
    string(5) "hello"
    Compiler/continue_in_global_code.php: SUCCEEDED
    Compiler/deep_copy.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array(1) {
      [0]=>
      &array(1) {
        [0]=>
        &array(1) {
          [0]=>
          *RECURSION*
        }
      }
    }
    array(1) {
      [0]=>
      &array(1) {
        [0]=>
        &array(1) {
          [0]=>
          *RECURSION*
        }
      }
    }
    array(2) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) {
          [0]=>
          *RECURSION*
          [1]=>
          int(1)
        }
        [1]=>
        int(1)
      }
      [1]=>
      int(1)
    }
    array(1) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) {
          [0]=>
          *RECURSION*
          [1]=>
          int(1)
        }
        [1]=>
        int(1)
      }
    }
    array(1) {
      [0]=>
      &array(1) [recursion]
    }
    array(1) {
      [0]=>
      &array(1) {
        [0]=>
        &array(1) [recursion]
      }
    }
    array(2) {
      [0]=>
      &array(2) [recursion]
      [1]=>
      int(1)
    }
    array(1) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) [recursion]
        [1]=>
        int(1)
      }
    }
    Compiler/deep_copy_refbox.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Strict Standards: Only variables should be passed by reference in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt on line 42
    array
    {
      0 => integer(1)
    }
    
    Strict Standards: Only variables should be passed by reference in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt on line 45
    array
    {
      0 => integer(1)
    }
    
    Strict Standards: Only variables should be passed by reference in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt on line 49
    array
    {
      0 => integer(1)
    }
    
    Strict Standards: Only variables should be passed by reference in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt on line 52
    array
    {
      0 => integer(1)
    }
    array
    {
      0 => integer(1)
      1 => integer(1)
    }
    array
    {
      0 => integer(1)
      1 => integer(1)
    }
    array
    {
      0 => integer(1)
      1 => integer(1)
    }
    array
    {
      0 => integer(1)
      1 => integer(1)
    }
    Compiler/expr_init.php: SUCCEEDED
    Compiler/foreach1.php: SUCCEEDED
    Compiler/foreach_arrays.php: SUCCEEDED
    Compiler/for_loop.php: SUCCEEDED
    Compiler/function_002.php: SUCCEEDED
    Compiler/function_003.php: SUCCEEDED
    Compiler/function_004.php: SUCCEEDED
    Compiler/function_call.php: SUCCEEDED
    Compiler/func_get_args.php: SUCCEEDED
    Compiler/if_statement.php: SUCCEEDED
    Compiler/indirect_001.php: SUCCEEDED
    Compiler/indirect_002.php: SUCCEEDED
    Compiler/indirect_003.php: SUCCEEDED
    Compiler/indirect_004.php: SUCCEEDED
    Compiler/indirect_005.php: SUCCEEDED
    Compiler/indirect_007.php: SUCCEEDED
    Compiler/indirect_global.php: SUCCEEDED
    Compiler/inheritance.php: SUCCEEDED
    Compiler/inheritance2.php: SUCCEEDED
    Compiler/isset_unset_001.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Testing x in global code:  <br>
    1 <br>
     <br>
    Testing x (object) in optimized function:  <br>
    1 <br>
     <br>
    Testing x (PhpReference) in optimized function:  <br>
    1 <br>
     <br>
    
    Notice: Undefined variable: y in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt on line 29
    Testing $$x (created at runtime) in optimized function:  <br>
    1 <br>
    Testing x in global code:  <br>
    1 <br>
     <br>
    Testing x (object) in optimized function:  <br>
    1 <br>
     <br>
    Testing x (PhpReference) in optimized function:  <br>
    1 <br>
     <br>
    Testing $$x (created at runtime) in optimized function:  <br>
    1 <br>
    Compiler/list%20%2326681.php: SUCCEEDED
    Compiler/new_array_item_assignadd.php: SUCCEEDED
    Compiler/null_hints.php: SUCCEEDED
    Compiler/pure_create_function.php: SUCCEEDED
    Compiler/pure_function_exists.php: SUCCEEDED
    Compiler/pure_math_str.php: SUCCEEDED
    Compiler/static_call.php: SUCCEEDED
    Compiler/switch.php: SUCCEEDED
    Compiler/ternary_ex.php: SUCCEEDED
    Compiler/this%20call.php: SUCCEEDED
    Compiler/typehint_check.php: SUCCEEDED
    Compiler/__call.php: SUCCEEDED
    Compiler/Inclusions/include2.php: SUCCEEDED
    Compiler/Inclusions/include3.php: SUCCEEDED
    Compiler/Inclusions/include6.php: SUCCEEDED
    Compiler/Inclusions/include_test.php: SUCCEEDED
    Compiler/Inclusions/script.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t01.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t02.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t03.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t04.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t05.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t08.php: SUCCEEDED
    Compiler/PseudoConst/parent.php: SUCCEEDED
    Compiler/PseudoConst/parent2.php: SUCCEEDED
    Compiler/PseudoConst/self.php: SUCCEEDED
    Compiler/PseudoConst/t01.php: SUCCEEDED
    Compiler/PseudoConst/t02.php: SUCCEEDED
    Compiler/PseudoConst/t03.php: SUCCEEDED
    Compiler/PseudoConst/t04.php: SUCCEEDED
    Compiler/PseudoConst/t05.php: SUCCEEDED
    Compiler/PseudoConst/t06.php: SUCCEEDED
    Compiler/PseudoConst/t07.php: SUCCEEDED
    Compiler/PseudoConst/t08.php: SUCCEEDED
    Compiler/PseudoConst/t09.php: SUCCEEDED
    Compiler/PseudoConst/t10.php: SUCCEEDED
    Compiler/PseudoConst/t11.php: SUCCEEDED
    Compiler/PseudoConst/_class_.php: SUCCEEDED
    Compiler/PseudoConst/_function_.php: SUCCEEDED
    Compiler/References/array_argument.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(2)
        [1]=>
        int(3)
      }
    }
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    Compiler/References/array_local.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(2)
        [1]=>
        int(3)
      }
    }
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    Compiler/References/array_ret_argument.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(2)
        [1]=>
        int(3)
      }
    }
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    Compiler/References/array_ret_argument2.php: SUCCEEDED
    Compiler/References/deepcopy.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <br/><br/>globalobjects: array(2) {
      [0]=>
      int(1)
      [1]=>
      int(7)
    }
    <br/><br/>globalobjects: array(2) {
      [0]=>
      int(1)
      [1]=>
      &int(7)
    }
    Compiler/References/explicitclear.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Construyendo Y
    call foo12Destruyendo Y
    3object(X)#1 (2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      int(54)
    }
    array(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      string(10) "Init Value"
    }
    x: object(X)#1 (2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      int(1004)
    }
    <br/>checkpoint array(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      int(54)
    }
    Construyendo Y
    call foo123object(X)(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      &int(54)
    }
    array(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      &int(54)
    }
    x: object(X)(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      &int(1004)
    }
    <br/>checkpoint array(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      &int(1004)
    }
    Destruyendo Y
    Compiler/References/field_argument.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: int(7)
    <br/><br/>checkpoint array(1) {
      ["objects"]=>
      int(8)
    }
    x: int(7)
    <br/><br/>checkpoint array(1) {
      ["objects"]=>
      &int(7)
    }
    Compiler/References/field_local.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: object(X)#1 (1) {
      ["objects"]=>
      int(25)
    }
    <br/>checkpoint array(1) {
      ["objects"]=>
      int(7)
    }
    x: object(X)(1) {
      ["objects"]=>
      &int(25)
    }
    <br/>checkpoint array(1) {
      ["objects"]=>
      &int(25)
    }
    Compiler/References/ref_arrayitem.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(2)
        [1]=>
        int(3)
      }
    }
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    Compiler/References/ref_reasign.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    object(X)#1 (2) {
      ["objects"]=>
      int(54)
      ["objects2"]=>
      &int(222)
    }
    array(2) {
      ["objects"]=>
      int(7)
      ["objects2"]=>
      &int(222)
    }
    x: object(X)#1 (2) {
      ["objects"]=>
      int(1004)
      ["objects2"]=>
      int(777)
    }
    <br/>checkpoint array(2) {
      ["objects"]=>
      int(54)
      ["objects2"]=>
      int(222)
    }
    object(X)(2) {
      ["objects"]=>
      &int(54)
      ["objects2"]=>
      &int(222)
    }
    array(2) {
      ["objects"]=>
      &int(54)
      ["objects2"]=>
      &int(222)
    }
    x: object(X)(2) {
      ["objects"]=>
      &int(1004)
      ["objects2"]=>
      &int(777)
    }
    <br/>checkpoint array(2) {
      ["objects"]=>
      &int(1004)
      ["objects2"]=>
      &int(777)
    }
    Compiler/Unreachable/t13.php: SUCCEEDED
    Compiler/Unset/calluserfunc.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Warning: call_user_func() expects parameter 1 to be a valid callback, function 'unset' not found or invalid function name in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Compiler\Unset\__input.txt on line 3
    int(10)
    Error: call_user_func(): Call to undefined function: 'unset' in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Compiler\Unset\__input.txt at expression on line 3, column 1.
    Compiler/Unset/issetref2.php: SUCCEEDED
    Compiler/Unset/unsetglobal.php: SUCCEEDED
    Compiler/Unset/unsetglobal2.php: SUCCEEDED
    Compiler/Unset/unsetindirect.php: SUCCEEDED
    Compiler/Unset/unsetproblem.php: SUCCEEDED
    Compiler/Unset/unsetref.php: SUCCEEDED
    Compiler/Unset/unsetref2.php: SUCCEEDED
    Compiler/Unset/unsetref3.php: SUCCEEDED
    Compiler/Unset/__unset.php: SUCCEEDED
    DateTime/strftime.php: SUCCEEDED
    DateTime/strtotime1.php: SUCCEEDED
    DateTime/strtotime2.php: SUCCEEDED
    DateTime/strtotime3.php: SUCCEEDED
    DateTime/strtotime4.php: SUCCEEDED
    DateTime/strtotime5.php: SUCCEEDED
    DateTime/time.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    -189388800:-189475200 - 86400
    1964-01-01T00:00:00+0000
    1963-12-31T00:00:00+0000
    1964-06-06
    1963-06-06
    1964-01-06
    1133305200
    -189388800:-189475200 - 86400
    1964-01-01T00:00:00+0000
    1963-12-31T00:00:00+0000
    1964-06-06
    1963-06-06
    1964-01-06
    DateTime/timezones1.php: SUCCEEDED
    DLR/classContext.php: SUCCEEDED
    DLR/classContext1.php: SUCCEEDED
    DLR/classContext2.php: SUCCEEDED
    DLR/restrictions%20generics.php: SUCCEEDED
    DLR/restrictions.php: SUCCEEDED
    DLR/targets.php: SUCCEEDED
    FileSystem/basename.php: SUCCEEDED
    FileSystem/basename2.php: SUCCEEDED
    FileSystem/chdir.php: SUCCEEDED
    FileSystem/csv.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    --- write ---
    72
    24
    44
    2
    6
    
    --- read ---
    "hello\n
    world";"aaa""bbb""ccc";"blah blah;";none;"tab\ttab";"space space"\n
    hh'ee;"ss\nsadasdasd s"\n
    """""""""""""""""""""";"""";;"""""";"xxx"""\n
    x\n
    "x\y"\n
    --- write ---
    72
    24
    44
    2
    6
    
    --- read ---
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    FileSystem/date.php: SUCCEEDED
    FileSystem/date2.php: SUCCEEDED
    FileSystem/date3.php: SUCCEEDED
    FileSystem/date_unix.php: SUCCEEDED
    FileSystem/dirname.php: SUCCEEDED
    FileSystem/dirname2.php: SUCCEEDED
    FileSystem/disk_free_space.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    70 GB
    Drive C: 70 GB
    Drive D: 
    Warning: disk_free_space(): The device is not ready.
     in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 14
    false
    Drive E: 
    Warning: disk_free_space(): The device is not ready.
     in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 14
    false
    Drive F: 
    Warning: disk_free_space(): The system cannot find the path specified.
     in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 14
    false
    70 GB
    Drive C: 70 GB
    Drive D: false
    Drive E: false
    Drive F: false
    FileSystem/disk_total_space.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    127928365056
    127928365056
    
    Warning: disk_total_space(): The device is not ready.
     in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 8
    127928365056
    127928365056
    FileSystem/fgets.php: SUCCEEDED
    FileSystem/file.php: SUCCEEDED
    FileSystem/filesize.php: SUCCEEDED
    FileSystem/file_exists.php: SUCCEEDED
    FileSystem/file_get_contents.php: SUCCEEDED
    FileSystem/fpassthru.php: SUCCEEDED
    FileSystem/fread.php: SUCCEEDED
    FileSystem/fread1.php: SUCCEEDED
    FileSystem/fread2.php: SUCCEEDED
    FileSystem/fseek.php: SUCCEEDED
    FileSystem/fsockopen.php: SUCCEEDED
    FileSystem/ftell.php: SUCCEEDED
    FileSystem/glob_up_dirs.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string(7) "../@PHP"
    string(9) "../Arrays"
    string(7) "../Bugs"
    string(6) "../CLR"
    string(11) "../Compiler"
    string(6) "../DLR"
    string(11) "../DateTime"
    string(13) "../FileSystem"
    string(7) "../Math"
    string(7) "../Misc"
    string(10) "../Objects"
    string(10) "../PHP.NET"
    string(8) "../RegEx"
    string(6) "../SPL"
    string(10) "../Strings"
    string(12) "../Variables"
    string(6) "../Xml"
    string(7) "../@PHP"
    string(9) "../Arrays"
    string(7) "../Bugs"
    string(6) "../CLR"
    string(11) "../Compiler"
    string(11) "../DateTime"
    string(6) "../DLR"
    string(13) "../FileSystem"
    string(7) "../Math"
    string(7) "../Misc"
    string(10) "../Objects"
    string(10) "../PHP.NET"
    string(8) "../RegEx"
    string(6) "../SPL"
    string(10) "../Strings"
    string(12) "../Variables"
    string(6) "../Xml"
    FileSystem/is_dir.php: SUCCEEDED
    FileSystem/is_executable.php: SUCCEEDED
    FileSystem/pathinfo.php: SUCCEEDED
    FileSystem/popen.php: SUCCEEDED
    FileSystem/readdir.php: SUCCEEDED
    FileSystem/readfile.php: SUCCEEDED
    FileSystem/readline.php: SUCCEEDED
    FileSystem/realpath.php: SUCCEEDED
    FileSystem/scandir.php: SUCCEEDED
    FileSystem/stat.php: SUCCEEDED
    FileSystem/stream_context_set_option.php: SUCCEEDED
    FileSystem/stream_copy_to_stream.php: SUCCEEDED
    FileSystem/stream_copy_to_stream2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <p>Read <b>rb</b>, Write <b>wb</b>
    
    
    COPIED: <b>30057</b>
    <p>Read <b>rb</b>, Write <b>wt</b>
    
    
    COPIED: <b>30085</b>
    <p>Read <b>rb</b>, Write <b>wb</b>
    
    
    COPIED: <b>30103</b>
    <p>Read <b>rb</b>, Write <b>wt</b>
    
    
    COPIED: <b>30093</b>
    FileSystem/testinc.php: SUCCEEDED
    FileSystem/touch.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Warning: touch(): Utime failed: Bad file descriptor in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 8
    Sorry Could Not change modification time of touch.txt
    Warning: touch(): Utime failed: Bad file descriptor in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 14
    
    Warning: touch(): Utime failed: Bad file descriptor in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 16
    
    Warning: touch(): Utime failed: Bad file descriptor in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 17
    <pre>[ARRAY
      [INT (0)] => [STRING: "April 21, 2011; [14:43:17] (14h) ctime test.txt (1303389797)"]
      [INT (1)] => [STRING: "April 21, 2011; [14:43:17] (14h) mtime test.txt (1303389797)"]
      [INT (2)] => [STRING: "April 21, 2011; [14:43:17] (14h) ctime touch.txt (1303389797)"]
      [INT (3)] => [STRING: "April 21, 2011; [14:43:17] (14h) mtime touch.txt (1303389797)"]
      [INT (4)] => [STRING: "April 21, 2011; [14:43:17] (14h) atime touch.txt (1303389797)"]
      [INT (5)] => [STRING: "April 21, 2011; [14:43:17] (14h) mtime summer.txt (1303389797)"]
      [INT (6)] => [STRING: "April 21, 2011; [14:43:17] (14h) mtime winter.txt (1303389797)"]
    ]</pre>
    Warning: touch(): Unable to access (C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\FileSystem\touch.txt): Permission denied in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 8, column 5.
    Sorry Could Not change modification time of touch.txt
    Warning: touch(): Unable to access (C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\FileSystem\touch.txt): Permission denied in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 14, column 1.
    
    Warning: touch(): Unable to access (C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\FileSystem\winter.txt): Permission denied in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 16, column 1.
    
    Warning: touch(): Unable to access (C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\FileSystem\summer.txt): Permission denied in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 17, column 1.
    <pre>[ARRAY
      [INT (0)] => [STRING: "April 21, 2011; [14:43:17] (14h) ctime test.txt (1303389797)"]
      [INT (1)] => [STRING: "April 21, 2011; [14:43:17] (14h) mtime test.txt (1303389797)"]
      [INT (2)] => [STRING: "April 21, 2011; [14:43:17] (14h) ctime touch.txt (1303389797)"]
      [INT (3)] => [STRING: "April 21, 2011; [14:43:17] (14h) mtime touch.txt (1303389797)"]
      [INT (4)] => [STRING: "April 21, 2011; [14:43:17] (14h) atime touch.txt (1303389797)"]
      [INT (5)] => [STRING: "April 21, 2011; [14:43:17] (14h) mtime summer.txt (1303389797)"]
      [INT (6)] => [STRING: "April 21, 2011; [14:43:17] (14h) mtime winter.txt (1303389797)"]
    ]</pre>
    FileSystem/tar/tar_test.php: SUCCEEDED
    FileSystem/zip/zip.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    correct
    Error: Call to undefined function: 'zip_open' in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\FileSystem\zip\__input.txt at expression on line 3, column 1.
    Math/abs.php: SUCCEEDED
    Math/atan2.php: SUCCEEDED
    Math/base_convert.php: SUCCEEDED
    Math/bindec.php: SUCCEEDED
    Math/ceil.php: SUCCEEDED
    Math/cos.php: SUCCEEDED
    Math/decbin.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <pre>
    [double: 2294967295]
    10001000110010100110101111111111
    [double: 4294967296]
    0
    [double: 8589934590]
    11111111111111111111111111111110
    [double: 8589934590]
    11111111111111111111111111111110
    [double: 8589934591]
    11111111111111111111111111111111
    [Int: 1000.000.000.000]
    11010100101001010001000000000000
    <hr>(-1, -5435, 2.14, 0, 26)
    11111111111111111111111111111111
    11111111111111111110101011000101
    10
    0
    11010 
    </pre>
    <pre>
    [???: 2294967295]
    10001000110010100110101111111111
    [???: 4294967296]
    0
    [???: 8589934590]
    11111111111111111111111111111110
    [???: 8589934590]
    11111111111111111111111111111110
    [???: 8589934591]
    11111111111111111111111111111111
    [Int: 1000.000.000.000]
    11010100101001010001000000000000
    <hr>(-1, -5435, 2.14, 0, 26)
    11111111111111111111111111111111
    11111111111111111110101011000101
    10
    0
    11010 
    </pre>
    Math/dechex.php: SUCCEEDED
    Math/decoct.php: SUCCEEDED
    Math/deg2rad.php: SUCCEEDED
    Math/exp.php: SUCCEEDED
    Math/floor.php: SUCCEEDED
    Math/fmod.php: SUCCEEDED
    Math/hexdec.php: SUCCEEDED
    Math/max.php: SUCCEEDED
    Math/min.php: SUCCEEDED
    Math/modulo_warn.php: SUCCEEDED
    Math/octdec.php: SUCCEEDED
    Math/pow.php: SUCCEEDED
    Math/rad2deg.php: SUCCEEDED
    Math/round.php: SUCCEEDED
    Math/sin.php: SUCCEEDED
    Math/sqrt.php: SUCCEEDED
    Math/tan.php: SUCCEEDED
    Math/uniqid.php: SUCCEEDED
    Misc/calendar_extension.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0
    0
    2375840
    0
    14
    32
    2
    There are 31 days in August 2003
    There are 28 days in February 2003
    There are 29 days in February 2004
    There are 31 days in December 2034
    1748326
    1748324
    374867
    0
    322f32322f35373633
    ebe120e7f9e5ef20e4faf9f1e2
    ebe120e7f9e5ef20e427faf9f1e2
    ebe120e7f9e5ef20e420e0ecf4e9ed20faf9f1e2
    ebe120e7f9e5ef20e42720e0ecf4e9ed20faf9f1e2
    eb22e120e7f9e5ef20e4faf9f122e2
    e12720e7f9e5ef20e4faf9f122e2
    e12720e7f9e5ef20e427faf9f122e2
    e12720e7f9e5ef20e420e0ecf4e9ed20faf9f122e2
    e12720e7f9e5ef20e42720e0ecf4e9ed20faf9f122e2
    Error: Call to undefined function: 'frenchtojd' in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt at expression on line 2, column 1.
    Misc/dir_read.php: SUCCEEDED
    Misc/fgetcsv%20%2327492.php: SUCCEEDED
    Misc/hash%20functions%20%2326667.php: SUCCEEDED
    Misc/ini_parse.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    first => outofsection
    crash => 
    bugs => 
    all => CLR
    ano => 1
    thread_count => 12
    error_reporting => 30718
    precedence1 => 5
    precedence2 => 1
    precedence3 => 5
    precedence4 => 1
    precedence5 => 1
    precedence6 => 5
    quoted1 => a | b & c
    quoted2 => hello
    world
    quoted3 => to be
    or not
    to be
    system => 1
    user => 123
    bad => NO_SUCH_CONSTANT
    neg => -1
    first => outofsection
    section => 
    indented section => 
     section with whitespaces  => 
    s1 => 
      crash => 
      bugs => 
      all => CLR
      ano => 1
      thread_count => 12
      error_reporting => 30718
      precedence1 => 5
      precedence2 => 1
      precedence3 => 5
      precedence4 => 1
      precedence5 => 1
      precedence6 => 5
    s2 => 
      quoted1 => a | b & c
      quoted2 => hello
    world
      quoted3 => to be
    or not
    to be
    s3 => 
      system => 1
      user => 123
      bad => NO_SUCH_CONSTANT
    s4 => 
      neg => -1
    x => 1
    y => 2
    ano => 1
    ne => 
    multiline => 
    		line1
    		line2
    		line3
    first => 
    crash => 
    bugs => 
    all => 
    ano => 1
    thread_count => 12
    error_reporting => 30718
    precedence1 => 5
    precedence2 => 1
    precedence3 => 5
    precedence4 => 1
    precedence5 => 1
    precedence6 => 5
    quoted1 => a | b & c
    quoted2 => hello
    world
    quoted3 => to be
    or not
    to be
    system => 1
    user => 123
    bad => 
    neg => -1
    first => 
    section => 
    indented section => 
     section with whitespaces  => 
    s1 => 
      crash => 
      bugs => 
      all => 
      ano => 1
      thread_count => 12
      error_reporting => 30718
      precedence1 => 5
      precedence2 => 1
      precedence3 => 5
      precedence4 => 1
      precedence5 => 1
      precedence6 => 5
    s2 => 
      quoted1 => a | b & c
      quoted2 => hello
    world
      quoted3 => to be
    or not
    to be
    s3 => 
      system => 1
      user => 123
      bad => 
    s4 => 
      neg => -1
    x => 1
    y => 2
    ano => 1
    ne => 
    multiline => 
    		line1
    		line2
    		line3
    Misc/json%20%2327838.php: SUCCEEDED
    Misc/lexer.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    T_INLINE_HTML
    311 '\r\n'
    T_OPEN_TAG
    368 '&lt;?'
    T_WHITESPACE
    371 ' \r\n\r\n'
    T_FINAL
    345 'final'
    T_WHITESPACE
    371 ' '
    T_CLASS
    353 'class'
    T_WHITESPACE
    371 ' '
    T_STRING
    307 'A'
    T_WHITESPACE
    371 ' \r\n'
        '{'
    T_WHITESPACE
    371 ' \r\n  '
    T_FUNCTION
    334 'function'
    T_WHITESPACE
    371 ' '
    T_STRING
    307 '__get'
        '('
    T_VARIABLE
    309 '$x'
        ')'
    T_WHITESPACE
    371 ' \r\n  '
        '{'
    T_WHITESPACE
    371 ' \r\n    '
    T_VARIABLE
    309 '$x'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_START_HEREDOC
    372 '&lt;&lt;&lt;EOOOOOOOOOOOOOOT\r\n'
    T_ENCAPSED_AND_WHITESPACE
    314 '         &lt;&lt;&lt;hello\r\nEOOOOOOOOOOOOOOt;\r\nEOOOOOOOOOOOOOT;\r\n'
    T_END_HEREDOC
    373 'EOOOOOOOOOOOOOOT'
        ';'
    T_WHITESPACE
    371 '\r\n\r\n    '
        '$'
    T_VARIABLE
    309 '$y'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_ARRAY
    360 'array'
    T_WHITESPACE
    371 ' '
        '('
    T_LNUMBER
    305 '1'
        ','
    T_DNUMBER
    306 '100000000000000'
        ','
    T_DNUMBER
    306 '999999999999999999999999999999999'
        ','
    T_STRING
    307 'true'
        ','
    T_STRING
    307 'false'
        ')'
        ';'
    T_WHITESPACE
    371 '\r\n    '
        '$'
        '{'
        '&quot;'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
    T_DOLLAR_OPEN_CURLY_BRACES
    374 '${'
        '$'
        '{'
    T_CONSTANT_ENCAPSED_STRING
    315 '&quot;xxx&quot;'
        '}'
        '}'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
        '&quot;'
        '}'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_LNUMBER
    305 '1'
        ';'
    T_WHITESPACE
    371 '\r\n    '
        '$'
        '{'
        '&quot;'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
    T_DOLLAR_OPEN_CURLY_BRACES
    374 '${'
        '$'
        '{'
        '&quot;'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
    T_VARIABLE
    309 '$x'
    T_ENCAPSED_AND_WHITESPACE
    314 '-&gt;$$'
    T_VARIABLE
    309 '$x0xx'
        '&quot;'
        '}'
        '}'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
        '&quot;'
        '}'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_LNUMBER
    305 '1'
        ';'
    T_WHITESPACE
    371 '\r\n  '
        '}'
    T_WHITESPACE
    371 ' \r\n'
        '}'
    T_WHITESPACE
    371 '\r\n\r\n'
    T_CLOSE_TAG
    370 '?&gt;'
    '
    '
        '&lt;?'
        ' 
    
    '
        'final'
        ' '
        'class'
        ' '
        'A'
        ' 
    '
        '{'
        ' 
      '
        'function'
        ' '
    259
    259 '
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt at expression on line 10, column 7.
    '
        '('
        '$x'
        ')'
        ' 
      '
        '{'
        ' 
        '
        '$x'
        ' '
        '='
        ' '
        '&lt;&lt;&lt;EOOOOOOOOOOOOOOT
    '
        '         &lt;&lt;&lt;'
        'hello'
        '
    '
        'EOOOOOOOOOOOOOOt;
    '
        'EOOOOOOOOOOOOOT;
    '
        'EOOOOOOOOOOOOOOT'
        ';'
        '
    
        '
        '$'
        '$y'
        ' '
        '='
        ' '
        'array'
        ' '
        '('
        '1'
        ','
        '100000000000000'
        ','
        '999999999999999999999999999999999'
        ','
    256
    256 '
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt at expression on line 10, column 7.
    '
        ','
    257
    257 '
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt at expression on line 10, column 7.
    '
        ')'
        ';'
        '
        '
        '$'
        '{'
        '&quot;'
        'x'
        '${'
        '$'
        '{'
    -29
    -29 '
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt at expression on line 10, column 7.
    '
        '}'
        '}'
        'x'
        '&quot;'
        '}'
        ' '
        '='
        ' '
        '1'
        ';'
        '
        '
        '$'
        '{'
        '&quot;'
        'x'
        '${'
        '$'
        '{'
        '&quot;'
        'x'
        '$x'
        '-&gt;'
        '$'
        '$'
        '$x0xx'
        '&quot;'
        '}'
        '}'
        'x'
        '&quot;'
        '}'
        ' '
        '='
        ' '
        '1'
        ';'
        '
      '
        '}'
        ' 
    '
        '}'
        '
    
    '
        '?&gt;'
    Misc/locale.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string(1) "C"
    double(1.54)
    double(Infinity)
    654564.145400
    Sat Saturday Apr April
    --------------
    string(19) "Danish_Denmark.1252"
    double(1.54)
    double(Infinity)
    654564,145400
    lo lordag apr april
    --------------
    string(25) "Czech_Czech Republic.1250"
    double(1.54)
    double(Infinity)
    654564,145400
    so sobota IV duben
    --------------
    string(1) "C"
    float(1.54)
    float(Infinity)
    654564.145400
    Sat Saturday Apr April
    --------------
    string(19) "Danish_Denmark.1252"
    float(1.54)
    float(Infinity)
    654564,145400
    lo lordag apr april
    --------------
    string(25) "Czech_Czech Republic.1250"
    float(1.54)
    float(Infinity)
    654564,145400
    so sobota 4 duben
    --------------
    Misc/output2.php: SUCCEEDED
    Misc/parse_url%20%2327377.php: SUCCEEDED
    Misc/parse_url_at_bug.php: SUCCEEDED
    Misc/stack_trace.php: FAILED
    Script hung upNo errorsSuccess
    Expected test outputReal script output
    Unhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---> System.IndexOutOfRangeException: Index was outside the bounds of the array.
       at PHP.Core.PhpStackFrame..ctor(ScriptContext context, StackFrame frame, FrameKinds kind)
       at PHP.Core.PhpStackTrace..ctor(ScriptContext context, StackTrace clrTrace)
       at PHP.Core.PhpStackTrace..ctor(ScriptContext context, Int32 skipFrames)
       at PHP.Library.Errors.Backtrace()
       at <stack_trace.inc>.<Script>.j(ScriptContext <context>) in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Misc\stack_trace.inc:line 11
       at <stack_trace.inc>.<Script>.j(Object instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <stack_trace.inc>.<Script>.i(ScriptContext <context>) in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Misc\stack_trace.inc:line 6
       at <stack_trace.inc>.<Script>.i(Object instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <^0>.<Global>.<?0>.h(ScriptContext <context>) in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt:line 14
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack, DTypeDesc caller)
       at PHP.Core.PhpCallback.InvokeInternal(Object[] args)
       at PHP.Core.PhpCallback.Invoke(Object[] args)
       at PHP.Library.PhpArrays.Map(DTypeDesc caller, PhpCallback map, PhpArray[] arrays)
       at <__input.txt>.<Script>.<Lambda>(ScriptContext <context>) in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt:line 4
       at <__input.txt>.<Script>.<Lambda>(Object instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <__input.txt>.<Script>.f(ScriptContext <context>) in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt:line 6
       at <__input.txt>.<Script>.f(Object instance, PhpStack stack)
       at <__input.txt>.<Script>.<Main>(ScriptContext <context>, Dictionary`2 <locals>, DObject <self>, DTypeDesc <includer>, Boolean <request>) in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt:line 18
       at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)
       at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)
       --- End of inner exception stack trace ---
       at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)
       at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)
       at <Global>.Run(String[] )
    
    Misc/str_getcsv%20%2326691.php: SUCCEEDED
    Misc/tokens.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    T_REQUIRE_ONCE = 258,
    T_REQUIRE = 259,
    T_EVAL = 260,
    T_INCLUDE_ONCE = 261,
    T_INCLUDE = 262,
    T_LOGICAL_OR = 263,
    T_LOGICAL_XOR = 264,
    T_LOGICAL_AND = 265,
    T_PRINT = 266,
    T_SR_EQUAL = 267,
    T_SL_EQUAL = 268,
    T_XOR_EQUAL = 269,
    T_OR_EQUAL = 270,
    T_AND_EQUAL = 271,
    T_MOD_EQUAL = 272,
    T_CONCAT_EQUAL = 273,
    T_DIV_EQUAL = 274,
    T_MUL_EQUAL = 275,
    T_MINUS_EQUAL = 276,
    T_PLUS_EQUAL = 277,
    T_BOOLEAN_OR = 278,
    T_BOOLEAN_AND = 279,
    T_IS_NOT_IDENTICAL = 280,
    T_IS_IDENTICAL = 281,
    T_IS_NOT_EQUAL = 282,
    T_IS_EQUAL = 283,
    T_IS_GREATER_OR_EQUAL = 284,
    T_IS_SMALLER_OR_EQUAL = 285,
    T_SR = 286,
    T_SL = 287,
    T_INSTANCEOF = 288,
    T_UNSET_CAST = 289,
    T_BOOL_CAST = 290,
    T_OBJECT_CAST = 291,
    T_ARRAY_CAST = 292,
    T_STRING_CAST = 293,
    T_DOUBLE_CAST = 294,
    T_INT_CAST = 295,
    T_DEC = 296,
    T_INC = 297,
    T_CLONE = 298,
    T_NEW = 299,
    T_EXIT = 300,
    T_IF = 301,
    T_ELSEIF = 302,
    T_ELSE = 303,
    T_ENDIF = 304,
    T_LNUMBER = 305,
    T_DNUMBER = 306,
    T_STRING = 307,
    T_STRING_VARNAME = 308,
    T_VARIABLE = 309,
    T_NUM_STRING = 310,
    T_INLINE_HTML = 311,
    T_CHARACTER = 312,
    T_BAD_CHARACTER = 313,
    T_ENCAPSED_AND_WHITESPACE = 314,
    T_CONSTANT_ENCAPSED_STRING = 315,
    T_ECHO = 316,
    T_DO = 317,
    T_WHILE = 318,
    T_ENDWHILE = 319,
    T_FOR = 320,
    T_ENDFOR = 321,
    T_FOREACH = 322,
    T_ENDFOREACH = 323,
    T_DECLARE = 324,
    T_ENDDECLARE = 325,
    T_AS = 326,
    T_SWITCH = 327,
    T_ENDSWITCH = 328,
    T_CASE = 329,
    T_DEFAULT = 330,
    T_BREAK = 331,
    T_CONTINUE = 332,
    T_GOTO = 333,
    T_FUNCTION = 334,
    T_CONST = 335,
    T_RETURN = 336,
    T_TRY = 337,
    T_CATCH = 338,
    T_THROW = 339,
    T_USE = 340,
    T_GLOBAL = 341,
    T_PUBLIC = 342,
    T_PROTECTED = 343,
    T_PRIVATE = 344,
    T_FINAL = 345,
    T_ABSTRACT = 346,
    T_STATIC = 347,
    T_VAR = 348,
    T_UNSET = 349,
    T_ISSET = 350,
    T_EMPTY = 351,
    T_HALT_COMPILER = 352,
    T_CLASS = 353,
    T_INTERFACE = 354,
    T_EXTENDS = 355,
    T_IMPLEMENTS = 356,
    T_OBJECT_OPERATOR = 357,
    T_DOUBLE_ARROW = 358,
    T_LIST = 359,
    T_ARRAY = 360,
    T_CLASS_C = 361,
    T_METHOD_C = 362,
    T_FUNC_C = 363,
    T_LINE = 364,
    T_FILE = 365,
    T_COMMENT = 366,
    T_DOC_COMMENT = 367,
    T_OPEN_TAG = 368,
    T_OPEN_TAG_WITH_ECHO = 369,
    T_CLOSE_TAG = 370,
    T_WHITESPACE = 371,
    T_START_HEREDOC = 372,
    T_END_HEREDOC = 373,
    T_DOLLAR_OPEN_CURLY_BRACES = 374,
    T_CURLY_OPEN = 375,
    T_PAAMAYIM_NEKUDOTAYIM = 376,
    T_DOUBLE_COLON = 376,
    T_NAMESPACE = 377,
    T_NS_C = 378,
    T_DIR = 379,
    T_NS_SEPARATOR = 380,
    T_INCLUDE = 129,
    T_INCLUDE_ONCE = 130,
    T_EVAL = 131,
    T_REQUIRE = 132,
    T_REQUIRE_ONCE = 133,
    T_LOGICAL_OR = 136,
    T_LOGICAL_XOR = 137,
    T_LOGICAL_AND = 138,
    T_PRINT = 139,
    T_PLUS_EQUAL = 140,
    T_MINUS_EQUAL = 141,
    T_MUL_EQUAL = 142,
    T_DIV_EQUAL = 143,
    T_CONCAT_EQUAL = 144,
    T_MOD_EQUAL = 145,
    T_AND_EQUAL = 146,
    T_OR_EQUAL = 147,
    T_XOR_EQUAL = 148,
    T_SL_EQUAL = 149,
    T_SR_EQUAL = 150,
    T_BOOLEAN_OR = 151,
    T_BOOLEAN_AND = 152,
    T_IS_EQUAL = 153,
    T_IS_NOT_EQUAL = 154,
    T_IS_IDENTICAL = 155,
    T_IS_NOT_IDENTICAL = 156,
    T_IS_SMALLER_OR_EQUAL = 157,
    T_IS_GREATER_OR_EQUAL = 158,
    T_SL = 159,
    T_SR = 160,
    T_INC = 161,
    T_DEC = 162,
    T_NEW = 164,
    T_INSTANCEOF = 165,
    T_CLONE = 167,
    T_LNUMBER = 168,
    T_DNUMBER = 170,
    T_STRING = 171,
    T_STRING_VARNAME = 172,
    T_VARIABLE = 173,
    T_NUM_STRING = 174,
    T_INLINE_HTML = 175,
    T_CHARACTER = 176,
    T_BAD_CHARACTER = 177,
    T_ENCAPSED_AND_WHITESPACE = 178,
    T_CONSTANT_ENCAPSED_STRING = 179,
    T_EXIT = 180,
    T_IF = 181,
    T_ELSEIF = 182,
    T_ELSE = 183,
    T_ENDIF = 184,
    T_ECHO = 185,
    T_DO = 186,
    T_WHILE = 187,
    T_ENDWHILE = 188,
    T_FOR = 189,
    T_ENDFOR = 190,
    T_FOREACH = 191,
    T_ENDFOREACH = 192,
    T_AS = 193,
    T_SWITCH = 194,
    T_ENDSWITCH = 195,
    T_CASE = 196,
    T_DEFAULT = 197,
    T_BREAK = 198,
    T_CONTINUE = 199,
    T_FUNCTION = 200,
    T_CONST = 201,
    T_RETURN = 202,
    T_GLOBAL = 203,
    T_STATIC = 204,
    T_VAR = 205,
    T_UNSET = 206,
    T_ISSET = 207,
    T_EMPTY = 208,
    T_CLASS = 209,
    T_EXTENDS = 210,
    T_OBJECT_OPERATOR = 211,
    T_DOUBLE_ARROW = 212,
    T_LIST = 213,
    T_ARRAY = 214,
    T_CLASS_C = 215,
    T_METHOD_C = 216,
    T_FUNC_C = 217,
    T_LINE = 218,
    T_FILE = 219,
    T_DIR = 220,
    T_COMMENT = 221,
    T_DOC_COMMENT = 222,
    T_OPEN_TAG = 227,
    T_OPEN_TAG_WITH_ECHO = 228,
    T_CLOSE_TAG = 229,
    T_WHITESPACE = 230,
    T_START_HEREDOC = 231,
    T_END_HEREDOC = 232,
    T_DOLLAR_OPEN_CURLY_BRACES = 233,
    T_CURLY_OPEN = 234,
    T_DOUBLE_COLON = 235,
    T_PAAMAYIM_NEKUDOTAYIM = 235,
    T_GOTO = 237,
    T_TRY = 238,
    T_CATCH = 239,
    T_THROW = 240,
    T_INTERFACE = 241,
    T_IMPLEMENTS = 242,
    T_ABSTRACT = 243,
    T_FINAL = 244,
    T_PRIVATE = 245,
    T_PROTECTED = 246,
    T_PUBLIC = 247,
    T_BOOL_CAST = 287,
    T_INT_CAST = 290,
    T_DOUBLE_CAST = 296,
    T_STRING_CAST = 299,
    T_ARRAY_CAST = 302,
    T_OBJECT_CAST = 303,
    T_UNSET_CAST = 304,
    T_HALT_COMPILER = 351,
    Misc/user_error_handlers.php: SUCCEEDED
    Objects/accessing%20property%20line%20number%20%2326052.php: SUCCEEDED
    Objects/conditional1.php: SUCCEEDED
    Objects/conditional2.php: SUCCEEDED
    Objects/conditional_base_class.php: SUCCEEDED
    Objects/constant_test.php: SUCCEEDED
    Objects/evaled_parent.php: SUCCEEDED
    Objects/getter_setter_bug28444.php: SUCCEEDED
    Objects/instanceof.php: SUCCEEDED
    Objects/new_via_unknown_ctor.php: SUCCEEDED
    Objects/object_creation_test.php: SUCCEEDED
    Objects/overrides%20%231285.php: SUCCEEDED
    Objects/static_field_test.php: SUCCEEDED
    Objects/static_inheritence.php: SUCCEEDED
    Objects/static_method_test.php: SUCCEEDED
    Objects/static_object_vars.php: SUCCEEDED
    Objects/sys_class_const.php: SUCCEEDED
    Objects/this2.php: SUCCEEDED
    RegEx/backreferences.php: SUCCEEDED
    RegEx/dolar_escape.php: SUCCEEDED
    RegEx/ereg.php: SUCCEEDED
    RegEx/escaped_unicode.php: SUCCEEDED
    RegEx/namedbackref.php: SUCCEEDED
    RegEx/namedgroups.php: SUCCEEDED
    RegEx/preg_match_unmatched_groups.php: SUCCEEDED
    RegEx/preg_replace_eval.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ab"01300 as"00da sd"0asdsa das asd 11asd a1sd a
    ab"01300 as"00da sd"0(aasdasdkjask,$a,\,\l,a,s,d,a,s,d,k,j,a,s,${120})(ldjaklsdjalk,$l,\,\l,d,j,a,k,l,s,d,j,a,l,${120})djdsa das asd 11asd a1sd a
    ab"01300 as"00da sd"0asdsa das asd 11asd a1sd a
    ab"01300 as"00da sd"0(aasdasdkjask,$a,\,\l,a,s,d,a,s,d,k,j,,,${120})(ldjaklsdjalk,$l,\,\l,d,j,a,k,l,s,d,j,,,${120})djdsa das asd 11asd a1sd a
    RegEx/regexp-sql.php: SUCCEEDED
    RegEx/regexp_smiles.php: SUCCEEDED
    RegEx/Perl/cache.php: SUCCEEDED
    RegEx/Perl/grep1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      [3] => string(3) "1.5"
      [6] => string(5) "58.54"
    }
    Notice: preg_grep(): Array to string conversion in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\RegEx\Perl\__input.txt at expression on line 5, column 1.
    array(2) {
      [3]=>
      string(3) "1.5"
      [6]=>
      string(5) "58.54"
    }
    RegEx/Perl/grep2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Food  array
    (
      [0] => apple
      [1] => banana
      [2] => squid
      [3] => pear
    )
    Fruit array
    (
      [0] => apple
      [1] => banana
      [3] => pear
    )
    Food  Array
    (
        [0] => apple
        [1] => banana
        [2] => squid
        [3] => pear
    )
    Fruit Array
    (
        [0] => apple
        [1] => banana
        [3] => pear
    )
    RegEx/Perl/match1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array [empty]
    array
    (
      [0] => array
      (
        [0] => def
        [1] => 3
      )
    )
    Array
    (
    )
    Array
    (
        [0] => Array
        (
            [0] => def
            [1] => 3
        )
    
    )
    RegEx/Perl/match10.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    (
      [0] => 1231
      [1] => 1
      [2] => 23
      [3] => 1
    )
    Array
    (
        [0] => 1231
        [1] => 1
        [2] => 23
        [3] => 1
    )
    RegEx/Perl/match2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    (
      [0] => array
      (
        [0] => def
        [1] => 0
      )
    )
    Array
    (
        [0] => Array
        (
            [0] => def
            [1] => 0
        )
    
    )
    RegEx/Perl/match3.php: SUCCEEDED
    RegEx/Perl/match4.php: SUCCEEDED
    RegEx/Perl/match5.php: SUCCEEDED
    RegEx/Perl/match6.php: SUCCEEDED
    RegEx/Perl/match7.php: SUCCEEDED
    RegEx/Perl/match8.php: SUCCEEDED
    RegEx/Perl/match9.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    (
      [0] => 209.6.145.47 - - [22/Nov/2003:19:02:30 -0500] "GET /dir/doc.htm HTTP/1.0" 200 6776 "http://search.yahoo.com/search?p=key+words=UTF-8" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)"
      [1] => 209.6.145.47
      [2] => -
      [3] => -
      [4] => 22/Nov/2003:19:02:30 -0500
      [5] => GET
      [6] => /dir/doc.htm
      [7] => HTTP
      [8] => 1.0
      [9] => 200
      [10] => 6776
      [11] => "http://search.yahoo.com/search?p=key+words=UTF-8"
      [12] => "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)"
    )
    Array
    (
        [0] => 209.6.145.47 - - [22/Nov/2003:19:02:30 -0500] "GET /dir/doc.htm HTTP/1.0" 200 6776 "http://search.yahoo.com/search?p=key+words=UTF-8" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)"
        [1] => 209.6.145.47
        [2] => -
        [3] => -
        [4] => 22/Nov/2003:19:02:30 -0500
        [5] => GET
        [6] => /dir/doc.htm
        [7] => HTTP
        [8] => 1.0
        [9] => 200
        [10] => 6776
        [11] => "http://search.yahoo.com/search?p=key+words=UTF-8"
        [12] => "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)"
    )
    RegEx/Perl/match_all1.php: SUCCEEDED
    RegEx/Perl/match_all2.php: SUCCEEDED
    RegEx/Perl/match_all3.php: SUCCEEDED
    RegEx/Perl/match_all4.php: SUCCEEDED
    RegEx/Perl/match_dollar.php: SUCCEEDED
    RegEx/Perl/overflow.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string("kfkaj +j k45´┐Ż´┐Ż´┐Ż´┐Ż´┐Ż3#$%^&kjakfjkaj|kfj")
    string("kfkaj +j k45�����3#$%^&kjakfjkaj|kfj")
    RegEx/Perl/quote1.php: SUCCEEDED
    RegEx/Perl/quote2.php: SUCCEEDED
    RegEx/Perl/quote3.php: SUCCEEDED
    RegEx/Perl/replace1.php: SUCCEEDED
    RegEx/Perl/replace2.php: SUCCEEDED
    RegEx/Perl/replace3.php: SUCCEEDED
    RegEx/Perl/replace4.php: SUCCEEDED
    RegEx/Perl/replace5.php: SUCCEEDED
    RegEx/Perl/replace6.php: SUCCEEDED
    RegEx/Perl/replace7.php: SUCCEEDED
    RegEx/Perl/replace8.php: SUCCEEDED
    RegEx/Perl/replace9.php: SUCCEEDED
    RegEx/Perl/replace_callback1.php: SUCCEEDED
    RegEx/Perl/replace_callback2.php: SUCCEEDED
    RegEx/Perl/split1.php: SUCCEEDED
    RegEx/Perl/split2.php: SUCCEEDED
    RegEx/Perl/split3.php: SUCCEEDED
    RegEx/Perl/split4.php: SUCCEEDED
    RegEx/Perl/split5.php: SUCCEEDED
    RegEx/Perl/split6.php: SUCCEEDED
    RegEx/Perl/ungreedy.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    aaa
    a
    aaa
    
    a
    aa
    aaa
    aa
    aaa
    aaa
    a
    aaa
    a
    a
    aa
    aaa
    aa
    aaa
    RegEx/Perl/unsuccessful-preg_match_all.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0
    4
    1
    4
    0
    4
    1
    7
    RegEx/Perl/withoutdelimiters.php: SUCCEEDED
    SPL/ArrayAccess_offsetExists.php: SUCCEEDED
    SPL/Autoload_ctor.php: SUCCEEDED
    SPL/Autoload_extends.php: SUCCEEDED
    SPL/exceptions.php: SUCCEEDED
    Strings/addcslashes.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    \f\o\o\[ \]
    Issues a Warning:
    // echo addcslashes("zoo['.']", 'z..A');
    // output:  \zoo['\.']
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 4, column 1.
    
    Issues a Warning:
    // echo addcslashes("zoo['.']", 'z..A');
    // output:  \zoo['\.']
    Strings/addslashes.php: SUCCEEDED
    Strings/chunk_split.php: SUCCEEDED
    Strings/concat.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string(2) "ab"
    string(2) "ab"
    string(2) "ab"
    string(2) "ab"
    string(2) "ab"
    string(2) "aB"
    string(2) "Ab"
    string(2) "AB"
    string(2) "ab"
    string(2) "a1"
    string(2) "1b"
    string(2) "11"
    string(2) "ab"
    string(2) "aB"
    string(2) "Ab"
    string[binary](2) "\x41\x42"
    string(2) "ab"
    string(2) "ab"
    string(2) "ab"
    string(2) "ab"
    string(2) "ab"
    string(2) "aB"
    string(2) "Ab"
    string(2) "AB"
    string(2) "ab"
    string(2) "a1"
    string(2) "1b"
    string(2) "11"
    string(2) "ab"
    string[binary](2) "aB"
    string[binary](2) "Ab"
    string[binary](2) "AB"
    Strings/count_chars.php: SUCCEEDED
    Strings/crc32.php: SUCCEEDED
    Strings/crypt.php: SUCCEEDED
    Strings/crypt2.php: SUCCEEDED
    Strings/echo.php: SUCCEEDED
    Strings/explode.php: SUCCEEDED
    Strings/get_html_translation_table.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <hr>[&] => &amp;
    [>] => &gt;
    [<] => &lt;
    ["] => &quot;
    <hr>Hallo &amp; &lt;Frau&gt; &amp; Kr&iuml;&iquest;&frac12;mer
    <hr>[&] => &amp;
    [>] => &gt;
    [<] => &lt;
    ["] => &quot;
    <hr>Hallo &amp; &lt;Frau&gt; &amp; Kr�mer
    Strings/mb_strlen.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Call to undefined function mb_strlen() in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 4
    Error: Call to undefined function: 'mb_strlen' in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 4, column 1.
    Strings/nl2br.php: SUCCEEDED
    Strings/pack.php: SUCCEEDED
    Strings/pos.php: SUCCEEDED
    Strings/runtime-quotes.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    fread = (x''y"z)
    fgets = (x''y"z)
    file[0] = (x''y"z)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    
    Warning: fopen(runtime-quotes2.txt): failed to open stream: Permission denied in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 33
    
    Warning: fwrite() expects parameter 1 to be resource, boolean given in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 35
    fwrite = ()
    
    Warning: fputs() expects parameter 1 to be resource, boolean given in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 38
    fputs = ()
    
    Warning: fclose() expects parameter 1 to be resource, boolean given in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 41
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (x'y"z)
    fgets = (x'y"z)
    file[0] = (x'y"z)
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (a\'b"\\ca\)
    fgets = (a\'b"\\ca\'b"\\c)
    file[0] = (a\'b"\\ca\'b"\\c)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    e'e
    e''e
    e'e
    e'e
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    e'e
    e'e
    e'e
    e'e
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    fread = (x''y"z)
    fgets = (x''y"z)
    file[0] = (x''y"z)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    
    Warning: fopen(): Unable to access (C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Strings\runtime-quotes2.txt): Permission denied in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 33, column 3.
    
    Warning: Cannot convert boolean to resource implicitly in a call to function fwrite() in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 35, column 3.
    fwrite = (0)
    
    Warning: Cannot convert boolean to resource implicitly in a call to function fputs() in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 38, column 3.
    fputs = (0)
    
    Warning: Cannot convert boolean to resource implicitly in a call to function fclose() in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 41, column 3.
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (x'y"z)
    fgets = (x'y"z)
    file[0] = (x'y"z)
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (a\'b"\\ca\)
    fgets = (a\'b"\\ca\'b"\\c)
    file[0] = (a\'b"\\ca\'b"\\c)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    e'e
    e''e
    e'e
    e'e
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    e'e
    e'e
    e'e
    e'e
    Strings/sprintf.php: SUCCEEDED
    Strings/sprintf2.php: SUCCEEDED
    Strings/strtr.php: SUCCEEDED
    Strings/str_ireplace.php: SUCCEEDED
    Strings/str_replace.php: SUCCEEDED
    Strings/str_word_count.php: SUCCEEDED
    Strings/substr_operations.php: SUCCEEDED
    Strings/wordwrap.php: SUCCEEDED
    Variables/advanced_serialize.php: SUCCEEDED
    Variables/arguments.php: SUCCEEDED
    Variables/bitwise.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "00"
    string(2) "31"
    string(2) "31"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    0
    0
    0
    5
    0
    5
    40
    5
    45
    string(48) "000000000000000000000000000000000000000000000000"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(14) "31323331323331"
    string(2) "30"
    string(14) "31323331323331"
    string(16) "3635343635343536"
    string(2) "30"
    string(16) "3635343635343536"
    string(14) "337a5e8be43d7a"
    string(14) "00002130120201"
    string(48) "337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42"
    string(16) "347d598ce33a7e77"
    string(16) "0200243214040100"
    string(48) "367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42"
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "00"
    string(2) "31"
    string(2) "31"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    0
    -9223372036854775808
    -9223372036854775808
    -9223372036854775803
    0
    -9223372036854775803
    40
    5
    45
    string(48) "000000000000000000000000000000000000000000000000"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(14) "31323331323331"
    string(2) "30"
    string(14) "31323331323331"
    string(16) "3635343635343536"
    string(2) "30"
    string(16) "3635343635343536"
    string(14) "337a5e8be43d7a"
    string(14) "00002130120201"
    string(48) "337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42"
    string(16) "347d598ce33a7e77"
    string(16) "0200243214040100"
    string(48) "367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42"
    Variables/class_constants.php: SUCCEEDED
    Variables/comparisons.php: SUCCEEDED
    Variables/constant.php: SUCCEEDED
    Variables/constants_defined.php: SUCCEEDED
    Variables/extract%20refs.php: SUCCEEDED
    Variables/extract.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    EXTR_PREFIX_ALL
    integer(4)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
      'prefix_non_existent' => integer(1)
    }
    <hr>EXTR_PREFIX_INVALID
    integer(5)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => integer(2)
      'non_existent' => integer(1)
      'prefix_' => integer(1)
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => 'hello'
    }
    <hr>EXTR_PREFIX_SAME
    integer(3)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'non_existent' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>EXTR_PREFIX_IF_EXISTS
    integer(3)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>
    EXTR_PREFIX_ALL
    integer(4)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
      'prefix_non_existent' => integer(1)
    }
    <hr>EXTR_PREFIX_INVALID
    integer(5)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => integer(2)
      'non_existent' => integer(1)
      'prefix_' => integer(1)
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => 'hello'
    }
    <hr>EXTR_PREFIX_SAME
    integer(4)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'non_existent' => integer(1)
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>EXTR_PREFIX_IF_EXISTS
    integer(3)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>
    Variables/func_get_args.php: SUCCEEDED
    Variables/is_number.php: SUCCEEDED
    Variables/serialize.php: SUCCEEDED
    Variables/unserialize_objects.php: SUCCEEDED
    Variables/var_dumping.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Array
    (
        [0] => 1
        [1] => 
        [2] => 1
        [3] => 1.2
        [4] => 
        [5] => asdas
        [6] => Array
            (
                [0] => 1
            )
    
        [7] => stdClass Object
            (
            )
    
        [8] => Resource id #1
    )
    array(9) {
      [0]=>
      bool(true)
      [1]=>
      bool(false)
      [2]=>
      int(1)
      [3]=>
      float(1.2)
      [4]=>
      NULL
      [5]=>
      string(5) "asdas"
      [6]=>
      array(1) {
        [0]=>
        int(1)
      }
      [7]=>
      object(stdClass)#1 (0) {
      }
      [8]=>
      resource(1) of type (stream)
    }
    array (
      0 => true,
      1 => false,
      2 => 1,
      3 => 1.2,
      4 => NULL,
      5 => 'asdas',
      6 => 
      array (
        0 => 1,
      ),
      7 => 
      stdClass::__set_state(array(
      )),
      8 => NULL,
    )
    Array
    (
        [0] => 1
        [1] => 
        [2] => 1
        [3] => 1.2
        [4] => 
        [5] => asdas
        [6] => Array
        (
            [0] => 1
        )
    
        [7] => stdClass Object
        (
        )
    
        [8] => resource id #4
    
    )
    array(9) {
      [0]=>
      bool(true)
      [1]=>
      bool(false)
      [2]=>
      int(1)
      [3]=>
      float(1.2)
      [4]=>
      NULL
      [5]=>
      string(5) "asdas"
      [6]=>
      array(1) {
        [0]=>
        int(1)
      }
      [7]=>
      object(stdClass)(0) {
      }
      [8]=>
      resource(4) of type (stream)
    }
    array
    (
      '0' => true,
      '1' => false,
      '2' => 1,
      '3' => 1.2,
      '4' => NULL,
      '5' => 'asdas',
      '6' => array
      (
        '0' => 1
      ),
      '7' => class stdClass
      {
    
      },
      '8' => NULL
    )
    Xml/005.php: SUCCEEDED
    Xml/006.php: SUCCEEDED
    Xml/007.php: SUCCEEDED
    Xml/008.php: SUCCEEDED
    Xml/009.php: SUCCEEDED
    Xml/011.php: SUCCEEDED
    Xml/013.php: SUCCEEDED
    Xml/017.php: SUCCEEDED
    Xml/018.php: SUCCEEDED
    Xml/019.php: SUCCEEDED
    Xml/020.php: SUCCEEDED
    Xml/021.php: SUCCEEDED
    Xml/025.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
      'foo' => 'foobar'
    }
    array
    {
      'html' => 'http://www.w3.org/1999/xhtml'
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
    }
    array
    {
      'html' => 'http://www.w3.org/1999/xhtml'
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'foo' => 'foobar'
      'baz' => 'foobarbaz'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
    }
    array
    {
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
      'baz' => 'foobarbaz'
      'foo' => 'foobar'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
      'baz' => 'foobarbaz'
      'foo' => 'foobar'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
    }
    array
    {
    }
    Xml/026.php: SUCCEEDED
    Xml/027.php: SUCCEEDED
    Xml/028.php: SUCCEEDED
    Xml/029.php: SUCCEEDED
    Xml/030.php: SUCCEEDED
    Xml/032.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    FALSE
    FALSE
    FALSE
    TRUE
    TRUE
    TRUE
    Xml/033.php: SUCCEEDED
    Xml/bug26384.php: SUCCEEDED
    Xml/bug28721.php: SUCCEEDED
    Xml/bug28817.php: SUCCEEDED
    Xml/bug32615.php: SUCCEEDED
    Xml/bug33853.php: SUCCEEDED
    Xml/bug34276.php: SUCCEEDED
    Xml/bug35342.php: SUCCEEDED
    Xml/bug36756.php: SUCCEEDED
    Xml/bug37277.php: SUCCEEDED
    Xml/dom002.php: SUCCEEDED
    Xml/dom003.php: SUCCEEDED
    Xml/dom006.php: SUCCEEDED
    Xml/dom007.php: SUCCEEDED
    Xml/dom_set_attr_node.php: SUCCEEDED
    Xml/xmlhandler.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test begins
    <br/>
    <br/>test begins
    <br/>empty begins
    <br/>empty ends
    <br/>nocontent begins
    <br/>nocontent ends
    <br/>content begins
    <br/>empty begins
    <br/>empty ends
    <br/>empty begins
    <br/>empty ends
    <br/>content ends
    <br/>empty begins
    <br/>empty ends
    <br/>empty begins
    <br/>empty ends
    <br/>test ends
    <br/>Test ends
    <br/>
    <br/>
    Test begins
    <br/>
    <br/>
    Error: Call to undefined function: 'xml_parser_create' in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Xml\__input.txt at expression on line 18, column 3.
    Xml/xslt001.php: SUCCEEDED
    Xml/xslt002.php: SUCCEEDED
    Xml/xslt003.php: SUCCEEDED
    Xml/xslt004.php: SUCCEEDED
    Xml/xslt005.php: SUCCEEDED
    Xml/xslt006.php: SUCCEEDED
    Xml/xslt007.php: SUCCEEDED
    Xml/xslt010.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test 10: EXSLT Support
      
      
      Test Date : 0001-12-31Z
        year                 : 1
        leap-year            : false
        month-in-year        : 12
        month-name           : December
        month-abbreviation   : Dec
        week-in-year         : 1
        day-in-year          : 365
        day-in-month         : 31
        day-of-week-in-month : 5
        day-in-week          : 2
        day-name             : Monday
        day-abbreviation     : Mon
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : 3000-01-31
        year                 : 3000
        leap-year            : false
        month-in-year        : 1
        month-name           : January
        month-abbreviation   : Jan
        week-in-year         : 5
        day-in-year          : 31
        day-in-month         : 31
        day-of-week-in-month : 5
        day-in-week          : 6
        day-name             : Friday
        day-abbreviation     : Fri
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : 2000-02-29
        year                 : 2000
        leap-year            : true
        month-in-year        : 2
        month-name           : February
        month-abbreviation   : Feb
        week-in-year         : 9
        day-in-year          : 60
        day-in-month         : 29
        day-of-week-in-month : 5
        day-in-week          : 3
        day-name             : Tuesday
        day-abbreviation     : Tue
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : 9990001-12-31Z
        year                 : 9990001
        leap-year            : false
        month-in-year        : 12
        month-name           : December
        month-abbreviation   : Dec
        week-in-year         : 1
        day-in-year          : 365
        day-in-month         : 31
        day-of-week-in-month : 5
        day-in-week          : 2
        day-name             : Monday
        day-abbreviation     : Mon
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : -0004-02-29
        year                 : -4
        leap-year            : true
        month-in-year        : 2
        month-name           : February
        month-abbreviation   : Feb
        week-in-year         : 9
        day-in-year          : 60
        day-in-month         : 29
        day-of-week-in-month : 5
        day-in-week          : 1
        day-name             : Sunday
        day-abbreviation     : Sun
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
    Test 10: EXSLT Support
    Warning: Cannot find a script or an extension object associated with namespace 'http://exslt.org/dates-and-times'..
    
    Warning: Illegal string offset '-1' in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Phalanger.inc at expression on line 7, column 6.
    Xml/xslt011.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test 11: php:function Support
    
    Warning: XSLTProcessor::transformToXml(): A PHP Object cannot be converted to a XPath-string in C:\Users\Jakub\Projects\Phalanger\Main\Testing\Tests\Xml\__input.txt on line 18
    <?xml version="1.0"?>
    foobar - secondArg
    foobar - 
    this is from an external DomDocument
    from the Input Document
    static
    Test 11: php:function Support
    <?xml version="1.0" encoding="utf-8"?>foobar - secondArg
    foobar - 
    this is from an external DomDocument
    from the Input Document
    static
    not a DomNode object
    Xml/xslt012.php: SUCCEEDED
    ================================================ FILE: Testing/Tests/TestLogs/TestLog (2034).htm ================================================ PHP.NET Compiler test log

    PHP.NET Compiler test log

    (90%) 847 succeeded, 99 failed
    Test ResultCompiler error outputExpected test result
    @PHP/classes/array_access_001.php: SUCCEEDED
    @PHP/classes/array_access_002.php: SUCCEEDED
    @PHP/classes/array_access_003.php: SUCCEEDED
    @PHP/classes/array_access_004.php: SUCCEEDED
    @PHP/classes/array_access_005.php: SUCCEEDED
    @PHP/classes/array_access_006.php: SUCCEEDED
    @PHP/classes/array_access_007.php: SUCCEEDED
    @PHP/classes/array_access_008.php: SUCCEEDED
    @PHP/classes/array_access_009.php: SUCCEEDED
    @PHP/classes/array_access_010.php: SUCCEEDED
    @PHP/classes/array_access_011.php: SUCCEEDED
    @PHP/classes/array_access_013.php: SUCCEEDED
    @PHP/classes/assign_op_property_001.php: SUCCEEDED
    @PHP/classes/autoload_001.php: SUCCEEDED
    @PHP/classes/autoload_002.php: SUCCEEDED
    @PHP/classes/autoload_003.php: SUCCEEDED
    @PHP/classes/autoload_005.php: SUCCEEDED
    @PHP/classes/autoload_006.php: SUCCEEDED
    @PHP/classes/bug23951.php: SUCCEEDED
    @PHP/classes/bug24399.php: SUCCEEDED
    @PHP/classes/bug24445.php: SUCCEEDED
    @PHP/classes/bug26737.php: SUCCEEDED
    @PHP/classes/bug27468.php: SUCCEEDED
    @PHP/classes/bug27504.php: SUCCEEDED
    @PHP/classes/class_example.php: SUCCEEDED
    @PHP/classes/class_stdclass.php: SUCCEEDED
    @PHP/classes/clone_001.php: SUCCEEDED
    @PHP/classes/clone_002.php: SUCCEEDED
    @PHP/classes/clone_003.php: SUCCEEDED
    @PHP/classes/clone_004.php: SUCCEEDED
    @PHP/classes/clone_006.php: SUCCEEDED
    @PHP/classes/constants_scope_001.php: SUCCEEDED
    @PHP/classes/ctor_dtor.php: SUCCEEDED
    @PHP/classes/ctor_dtor_inheritance.php: SUCCEEDED
    @PHP/classes/ctor_name_clash.php: SUCCEEDED
    @PHP/classes/dereferencing_001.php: SUCCEEDED
    @PHP/classes/destructor_and_echo.php: SUCCEEDED
    @PHP/classes/destructor_and_references.php: SUCCEEDED
    @PHP/classes/destructor_inheritance.php: SUCCEEDED
    @PHP/classes/destructor_visibility_003.php: SUCCEEDED
    @PHP/classes/factory_001.php: SUCCEEDED
    @PHP/classes/factory_and_singleton_001.php: SUCCEEDED
    @PHP/classes/factory_and_singleton_002.php: SUCCEEDED
    @PHP/classes/final.php: SUCCEEDED
    @PHP/classes/incdec_property_001.php: SUCCEEDED
    @PHP/classes/incdec_property_002.php: SUCCEEDED
    @PHP/classes/incdec_property_003.php: SUCCEEDED
    @PHP/classes/incdec_property_004.php: SUCCEEDED
    @PHP/classes/inheritance.php: SUCCEEDED
    @PHP/classes/inheritance_002.php: SUCCEEDED
    @PHP/classes/interfaces_001.php: SUCCEEDED
    @PHP/classes/interface_construct.php: SUCCEEDED
    @PHP/classes/interface_doubled.php: SUCCEEDED
    @PHP/classes/interface_implemented.php: SUCCEEDED
    @PHP/classes/iterators_001.php: SUCCEEDED
    @PHP/classes/iterators_002.php: SUCCEEDED
    @PHP/classes/iterators_003.php: SUCCEEDED
    @PHP/classes/iterators_004.php: SUCCEEDED
    @PHP/classes/iterators_006.php: SUCCEEDED
    @PHP/classes/iterators_007.php: SUCCEEDED
    @PHP/classes/object_reference_001.php: SUCCEEDED
    @PHP/classes/private_001.php: SUCCEEDED
    @PHP/classes/private_002.php: SUCCEEDED
    @PHP/classes/private_003.php: SUCCEEDED
    @PHP/classes/private_003b.php: SUCCEEDED
    @PHP/classes/private_004.php: SUCCEEDED
    @PHP/classes/private_004b.php: SUCCEEDED
    @PHP/classes/private_005.php: SUCCEEDED
    @PHP/classes/private_005b.php: SUCCEEDED
    @PHP/classes/private_006.php: SUCCEEDED
    @PHP/classes/private_006b.php: SUCCEEDED
    @PHP/classes/private_007.php: SUCCEEDED
    @PHP/classes/private_007b.php: SUCCEEDED
    @PHP/classes/private_members.php: SUCCEEDED
    @PHP/classes/private_redeclare.php: SUCCEEDED
    @PHP/classes/protected_001.php: SUCCEEDED
    @PHP/classes/protected_001b.php: SUCCEEDED
    @PHP/classes/protected_002.php: SUCCEEDED
    @PHP/classes/serialize_001.php: SUCCEEDED
    @PHP/classes/singleton_001.php: SUCCEEDED
    @PHP/classes/static_properties_001.php: SUCCEEDED
    @PHP/classes/type_hinting_001.php: SUCCEEDED
    @PHP/classes/type_hinting_003.php: SUCCEEDED
    @PHP/classes/visibility_000c.php: SUCCEEDED
    @PHP/classes/visibility_001c.php: SUCCEEDED
    @PHP/classes/visibility_002c.php: SUCCEEDED
    @PHP/classes/visibility_003a.php: SUCCEEDED
    @PHP/classes/visibility_003c.php: SUCCEEDED
    @PHP/classes/visibility_004a.php: SUCCEEDED
    @PHP/classes/visibility_004b.php: SUCCEEDED
    @PHP/classes/visibility_004c.php: SUCCEEDED
    @PHP/classes/visibility_005.php: SUCCEEDED
    @PHP/classes/__call_001.php: SUCCEEDED
    @PHP/classes/__set_data_corrupt.php: SUCCEEDED
    @PHP/classes/__set__get_001.php: SUCCEEDED
    @PHP/classes/__set__get_004.php: SUCCEEDED
    @PHP/classes/__set__get_005.php: SUCCEEDED
    @PHP/date/bug17988.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2002-06-25 12:18:48
    2002-06-25 14:18:48
    2002-06-25 13:18:48
    2002-06-25 12:18:48
    2002-06-25 18:18:48
    2002-06-25 14:18:48
    2002-06-25 14:18:48
    2002-06-25 18:18:48
    2002-06-25 10:18:48
    2002-06-25 17:18:48
    2002-06-25 11:18:48
    2002-06-25 17:48:48
    2002-06-25 10:48:48
    2002-06-25 14:18:48
    2002-06-25 14:18:48
    2002-06-25 13:18:48
    2002-06-25 12:18:48
    2002-06-25 18:18:48
    2002-06-25 14:18:48
    2002-06-25 14:18:48
    2002-06-25 18:18:48
    2002-06-25 10:18:48
    2002-06-25 17:18:48
    2002-06-25 11:18:48
    2002-06-25 17:48:48
    2002-06-25 10:48:48
    @PHP/date/bug26317.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2003-11-19 17:20:42
    2003-11-19 17:20:42
    2003-11-19 17:20:42
    2003-11-19 16:20:42
    2003-11-19 16:20:42
    2003-11-19 16:20:42
    @PHP/date/bug26320.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2003-11-19 12:30:42
    2003-11-19 13:30:42
    2003-11-19 12:30:42
    2003-11-19 12:30:42
    @PHP/date/bug28088.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    The following line rightly shows the correct date time:
    04/04/04 2145
    But the following line fails to show the correct date time:
    04/03/04 2245
    The following line rightly shows the correct date time:
    04/04/04 2345
    But the following line fails to show the correct date time:
    04/04/04 0045
    @PHP/date/bug28599.php: SUCCEEDED
    @PHP/date/bug29150.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2005-06-19 22:00:00
    2005-06-20 00:00:00
    @PHP/date/bug29585.php: SUCCEEDED
    @PHP/date/bug29595.php: SUCCEEDED
    @PHP/date/bug33056.php: SUCCEEDED
    @PHP/date/bug33452.php: SUCCEEDED
    @PHP/date/bug33562.php: SUCCEEDED
    @PHP/date/bug33563.php: SUCCEEDED
    @PHP/date/bug33578.php: SUCCEEDED
    @PHP/date/bug33869.php: SUCCEEDED
    @PHP/date/bug34676.php: SUCCEEDED
    @PHP/date/bug34771.php: SUCCEEDED
    @PHP/date/bug35143.php: SUCCEEDED
    @PHP/date/bug35414.php: SUCCEEDED
    @PHP/date/bug35422.php: SUCCEEDED
    @PHP/date/bug35425.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    integer(42)
    integer(1)
    integer(1)
    integer(1)
    integer(1)
    integer(0)
    integer(0)
    integer(1)
    integer(1)
    integer(31)
    integer(1104537661)
    integer(6)
    integer(53)
    integer(5)
    integer(2005)
    integer(0)
    integer(3600)
    integer(292)
    integer(1)
    integer(1)
    integer(1)
    integer(1)
    integer(0)
    integer(0)
    integer(1)
    integer(1)
    integer(31)
    integer(1104559261)
    integer(6)
    integer(53)
    integer(5)
    integer(2005)
    integer(0)
    integer(-18000)
    @PHP/date/bug35456.php: SUCCEEDED
    @PHP/date/bug35624.php: SUCCEEDED
    @PHP/date/bug35630.php: SUCCEEDED
    @PHP/date/bug35699.php: SUCCEEDED
    @PHP/date/bug35705.php: SUCCEEDED
    @PHP/date/bug35885.php: SUCCEEDED
    @PHP/date/bug35887.php: SUCCEEDED
    @PHP/date/date.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    c: 2003-01-23T13:20:59+01:00
    r: Thu, 23 Jan 2003 13:20:59 +0100
    c: 2003-01-23T13:20:59+01:00
    r: Thu, 23 Jan 2003 13:20:59 +0100
    c: 2003-01-23T12:20:59+00:00
    r: Thu, 23 Jan 2003 12:20:59 +0000
    c: 2003-01-23T13:20:59+01:00
    r: Thu, 23 Jan 2003 13:20:59 +0100
    @PHP/date/date_create-1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\date\__input.txt on line 28
    SKIP
    @PHP/date/date_create-2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\date\__input.txt on line 6
    SKIP
    @PHP/date/date_default_timezone_get-3.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Europe/Prague
    America/Chicago
    Europe/Rome
    America/Chicago
    @PHP/date/date_modify-1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\date\__input.txt on line 6
    SKIP
    @PHP/date/date_modify-2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\date\__input.txt on line 6
    SKIP
    @PHP/date/default-timezone-1.php: SUCCEEDED
    @PHP/date/default-timezone-2.php: SUCCEEDED
    @PHP/date/format-negative-timestamp.php: SUCCEEDED
    @PHP/date/strtotime.php: SUCCEEDED
    @PHP/date/timezone-configuration.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    1119125744
    1119125744
    1119125744
    1119125744
    1119129344
    1119125744
    @PHP/doc_examples/test001.php: SUCCEEDED
    @PHP/doc_examples/test002.php: SUCCEEDED
    @PHP/doc_examples/test003.php: SUCCEEDED
    @PHP/doc_examples/test004.php: SUCCEEDED
    @PHP/doc_examples/test005.php: SUCCEEDED
    @PHP/doc_examples/test006.php: SUCCEEDED
    @PHP/doc_examples/test007.php: SUCCEEDED
    @PHP/doc_examples/test008.php: SUCCEEDED
    @PHP/doc_examples/test009.php: SUCCEEDED
    @PHP/doc_examples/test010.php: SUCCEEDED
    @PHP/doc_examples/test011.php: SUCCEEDED
    @PHP/doc_examples/test013.php: SUCCEEDED
    @PHP/doc_examples/test014.php: SUCCEEDED
    @PHP/doc_examples/test015.php: SUCCEEDED
    @PHP/doc_examples/test016.php: SUCCEEDED
    @PHP/doc_examples/test017.php: SUCCEEDED
    @PHP/doc_examples/test018.php: SUCCEEDED
    @PHP/doc_examples/test019.php: SUCCEEDED
    @PHP/doc_examples/test020.php: SUCCEEDED
    @PHP/doc_examples/test021.php: SUCCEEDED
    @PHP/doc_examples/test022.php: SUCCEEDED
    @PHP/doc_examples/test023.php: SUCCEEDED
    @PHP/doc_examples/test024.php: SUCCEEDED
    @PHP/doc_examples/test025.php: SUCCEEDED
    @PHP/doc_examples/test026.php: SUCCEEDED
    @PHP/doc_examples/test027.php: SUCCEEDED
    @PHP/doc_examples/test028.php: SUCCEEDED
    @PHP/doc_examples/test029.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ´┐Żauky
    �auky
    @PHP/doc_examples/test030.php: SUCCEEDED
    @PHP/doc_examples/test031.php: SUCCEEDED
    @PHP/doc_examples/test032.php: SUCCEEDED
    @PHP/doc_examples/test033.php: SUCCEEDED
    @PHP/doc_examples/test034.php: SUCCEEDED
    @PHP/doc_examples/test035.php: SUCCEEDED
    @PHP/doc_examples/test036.php: SUCCEEDED
    @PHP/doc_examples/test037.php: SUCCEEDED
    @PHP/doc_examples/test038.php: SUCCEEDED
    @PHP/doc_examples/test039.php: SUCCEEDED
    @PHP/doc_examples/test040.php: SUCCEEDED
    @PHP/doc_examples/test041.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    call_user_func():
    hello world!
    Strict Standards: call_user_func(): Non-static method MyClass::myCallbackMethod() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\doc_examples\__input.txt at expression on line 17, column 1.
    Hello World!Hello World!
    @PHP/doc_examples/test042.php: SUCCEEDED
    @PHP/doc_examples/test043.php: SUCCEEDED
    @PHP/doc_examples/test044.php: SUCCEEDED
    @PHP/doc_examples/test045.php: SUCCEEDED
    @PHP/doc_examples/test046.php: SUCCEEDED
    @PHP/doc_examples/test047.php: SUCCEEDED
    @PHP/doc_examples/test048.php: SUCCEEDED
    @PHP/doc_examples/test049.php: SUCCEEDED
    @PHP/doc_examples/test050.php: SUCCEEDED
    @PHP/doc_examples/test051.php: SUCCEEDED
    @PHP/doc_examples/test052.php: SUCCEEDED
    @PHP/doc_examples/test053.php: SUCCEEDED
    @PHP/doc_examples/test054.php: SUCCEEDED
    @PHP/doc_examples/test055.php: SUCCEEDED
    @PHP/doc_examples/test056.php: SUCCEEDED
    @PHP/doc_examples/test057.php: SUCCEEDED
    @PHP/doc_examples/test058.php: SUCCEEDED
    @PHP/doc_examples/test059.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    Deprecated: Assigning the return value of new by reference is deprecated in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\doc_examples\__input.txt on line 4
    NULL
    object(stdClass)#1 (0) {
    }
    NULL
    object(stdClass)(0) {
    }
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\doc_examples\__input.txt(4,5): warning PHP0181: Assigning the return value of new by reference is deprecated
    
    @PHP/doc_examples/test060.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    Deprecated: Assigning the return value of new by reference is deprecated in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\doc_examples\__input.txt on line 9
    Static object: NULL
    Static object: NULL
    
    Static object: NULL
    Static object: object(stdClass)#3 (1) {
      ["property"]=>
      int(1)
    }
    Static object: NULL
    Static object: NULL
    
    Static object: NULL
    Static object: object(stdClass)(1) {
      ["property"]=>
      int(1)
    }
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\doc_examples\__input.txt(9,9): warning PHP0181: Assigning the return value of new by reference is deprecated
    
    @PHP/doc_examples/test061.php: SUCCEEDED
    @PHP/doc_examples/test062.php: SUCCEEDED
    @PHP/doc_examples/test063.php: SUCCEEDED
    @PHP/doc_examples/test064.php: SUCCEEDED
    @PHP/doc_examples/test065.php: SUCCEEDED
    @PHP/doc_examples/test066.php: SUCCEEDED
    @PHP/doc_examples/test067.php: SUCCEEDED
    @PHP/doc_examples/test068.php: SUCCEEDED
    @PHP/doc_examples/test069.php: SUCCEEDED
    @PHP/doc_examples/test070.php: SUCCEEDED
    @PHP/doc_examples/test071.php: SUCCEEDED
    @PHP/doc_examples/test072.php: SUCCEEDED
    @PHP/doc_examples/test073.php: SUCCEEDED
    @PHP/doc_examples/test074.php: SUCCEEDED
    @PHP/doc_examples/test075.php: SUCCEEDED
    @PHP/doc_examples/test076.php: SUCCEEDED
    @PHP/doc_examples/test077.php: SUCCEEDED
    @PHP/doc_examples/test078.php: SUCCEEDED
    @PHP/doc_examples/test079.php: SUCCEEDED
    @PHP/doc_examples/test080.php: SUCCEEDED
    @PHP/doc_examples/test081.php: SUCCEEDED
    @PHP/doc_examples/test082.php: SUCCEEDED
    @PHP/doc_examples/test083.php: SUCCEEDED
    @PHP/doc_examples/test084.php: SUCCEEDED
    @PHP/doc_examples/test085.php: SUCCEEDED
    @PHP/doc_examples/test086.php: SUCCEEDED
    @PHP/doc_examples/test087.php: SUCCEEDED
    @PHP/doc_examples/test088.php: SUCCEEDED
    @PHP/doc_examples/test089.php: SUCCEEDED
    @PHP/doc_examples/test090.php: SUCCEEDED
    @PHP/doc_examples/test091.php: SUCCEEDED
    @PHP/doc_examples/test092.php: SUCCEEDED
    @PHP/doc_examples/test093.php: SUCCEEDED
    @PHP/doc_examples/test094.php: SUCCEEDED
    @PHP/doc_examples/test095.php: SUCCEEDED
    @PHP/doc_examples/test096.php: SUCCEEDED
    @PHP/doc_examples/test097.php: SUCCEEDED
    @PHP/doc_examples/test098.php: SUCCEEDED
    @PHP/doc_examples/test099.php: SUCCEEDED
    @PHP/doc_examples/test100.php: SUCCEEDED
    @PHP/doc_examples/test102.php: SUCCEEDED
    @PHP/doc_examples/test103.php: SUCCEEDED
    @PHP/doc_examples/test104.php: SUCCEEDED
    @PHP/doc_examples/test105.php: SUCCEEDED
    @PHP/doc_examples/test107.php: SUCCEEDED
    @PHP/doc_examples/test108.php: SUCCEEDED
    @PHP/doc_examples/test109.php: SUCCEEDED
    @PHP/doc_examples/test110.php: SUCCEEDED
    @PHP/doc_examples/test111.php: SUCCEEDED
    @PHP/doc_examples/test112.php: SUCCEEDED
    @PHP/doc_examples/test113.php: SUCCEEDED
    @PHP/doc_examples/test114.php: SUCCEEDED
    @PHP/doc_examples/test115.php: SUCCEEDED
    @PHP/doc_examples/test116.php: SUCCEEDED
    @PHP/doc_examples/test117.php: SUCCEEDED
    @PHP/doc_examples/test118.php: SUCCEEDED
    @PHP/doc_examples/test119.php: SUCCEEDED
    @PHP/doc_examples/test120.php: SUCCEEDED
    @PHP/doc_examples/test121.php: SUCCEEDED
    @PHP/doc_examples/test122.php: SUCCEEDED
    @PHP/doc_examples/test123.php: SUCCEEDED
    @PHP/doc_examples/test124.php: SUCCEEDED
    @PHP/doc_examples/test125.php: SUCCEEDED
    @PHP/doc_examples/test126.php: SUCCEEDED
    @PHP/doc_examples/test127.php: SUCCEEDED
    @PHP/doc_examples/test128.php: SUCCEEDED
    @PHP/doc_examples/test129.php: SUCCEEDED
    @PHP/doc_examples/test130.php: SUCCEEDED
    @PHP/doc_examples/test131.php: SUCCEEDED
    @PHP/doc_examples/test132.php: SUCCEEDED
    @PHP/doc_examples/test133.php: SUCCEEDED
    @PHP/doc_examples/test134.php: SUCCEEDED
    @PHP/doc_examples/test136.php: SUCCEEDED
    @PHP/doc_examples/test137.php: SUCCEEDED
    @PHP/doc_examples/test138.php: SUCCEEDED
    @PHP/doc_examples/test139.php: SUCCEEDED
    @PHP/doc_examples/test148.php: SUCCEEDED
    @PHP/doc_examples/test149.php: SUCCEEDED
    @PHP/doc_examples/test150.php: SUCCEEDED
    @PHP/doc_examples/test151.php: SUCCEEDED
    @PHP/doc_examples/test152.php: SUCCEEDED
    @PHP/doc_examples/test153.php: SUCCEEDED
    @PHP/doc_examples/test154.php: SUCCEEDED
    @PHP/doc_examples/test155.php: SUCCEEDED
    @PHP/doc_examples/test156.php: SUCCEEDED
    @PHP/doc_examples/test158.php: SUCCEEDED
    @PHP/lang/001.php: SUCCEEDED
    @PHP/lang/002.php: SUCCEEDED
    @PHP/lang/003.php: SUCCEEDED
    @PHP/lang/004.php: SUCCEEDED
    @PHP/lang/005.php: SUCCEEDED
    @PHP/lang/006.php: SUCCEEDED
    @PHP/lang/007.php: SUCCEEDED
    @PHP/lang/008.php: SUCCEEDED
    @PHP/lang/009.php: SUCCEEDED
    @PHP/lang/010.php: SUCCEEDED
    @PHP/lang/011.php: SUCCEEDED
    @PHP/lang/012.php: SUCCEEDED
    @PHP/lang/013.php: SUCCEEDED
    @PHP/lang/014.php: SUCCEEDED
    @PHP/lang/015.php: SUCCEEDED
    @PHP/lang/016.php: SUCCEEDED
    @PHP/lang/017.php: SUCCEEDED
    @PHP/lang/018.php: SUCCEEDED
    @PHP/lang/019.php: SUCCEEDED
    @PHP/lang/020.php: SUCCEEDED
    @PHP/lang/021.php: SUCCEEDED
    @PHP/lang/022.php: SUCCEEDED
    @PHP/lang/023.php: SUCCEEDED
    @PHP/lang/024.php: SUCCEEDED
    @PHP/lang/025.php: SUCCEEDED
    @PHP/lang/026.php: SUCCEEDED
    @PHP/lang/027.php: SUCCEEDED
    @PHP/lang/028.php: SUCCEEDED
    @PHP/lang/030.php: SUCCEEDED
    @PHP/lang/032.php: SUCCEEDED
    @PHP/lang/036.php: SUCCEEDED
    @PHP/lang/037.php: SUCCEEDED
    @PHP/lang/038.php: SUCCEEDED
    @PHP/lang/039.php: SUCCEEDED
    @PHP/lang/040.php: SUCCEEDED
    @PHP/lang/bison1.php: SUCCEEDED
    @PHP/lang/bug17115.php: SUCCEEDED
    @PHP/lang/bug18872.php: SUCCEEDED
    @PHP/lang/bug19943.php: SUCCEEDED
    @PHP/lang/bug20175.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    Deprecated: Assigning the return value of new by reference is deprecated in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\lang\__input.txt on line 110
    foo_static()
    foo_global()
    foo:1
    foo_static()
    foo:1
    bar_static()
    bar_global()
    bar:1
    bar_static()
    bar:1
    wow_static()
    wow_global()
    wow:1
    wow_static()
    wow:1
    oop_test()
    oop_static()
    oop_class()
    oop:1
    oop_static()
    oop:1
    oop_test()
    oop_static()
    oop:1
    foo_static()
    foo_global()
    foo:1
    foo_static()
    foo:1
    bar_static()
    bar_global()
    bar:1
    bar_static()
    bar_global()
    bar:2
    wow_static()
    wow_global()
    wow:1
    wow_static()
    wow:1
    oop_test()
    oop_static()
    oop_class()
    oop:1
    oop_static()
    oop:1
    oop_test()
    oop_static()
    oop:1
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\lang\__input.txt(110,4): warning PHP0181: Assigning the return value of new by reference is deprecated
    
    @PHP/lang/bug21094.php: SUCCEEDED
    @PHP/lang/bug21600.php: SUCCEEDED
    @PHP/lang/bug21669.php: SUCCEEDED
    @PHP/lang/bug21849.php: SUCCEEDED
    @PHP/lang/bug21961.php: SUCCEEDED
    @PHP/lang/bug22231.php: SUCCEEDED
    @PHP/lang/bug22367.php: SUCCEEDED
    @PHP/lang/bug22510.php: SUCCEEDED
    @PHP/lang/bug22592.php: SUCCEEDED
    @PHP/lang/bug22690.php: SUCCEEDED
    @PHP/lang/bug23279.php: SUCCEEDED
    @PHP/lang/bug23384.php: SUCCEEDED
    @PHP/lang/bug23489.php: SUCCEEDED
    @PHP/lang/bug23524.php: SUCCEEDED
    @PHP/lang/bug23922.php: SUCCEEDED
    @PHP/lang/bug24054.php: SUCCEEDED
    @PHP/lang/bug24396.php: SUCCEEDED
    @PHP/lang/bug24403.php: SUCCEEDED
    @PHP/lang/bug24436.php: SUCCEEDED
    @PHP/lang/bug24499.php: SUCCEEDED
    @PHP/lang/bug24640.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    double(1700000000000000089258092433847514422797596587883870563356951996370064178581143932836831337636761368874297554515902592900802289500112731978596146714137401870842258241575178866354311397451139753100927220499450359906637902366244989496126909662726242240784739940994096632824796638102733857671280980918272.0000000000)
    1.7E+300
    
    ------
    double(0.0000000000)
    1.7E-300
    
    ------
    double(17000000000000001584208052028780237480128823455860622330108867175329927830437888.0000000000)
    1.7E+79
    
    ------
    double(0.0000000000)
    1.7E-79
    
    ------
    double(169999999999999996096025832433329868941658043870400163508258284150340918121070592.0000000000)
    1.7E+80
    
    ------
    double(0.0000000000)
    1.7E-80
    
    ------
    double(1700000000000000013616404158611892038375594280539217794530130541777964808366194688.0000000000)
    1.7E+81
    
    ------
    double(0.0000000000)
    1.7E-81
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    1.6999810742106E-319
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    1.7000798873397E-320
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    1.6995858216939E-321
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    0
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    0
    
    ------
    double(1700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+300
    
    ------
    double(0.0000000000)
    1.70000000000003E-300
    
    ------
    double(17000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+79
    
    ------
    double(0.0000000000)
    1.70000000000001E-79
    
    ------
    double(170000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+80
    
    ------
    double(0.0000000000)
    1.70000000000001E-80
    
    ------
    double(1700000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+81
    
    ------
    double(0.0000000000)
    1.70000000000001E-81
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    1.69998107421056E-319
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    1.70007988733973E-320
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    1.69464516523548E-321
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    0
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    0
    
    ------
    @PHP/lang/bug24652.php: SUCCEEDED
    @PHP/lang/bug24658.php: SUCCEEDED
    @PHP/lang/bug24783.php: SUCCEEDED
    @PHP/lang/bug24926.php: SUCCEEDED
    @PHP/lang/bug25547.php: SUCCEEDED
    @PHP/lang/bug25652.php: SUCCEEDED
    @PHP/lang/bug25922.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Undefined index here: 'error'
    Undefined index here: ''
    @PHP/lang/bug26182.php: SUCCEEDED
    @PHP/lang/bug26696.php: SUCCEEDED
    @PHP/lang/bug26866.php: SUCCEEDED
    @PHP/lang/bug26869.php: SUCCEEDED
    @PHP/lang/bug27354.php: SUCCEEDED
    @PHP/lang/bug27439.php: SUCCEEDED
    @PHP/lang/bug27535.php: SUCCEEDED
    @PHP/lang/bug28213.php: SUCCEEDED
    @PHP/lang/bug28800.php: SUCCEEDED
    @PHP/lang/bug29566.php: SUCCEEDED
    @PHP/lang/bug29893.php: SUCCEEDED
    @PHP/lang/bug29944.php: SUCCEEDED
    @PHP/lang/bug30638.php: SUCCEEDED
    @PHP/lang/bug30726.php: SUCCEEDED
    @PHP/lang/bug30862.php: SUCCEEDED
    @PHP/lang/bug32924.php: SUCCEEDED
    @PHP/lang/bug35382.php: SUCCEEDED
    @PHP/lang/bug7515.php: SUCCEEDED
    @PHP/lang/each_binary_safety.php: SUCCEEDED
    @PHP/lang/error_2_exception_001.php: SUCCEEDED
    @PHP/lang/foreach_with_object_001.php: SUCCEEDED
    @PHP/lang/foreach_with_references_001.php: SUCCEEDED
    @PHP/lang/type_hints_001.php: SUCCEEDED
    @PHP/standard/array/001.php: SUCCEEDED
    @PHP/standard/array/003.php: SUCCEEDED
    @PHP/standard/array/004.php: SUCCEEDED
    @PHP/standard/array/005.php: SUCCEEDED
    @PHP/standard/array/008.php: SUCCEEDED
    @PHP/standard/array/array_change_key_case.php: SUCCEEDED
    @PHP/standard/array/array_chunk.php: SUCCEEDED
    @PHP/standard/array/array_count_values.php: SUCCEEDED
    @PHP/standard/array/array_diff_1.php: SUCCEEDED
    @PHP/standard/array/array_diff_key.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ------ Test 1 --------
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 2 --------
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 3 --------
    array(6) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [2]=>
      int(4)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [2]=>
      int(4)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 4 --------
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 5 --------
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 6 --------
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 7 --------
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    ------ Test 8 --------
    array(6) {
      [0]=>
      int(0)
      [7]=>
      int(14)
      [2]=>
      int(4)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [0]=>
      int(0)
      [7]=>
      int(14)
      [2]=>
      int(4)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 9 --------
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    ------ Test 1 --------
    array(4) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(4) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 2 --------
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 3 --------
    array(6) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [2]=>
      &int(4)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [2]=>
      &int(4)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 4 --------
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 5 --------
    array(4) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(4) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 6 --------
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 7 --------
    array(3) {
      [7]=>
      &int(14)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
    }
    array(3) {
      [7]=>
      &int(14)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
    }
    ------ Test 8 --------
    array(6) {
      [0]=>
      &int(0)
      [7]=>
      &int(14)
      [2]=>
      &int(4)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [0]=>
      &int(0)
      [7]=>
      &int(14)
      [2]=>
      &int(4)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 9 --------
    array(3) {
      [7]=>
      &int(14)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
    }
    array(3) {
      [7]=>
      &int(14)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
    }
    @PHP/standard/array/array_intersect_key.php: SUCCEEDED
    @PHP/standard/array/array_sum.php: SUCCEEDED
    @PHP/standard/array/array_walk_recursive.php: SUCCEEDED
    @PHP/standard/array/bug12776.php: SUCCEEDED
    @PHP/standard/array/bug14580.php: SUCCEEDED
    @PHP/standard/array/bug20381.php: SUCCEEDED
    @PHP/standard/array/bug20865.php: SUCCEEDED
    @PHP/standard/array/bug21182.php: SUCCEEDED
    @PHP/standard/array/bug21918.php: SUCCEEDED
    @PHP/standard/array/bug21998.php: SUCCEEDED
    @PHP/standard/array/bug22088.php: SUCCEEDED
    @PHP/standard/array/bug22463.php: SUCCEEDED
    @PHP/standard/array/bug23581.php: SUCCEEDED
    @PHP/standard/array/bug23788.php: SUCCEEDED
    @PHP/standard/array/bug24198.php: SUCCEEDED
    @PHP/standard/array/bug24220.php: SUCCEEDED
    @PHP/standard/array/bug24766.php: SUCCEEDED
    @PHP/standard/array/bug24897.php: SUCCEEDED
    @PHP/standard/array/bug24980.php: SUCCEEDED
    @PHP/standard/array/bug25359.php: SUCCEEDED
    @PHP/standard/array/bug25708.php: SUCCEEDED
    @PHP/standard/array/bug25758.php: SUCCEEDED
    @PHP/standard/array/bug26458.php: SUCCEEDED
    @PHP/standard/array/bug28974.php: SUCCEEDED
    @PHP/standard/array/bug29493.php: SUCCEEDED
    @PHP/standard/array/bug30266.php: SUCCEEDED
    @PHP/standard/array/bug30833.php: SUCCEEDED
    @PHP/standard/array/bug31158.php: SUCCEEDED
    @PHP/standard/array/bug31213.php: SUCCEEDED
    @PHP/standard/array/bug32021.php: SUCCEEDED
    @PHP/standard/array/bug33382.php: SUCCEEDED
    @PHP/standard/array/bug33989.php: SUCCEEDED
    @PHP/standard/array/bug34227.php: SUCCEEDED
    @PHP/standard/array/bug34982.php: SUCCEEDED
    @PHP/standard/array/bug35014.php: SUCCEEDED
    @PHP/standard/array/bug35022.php: SUCCEEDED
    @PHP/standard/array/bug35821.php: SUCCEEDED
    @PHP/standard/array/count_recursive.php: SUCCEEDED
    @PHP/standard/array/locale_sort.php: SUCCEEDED
    @PHP/standard/array/range.php: SUCCEEDED
    @PHP/standard/assert/assert.php: SUCCEEDED
    @PHP/standard/general_functions/001.php: SUCCEEDED
    @PHP/standard/general_functions/002.php: SUCCEEDED
    @PHP/standard/general_functions/003.php: SUCCEEDED
    @PHP/standard/general_functions/004.php: SUCCEEDED
    @PHP/standard/general_functions/005.php: SUCCEEDED
    @PHP/standard/general_functions/006.php: SUCCEEDED
    @PHP/standard/general_functions/007.php: SUCCEEDED
    @PHP/standard/general_functions/009.php: SUCCEEDED
    @PHP/standard/general_functions/bug25038.php: SUCCEEDED
    @PHP/standard/general_functions/bug27678.php: SUCCEEDED
    @PHP/standard/general_functions/bug29038.php: SUCCEEDED
    @PHP/standard/general_functions/bug31190.php: SUCCEEDED
    @PHP/standard/general_functions/bug32647.php: SUCCEEDED
    @PHP/standard/general_functions/bug35229.php: SUCCEEDED
    @PHP/standard/general_functions/is_resource.php: SUCCEEDED
    @PHP/standard/math/abs.php: SUCCEEDED
    @PHP/standard/math/bug24142.php: SUCCEEDED
    @PHP/standard/math/bug25694.php: SUCCEEDED
    @PHP/standard/math/bug27646.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    double(INF-INF)
    'd:-INF;'
    double(INF-INF)
    double(INF-INF)
    'd:INF;'
    double(INF-INF)
    double(NaNInfini)
    'd:NAN;'
    double(NaNInfini)
    double(-Infinity)
    'd:-INF;'
    double(-Infinity)
    double(Infinity)
    'd:INF;'
    double(Infinity)
    double(NaN)
    'd:NAN;'
    double(NaN)
    @PHP/standard/math/bug30069.php: SUCCEEDED
    @PHP/standard/math/bug30695.php: SUCCEEDED
    @PHP/standard/math/floorceil.php: SUCCEEDED
    @PHP/standard/math/hexdec.php: SUCCEEDED
    @PHP/standard/math/log.php: SUCCEEDED
    @PHP/standard/math/pow.php: SUCCEEDED
    @PHP/standard/math/round.php: SUCCEEDED
    @PHP/standard/reg/001.php: SUCCEEDED
    @PHP/standard/reg/002.php: SUCCEEDED
    @PHP/standard/reg/003.php: SUCCEEDED
    @PHP/standard/reg/004.php: SUCCEEDED
    @PHP/standard/reg/005.php: SUCCEEDED
    @PHP/standard/reg/006.php: SUCCEEDED
    @PHP/standard/reg/007.php: SUCCEEDED
    @PHP/standard/reg/008.php: SUCCEEDED
    @PHP/standard/reg/009.php: SUCCEEDED
    @PHP/standard/reg/010.php: SUCCEEDED
    @PHP/standard/reg/011.php: SUCCEEDED
    @PHP/standard/reg/012.php: SUCCEEDED
    @PHP/standard/reg/013.php: SUCCEEDED
    @PHP/standard/reg/014.php: SUCCEEDED
    @PHP/standard/reg/015.php: SUCCEEDED
    @PHP/standard/reg/016.php: SUCCEEDED
    @PHP/standard/serialize/001.php: SUCCEEDED
    @PHP/standard/serialize/002.php: SUCCEEDED
    @PHP/standard/serialize/003.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    d:100;
    double(100.0000000000)
    
    d:51999999999999996980101120;
    double(51999999999999996980101120.0000000000)
    
    d:8.9999999999999995265585574287341141808127531476202420890331268310546875E-9;
    double(0.0000000090)
    d:100;
    double(100.0000000000)
    
    d:5.2000000000000006E+25;
    double(52000000000000000000000000.0000000000)
    
    d:9.0000000000000045E-09;
    double(0.0000000090)
    @PHP/standard/serialize/004.php: SUCCEEDED
    @PHP/standard/serialize/005.php: SUCCEEDED
    @PHP/standard/serialize/006.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    'O:3:"´┐Ż":1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    object
    {
      '´┐Ż' => '´┐Ż'
    }
    'a:1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    array
    {
      '´┐Ż' => '´┐Ż'
    }
    'O:3:"´┐Ż":1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    object
    {
      'ďż˝' => '´┐Ż'
    }
    'a:1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    array
    {
      'ďż˝' => '´┐Ż'
    }
    @PHP/standard/serialize/bug14293.php: SUCCEEDED
    @PHP/standard/serialize/bug21957.php: SUCCEEDED
    @PHP/standard/serialize/bug23298.php: SUCCEEDED
    @PHP/standard/serialize/bug24063.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0.1 0.1
    0.01 0.01
    0.001 0.001
    0.0001 0.0001
    1.0E-5 1.0E-5
    1.0E-6 1.0E-6
    1.0E-7 1.0E-7
    1.0E-8 1.0E-8
    1.0E-9 1.0E-9
    0.1 0.1
    0.01 0.01
    0.001 0.001
    0.0001 0.0001
    1E-05 1E-05
    1E-06 1E-06
    1E-07 1E-07
    1E-08 1E-08
    1E-09 1E-09
    @PHP/standard/serialize/bug25378.php: SUCCEEDED
    @PHP/standard/serialize/bug26762.php: SUCCEEDED
    @PHP/standard/serialize/bug27469.php: SUCCEEDED
    @PHP/standard/serialize/bug28325.php: SUCCEEDED
    @PHP/standard/serialize/bug30234.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    FALSE
    FALSE
    __autoload(Autoload_Implements)
    object [invalid]
    FALSE
    FALSE
    FALSE
    FALSE
    TRUE
    __autoload(Autoload_Implements)
    object [invalid]
    FALSE
    FALSE
    TRUE
    @PHP/standard/serialize/bug31402.php: SUCCEEDED
    @PHP/standard/serialize/bug31442.php: SUCCEEDED
    @PHP/standard/strings/add-and-stripcslashes.php: SUCCEEDED
    @PHP/standard/strings/add-and-stripslashes.php: SUCCEEDED
    @PHP/standard/strings/basename.php: SUCCEEDED
    @PHP/standard/strings/bin2hex.php: SUCCEEDED
    @PHP/standard/strings/bug20108.php: SUCCEEDED
    @PHP/standard/strings/bug20169.php: SUCCEEDED
    @PHP/standard/strings/bug20261.php: SUCCEEDED
    @PHP/standard/strings/bug20927.php: SUCCEEDED
    @PHP/standard/strings/bug21338.php: SUCCEEDED
    @PHP/standard/strings/bug21453.php: SUCCEEDED
    @PHP/standard/strings/bug21730.php: SUCCEEDED
    @PHP/standard/strings/bug21744.php: SUCCEEDED
    @PHP/standard/strings/bug22008.php: SUCCEEDED
    @PHP/standard/strings/bug22187.php: SUCCEEDED
    @PHP/standard/strings/bug22224.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      0 => 
      object
      {
      }
      1 => 
      object
      {
      }
    }
    @PHP/standard/strings/bug22227.php: SUCCEEDED
    @PHP/standard/strings/bug22904.php: SUCCEEDED
    @PHP/standard/strings/bug23650.php: SUCCEEDED
    @PHP/standard/strings/bug23894.php: SUCCEEDED
    @PHP/standard/strings/bug24098.php: SUCCEEDED
    @PHP/standard/strings/bug24208.php: SUCCEEDED
    @PHP/standard/strings/bug24281.php: SUCCEEDED
    @PHP/standard/strings/bug25671.php: SUCCEEDED
    @PHP/standard/strings/bug25707.php: SUCCEEDED
    @PHP/standard/strings/bug26878.php: SUCCEEDED
    @PHP/standard/strings/bug26973.php: SUCCEEDED
    @PHP/standard/strings/bug27276.php: SUCCEEDED
    @PHP/standard/strings/bug27278.php: SUCCEEDED
    @PHP/standard/strings/bug27295.php: SUCCEEDED
    @PHP/standard/strings/bug27457.php: SUCCEEDED
    @PHP/standard/strings/bug27675.php: SUCCEEDED
    @PHP/standard/strings/bug28386.php: SUCCEEDED
    @PHP/standard/strings/bug33076.php: SUCCEEDED
    @PHP/standard/strings/chr_ord.php: SUCCEEDED
    @PHP/standard/strings/chunk_split.php: SUCCEEDED
    @PHP/standard/strings/count_chars.php: SUCCEEDED
    @PHP/standard/strings/crc32.php: SUCCEEDED
    @PHP/standard/strings/explode.php: SUCCEEDED
    @PHP/standard/strings/implode.php: SUCCEEDED
    @PHP/standard/strings/md5.php: SUCCEEDED
    @PHP/standard/strings/md5raw.php: SUCCEEDED
    @PHP/standard/strings/nl2br.php: SUCCEEDED
    @PHP/standard/strings/sha1.php: SUCCEEDED
    @PHP/standard/strings/sha1raw.php: SUCCEEDED
    @PHP/standard/strings/sprintf_f.php: SUCCEEDED
    @PHP/standard/strings/strcspn.php: SUCCEEDED
    @PHP/standard/strings/strings001.php: SUCCEEDED
    @PHP/standard/strings/strpos.php: SUCCEEDED
    @PHP/standard/strings/strrev.php: SUCCEEDED
    @PHP/standard/strings/strripos.php: SUCCEEDED
    @PHP/standard/strings/strrpos.php: SUCCEEDED
    @PHP/standard/strings/strspn.php: SUCCEEDED
    @PHP/standard/strings/strstr.php: SUCCEEDED
    @PHP/standard/strings/strtoupper.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    cfbfbdcfbfbdcfbfbd
    cfafbdcfafbdcfafbd
    @PHP/standard/strings/strtr.php: SUCCEEDED
    @PHP/standard/strings/strval.php: SUCCEEDED
    @PHP/standard/strings/str_repeat.php: SUCCEEDED
    @PHP/standard/strings/str_shuffle.php: SUCCEEDED
    @PHP/standard/strings/str_word_count.php: SUCCEEDED
    @PHP/standard/strings/substr_count.php: SUCCEEDED
    @PHP/standard/strings/substr_replace.php: SUCCEEDED
    @PHP/standard/strings/wordwrap.php: SUCCEEDED
    @PHP/standard/time/001.php: SUCCEEDED
    @PHP/standard/time/idate.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    U: 1043324459
    Y: 2003
    z: 22
    y: 3
    m: 1
    n: 1
    d: 23
    j: 23
    H: 13
    G: 13
    h: 1
    g: 1
    i: 20
    s: 59
    t: 31
    w: 4
    L: 0
    B: 556
    I: 0
    W: 4
    U: 1043324459
    Y: 2003
    z: 22
    y: 3
    m: 1
    n: 1
    d: 23
    j: 23
    H: 12
    G: 12
    h: 12
    g: 12
    i: 20
    s: 59
    t: 31
    w: 4
    L: 0
    B: 556
    I: 0
    W: 4
    @PHP/strings/001.php: SUCCEEDED
    @PHP/strings/002.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    fprintf test 1:abcde
    20
    printf test 1:simple string
    printf test 2:42
    printf test 3:3.333333
    printf test 4:3.3333333333
    printf test 5:2.50      
    printf test 6:2.50000000
    printf test 7:0000002.50
    printf test 8:<                 foo>
    printf test 9:<bar                 >
    printf test 10: 123456789012345
    printf test 10:<h´┐Żyesterettsjustitiarius>
    printf test 11: 123456789012345678901234567890
    printf test 11:<    h´┐Żyesterettsjustitiarius>
    printf test 12:-12.34
    printf test 13:  -12
    printf test 14:@
    printf test 15:10101010
    printf test 16:aa
    printf test 17:AA
    printf test 18:        10101010
    printf test 19:              aa
    printf test 20:              AA
    printf test 21:0000000010101010
    printf test 22:00000000000000aa
    printf test 23:00000000000000AA
    printf test 24:abcde
    printf test 25:gazonk
    printf test 26:2 1
    printf test 27:3 1 2
    printf test 28:02  1
    printf test 29:2   1
    printf test 30:x
    vprintf test 1:2   1
    fprintf test 1:abcde
    20
    printf test 1:simple string
    printf test 2:42
    printf test 3:3.333333
    printf test 4:3.3333333333
    printf test 5:2.50      
    printf test 6:2.50000000
    printf test 7:0000002.50
    printf test 8:<                 foo>
    printf test 9:<bar                 >
    printf test 10: 123456789012345
    printf test 10:<h�yesterettsjustitiarius>
    printf test 11: 123456789012345678901234567890
    printf test 11:<    h�yesterettsjustitiarius>
    printf test 12:-12.34
    printf test 13:  -12
    printf test 14:@
    printf test 15:10101010
    printf test 16:aa
    printf test 17:AA
    printf test 18:        10101010
    printf test 19:              aa
    printf test 20:              AA
    printf test 21:0000000010101010
    printf test 22:00000000000000aa
    printf test 23:00000000000000AA
    printf test 24:abcde
    printf test 25:gazonk
    printf test 26:2 1
    printf test 27:3 1 2
    printf test 28:02  1
    printf test 29:2   1
    printf test 30:x
    vprintf test 1:2   1
    @PHP/strings/bug22592.php: SUCCEEDED
    Arrays/array1.php: SUCCEEDED
    Arrays/array_diff_intersect.php: SUCCEEDED
    Arrays/array_diff_intersect2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Strict Standards: array_udiff() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 35
    Array
    (
        [0.5] => cr Object
            (
                [priv_member:cr:private] => 12
            )
    
        [0] => cr Object
            (
                [priv_member:cr:private] => 23
            )
    
    )
    
    Strict Standards: array_udiff_assoc() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 36
    Array
    (
        [0.1] => cr Object
            (
                [priv_member:cr:private] => 9
            )
    
        [0.5] => cr Object
            (
                [priv_member:cr:private] => 12
            )
    
        [0] => cr Object
            (
                [priv_member:cr:private] => 23
            )
    
    )
    
    Strict Standards: array_udiff_uassoc() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 37
    
    Strict Standards: array_udiff_uassoc() expects parameter 4 to be a valid callback, non-static method cr::comp_func_key() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 37
    Array
    (
        [0.1] => cr Object
            (
                [priv_member:cr:private] => 9
            )
    
        [0.5] => cr Object
            (
                [priv_member:cr:private] => 12
            )
    
        [0] => cr Object
            (
                [priv_member:cr:private] => 23
            )
    
    )
    Array
    (
        [b] => brown
        [c] => blue
        [0] => red
    )
    ------------------------------------
    
    Strict Standards: array_uintersect() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 40
    Array
    (
        [0.1] => cr Object
            (
                [priv_member:cr:private] => 9
            )
    
        [1] => cr Object
            (
                [priv_member:cr:private] => 4
            )
    
        [2] => cr Object
            (
                [priv_member:cr:private] => -15
            )
    
    )
    
    Strict Standards: array_uintersect_assoc() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 41
    Array
    (
        [1] => cr Object
            (
                [priv_member:cr:private] => 4
            )
    
        [2] => cr Object
            (
                [priv_member:cr:private] => -15
            )
    
    )
    
    Strict Standards: array_uintersect_uassoc() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 42
    
    Strict Standards: array_uintersect_uassoc() expects parameter 4 to be a valid callback, non-static method cr::comp_func_key() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 42
    Array
    (
        [1] => cr Object
            (
                [priv_member:cr:private] => 4
            )
    
        [2] => cr Object
            (
                [priv_member:cr:private] => -15
            )
    
    )
    Array
    (
        [a] => green
    )
    Array
    (
        [0.5] => cr Object
        (
            [priv_member:private] => 12
        )
    
        [0] => cr Object
        (
            [priv_member:private] => 23
        )
    
    )
    Array
    (
        [0.1] => cr Object
        (
            [priv_member:private] => 9
        )
    
        [0.5] => cr Object
        (
            [priv_member:private] => 12
        )
    
        [0] => cr Object
        (
            [priv_member:private] => 23
        )
    
    )
    Array
    (
        [0.1] => cr Object
        (
            [priv_member:private] => 9
        )
    
        [0.5] => cr Object
        (
            [priv_member:private] => 12
        )
    
        [0] => cr Object
        (
            [priv_member:private] => 23
        )
    
    )
    Array
    (
        [b] => brown
        [c] => blue
        [0] => red
    )
    ------------------------------------
    Array
    (
        [0.1] => cr Object
        (
            [priv_member:private] => 9
        )
    
        [1] => cr Object
        (
            [priv_member:private] => 4
        )
    
        [2] => cr Object
        (
            [priv_member:private] => -15
        )
    
    )
    Array
    (
        [1] => cr Object
        (
            [priv_member:private] => 4
        )
    
        [2] => cr Object
        (
            [priv_member:private] => -15
        )
    
    )
    Array
    (
        [1] => cr Object
        (
            [priv_member:private] => 4
        )
    
        [2] => cr Object
        (
            [priv_member:private] => -15
        )
    
    )
    Array
    (
        [a] => green
    )
    Arrays/array_diff_intersect3.php: SUCCEEDED
    Arrays/array_filter%20false%20entries%20%2322016.php: SUCCEEDED
    Arrays/array_map.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Array
    (
        [0] => Array
            (
                [0] => 1
                [1] => A
                [2] => 0
            )
    
        [1] => Array
            (
                [0] => 2
                [1] => B
                [2] => 0
            )
    
        [2] => Array
            (
                [0] => 3
                [1] => C
                [2] => 
            )
    
    )
    Array
    (
        [0] => 1 A 0
        [1] => 2 B 0
        [2] => 3 C 
    )
    Array
    (
        [A] => 2
        [10] => 3
    )
    Array
    (
        [0] => 1
        [1] => 2
        [2] => 3
    )
    Array
    (
        [0] => A
        [1] => B
        [2] => C
    )
    Array
    (
        [0] => 0
        [1] => 0
    )
    Array
    (
        [A] => 1
        [10] => 2
    )
    Array
    (
        [0] => Array
        (
            [0] => 1
            [1] => A
            [2] => 0
        )
    
        [1] => Array
        (
            [0] => 2
            [1] => B
            [2] => 0
        )
    
        [2] => Array
        (
            [0] => 3
            [1] => C
            [2] => 
        )
    
    )
    Array
    (
        [0] => 1 A 0
        [1] => 2 B 0
        [2] => 3 C 
    )
    Array
    (
        [A] => 2
        [10] => 3
    )
    Array
    (
        [0] => 1
        [1] => 2
        [2] => 3
    )
    Array
    (
        [0] => A
        [1] => B
        [2] => C
    )
    Array
    (
        [0] => x
        [1] => x
    )
    Array
    (
        [A] => 1
        [10] => 2
    )
    Arrays/array_merge_recursive.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Array
    (
        [color] => Array
            (
                [favorite] => Array
                    (
                        [0] => red
                        [1] => green
                    )
    
                [0] => blue
            )
    
        [0] => Array
            (
                [0] => 1
                [1] => 2
                [2] => 3
            )
    
        [q] => Array
            (
                [0] => 
                [1] => 
                [2] => x
            )
    
        [1] => 10
        [2] => Array
            (
                [0] => 4
                [1] => 5
                [2] => 6
            )
    
    )
    Array
    (
        [a] => Array
            (
                [0] => 1
                [1] => 2
                [2] => 3
                [3] => e
            )
    
    )
    Array
    (
        [a] => Array
            (
                [0] => 1
                [1] => 2
                [2] => 3
                [3] => e
            )
    
    )
    Array
    (
        [a] => 1
        [b] => 2
    )
    Array
    (
        [a] => xxx
        [b] => 2
    )
    Array
    (
        [a] => Array
            (
                [a] => Array
                    (
                        [a] => Array
     *RECURSION*
                    )
    
                [0] => 1
                [1] => 2
                [2] => 3
            )
    
    )
    Array
    (
        [a] => Array
            (
                [b] => Array
                    (
                        [0] => 1
                        [1] => 1
                    )
    
                [c] => 1
                [d] => Array
                    (
                        [0] => 2
                        [1] => 3
                    )
    
            )
    
    )
    Array
    (
        [a] => Array
            (
                [0] => 
                [1] => 
            )
    
    )
    Array
    (
        [a] => Array
            (
                [0] => 
                [1] => 
            )
    
    )
    Array
    (
        [color] => Array
        (
            [favorite] => Array
            (
                [0] => red
                [1] => green
            )
    
            [0] => blue
        )
    
        [0] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
        )
    
        [q] => Array
        (
            [0] => x
        )
    
        [1] => 10
        [2] => Array
        (
            [0] => 4
            [1] => 5
            [2] => 6
        )
    
    )
    Array
    (
        [a] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
            [3] => e
        )
    
    )
    Array
    (
        [a] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
            [3] => e
        )
    
    )
    Array
    (
        [a] => 1
        [b] => 2
    )
    Array
    (
        [a] => xxx
        [b] => 2
    )
    Array
    (
        [a] => Array
        (
            [a] => Array
            (
                [a] => Array [recursion]
    
    
            )
    
            [0] => 1
            [1] => 2
            [2] => 3
        )
    
    )
    Array
    (
        [a] => Array
        (
            [b] => Array
            (
                [0] => 1
                [1] => 1
            )
    
            [c] => 1
            [d] => Array
            (
                [0] => 2
                [1] => 3
            )
    
        )
    
    )
    Array
    (
        [a] => Array
        (
        )
    
    )
    Array
    (
        [a] => Array
        (
        )
    
    )
    Arrays/array_reduce1.php: SUCCEEDED
    Arrays/array_reduce2.php: SUCCEEDED
    Arrays/array_slice.php: SUCCEEDED
    Arrays/array_sumprod.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    float(8.3)
    float(0)
    int(6)
    int(6)
    float(4294967297)
    float(9.2233720282648E+18)
    bool(true)
    bool(false)
    float(-7.7)
    float(-38.4)
    int(6)
    int(6)
    int64(4294967297)
    int64(9223372028264841218)
    bool(true)
    bool(true)
    Arrays/array_unset_add.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    test1 (PassedByCopy):
    array(3) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(4)
    }
    array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(4)
      [3]=>
      int(5)
    }
    
    
    test2 (ReturnedByCopy):
    array(2) {
      [0]=>
      int(1)
      [1]=>
      int(2)
    }
    array(3) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [3]=>
      int(4)
    }
    
    
    test3 (Assigned):
    array(3) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(5)
    }
    test1 (PassedByCopy):
    array(3) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(4)
    }
    array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(4)
      [3]=>
      int(5)
    }
    
    
    test2 (ReturnedByCopy):
    array(2) {
      [0]=>
      int(1)
      [1]=>
      int(2)
    }
    array(3) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(4)
    }
    
    
    test3 (Assigned):
    array(3) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(5)
    }
    Arrays/array_unshift.php: SUCCEEDED
    Arrays/array_walk.php: SUCCEEDED
    Arrays/array_walk_recursive.php: SUCCEEDED
    Arrays/multisort.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    bool(true)
    Array
    (
        [0] => Array
            (
                [0] => 2
                [1] => 8
                [2] => 2
                [3] => 2
                [4] => 8
                [5] => 8
            )
    
        [1] => Array
            (
                [0] => 7
                [1] => 2
                [2] => 7
                [3] => 4
                [4] => 8
                [5] => 1
            )
    
        [2] => Array
            (
                [0] => 1
                [1] => 4
                [2] => 8
                [3] => 0
                [4] => 6
                [5] => 2
            )
    
        [3] => Array
            (
                [0] => 8
                [1] => 4
                [2] => 1
                [3] => 0
                [4] => 7
                [5] => 1
            )
    
        [4] => Array
            (
                [0] => 20
                [1] => 2
                [2] => 12
                [3] => 11
                [4] => 10
                [5] => 1
            )
    
    )
    Array
    (
        [0] => Array
            (
                [0] => 10
                [1] => 100
                [2] => 100
                [3] => a
            )
    
        [1] => Array
            (
                [0] => 1
                [1] => 3
                [2] => 2
                [3] => 1
            )
    
    )
    Array
    (
        [0] => 10
        [1] => a
        [2] => 100
        [3] => 100
    )
    Array
    (
        [0] => 1
        [1] => 1
        [2] => 2
        [3] => 3
    )
    bool(true)
    Array
    (
        [0] => Array
        (
            [0] => 2
            [1] => 8
            [2] => 2
            [3] => 2
            [4] => 8
            [5] => 8
        )
    
        [1] => Array
        (
            [0] => 7
            [1] => 2
            [2] => 7
            [3] => 4
            [4] => 8
            [5] => 1
        )
    
        [2] => Array
        (
            [0] => 1
            [1] => 4
            [2] => 8
            [3] => 0
            [4] => 6
            [5] => 2
        )
    
        [3] => Array
        (
            [0] => 8
            [1] => 4
            [2] => 1
            [3] => 0
            [4] => 7
            [5] => 1
        )
    
        [4] => Array
        (
            [0] => 20
            [1] => 2
            [2] => 12
            [3] => 11
            [4] => 10
            [5] => 1
        )
    
    )
    Array
    (
        [0] => Array
        (
            [0] => 10
            [1] => 100
            [2] => 100
            [3] => a
        )
    
        [1] => Array
        (
            [0] => 1
            [1] => 3
            [2] => 2
            [3] => 1
        )
    
    )
    Array
    (
        [0] => 10
        [1] => a
        [2] => 100
        [3] => 100
    )
    Array
    (
        [0] => 1
        [1] => 1
        [2] => 2
        [3] => 3
    )
    Arrays/multisort_empty.php: SUCCEEDED
    Arrays/nonarray%20access%20%2322019.php: SUCCEEDED
    Arrays/optimizations.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    3
    4
    5
    a
    b
    c
    
    Warning: strtolower() expects parameter 1 to be string, array given in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 15
    
    cablo
    3
    4
    5
    a
    b
    c
    array
    cablo
    Arrays/recursion.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    f1:
    array(2) {
      ["a"]=>
      array(5) {
        ["a"]=>
        &array(3) {
          ["a"]=>
          &array(3) {
            ["a"]=>
            *RECURSION*
            [0]=>
            string(1) "y"
            [1]=>
            string(1) "z"
          }
          [0]=>
          string(1) "y"
          [1]=>
          string(1) "z"
        }
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        string(1) "x"
      }
      [0]=>
      string(1) "w"
    }
    f2:
    array(1) {
      ["A"]=>
      &array(2) {
        ["a"]=>
        &array(2) {
          ["a"]=>
          *RECURSION*
          [0]=>
          string(1) "z"
        }
        [0]=>
        string(1) "z"
      }
    }
    f3:
    array(2) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) {
          [0]=>
          *RECURSION*
          [1]=>
          string(1) "z"
        }
        [1]=>
        string(1) "z"
      }
      [1]=>
      string(1) "z"
    }
    f4:
    
    Warning: array_merge_recursive(): recursion detected in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 37
    array(1) {
      ["a"]=>
      &array(3) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
      }
    }
    f5:
    array(1) {
      ["a"]=>
      array(6) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        int(1)
        [4]=>
        int(2)
        [5]=>
        int(3)
      }
    }
    f6:
    array(1) {
      ["a"]=>
      array(2) {
        [0]=>
        string(2) "xx"
        [1]=>
        int(2)
      }
    }
    f7:
    array(1) {
      ["a"]=>
      array(1) {
        ["a"]=>
        array(1) {
          ["a"]=>
          &array(1) {
            ["a"]=>
            &array(1) {
              ["a"]=>
              *RECURSION*
            }
          }
        }
      }
    }
    f1:
    array(2) {
      ["a"]=>
      array(5) {
        ["a"]=>
        &array(3) {
          ["a"]=>
          &array(3) [recursion]
          [0]=>
          string(1) "y"
          [1]=>
          string(1) "z"
        }
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        string(1) "x"
      }
      [0]=>
      string(1) "w"
    }
    f2:
    array(1) {
      ["A"]=>
      &array(2) {
        ["a"]=>
        &array(2) [recursion]
        [0]=>
        string(1) "z"
      }
    }
    f3:
    array(2) {
      [0]=>
      &array(2) [recursion]
      [1]=>
      string(1) "z"
    }
    f4:
    array(1) {
      ["a"]=>
      array(6) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        int(1)
        [4]=>
        int(2)
        [5]=>
        int(3)
      }
    }
    f5:
    array(1) {
      ["a"]=>
      array(6) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        int(1)
        [4]=>
        int(2)
        [5]=>
        int(3)
      }
    }
    f6:
    array(1) {
      ["a"]=>
      array(2) {
        [0]=>
        string(2) "xx"
        [1]=>
        int(2)
      }
    }
    f7:
    array(1) {
      ["a"]=>
      &array(1) {
        ["a"]=>
        &array(1) [recursion]
      }
    }
    Arrays/sort.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    sort regular:
    Array
    (
        [0] => 0
        [1] => 1
        [2] => 1
        [3] => 8
        [4] => 0x10
        [5] => 10x
        [6] => 20x
        [7] => ach0
        [8] => add1
        [9] => x10
        [10] => x2
    )
    
    sort numeric:
    Array
    (
        [0] => add1
        [1] => x2
        [2] => 0x10
        [3] => ach0
        [4] => 0
        [5] => x10
        [6] => 1
        [7] => 1
        [8] => 8
        [9] => 10x
        [10] => 20x
    )
    
    sort string:
    Array
    (
        [0] => 0
        [1] => 0x10
        [2] => 1
        [3] => 1
        [4] => 10x
        [5] => 20x
        [6] => 8
        [7] => ach0
        [8] => add1
        [9] => x10
        [10] => x2
    )
    
    sort locale:
    Array
    (
        [0] => 0
        [1] => 0x10
        [2] => 1
        [3] => 1
        [4] => 10x
        [5] => 20x
        [6] => 8
        [7] => ach0
        [8] => add1
        [9] => x10
        [10] => x2
    )
    
    ksort regular:
    Array
    (
        [x] => 8
        [z] => 1
        [0] => x10
        [1] => 10x
        [2b] => 1
        [2] => 20x
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [10a] => 0
    )
    
    ksort numeric:
    Array
    (
        [x] => 8
        [z] => 1
        [0] => x10
        [1] => 10x
        [2b] => 1
        [2] => 20x
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [10a] => 0
    )
    
    ksort string:
    Array
    (
        [0] => x10
        [1] => 10x
        [10a] => 0
        [2] => 20x
        [2b] => 1
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [x] => 8
        [z] => 1
    )
    
    ksort locale:
    Array
    (
        [0] => x10
        [1] => 10x
        [10a] => 0
        [2] => 20x
        [2b] => 1
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [x] => 8
        [z] => 1
    )
    
    asort regular:
    Array
    (
        [10a] => 0
        [2b] => 1
        [z] => 1
        [x] => 8
        [4] => 0x10
        [1] => 10x
        [2] => 20x
        [5] => ach0
        [6] => add1
        [0] => x10
        [3] => x2
    )
    
    asort numeric:
    Array
    (
        [6] => add1
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [10a] => 0
        [0] => x10
        [z] => 1
        [2b] => 1
        [x] => 8
        [1] => 10x
        [2] => 20x
    )
    
    asort string:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [z] => 1
        [2b] => 1
        [1] => 10x
        [2] => 20x
        [x] => 8
        [5] => ach0
        [6] => add1
        [0] => x10
        [3] => x2
    )
    
    asort locale:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [z] => 1
        [2b] => 1
        [1] => 10x
        [2] => 20x
        [x] => 8
        [5] => ach0
        [6] => add1
        [0] => x10
        [3] => x2
    )
    
    rsort regular:
    Array
    (
        [0] => x2
        [1] => x10
        [2] => add1
        [3] => ach0
        [4] => 20x
        [5] => 10x
        [6] => 0x10
        [7] => 8
        [8] => 1
        [9] => 1
        [10] => 0
    )
    
    rsort numeric:
    Array
    (
        [0] => 20x
        [1] => 10x
        [2] => 8
        [3] => 1
        [4] => 1
        [5] => ach0
        [6] => add1
        [7] => 0x10
        [8] => x2
        [9] => x10
        [10] => 0
    )
    
    rsort string:
    Array
    (
        [0] => x2
        [1] => x10
        [2] => add1
        [3] => ach0
        [4] => 8
        [5] => 20x
        [6] => 10x
        [7] => 1
        [8] => 1
        [9] => 0x10
        [10] => 0
    )
    
    rsort locale:
    Array
    (
        [0] => x2
        [1] => x10
        [2] => add1
        [3] => ach0
        [4] => 8
        [5] => 20x
        [6] => 10x
        [7] => 1
        [8] => 1
        [9] => 0x10
        [10] => 0
    )
    
    natsort:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [2b] => 1
        [z] => 1
        [x] => 8
        [1] => 10x
        [2] => 20x
        [5] => ach0
        [6] => add1
        [3] => x2
        [0] => x10
    )
    sort regular:
    Array
    (
        [0] => 0x10
        [1] => 10x
        [2] => 20x
        [3] => ach0
        [4] => add1
        [5] => x10
        [6] => 0
        [7] => x2
        [8] => 1
        [9] => 1
        [10] => 8
    )
    
    sort numeric:
    Array
    (
        [0] => x10
        [1] => 0
        [2] => x2
        [3] => ach0
        [4] => add1
        [5] => 1
        [6] => 1
        [7] => 8
        [8] => 10x
        [9] => 0x10
        [10] => 20x
    )
    
    sort string:
    Array
    (
        [0] => 0
        [1] => 0x10
        [2] => 1
        [3] => 1
        [4] => 10x
        [5] => 20x
        [6] => 8
        [7] => ach0
        [8] => add1
        [9] => x10
        [10] => x2
    )
    
    sort locale:
    Array
    (
        [0] => 0
        [1] => 0x10
        [2] => 1
        [3] => 1
        [4] => 10x
        [5] => 20x
        [6] => 8
        [7] => add1
        [8] => ach0
        [9] => x10
        [10] => x2
    )
    
    ksort regular:
    Array
    (
        [x] => 8
        [z] => 1
        [0] => x10
        [1] => 10x
        [2] => 20x
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [10a] => 0
        [2b] => 1
    )
    
    ksort numeric:
    Array
    (
        [x] => 8
        [z] => 1
        [0] => x10
        [1] => 10x
        [2b] => 1
        [2] => 20x
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [10a] => 0
    )
    
    ksort string:
    Array
    (
        [0] => x10
        [1] => 10x
        [10a] => 0
        [2] => 20x
        [2b] => 1
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [x] => 8
        [z] => 1
    )
    
    ksort locale:
    Array
    (
        [0] => x10
        [1] => 10x
        [10a] => 0
        [2] => 20x
        [2b] => 1
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [x] => 8
        [z] => 1
    )
    
    asort regular:
    Array
    (
        [4] => 0x10
        [1] => 10x
        [2] => 20x
        [5] => ach0
        [6] => add1
        [0] => x10
        [10a] => 0
        [3] => x2
        [z] => 1
        [2b] => 1
        [x] => 8
    )
    
    asort numeric:
    Array
    (
        [0] => x10
        [10a] => 0
        [3] => x2
        [5] => ach0
        [6] => add1
        [z] => 1
        [2b] => 1
        [x] => 8
        [1] => 10x
        [4] => 0x10
        [2] => 20x
    )
    
    asort string:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [z] => 1
        [2b] => 1
        [1] => 10x
        [2] => 20x
        [x] => 8
        [5] => ach0
        [6] => add1
        [0] => x10
        [3] => x2
    )
    
    asort locale:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [z] => 1
        [2b] => 1
        [1] => 10x
        [2] => 20x
        [x] => 8
        [6] => add1
        [5] => ach0
        [0] => x10
        [3] => x2
    )
    
    rsort regular:
    Array
    (
        [0] => 8
        [1] => 1
        [2] => 1
        [3] => x2
        [4] => x10
        [5] => 0
        [6] => add1
        [7] => ach0
        [8] => 20x
        [9] => 10x
        [10] => 0x10
    )
    
    rsort numeric:
    Array
    (
        [0] => 20x
        [1] => 0x10
        [2] => 10x
        [3] => 8
        [4] => 1
        [5] => 1
        [6] => x10
        [7] => 0
        [8] => x2
        [9] => ach0
        [10] => add1
    )
    
    rsort string:
    Array
    (
        [0] => x2
        [1] => x10
        [2] => add1
        [3] => ach0
        [4] => 8
        [5] => 20x
        [6] => 10x
        [7] => 1
        [8] => 1
        [9] => 0x10
        [10] => 0
    )
    
    rsort locale:
    Array
    (
        [0] => x2
        [1] => x10
        [2] => ach0
        [3] => add1
        [4] => 8
        [5] => 20x
        [6] => 10x
        [7] => 1
        [8] => 1
        [9] => 0x10
        [10] => 0
    )
    
    natsort:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [z] => 1
        [2b] => 1
        [x] => 8
        [1] => 10x
        [2] => 20x
        [5] => ach0
        [6] => add1
        [3] => x2
        [0] => x10
    )
    Arrays/usort.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    Array
    (
        [0] => 10
        [1] => 9
        [2] => 8
        [3] => 7
        [4] => 6
        [5] => 5
        [6] => 4
        [7] => 3
        [8] => 2
        [9] => 1
    )
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Array
    (
        [0] => 10
        [1] => 9
        [2] => 8
        [3] => 7
        [4] => 6
        [5] => 5
        [6] => 4
        [7] => 3
        [8] => 2
        [9] => 1
    )
    Arrays/lazy_copy/001.php: SUCCEEDED
    Arrays/lazy_copy/002.php: SUCCEEDED
    Arrays/lazy_copy/003.php: SUCCEEDED
    Arrays/lazy_copy/004.php: SUCCEEDED
    Arrays/lazy_copy/005.php: SUCCEEDED
    Arrays/lazy_copy/006.php: SUCCEEDED
    Bugs/class_incompletepart.php: SUCCEEDED
    Bugs/division-by-zero.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    DIVISION
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 6
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 8
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 10
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 12
    bool(false)
    MODULO
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 16
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 18
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 20
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 22
    bool(false)
    DIVISION
    bool(false)
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt at expression on line 10, column 2.
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt at expression on line 12, column 2.
    bool(false)
    MODULO
    bool(false)
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt at expression on line 20, column 2.
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt at expression on line 22, column 2.
    bool(false)
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt(6,10): warning PHP0150: Division by zero
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt(8,9): warning PHP0150: Division by zero
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt(16,10): warning PHP0150: Division by zero
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt(18,9): warning PHP0150: Division by zero
    
    Bugs/function-in-unknown-class.php: SUCCEEDED
    Bugs/if_if.php: SUCCEEDED
    Bugs/is_a_null_value.php: SUCCEEDED
    Bugs/preg-named-groups.php: SUCCEEDED
    Bugs/preg-replace-advanced.php: SUCCEEDED
    Bugs/preg-replace-range.php: SUCCEEDED
    Bugs/preg-replace.php: SUCCEEDED
    Bugs/preg-this-dynamic.php: FAILED
    Script hung upNo errorsSuccess
    Expected test outputReal script output
    Unhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---> PHP.Core.Debug+AssertException: Assertion failed: 
       at PHP.Core.Debug.Fail(String message)
       at PHP.Core.Debug.Assert(Boolean condition)
       at PHP.Core.RelativePath.ParseCanonical(String relativePath)
       at PHP.Core.Emit.TransientAssemblyBuilder.Build(String sourceCode, SourceCodeDescriptor descriptor, EvalKinds kind, CompilationContext context, ScriptContext scriptContext, DTypeDesc referringType, NamingContext namingContext, Boolean completeSource)
       at PHP.Core.DynamicCode.EvalInternal(String prefix, String code, String suffix, EvalKinds kind, ScriptContext scriptContext, Dictionary`2 localVariables, DObject self, DTypeDesc referringType, SourceCodeDescriptor descriptor, Boolean entireFile, NamingContext namingContext)
       at PHP.Core.DynamicCode.Eval(String code, Boolean synthetic, ScriptContext context, Dictionary`2 definedVariables, DObject self, DTypeDesc referringType, String callerRelativeSourcePath, Int32 line, Int32 column, Int32 containerId, NamingContext namingContext)
       at PHP.Library.PerlRegExp.Evaluator.ReplaceCodeExecute(Match m)
       at System.Text.RegularExpressions.RegexReplacement.Replace(MatchEvaluator evaluator, Regex regex, String input, Int32 count, Int32 startat)
       at System.Text.RegularExpressions.Regex.Replace(String input, MatchEvaluator evaluator, Int32 count)
       at PHP.Library.PerlRegExp.ReplaceInternal(DObject self, Dictionary`2 definedVariables, PerlRegExpConverter converter, PhpCallback callback, String str, Int32 limit, SourceCodeDescriptor sourceCodeDesc, Int32& count)
       at PHP.Library.PerlRegExp.SimpleReplace(DObject self, Dictionary`2 definedVariables, Object pattern, String replacement, PhpCallback callback, Object data, Int32 limit, SourceCodeDescriptor descriptor, Int32& count)
       at PHP.Library.PerlRegExp.Replace(ScriptContext context, DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, PhpCallback callback, Object data, Int32 limit, Int32& count)
       at PHP.Library.PerlRegExp.Replace(ScriptContext context, DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, Object data)
       at PHP.Dynamic.PhpNetClassLibrary.preg_replace(Object , PhpStack )
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <__input.txt>.a.a(ScriptContext ) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt:line 16
       at <__input.txt>.a.<Mediator>(ScriptContext )
       at <__input.txt>.a.a(Object instance, PhpStack stack)
       at <__input.txt>.<Script>.<Main>(ScriptContext <context>, Dictionary`2 <locals>, DObject <self>, DTypeDesc <includer>, Boolean <request>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt:line 19
       at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)
       at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)
       --- End of inner exception stack trace ---
       at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)
       at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)
       at <Global>.Run(String[] )
    
    Bugs/preg-this-dynamic2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    foo: ahoj
    foo: lidi
    foo: rozkladame
    foo: ahoj
    foo: lidi
    foo: rozkladame
    foo: ahoj
    foo: lidi
    foo: rozkladame
    
    Notice: Undefined variable: this.
    
    Error: Call to a member function foo() on a non-object.
    Bugs/preg-this.php: SUCCEEDED
    Bugs/preg-ungreedy-bugs.php: SUCCEEDED
    Bugs/preg-unkn.php: SUCCEEDED
    Bugs/trigger_error%20line%20number%20%232787.php: SUCCEEDED
    CLR/BaseTypes.php: SUCCEEDED
    CLR/ClrEvent.php: SUCCEEDED
    CLR/ConditionalDecls.php: SUCCEEDED
    CLR/ConditionalDecls2.php: SUCCEEDED
    CLR/foreach.php: SUCCEEDED
    CLR/handle_enum.php: SUCCEEDED
    CLR/Inheritance1.php: FAILED
    Phalanger misbehaviour while compiling [file] sectionSee belowSuccess
    Expected test outputReal script output
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(3,2): error PHP2031: Circular interface inheritance dependency involving 'I4' and 'I1'
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(6,2): (related location)
    
    CLR/Inheritance2.php: FAILED
    Phalanger misbehaviour while compiling [file] sectionSee belowSuccess
    Expected test outputReal script output
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(3,2): error PHP2031: Circular interface inheritance dependency involving 'J4' and 'J1'
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(6,2): (related location)
    
    CLR/Inheritance3.php: FAILED
    Phalanger misbehaviour while compiling [file] sectionSee belowSuccess
    Expected test outputReal script output
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(3,2): error PHP2031: Circular interface inheritance dependency involving 'J5' and 'J5'
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(3,2): (related location)
    
    CLR/Inheritance4.php: FAILED
    Phalanger misbehaviour while compiling [file] sectionSee belowSuccess
    Expected test outputReal script output
    error PHP2007: Internal error! 
    Please, report this bug via http://www.codeplex.com/WorkItem/List.aspx?ProjectName=Phalanger.
    Additional information: 
    Could not load type '<__input.txt>.J`1' from assembly 'Inheritance4_file, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' because it has recursive generic definition.
       at System.Reflection.Emit.TypeBuilder.TermCreateClass(RuntimeModule module, Int32 tk, ObjectHandleOnStack type)
       at System.Reflection.Emit.TypeBuilder.CreateTypeNoLock()
       at System.Reflection.Emit.TypeBuilder.CreateType()
       at PHP.Core.Reflection.PhpType.Bake()
       at PHP.Core.Reflection.ScriptCompilationUnit.Bake()
       at PHP.Core.Reflection.InclusionGraphBuilder.EmitAllUnits(CodeGenerator codeGenerator)
       at PHP.Core.Emit.ScriptAssemblyBuilder.CompileScripts(IEnumerable`1 sourceFiles, String duckPath, String duckNamespace, CompilationContext context)
       at PHP.Core.Emit.ScriptAssemblyBuilder.Build(IEnumerable`1 sourceFiles, CompilationContext context)
       at PHP.Core.ApplicationCompiler.Compile(ApplicationContext applicationContext, CompilerConfiguration config, ErrorSink errorSink, CompilationParameters ps)
    
    
    CLR/Inheritance5.php: SUCCEEDED
    CLR/Inheritance6.php: SUCCEEDED
    CLR/Inheritance7.php: SUCCEEDED
    CLR/Inheritance8.php: SUCCEEDED
    CLR/Inheritance9.php: FAILED
    Phalanger misbehaviour while compiling [file] sectionSee belowSuccess
    Expected test outputReal script output
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(14,2): error PHP1018: Class 'D' doesn't implement abstract method I::f()
    
    CLR/Lambdas.php: FAILED
    Phalanger misbehaviour while compiling [file] sectionSee belowCompile error
    Expected test outputReal script output
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(4,3): error PHP1120: Unknown custom attribute; neither of types 'AttributeUsage' and 'AttributeUsageAttribute' exists
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(17,3): error PHP1120: Unknown custom attribute; neither of types 'MyAttribute' and 'MyAttributeAttribute' exists
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(27,22): error PHP1120: Unknown custom attribute; neither of types 'MyAttribute' and 'MyAttributeAttribute' exists
    
    CLR/NameResolving.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    bool(false)
    bool(true)
    object(Directory)(2)
    {
      ["handle"] => NULL
      ["path"] => NULL
    }
    bool(false)
    
    Error: Class 'Dictionary' not found in D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt at expression on line 12, column 4.
    Compiler/abstracts.php: SUCCEEDED
    Compiler/aliased%20assign%20add.php: SUCCEEDED
    Compiler/assignments.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ---1---1float(-1.5)
    float(2.5)
    float(0.83333333333333)
    int(6)
    int(8)
    ---2---2float(8.8333333333333)
    float(8.8333333333333)
    float(8.8333333333333)
    int(8)
    int(8)
    ---3---3---4---4---5---5array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [1]=>
      array(1) {
        [2]=>
        array(1) {
          [3]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    ---6---6array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "u"
    }
    array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "v"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    ---7---7array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    ---8---8
    ---1---1float(-1.5)
    float(2.5)
    float(0.833333333333333)
    int(6)
    int(8)
    ---2---2float(8.83333333333333)
    float(8.83333333333333)
    float(8.83333333333333)
    int(8)
    int(8)
    ---3---3---4---4---5---5array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [1]=>
      array(1) {
        [2]=>
        array(1) {
          [3]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    ---6---6array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "u"
    }
    array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "v"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    ---7---7array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    ---8---8
    Compiler/assign_in_call.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    g1:
    f(x)
    u(x)
    'x'
    
    g2:
    f(x)
    u(x)
    'b'
    
    g3:
    f(x)
    u(x)
    'b'
    
    g4:
    f(x)
    u(x)
    'b'
    
    g5:
    f()
    u()
    integer(1)
    
    g6:
    f(3)
    u(3)
    integer(3)
    
    g7:
    f(2)
    u(10)
    integer(10)
    
    g8:
    f(1)
    f(1)
    f(1)
    u(1)
    u()
    u(1)
    
    g9:
    known:
    __get(p) = 0
    __set(p,1)
    f(1)
    unknown:
    __get(p) = 1
    __set(p,3)
    u(3)
    
    g10:
    Done.
    g1:
    f(x)
    u(x)
    'x'
    
    g2:
    f(x)
    u(x)
    'b'
    
    g3:
    f(x)
    u(x)
    'b'
    
    g4:
    f(x)
    u(x)
    'b'
    
    g5:
    f()
    u()
    integer(1)
    
    g6:
    f(3)
    u(3)
    integer(3)
    
    g7:
    f(2)
    u(10)
    integer(10)
    
    g8:
    f(1)
    f(1)
    f(1)
    u(1)
    u()
    u(1)
    
    g9:
    known:
    __get(p) = 0
    __set(p,1)
    __get(p) = 1
    f(1)
    unknown:
    __get(p) = 1
    __set(p,3)
    __get(p) = 3
    u(3)
    
    g10:
    Done.
    Compiler/auto_globals_001.php: SUCCEEDED
    Compiler/auto_globals_002.php: SUCCEEDED
    Compiler/auto_globals_003.php: SUCCEEDED
    Compiler/break_in_global_code.php: SUCCEEDED
    Compiler/chaining_test.php: SUCCEEDED
    Compiler/chain_ending_by_string_index.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        string(1) "f"
      }
    }
    array(1) {
      [0]=>
      string(4) "xubu"
    }
    object(C)#1 (1) {
      ["f"]=>
      string(4) "kuxu"
    }
    string(5) "helxo"
    string(5) "helxo"
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        string(1) "f"
      }
    }
    array(1) {
      [0]=>
      string(4) "bubu"
    }
    
    Warning: A string item used as a reference in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt at expression on line 19, column 1.
    object(C)(1) {
      ["f"]=>
      string(4) "kuku"
    }
    
    Warning: A string item used as a reference in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt at expression on line 25, column 1.
    string(5) "hello"
    
    Warning: A string item used as a reference in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt at expression on line 31, column 1.
    string(5) "hello"
    Compiler/continue_in_global_code.php: SUCCEEDED
    Compiler/deep_copy.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array(1) {
      [0]=>
      &array(1) {
        [0]=>
        &array(1) {
          [0]=>
          *RECURSION*
        }
      }
    }
    array(1) {
      [0]=>
      &array(1) {
        [0]=>
        &array(1) {
          [0]=>
          *RECURSION*
        }
      }
    }
    array(2) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) {
          [0]=>
          *RECURSION*
          [1]=>
          int(1)
        }
        [1]=>
        int(1)
      }
      [1]=>
      int(1)
    }
    array(1) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) {
          [0]=>
          *RECURSION*
          [1]=>
          int(1)
        }
        [1]=>
        int(1)
      }
    }
    array(1) {
      [0]=>
      &array(1) [recursion]
    }
    array(1) {
      [0]=>
      &array(1) {
        [0]=>
        &array(1) [recursion]
      }
    }
    array(2) {
      [0]=>
      &array(2) [recursion]
      [1]=>
      int(1)
    }
    array(1) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) [recursion]
        [1]=>
        int(1)
      }
    }
    Compiler/deep_copy_refbox.php: SUCCEEDED
    Compiler/expr_init.php: SUCCEEDED
    Compiler/foreach1.php: SUCCEEDED
    Compiler/foreach_arrays.php: SUCCEEDED
    Compiler/for_loop.php: SUCCEEDED
    Compiler/function_002.php: SUCCEEDED
    Compiler/function_003.php: SUCCEEDED
    Compiler/function_004.php: SUCCEEDED
    Compiler/function_call.php: SUCCEEDED
    Compiler/func_get_args.php: SUCCEEDED
    Compiler/if_statement.php: SUCCEEDED
    Compiler/indirect_001.php: SUCCEEDED
    Compiler/indirect_002.php: SUCCEEDED
    Compiler/indirect_003.php: SUCCEEDED
    Compiler/indirect_004.php: SUCCEEDED
    Compiler/indirect_005.php: SUCCEEDED
    Compiler/indirect_007.php: SUCCEEDED
    Compiler/indirect_global.php: SUCCEEDED
    Compiler/inheritance.php: SUCCEEDED
    Compiler/inheritance2.php: SUCCEEDED
    Compiler/isset_unset_001.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Testing x in global code:  <br>
    1 <br>
     <br>
    Testing x (object) in optimized function:  <br>
    1 <br>
     <br>
    Testing x (PhpReference) in optimized function:  <br>
    1 <br>
     <br>
    
    Notice: Undefined variable: y in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt on line 29
    Testing $$x (created at runtime) in optimized function:  <br>
    1 <br>
    Testing x in global code:  <br>
    1 <br>
     <br>
    Testing x (object) in optimized function:  <br>
    1 <br>
     <br>
    Testing x (PhpReference) in optimized function:  <br>
    1 <br>
     <br>
    Testing $$x (created at runtime) in optimized function:  <br>
    1 <br>
    Compiler/list%20%2326681.php: SUCCEEDED
    Compiler/new_array_item_assignadd.php: SUCCEEDED
    Compiler/null_hints.php: SUCCEEDED
    Compiler/pure_create_function.php: SUCCEEDED
    Compiler/pure_function_exists.php: SUCCEEDED
    Compiler/pure_math_str.php: SUCCEEDED
    Compiler/static_call.php: SUCCEEDED
    Compiler/switch.php: SUCCEEDED
    Compiler/ternary_ex.php: SUCCEEDED
    Compiler/ternary_short.php: SUCCEEDED
    Compiler/this%20call.php: SUCCEEDED
    Compiler/typehint_check.php: SUCCEEDED
    Compiler/__call.php: SUCCEEDED
    Compiler/Inclusions/include2.php: SUCCEEDED
    Compiler/Inclusions/include3.php: SUCCEEDED
    Compiler/Inclusions/include6.php: SUCCEEDED
    Compiler/Inclusions/include_test.php: SUCCEEDED
    Compiler/Inclusions/script.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t01.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t02.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t03.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t04.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t05.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t08.php: SUCCEEDED
    Compiler/PseudoConst/parent.php: SUCCEEDED
    Compiler/PseudoConst/parent2.php: SUCCEEDED
    Compiler/PseudoConst/self.php: SUCCEEDED
    Compiler/PseudoConst/t01.php: SUCCEEDED
    Compiler/PseudoConst/t02.php: SUCCEEDED
    Compiler/PseudoConst/t03.php: SUCCEEDED
    Compiler/PseudoConst/t04.php: SUCCEEDED
    Compiler/PseudoConst/t05.php: SUCCEEDED
    Compiler/PseudoConst/t06.php: SUCCEEDED
    Compiler/PseudoConst/t07.php: SUCCEEDED
    Compiler/PseudoConst/t08.php: SUCCEEDED
    Compiler/PseudoConst/t09.php: SUCCEEDED
    Compiler/PseudoConst/t10.php: SUCCEEDED
    Compiler/PseudoConst/t11.php: SUCCEEDED
    Compiler/PseudoConst/_class_.php: SUCCEEDED
    Compiler/PseudoConst/_dir_.php: SUCCEEDED
    Compiler/PseudoConst/_function_.php: SUCCEEDED
    Compiler/References/array_argument.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(2)
        [1]=>
        int(3)
      }
    }
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    Compiler/References/array_local.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(2)
        [1]=>
        int(3)
      }
    }
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    Compiler/References/array_ret_argument.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(2)
        [1]=>
        int(3)
      }
    }
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    Compiler/References/array_ret_argument2.php: SUCCEEDED
    Compiler/References/deepcopy.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <br/><br/>globalobjects: array(2) {
      [0]=>
      int(1)
      [1]=>
      int(7)
    }
    <br/><br/>globalobjects: array(2) {
      [0]=>
      int(1)
      [1]=>
      &int(7)
    }
    Compiler/References/explicitclear.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Construyendo Y
    call foo12Destruyendo Y
    3object(X)#1 (2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      int(54)
    }
    array(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      string(10) "Init Value"
    }
    x: object(X)#1 (2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      int(1004)
    }
    <br/>checkpoint array(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      int(54)
    }
    Construyendo Y
    call foo123object(X)(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      &int(54)
    }
    array(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      &int(54)
    }
    x: object(X)(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      &int(1004)
    }
    <br/>checkpoint array(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      &int(1004)
    }
    Destruyendo Y
    Compiler/References/field_argument.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: int(7)
    <br/><br/>checkpoint array(1) {
      ["objects"]=>
      int(8)
    }
    x: int(7)
    <br/><br/>checkpoint array(1) {
      ["objects"]=>
      &int(7)
    }
    Compiler/References/field_local.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: object(X)#1 (1) {
      ["objects"]=>
      int(25)
    }
    <br/>checkpoint array(1) {
      ["objects"]=>
      int(7)
    }
    x: object(X)(1) {
      ["objects"]=>
      &int(25)
    }
    <br/>checkpoint array(1) {
      ["objects"]=>
      &int(25)
    }
    Compiler/References/ref_arrayitem.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(2)
        [1]=>
        int(3)
      }
    }
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    Compiler/References/ref_reasign.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    object(X)#1 (2) {
      ["objects"]=>
      int(54)
      ["objects2"]=>
      &int(222)
    }
    array(2) {
      ["objects"]=>
      int(7)
      ["objects2"]=>
      &int(222)
    }
    x: object(X)#1 (2) {
      ["objects"]=>
      int(1004)
      ["objects2"]=>
      int(777)
    }
    <br/>checkpoint array(2) {
      ["objects"]=>
      int(54)
      ["objects2"]=>
      int(222)
    }
    object(X)(2) {
      ["objects"]=>
      &int(54)
      ["objects2"]=>
      &int(222)
    }
    array(2) {
      ["objects"]=>
      &int(54)
      ["objects2"]=>
      &int(222)
    }
    x: object(X)(2) {
      ["objects"]=>
      &int(1004)
      ["objects2"]=>
      &int(777)
    }
    <br/>checkpoint array(2) {
      ["objects"]=>
      &int(1004)
      ["objects2"]=>
      &int(777)
    }
    Compiler/Unreachable/t13.php: SUCCEEDED
    Compiler/Unset/calluserfunc.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Warning: call_user_func() expects parameter 1 to be a valid callback, function 'unset' not found or invalid function name in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\Unset\__input.txt on line 3
    int(10)
    Error: call_user_func(): Call to undefined function: 'unset' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\Unset\__input.txt at expression on line 3, column 1.
    Compiler/Unset/issetref2.php: SUCCEEDED
    Compiler/Unset/unsetglobal.php: SUCCEEDED
    Compiler/Unset/unsetglobal2.php: SUCCEEDED
    Compiler/Unset/unsetindirect.php: SUCCEEDED
    Compiler/Unset/unsetproblem.php: SUCCEEDED
    Compiler/Unset/unsetref.php: SUCCEEDED
    Compiler/Unset/unsetref2.php: SUCCEEDED
    Compiler/Unset/unsetref3.php: SUCCEEDED
    Compiler/Unset/__unset.php: SUCCEEDED
    DateTime/strftime.php: SUCCEEDED
    DateTime/strtotime1.php: SUCCEEDED
    DateTime/strtotime2.php: SUCCEEDED
    DateTime/strtotime3.php: SUCCEEDED
    DateTime/strtotime4.php: SUCCEEDED
    DateTime/strtotime5.php: SUCCEEDED
    DateTime/time.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    -189388800:-189475200 - 86400
    1964-01-01T00:00:00+0000
    1963-12-31T00:00:00+0000
    1964-06-06
    1963-06-06
    1964-01-06
    1133305200
    -189388800:-189475200 - 86400
    1964-01-01T00:00:00+0000
    1963-12-31T00:00:00+0000
    1964-06-06
    1963-06-06
    1964-01-06
    DateTime/timezones1.php: SUCCEEDED
    DLR/classContext.php: SUCCEEDED
    DLR/classContext1.php: SUCCEEDED
    DLR/classContext2.php: SUCCEEDED
    DLR/restrictions%20generics.php: SUCCEEDED
    DLR/restrictions.php: SUCCEEDED
    DLR/targets.php: SUCCEEDED
    FileSystem/basename.php: SUCCEEDED
    FileSystem/basename2.php: SUCCEEDED
    FileSystem/chdir.php: SUCCEEDED
    FileSystem/csv.php: SUCCEEDED
    FileSystem/date.php: SUCCEEDED
    FileSystem/date2.php: SUCCEEDED
    FileSystem/date3.php: SUCCEEDED
    FileSystem/date_unix.php: SUCCEEDED
    FileSystem/dirname.php: SUCCEEDED
    FileSystem/dirname2.php: SUCCEEDED
    FileSystem/disk_free_space.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    595 GB
    Drive C: 28 GB
    Drive D: 595 GB
    Drive E: 
    Warning: disk_free_space(): The system cannot find the path specified.
     in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 14
    false
    Drive F: 
    Warning: disk_free_space(): The device is not ready.
     in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 14
    false
    595 GB
    Drive C: 28 GB
    Drive D: 595 GB
    Drive E: false
    Drive F: false
    FileSystem/disk_total_space.php: SUCCEEDED
    FileSystem/fgets.php: SUCCEEDED
    FileSystem/file.php: SUCCEEDED
    FileSystem/filesize.php: SUCCEEDED
    FileSystem/file_exists.php: SUCCEEDED
    FileSystem/file_get_contents.php: SUCCEEDED
    FileSystem/fpassthru.php: SUCCEEDED
    FileSystem/fread.php: SUCCEEDED
    FileSystem/fread1.php: SUCCEEDED
    FileSystem/fread2.php: SUCCEEDED
    FileSystem/fseek.php: SUCCEEDED
    FileSystem/fsockopen.php: SUCCEEDED
    FileSystem/ftell.php: SUCCEEDED
    FileSystem/glob_up_dirs.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string(7) "../@PHP"
    string(9) "../Arrays"
    string(7) "../Bugs"
    string(6) "../CLR"
    string(11) "../Compiler"
    string(6) "../DLR"
    string(11) "../DateTime"
    string(13) "../FileSystem"
    string(7) "../Math"
    string(7) "../Misc"
    string(10) "../Objects"
    string(10) "../PHP.NET"
    string(8) "../RegEx"
    string(6) "../SPL"
    string(10) "../Strings"
    string(12) "../Variables"
    string(6) "../Xml"
    string(7) "../@PHP"
    string(9) "../Arrays"
    string(7) "../Bugs"
    string(6) "../CLR"
    string(11) "../Compiler"
    string(11) "../DateTime"
    string(6) "../DLR"
    string(13) "../FileSystem"
    string(7) "../Math"
    string(7) "../Misc"
    string(10) "../Objects"
    string(10) "../PHP.NET"
    string(8) "../RegEx"
    string(6) "../SPL"
    string(10) "../Strings"
    string(12) "../Variables"
    string(6) "../Xml"
    FileSystem/is_dir.php: SUCCEEDED
    FileSystem/is_executable.php: SUCCEEDED
    FileSystem/pathinfo.php: SUCCEEDED
    FileSystem/popen.php: SUCCEEDED
    FileSystem/readdir.php: SUCCEEDED
    FileSystem/readfile.php: SUCCEEDED
    FileSystem/readline.php: SUCCEEDED
    FileSystem/realpath.php: SUCCEEDED
    FileSystem/scandir.php: SUCCEEDED
    FileSystem/stat.php: SUCCEEDED
    FileSystem/stream_context_set_option.php: SUCCEEDED
    FileSystem/stream_copy_to_stream.php: SUCCEEDED
    FileSystem/stream_copy_to_stream2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <p>Read <b>rb</b>, Write <b>wb</b>
    
    
    COPIED: <b>29705</b>
    <p>Read <b>rb</b>, Write <b>wt</b>
    
    
    COPIED: <b>29705</b>
    <p>Read <b>rb</b>, Write <b>wb</b>
    
    
    COPIED: <b>29693</b>
    <p>Read <b>rb</b>, Write <b>wt</b>
    
    
    COPIED: <b>29741</b>
    FileSystem/testinc.php: SUCCEEDED
    FileSystem/touch.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Warning: touch(): Utime failed: Bad file descriptor in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 8
    Sorry Could Not change modification time of touch.txt
    Warning: touch(): Utime failed: Bad file descriptor in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 14
    
    Warning: touch(): Utime failed: Bad file descriptor in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 16
    
    Warning: touch(): Utime failed: Bad file descriptor in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 17
    <pre>[ARRAY
      [INT (0)] => [STRING: "May 10, 2011; [00:50:21] (00h) ctime test.txt (1304981421)"]
      [INT (1)] => [STRING: "February 19, 2011; [22:06:05] (22h) mtime test.txt (1298149565)"]
      [INT (2)] => [STRING: "May 10, 2011; [00:50:21] (00h) ctime touch.txt (1304981421)"]
      [INT (3)] => [STRING: "February 19, 2011; [22:06:05] (22h) mtime touch.txt (1298149565)"]
      [INT (4)] => [STRING: "May 10, 2011; [00:50:21] (00h) atime touch.txt (1304981421)"]
      [INT (5)] => [STRING: "February 19, 2011; [22:06:05] (22h) mtime summer.txt (1298149565)"]
      [INT (6)] => [STRING: "February 19, 2011; [22:06:05] (22h) mtime winter.txt (1298149565)"]
    ]</pre>
    Warning: touch(): Unable to access (D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\touch.txt): Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 8, column 5.
    Sorry Could Not change modification time of touch.txt
    Warning: touch(): Unable to access (D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\touch.txt): Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 14, column 1.
    
    Warning: touch(): Unable to access (D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\winter.txt): Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 16, column 1.
    
    Warning: touch(): Unable to access (D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\summer.txt): Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 17, column 1.
    <pre>[ARRAY
      [INT (0)] => [STRING: "May 10, 2011; [00:50:21] (00h) ctime test.txt (1304981421)"]
      [INT (1)] => [STRING: "February 19, 2011; [23:06:05] (23h) mtime test.txt (1298153165)"]
      [INT (2)] => [STRING: "May 10, 2011; [00:50:21] (00h) ctime touch.txt (1304981421)"]
      [INT (3)] => [STRING: "February 19, 2011; [23:06:05] (23h) mtime touch.txt (1298153165)"]
      [INT (4)] => [STRING: "May 10, 2011; [00:50:21] (00h) atime touch.txt (1304981421)"]
      [INT (5)] => [STRING: "February 19, 2011; [23:06:05] (23h) mtime summer.txt (1298153165)"]
      [INT (6)] => [STRING: "February 19, 2011; [23:06:05] (23h) mtime winter.txt (1298153165)"]
    ]</pre>
    FileSystem/tar/tar_test.php: SUCCEEDED
    FileSystem/zip/zip.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    correct
    Error: Call to undefined function: 'zip_open' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\zip\__input.txt at expression on line 3, column 1.
    Math/abs.php: SUCCEEDED
    Math/atan2.php: SUCCEEDED
    Math/base_convert.php: SUCCEEDED
    Math/bindec.php: SUCCEEDED
    Math/ceil.php: SUCCEEDED
    Math/cos.php: SUCCEEDED
    Math/decbin.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <pre>
    [double: 2294967295]
    10001000110010100110101111111111
    [double: 4294967296]
    0
    [double: 8589934590]
    11111111111111111111111111111110
    [double: 8589934590]
    11111111111111111111111111111110
    [double: 8589934591]
    11111111111111111111111111111111
    [Int: 1000.000.000.000]
    11010100101001010001000000000000
    <hr>(-1, -5435, 2.14, 0, 26)
    11111111111111111111111111111111
    11111111111111111110101011000101
    10
    0
    11010 
    </pre>
    <pre>
    [???: 2294967295]
    10001000110010100110101111111111
    [???: 4294967296]
    0
    [???: 8589934590]
    11111111111111111111111111111110
    [???: 8589934590]
    11111111111111111111111111111110
    [???: 8589934591]
    11111111111111111111111111111111
    [Int: 1000.000.000.000]
    11010100101001010001000000000000
    <hr>(-1, -5435, 2.14, 0, 26)
    11111111111111111111111111111111
    11111111111111111110101011000101
    10
    0
    11010 
    </pre>
    Math/dechex.php: SUCCEEDED
    Math/decoct.php: SUCCEEDED
    Math/deg2rad.php: SUCCEEDED
    Math/exp.php: SUCCEEDED
    Math/floor.php: SUCCEEDED
    Math/fmod.php: SUCCEEDED
    Math/hexdec.php: SUCCEEDED
    Math/max.php: SUCCEEDED
    Math/min.php: SUCCEEDED
    Math/modulo_warn.php: SUCCEEDED
    Math/octdec.php: SUCCEEDED
    Math/pow.php: SUCCEEDED
    Math/rad2deg.php: SUCCEEDED
    Math/round.php: SUCCEEDED
    Math/sin.php: SUCCEEDED
    Math/sqrt.php: SUCCEEDED
    Math/tan.php: SUCCEEDED
    Math/uniqid.php: SUCCEEDED
    Misc/calendar_extension.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0
    0
    2375840
    0
    14
    32
    2
    There are 31 days in August 2003
    There are 28 days in February 2003
    There are 29 days in February 2004
    There are 31 days in December 2034
    1748326
    1748324
    374867
    0
    322f32322f35373633
    ebe120e7f9e5ef20e4faf9f1e2
    ebe120e7f9e5ef20e427faf9f1e2
    ebe120e7f9e5ef20e420e0ecf4e9ed20faf9f1e2
    ebe120e7f9e5ef20e42720e0ecf4e9ed20faf9f1e2
    eb22e120e7f9e5ef20e4faf9f122e2
    e12720e7f9e5ef20e4faf9f122e2
    e12720e7f9e5ef20e427faf9f122e2
    e12720e7f9e5ef20e420e0ecf4e9ed20faf9f122e2
    e12720e7f9e5ef20e42720e0ecf4e9ed20faf9f122e2
    Error: Call to undefined function: 'frenchtojd' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt at expression on line 2, column 1.
    Misc/dir_read.php: SUCCEEDED
    Misc/fgetcsv%20%2327492.php: SUCCEEDED
    Misc/hash%20functions%20%2326667.php: SUCCEEDED
    Misc/ini_parse.php: SUCCEEDED
    Misc/json%20%2327838.php: SUCCEEDED
    Misc/lexer.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    T_INLINE_HTML
    311 '\r\n'
    T_OPEN_TAG
    368 '&lt;?'
    T_WHITESPACE
    371 ' \r\n\r\n'
    T_FINAL
    345 'final'
    T_WHITESPACE
    371 ' '
    T_CLASS
    353 'class'
    T_WHITESPACE
    371 ' '
    T_STRING
    307 'A'
    T_WHITESPACE
    371 ' \r\n'
        '{'
    T_WHITESPACE
    371 ' \r\n  '
    T_FUNCTION
    334 'function'
    T_WHITESPACE
    371 ' '
    T_STRING
    307 '__get'
        '('
    T_VARIABLE
    309 '$x'
        ')'
    T_WHITESPACE
    371 ' \r\n  '
        '{'
    T_WHITESPACE
    371 ' \r\n    '
    T_VARIABLE
    309 '$x'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_START_HEREDOC
    372 '&lt;&lt;&lt;EOOOOOOOOOOOOOOT\r\n'
    T_ENCAPSED_AND_WHITESPACE
    314 '         &lt;&lt;&lt;hello\r\nEOOOOOOOOOOOOOOt;\r\nEOOOOOOOOOOOOOT;\r\n'
    T_END_HEREDOC
    373 'EOOOOOOOOOOOOOOT'
        ';'
    T_WHITESPACE
    371 '\r\n\r\n    '
        '$'
    T_VARIABLE
    309 '$y'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_ARRAY
    360 'array'
    T_WHITESPACE
    371 ' '
        '('
    T_LNUMBER
    305 '1'
        ','
    T_DNUMBER
    306 '100000000000000'
        ','
    T_DNUMBER
    306 '999999999999999999999999999999999'
        ','
    T_STRING
    307 'true'
        ','
    T_STRING
    307 'false'
        ')'
        ';'
    T_WHITESPACE
    371 '\r\n    '
        '$'
        '{'
        '&quot;'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
    T_DOLLAR_OPEN_CURLY_BRACES
    374 '${'
        '$'
        '{'
    T_CONSTANT_ENCAPSED_STRING
    315 '&quot;xxx&quot;'
        '}'
        '}'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
        '&quot;'
        '}'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_LNUMBER
    305 '1'
        ';'
    T_WHITESPACE
    371 '\r\n    '
        '$'
        '{'
        '&quot;'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
    T_DOLLAR_OPEN_CURLY_BRACES
    374 '${'
        '$'
        '{'
        '&quot;'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
    T_VARIABLE
    309 '$x'
    T_ENCAPSED_AND_WHITESPACE
    314 '-&gt;$$'
    T_VARIABLE
    309 '$x0xx'
        '&quot;'
        '}'
        '}'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
        '&quot;'
        '}'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_LNUMBER
    305 '1'
        ';'
    T_WHITESPACE
    371 '\r\n  '
        '}'
    T_WHITESPACE
    371 ' \r\n'
        '}'
    T_WHITESPACE
    371 '\r\n\r\n'
    T_CLOSE_TAG
    370 '?&gt;'
    '
    '
        '&lt;?'
        ' 
    
    '
        'final'
        ' '
        'class'
        ' '
        'A'
        ' 
    '
        '{'
        ' 
      '
        'function'
        ' '
    259
    259 '__get'
        '('
        '$x'
        ')'
        ' 
      '
        '{'
        ' 
        '
        '$x'
        ' '
        '='
        ' '
        '&lt;&lt;&lt;EOOOOOOOOOOOOOOT
    '
        '         &lt;&lt;&lt;'
        'hello'
        '
    '
        'EOOOOOOOOOOOOOOt;
    '
        'EOOOOOOOOOOOOOT;
    '
        'EOOOOOOOOOOOOOOT'
        ';'
        '
    
        '
        '$'
        '$y'
        ' '
        '='
        ' '
        'array'
        ' '
        '('
        '1'
        ','
        '100000000000000'
        ','
        '999999999999999999999999999999999'
        ','
    256
    256 'true'
        ','
    257
    257 'false'
        ')'
        ';'
        '
        '
        '$'
        '{'
        '&quot;'
        'x'
        '${'
        '$'
        '{'
    -29
    -29 '&quot;xxx&quot;'
        '}'
        '}'
        'x'
        '&quot;'
        '}'
        ' '
        '='
        ' '
        '1'
        ';'
        '
        '
        '$'
        '{'
        '&quot;'
        'x'
        '${'
        '$'
        '{'
        '&quot;'
        'x'
        '$x'
        '-&gt;'
        '$'
        '$'
        '$x0xx'
        '&quot;'
        '}'
        '}'
        'x'
        '&quot;'
        '}'
        ' '
        '='
        ' '
        '1'
        ';'
        '
      '
        '}'
        ' 
    '
        '}'
        '
    
    '
        '?&gt;'
    Misc/locale.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string(1) "C"
    double(1.54)
    double(Infinity)
    654564.145400
    Sat Saturday Apr April
    --------------
    string(19) "Danish_Denmark.1252"
    double(1.54)
    double(Infinity)
    654564,145400
    lo lordag apr april
    --------------
    string(25) "Czech_Czech Republic.1250"
    double(1.54)
    double(Infinity)
    654564,145400
    so sobota IV duben
    --------------
    string(1) "C"
    float(1.54)
    float(Infinity)
    654564.145400
    Sat Saturday Apr April
    --------------
    string(19) "Danish_Denmark.1252"
    float(1.54)
    float(Infinity)
    654564,145400
    lo lordag apr april
    --------------
    string(25) "Czech_Czech Republic.1250"
    float(1.54)
    float(Infinity)
    654564,145400
    so sobota 4 duben
    --------------
    Misc/output2.php: SUCCEEDED
    Misc/parse_url%20%2327377.php: SUCCEEDED
    Misc/parse_url_at_bug.php: SUCCEEDED
    Misc/stack_trace.php: FAILED
    Script hung upNo errorsSuccess
    Expected test outputReal script output
    Unhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---> System.IndexOutOfRangeException: Index was outside the bounds of the array.
       at PHP.Core.PhpStackFrame..ctor(ScriptContext context, StackFrame frame, FrameKinds kind)
       at PHP.Core.PhpStackTrace..ctor(ScriptContext context, StackTrace clrTrace)
       at PHP.Core.PhpStackTrace..ctor(ScriptContext context, Int32 skipFrames)
       at PHP.Library.Errors.Backtrace()
       at <stack_trace.inc>.<Script>.j(ScriptContext <context>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\stack_trace.inc:line 11
       at <stack_trace.inc>.<Script>.j(Object instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <stack_trace.inc>.<Script>.i(ScriptContext <context>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\stack_trace.inc:line 6
       at <stack_trace.inc>.<Script>.i(Object instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <^0>.<Global>.<?0>.h(ScriptContext <context>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt:line 14
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack, DTypeDesc caller)
       at PHP.Core.PhpCallback.InvokeInternal(Object[] args)
       at PHP.Core.PhpCallback.Invoke(Object[] args)
       at PHP.Library.PhpArrays.Map(DTypeDesc caller, PhpCallback map, PhpArray[] arrays)
       at <__input.txt>.<Script>.<Lambda>(ScriptContext <context>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt:line 4
       at <__input.txt>.<Script>.<Lambda>(Object instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <__input.txt>.<Script>.f(ScriptContext <context>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt:line 6
       at <__input.txt>.<Script>.f(Object instance, PhpStack stack)
       at <__input.txt>.<Script>.<Main>(ScriptContext <context>, Dictionary`2 <locals>, DObject <self>, DTypeDesc <includer>, Boolean <request>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt:line 18
       at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)
       at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)
       --- End of inner exception stack trace ---
       at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)
       at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)
       at <Global>.Run(String[] )
    
    Misc/str_getcsv%20%2326691.php: SUCCEEDED
    Misc/tokens.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    T_REQUIRE_ONCE = 258,
    T_REQUIRE = 259,
    T_EVAL = 260,
    T_INCLUDE_ONCE = 261,
    T_INCLUDE = 262,
    T_LOGICAL_OR = 263,
    T_LOGICAL_XOR = 264,
    T_LOGICAL_AND = 265,
    T_PRINT = 266,
    T_SR_EQUAL = 267,
    T_SL_EQUAL = 268,
    T_XOR_EQUAL = 269,
    T_OR_EQUAL = 270,
    T_AND_EQUAL = 271,
    T_MOD_EQUAL = 272,
    T_CONCAT_EQUAL = 273,
    T_DIV_EQUAL = 274,
    T_MUL_EQUAL = 275,
    T_MINUS_EQUAL = 276,
    T_PLUS_EQUAL = 277,
    T_BOOLEAN_OR = 278,
    T_BOOLEAN_AND = 279,
    T_IS_NOT_IDENTICAL = 280,
    T_IS_IDENTICAL = 281,
    T_IS_NOT_EQUAL = 282,
    T_IS_EQUAL = 283,
    T_IS_GREATER_OR_EQUAL = 284,
    T_IS_SMALLER_OR_EQUAL = 285,
    T_SR = 286,
    T_SL = 287,
    T_INSTANCEOF = 288,
    T_UNSET_CAST = 289,
    T_BOOL_CAST = 290,
    T_OBJECT_CAST = 291,
    T_ARRAY_CAST = 292,
    T_STRING_CAST = 293,
    T_DOUBLE_CAST = 294,
    T_INT_CAST = 295,
    T_DEC = 296,
    T_INC = 297,
    T_CLONE = 298,
    T_NEW = 299,
    T_EXIT = 300,
    T_IF = 301,
    T_ELSEIF = 302,
    T_ELSE = 303,
    T_ENDIF = 304,
    T_LNUMBER = 305,
    T_DNUMBER = 306,
    T_STRING = 307,
    T_STRING_VARNAME = 308,
    T_VARIABLE = 309,
    T_NUM_STRING = 310,
    T_INLINE_HTML = 311,
    T_CHARACTER = 312,
    T_BAD_CHARACTER = 313,
    T_ENCAPSED_AND_WHITESPACE = 314,
    T_CONSTANT_ENCAPSED_STRING = 315,
    T_ECHO = 316,
    T_DO = 317,
    T_WHILE = 318,
    T_ENDWHILE = 319,
    T_FOR = 320,
    T_ENDFOR = 321,
    T_FOREACH = 322,
    T_ENDFOREACH = 323,
    T_DECLARE = 324,
    T_ENDDECLARE = 325,
    T_AS = 326,
    T_SWITCH = 327,
    T_ENDSWITCH = 328,
    T_CASE = 329,
    T_DEFAULT = 330,
    T_BREAK = 331,
    T_CONTINUE = 332,
    T_GOTO = 333,
    T_FUNCTION = 334,
    T_CONST = 335,
    T_RETURN = 336,
    T_TRY = 337,
    T_CATCH = 338,
    T_THROW = 339,
    T_USE = 340,
    T_GLOBAL = 341,
    T_PUBLIC = 342,
    T_PROTECTED = 343,
    T_PRIVATE = 344,
    T_FINAL = 345,
    T_ABSTRACT = 346,
    T_STATIC = 347,
    T_VAR = 348,
    T_UNSET = 349,
    T_ISSET = 350,
    T_EMPTY = 351,
    T_HALT_COMPILER = 352,
    T_CLASS = 353,
    T_INTERFACE = 354,
    T_EXTENDS = 355,
    T_IMPLEMENTS = 356,
    T_OBJECT_OPERATOR = 357,
    T_DOUBLE_ARROW = 358,
    T_LIST = 359,
    T_ARRAY = 360,
    T_CLASS_C = 361,
    T_METHOD_C = 362,
    T_FUNC_C = 363,
    T_LINE = 364,
    T_FILE = 365,
    T_COMMENT = 366,
    T_DOC_COMMENT = 367,
    T_OPEN_TAG = 368,
    T_OPEN_TAG_WITH_ECHO = 369,
    T_CLOSE_TAG = 370,
    T_WHITESPACE = 371,
    T_START_HEREDOC = 372,
    T_END_HEREDOC = 373,
    T_DOLLAR_OPEN_CURLY_BRACES = 374,
    T_CURLY_OPEN = 375,
    T_PAAMAYIM_NEKUDOTAYIM = 376,
    T_DOUBLE_COLON = 376,
    T_NAMESPACE = 377,
    T_NS_C = 378,
    T_DIR = 379,
    T_NS_SEPARATOR = 380,
    T_INCLUDE = 129,
    T_INCLUDE_ONCE = 130,
    T_EVAL = 131,
    T_REQUIRE = 132,
    T_REQUIRE_ONCE = 133,
    T_LOGICAL_OR = 136,
    T_LOGICAL_XOR = 137,
    T_LOGICAL_AND = 138,
    T_PRINT = 139,
    T_PLUS_EQUAL = 140,
    T_MINUS_EQUAL = 141,
    T_MUL_EQUAL = 142,
    T_DIV_EQUAL = 143,
    T_CONCAT_EQUAL = 144,
    T_MOD_EQUAL = 145,
    T_AND_EQUAL = 146,
    T_OR_EQUAL = 147,
    T_XOR_EQUAL = 148,
    T_SL_EQUAL = 149,
    T_SR_EQUAL = 150,
    T_BOOLEAN_OR = 151,
    T_BOOLEAN_AND = 152,
    T_IS_EQUAL = 153,
    T_IS_NOT_EQUAL = 154,
    T_IS_IDENTICAL = 155,
    T_IS_NOT_IDENTICAL = 156,
    T_IS_SMALLER_OR_EQUAL = 157,
    T_IS_GREATER_OR_EQUAL = 158,
    T_SL = 159,
    T_SR = 160,
    T_INC = 161,
    T_DEC = 162,
    T_NEW = 164,
    T_INSTANCEOF = 165,
    T_CLONE = 167,
    T_LNUMBER = 168,
    T_DNUMBER = 170,
    T_STRING = 171,
    T_STRING_VARNAME = 172,
    T_VARIABLE = 173,
    T_NUM_STRING = 174,
    T_INLINE_HTML = 175,
    T_CHARACTER = 176,
    T_BAD_CHARACTER = 177,
    T_ENCAPSED_AND_WHITESPACE = 178,
    T_CONSTANT_ENCAPSED_STRING = 179,
    T_EXIT = 180,
    T_IF = 181,
    T_ELSEIF = 182,
    T_ELSE = 183,
    T_ENDIF = 184,
    T_ECHO = 185,
    T_DO = 186,
    T_WHILE = 187,
    T_ENDWHILE = 188,
    T_FOR = 189,
    T_ENDFOR = 190,
    T_FOREACH = 191,
    T_ENDFOREACH = 192,
    T_AS = 193,
    T_SWITCH = 194,
    T_ENDSWITCH = 195,
    T_CASE = 196,
    T_DEFAULT = 197,
    T_BREAK = 198,
    T_CONTINUE = 199,
    T_FUNCTION = 200,
    T_CONST = 201,
    T_RETURN = 202,
    T_GLOBAL = 203,
    T_STATIC = 204,
    T_VAR = 205,
    T_UNSET = 206,
    T_ISSET = 207,
    T_EMPTY = 208,
    T_CLASS = 209,
    T_EXTENDS = 210,
    T_OBJECT_OPERATOR = 211,
    T_DOUBLE_ARROW = 212,
    T_LIST = 213,
    T_ARRAY = 214,
    T_CLASS_C = 215,
    T_METHOD_C = 216,
    T_FUNC_C = 217,
    T_LINE = 218,
    T_FILE = 219,
    T_DIR = 220,
    T_COMMENT = 221,
    T_DOC_COMMENT = 222,
    T_OPEN_TAG = 227,
    T_OPEN_TAG_WITH_ECHO = 228,
    T_CLOSE_TAG = 229,
    T_WHITESPACE = 230,
    T_START_HEREDOC = 231,
    T_END_HEREDOC = 232,
    T_DOLLAR_OPEN_CURLY_BRACES = 233,
    T_CURLY_OPEN = 234,
    T_DOUBLE_COLON = 235,
    T_PAAMAYIM_NEKUDOTAYIM = 235,
    T_GOTO = 237,
    T_TRY = 238,
    T_CATCH = 239,
    T_THROW = 240,
    T_INTERFACE = 241,
    T_IMPLEMENTS = 242,
    T_ABSTRACT = 243,
    T_FINAL = 244,
    T_PRIVATE = 245,
    T_PROTECTED = 246,
    T_PUBLIC = 247,
    T_BOOL_CAST = 287,
    T_INT_CAST = 290,
    T_DOUBLE_CAST = 296,
    T_STRING_CAST = 299,
    T_ARRAY_CAST = 302,
    T_OBJECT_CAST = 303,
    T_UNSET_CAST = 304,
    T_HALT_COMPILER = 351,
    Misc/user_error_handlers.php: SUCCEEDED
    Objects/accessing%20property%20line%20number%20%2326052.php: SUCCEEDED
    Objects/conditional1.php: SUCCEEDED
    Objects/conditional2.php: SUCCEEDED
    Objects/conditional_base_class.php: SUCCEEDED
    Objects/constant_test.php: SUCCEEDED
    Objects/evaled_parent.php: SUCCEEDED
    Objects/getter_setter_bug28444.php: SUCCEEDED
    Objects/instanceof.php: SUCCEEDED
    Objects/new_via_unknown_ctor.php: SUCCEEDED
    Objects/object_creation_test.php: SUCCEEDED
    Objects/overrides%20%231285.php: SUCCEEDED
    Objects/static_field_test.php: SUCCEEDED
    Objects/static_inheritence.php: SUCCEEDED
    Objects/static_method_test.php: SUCCEEDED
    Objects/static_object_vars.php: SUCCEEDED
    Objects/sys_class_const.php: SUCCEEDED
    Objects/this2.php: SUCCEEDED
    RegEx/backreferences.php: SUCCEEDED
    RegEx/dolar_escape.php: SUCCEEDED
    RegEx/ereg.php: SUCCEEDED
    RegEx/escaped_unicode.php: SUCCEEDED
    RegEx/namedbackref.php: SUCCEEDED
    RegEx/namedgroups.php: SUCCEEDED
    RegEx/namedgroups1.php: SUCCEEDED
    RegEx/namedgroups2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Warning: preg_match_all(): Numeric named subpatterns are not allowed in D:\Documents\Projects\Phalanger\Main\Testing\Tests\RegEx\__input.txt on line 6
    array(0) {
    }
    array(2) {
      [0]=>
      array(2) {
        [0]=>
        string(23) "flux.transitions.bars3d"
        [1]=>
        string(21) "flux.transitions.wrap"
      }
      [1]=>
      array(2) {
        [0]=>
        string(0) ""
        [1]=>
        string(0) ""
      }
    }
    RegEx/preg_match_unmatched_groups.php: SUCCEEDED
    RegEx/preg_replace_eval.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ab"01300 as"00da sd"0asdsa das asd 11asd a1sd a
    ab"01300 as"00da sd"0(aasdasdkjask,$a,\,\l,a,s,d,a,s,d,k,j,a,s,${120})(ldjaklsdjalk,$l,\,\l,d,j,a,k,l,s,d,j,a,l,${120})djdsa das asd 11asd a1sd a
    ab"01300 as"00da sd"0asdsa das asd 11asd a1sd a
    ab"01300 as"00da sd"0(aasdasdkjask,$a,\,\l,a,s,d,a,s,d,k,j,,,${120})(ldjaklsdjalk,$l,\,\l,d,j,a,k,l,s,d,j,,,${120})djdsa das asd 11asd a1sd a
    RegEx/regexp-sql.php: SUCCEEDED
    RegEx/regexp_smiles.php: SUCCEEDED
    RegEx/Perl/cache.php: SUCCEEDED
    RegEx/Perl/grep1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      [3] => string(3) "1.5"
      [6] => string(5) "58.54"
    }
    Notice: preg_grep(): Array to string conversion in D:\Documents\Projects\Phalanger\Main\Testing\Tests\RegEx\Perl\__input.txt at expression on line 5, column 1.
    array(2) {
      [3]=>
      string(3) "1.5"
      [6]=>
      string(5) "58.54"
    }
    RegEx/Perl/grep2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Food  array
    (
      [0] => apple
      [1] => banana
      [2] => squid
      [3] => pear
    )
    Fruit array
    (
      [0] => apple
      [1] => banana
      [3] => pear
    )
    Food  Array
    (
        [0] => apple
        [1] => banana
        [2] => squid
        [3] => pear
    )
    Fruit Array
    (
        [0] => apple
        [1] => banana
        [3] => pear
    )
    RegEx/Perl/match1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array [empty]
    array
    (
      [0] => array
      (
        [0] => def
        [1] => 3
      )
    )
    Array
    (
    )
    Array
    (
        [0] => Array
        (
            [0] => def
            [1] => 3
        )
    
    )
    RegEx/Perl/match10.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    (
      [0] => 1231
      [1] => 1
      [2] => 23
      [3] => 1
    )
    Array
    (
        [0] => 1231
        [1] => 1
        [2] => 23
        [3] => 1
    )
    RegEx/Perl/match2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    (
      [0] => array
      (
        [0] => def
        [1] => 0
      )
    )
    Array
    (
        [0] => Array
        (
            [0] => def
            [1] => 0
        )
    
    )
    RegEx/Perl/match3.php: SUCCEEDED
    RegEx/Perl/match4.php: SUCCEEDED
    RegEx/Perl/match5.php: SUCCEEDED
    RegEx/Perl/match6.php: SUCCEEDED
    RegEx/Perl/match7.php: SUCCEEDED
    RegEx/Perl/match8.php: SUCCEEDED
    RegEx/Perl/match9.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    (
      [0] => 209.6.145.47 - - [22/Nov/2003:19:02:30 -0500] "GET /dir/doc.htm HTTP/1.0" 200 6776 "http://search.yahoo.com/search?p=key+words=UTF-8" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)"
      [1] => 209.6.145.47
      [2] => -
      [3] => -
      [4] => 22/Nov/2003:19:02:30 -0500
      [5] => GET
      [6] => /dir/doc.htm
      [7] => HTTP
      [8] => 1.0
      [9] => 200
      [10] => 6776
      [11] => "http://search.yahoo.com/search?p=key+words=UTF-8"
      [12] => "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)"
    )
    Array
    (
        [0] => 209.6.145.47 - - [22/Nov/2003:19:02:30 -0500] "GET /dir/doc.htm HTTP/1.0" 200 6776 "http://search.yahoo.com/search?p=key+words=UTF-8" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)"
        [1] => 209.6.145.47
        [2] => -
        [3] => -
        [4] => 22/Nov/2003:19:02:30 -0500
        [5] => GET
        [6] => /dir/doc.htm
        [7] => HTTP
        [8] => 1.0
        [9] => 200
        [10] => 6776
        [11] => "http://search.yahoo.com/search?p=key+words=UTF-8"
        [12] => "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)"
    )
    RegEx/Perl/match_all1.php: SUCCEEDED
    RegEx/Perl/match_all2.php: SUCCEEDED
    RegEx/Perl/match_all3.php: SUCCEEDED
    RegEx/Perl/match_all4.php: SUCCEEDED
    RegEx/Perl/match_dollar.php: SUCCEEDED
    RegEx/Perl/overflow.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string("kfkaj +j k45´┐Ż´┐Ż´┐Ż´┐Ż´┐Ż3#$%^&kjakfjkaj|kfj")
    string("kfkaj +j k45�����3#$%^&kjakfjkaj|kfj")
    RegEx/Perl/quote1.php: SUCCEEDED
    RegEx/Perl/quote2.php: SUCCEEDED
    RegEx/Perl/quote3.php: SUCCEEDED
    RegEx/Perl/replace1.php: SUCCEEDED
    RegEx/Perl/replace2.php: SUCCEEDED
    RegEx/Perl/replace3.php: SUCCEEDED
    RegEx/Perl/replace4.php: SUCCEEDED
    RegEx/Perl/replace5.php: SUCCEEDED
    RegEx/Perl/replace6.php: SUCCEEDED
    RegEx/Perl/replace7.php: SUCCEEDED
    RegEx/Perl/replace8.php: SUCCEEDED
    RegEx/Perl/replace9.php: SUCCEEDED
    RegEx/Perl/replace_callback1.php: SUCCEEDED
    RegEx/Perl/replace_callback2.php: SUCCEEDED
    RegEx/Perl/split1.php: SUCCEEDED
    RegEx/Perl/split2.php: SUCCEEDED
    RegEx/Perl/split3.php: SUCCEEDED
    RegEx/Perl/split4.php: SUCCEEDED
    RegEx/Perl/split5.php: SUCCEEDED
    RegEx/Perl/split6.php: SUCCEEDED
    RegEx/Perl/ungreedy.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    aaa
    a
    aaa
    
    a
    aa
    aaa
    aa
    aaa
    aaa
    a
    aaa
    a
    a
    aa
    aaa
    aa
    aaa
    RegEx/Perl/unsuccessful-preg_match_all.php: SUCCEEDED
    RegEx/Perl/withoutdelimiters.php: SUCCEEDED
    SPL/ArrayAccess_offsetExists.php: SUCCEEDED
    SPL/Autoload_ctor.php: SUCCEEDED
    SPL/Autoload_extends.php: SUCCEEDED
    SPL/exceptions.php: SUCCEEDED
    Strings/addcslashes.php: SUCCEEDED
    Strings/addslashes.php: SUCCEEDED
    Strings/chunk_split.php: SUCCEEDED
    Strings/concat.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string(2) "ab"
    string(2) "ab"
    string(2) "ab"
    string(2) "ab"
    string(2) "ab"
    string(2) "aB"
    string(2) "Ab"
    string(2) "AB"
    string(2) "ab"
    string(2) "a1"
    string(2) "1b"
    string(2) "11"
    string(2) "ab"
    string(2) "aB"
    string(2) "Ab"
    string[binary](2) "\x41\x42"
    string(2) "ab"
    string(2) "ab"
    string(2) "ab"
    string(2) "ab"
    string(2) "ab"
    string(2) "aB"
    string(2) "Ab"
    string(2) "AB"
    string(2) "ab"
    string(2) "a1"
    string(2) "1b"
    string(2) "11"
    string(2) "ab"
    string[binary](2) "aB"
    string[binary](2) "Ab"
    string[binary](2) "AB"
    Strings/count_chars.php: SUCCEEDED
    Strings/crc32.php: SUCCEEDED
    Strings/crypt.php: SUCCEEDED
    Strings/crypt2.php: SUCCEEDED
    Strings/echo.php: SUCCEEDED
    Strings/explode.php: SUCCEEDED
    Strings/get_html_translation_table.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <hr>[&] => &amp;
    [>] => &gt;
    [<] => &lt;
    ["] => &quot;
    <hr>Hallo &amp; &lt;Frau&gt; &amp; Kr&iuml;&iquest;&frac12;mer
    <hr>[&] => &amp;
    [>] => &gt;
    [<] => &lt;
    ["] => &quot;
    <hr>Hallo &amp; &lt;Frau&gt; &amp; Kr�mer
    Strings/mb_strlen.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Call to undefined function mb_strlen() in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 4
    Error: Call to undefined function: 'mb_strlen' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 4, column 1.
    Strings/nl2br.php: SUCCEEDED
    Strings/pack.php: SUCCEEDED
    Strings/pos.php: SUCCEEDED
    Strings/runtime-quotes.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    fread = (x''y"z)
    fgets = (x''y"z)
    file[0] = (x''y"z)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    
    Warning: fopen(runtime-quotes2.txt): failed to open stream: Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 33
    
    Warning: fwrite() expects parameter 1 to be resource, boolean given in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 35
    fwrite = ()
    
    Warning: fputs() expects parameter 1 to be resource, boolean given in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 38
    fputs = ()
    
    Warning: fclose() expects parameter 1 to be resource, boolean given in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 41
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (x'y"z)
    fgets = (x'y"z)
    file[0] = (x'y"z)
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (a\'b"\\ca\)
    fgets = (a\'b"\\ca\'b"\\c)
    file[0] = (a\'b"\\ca\'b"\\c)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    e'e
    e''e
    e'e
    e'e
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    e'e
    e'e
    e'e
    e'e
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    fread = (x''y"z)
    fgets = (x''y"z)
    file[0] = (x''y"z)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    
    Warning: fopen(): Unable to access (D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\runtime-quotes2.txt): Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 33, column 3.
    
    Warning: Cannot convert boolean to resource implicitly in a call to function fwrite() in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 35, column 3.
    fwrite = (0)
    
    Warning: Cannot convert boolean to resource implicitly in a call to function fputs() in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 38, column 3.
    fputs = (0)
    
    Warning: Cannot convert boolean to resource implicitly in a call to function fclose() in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 41, column 3.
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (x'y"z)
    fgets = (x'y"z)
    file[0] = (x'y"z)
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (a\'b"\\ca\)
    fgets = (a\'b"\\ca\'b"\\c)
    file[0] = (a\'b"\\ca\'b"\\c)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    e'e
    e''e
    e'e
    e'e
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    e'e
    e'e
    e'e
    e'e
    Strings/sprintf.php: SUCCEEDED
    Strings/sprintf2.php: SUCCEEDED
    Strings/strtr.php: SUCCEEDED
    Strings/str_ireplace.php: SUCCEEDED
    Strings/str_replace.php: SUCCEEDED
    Strings/str_word_count.php: SUCCEEDED
    Strings/substr_operations.php: SUCCEEDED
    Strings/wordwrap.php: SUCCEEDED
    Variables/advanced_serialize.php: SUCCEEDED
    Variables/arguments.php: SUCCEEDED
    Variables/assign_copy.php: SUCCEEDED
    Variables/bitwise.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "00"
    string(2) "31"
    string(2) "31"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    0
    0
    0
    5
    0
    5
    40
    5
    45
    string(48) "000000000000000000000000000000000000000000000000"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(14) "31323331323331"
    string(2) "30"
    string(14) "31323331323331"
    string(16) "3635343635343536"
    string(2) "30"
    string(16) "3635343635343536"
    string(14) "337a5e8be43d7a"
    string(14) "00002130120201"
    string(48) "337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42"
    string(16) "347d598ce33a7e77"
    string(16) "0200243214040100"
    string(48) "367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42"
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "00"
    string(2) "31"
    string(2) "31"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    0
    -9223372036854775808
    -9223372036854775808
    -9223372036854775803
    0
    -9223372036854775803
    40
    5
    45
    string(48) "000000000000000000000000000000000000000000000000"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(14) "31323331323331"
    string(2) "30"
    string(14) "31323331323331"
    string(16) "3635343635343536"
    string(2) "30"
    string(16) "3635343635343536"
    string(14) "337a5e8be43d7a"
    string(14) "00002130120201"
    string(48) "337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42"
    string(16) "347d598ce33a7e77"
    string(16) "0200243214040100"
    string(48) "367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42"
    Variables/class_constants.php: SUCCEEDED
    Variables/comparisons.php: SUCCEEDED
    Variables/constant.php: SUCCEEDED
    Variables/constants_defined.php: SUCCEEDED
    Variables/extract%20refs.php: SUCCEEDED
    Variables/extract.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    EXTR_PREFIX_ALL
    integer(4)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
      'prefix_non_existent' => integer(1)
    }
    <hr>EXTR_PREFIX_INVALID
    integer(5)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => integer(2)
      'non_existent' => integer(1)
      'prefix_' => integer(1)
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => 'hello'
    }
    <hr>EXTR_PREFIX_SAME
    integer(3)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'non_existent' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>EXTR_PREFIX_IF_EXISTS
    integer(3)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>
    EXTR_PREFIX_ALL
    integer(4)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
      'prefix_non_existent' => integer(1)
    }
    <hr>EXTR_PREFIX_INVALID
    integer(5)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => integer(2)
      'non_existent' => integer(1)
      'prefix_' => integer(1)
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => 'hello'
    }
    <hr>EXTR_PREFIX_SAME
    integer(4)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'non_existent' => integer(1)
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>EXTR_PREFIX_IF_EXISTS
    integer(3)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>
    Variables/func_get_args.php: SUCCEEDED
    Variables/is_number.php: SUCCEEDED
    Variables/serialize.php: SUCCEEDED
    Variables/unserialize_objects.php: SUCCEEDED
    Variables/var_dumping.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Array
    (
        [0] => 1
        [1] => 
        [2] => 1
        [3] => 1.2
        [4] => 
        [5] => asdas
        [6] => Array
            (
                [0] => 1
            )
    
        [7] => stdClass Object
            (
            )
    
        [8] => Resource id #1
    )
    array(9) {
      [0]=>
      bool(true)
      [1]=>
      bool(false)
      [2]=>
      int(1)
      [3]=>
      float(1.2)
      [4]=>
      NULL
      [5]=>
      string(5) "asdas"
      [6]=>
      array(1) {
        [0]=>
        int(1)
      }
      [7]=>
      object(stdClass)#1 (0) {
      }
      [8]=>
      resource(1) of type (stream)
    }
    array (
      0 => true,
      1 => false,
      2 => 1,
      3 => 1.2,
      4 => NULL,
      5 => 'asdas',
      6 => 
      array (
        0 => 1,
      ),
      7 => 
      stdClass::__set_state(array(
      )),
      8 => NULL,
    )
    Array
    (
        [0] => 1
        [1] => 
        [2] => 1
        [3] => 1.2
        [4] => 
        [5] => asdas
        [6] => Array
        (
            [0] => 1
        )
    
        [7] => stdClass Object
        (
        )
    
        [8] => resource id #4
    
    )
    array(9) {
      [0]=>
      bool(true)
      [1]=>
      bool(false)
      [2]=>
      int(1)
      [3]=>
      float(1.2)
      [4]=>
      NULL
      [5]=>
      string(5) "asdas"
      [6]=>
      array(1) {
        [0]=>
        int(1)
      }
      [7]=>
      object(stdClass)(0) {
      }
      [8]=>
      resource(4) of type (stream)
    }
    array (
      0 => true,
      1 => false,
      2 => 1,
      3 => 1.2,
      4 => NULL,
      5 => 'asdas',
      6 => array (
        0 => 1,
      ),
      7 => class stdClass
      {
    
      },
      8 => NULL,
    )
    Xml/025.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
      'foo' => 'foobar'
    }
    array
    {
      'html' => 'http://www.w3.org/1999/xhtml'
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
    }
    array
    {
      'html' => 'http://www.w3.org/1999/xhtml'
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'foo' => 'foobar'
      'baz' => 'foobarbaz'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
    }
    array
    {
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
      'baz' => 'foobarbaz'
      'foo' => 'foobar'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
      'baz' => 'foobarbaz'
      'foo' => 'foobar'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
    }
    array
    {
    }
    Xml/026.php: SUCCEEDED
    Xml/027.php: SUCCEEDED
    Xml/028.php: SUCCEEDED
    Xml/029.php: SUCCEEDED
    Xml/030.php: SUCCEEDED
    Xml/032.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    FALSE
    FALSE
    FALSE
    TRUE
    TRUE
    TRUE
    Xml/033.php: SUCCEEDED
    Xml/bug26384.php: SUCCEEDED
    Xml/bug28721.php: SUCCEEDED
    Xml/bug28817.php: SUCCEEDED
    Xml/bug32615.php: SUCCEEDED
    Xml/bug33853.php: SUCCEEDED
    Xml/bug34276.php: SUCCEEDED
    Xml/bug35342.php: SUCCEEDED
    Xml/bug36756.php: SUCCEEDED
    Xml/bug37277.php: SUCCEEDED
    Xml/dom002.php: SUCCEEDED
    Xml/dom003.php: SUCCEEDED
    Xml/dom006.php: SUCCEEDED
    Xml/dom007.php: SUCCEEDED
    Xml/dom_set_attr_node.php: SUCCEEDED
    Xml/xmlhandler.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test begins
    <br/>
    <br/>test begins
    <br/>empty begins
    <br/>empty ends
    <br/>nocontent begins
    <br/>nocontent ends
    <br/>content begins
    <br/>empty begins
    <br/>empty ends
    <br/>empty begins
    <br/>empty ends
    <br/>content ends
    <br/>empty begins
    <br/>empty ends
    <br/>empty begins
    <br/>empty ends
    <br/>test ends
    <br/>Test ends
    <br/>
    <br/>
    Test begins
    <br/>
    <br/>
    Error: Call to undefined function: 'xml_parser_create' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Xml\__input.txt at expression on line 18, column 3.
    Xml/xslt001.php: SUCCEEDED
    Xml/xslt002.php: SUCCEEDED
    Xml/xslt003.php: SUCCEEDED
    Xml/xslt004.php: SUCCEEDED
    Xml/xslt005.php: SUCCEEDED
    Xml/xslt006.php: SUCCEEDED
    Xml/xslt007.php: SUCCEEDED
    Xml/xslt010.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test 10: EXSLT Support
      
      
      Test Date : 0001-12-31Z
        year                 : 1
        leap-year            : false
        month-in-year        : 12
        month-name           : December
        month-abbreviation   : Dec
        week-in-year         : 1
        day-in-year          : 365
        day-in-month         : 31
        day-of-week-in-month : 5
        day-in-week          : 2
        day-name             : Monday
        day-abbreviation     : Mon
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : 3000-01-31
        year                 : 3000
        leap-year            : false
        month-in-year        : 1
        month-name           : January
        month-abbreviation   : Jan
        week-in-year         : 5
        day-in-year          : 31
        day-in-month         : 31
        day-of-week-in-month : 5
        day-in-week          : 6
        day-name             : Friday
        day-abbreviation     : Fri
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : 2000-02-29
        year                 : 2000
        leap-year            : true
        month-in-year        : 2
        month-name           : February
        month-abbreviation   : Feb
        week-in-year         : 9
        day-in-year          : 60
        day-in-month         : 29
        day-of-week-in-month : 5
        day-in-week          : 3
        day-name             : Tuesday
        day-abbreviation     : Tue
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : 9990001-12-31Z
        year                 : 9990001
        leap-year            : false
        month-in-year        : 12
        month-name           : December
        month-abbreviation   : Dec
        week-in-year         : 1
        day-in-year          : 365
        day-in-month         : 31
        day-of-week-in-month : 5
        day-in-week          : 2
        day-name             : Monday
        day-abbreviation     : Mon
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : -0004-02-29
        year                 : -4
        leap-year            : true
        month-in-year        : 2
        month-name           : February
        month-abbreviation   : Feb
        week-in-year         : 9
        day-in-year          : 60
        day-in-month         : 29
        day-of-week-in-month : 5
        day-in-week          : 1
        day-name             : Sunday
        day-abbreviation     : Sun
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
    Test 10: EXSLT Support
    Warning: Cannot find a script or an extension object associated with namespace 'http://exslt.org/dates-and-times'..
    
    Warning: Illegal string offset '-1' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Phalanger.inc at expression on line 7, column 6.
    Xml/xslt011.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test 11: php:function Support
    
    Warning: XSLTProcessor::transformToXml(): A PHP Object cannot be converted to a XPath-string in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Xml\__input.txt on line 18
    <?xml version="1.0"?>
    foobar - secondArg
    foobar - 
    this is from an external DomDocument
    from the Input Document
    static
    Test 11: php:function Support
    <?xml version="1.0" encoding="utf-8"?>foobar - secondArg
    foobar - 
    this is from an external DomDocument
    from the Input Document
    static
    not a DomNode object
    Xml/xslt012.php: SUCCEEDED
    ================================================ FILE: Testing/Tests/TestLogs/TestLog (2035).htm ================================================ PHP.NET Compiler test log

    PHP.NET Compiler test log

    (90%) 849 succeeded, 97 failed
    Test ResultCompiler error outputExpected test result
    @PHP/classes/array_access_001.php: SUCCEEDED
    @PHP/classes/array_access_002.php: SUCCEEDED
    @PHP/classes/array_access_003.php: SUCCEEDED
    @PHP/classes/array_access_004.php: SUCCEEDED
    @PHP/classes/array_access_005.php: SUCCEEDED
    @PHP/classes/array_access_006.php: SUCCEEDED
    @PHP/classes/array_access_007.php: SUCCEEDED
    @PHP/classes/array_access_008.php: SUCCEEDED
    @PHP/classes/array_access_009.php: SUCCEEDED
    @PHP/classes/array_access_010.php: SUCCEEDED
    @PHP/classes/array_access_011.php: SUCCEEDED
    @PHP/classes/array_access_013.php: SUCCEEDED
    @PHP/classes/assign_op_property_001.php: SUCCEEDED
    @PHP/classes/autoload_001.php: SUCCEEDED
    @PHP/classes/autoload_002.php: SUCCEEDED
    @PHP/classes/autoload_003.php: SUCCEEDED
    @PHP/classes/autoload_005.php: SUCCEEDED
    @PHP/classes/autoload_006.php: SUCCEEDED
    @PHP/classes/bug23951.php: SUCCEEDED
    @PHP/classes/bug24399.php: SUCCEEDED
    @PHP/classes/bug24445.php: SUCCEEDED
    @PHP/classes/bug26737.php: SUCCEEDED
    @PHP/classes/bug27468.php: SUCCEEDED
    @PHP/classes/bug27504.php: SUCCEEDED
    @PHP/classes/class_example.php: SUCCEEDED
    @PHP/classes/class_stdclass.php: SUCCEEDED
    @PHP/classes/clone_001.php: SUCCEEDED
    @PHP/classes/clone_002.php: SUCCEEDED
    @PHP/classes/clone_003.php: SUCCEEDED
    @PHP/classes/clone_004.php: SUCCEEDED
    @PHP/classes/clone_006.php: SUCCEEDED
    @PHP/classes/constants_scope_001.php: SUCCEEDED
    @PHP/classes/ctor_dtor.php: SUCCEEDED
    @PHP/classes/ctor_dtor_inheritance.php: SUCCEEDED
    @PHP/classes/ctor_name_clash.php: SUCCEEDED
    @PHP/classes/dereferencing_001.php: SUCCEEDED
    @PHP/classes/destructor_and_echo.php: SUCCEEDED
    @PHP/classes/destructor_and_references.php: SUCCEEDED
    @PHP/classes/destructor_inheritance.php: SUCCEEDED
    @PHP/classes/destructor_visibility_003.php: SUCCEEDED
    @PHP/classes/factory_001.php: SUCCEEDED
    @PHP/classes/factory_and_singleton_001.php: SUCCEEDED
    @PHP/classes/factory_and_singleton_002.php: SUCCEEDED
    @PHP/classes/final.php: SUCCEEDED
    @PHP/classes/incdec_property_001.php: SUCCEEDED
    @PHP/classes/incdec_property_002.php: SUCCEEDED
    @PHP/classes/incdec_property_003.php: SUCCEEDED
    @PHP/classes/incdec_property_004.php: SUCCEEDED
    @PHP/classes/inheritance.php: SUCCEEDED
    @PHP/classes/inheritance_002.php: SUCCEEDED
    @PHP/classes/interfaces_001.php: SUCCEEDED
    @PHP/classes/interface_construct.php: SUCCEEDED
    @PHP/classes/interface_doubled.php: SUCCEEDED
    @PHP/classes/interface_implemented.php: SUCCEEDED
    @PHP/classes/iterators_001.php: SUCCEEDED
    @PHP/classes/iterators_002.php: SUCCEEDED
    @PHP/classes/iterators_003.php: SUCCEEDED
    @PHP/classes/iterators_004.php: SUCCEEDED
    @PHP/classes/iterators_006.php: SUCCEEDED
    @PHP/classes/iterators_007.php: SUCCEEDED
    @PHP/classes/object_reference_001.php: SUCCEEDED
    @PHP/classes/private_001.php: SUCCEEDED
    @PHP/classes/private_002.php: SUCCEEDED
    @PHP/classes/private_003.php: SUCCEEDED
    @PHP/classes/private_003b.php: SUCCEEDED
    @PHP/classes/private_004.php: SUCCEEDED
    @PHP/classes/private_004b.php: SUCCEEDED
    @PHP/classes/private_005.php: SUCCEEDED
    @PHP/classes/private_005b.php: SUCCEEDED
    @PHP/classes/private_006.php: SUCCEEDED
    @PHP/classes/private_006b.php: SUCCEEDED
    @PHP/classes/private_007.php: SUCCEEDED
    @PHP/classes/private_007b.php: SUCCEEDED
    @PHP/classes/private_members.php: SUCCEEDED
    @PHP/classes/private_redeclare.php: SUCCEEDED
    @PHP/classes/protected_001.php: SUCCEEDED
    @PHP/classes/protected_001b.php: SUCCEEDED
    @PHP/classes/protected_002.php: SUCCEEDED
    @PHP/classes/serialize_001.php: SUCCEEDED
    @PHP/classes/singleton_001.php: SUCCEEDED
    @PHP/classes/static_properties_001.php: SUCCEEDED
    @PHP/classes/type_hinting_001.php: SUCCEEDED
    @PHP/classes/type_hinting_003.php: SUCCEEDED
    @PHP/classes/visibility_000c.php: SUCCEEDED
    @PHP/classes/visibility_001c.php: SUCCEEDED
    @PHP/classes/visibility_002c.php: SUCCEEDED
    @PHP/classes/visibility_003a.php: SUCCEEDED
    @PHP/classes/visibility_003c.php: SUCCEEDED
    @PHP/classes/visibility_004a.php: SUCCEEDED
    @PHP/classes/visibility_004b.php: SUCCEEDED
    @PHP/classes/visibility_004c.php: SUCCEEDED
    @PHP/classes/visibility_005.php: SUCCEEDED
    @PHP/classes/__call_001.php: SUCCEEDED
    @PHP/classes/__set_data_corrupt.php: SUCCEEDED
    @PHP/classes/__set__get_001.php: SUCCEEDED
    @PHP/classes/__set__get_004.php: SUCCEEDED
    @PHP/classes/__set__get_005.php: SUCCEEDED
    @PHP/date/bug17988.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2002-06-25 12:18:48
    2002-06-25 14:18:48
    2002-06-25 13:18:48
    2002-06-25 12:18:48
    2002-06-25 18:18:48
    2002-06-25 14:18:48
    2002-06-25 14:18:48
    2002-06-25 18:18:48
    2002-06-25 10:18:48
    2002-06-25 17:18:48
    2002-06-25 11:18:48
    2002-06-25 17:48:48
    2002-06-25 10:48:48
    2002-06-25 14:18:48
    2002-06-25 14:18:48
    2002-06-25 13:18:48
    2002-06-25 12:18:48
    2002-06-25 18:18:48
    2002-06-25 14:18:48
    2002-06-25 14:18:48
    2002-06-25 18:18:48
    2002-06-25 10:18:48
    2002-06-25 17:18:48
    2002-06-25 11:18:48
    2002-06-25 17:48:48
    2002-06-25 10:48:48
    @PHP/date/bug26317.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2003-11-19 17:20:42
    2003-11-19 17:20:42
    2003-11-19 17:20:42
    2003-11-19 16:20:42
    2003-11-19 16:20:42
    2003-11-19 16:20:42
    @PHP/date/bug26320.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2003-11-19 12:30:42
    2003-11-19 13:30:42
    2003-11-19 12:30:42
    2003-11-19 12:30:42
    @PHP/date/bug28088.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    The following line rightly shows the correct date time:
    04/04/04 2145
    But the following line fails to show the correct date time:
    04/03/04 2245
    The following line rightly shows the correct date time:
    04/04/04 2345
    But the following line fails to show the correct date time:
    04/04/04 0045
    @PHP/date/bug28599.php: SUCCEEDED
    @PHP/date/bug29150.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2005-06-19 22:00:00
    2005-06-20 00:00:00
    @PHP/date/bug29585.php: SUCCEEDED
    @PHP/date/bug29595.php: SUCCEEDED
    @PHP/date/bug33056.php: SUCCEEDED
    @PHP/date/bug33452.php: SUCCEEDED
    @PHP/date/bug33562.php: SUCCEEDED
    @PHP/date/bug33563.php: SUCCEEDED
    @PHP/date/bug33578.php: SUCCEEDED
    @PHP/date/bug33869.php: SUCCEEDED
    @PHP/date/bug34676.php: SUCCEEDED
    @PHP/date/bug34771.php: SUCCEEDED
    @PHP/date/bug35143.php: SUCCEEDED
    @PHP/date/bug35414.php: SUCCEEDED
    @PHP/date/bug35422.php: SUCCEEDED
    @PHP/date/bug35425.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    integer(42)
    integer(1)
    integer(1)
    integer(1)
    integer(1)
    integer(0)
    integer(0)
    integer(1)
    integer(1)
    integer(31)
    integer(1104537661)
    integer(6)
    integer(53)
    integer(5)
    integer(2005)
    integer(0)
    integer(3600)
    integer(292)
    integer(1)
    integer(1)
    integer(1)
    integer(1)
    integer(0)
    integer(0)
    integer(1)
    integer(1)
    integer(31)
    integer(1104559261)
    integer(6)
    integer(53)
    integer(5)
    integer(2005)
    integer(0)
    integer(-18000)
    @PHP/date/bug35456.php: SUCCEEDED
    @PHP/date/bug35624.php: SUCCEEDED
    @PHP/date/bug35630.php: SUCCEEDED
    @PHP/date/bug35699.php: SUCCEEDED
    @PHP/date/bug35705.php: SUCCEEDED
    @PHP/date/bug35885.php: SUCCEEDED
    @PHP/date/bug35887.php: SUCCEEDED
    @PHP/date/date.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    c: 2003-01-23T13:20:59+01:00
    r: Thu, 23 Jan 2003 13:20:59 +0100
    c: 2003-01-23T13:20:59+01:00
    r: Thu, 23 Jan 2003 13:20:59 +0100
    c: 2003-01-23T12:20:59+00:00
    r: Thu, 23 Jan 2003 12:20:59 +0000
    c: 2003-01-23T13:20:59+01:00
    r: Thu, 23 Jan 2003 13:20:59 +0100
    @PHP/date/date_create-1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\date\__input.txt on line 28
    SKIP
    @PHP/date/date_create-2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\date\__input.txt on line 6
    SKIP
    @PHP/date/date_default_timezone_get-3.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Europe/Prague
    America/Chicago
    Europe/Rome
    America/Chicago
    @PHP/date/date_modify-1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\date\__input.txt on line 6
    SKIP
    @PHP/date/date_modify-2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\date\__input.txt on line 6
    SKIP
    @PHP/date/default-timezone-1.php: SUCCEEDED
    @PHP/date/default-timezone-2.php: SUCCEEDED
    @PHP/date/format-negative-timestamp.php: SUCCEEDED
    @PHP/date/strtotime.php: SUCCEEDED
    @PHP/date/timezone-configuration.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    1119125744
    1119125744
    1119125744
    1119125744
    1119129344
    1119125744
    @PHP/doc_examples/test001.php: SUCCEEDED
    @PHP/doc_examples/test002.php: SUCCEEDED
    @PHP/doc_examples/test003.php: SUCCEEDED
    @PHP/doc_examples/test004.php: SUCCEEDED
    @PHP/doc_examples/test005.php: SUCCEEDED
    @PHP/doc_examples/test006.php: SUCCEEDED
    @PHP/doc_examples/test007.php: SUCCEEDED
    @PHP/doc_examples/test008.php: SUCCEEDED
    @PHP/doc_examples/test009.php: SUCCEEDED
    @PHP/doc_examples/test010.php: SUCCEEDED
    @PHP/doc_examples/test011.php: SUCCEEDED
    @PHP/doc_examples/test013.php: SUCCEEDED
    @PHP/doc_examples/test014.php: SUCCEEDED
    @PHP/doc_examples/test015.php: SUCCEEDED
    @PHP/doc_examples/test016.php: SUCCEEDED
    @PHP/doc_examples/test017.php: SUCCEEDED
    @PHP/doc_examples/test018.php: SUCCEEDED
    @PHP/doc_examples/test019.php: SUCCEEDED
    @PHP/doc_examples/test020.php: SUCCEEDED
    @PHP/doc_examples/test021.php: SUCCEEDED
    @PHP/doc_examples/test022.php: SUCCEEDED
    @PHP/doc_examples/test023.php: SUCCEEDED
    @PHP/doc_examples/test024.php: SUCCEEDED
    @PHP/doc_examples/test025.php: SUCCEEDED
    @PHP/doc_examples/test026.php: SUCCEEDED
    @PHP/doc_examples/test027.php: SUCCEEDED
    @PHP/doc_examples/test028.php: SUCCEEDED
    @PHP/doc_examples/test029.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ´┐Żauky
    �auky
    @PHP/doc_examples/test030.php: SUCCEEDED
    @PHP/doc_examples/test031.php: SUCCEEDED
    @PHP/doc_examples/test032.php: SUCCEEDED
    @PHP/doc_examples/test033.php: SUCCEEDED
    @PHP/doc_examples/test034.php: SUCCEEDED
    @PHP/doc_examples/test035.php: SUCCEEDED
    @PHP/doc_examples/test036.php: SUCCEEDED
    @PHP/doc_examples/test037.php: SUCCEEDED
    @PHP/doc_examples/test038.php: SUCCEEDED
    @PHP/doc_examples/test039.php: SUCCEEDED
    @PHP/doc_examples/test040.php: SUCCEEDED
    @PHP/doc_examples/test041.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    call_user_func():
    hello world!
    Strict Standards: call_user_func(): Non-static method MyClass::myCallbackMethod() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\doc_examples\__input.txt at expression on line 17, column 1.
    Hello World!Hello World!
    @PHP/doc_examples/test042.php: SUCCEEDED
    @PHP/doc_examples/test043.php: SUCCEEDED
    @PHP/doc_examples/test044.php: SUCCEEDED
    @PHP/doc_examples/test045.php: SUCCEEDED
    @PHP/doc_examples/test046.php: SUCCEEDED
    @PHP/doc_examples/test047.php: SUCCEEDED
    @PHP/doc_examples/test048.php: SUCCEEDED
    @PHP/doc_examples/test049.php: SUCCEEDED
    @PHP/doc_examples/test050.php: SUCCEEDED
    @PHP/doc_examples/test051.php: SUCCEEDED
    @PHP/doc_examples/test052.php: SUCCEEDED
    @PHP/doc_examples/test053.php: SUCCEEDED
    @PHP/doc_examples/test054.php: SUCCEEDED
    @PHP/doc_examples/test055.php: SUCCEEDED
    @PHP/doc_examples/test056.php: SUCCEEDED
    @PHP/doc_examples/test057.php: SUCCEEDED
    @PHP/doc_examples/test058.php: SUCCEEDED
    @PHP/doc_examples/test059.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    Deprecated: Assigning the return value of new by reference is deprecated in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\doc_examples\__input.txt on line 4
    NULL
    object(stdClass)#1 (0) {
    }
    NULL
    object(stdClass)(0) {
    }
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\doc_examples\__input.txt(4,5): warning PHP0181: Assigning the return value of new by reference is deprecated
    
    @PHP/doc_examples/test060.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    Deprecated: Assigning the return value of new by reference is deprecated in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\doc_examples\__input.txt on line 9
    Static object: NULL
    Static object: NULL
    
    Static object: NULL
    Static object: object(stdClass)#3 (1) {
      ["property"]=>
      int(1)
    }
    Static object: NULL
    Static object: NULL
    
    Static object: NULL
    Static object: object(stdClass)(1) {
      ["property"]=>
      int(1)
    }
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\doc_examples\__input.txt(9,9): warning PHP0181: Assigning the return value of new by reference is deprecated
    
    @PHP/doc_examples/test061.php: SUCCEEDED
    @PHP/doc_examples/test062.php: SUCCEEDED
    @PHP/doc_examples/test063.php: SUCCEEDED
    @PHP/doc_examples/test064.php: SUCCEEDED
    @PHP/doc_examples/test065.php: SUCCEEDED
    @PHP/doc_examples/test066.php: SUCCEEDED
    @PHP/doc_examples/test067.php: SUCCEEDED
    @PHP/doc_examples/test068.php: SUCCEEDED
    @PHP/doc_examples/test069.php: SUCCEEDED
    @PHP/doc_examples/test070.php: SUCCEEDED
    @PHP/doc_examples/test071.php: SUCCEEDED
    @PHP/doc_examples/test072.php: SUCCEEDED
    @PHP/doc_examples/test073.php: SUCCEEDED
    @PHP/doc_examples/test074.php: SUCCEEDED
    @PHP/doc_examples/test075.php: SUCCEEDED
    @PHP/doc_examples/test076.php: SUCCEEDED
    @PHP/doc_examples/test077.php: SUCCEEDED
    @PHP/doc_examples/test078.php: SUCCEEDED
    @PHP/doc_examples/test079.php: SUCCEEDED
    @PHP/doc_examples/test080.php: SUCCEEDED
    @PHP/doc_examples/test081.php: SUCCEEDED
    @PHP/doc_examples/test082.php: SUCCEEDED
    @PHP/doc_examples/test083.php: SUCCEEDED
    @PHP/doc_examples/test084.php: SUCCEEDED
    @PHP/doc_examples/test085.php: SUCCEEDED
    @PHP/doc_examples/test086.php: SUCCEEDED
    @PHP/doc_examples/test087.php: SUCCEEDED
    @PHP/doc_examples/test088.php: SUCCEEDED
    @PHP/doc_examples/test089.php: SUCCEEDED
    @PHP/doc_examples/test090.php: SUCCEEDED
    @PHP/doc_examples/test091.php: SUCCEEDED
    @PHP/doc_examples/test092.php: SUCCEEDED
    @PHP/doc_examples/test093.php: SUCCEEDED
    @PHP/doc_examples/test094.php: SUCCEEDED
    @PHP/doc_examples/test095.php: SUCCEEDED
    @PHP/doc_examples/test096.php: SUCCEEDED
    @PHP/doc_examples/test097.php: SUCCEEDED
    @PHP/doc_examples/test098.php: SUCCEEDED
    @PHP/doc_examples/test099.php: SUCCEEDED
    @PHP/doc_examples/test100.php: SUCCEEDED
    @PHP/doc_examples/test102.php: SUCCEEDED
    @PHP/doc_examples/test103.php: SUCCEEDED
    @PHP/doc_examples/test104.php: SUCCEEDED
    @PHP/doc_examples/test105.php: SUCCEEDED
    @PHP/doc_examples/test107.php: SUCCEEDED
    @PHP/doc_examples/test108.php: SUCCEEDED
    @PHP/doc_examples/test109.php: SUCCEEDED
    @PHP/doc_examples/test110.php: SUCCEEDED
    @PHP/doc_examples/test111.php: SUCCEEDED
    @PHP/doc_examples/test112.php: SUCCEEDED
    @PHP/doc_examples/test113.php: SUCCEEDED
    @PHP/doc_examples/test114.php: SUCCEEDED
    @PHP/doc_examples/test115.php: SUCCEEDED
    @PHP/doc_examples/test116.php: SUCCEEDED
    @PHP/doc_examples/test117.php: SUCCEEDED
    @PHP/doc_examples/test118.php: SUCCEEDED
    @PHP/doc_examples/test119.php: SUCCEEDED
    @PHP/doc_examples/test120.php: SUCCEEDED
    @PHP/doc_examples/test121.php: SUCCEEDED
    @PHP/doc_examples/test122.php: SUCCEEDED
    @PHP/doc_examples/test123.php: SUCCEEDED
    @PHP/doc_examples/test124.php: SUCCEEDED
    @PHP/doc_examples/test125.php: SUCCEEDED
    @PHP/doc_examples/test126.php: SUCCEEDED
    @PHP/doc_examples/test127.php: SUCCEEDED
    @PHP/doc_examples/test128.php: SUCCEEDED
    @PHP/doc_examples/test129.php: SUCCEEDED
    @PHP/doc_examples/test130.php: SUCCEEDED
    @PHP/doc_examples/test131.php: SUCCEEDED
    @PHP/doc_examples/test132.php: SUCCEEDED
    @PHP/doc_examples/test133.php: SUCCEEDED
    @PHP/doc_examples/test134.php: SUCCEEDED
    @PHP/doc_examples/test136.php: SUCCEEDED
    @PHP/doc_examples/test137.php: SUCCEEDED
    @PHP/doc_examples/test138.php: SUCCEEDED
    @PHP/doc_examples/test139.php: SUCCEEDED
    @PHP/doc_examples/test148.php: SUCCEEDED
    @PHP/doc_examples/test149.php: SUCCEEDED
    @PHP/doc_examples/test150.php: SUCCEEDED
    @PHP/doc_examples/test151.php: SUCCEEDED
    @PHP/doc_examples/test152.php: SUCCEEDED
    @PHP/doc_examples/test153.php: SUCCEEDED
    @PHP/doc_examples/test154.php: SUCCEEDED
    @PHP/doc_examples/test155.php: SUCCEEDED
    @PHP/doc_examples/test156.php: SUCCEEDED
    @PHP/doc_examples/test158.php: SUCCEEDED
    @PHP/lang/001.php: SUCCEEDED
    @PHP/lang/002.php: SUCCEEDED
    @PHP/lang/003.php: SUCCEEDED
    @PHP/lang/004.php: SUCCEEDED
    @PHP/lang/005.php: SUCCEEDED
    @PHP/lang/006.php: SUCCEEDED
    @PHP/lang/007.php: SUCCEEDED
    @PHP/lang/008.php: SUCCEEDED
    @PHP/lang/009.php: SUCCEEDED
    @PHP/lang/010.php: SUCCEEDED
    @PHP/lang/011.php: SUCCEEDED
    @PHP/lang/012.php: SUCCEEDED
    @PHP/lang/013.php: SUCCEEDED
    @PHP/lang/014.php: SUCCEEDED
    @PHP/lang/015.php: SUCCEEDED
    @PHP/lang/016.php: SUCCEEDED
    @PHP/lang/017.php: SUCCEEDED
    @PHP/lang/018.php: SUCCEEDED
    @PHP/lang/019.php: SUCCEEDED
    @PHP/lang/020.php: SUCCEEDED
    @PHP/lang/021.php: SUCCEEDED
    @PHP/lang/022.php: SUCCEEDED
    @PHP/lang/023.php: SUCCEEDED
    @PHP/lang/024.php: SUCCEEDED
    @PHP/lang/025.php: SUCCEEDED
    @PHP/lang/026.php: SUCCEEDED
    @PHP/lang/027.php: SUCCEEDED
    @PHP/lang/028.php: SUCCEEDED
    @PHP/lang/030.php: SUCCEEDED
    @PHP/lang/032.php: SUCCEEDED
    @PHP/lang/036.php: SUCCEEDED
    @PHP/lang/037.php: SUCCEEDED
    @PHP/lang/038.php: SUCCEEDED
    @PHP/lang/039.php: SUCCEEDED
    @PHP/lang/040.php: SUCCEEDED
    @PHP/lang/bison1.php: SUCCEEDED
    @PHP/lang/bug17115.php: SUCCEEDED
    @PHP/lang/bug18872.php: SUCCEEDED
    @PHP/lang/bug19943.php: SUCCEEDED
    @PHP/lang/bug20175.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    Deprecated: Assigning the return value of new by reference is deprecated in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\lang\__input.txt on line 110
    foo_static()
    foo_global()
    foo:1
    foo_static()
    foo:1
    bar_static()
    bar_global()
    bar:1
    bar_static()
    bar:1
    wow_static()
    wow_global()
    wow:1
    wow_static()
    wow:1
    oop_test()
    oop_static()
    oop_class()
    oop:1
    oop_static()
    oop:1
    oop_test()
    oop_static()
    oop:1
    foo_static()
    foo_global()
    foo:1
    foo_static()
    foo:1
    bar_static()
    bar_global()
    bar:1
    bar_static()
    bar_global()
    bar:2
    wow_static()
    wow_global()
    wow:1
    wow_static()
    wow:1
    oop_test()
    oop_static()
    oop_class()
    oop:1
    oop_static()
    oop:1
    oop_test()
    oop_static()
    oop:1
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\lang\__input.txt(110,4): warning PHP0181: Assigning the return value of new by reference is deprecated
    
    @PHP/lang/bug21094.php: SUCCEEDED
    @PHP/lang/bug21600.php: SUCCEEDED
    @PHP/lang/bug21669.php: SUCCEEDED
    @PHP/lang/bug21849.php: SUCCEEDED
    @PHP/lang/bug21961.php: SUCCEEDED
    @PHP/lang/bug22231.php: SUCCEEDED
    @PHP/lang/bug22367.php: SUCCEEDED
    @PHP/lang/bug22510.php: SUCCEEDED
    @PHP/lang/bug22592.php: SUCCEEDED
    @PHP/lang/bug22690.php: SUCCEEDED
    @PHP/lang/bug23279.php: SUCCEEDED
    @PHP/lang/bug23384.php: SUCCEEDED
    @PHP/lang/bug23489.php: SUCCEEDED
    @PHP/lang/bug23524.php: SUCCEEDED
    @PHP/lang/bug23922.php: SUCCEEDED
    @PHP/lang/bug24054.php: SUCCEEDED
    @PHP/lang/bug24396.php: SUCCEEDED
    @PHP/lang/bug24403.php: SUCCEEDED
    @PHP/lang/bug24436.php: SUCCEEDED
    @PHP/lang/bug24499.php: SUCCEEDED
    @PHP/lang/bug24640.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    double(1700000000000000089258092433847514422797596587883870563356951996370064178581143932836831337636761368874297554515902592900802289500112731978596146714137401870842258241575178866354311397451139753100927220499450359906637902366244989496126909662726242240784739940994096632824796638102733857671280980918272.0000000000)
    1.7E+300
    
    ------
    double(0.0000000000)
    1.7E-300
    
    ------
    double(17000000000000001584208052028780237480128823455860622330108867175329927830437888.0000000000)
    1.7E+79
    
    ------
    double(0.0000000000)
    1.7E-79
    
    ------
    double(169999999999999996096025832433329868941658043870400163508258284150340918121070592.0000000000)
    1.7E+80
    
    ------
    double(0.0000000000)
    1.7E-80
    
    ------
    double(1700000000000000013616404158611892038375594280539217794530130541777964808366194688.0000000000)
    1.7E+81
    
    ------
    double(0.0000000000)
    1.7E-81
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    1.6999810742106E-319
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    1.7000798873397E-320
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    1.6995858216939E-321
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    0
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    0
    
    ------
    double(1700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+300
    
    ------
    double(0.0000000000)
    1.70000000000003E-300
    
    ------
    double(17000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+79
    
    ------
    double(0.0000000000)
    1.70000000000001E-79
    
    ------
    double(170000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+80
    
    ------
    double(0.0000000000)
    1.70000000000001E-80
    
    ------
    double(1700000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+81
    
    ------
    double(0.0000000000)
    1.70000000000001E-81
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    1.69998107421056E-319
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    1.70007988733973E-320
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    1.69464516523548E-321
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    0
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    0
    
    ------
    @PHP/lang/bug24652.php: SUCCEEDED
    @PHP/lang/bug24658.php: SUCCEEDED
    @PHP/lang/bug24783.php: SUCCEEDED
    @PHP/lang/bug24926.php: SUCCEEDED
    @PHP/lang/bug25547.php: SUCCEEDED
    @PHP/lang/bug25652.php: SUCCEEDED
    @PHP/lang/bug25922.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Undefined index here: 'error'
    Undefined index here: ''
    @PHP/lang/bug26182.php: SUCCEEDED
    @PHP/lang/bug26696.php: SUCCEEDED
    @PHP/lang/bug26866.php: SUCCEEDED
    @PHP/lang/bug26869.php: SUCCEEDED
    @PHP/lang/bug27354.php: SUCCEEDED
    @PHP/lang/bug27439.php: SUCCEEDED
    @PHP/lang/bug27535.php: SUCCEEDED
    @PHP/lang/bug28213.php: SUCCEEDED
    @PHP/lang/bug28800.php: SUCCEEDED
    @PHP/lang/bug29566.php: SUCCEEDED
    @PHP/lang/bug29893.php: SUCCEEDED
    @PHP/lang/bug29944.php: SUCCEEDED
    @PHP/lang/bug30638.php: SUCCEEDED
    @PHP/lang/bug30726.php: SUCCEEDED
    @PHP/lang/bug30862.php: SUCCEEDED
    @PHP/lang/bug32924.php: SUCCEEDED
    @PHP/lang/bug35382.php: SUCCEEDED
    @PHP/lang/bug7515.php: SUCCEEDED
    @PHP/lang/each_binary_safety.php: SUCCEEDED
    @PHP/lang/error_2_exception_001.php: SUCCEEDED
    @PHP/lang/foreach_with_object_001.php: SUCCEEDED
    @PHP/lang/foreach_with_references_001.php: SUCCEEDED
    @PHP/lang/type_hints_001.php: SUCCEEDED
    @PHP/standard/array/001.php: SUCCEEDED
    @PHP/standard/array/003.php: SUCCEEDED
    @PHP/standard/array/004.php: SUCCEEDED
    @PHP/standard/array/005.php: SUCCEEDED
    @PHP/standard/array/008.php: SUCCEEDED
    @PHP/standard/array/array_change_key_case.php: SUCCEEDED
    @PHP/standard/array/array_chunk.php: SUCCEEDED
    @PHP/standard/array/array_count_values.php: SUCCEEDED
    @PHP/standard/array/array_diff_1.php: SUCCEEDED
    @PHP/standard/array/array_diff_key.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ------ Test 1 --------
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 2 --------
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 3 --------
    array(6) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [2]=>
      int(4)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [2]=>
      int(4)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 4 --------
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 5 --------
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 6 --------
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 7 --------
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    ------ Test 8 --------
    array(6) {
      [0]=>
      int(0)
      [7]=>
      int(14)
      [2]=>
      int(4)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [0]=>
      int(0)
      [7]=>
      int(14)
      [2]=>
      int(4)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 9 --------
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    ------ Test 1 --------
    array(4) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(4) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 2 --------
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 3 --------
    array(6) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [2]=>
      &int(4)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [2]=>
      &int(4)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 4 --------
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 5 --------
    array(4) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(4) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 6 --------
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 7 --------
    array(3) {
      [7]=>
      &int(14)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
    }
    array(3) {
      [7]=>
      &int(14)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
    }
    ------ Test 8 --------
    array(6) {
      [0]=>
      &int(0)
      [7]=>
      &int(14)
      [2]=>
      &int(4)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [0]=>
      &int(0)
      [7]=>
      &int(14)
      [2]=>
      &int(4)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 9 --------
    array(3) {
      [7]=>
      &int(14)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
    }
    array(3) {
      [7]=>
      &int(14)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
    }
    @PHP/standard/array/array_intersect_key.php: SUCCEEDED
    @PHP/standard/array/array_sum.php: SUCCEEDED
    @PHP/standard/array/array_walk_recursive.php: SUCCEEDED
    @PHP/standard/array/bug12776.php: SUCCEEDED
    @PHP/standard/array/bug14580.php: SUCCEEDED
    @PHP/standard/array/bug20381.php: SUCCEEDED
    @PHP/standard/array/bug20865.php: SUCCEEDED
    @PHP/standard/array/bug21182.php: SUCCEEDED
    @PHP/standard/array/bug21918.php: SUCCEEDED
    @PHP/standard/array/bug21998.php: SUCCEEDED
    @PHP/standard/array/bug22088.php: SUCCEEDED
    @PHP/standard/array/bug22463.php: SUCCEEDED
    @PHP/standard/array/bug23581.php: SUCCEEDED
    @PHP/standard/array/bug23788.php: SUCCEEDED
    @PHP/standard/array/bug24198.php: SUCCEEDED
    @PHP/standard/array/bug24220.php: SUCCEEDED
    @PHP/standard/array/bug24766.php: SUCCEEDED
    @PHP/standard/array/bug24897.php: SUCCEEDED
    @PHP/standard/array/bug24980.php: SUCCEEDED
    @PHP/standard/array/bug25359.php: SUCCEEDED
    @PHP/standard/array/bug25708.php: SUCCEEDED
    @PHP/standard/array/bug25758.php: SUCCEEDED
    @PHP/standard/array/bug26458.php: SUCCEEDED
    @PHP/standard/array/bug28974.php: SUCCEEDED
    @PHP/standard/array/bug29493.php: SUCCEEDED
    @PHP/standard/array/bug30266.php: SUCCEEDED
    @PHP/standard/array/bug30833.php: SUCCEEDED
    @PHP/standard/array/bug31158.php: SUCCEEDED
    @PHP/standard/array/bug31213.php: SUCCEEDED
    @PHP/standard/array/bug32021.php: SUCCEEDED
    @PHP/standard/array/bug33382.php: SUCCEEDED
    @PHP/standard/array/bug33989.php: SUCCEEDED
    @PHP/standard/array/bug34227.php: SUCCEEDED
    @PHP/standard/array/bug34982.php: SUCCEEDED
    @PHP/standard/array/bug35014.php: SUCCEEDED
    @PHP/standard/array/bug35022.php: SUCCEEDED
    @PHP/standard/array/bug35821.php: SUCCEEDED
    @PHP/standard/array/count_recursive.php: SUCCEEDED
    @PHP/standard/array/locale_sort.php: SUCCEEDED
    @PHP/standard/array/range.php: SUCCEEDED
    @PHP/standard/assert/assert.php: SUCCEEDED
    @PHP/standard/general_functions/001.php: SUCCEEDED
    @PHP/standard/general_functions/002.php: SUCCEEDED
    @PHP/standard/general_functions/003.php: SUCCEEDED
    @PHP/standard/general_functions/004.php: SUCCEEDED
    @PHP/standard/general_functions/005.php: SUCCEEDED
    @PHP/standard/general_functions/006.php: SUCCEEDED
    @PHP/standard/general_functions/007.php: SUCCEEDED
    @PHP/standard/general_functions/009.php: SUCCEEDED
    @PHP/standard/general_functions/bug25038.php: SUCCEEDED
    @PHP/standard/general_functions/bug27678.php: SUCCEEDED
    @PHP/standard/general_functions/bug29038.php: SUCCEEDED
    @PHP/standard/general_functions/bug31190.php: SUCCEEDED
    @PHP/standard/general_functions/bug32647.php: SUCCEEDED
    @PHP/standard/general_functions/bug35229.php: SUCCEEDED
    @PHP/standard/general_functions/is_resource.php: SUCCEEDED
    @PHP/standard/math/abs.php: SUCCEEDED
    @PHP/standard/math/bug24142.php: SUCCEEDED
    @PHP/standard/math/bug25694.php: SUCCEEDED
    @PHP/standard/math/bug27646.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    double(INF-INF)
    'd:-INF;'
    double(INF-INF)
    double(INF-INF)
    'd:INF;'
    double(INF-INF)
    double(NaNInfini)
    'd:NAN;'
    double(NaNInfini)
    double(-Infinity)
    'd:-INF;'
    double(-Infinity)
    double(Infinity)
    'd:INF;'
    double(Infinity)
    double(NaN)
    'd:NAN;'
    double(NaN)
    @PHP/standard/math/bug30069.php: SUCCEEDED
    @PHP/standard/math/bug30695.php: SUCCEEDED
    @PHP/standard/math/floorceil.php: SUCCEEDED
    @PHP/standard/math/hexdec.php: SUCCEEDED
    @PHP/standard/math/log.php: SUCCEEDED
    @PHP/standard/math/pow.php: SUCCEEDED
    @PHP/standard/math/round.php: SUCCEEDED
    @PHP/standard/reg/001.php: SUCCEEDED
    @PHP/standard/reg/002.php: SUCCEEDED
    @PHP/standard/reg/003.php: SUCCEEDED
    @PHP/standard/reg/004.php: SUCCEEDED
    @PHP/standard/reg/005.php: SUCCEEDED
    @PHP/standard/reg/006.php: SUCCEEDED
    @PHP/standard/reg/007.php: SUCCEEDED
    @PHP/standard/reg/008.php: SUCCEEDED
    @PHP/standard/reg/009.php: SUCCEEDED
    @PHP/standard/reg/010.php: SUCCEEDED
    @PHP/standard/reg/011.php: SUCCEEDED
    @PHP/standard/reg/012.php: SUCCEEDED
    @PHP/standard/reg/013.php: SUCCEEDED
    @PHP/standard/reg/014.php: SUCCEEDED
    @PHP/standard/reg/015.php: SUCCEEDED
    @PHP/standard/reg/016.php: SUCCEEDED
    @PHP/standard/serialize/001.php: SUCCEEDED
    @PHP/standard/serialize/002.php: SUCCEEDED
    @PHP/standard/serialize/003.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    d:100;
    double(100.0000000000)
    
    d:51999999999999996980101120;
    double(51999999999999996980101120.0000000000)
    
    d:8.9999999999999995265585574287341141808127531476202420890331268310546875E-9;
    double(0.0000000090)
    d:100;
    double(100.0000000000)
    
    d:5.2000000000000006E+25;
    double(52000000000000000000000000.0000000000)
    
    d:9.0000000000000045E-09;
    double(0.0000000090)
    @PHP/standard/serialize/004.php: SUCCEEDED
    @PHP/standard/serialize/005.php: SUCCEEDED
    @PHP/standard/serialize/006.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    'O:3:"´┐Ż":1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    object
    {
      '´┐Ż' => '´┐Ż'
    }
    'a:1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    array
    {
      '´┐Ż' => '´┐Ż'
    }
    'O:3:"´┐Ż":1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    object
    {
      'ďż˝' => '´┐Ż'
    }
    'a:1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    array
    {
      'ďż˝' => '´┐Ż'
    }
    @PHP/standard/serialize/bug14293.php: SUCCEEDED
    @PHP/standard/serialize/bug21957.php: SUCCEEDED
    @PHP/standard/serialize/bug23298.php: SUCCEEDED
    @PHP/standard/serialize/bug24063.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0.1 0.1
    0.01 0.01
    0.001 0.001
    0.0001 0.0001
    1.0E-5 1.0E-5
    1.0E-6 1.0E-6
    1.0E-7 1.0E-7
    1.0E-8 1.0E-8
    1.0E-9 1.0E-9
    0.1 0.1
    0.01 0.01
    0.001 0.001
    0.0001 0.0001
    1E-05 1E-05
    1E-06 1E-06
    1E-07 1E-07
    1E-08 1E-08
    1E-09 1E-09
    @PHP/standard/serialize/bug25378.php: SUCCEEDED
    @PHP/standard/serialize/bug26762.php: SUCCEEDED
    @PHP/standard/serialize/bug27469.php: SUCCEEDED
    @PHP/standard/serialize/bug28325.php: SUCCEEDED
    @PHP/standard/serialize/bug30234.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    FALSE
    FALSE
    __autoload(Autoload_Implements)
    object [invalid]
    FALSE
    FALSE
    FALSE
    FALSE
    TRUE
    __autoload(Autoload_Implements)
    object [invalid]
    FALSE
    FALSE
    TRUE
    @PHP/standard/serialize/bug31402.php: SUCCEEDED
    @PHP/standard/serialize/bug31442.php: SUCCEEDED
    @PHP/standard/strings/add-and-stripcslashes.php: SUCCEEDED
    @PHP/standard/strings/add-and-stripslashes.php: SUCCEEDED
    @PHP/standard/strings/basename.php: SUCCEEDED
    @PHP/standard/strings/bin2hex.php: SUCCEEDED
    @PHP/standard/strings/bug20108.php: SUCCEEDED
    @PHP/standard/strings/bug20169.php: SUCCEEDED
    @PHP/standard/strings/bug20261.php: SUCCEEDED
    @PHP/standard/strings/bug20927.php: SUCCEEDED
    @PHP/standard/strings/bug21338.php: SUCCEEDED
    @PHP/standard/strings/bug21453.php: SUCCEEDED
    @PHP/standard/strings/bug21730.php: SUCCEEDED
    @PHP/standard/strings/bug21744.php: SUCCEEDED
    @PHP/standard/strings/bug22008.php: SUCCEEDED
    @PHP/standard/strings/bug22187.php: SUCCEEDED
    @PHP/standard/strings/bug22224.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      0 => 
      object
      {
      }
      1 => 
      object
      {
      }
    }
    @PHP/standard/strings/bug22227.php: SUCCEEDED
    @PHP/standard/strings/bug22904.php: SUCCEEDED
    @PHP/standard/strings/bug23650.php: SUCCEEDED
    @PHP/standard/strings/bug23894.php: SUCCEEDED
    @PHP/standard/strings/bug24098.php: SUCCEEDED
    @PHP/standard/strings/bug24208.php: SUCCEEDED
    @PHP/standard/strings/bug24281.php: SUCCEEDED
    @PHP/standard/strings/bug25671.php: SUCCEEDED
    @PHP/standard/strings/bug25707.php: SUCCEEDED
    @PHP/standard/strings/bug26878.php: SUCCEEDED
    @PHP/standard/strings/bug26973.php: SUCCEEDED
    @PHP/standard/strings/bug27276.php: SUCCEEDED
    @PHP/standard/strings/bug27278.php: SUCCEEDED
    @PHP/standard/strings/bug27295.php: SUCCEEDED
    @PHP/standard/strings/bug27457.php: SUCCEEDED
    @PHP/standard/strings/bug27675.php: SUCCEEDED
    @PHP/standard/strings/bug28386.php: SUCCEEDED
    @PHP/standard/strings/bug33076.php: SUCCEEDED
    @PHP/standard/strings/chr_ord.php: SUCCEEDED
    @PHP/standard/strings/chunk_split.php: SUCCEEDED
    @PHP/standard/strings/count_chars.php: SUCCEEDED
    @PHP/standard/strings/crc32.php: SUCCEEDED
    @PHP/standard/strings/explode.php: SUCCEEDED
    @PHP/standard/strings/implode.php: SUCCEEDED
    @PHP/standard/strings/md5.php: SUCCEEDED
    @PHP/standard/strings/md5raw.php: SUCCEEDED
    @PHP/standard/strings/nl2br.php: SUCCEEDED
    @PHP/standard/strings/sha1.php: SUCCEEDED
    @PHP/standard/strings/sha1raw.php: SUCCEEDED
    @PHP/standard/strings/sprintf_f.php: SUCCEEDED
    @PHP/standard/strings/strcspn.php: SUCCEEDED
    @PHP/standard/strings/strings001.php: SUCCEEDED
    @PHP/standard/strings/strpos.php: SUCCEEDED
    @PHP/standard/strings/strrev.php: SUCCEEDED
    @PHP/standard/strings/strripos.php: SUCCEEDED
    @PHP/standard/strings/strrpos.php: SUCCEEDED
    @PHP/standard/strings/strspn.php: SUCCEEDED
    @PHP/standard/strings/strstr.php: SUCCEEDED
    @PHP/standard/strings/strtoupper.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    cfbfbdcfbfbdcfbfbd
    cfafbdcfafbdcfafbd
    @PHP/standard/strings/strtr.php: SUCCEEDED
    @PHP/standard/strings/strval.php: SUCCEEDED
    @PHP/standard/strings/str_repeat.php: SUCCEEDED
    @PHP/standard/strings/str_shuffle.php: SUCCEEDED
    @PHP/standard/strings/str_word_count.php: SUCCEEDED
    @PHP/standard/strings/substr_count.php: SUCCEEDED
    @PHP/standard/strings/substr_replace.php: SUCCEEDED
    @PHP/standard/strings/wordwrap.php: SUCCEEDED
    @PHP/standard/time/001.php: SUCCEEDED
    @PHP/standard/time/idate.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    U: 1043324459
    Y: 2003
    z: 22
    y: 3
    m: 1
    n: 1
    d: 23
    j: 23
    H: 13
    G: 13
    h: 1
    g: 1
    i: 20
    s: 59
    t: 31
    w: 4
    L: 0
    B: 556
    I: 0
    W: 4
    U: 1043324459
    Y: 2003
    z: 22
    y: 3
    m: 1
    n: 1
    d: 23
    j: 23
    H: 12
    G: 12
    h: 12
    g: 12
    i: 20
    s: 59
    t: 31
    w: 4
    L: 0
    B: 556
    I: 0
    W: 4
    @PHP/strings/001.php: SUCCEEDED
    @PHP/strings/002.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    fprintf test 1:abcde
    20
    printf test 1:simple string
    printf test 2:42
    printf test 3:3.333333
    printf test 4:3.3333333333
    printf test 5:2.50      
    printf test 6:2.50000000
    printf test 7:0000002.50
    printf test 8:<                 foo>
    printf test 9:<bar                 >
    printf test 10: 123456789012345
    printf test 10:<h´┐Żyesterettsjustitiarius>
    printf test 11: 123456789012345678901234567890
    printf test 11:<    h´┐Żyesterettsjustitiarius>
    printf test 12:-12.34
    printf test 13:  -12
    printf test 14:@
    printf test 15:10101010
    printf test 16:aa
    printf test 17:AA
    printf test 18:        10101010
    printf test 19:              aa
    printf test 20:              AA
    printf test 21:0000000010101010
    printf test 22:00000000000000aa
    printf test 23:00000000000000AA
    printf test 24:abcde
    printf test 25:gazonk
    printf test 26:2 1
    printf test 27:3 1 2
    printf test 28:02  1
    printf test 29:2   1
    printf test 30:x
    vprintf test 1:2   1
    fprintf test 1:abcde
    20
    printf test 1:simple string
    printf test 2:42
    printf test 3:3.333333
    printf test 4:3.3333333333
    printf test 5:2.50      
    printf test 6:2.50000000
    printf test 7:0000002.50
    printf test 8:<                 foo>
    printf test 9:<bar                 >
    printf test 10: 123456789012345
    printf test 10:<h�yesterettsjustitiarius>
    printf test 11: 123456789012345678901234567890
    printf test 11:<    h�yesterettsjustitiarius>
    printf test 12:-12.34
    printf test 13:  -12
    printf test 14:@
    printf test 15:10101010
    printf test 16:aa
    printf test 17:AA
    printf test 18:        10101010
    printf test 19:              aa
    printf test 20:              AA
    printf test 21:0000000010101010
    printf test 22:00000000000000aa
    printf test 23:00000000000000AA
    printf test 24:abcde
    printf test 25:gazonk
    printf test 26:2 1
    printf test 27:3 1 2
    printf test 28:02  1
    printf test 29:2   1
    printf test 30:x
    vprintf test 1:2   1
    @PHP/strings/bug22592.php: SUCCEEDED
    Arrays/array1.php: SUCCEEDED
    Arrays/array_diff_intersect.php: SUCCEEDED
    Arrays/array_diff_intersect2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Strict Standards: array_udiff() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 35
    Array
    (
        [0.5] => cr Object
            (
                [priv_member:cr:private] => 12
            )
    
        [0] => cr Object
            (
                [priv_member:cr:private] => 23
            )
    
    )
    
    Strict Standards: array_udiff_assoc() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 36
    Array
    (
        [0.1] => cr Object
            (
                [priv_member:cr:private] => 9
            )
    
        [0.5] => cr Object
            (
                [priv_member:cr:private] => 12
            )
    
        [0] => cr Object
            (
                [priv_member:cr:private] => 23
            )
    
    )
    
    Strict Standards: array_udiff_uassoc() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 37
    
    Strict Standards: array_udiff_uassoc() expects parameter 4 to be a valid callback, non-static method cr::comp_func_key() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 37
    Array
    (
        [0.1] => cr Object
            (
                [priv_member:cr:private] => 9
            )
    
        [0.5] => cr Object
            (
                [priv_member:cr:private] => 12
            )
    
        [0] => cr Object
            (
                [priv_member:cr:private] => 23
            )
    
    )
    Array
    (
        [b] => brown
        [c] => blue
        [0] => red
    )
    ------------------------------------
    
    Strict Standards: array_uintersect() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 40
    Array
    (
        [0.1] => cr Object
            (
                [priv_member:cr:private] => 9
            )
    
        [1] => cr Object
            (
                [priv_member:cr:private] => 4
            )
    
        [2] => cr Object
            (
                [priv_member:cr:private] => -15
            )
    
    )
    
    Strict Standards: array_uintersect_assoc() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 41
    Array
    (
        [1] => cr Object
            (
                [priv_member:cr:private] => 4
            )
    
        [2] => cr Object
            (
                [priv_member:cr:private] => -15
            )
    
    )
    
    Strict Standards: array_uintersect_uassoc() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 42
    
    Strict Standards: array_uintersect_uassoc() expects parameter 4 to be a valid callback, non-static method cr::comp_func_key() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 42
    Array
    (
        [1] => cr Object
            (
                [priv_member:cr:private] => 4
            )
    
        [2] => cr Object
            (
                [priv_member:cr:private] => -15
            )
    
    )
    Array
    (
        [a] => green
    )
    Array
    (
        [0.5] => cr Object
        (
            [priv_member:private] => 12
        )
    
        [0] => cr Object
        (
            [priv_member:private] => 23
        )
    
    )
    Array
    (
        [0.1] => cr Object
        (
            [priv_member:private] => 9
        )
    
        [0.5] => cr Object
        (
            [priv_member:private] => 12
        )
    
        [0] => cr Object
        (
            [priv_member:private] => 23
        )
    
    )
    Array
    (
        [0.1] => cr Object
        (
            [priv_member:private] => 9
        )
    
        [0.5] => cr Object
        (
            [priv_member:private] => 12
        )
    
        [0] => cr Object
        (
            [priv_member:private] => 23
        )
    
    )
    Array
    (
        [b] => brown
        [c] => blue
        [0] => red
    )
    ------------------------------------
    Array
    (
        [0.1] => cr Object
        (
            [priv_member:private] => 9
        )
    
        [1] => cr Object
        (
            [priv_member:private] => 4
        )
    
        [2] => cr Object
        (
            [priv_member:private] => -15
        )
    
    )
    Array
    (
        [1] => cr Object
        (
            [priv_member:private] => 4
        )
    
        [2] => cr Object
        (
            [priv_member:private] => -15
        )
    
    )
    Array
    (
        [1] => cr Object
        (
            [priv_member:private] => 4
        )
    
        [2] => cr Object
        (
            [priv_member:private] => -15
        )
    
    )
    Array
    (
        [a] => green
    )
    Arrays/array_diff_intersect3.php: SUCCEEDED
    Arrays/array_filter%20false%20entries%20%2322016.php: SUCCEEDED
    Arrays/array_map.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Array
    (
        [0] => Array
            (
                [0] => 1
                [1] => A
                [2] => 0
            )
    
        [1] => Array
            (
                [0] => 2
                [1] => B
                [2] => 0
            )
    
        [2] => Array
            (
                [0] => 3
                [1] => C
                [2] => 
            )
    
    )
    Array
    (
        [0] => 1 A 0
        [1] => 2 B 0
        [2] => 3 C 
    )
    Array
    (
        [A] => 2
        [10] => 3
    )
    Array
    (
        [0] => 1
        [1] => 2
        [2] => 3
    )
    Array
    (
        [0] => A
        [1] => B
        [2] => C
    )
    Array
    (
        [0] => 0
        [1] => 0
    )
    Array
    (
        [A] => 1
        [10] => 2
    )
    Array
    (
        [0] => Array
        (
            [0] => 1
            [1] => A
            [2] => 0
        )
    
        [1] => Array
        (
            [0] => 2
            [1] => B
            [2] => 0
        )
    
        [2] => Array
        (
            [0] => 3
            [1] => C
            [2] => 
        )
    
    )
    Array
    (
        [0] => 1 A 0
        [1] => 2 B 0
        [2] => 3 C 
    )
    Array
    (
        [A] => 2
        [10] => 3
    )
    Array
    (
        [0] => 1
        [1] => 2
        [2] => 3
    )
    Array
    (
        [0] => A
        [1] => B
        [2] => C
    )
    Array
    (
        [0] => x
        [1] => x
    )
    Array
    (
        [A] => 1
        [10] => 2
    )
    Arrays/array_merge_recursive.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Array
    (
        [color] => Array
            (
                [favorite] => Array
                    (
                        [0] => red
                        [1] => green
                    )
    
                [0] => blue
            )
    
        [0] => Array
            (
                [0] => 1
                [1] => 2
                [2] => 3
            )
    
        [q] => Array
            (
                [0] => 
                [1] => 
                [2] => x
            )
    
        [1] => 10
        [2] => Array
            (
                [0] => 4
                [1] => 5
                [2] => 6
            )
    
    )
    Array
    (
        [a] => Array
            (
                [0] => 1
                [1] => 2
                [2] => 3
                [3] => e
            )
    
    )
    Array
    (
        [a] => Array
            (
                [0] => 1
                [1] => 2
                [2] => 3
                [3] => e
            )
    
    )
    Array
    (
        [a] => 1
        [b] => 2
    )
    Array
    (
        [a] => xxx
        [b] => 2
    )
    Array
    (
        [a] => Array
            (
                [a] => Array
                    (
                        [a] => Array
     *RECURSION*
                    )
    
                [0] => 1
                [1] => 2
                [2] => 3
            )
    
    )
    Array
    (
        [a] => Array
            (
                [b] => Array
                    (
                        [0] => 1
                        [1] => 1
                    )
    
                [c] => 1
                [d] => Array
                    (
                        [0] => 2
                        [1] => 3
                    )
    
            )
    
    )
    Array
    (
        [a] => Array
            (
                [0] => 
                [1] => 
            )
    
    )
    Array
    (
        [a] => Array
            (
                [0] => 
                [1] => 
            )
    
    )
    Array
    (
        [color] => Array
        (
            [favorite] => Array
            (
                [0] => red
                [1] => green
            )
    
            [0] => blue
        )
    
        [0] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
        )
    
        [q] => Array
        (
            [0] => x
        )
    
        [1] => 10
        [2] => Array
        (
            [0] => 4
            [1] => 5
            [2] => 6
        )
    
    )
    Array
    (
        [a] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
            [3] => e
        )
    
    )
    Array
    (
        [a] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
            [3] => e
        )
    
    )
    Array
    (
        [a] => 1
        [b] => 2
    )
    Array
    (
        [a] => xxx
        [b] => 2
    )
    Array
    (
        [a] => Array
        (
            [a] => Array
            (
                [a] => Array [recursion]
    
    
            )
    
            [0] => 1
            [1] => 2
            [2] => 3
        )
    
    )
    Array
    (
        [a] => Array
        (
            [b] => Array
            (
                [0] => 1
                [1] => 1
            )
    
            [c] => 1
            [d] => Array
            (
                [0] => 2
                [1] => 3
            )
    
        )
    
    )
    Array
    (
        [a] => Array
        (
        )
    
    )
    Array
    (
        [a] => Array
        (
        )
    
    )
    Arrays/array_reduce1.php: SUCCEEDED
    Arrays/array_reduce2.php: SUCCEEDED
    Arrays/array_slice.php: SUCCEEDED
    Arrays/array_sumprod.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    float(8.3)
    float(0)
    int(6)
    int(6)
    float(4294967297)
    float(9.2233720282648E+18)
    bool(true)
    bool(false)
    float(-7.7)
    float(-38.4)
    int(6)
    int(6)
    int64(4294967297)
    int64(9223372028264841218)
    bool(true)
    bool(true)
    Arrays/array_unset_add.php: SUCCEEDED
    Arrays/array_unshift.php: SUCCEEDED
    Arrays/array_walk.php: SUCCEEDED
    Arrays/array_walk_recursive.php: SUCCEEDED
    Arrays/multisort.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    bool(true)
    Array
    (
        [0] => Array
            (
                [0] => 2
                [1] => 8
                [2] => 2
                [3] => 2
                [4] => 8
                [5] => 8
            )
    
        [1] => Array
            (
                [0] => 7
                [1] => 2
                [2] => 7
                [3] => 4
                [4] => 8
                [5] => 1
            )
    
        [2] => Array
            (
                [0] => 1
                [1] => 4
                [2] => 8
                [3] => 0
                [4] => 6
                [5] => 2
            )
    
        [3] => Array
            (
                [0] => 8
                [1] => 4
                [2] => 1
                [3] => 0
                [4] => 7
                [5] => 1
            )
    
        [4] => Array
            (
                [0] => 20
                [1] => 2
                [2] => 12
                [3] => 11
                [4] => 10
                [5] => 1
            )
    
    )
    Array
    (
        [0] => Array
            (
                [0] => 10
                [1] => 100
                [2] => 100
                [3] => a
            )
    
        [1] => Array
            (
                [0] => 1
                [1] => 3
                [2] => 2
                [3] => 1
            )
    
    )
    Array
    (
        [0] => 10
        [1] => a
        [2] => 100
        [3] => 100
    )
    Array
    (
        [0] => 1
        [1] => 1
        [2] => 2
        [3] => 3
    )
    bool(true)
    Array
    (
        [0] => Array
        (
            [0] => 2
            [1] => 8
            [2] => 2
            [3] => 2
            [4] => 8
            [5] => 8
        )
    
        [1] => Array
        (
            [0] => 7
            [1] => 2
            [2] => 7
            [3] => 4
            [4] => 8
            [5] => 1
        )
    
        [2] => Array
        (
            [0] => 1
            [1] => 4
            [2] => 8
            [3] => 0
            [4] => 6
            [5] => 2
        )
    
        [3] => Array
        (
            [0] => 8
            [1] => 4
            [2] => 1
            [3] => 0
            [4] => 7
            [5] => 1
        )
    
        [4] => Array
        (
            [0] => 20
            [1] => 2
            [2] => 12
            [3] => 11
            [4] => 10
            [5] => 1
        )
    
    )
    Array
    (
        [0] => Array
        (
            [0] => 10
            [1] => 100
            [2] => 100
            [3] => a
        )
    
        [1] => Array
        (
            [0] => 1
            [1] => 3
            [2] => 2
            [3] => 1
        )
    
    )
    Array
    (
        [0] => 10
        [1] => a
        [2] => 100
        [3] => 100
    )
    Array
    (
        [0] => 1
        [1] => 1
        [2] => 2
        [3] => 3
    )
    Arrays/multisort_empty.php: SUCCEEDED
    Arrays/nonarray%20access%20%2322019.php: SUCCEEDED
    Arrays/optimizations.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    3
    4
    5
    a
    b
    c
    
    Warning: strtolower() expects parameter 1 to be string, array given in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 15
    
    cablo
    3
    4
    5
    a
    b
    c
    array
    cablo
    Arrays/recursion.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    f1:
    array(2) {
      ["a"]=>
      array(5) {
        ["a"]=>
        &array(3) {
          ["a"]=>
          &array(3) {
            ["a"]=>
            *RECURSION*
            [0]=>
            string(1) "y"
            [1]=>
            string(1) "z"
          }
          [0]=>
          string(1) "y"
          [1]=>
          string(1) "z"
        }
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        string(1) "x"
      }
      [0]=>
      string(1) "w"
    }
    f2:
    array(1) {
      ["A"]=>
      &array(2) {
        ["a"]=>
        &array(2) {
          ["a"]=>
          *RECURSION*
          [0]=>
          string(1) "z"
        }
        [0]=>
        string(1) "z"
      }
    }
    f3:
    array(2) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) {
          [0]=>
          *RECURSION*
          [1]=>
          string(1) "z"
        }
        [1]=>
        string(1) "z"
      }
      [1]=>
      string(1) "z"
    }
    f4:
    
    Warning: array_merge_recursive(): recursion detected in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 37
    array(1) {
      ["a"]=>
      &array(3) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
      }
    }
    f5:
    array(1) {
      ["a"]=>
      array(6) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        int(1)
        [4]=>
        int(2)
        [5]=>
        int(3)
      }
    }
    f6:
    array(1) {
      ["a"]=>
      array(2) {
        [0]=>
        string(2) "xx"
        [1]=>
        int(2)
      }
    }
    f7:
    array(1) {
      ["a"]=>
      array(1) {
        ["a"]=>
        array(1) {
          ["a"]=>
          &array(1) {
            ["a"]=>
            &array(1) {
              ["a"]=>
              *RECURSION*
            }
          }
        }
      }
    }
    f1:
    array(2) {
      ["a"]=>
      array(5) {
        ["a"]=>
        &array(3) {
          ["a"]=>
          &array(3) [recursion]
          [0]=>
          string(1) "y"
          [1]=>
          string(1) "z"
        }
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        string(1) "x"
      }
      [0]=>
      string(1) "w"
    }
    f2:
    array(1) {
      ["A"]=>
      &array(2) {
        ["a"]=>
        &array(2) [recursion]
        [0]=>
        string(1) "z"
      }
    }
    f3:
    array(2) {
      [0]=>
      &array(2) [recursion]
      [1]=>
      string(1) "z"
    }
    f4:
    array(1) {
      ["a"]=>
      array(6) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        int(1)
        [4]=>
        int(2)
        [5]=>
        int(3)
      }
    }
    f5:
    array(1) {
      ["a"]=>
      array(6) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        int(1)
        [4]=>
        int(2)
        [5]=>
        int(3)
      }
    }
    f6:
    array(1) {
      ["a"]=>
      array(2) {
        [0]=>
        string(2) "xx"
        [1]=>
        int(2)
      }
    }
    f7:
    array(1) {
      ["a"]=>
      &array(1) {
        ["a"]=>
        &array(1) [recursion]
      }
    }
    Arrays/sort.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    sort regular:
    Array
    (
        [0] => 0
        [1] => 1
        [2] => 1
        [3] => 8
        [4] => 0x10
        [5] => 10x
        [6] => 20x
        [7] => ach0
        [8] => add1
        [9] => x10
        [10] => x2
    )
    
    sort numeric:
    Array
    (
        [0] => add1
        [1] => x2
        [2] => 0x10
        [3] => ach0
        [4] => 0
        [5] => x10
        [6] => 1
        [7] => 1
        [8] => 8
        [9] => 10x
        [10] => 20x
    )
    
    sort string:
    Array
    (
        [0] => 0
        [1] => 0x10
        [2] => 1
        [3] => 1
        [4] => 10x
        [5] => 20x
        [6] => 8
        [7] => ach0
        [8] => add1
        [9] => x10
        [10] => x2
    )
    
    sort locale:
    Array
    (
        [0] => 0
        [1] => 0x10
        [2] => 1
        [3] => 1
        [4] => 10x
        [5] => 20x
        [6] => 8
        [7] => ach0
        [8] => add1
        [9] => x10
        [10] => x2
    )
    
    ksort regular:
    Array
    (
        [x] => 8
        [z] => 1
        [0] => x10
        [1] => 10x
        [2b] => 1
        [2] => 20x
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [10a] => 0
    )
    
    ksort numeric:
    Array
    (
        [x] => 8
        [z] => 1
        [0] => x10
        [1] => 10x
        [2b] => 1
        [2] => 20x
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [10a] => 0
    )
    
    ksort string:
    Array
    (
        [0] => x10
        [1] => 10x
        [10a] => 0
        [2] => 20x
        [2b] => 1
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [x] => 8
        [z] => 1
    )
    
    ksort locale:
    Array
    (
        [0] => x10
        [1] => 10x
        [10a] => 0
        [2] => 20x
        [2b] => 1
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [x] => 8
        [z] => 1
    )
    
    asort regular:
    Array
    (
        [10a] => 0
        [2b] => 1
        [z] => 1
        [x] => 8
        [4] => 0x10
        [1] => 10x
        [2] => 20x
        [5] => ach0
        [6] => add1
        [0] => x10
        [3] => x2
    )
    
    asort numeric:
    Array
    (
        [6] => add1
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [10a] => 0
        [0] => x10
        [z] => 1
        [2b] => 1
        [x] => 8
        [1] => 10x
        [2] => 20x
    )
    
    asort string:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [z] => 1
        [2b] => 1
        [1] => 10x
        [2] => 20x
        [x] => 8
        [5] => ach0
        [6] => add1
        [0] => x10
        [3] => x2
    )
    
    asort locale:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [z] => 1
        [2b] => 1
        [1] => 10x
        [2] => 20x
        [x] => 8
        [5] => ach0
        [6] => add1
        [0] => x10
        [3] => x2
    )
    
    rsort regular:
    Array
    (
        [0] => x2
        [1] => x10
        [2] => add1
        [3] => ach0
        [4] => 20x
        [5] => 10x
        [6] => 0x10
        [7] => 8
        [8] => 1
        [9] => 1
        [10] => 0
    )
    
    rsort numeric:
    Array
    (
        [0] => 20x
        [1] => 10x
        [2] => 8
        [3] => 1
        [4] => 1
        [5] => ach0
        [6] => add1
        [7] => 0x10
        [8] => x2
        [9] => x10
        [10] => 0
    )
    
    rsort string:
    Array
    (
        [0] => x2
        [1] => x10
        [2] => add1
        [3] => ach0
        [4] => 8
        [5] => 20x
        [6] => 10x
        [7] => 1
        [8] => 1
        [9] => 0x10
        [10] => 0
    )
    
    rsort locale:
    Array
    (
        [0] => x2
        [1] => x10
        [2] => add1
        [3] => ach0
        [4] => 8
        [5] => 20x
        [6] => 10x
        [7] => 1
        [8] => 1
        [9] => 0x10
        [10] => 0
    )
    
    natsort:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [2b] => 1
        [z] => 1
        [x] => 8
        [1] => 10x
        [2] => 20x
        [5] => ach0
        [6] => add1
        [3] => x2
        [0] => x10
    )
    sort regular:
    Array
    (
        [0] => 0x10
        [1] => 10x
        [2] => 20x
        [3] => ach0
        [4] => add1
        [5] => x10
        [6] => 0
        [7] => x2
        [8] => 1
        [9] => 1
        [10] => 8
    )
    
    sort numeric:
    Array
    (
        [0] => x10
        [1] => 0
        [2] => x2
        [3] => ach0
        [4] => add1
        [5] => 1
        [6] => 1
        [7] => 8
        [8] => 10x
        [9] => 0x10
        [10] => 20x
    )
    
    sort string:
    Array
    (
        [0] => 0
        [1] => 0x10
        [2] => 1
        [3] => 1
        [4] => 10x
        [5] => 20x
        [6] => 8
        [7] => ach0
        [8] => add1
        [9] => x10
        [10] => x2
    )
    
    sort locale:
    Array
    (
        [0] => 0
        [1] => 0x10
        [2] => 1
        [3] => 1
        [4] => 10x
        [5] => 20x
        [6] => 8
        [7] => add1
        [8] => ach0
        [9] => x10
        [10] => x2
    )
    
    ksort regular:
    Array
    (
        [x] => 8
        [z] => 1
        [0] => x10
        [1] => 10x
        [2] => 20x
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [10a] => 0
        [2b] => 1
    )
    
    ksort numeric:
    Array
    (
        [x] => 8
        [z] => 1
        [0] => x10
        [1] => 10x
        [2b] => 1
        [2] => 20x
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [10a] => 0
    )
    
    ksort string:
    Array
    (
        [0] => x10
        [1] => 10x
        [10a] => 0
        [2] => 20x
        [2b] => 1
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [x] => 8
        [z] => 1
    )
    
    ksort locale:
    Array
    (
        [0] => x10
        [1] => 10x
        [10a] => 0
        [2] => 20x
        [2b] => 1
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [x] => 8
        [z] => 1
    )
    
    asort regular:
    Array
    (
        [4] => 0x10
        [1] => 10x
        [2] => 20x
        [5] => ach0
        [6] => add1
        [0] => x10
        [10a] => 0
        [3] => x2
        [z] => 1
        [2b] => 1
        [x] => 8
    )
    
    asort numeric:
    Array
    (
        [0] => x10
        [10a] => 0
        [3] => x2
        [5] => ach0
        [6] => add1
        [z] => 1
        [2b] => 1
        [x] => 8
        [1] => 10x
        [4] => 0x10
        [2] => 20x
    )
    
    asort string:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [z] => 1
        [2b] => 1
        [1] => 10x
        [2] => 20x
        [x] => 8
        [5] => ach0
        [6] => add1
        [0] => x10
        [3] => x2
    )
    
    asort locale:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [z] => 1
        [2b] => 1
        [1] => 10x
        [2] => 20x
        [x] => 8
        [6] => add1
        [5] => ach0
        [0] => x10
        [3] => x2
    )
    
    rsort regular:
    Array
    (
        [0] => 8
        [1] => 1
        [2] => 1
        [3] => x2
        [4] => x10
        [5] => 0
        [6] => add1
        [7] => ach0
        [8] => 20x
        [9] => 10x
        [10] => 0x10
    )
    
    rsort numeric:
    Array
    (
        [0] => 20x
        [1] => 0x10
        [2] => 10x
        [3] => 8
        [4] => 1
        [5] => 1
        [6] => x10
        [7] => 0
        [8] => x2
        [9] => ach0
        [10] => add1
    )
    
    rsort string:
    Array
    (
        [0] => x2
        [1] => x10
        [2] => add1
        [3] => ach0
        [4] => 8
        [5] => 20x
        [6] => 10x
        [7] => 1
        [8] => 1
        [9] => 0x10
        [10] => 0
    )
    
    rsort locale:
    Array
    (
        [0] => x2
        [1] => x10
        [2] => ach0
        [3] => add1
        [4] => 8
        [5] => 20x
        [6] => 10x
        [7] => 1
        [8] => 1
        [9] => 0x10
        [10] => 0
    )
    
    natsort:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [z] => 1
        [2b] => 1
        [x] => 8
        [1] => 10x
        [2] => 20x
        [5] => ach0
        [6] => add1
        [3] => x2
        [0] => x10
    )
    Arrays/usort.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    Array
    (
        [0] => 10
        [1] => 9
        [2] => 8
        [3] => 7
        [4] => 6
        [5] => 5
        [6] => 4
        [7] => 3
        [8] => 2
        [9] => 1
    )
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Array
    (
        [0] => 10
        [1] => 9
        [2] => 8
        [3] => 7
        [4] => 6
        [5] => 5
        [6] => 4
        [7] => 3
        [8] => 2
        [9] => 1
    )
    Arrays/lazy_copy/001.php: SUCCEEDED
    Arrays/lazy_copy/002.php: SUCCEEDED
    Arrays/lazy_copy/003.php: SUCCEEDED
    Arrays/lazy_copy/004.php: SUCCEEDED
    Arrays/lazy_copy/005.php: SUCCEEDED
    Arrays/lazy_copy/006.php: SUCCEEDED
    Bugs/class_incompletepart.php: SUCCEEDED
    Bugs/division-by-zero.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    DIVISION
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 6
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 8
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 10
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 12
    bool(false)
    MODULO
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 16
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 18
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 20
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 22
    bool(false)
    DIVISION
    bool(false)
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt at expression on line 10, column 2.
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt at expression on line 12, column 2.
    bool(false)
    MODULO
    bool(false)
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt at expression on line 20, column 2.
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt at expression on line 22, column 2.
    bool(false)
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt(6,10): warning PHP0150: Division by zero
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt(8,9): warning PHP0150: Division by zero
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt(16,10): warning PHP0150: Division by zero
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt(18,9): warning PHP0150: Division by zero
    
    Bugs/function-in-unknown-class.php: SUCCEEDED
    Bugs/if_if.php: SUCCEEDED
    Bugs/is_a_null_value.php: SUCCEEDED
    Bugs/preg-named-groups.php: SUCCEEDED
    Bugs/preg-replace-advanced.php: SUCCEEDED
    Bugs/preg-replace-range.php: SUCCEEDED
    Bugs/preg-replace.php: SUCCEEDED
    Bugs/preg-this-dynamic.php: FAILED
    Script hung upNo errorsSuccess
    Expected test outputReal script output
    Unhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---> PHP.Core.Debug+AssertException: Assertion failed: 
       at PHP.Core.Debug.Fail(String message)
       at PHP.Core.Debug.Assert(Boolean condition)
       at PHP.Core.RelativePath.ParseCanonical(String relativePath)
       at PHP.Core.Emit.TransientAssemblyBuilder.Build(String sourceCode, SourceCodeDescriptor descriptor, EvalKinds kind, CompilationContext context, ScriptContext scriptContext, DTypeDesc referringType, NamingContext namingContext, Boolean completeSource)
       at PHP.Core.DynamicCode.EvalInternal(String prefix, String code, String suffix, EvalKinds kind, ScriptContext scriptContext, Dictionary`2 localVariables, DObject self, DTypeDesc referringType, SourceCodeDescriptor descriptor, Boolean entireFile, NamingContext namingContext)
       at PHP.Core.DynamicCode.Eval(String code, Boolean synthetic, ScriptContext context, Dictionary`2 definedVariables, DObject self, DTypeDesc referringType, String callerRelativeSourcePath, Int32 line, Int32 column, Int32 containerId, NamingContext namingContext)
       at PHP.Library.PerlRegExp.Evaluator.ReplaceCodeExecute(Match m)
       at System.Text.RegularExpressions.RegexReplacement.Replace(MatchEvaluator evaluator, Regex regex, String input, Int32 count, Int32 startat)
       at System.Text.RegularExpressions.Regex.Replace(String input, MatchEvaluator evaluator, Int32 count)
       at PHP.Library.PerlRegExp.ReplaceInternal(DObject self, Dictionary`2 definedVariables, PerlRegExpConverter converter, PhpCallback callback, String str, Int32 limit, SourceCodeDescriptor sourceCodeDesc, Int32& count)
       at PHP.Library.PerlRegExp.SimpleReplace(DObject self, Dictionary`2 definedVariables, Object pattern, String replacement, PhpCallback callback, Object data, Int32 limit, SourceCodeDescriptor descriptor, Int32& count)
       at PHP.Library.PerlRegExp.Replace(ScriptContext context, DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, PhpCallback callback, Object data, Int32 limit, Int32& count)
       at PHP.Library.PerlRegExp.Replace(ScriptContext context, DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, Object data)
       at PHP.Dynamic.PhpNetClassLibrary.preg_replace(Object , PhpStack )
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.CallInternal(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at PHP.Core.ScriptContext.CallVoid(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <__input.txt>.a.a(ScriptContext ) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt:line 17
       at <__input.txt>.a.<Mediator>(ScriptContext )
       at <__input.txt>.a.a(Object instance, PhpStack stack)
       at <__input.txt>.<Script>.<Main>(ScriptContext <context>, Dictionary`2 <locals>, DObject <self>, DTypeDesc <includer>, Boolean <request>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt:line 19
       at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)
       at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)
       --- End of inner exception stack trace ---
       at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)
       at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)
       at <Global>.Run(String[] )
    
    Bugs/preg-this-dynamic2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    foo: ahoj
    foo: lidi
    foo: rozkladame
    foo: ahoj
    foo: lidi
    foo: rozkladame
    foo: ahoj
    foo: lidi
    foo: rozkladame
    
    Notice: Undefined variable: this.
    
    Error: Call to a member function foo() on a non-object.
    Bugs/preg-this.php: SUCCEEDED
    Bugs/preg-ungreedy-bugs.php: SUCCEEDED
    Bugs/preg-unkn.php: SUCCEEDED
    Bugs/trigger_error%20line%20number%20%232787.php: SUCCEEDED
    CLR/BaseTypes.php: SUCCEEDED
    CLR/ClrEvent.php: SUCCEEDED
    CLR/ConditionalDecls.php: SUCCEEDED
    CLR/ConditionalDecls2.php: SUCCEEDED
    CLR/foreach.php: SUCCEEDED
    CLR/handle_enum.php: SUCCEEDED
    CLR/Inheritance1.php: FAILED
    Phalanger misbehaviour while compiling [file] sectionSee belowSuccess
    Expected test outputReal script output
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(3,2): error PHP2031: Circular interface inheritance dependency involving 'I4' and 'I1'
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(6,2): (related location)
    
    CLR/Inheritance2.php: FAILED
    Phalanger misbehaviour while compiling [file] sectionSee belowSuccess
    Expected test outputReal script output
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(3,2): error PHP2031: Circular interface inheritance dependency involving 'J4' and 'J1'
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(6,2): (related location)
    
    CLR/Inheritance3.php: FAILED
    Phalanger misbehaviour while compiling [file] sectionSee belowSuccess
    Expected test outputReal script output
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(3,2): error PHP2031: Circular interface inheritance dependency involving 'J5' and 'J5'
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(3,2): (related location)
    
    CLR/Inheritance4.php: FAILED
    Phalanger misbehaviour while compiling [file] sectionSee belowSuccess
    Expected test outputReal script output
    error PHP2007: Internal error! 
    Please, report this bug via http://www.codeplex.com/WorkItem/List.aspx?ProjectName=Phalanger.
    Additional information: 
    Could not load type '<__input.txt>.J`1' from assembly 'Inheritance4_file, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' because it has recursive generic definition.
       at System.Reflection.Emit.TypeBuilder.TermCreateClass(RuntimeModule module, Int32 tk, ObjectHandleOnStack type)
       at System.Reflection.Emit.TypeBuilder.CreateTypeNoLock()
       at System.Reflection.Emit.TypeBuilder.CreateType()
       at PHP.Core.Reflection.PhpType.Bake()
       at PHP.Core.Reflection.ScriptCompilationUnit.Bake()
       at PHP.Core.Reflection.InclusionGraphBuilder.EmitAllUnits(CodeGenerator codeGenerator)
       at PHP.Core.Emit.ScriptAssemblyBuilder.CompileScripts(IEnumerable`1 sourceFiles, String duckPath, String duckNamespace, CompilationContext context)
       at PHP.Core.Emit.ScriptAssemblyBuilder.Build(IEnumerable`1 sourceFiles, CompilationContext context)
       at PHP.Core.ApplicationCompiler.Compile(ApplicationContext applicationContext, CompilerConfiguration config, ErrorSink errorSink, CompilationParameters ps)
    
    
    CLR/Inheritance5.php: SUCCEEDED
    CLR/Inheritance6.php: SUCCEEDED
    CLR/Inheritance7.php: SUCCEEDED
    CLR/Inheritance8.php: SUCCEEDED
    CLR/Inheritance9.php: FAILED
    Phalanger misbehaviour while compiling [file] sectionSee belowSuccess
    Expected test outputReal script output
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(14,2): error PHP1018: Class 'D' doesn't implement abstract method I::f()
    
    CLR/Lambdas.php: FAILED
    Phalanger misbehaviour while compiling [file] sectionSee belowCompile error
    Expected test outputReal script output
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(4,3): error PHP1120: Unknown custom attribute; neither of types 'AttributeUsage' and 'AttributeUsageAttribute' exists
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(17,3): error PHP1120: Unknown custom attribute; neither of types 'MyAttribute' and 'MyAttributeAttribute' exists
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(27,22): error PHP1120: Unknown custom attribute; neither of types 'MyAttribute' and 'MyAttributeAttribute' exists
    
    CLR/NameResolving.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    bool(false)
    bool(true)
    object(Directory)(2)
    {
      ["handle"] => NULL
      ["path"] => NULL
    }
    bool(false)
    
    Error: Class 'Dictionary' not found in D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt at expression on line 12, column 4.
    Compiler/abstracts.php: SUCCEEDED
    Compiler/aliased%20assign%20add.php: SUCCEEDED
    Compiler/assignments.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ---1---1float(-1.5)
    float(2.5)
    float(0.83333333333333)
    int(6)
    int(8)
    ---2---2float(8.8333333333333)
    float(8.8333333333333)
    float(8.8333333333333)
    int(8)
    int(8)
    ---3---3---4---4---5---5array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [1]=>
      array(1) {
        [2]=>
        array(1) {
          [3]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    ---6---6array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "u"
    }
    array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "v"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    ---7---7array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    ---8---8
    ---1---1float(-1.5)
    float(2.5)
    float(0.833333333333333)
    int(6)
    int(8)
    ---2---2float(8.83333333333333)
    float(8.83333333333333)
    float(8.83333333333333)
    int(8)
    int(8)
    ---3---3---4---4---5---5array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [1]=>
      array(1) {
        [2]=>
        array(1) {
          [3]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    ---6---6array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "u"
    }
    array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "v"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    ---7---7array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    ---8---8
    Compiler/assign_in_call.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    g1:
    f(x)
    u(x)
    'x'
    
    g2:
    f(x)
    u(x)
    'b'
    
    g3:
    f(x)
    u(x)
    'b'
    
    g4:
    f(x)
    u(x)
    'b'
    
    g5:
    f()
    u()
    integer(1)
    
    g6:
    f(3)
    u(3)
    integer(3)
    
    g7:
    f(2)
    u(10)
    integer(10)
    
    g8:
    f(1)
    f(1)
    f(1)
    u(1)
    u()
    u(1)
    
    g9:
    known:
    __get(p) = 0
    __set(p,1)
    f(1)
    unknown:
    __get(p) = 1
    __set(p,3)
    u(3)
    
    g10:
    Done.
    g1:
    f(x)
    u(x)
    'x'
    
    g2:
    f(x)
    u(x)
    'b'
    
    g3:
    f(x)
    u(x)
    'b'
    
    g4:
    f(x)
    u(x)
    'b'
    
    g5:
    f()
    u()
    integer(1)
    
    g6:
    f(3)
    u(3)
    integer(3)
    
    g7:
    f(2)
    u(10)
    integer(10)
    
    g8:
    f(1)
    f(1)
    f(1)
    u(1)
    u()
    u(1)
    
    g9:
    known:
    __get(p) = 0
    __set(p,1)
    __get(p) = 1
    f(1)
    unknown:
    __get(p) = 1
    __set(p,3)
    __get(p) = 3
    u(3)
    
    g10:
    Done.
    Compiler/auto_globals_001.php: SUCCEEDED
    Compiler/auto_globals_002.php: SUCCEEDED
    Compiler/auto_globals_003.php: SUCCEEDED
    Compiler/break_in_global_code.php: SUCCEEDED
    Compiler/chaining_test.php: SUCCEEDED
    Compiler/chain_ending_by_string_index.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        string(1) "f"
      }
    }
    array(1) {
      [0]=>
      string(4) "xubu"
    }
    object(C)#1 (1) {
      ["f"]=>
      string(4) "kuxu"
    }
    string(5) "helxo"
    string(5) "helxo"
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        string(1) "f"
      }
    }
    array(1) {
      [0]=>
      string(4) "bubu"
    }
    
    Warning: A string item used as a reference in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt at expression on line 19, column 1.
    object(C)(1) {
      ["f"]=>
      string(4) "kuku"
    }
    
    Warning: A string item used as a reference in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt at expression on line 25, column 1.
    string(5) "hello"
    
    Warning: A string item used as a reference in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt at expression on line 31, column 1.
    string(5) "hello"
    Compiler/continue_in_global_code.php: SUCCEEDED
    Compiler/deep_copy.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array(1) {
      [0]=>
      &array(1) {
        [0]=>
        &array(1) {
          [0]=>
          *RECURSION*
        }
      }
    }
    array(1) {
      [0]=>
      &array(1) {
        [0]=>
        &array(1) {
          [0]=>
          *RECURSION*
        }
      }
    }
    array(2) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) {
          [0]=>
          *RECURSION*
          [1]=>
          int(1)
        }
        [1]=>
        int(1)
      }
      [1]=>
      int(1)
    }
    array(1) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) {
          [0]=>
          *RECURSION*
          [1]=>
          int(1)
        }
        [1]=>
        int(1)
      }
    }
    array(1) {
      [0]=>
      &array(1) [recursion]
    }
    array(1) {
      [0]=>
      &array(1) {
        [0]=>
        &array(1) [recursion]
      }
    }
    array(2) {
      [0]=>
      &array(2) [recursion]
      [1]=>
      int(1)
    }
    array(1) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) [recursion]
        [1]=>
        int(1)
      }
    }
    Compiler/deep_copy_refbox.php: SUCCEEDED
    Compiler/expr_init.php: SUCCEEDED
    Compiler/foreach1.php: SUCCEEDED
    Compiler/foreach_arrays.php: SUCCEEDED
    Compiler/for_loop.php: SUCCEEDED
    Compiler/function_002.php: SUCCEEDED
    Compiler/function_003.php: SUCCEEDED
    Compiler/function_004.php: SUCCEEDED
    Compiler/function_call.php: SUCCEEDED
    Compiler/func_get_args.php: SUCCEEDED
    Compiler/if_statement.php: SUCCEEDED
    Compiler/indirect_001.php: SUCCEEDED
    Compiler/indirect_002.php: SUCCEEDED
    Compiler/indirect_003.php: SUCCEEDED
    Compiler/indirect_004.php: SUCCEEDED
    Compiler/indirect_005.php: SUCCEEDED
    Compiler/indirect_007.php: SUCCEEDED
    Compiler/indirect_global.php: SUCCEEDED
    Compiler/inheritance.php: SUCCEEDED
    Compiler/inheritance2.php: SUCCEEDED
    Compiler/isset_unset_001.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Testing x in global code:  <br>
    1 <br>
     <br>
    Testing x (object) in optimized function:  <br>
    1 <br>
     <br>
    Testing x (PhpReference) in optimized function:  <br>
    1 <br>
     <br>
    
    Notice: Undefined variable: y in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt on line 29
    Testing $$x (created at runtime) in optimized function:  <br>
    1 <br>
    Testing x in global code:  <br>
    1 <br>
     <br>
    Testing x (object) in optimized function:  <br>
    1 <br>
     <br>
    Testing x (PhpReference) in optimized function:  <br>
    1 <br>
     <br>
    Testing $$x (created at runtime) in optimized function:  <br>
    1 <br>
    Compiler/list%20%2326681.php: SUCCEEDED
    Compiler/new_array_item_assignadd.php: SUCCEEDED
    Compiler/null_hints.php: SUCCEEDED
    Compiler/pure_create_function.php: SUCCEEDED
    Compiler/pure_function_exists.php: SUCCEEDED
    Compiler/pure_math_str.php: SUCCEEDED
    Compiler/static_call.php: SUCCEEDED
    Compiler/switch.php: SUCCEEDED
    Compiler/ternary_ex.php: SUCCEEDED
    Compiler/ternary_short.php: SUCCEEDED
    Compiler/this%20call.php: SUCCEEDED
    Compiler/typehint_check.php: SUCCEEDED
    Compiler/__call.php: SUCCEEDED
    Compiler/Inclusions/include2.php: SUCCEEDED
    Compiler/Inclusions/include3.php: SUCCEEDED
    Compiler/Inclusions/include6.php: SUCCEEDED
    Compiler/Inclusions/include_test.php: SUCCEEDED
    Compiler/Inclusions/script.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t01.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t02.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t03.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t04.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t05.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t08.php: SUCCEEDED
    Compiler/PseudoConst/parent.php: SUCCEEDED
    Compiler/PseudoConst/parent2.php: SUCCEEDED
    Compiler/PseudoConst/self.php: SUCCEEDED
    Compiler/PseudoConst/t01.php: SUCCEEDED
    Compiler/PseudoConst/t02.php: SUCCEEDED
    Compiler/PseudoConst/t03.php: SUCCEEDED
    Compiler/PseudoConst/t04.php: SUCCEEDED
    Compiler/PseudoConst/t05.php: SUCCEEDED
    Compiler/PseudoConst/t06.php: SUCCEEDED
    Compiler/PseudoConst/t07.php: SUCCEEDED
    Compiler/PseudoConst/t08.php: SUCCEEDED
    Compiler/PseudoConst/t09.php: SUCCEEDED
    Compiler/PseudoConst/t10.php: SUCCEEDED
    Compiler/PseudoConst/t11.php: SUCCEEDED
    Compiler/PseudoConst/_class_.php: SUCCEEDED
    Compiler/PseudoConst/_dir_.php: SUCCEEDED
    Compiler/PseudoConst/_function_.php: SUCCEEDED
    Compiler/References/array_argument.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(2)
        [1]=>
        int(3)
      }
    }
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    Compiler/References/array_local.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(2)
        [1]=>
        int(3)
      }
    }
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    Compiler/References/array_ret_argument.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(2)
        [1]=>
        int(3)
      }
    }
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    Compiler/References/array_ret_argument2.php: SUCCEEDED
    Compiler/References/deepcopy.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <br/><br/>globalobjects: array(2) {
      [0]=>
      int(1)
      [1]=>
      int(7)
    }
    <br/><br/>globalobjects: array(2) {
      [0]=>
      int(1)
      [1]=>
      &int(7)
    }
    Compiler/References/explicitclear.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Construyendo Y
    call foo12Destruyendo Y
    3object(X)#1 (2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      int(54)
    }
    array(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      string(10) "Init Value"
    }
    x: object(X)#1 (2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      int(1004)
    }
    <br/>checkpoint array(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      int(54)
    }
    Construyendo Y
    call foo123object(X)(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      &int(54)
    }
    array(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      &int(54)
    }
    x: object(X)(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      &int(1004)
    }
    <br/>checkpoint array(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      &int(1004)
    }
    Destruyendo Y
    Compiler/References/field_argument.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: int(7)
    <br/><br/>checkpoint array(1) {
      ["objects"]=>
      int(8)
    }
    x: int(7)
    <br/><br/>checkpoint array(1) {
      ["objects"]=>
      &int(7)
    }
    Compiler/References/field_local.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: object(X)#1 (1) {
      ["objects"]=>
      int(25)
    }
    <br/>checkpoint array(1) {
      ["objects"]=>
      int(7)
    }
    x: object(X)(1) {
      ["objects"]=>
      &int(25)
    }
    <br/>checkpoint array(1) {
      ["objects"]=>
      &int(25)
    }
    Compiler/References/ref_arrayitem.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(2)
        [1]=>
        int(3)
      }
    }
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    Compiler/References/ref_reasign.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    object(X)#1 (2) {
      ["objects"]=>
      int(54)
      ["objects2"]=>
      &int(222)
    }
    array(2) {
      ["objects"]=>
      int(7)
      ["objects2"]=>
      &int(222)
    }
    x: object(X)#1 (2) {
      ["objects"]=>
      int(1004)
      ["objects2"]=>
      int(777)
    }
    <br/>checkpoint array(2) {
      ["objects"]=>
      int(54)
      ["objects2"]=>
      int(222)
    }
    object(X)(2) {
      ["objects"]=>
      &int(54)
      ["objects2"]=>
      &int(222)
    }
    array(2) {
      ["objects"]=>
      &int(54)
      ["objects2"]=>
      &int(222)
    }
    x: object(X)(2) {
      ["objects"]=>
      &int(1004)
      ["objects2"]=>
      &int(777)
    }
    <br/>checkpoint array(2) {
      ["objects"]=>
      &int(1004)
      ["objects2"]=>
      &int(777)
    }
    Compiler/Unreachable/t13.php: SUCCEEDED
    Compiler/Unset/calluserfunc.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Warning: call_user_func() expects parameter 1 to be a valid callback, function 'unset' not found or invalid function name in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\Unset\__input.txt on line 3
    int(10)
    Error: call_user_func(): Call to undefined function: 'unset' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\Unset\__input.txt at expression on line 3, column 1.
    Compiler/Unset/issetref2.php: SUCCEEDED
    Compiler/Unset/unsetglobal.php: SUCCEEDED
    Compiler/Unset/unsetglobal2.php: SUCCEEDED
    Compiler/Unset/unsetindirect.php: SUCCEEDED
    Compiler/Unset/unsetproblem.php: SUCCEEDED
    Compiler/Unset/unsetref.php: SUCCEEDED
    Compiler/Unset/unsetref2.php: SUCCEEDED
    Compiler/Unset/unsetref3.php: SUCCEEDED
    Compiler/Unset/__unset.php: SUCCEEDED
    DateTime/strftime.php: SUCCEEDED
    DateTime/strtotime1.php: SUCCEEDED
    DateTime/strtotime2.php: SUCCEEDED
    DateTime/strtotime3.php: SUCCEEDED
    DateTime/strtotime4.php: SUCCEEDED
    DateTime/strtotime5.php: SUCCEEDED
    DateTime/time.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    -189388800:-189475200 - 86400
    1964-01-01T00:00:00+0000
    1963-12-31T00:00:00+0000
    1964-06-06
    1963-06-06
    1964-01-06
    1133305200
    -189388800:-189475200 - 86400
    1964-01-01T00:00:00+0000
    1963-12-31T00:00:00+0000
    1964-06-06
    1963-06-06
    1964-01-06
    DateTime/timezones1.php: SUCCEEDED
    DLR/classContext.php: SUCCEEDED
    DLR/classContext1.php: SUCCEEDED
    DLR/classContext2.php: SUCCEEDED
    DLR/restrictions%20generics.php: SUCCEEDED
    DLR/restrictions.php: SUCCEEDED
    DLR/targets.php: SUCCEEDED
    FileSystem/basename.php: SUCCEEDED
    FileSystem/basename2.php: SUCCEEDED
    FileSystem/chdir.php: SUCCEEDED
    FileSystem/csv.php: SUCCEEDED
    FileSystem/date.php: SUCCEEDED
    FileSystem/date2.php: SUCCEEDED
    FileSystem/date3.php: SUCCEEDED
    FileSystem/date_unix.php: SUCCEEDED
    FileSystem/dirname.php: SUCCEEDED
    FileSystem/dirname2.php: SUCCEEDED
    FileSystem/disk_free_space.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    596 GB
    Drive C: 28 GB
    Drive D: 596 GB
    Drive E: 
    Warning: disk_free_space(): The system cannot find the path specified.
     in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 14
    false
    Drive F: 
    Warning: disk_free_space(): The device is not ready.
     in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 14
    false
    596 GB
    Drive C: 28 GB
    Drive D: 596 GB
    Drive E: false
    Drive F: false
    FileSystem/disk_total_space.php: SUCCEEDED
    FileSystem/fgets.php: SUCCEEDED
    FileSystem/file.php: SUCCEEDED
    FileSystem/filesize.php: SUCCEEDED
    FileSystem/file_exists.php: SUCCEEDED
    FileSystem/file_get_contents.php: SUCCEEDED
    FileSystem/fpassthru.php: SUCCEEDED
    FileSystem/fread.php: SUCCEEDED
    FileSystem/fread1.php: SUCCEEDED
    FileSystem/fread2.php: SUCCEEDED
    FileSystem/fseek.php: SUCCEEDED
    FileSystem/fsockopen.php: SUCCEEDED
    FileSystem/ftell.php: SUCCEEDED
    FileSystem/glob_up_dirs.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string(7) "../@PHP"
    string(9) "../Arrays"
    string(7) "../Bugs"
    string(6) "../CLR"
    string(11) "../Compiler"
    string(6) "../DLR"
    string(11) "../DateTime"
    string(13) "../FileSystem"
    string(7) "../Math"
    string(7) "../Misc"
    string(10) "../Objects"
    string(10) "../PHP.NET"
    string(8) "../RegEx"
    string(6) "../SPL"
    string(10) "../Strings"
    string(12) "../Variables"
    string(6) "../Xml"
    string(7) "../@PHP"
    string(9) "../Arrays"
    string(7) "../Bugs"
    string(6) "../CLR"
    string(11) "../Compiler"
    string(11) "../DateTime"
    string(6) "../DLR"
    string(13) "../FileSystem"
    string(7) "../Math"
    string(7) "../Misc"
    string(10) "../Objects"
    string(10) "../PHP.NET"
    string(8) "../RegEx"
    string(6) "../SPL"
    string(10) "../Strings"
    string(12) "../Variables"
    string(6) "../Xml"
    FileSystem/is_dir.php: SUCCEEDED
    FileSystem/is_executable.php: SUCCEEDED
    FileSystem/pathinfo.php: SUCCEEDED
    FileSystem/popen.php: SUCCEEDED
    FileSystem/readdir.php: SUCCEEDED
    FileSystem/readfile.php: SUCCEEDED
    FileSystem/readline.php: SUCCEEDED
    FileSystem/realpath.php: SUCCEEDED
    FileSystem/scandir.php: SUCCEEDED
    FileSystem/stat.php: SUCCEEDED
    FileSystem/stream_context_set_option.php: SUCCEEDED
    FileSystem/stream_copy_to_stream.php: SUCCEEDED
    FileSystem/stream_copy_to_stream2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <p>Read <b>rb</b>, Write <b>wb</b>
    
    
    COPIED: <b>29705</b>
    <p>Read <b>rb</b>, Write <b>wt</b>
    
    
    COPIED: <b>29705</b>
    <p>Read <b>rb</b>, Write <b>wb</b>
    
    
    COPIED: <b>29729</b>
    <p>Read <b>rb</b>, Write <b>wt</b>
    
    
    COPIED: <b>29732</b>
    FileSystem/testinc.php: SUCCEEDED
    FileSystem/touch.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Warning: touch(): Utime failed: Bad file descriptor in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 8
    Sorry Could Not change modification time of touch.txt
    Warning: touch(): Utime failed: Bad file descriptor in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 14
    
    Warning: touch(): Utime failed: Bad file descriptor in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 16
    
    Warning: touch(): Utime failed: Bad file descriptor in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 17
    <pre>[ARRAY
      [INT (0)] => [STRING: "May 10, 2011; [00:50:21] (00h) ctime test.txt (1304981421)"]
      [INT (1)] => [STRING: "February 19, 2011; [22:06:05] (22h) mtime test.txt (1298149565)"]
      [INT (2)] => [STRING: "May 10, 2011; [00:50:21] (00h) ctime touch.txt (1304981421)"]
      [INT (3)] => [STRING: "February 19, 2011; [22:06:05] (22h) mtime touch.txt (1298149565)"]
      [INT (4)] => [STRING: "May 10, 2011; [00:50:21] (00h) atime touch.txt (1304981421)"]
      [INT (5)] => [STRING: "February 19, 2011; [22:06:05] (22h) mtime summer.txt (1298149565)"]
      [INT (6)] => [STRING: "February 19, 2011; [22:06:05] (22h) mtime winter.txt (1298149565)"]
    ]</pre>
    Warning: touch(): Unable to access (D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\touch.txt): Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 8, column 5.
    Sorry Could Not change modification time of touch.txt
    Warning: touch(): Unable to access (D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\touch.txt): Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 14, column 1.
    
    Warning: touch(): Unable to access (D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\winter.txt): Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 16, column 1.
    
    Warning: touch(): Unable to access (D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\summer.txt): Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 17, column 1.
    <pre>[ARRAY
      [INT (0)] => [STRING: "May 10, 2011; [00:50:21] (00h) ctime test.txt (1304981421)"]
      [INT (1)] => [STRING: "February 19, 2011; [23:06:05] (23h) mtime test.txt (1298153165)"]
      [INT (2)] => [STRING: "May 10, 2011; [00:50:21] (00h) ctime touch.txt (1304981421)"]
      [INT (3)] => [STRING: "February 19, 2011; [23:06:05] (23h) mtime touch.txt (1298153165)"]
      [INT (4)] => [STRING: "May 10, 2011; [00:50:21] (00h) atime touch.txt (1304981421)"]
      [INT (5)] => [STRING: "February 19, 2011; [23:06:05] (23h) mtime summer.txt (1298153165)"]
      [INT (6)] => [STRING: "February 19, 2011; [23:06:05] (23h) mtime winter.txt (1298153165)"]
    ]</pre>
    FileSystem/tar/tar_test.php: SUCCEEDED
    FileSystem/zip/zip.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    correct
    Error: Call to undefined function: 'zip_open' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\zip\__input.txt at expression on line 3, column 1.
    Math/abs.php: SUCCEEDED
    Math/atan2.php: SUCCEEDED
    Math/base_convert.php: SUCCEEDED
    Math/bindec.php: SUCCEEDED
    Math/ceil.php: SUCCEEDED
    Math/cos.php: SUCCEEDED
    Math/decbin.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <pre>
    [double: 2294967295]
    10001000110010100110101111111111
    [double: 4294967296]
    0
    [double: 8589934590]
    11111111111111111111111111111110
    [double: 8589934590]
    11111111111111111111111111111110
    [double: 8589934591]
    11111111111111111111111111111111
    [Int: 1000.000.000.000]
    11010100101001010001000000000000
    <hr>(-1, -5435, 2.14, 0, 26)
    11111111111111111111111111111111
    11111111111111111110101011000101
    10
    0
    11010 
    </pre>
    <pre>
    [???: 2294967295]
    10001000110010100110101111111111
    [???: 4294967296]
    0
    [???: 8589934590]
    11111111111111111111111111111110
    [???: 8589934590]
    11111111111111111111111111111110
    [???: 8589934591]
    11111111111111111111111111111111
    [Int: 1000.000.000.000]
    11010100101001010001000000000000
    <hr>(-1, -5435, 2.14, 0, 26)
    11111111111111111111111111111111
    11111111111111111110101011000101
    10
    0
    11010 
    </pre>
    Math/dechex.php: SUCCEEDED
    Math/decoct.php: SUCCEEDED
    Math/deg2rad.php: SUCCEEDED
    Math/exp.php: SUCCEEDED
    Math/floor.php: SUCCEEDED
    Math/fmod.php: SUCCEEDED
    Math/hexdec.php: SUCCEEDED
    Math/max.php: SUCCEEDED
    Math/min.php: SUCCEEDED
    Math/modulo_warn.php: SUCCEEDED
    Math/octdec.php: SUCCEEDED
    Math/pow.php: SUCCEEDED
    Math/rad2deg.php: SUCCEEDED
    Math/round.php: SUCCEEDED
    Math/sin.php: SUCCEEDED
    Math/sqrt.php: SUCCEEDED
    Math/tan.php: SUCCEEDED
    Math/uniqid.php: SUCCEEDED
    Misc/calendar_extension.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0
    0
    2375840
    0
    14
    32
    2
    There are 31 days in August 2003
    There are 28 days in February 2003
    There are 29 days in February 2004
    There are 31 days in December 2034
    1748326
    1748324
    374867
    0
    322f32322f35373633
    ebe120e7f9e5ef20e4faf9f1e2
    ebe120e7f9e5ef20e427faf9f1e2
    ebe120e7f9e5ef20e420e0ecf4e9ed20faf9f1e2
    ebe120e7f9e5ef20e42720e0ecf4e9ed20faf9f1e2
    eb22e120e7f9e5ef20e4faf9f122e2
    e12720e7f9e5ef20e4faf9f122e2
    e12720e7f9e5ef20e427faf9f122e2
    e12720e7f9e5ef20e420e0ecf4e9ed20faf9f122e2
    e12720e7f9e5ef20e42720e0ecf4e9ed20faf9f122e2
    Error: Call to undefined function: 'frenchtojd' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt at expression on line 2, column 1.
    Misc/dir_read.php: SUCCEEDED
    Misc/fgetcsv%20%2327492.php: SUCCEEDED
    Misc/hash%20functions%20%2326667.php: SUCCEEDED
    Misc/ini_parse.php: SUCCEEDED
    Misc/json%20%2327838.php: SUCCEEDED
    Misc/lexer.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    T_INLINE_HTML
    311 '\r\n'
    T_OPEN_TAG
    368 '&lt;?'
    T_WHITESPACE
    371 ' \r\n\r\n'
    T_FINAL
    345 'final'
    T_WHITESPACE
    371 ' '
    T_CLASS
    353 'class'
    T_WHITESPACE
    371 ' '
    T_STRING
    307 'A'
    T_WHITESPACE
    371 ' \r\n'
        '{'
    T_WHITESPACE
    371 ' \r\n  '
    T_FUNCTION
    334 'function'
    T_WHITESPACE
    371 ' '
    T_STRING
    307 '__get'
        '('
    T_VARIABLE
    309 '$x'
        ')'
    T_WHITESPACE
    371 ' \r\n  '
        '{'
    T_WHITESPACE
    371 ' \r\n    '
    T_VARIABLE
    309 '$x'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_START_HEREDOC
    372 '&lt;&lt;&lt;EOOOOOOOOOOOOOOT\r\n'
    T_ENCAPSED_AND_WHITESPACE
    314 '         &lt;&lt;&lt;hello\r\nEOOOOOOOOOOOOOOt;\r\nEOOOOOOOOOOOOOT;\r\n'
    T_END_HEREDOC
    373 'EOOOOOOOOOOOOOOT'
        ';'
    T_WHITESPACE
    371 '\r\n\r\n    '
        '$'
    T_VARIABLE
    309 '$y'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_ARRAY
    360 'array'
    T_WHITESPACE
    371 ' '
        '('
    T_LNUMBER
    305 '1'
        ','
    T_DNUMBER
    306 '100000000000000'
        ','
    T_DNUMBER
    306 '999999999999999999999999999999999'
        ','
    T_STRING
    307 'true'
        ','
    T_STRING
    307 'false'
        ')'
        ';'
    T_WHITESPACE
    371 '\r\n    '
        '$'
        '{'
        '&quot;'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
    T_DOLLAR_OPEN_CURLY_BRACES
    374 '${'
        '$'
        '{'
    T_CONSTANT_ENCAPSED_STRING
    315 '&quot;xxx&quot;'
        '}'
        '}'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
        '&quot;'
        '}'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_LNUMBER
    305 '1'
        ';'
    T_WHITESPACE
    371 '\r\n    '
        '$'
        '{'
        '&quot;'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
    T_DOLLAR_OPEN_CURLY_BRACES
    374 '${'
        '$'
        '{'
        '&quot;'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
    T_VARIABLE
    309 '$x'
    T_ENCAPSED_AND_WHITESPACE
    314 '-&gt;$$'
    T_VARIABLE
    309 '$x0xx'
        '&quot;'
        '}'
        '}'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
        '&quot;'
        '}'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_LNUMBER
    305 '1'
        ';'
    T_WHITESPACE
    371 '\r\n  '
        '}'
    T_WHITESPACE
    371 ' \r\n'
        '}'
    T_WHITESPACE
    371 '\r\n\r\n'
    T_CLOSE_TAG
    370 '?&gt;'
    '
    '
        '&lt;?'
        ' 
    
    '
        'final'
        ' '
        'class'
        ' '
        'A'
        ' 
    '
        '{'
        ' 
      '
        'function'
        ' '
    259
    259 '__get'
        '('
        '$x'
        ')'
        ' 
      '
        '{'
        ' 
        '
        '$x'
        ' '
        '='
        ' '
        '&lt;&lt;&lt;EOOOOOOOOOOOOOOT
    '
        '         &lt;&lt;&lt;'
        'hello'
        '
    '
        'EOOOOOOOOOOOOOOt;
    '
        'EOOOOOOOOOOOOOT;
    '
        'EOOOOOOOOOOOOOOT'
        ';'
        '
    
        '
        '$'
        '$y'
        ' '
        '='
        ' '
        'array'
        ' '
        '('
        '1'
        ','
        '100000000000000'
        ','
        '999999999999999999999999999999999'
        ','
    256
    256 'true'
        ','
    257
    257 'false'
        ')'
        ';'
        '
        '
        '$'
        '{'
        '&quot;'
        'x'
        '${'
        '$'
        '{'
    -29
    -29 '&quot;xxx&quot;'
        '}'
        '}'
        'x'
        '&quot;'
        '}'
        ' '
        '='
        ' '
        '1'
        ';'
        '
        '
        '$'
        '{'
        '&quot;'
        'x'
        '${'
        '$'
        '{'
        '&quot;'
        'x'
        '$x'
        '-&gt;'
        '$'
        '$'
        '$x0xx'
        '&quot;'
        '}'
        '}'
        'x'
        '&quot;'
        '}'
        ' '
        '='
        ' '
        '1'
        ';'
        '
      '
        '}'
        ' 
    '
        '}'
        '
    
    '
        '?&gt;'
    Misc/locale.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string(1) "C"
    double(1.54)
    double(Infinity)
    654564.145400
    Sat Saturday Apr April
    --------------
    string(19) "Danish_Denmark.1252"
    double(1.54)
    double(Infinity)
    654564,145400
    lo lordag apr april
    --------------
    string(25) "Czech_Czech Republic.1250"
    double(1.54)
    double(Infinity)
    654564,145400
    so sobota IV duben
    --------------
    string(1) "C"
    float(1.54)
    float(Infinity)
    654564.145400
    Sat Saturday Apr April
    --------------
    string(19) "Danish_Denmark.1252"
    float(1.54)
    float(Infinity)
    654564,145400
    lo lordag apr april
    --------------
    string(25) "Czech_Czech Republic.1250"
    float(1.54)
    float(Infinity)
    654564,145400
    so sobota 4 duben
    --------------
    Misc/output2.php: SUCCEEDED
    Misc/parse_url%20%2327377.php: SUCCEEDED
    Misc/parse_url_at_bug.php: SUCCEEDED
    Misc/stack_trace.php: FAILED
    Script hung upNo errorsSuccess
    Expected test outputReal script output
    Unhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---> System.IndexOutOfRangeException: Index was outside the bounds of the array.
       at PHP.Core.PhpStackFrame..ctor(ScriptContext context, StackFrame frame, FrameKinds kind)
       at PHP.Core.PhpStackTrace..ctor(ScriptContext context, StackTrace clrTrace)
       at PHP.Core.PhpStackTrace..ctor(ScriptContext context, Int32 skipFrames)
       at PHP.Library.Errors.Backtrace()
       at <stack_trace.inc>.<Script>.j(ScriptContext <context>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\stack_trace.inc:line 11
       at <stack_trace.inc>.<Script>.j(Object instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.CallInternal(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at PHP.Core.ScriptContext.CallVoid(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <stack_trace.inc>.<Script>.i(ScriptContext <context>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\stack_trace.inc:line 7
       at <stack_trace.inc>.<Script>.i(Object instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.CallInternal(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at PHP.Core.ScriptContext.CallVoid(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <^0>.<Global>.<?0>.h(ScriptContext <context>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt:line 14
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack, DTypeDesc caller)
       at PHP.Core.PhpCallback.InvokeInternal(Object[] args)
       at PHP.Core.PhpCallback.Invoke(Object[] args)
       at PHP.Library.PhpArrays.Map(DTypeDesc caller, PhpCallback map, PhpArray[] arrays)
       at <__input.txt>.<Script>.<Lambda>(ScriptContext <context>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt:line 4
       at <__input.txt>.<Script>.<Lambda>(Object instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.CallInternal(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at PHP.Core.ScriptContext.CallVoid(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <__input.txt>.<Script>.f(ScriptContext <context>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt:line 7
       at <__input.txt>.<Script>.f(Object instance, PhpStack stack)
       at <__input.txt>.<Script>.<Main>(ScriptContext <context>, Dictionary`2 <locals>, DObject <self>, DTypeDesc <includer>, Boolean <request>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt:line 18
       at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)
       at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)
       --- End of inner exception stack trace ---
       at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)
       at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)
       at <Global>.Run(String[] )
    
    Misc/str_getcsv%20%2326691.php: SUCCEEDED
    Misc/tokens.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    T_REQUIRE_ONCE = 258,
    T_REQUIRE = 259,
    T_EVAL = 260,
    T_INCLUDE_ONCE = 261,
    T_INCLUDE = 262,
    T_LOGICAL_OR = 263,
    T_LOGICAL_XOR = 264,
    T_LOGICAL_AND = 265,
    T_PRINT = 266,
    T_SR_EQUAL = 267,
    T_SL_EQUAL = 268,
    T_XOR_EQUAL = 269,
    T_OR_EQUAL = 270,
    T_AND_EQUAL = 271,
    T_MOD_EQUAL = 272,
    T_CONCAT_EQUAL = 273,
    T_DIV_EQUAL = 274,
    T_MUL_EQUAL = 275,
    T_MINUS_EQUAL = 276,
    T_PLUS_EQUAL = 277,
    T_BOOLEAN_OR = 278,
    T_BOOLEAN_AND = 279,
    T_IS_NOT_IDENTICAL = 280,
    T_IS_IDENTICAL = 281,
    T_IS_NOT_EQUAL = 282,
    T_IS_EQUAL = 283,
    T_IS_GREATER_OR_EQUAL = 284,
    T_IS_SMALLER_OR_EQUAL = 285,
    T_SR = 286,
    T_SL = 287,
    T_INSTANCEOF = 288,
    T_UNSET_CAST = 289,
    T_BOOL_CAST = 290,
    T_OBJECT_CAST = 291,
    T_ARRAY_CAST = 292,
    T_STRING_CAST = 293,
    T_DOUBLE_CAST = 294,
    T_INT_CAST = 295,
    T_DEC = 296,
    T_INC = 297,
    T_CLONE = 298,
    T_NEW = 299,
    T_EXIT = 300,
    T_IF = 301,
    T_ELSEIF = 302,
    T_ELSE = 303,
    T_ENDIF = 304,
    T_LNUMBER = 305,
    T_DNUMBER = 306,
    T_STRING = 307,
    T_STRING_VARNAME = 308,
    T_VARIABLE = 309,
    T_NUM_STRING = 310,
    T_INLINE_HTML = 311,
    T_CHARACTER = 312,
    T_BAD_CHARACTER = 313,
    T_ENCAPSED_AND_WHITESPACE = 314,
    T_CONSTANT_ENCAPSED_STRING = 315,
    T_ECHO = 316,
    T_DO = 317,
    T_WHILE = 318,
    T_ENDWHILE = 319,
    T_FOR = 320,
    T_ENDFOR = 321,
    T_FOREACH = 322,
    T_ENDFOREACH = 323,
    T_DECLARE = 324,
    T_ENDDECLARE = 325,
    T_AS = 326,
    T_SWITCH = 327,
    T_ENDSWITCH = 328,
    T_CASE = 329,
    T_DEFAULT = 330,
    T_BREAK = 331,
    T_CONTINUE = 332,
    T_GOTO = 333,
    T_FUNCTION = 334,
    T_CONST = 335,
    T_RETURN = 336,
    T_TRY = 337,
    T_CATCH = 338,
    T_THROW = 339,
    T_USE = 340,
    T_GLOBAL = 341,
    T_PUBLIC = 342,
    T_PROTECTED = 343,
    T_PRIVATE = 344,
    T_FINAL = 345,
    T_ABSTRACT = 346,
    T_STATIC = 347,
    T_VAR = 348,
    T_UNSET = 349,
    T_ISSET = 350,
    T_EMPTY = 351,
    T_HALT_COMPILER = 352,
    T_CLASS = 353,
    T_INTERFACE = 354,
    T_EXTENDS = 355,
    T_IMPLEMENTS = 356,
    T_OBJECT_OPERATOR = 357,
    T_DOUBLE_ARROW = 358,
    T_LIST = 359,
    T_ARRAY = 360,
    T_CLASS_C = 361,
    T_METHOD_C = 362,
    T_FUNC_C = 363,
    T_LINE = 364,
    T_FILE = 365,
    T_COMMENT = 366,
    T_DOC_COMMENT = 367,
    T_OPEN_TAG = 368,
    T_OPEN_TAG_WITH_ECHO = 369,
    T_CLOSE_TAG = 370,
    T_WHITESPACE = 371,
    T_START_HEREDOC = 372,
    T_END_HEREDOC = 373,
    T_DOLLAR_OPEN_CURLY_BRACES = 374,
    T_CURLY_OPEN = 375,
    T_PAAMAYIM_NEKUDOTAYIM = 376,
    T_DOUBLE_COLON = 376,
    T_NAMESPACE = 377,
    T_NS_C = 378,
    T_DIR = 379,
    T_NS_SEPARATOR = 380,
    T_INCLUDE = 129,
    T_INCLUDE_ONCE = 130,
    T_EVAL = 131,
    T_REQUIRE = 132,
    T_REQUIRE_ONCE = 133,
    T_LOGICAL_OR = 136,
    T_LOGICAL_XOR = 137,
    T_LOGICAL_AND = 138,
    T_PRINT = 139,
    T_PLUS_EQUAL = 140,
    T_MINUS_EQUAL = 141,
    T_MUL_EQUAL = 142,
    T_DIV_EQUAL = 143,
    T_CONCAT_EQUAL = 144,
    T_MOD_EQUAL = 145,
    T_AND_EQUAL = 146,
    T_OR_EQUAL = 147,
    T_XOR_EQUAL = 148,
    T_SL_EQUAL = 149,
    T_SR_EQUAL = 150,
    T_BOOLEAN_OR = 151,
    T_BOOLEAN_AND = 152,
    T_IS_EQUAL = 153,
    T_IS_NOT_EQUAL = 154,
    T_IS_IDENTICAL = 155,
    T_IS_NOT_IDENTICAL = 156,
    T_IS_SMALLER_OR_EQUAL = 157,
    T_IS_GREATER_OR_EQUAL = 158,
    T_SL = 159,
    T_SR = 160,
    T_INC = 161,
    T_DEC = 162,
    T_NEW = 164,
    T_INSTANCEOF = 165,
    T_CLONE = 167,
    T_LNUMBER = 168,
    T_DNUMBER = 170,
    T_STRING = 171,
    T_STRING_VARNAME = 172,
    T_VARIABLE = 173,
    T_NUM_STRING = 174,
    T_INLINE_HTML = 175,
    T_CHARACTER = 176,
    T_BAD_CHARACTER = 177,
    T_ENCAPSED_AND_WHITESPACE = 178,
    T_CONSTANT_ENCAPSED_STRING = 179,
    T_EXIT = 180,
    T_IF = 181,
    T_ELSEIF = 182,
    T_ELSE = 183,
    T_ENDIF = 184,
    T_ECHO = 185,
    T_DO = 186,
    T_WHILE = 187,
    T_ENDWHILE = 188,
    T_FOR = 189,
    T_ENDFOR = 190,
    T_FOREACH = 191,
    T_ENDFOREACH = 192,
    T_AS = 193,
    T_SWITCH = 194,
    T_ENDSWITCH = 195,
    T_CASE = 196,
    T_DEFAULT = 197,
    T_BREAK = 198,
    T_CONTINUE = 199,
    T_FUNCTION = 200,
    T_CONST = 201,
    T_RETURN = 202,
    T_GLOBAL = 203,
    T_STATIC = 204,
    T_VAR = 205,
    T_UNSET = 206,
    T_ISSET = 207,
    T_EMPTY = 208,
    T_CLASS = 209,
    T_EXTENDS = 210,
    T_OBJECT_OPERATOR = 211,
    T_DOUBLE_ARROW = 212,
    T_LIST = 213,
    T_ARRAY = 214,
    T_CLASS_C = 215,
    T_METHOD_C = 216,
    T_FUNC_C = 217,
    T_LINE = 218,
    T_FILE = 219,
    T_DIR = 220,
    T_COMMENT = 221,
    T_DOC_COMMENT = 222,
    T_OPEN_TAG = 227,
    T_OPEN_TAG_WITH_ECHO = 228,
    T_CLOSE_TAG = 229,
    T_WHITESPACE = 230,
    T_START_HEREDOC = 231,
    T_END_HEREDOC = 232,
    T_DOLLAR_OPEN_CURLY_BRACES = 233,
    T_CURLY_OPEN = 234,
    T_DOUBLE_COLON = 235,
    T_PAAMAYIM_NEKUDOTAYIM = 235,
    T_GOTO = 237,
    T_TRY = 238,
    T_CATCH = 239,
    T_THROW = 240,
    T_INTERFACE = 241,
    T_IMPLEMENTS = 242,
    T_ABSTRACT = 243,
    T_FINAL = 244,
    T_PRIVATE = 245,
    T_PROTECTED = 246,
    T_PUBLIC = 247,
    T_BOOL_CAST = 287,
    T_INT_CAST = 290,
    T_DOUBLE_CAST = 296,
    T_STRING_CAST = 299,
    T_ARRAY_CAST = 302,
    T_OBJECT_CAST = 303,
    T_UNSET_CAST = 304,
    T_HALT_COMPILER = 351,
    Misc/user_error_handlers.php: SUCCEEDED
    Objects/accessing%20property%20line%20number%20%2326052.php: SUCCEEDED
    Objects/conditional1.php: SUCCEEDED
    Objects/conditional2.php: SUCCEEDED
    Objects/conditional_base_class.php: SUCCEEDED
    Objects/constant_test.php: SUCCEEDED
    Objects/evaled_parent.php: SUCCEEDED
    Objects/getter_setter_bug28444.php: SUCCEEDED
    Objects/instanceof.php: SUCCEEDED
    Objects/new_via_unknown_ctor.php: SUCCEEDED
    Objects/object_creation_test.php: SUCCEEDED
    Objects/overrides%20%231285.php: SUCCEEDED
    Objects/static_field_test.php: SUCCEEDED
    Objects/static_inheritence.php: SUCCEEDED
    Objects/static_method_test.php: SUCCEEDED
    Objects/static_object_vars.php: SUCCEEDED
    Objects/sys_class_const.php: SUCCEEDED
    Objects/this2.php: SUCCEEDED
    RegEx/backreferences.php: SUCCEEDED
    RegEx/dolar_escape.php: SUCCEEDED
    RegEx/ereg.php: SUCCEEDED
    RegEx/escaped_unicode.php: SUCCEEDED
    RegEx/namedbackref.php: SUCCEEDED
    RegEx/namedgroups.php: SUCCEEDED
    RegEx/namedgroups1.php: SUCCEEDED
    RegEx/namedgroups2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Warning: preg_match_all(): Numeric named subpatterns are not allowed in D:\Documents\Projects\Phalanger\Main\Testing\Tests\RegEx\__input.txt on line 6
    array(0) {
    }
    array(2) {
      [0]=>
      array(2) {
        [0]=>
        string(23) "flux.transitions.bars3d"
        [1]=>
        string(21) "flux.transitions.wrap"
      }
      [1]=>
      array(2) {
        [0]=>
        string(0) ""
        [1]=>
        string(0) ""
      }
    }
    RegEx/preg_match_unmatched_groups.php: SUCCEEDED
    RegEx/preg_replace_eval.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ab"01300 as"00da sd"0asdsa das asd 11asd a1sd a
    ab"01300 as"00da sd"0(aasdasdkjask,$a,\,\l,a,s,d,a,s,d,k,j,a,s,${120})(ldjaklsdjalk,$l,\,\l,d,j,a,k,l,s,d,j,a,l,${120})djdsa das asd 11asd a1sd a
    ab"01300 as"00da sd"0asdsa das asd 11asd a1sd a
    ab"01300 as"00da sd"0(aasdasdkjask,$a,\,\l,a,s,d,a,s,d,k,j,,,${120})(ldjaklsdjalk,$l,\,\l,d,j,a,k,l,s,d,j,,,${120})djdsa das asd 11asd a1sd a
    RegEx/regexp-sql.php: SUCCEEDED
    RegEx/regexp_smiles.php: SUCCEEDED
    RegEx/Perl/cache.php: SUCCEEDED
    RegEx/Perl/grep1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      [3] => string(3) "1.5"
      [6] => string(5) "58.54"
    }
    Notice: preg_grep(): Array to string conversion in D:\Documents\Projects\Phalanger\Main\Testing\Tests\RegEx\Perl\__input.txt at expression on line 5, column 1.
    array(2) {
      [3]=>
      string(3) "1.5"
      [6]=>
      string(5) "58.54"
    }
    RegEx/Perl/grep2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Food  array
    (
      [0] => apple
      [1] => banana
      [2] => squid
      [3] => pear
    )
    Fruit array
    (
      [0] => apple
      [1] => banana
      [3] => pear
    )
    Food  Array
    (
        [0] => apple
        [1] => banana
        [2] => squid
        [3] => pear
    )
    Fruit Array
    (
        [0] => apple
        [1] => banana
        [3] => pear
    )
    RegEx/Perl/match1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array [empty]
    array
    (
      [0] => array
      (
        [0] => def
        [1] => 3
      )
    )
    Array
    (
    )
    Array
    (
        [0] => Array
        (
            [0] => def
            [1] => 3
        )
    
    )
    RegEx/Perl/match10.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    (
      [0] => 1231
      [1] => 1
      [2] => 23
      [3] => 1
    )
    Array
    (
        [0] => 1231
        [1] => 1
        [2] => 23
        [3] => 1
    )
    RegEx/Perl/match2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    (
      [0] => array
      (
        [0] => def
        [1] => 0
      )
    )
    Array
    (
        [0] => Array
        (
            [0] => def
            [1] => 0
        )
    
    )
    RegEx/Perl/match3.php: SUCCEEDED
    RegEx/Perl/match4.php: SUCCEEDED
    RegEx/Perl/match5.php: SUCCEEDED
    RegEx/Perl/match6.php: SUCCEEDED
    RegEx/Perl/match7.php: SUCCEEDED
    RegEx/Perl/match8.php: SUCCEEDED
    RegEx/Perl/match9.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    (
      [0] => 209.6.145.47 - - [22/Nov/2003:19:02:30 -0500] "GET /dir/doc.htm HTTP/1.0" 200 6776 "http://search.yahoo.com/search?p=key+words=UTF-8" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)"
      [1] => 209.6.145.47
      [2] => -
      [3] => -
      [4] => 22/Nov/2003:19:02:30 -0500
      [5] => GET
      [6] => /dir/doc.htm
      [7] => HTTP
      [8] => 1.0
      [9] => 200
      [10] => 6776
      [11] => "http://search.yahoo.com/search?p=key+words=UTF-8"
      [12] => "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)"
    )
    Array
    (
        [0] => 209.6.145.47 - - [22/Nov/2003:19:02:30 -0500] "GET /dir/doc.htm HTTP/1.0" 200 6776 "http://search.yahoo.com/search?p=key+words=UTF-8" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)"
        [1] => 209.6.145.47
        [2] => -
        [3] => -
        [4] => 22/Nov/2003:19:02:30 -0500
        [5] => GET
        [6] => /dir/doc.htm
        [7] => HTTP
        [8] => 1.0
        [9] => 200
        [10] => 6776
        [11] => "http://search.yahoo.com/search?p=key+words=UTF-8"
        [12] => "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)"
    )
    RegEx/Perl/match_all1.php: SUCCEEDED
    RegEx/Perl/match_all2.php: SUCCEEDED
    RegEx/Perl/match_all3.php: SUCCEEDED
    RegEx/Perl/match_all4.php: SUCCEEDED
    RegEx/Perl/match_dollar.php: SUCCEEDED
    RegEx/Perl/overflow.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string("kfkaj +j k45´┐Ż´┐Ż´┐Ż´┐Ż´┐Ż3#$%^&kjakfjkaj|kfj")
    string("kfkaj +j k45�����3#$%^&kjakfjkaj|kfj")
    RegEx/Perl/quote1.php: SUCCEEDED
    RegEx/Perl/quote2.php: SUCCEEDED
    RegEx/Perl/quote3.php: SUCCEEDED
    RegEx/Perl/replace1.php: SUCCEEDED
    RegEx/Perl/replace2.php: SUCCEEDED
    RegEx/Perl/replace3.php: SUCCEEDED
    RegEx/Perl/replace4.php: SUCCEEDED
    RegEx/Perl/replace5.php: SUCCEEDED
    RegEx/Perl/replace6.php: SUCCEEDED
    RegEx/Perl/replace7.php: SUCCEEDED
    RegEx/Perl/replace8.php: SUCCEEDED
    RegEx/Perl/replace9.php: SUCCEEDED
    RegEx/Perl/replace_callback1.php: SUCCEEDED
    RegEx/Perl/replace_callback2.php: SUCCEEDED
    RegEx/Perl/split1.php: SUCCEEDED
    RegEx/Perl/split2.php: SUCCEEDED
    RegEx/Perl/split3.php: SUCCEEDED
    RegEx/Perl/split4.php: SUCCEEDED
    RegEx/Perl/split5.php: SUCCEEDED
    RegEx/Perl/split6.php: SUCCEEDED
    RegEx/Perl/ungreedy.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    aaa
    a
    aaa
    
    a
    aa
    aaa
    aa
    aaa
    aaa
    a
    aaa
    a
    a
    aa
    aaa
    aa
    aaa
    RegEx/Perl/unsuccessful-preg_match_all.php: SUCCEEDED
    RegEx/Perl/withoutdelimiters.php: SUCCEEDED
    SPL/ArrayAccess_offsetExists.php: SUCCEEDED
    SPL/Autoload_ctor.php: SUCCEEDED
    SPL/Autoload_extends.php: SUCCEEDED
    SPL/exceptions.php: SUCCEEDED
    Strings/addcslashes.php: SUCCEEDED
    Strings/addslashes.php: SUCCEEDED
    Strings/chunk_split.php: SUCCEEDED
    Strings/concat.php: SUCCEEDED
    Strings/count_chars.php: SUCCEEDED
    Strings/crc32.php: SUCCEEDED
    Strings/crypt.php: SUCCEEDED
    Strings/crypt2.php: SUCCEEDED
    Strings/echo.php: SUCCEEDED
    Strings/explode.php: SUCCEEDED
    Strings/get_html_translation_table.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <hr>[&] => &amp;
    [>] => &gt;
    [<] => &lt;
    ["] => &quot;
    <hr>Hallo &amp; &lt;Frau&gt; &amp; Kr&iuml;&iquest;&frac12;mer
    <hr>[&] => &amp;
    [>] => &gt;
    [<] => &lt;
    ["] => &quot;
    <hr>Hallo &amp; &lt;Frau&gt; &amp; Kr�mer
    Strings/mb_strlen.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Call to undefined function mb_strlen() in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 4
    Error: Call to undefined function: 'mb_strlen' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 4, column 1.
    Strings/nl2br.php: SUCCEEDED
    Strings/pack.php: SUCCEEDED
    Strings/pos.php: SUCCEEDED
    Strings/runtime-quotes.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    fread = (x''y"z)
    fgets = (x''y"z)
    file[0] = (x''y"z)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    
    Warning: fopen(runtime-quotes2.txt): failed to open stream: Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 33
    
    Warning: fwrite() expects parameter 1 to be resource, boolean given in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 35
    fwrite = ()
    
    Warning: fputs() expects parameter 1 to be resource, boolean given in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 38
    fputs = ()
    
    Warning: fclose() expects parameter 1 to be resource, boolean given in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 41
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (x'y"z)
    fgets = (x'y"z)
    file[0] = (x'y"z)
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (a\'b"\\ca\)
    fgets = (a\'b"\\ca\'b"\\c)
    file[0] = (a\'b"\\ca\'b"\\c)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    e'e
    e''e
    e'e
    e'e
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    e'e
    e'e
    e'e
    e'e
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    fread = (x''y"z)
    fgets = (x''y"z)
    file[0] = (x''y"z)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    
    Warning: fopen(): Unable to access (D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\runtime-quotes2.txt): Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 33, column 3.
    
    Warning: Cannot convert boolean to resource implicitly in a call to function fwrite() in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 35, column 3.
    fwrite = (0)
    
    Warning: Cannot convert boolean to resource implicitly in a call to function fputs() in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 38, column 3.
    fputs = (0)
    
    Warning: Cannot convert boolean to resource implicitly in a call to function fclose() in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 41, column 3.
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (x'y"z)
    fgets = (x'y"z)
    file[0] = (x'y"z)
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (a\'b"\\ca\)
    fgets = (a\'b"\\ca\'b"\\c)
    file[0] = (a\'b"\\ca\'b"\\c)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    e'e
    e''e
    e'e
    e'e
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    e'e
    e'e
    e'e
    e'e
    Strings/sprintf.php: SUCCEEDED
    Strings/sprintf2.php: SUCCEEDED
    Strings/strtr.php: SUCCEEDED
    Strings/str_ireplace.php: SUCCEEDED
    Strings/str_replace.php: SUCCEEDED
    Strings/str_word_count.php: SUCCEEDED
    Strings/substr_operations.php: SUCCEEDED
    Strings/wordwrap.php: SUCCEEDED
    Variables/advanced_serialize.php: SUCCEEDED
    Variables/arguments.php: SUCCEEDED
    Variables/assign_copy.php: SUCCEEDED
    Variables/bitwise.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "00"
    string(2) "31"
    string(2) "31"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    0
    0
    0
    5
    0
    5
    40
    5
    45
    string(48) "000000000000000000000000000000000000000000000000"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(14) "31323331323331"
    string(2) "30"
    string(14) "31323331323331"
    string(16) "3635343635343536"
    string(2) "30"
    string(16) "3635343635343536"
    string(14) "337a5e8be43d7a"
    string(14) "00002130120201"
    string(48) "337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42"
    string(16) "347d598ce33a7e77"
    string(16) "0200243214040100"
    string(48) "367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42"
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "00"
    string(2) "31"
    string(2) "31"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    0
    -9223372036854775808
    -9223372036854775808
    -9223372036854775803
    0
    -9223372036854775803
    40
    5
    45
    string(48) "000000000000000000000000000000000000000000000000"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(14) "31323331323331"
    string(2) "30"
    string(14) "31323331323331"
    string(16) "3635343635343536"
    string(2) "30"
    string(16) "3635343635343536"
    string(14) "337a5e8be43d7a"
    string(14) "00002130120201"
    string(48) "337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42"
    string(16) "347d598ce33a7e77"
    string(16) "0200243214040100"
    string(48) "367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42"
    Variables/class_constants.php: SUCCEEDED
    Variables/comparisons.php: SUCCEEDED
    Variables/constant.php: SUCCEEDED
    Variables/constants_defined.php: SUCCEEDED
    Variables/extract%20refs.php: SUCCEEDED
    Variables/extract.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    EXTR_PREFIX_ALL
    integer(4)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
      'prefix_non_existent' => integer(1)
    }
    <hr>EXTR_PREFIX_INVALID
    integer(5)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => integer(2)
      'non_existent' => integer(1)
      'prefix_' => integer(1)
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => 'hello'
    }
    <hr>EXTR_PREFIX_SAME
    integer(3)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'non_existent' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>EXTR_PREFIX_IF_EXISTS
    integer(3)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>
    EXTR_PREFIX_ALL
    integer(4)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
      'prefix_non_existent' => integer(1)
    }
    <hr>EXTR_PREFIX_INVALID
    integer(5)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => integer(2)
      'non_existent' => integer(1)
      'prefix_' => integer(1)
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => 'hello'
    }
    <hr>EXTR_PREFIX_SAME
    integer(4)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'non_existent' => integer(1)
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>EXTR_PREFIX_IF_EXISTS
    integer(3)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>
    Variables/func_get_args.php: SUCCEEDED
    Variables/is_number.php: SUCCEEDED
    Variables/serialize.php: SUCCEEDED
    Variables/unserialize_objects.php: SUCCEEDED
    Variables/var_dumping.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Array
    (
        [0] => 1
        [1] => 
        [2] => 1
        [3] => 1.2
        [4] => 
        [5] => asdas
        [6] => Array
            (
                [0] => 1
            )
    
        [7] => stdClass Object
            (
            )
    
        [8] => Resource id #1
    )
    array(9) {
      [0]=>
      bool(true)
      [1]=>
      bool(false)
      [2]=>
      int(1)
      [3]=>
      float(1.2)
      [4]=>
      NULL
      [5]=>
      string(5) "asdas"
      [6]=>
      array(1) {
        [0]=>
        int(1)
      }
      [7]=>
      object(stdClass)#1 (0) {
      }
      [8]=>
      resource(1) of type (stream)
    }
    array (
      0 => true,
      1 => false,
      2 => 1,
      3 => 1.2,
      4 => NULL,
      5 => 'asdas',
      6 => 
      array (
        0 => 1,
      ),
      7 => 
      stdClass::__set_state(array(
      )),
      8 => NULL,
    )
    Array
    (
        [0] => 1
        [1] => 
        [2] => 1
        [3] => 1.2
        [4] => 
        [5] => asdas
        [6] => Array
        (
            [0] => 1
        )
    
        [7] => stdClass Object
        (
        )
    
        [8] => resource id #4
    
    )
    array(9) {
      [0]=>
      bool(true)
      [1]=>
      bool(false)
      [2]=>
      int(1)
      [3]=>
      float(1.2)
      [4]=>
      NULL
      [5]=>
      string(5) "asdas"
      [6]=>
      array(1) {
        [0]=>
        int(1)
      }
      [7]=>
      object(stdClass)(0) {
      }
      [8]=>
      resource(4) of type (stream)
    }
    array (
      0 => true,
      1 => false,
      2 => 1,
      3 => 1.2,
      4 => NULL,
      5 => 'asdas',
      6 => array (
        0 => 1,
      ),
      7 => class stdClass
      {
    
      },
      8 => NULL,
    )
    Xml/025.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
      'foo' => 'foobar'
    }
    array
    {
      'html' => 'http://www.w3.org/1999/xhtml'
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
    }
    array
    {
      'html' => 'http://www.w3.org/1999/xhtml'
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'foo' => 'foobar'
      'baz' => 'foobarbaz'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
    }
    array
    {
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
      'baz' => 'foobarbaz'
      'foo' => 'foobar'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
      'baz' => 'foobarbaz'
      'foo' => 'foobar'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
    }
    array
    {
    }
    Xml/026.php: SUCCEEDED
    Xml/027.php: SUCCEEDED
    Xml/028.php: SUCCEEDED
    Xml/029.php: SUCCEEDED
    Xml/030.php: SUCCEEDED
    Xml/032.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    FALSE
    FALSE
    FALSE
    TRUE
    TRUE
    TRUE
    Xml/033.php: SUCCEEDED
    Xml/bug26384.php: SUCCEEDED
    Xml/bug28721.php: SUCCEEDED
    Xml/bug28817.php: SUCCEEDED
    Xml/bug32615.php: SUCCEEDED
    Xml/bug33853.php: SUCCEEDED
    Xml/bug34276.php: SUCCEEDED
    Xml/bug35342.php: SUCCEEDED
    Xml/bug36756.php: SUCCEEDED
    Xml/bug37277.php: SUCCEEDED
    Xml/dom002.php: SUCCEEDED
    Xml/dom003.php: SUCCEEDED
    Xml/dom006.php: SUCCEEDED
    Xml/dom007.php: SUCCEEDED
    Xml/dom_set_attr_node.php: SUCCEEDED
    Xml/xmlhandler.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test begins
    <br/>
    <br/>test begins
    <br/>empty begins
    <br/>empty ends
    <br/>nocontent begins
    <br/>nocontent ends
    <br/>content begins
    <br/>empty begins
    <br/>empty ends
    <br/>empty begins
    <br/>empty ends
    <br/>content ends
    <br/>empty begins
    <br/>empty ends
    <br/>empty begins
    <br/>empty ends
    <br/>test ends
    <br/>Test ends
    <br/>
    <br/>
    Test begins
    <br/>
    <br/>
    Error: Call to undefined function: 'xml_parser_create' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Xml\__input.txt at expression on line 18, column 3.
    Xml/xslt001.php: SUCCEEDED
    Xml/xslt002.php: SUCCEEDED
    Xml/xslt003.php: SUCCEEDED
    Xml/xslt004.php: SUCCEEDED
    Xml/xslt005.php: SUCCEEDED
    Xml/xslt006.php: SUCCEEDED
    Xml/xslt007.php: SUCCEEDED
    Xml/xslt010.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test 10: EXSLT Support
      
      
      Test Date : 0001-12-31Z
        year                 : 1
        leap-year            : false
        month-in-year        : 12
        month-name           : December
        month-abbreviation   : Dec
        week-in-year         : 1
        day-in-year          : 365
        day-in-month         : 31
        day-of-week-in-month : 5
        day-in-week          : 2
        day-name             : Monday
        day-abbreviation     : Mon
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : 3000-01-31
        year                 : 3000
        leap-year            : false
        month-in-year        : 1
        month-name           : January
        month-abbreviation   : Jan
        week-in-year         : 5
        day-in-year          : 31
        day-in-month         : 31
        day-of-week-in-month : 5
        day-in-week          : 6
        day-name             : Friday
        day-abbreviation     : Fri
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : 2000-02-29
        year                 : 2000
        leap-year            : true
        month-in-year        : 2
        month-name           : February
        month-abbreviation   : Feb
        week-in-year         : 9
        day-in-year          : 60
        day-in-month         : 29
        day-of-week-in-month : 5
        day-in-week          : 3
        day-name             : Tuesday
        day-abbreviation     : Tue
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : 9990001-12-31Z
        year                 : 9990001
        leap-year            : false
        month-in-year        : 12
        month-name           : December
        month-abbreviation   : Dec
        week-in-year         : 1
        day-in-year          : 365
        day-in-month         : 31
        day-of-week-in-month : 5
        day-in-week          : 2
        day-name             : Monday
        day-abbreviation     : Mon
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : -0004-02-29
        year                 : -4
        leap-year            : true
        month-in-year        : 2
        month-name           : February
        month-abbreviation   : Feb
        week-in-year         : 9
        day-in-year          : 60
        day-in-month         : 29
        day-of-week-in-month : 5
        day-in-week          : 1
        day-name             : Sunday
        day-abbreviation     : Sun
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
    Test 10: EXSLT Support
    Warning: Cannot find a script or an extension object associated with namespace 'http://exslt.org/dates-and-times'..
    
    Warning: Illegal string offset '-1' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Phalanger.inc at expression on line 7, column 6.
    Xml/xslt011.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test 11: php:function Support
    
    Warning: XSLTProcessor::transformToXml(): A PHP Object cannot be converted to a XPath-string in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Xml\__input.txt on line 18
    <?xml version="1.0"?>
    foobar - secondArg
    foobar - 
    this is from an external DomDocument
    from the Input Document
    static
    Test 11: php:function Support
    <?xml version="1.0" encoding="utf-8"?>foobar - secondArg
    foobar - 
    this is from an external DomDocument
    from the Input Document
    static
    not a DomNode object
    Xml/xslt012.php: SUCCEEDED
    ================================================ FILE: Testing/Tests/TestLogs/TestLog (2038).htm ================================================ PHP.NET Compiler test log

    PHP.NET Compiler test log

    (90%) 850 succeeded, 97 failed
    Test ResultCompiler error outputExpected test result
    @PHP/classes/array_access_001.php: SUCCEEDED
    @PHP/classes/array_access_002.php: SUCCEEDED
    @PHP/classes/array_access_003.php: SUCCEEDED
    @PHP/classes/array_access_004.php: SUCCEEDED
    @PHP/classes/array_access_005.php: SUCCEEDED
    @PHP/classes/array_access_006.php: SUCCEEDED
    @PHP/classes/array_access_007.php: SUCCEEDED
    @PHP/classes/array_access_008.php: SUCCEEDED
    @PHP/classes/array_access_009.php: SUCCEEDED
    @PHP/classes/array_access_010.php: SUCCEEDED
    @PHP/classes/array_access_011.php: SUCCEEDED
    @PHP/classes/array_access_013.php: SUCCEEDED
    @PHP/classes/assign_op_property_001.php: SUCCEEDED
    @PHP/classes/autoload_001.php: SUCCEEDED
    @PHP/classes/autoload_002.php: SUCCEEDED
    @PHP/classes/autoload_003.php: SUCCEEDED
    @PHP/classes/autoload_005.php: SUCCEEDED
    @PHP/classes/autoload_006.php: SUCCEEDED
    @PHP/classes/bug23951.php: SUCCEEDED
    @PHP/classes/bug24399.php: SUCCEEDED
    @PHP/classes/bug24445.php: SUCCEEDED
    @PHP/classes/bug26737.php: SUCCEEDED
    @PHP/classes/bug27468.php: SUCCEEDED
    @PHP/classes/bug27504.php: SUCCEEDED
    @PHP/classes/class_example.php: SUCCEEDED
    @PHP/classes/class_stdclass.php: SUCCEEDED
    @PHP/classes/clone_001.php: SUCCEEDED
    @PHP/classes/clone_002.php: SUCCEEDED
    @PHP/classes/clone_003.php: SUCCEEDED
    @PHP/classes/clone_004.php: SUCCEEDED
    @PHP/classes/clone_006.php: SUCCEEDED
    @PHP/classes/constants_scope_001.php: SUCCEEDED
    @PHP/classes/ctor_dtor.php: SUCCEEDED
    @PHP/classes/ctor_dtor_inheritance.php: SUCCEEDED
    @PHP/classes/ctor_name_clash.php: SUCCEEDED
    @PHP/classes/dereferencing_001.php: SUCCEEDED
    @PHP/classes/destructor_and_echo.php: SUCCEEDED
    @PHP/classes/destructor_and_references.php: SUCCEEDED
    @PHP/classes/destructor_inheritance.php: SUCCEEDED
    @PHP/classes/destructor_visibility_003.php: SUCCEEDED
    @PHP/classes/factory_001.php: SUCCEEDED
    @PHP/classes/factory_and_singleton_001.php: SUCCEEDED
    @PHP/classes/factory_and_singleton_002.php: SUCCEEDED
    @PHP/classes/final.php: SUCCEEDED
    @PHP/classes/incdec_property_001.php: SUCCEEDED
    @PHP/classes/incdec_property_002.php: SUCCEEDED
    @PHP/classes/incdec_property_003.php: SUCCEEDED
    @PHP/classes/incdec_property_004.php: SUCCEEDED
    @PHP/classes/inheritance.php: SUCCEEDED
    @PHP/classes/inheritance_002.php: SUCCEEDED
    @PHP/classes/interfaces_001.php: SUCCEEDED
    @PHP/classes/interface_construct.php: SUCCEEDED
    @PHP/classes/interface_doubled.php: SUCCEEDED
    @PHP/classes/interface_implemented.php: SUCCEEDED
    @PHP/classes/iterators_001.php: SUCCEEDED
    @PHP/classes/iterators_002.php: SUCCEEDED
    @PHP/classes/iterators_003.php: SUCCEEDED
    @PHP/classes/iterators_004.php: SUCCEEDED
    @PHP/classes/iterators_006.php: SUCCEEDED
    @PHP/classes/iterators_007.php: SUCCEEDED
    @PHP/classes/object_reference_001.php: SUCCEEDED
    @PHP/classes/private_001.php: SUCCEEDED
    @PHP/classes/private_002.php: SUCCEEDED
    @PHP/classes/private_003.php: SUCCEEDED
    @PHP/classes/private_003b.php: SUCCEEDED
    @PHP/classes/private_004.php: SUCCEEDED
    @PHP/classes/private_004b.php: SUCCEEDED
    @PHP/classes/private_005.php: SUCCEEDED
    @PHP/classes/private_005b.php: SUCCEEDED
    @PHP/classes/private_006.php: SUCCEEDED
    @PHP/classes/private_006b.php: SUCCEEDED
    @PHP/classes/private_007.php: SUCCEEDED
    @PHP/classes/private_007b.php: SUCCEEDED
    @PHP/classes/private_members.php: SUCCEEDED
    @PHP/classes/private_redeclare.php: SUCCEEDED
    @PHP/classes/protected_001.php: SUCCEEDED
    @PHP/classes/protected_001b.php: SUCCEEDED
    @PHP/classes/protected_002.php: SUCCEEDED
    @PHP/classes/serialize_001.php: SUCCEEDED
    @PHP/classes/singleton_001.php: SUCCEEDED
    @PHP/classes/static_properties_001.php: SUCCEEDED
    @PHP/classes/type_hinting_001.php: SUCCEEDED
    @PHP/classes/type_hinting_003.php: SUCCEEDED
    @PHP/classes/visibility_000c.php: SUCCEEDED
    @PHP/classes/visibility_001c.php: SUCCEEDED
    @PHP/classes/visibility_002c.php: SUCCEEDED
    @PHP/classes/visibility_003a.php: SUCCEEDED
    @PHP/classes/visibility_003c.php: SUCCEEDED
    @PHP/classes/visibility_004a.php: SUCCEEDED
    @PHP/classes/visibility_004b.php: SUCCEEDED
    @PHP/classes/visibility_004c.php: SUCCEEDED
    @PHP/classes/visibility_005.php: SUCCEEDED
    @PHP/classes/__call_001.php: SUCCEEDED
    @PHP/classes/__set_data_corrupt.php: SUCCEEDED
    @PHP/classes/__set__get_001.php: SUCCEEDED
    @PHP/classes/__set__get_004.php: SUCCEEDED
    @PHP/classes/__set__get_005.php: SUCCEEDED
    @PHP/date/bug17988.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2002-06-25 12:18:48
    2002-06-25 14:18:48
    2002-06-25 13:18:48
    2002-06-25 12:18:48
    2002-06-25 18:18:48
    2002-06-25 14:18:48
    2002-06-25 14:18:48
    2002-06-25 18:18:48
    2002-06-25 10:18:48
    2002-06-25 17:18:48
    2002-06-25 11:18:48
    2002-06-25 17:48:48
    2002-06-25 10:48:48
    2002-06-25 14:18:48
    2002-06-25 14:18:48
    2002-06-25 13:18:48
    2002-06-25 12:18:48
    2002-06-25 18:18:48
    2002-06-25 14:18:48
    2002-06-25 14:18:48
    2002-06-25 18:18:48
    2002-06-25 10:18:48
    2002-06-25 17:18:48
    2002-06-25 11:18:48
    2002-06-25 17:48:48
    2002-06-25 10:48:48
    @PHP/date/bug26317.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2003-11-19 17:20:42
    2003-11-19 17:20:42
    2003-11-19 17:20:42
    2003-11-19 16:20:42
    2003-11-19 16:20:42
    2003-11-19 16:20:42
    @PHP/date/bug26320.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2003-11-19 12:30:42
    2003-11-19 13:30:42
    2003-11-19 12:30:42
    2003-11-19 12:30:42
    @PHP/date/bug28088.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    The following line rightly shows the correct date time:
    04/04/04 2145
    But the following line fails to show the correct date time:
    04/03/04 2245
    The following line rightly shows the correct date time:
    04/04/04 2345
    But the following line fails to show the correct date time:
    04/04/04 0045
    @PHP/date/bug28599.php: SUCCEEDED
    @PHP/date/bug29150.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2005-06-19 22:00:00
    2005-06-20 00:00:00
    @PHP/date/bug29585.php: SUCCEEDED
    @PHP/date/bug29595.php: SUCCEEDED
    @PHP/date/bug33056.php: SUCCEEDED
    @PHP/date/bug33452.php: SUCCEEDED
    @PHP/date/bug33562.php: SUCCEEDED
    @PHP/date/bug33563.php: SUCCEEDED
    @PHP/date/bug33578.php: SUCCEEDED
    @PHP/date/bug33869.php: SUCCEEDED
    @PHP/date/bug34676.php: SUCCEEDED
    @PHP/date/bug34771.php: SUCCEEDED
    @PHP/date/bug35143.php: SUCCEEDED
    @PHP/date/bug35414.php: SUCCEEDED
    @PHP/date/bug35422.php: SUCCEEDED
    @PHP/date/bug35425.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    integer(42)
    integer(1)
    integer(1)
    integer(1)
    integer(1)
    integer(0)
    integer(0)
    integer(1)
    integer(1)
    integer(31)
    integer(1104537661)
    integer(6)
    integer(53)
    integer(5)
    integer(2005)
    integer(0)
    integer(3600)
    integer(292)
    integer(1)
    integer(1)
    integer(1)
    integer(1)
    integer(0)
    integer(0)
    integer(1)
    integer(1)
    integer(31)
    integer(1104559261)
    integer(6)
    integer(53)
    integer(5)
    integer(2005)
    integer(0)
    integer(-18000)
    @PHP/date/bug35456.php: SUCCEEDED
    @PHP/date/bug35624.php: SUCCEEDED
    @PHP/date/bug35630.php: SUCCEEDED
    @PHP/date/bug35699.php: SUCCEEDED
    @PHP/date/bug35705.php: SUCCEEDED
    @PHP/date/bug35885.php: SUCCEEDED
    @PHP/date/bug35887.php: SUCCEEDED
    @PHP/date/date.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    c: 2003-01-23T13:20:59+01:00
    r: Thu, 23 Jan 2003 13:20:59 +0100
    c: 2003-01-23T13:20:59+01:00
    r: Thu, 23 Jan 2003 13:20:59 +0100
    c: 2003-01-23T12:20:59+00:00
    r: Thu, 23 Jan 2003 12:20:59 +0000
    c: 2003-01-23T13:20:59+01:00
    r: Thu, 23 Jan 2003 13:20:59 +0100
    @PHP/date/date_create-1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\date\__input.txt on line 28
    SKIP
    @PHP/date/date_create-2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\date\__input.txt on line 6
    SKIP
    @PHP/date/date_default_timezone_get-3.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Europe/Prague
    America/Chicago
    Europe/Rome
    America/Chicago
    @PHP/date/date_modify-1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\date\__input.txt on line 6
    SKIP
    @PHP/date/date_modify-2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\date\__input.txt on line 6
    SKIP
    @PHP/date/default-timezone-1.php: SUCCEEDED
    @PHP/date/default-timezone-2.php: SUCCEEDED
    @PHP/date/format-negative-timestamp.php: SUCCEEDED
    @PHP/date/strtotime.php: SUCCEEDED
    @PHP/date/timezone-configuration.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    1119125744
    1119125744
    1119125744
    1119125744
    1119129344
    1119125744
    @PHP/doc_examples/test001.php: SUCCEEDED
    @PHP/doc_examples/test002.php: SUCCEEDED
    @PHP/doc_examples/test003.php: SUCCEEDED
    @PHP/doc_examples/test004.php: SUCCEEDED
    @PHP/doc_examples/test005.php: SUCCEEDED
    @PHP/doc_examples/test006.php: SUCCEEDED
    @PHP/doc_examples/test007.php: SUCCEEDED
    @PHP/doc_examples/test008.php: SUCCEEDED
    @PHP/doc_examples/test009.php: SUCCEEDED
    @PHP/doc_examples/test010.php: SUCCEEDED
    @PHP/doc_examples/test011.php: SUCCEEDED
    @PHP/doc_examples/test013.php: SUCCEEDED
    @PHP/doc_examples/test014.php: SUCCEEDED
    @PHP/doc_examples/test015.php: SUCCEEDED
    @PHP/doc_examples/test016.php: SUCCEEDED
    @PHP/doc_examples/test017.php: SUCCEEDED
    @PHP/doc_examples/test018.php: SUCCEEDED
    @PHP/doc_examples/test019.php: SUCCEEDED
    @PHP/doc_examples/test020.php: SUCCEEDED
    @PHP/doc_examples/test021.php: SUCCEEDED
    @PHP/doc_examples/test022.php: SUCCEEDED
    @PHP/doc_examples/test023.php: SUCCEEDED
    @PHP/doc_examples/test024.php: SUCCEEDED
    @PHP/doc_examples/test025.php: SUCCEEDED
    @PHP/doc_examples/test026.php: SUCCEEDED
    @PHP/doc_examples/test027.php: SUCCEEDED
    @PHP/doc_examples/test028.php: SUCCEEDED
    @PHP/doc_examples/test029.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ´┐Żauky
    �auky
    @PHP/doc_examples/test030.php: SUCCEEDED
    @PHP/doc_examples/test031.php: SUCCEEDED
    @PHP/doc_examples/test032.php: SUCCEEDED
    @PHP/doc_examples/test033.php: SUCCEEDED
    @PHP/doc_examples/test034.php: SUCCEEDED
    @PHP/doc_examples/test035.php: SUCCEEDED
    @PHP/doc_examples/test036.php: SUCCEEDED
    @PHP/doc_examples/test037.php: SUCCEEDED
    @PHP/doc_examples/test038.php: SUCCEEDED
    @PHP/doc_examples/test039.php: SUCCEEDED
    @PHP/doc_examples/test040.php: SUCCEEDED
    @PHP/doc_examples/test041.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    call_user_func():
    hello world!
    Strict Standards: call_user_func(): Non-static method MyClass::myCallbackMethod() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\doc_examples\__input.txt at expression on line 17, column 1.
    Hello World!Hello World!
    @PHP/doc_examples/test042.php: SUCCEEDED
    @PHP/doc_examples/test043.php: SUCCEEDED
    @PHP/doc_examples/test044.php: SUCCEEDED
    @PHP/doc_examples/test045.php: SUCCEEDED
    @PHP/doc_examples/test046.php: SUCCEEDED
    @PHP/doc_examples/test047.php: SUCCEEDED
    @PHP/doc_examples/test048.php: SUCCEEDED
    @PHP/doc_examples/test049.php: SUCCEEDED
    @PHP/doc_examples/test050.php: SUCCEEDED
    @PHP/doc_examples/test051.php: SUCCEEDED
    @PHP/doc_examples/test052.php: SUCCEEDED
    @PHP/doc_examples/test053.php: SUCCEEDED
    @PHP/doc_examples/test054.php: SUCCEEDED
    @PHP/doc_examples/test055.php: SUCCEEDED
    @PHP/doc_examples/test056.php: SUCCEEDED
    @PHP/doc_examples/test057.php: SUCCEEDED
    @PHP/doc_examples/test058.php: SUCCEEDED
    @PHP/doc_examples/test059.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    Deprecated: Assigning the return value of new by reference is deprecated in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\doc_examples\__input.txt on line 4
    NULL
    object(stdClass)#1 (0) {
    }
    NULL
    object(stdClass)(0) {
    }
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\doc_examples\__input.txt(4,5): warning PHP0181: Assigning the return value of new by reference is deprecated
    
    @PHP/doc_examples/test060.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    Deprecated: Assigning the return value of new by reference is deprecated in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\doc_examples\__input.txt on line 9
    Static object: NULL
    Static object: NULL
    
    Static object: NULL
    Static object: object(stdClass)#3 (1) {
      ["property"]=>
      int(1)
    }
    Static object: NULL
    Static object: NULL
    
    Static object: NULL
    Static object: object(stdClass)(1) {
      ["property"]=>
      int(1)
    }
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\doc_examples\__input.txt(9,9): warning PHP0181: Assigning the return value of new by reference is deprecated
    
    @PHP/doc_examples/test061.php: SUCCEEDED
    @PHP/doc_examples/test062.php: SUCCEEDED
    @PHP/doc_examples/test063.php: SUCCEEDED
    @PHP/doc_examples/test064.php: SUCCEEDED
    @PHP/doc_examples/test065.php: SUCCEEDED
    @PHP/doc_examples/test066.php: SUCCEEDED
    @PHP/doc_examples/test067.php: SUCCEEDED
    @PHP/doc_examples/test068.php: SUCCEEDED
    @PHP/doc_examples/test069.php: SUCCEEDED
    @PHP/doc_examples/test070.php: SUCCEEDED
    @PHP/doc_examples/test071.php: SUCCEEDED
    @PHP/doc_examples/test072.php: SUCCEEDED
    @PHP/doc_examples/test073.php: SUCCEEDED
    @PHP/doc_examples/test074.php: SUCCEEDED
    @PHP/doc_examples/test075.php: SUCCEEDED
    @PHP/doc_examples/test076.php: SUCCEEDED
    @PHP/doc_examples/test077.php: SUCCEEDED
    @PHP/doc_examples/test078.php: SUCCEEDED
    @PHP/doc_examples/test079.php: SUCCEEDED
    @PHP/doc_examples/test080.php: SUCCEEDED
    @PHP/doc_examples/test081.php: SUCCEEDED
    @PHP/doc_examples/test082.php: SUCCEEDED
    @PHP/doc_examples/test083.php: SUCCEEDED
    @PHP/doc_examples/test084.php: SUCCEEDED
    @PHP/doc_examples/test085.php: SUCCEEDED
    @PHP/doc_examples/test086.php: SUCCEEDED
    @PHP/doc_examples/test087.php: SUCCEEDED
    @PHP/doc_examples/test088.php: SUCCEEDED
    @PHP/doc_examples/test089.php: SUCCEEDED
    @PHP/doc_examples/test090.php: SUCCEEDED
    @PHP/doc_examples/test091.php: SUCCEEDED
    @PHP/doc_examples/test092.php: SUCCEEDED
    @PHP/doc_examples/test093.php: SUCCEEDED
    @PHP/doc_examples/test094.php: SUCCEEDED
    @PHP/doc_examples/test095.php: SUCCEEDED
    @PHP/doc_examples/test096.php: SUCCEEDED
    @PHP/doc_examples/test097.php: SUCCEEDED
    @PHP/doc_examples/test098.php: SUCCEEDED
    @PHP/doc_examples/test099.php: SUCCEEDED
    @PHP/doc_examples/test100.php: SUCCEEDED
    @PHP/doc_examples/test102.php: SUCCEEDED
    @PHP/doc_examples/test103.php: SUCCEEDED
    @PHP/doc_examples/test104.php: SUCCEEDED
    @PHP/doc_examples/test105.php: SUCCEEDED
    @PHP/doc_examples/test107.php: SUCCEEDED
    @PHP/doc_examples/test108.php: SUCCEEDED
    @PHP/doc_examples/test109.php: SUCCEEDED
    @PHP/doc_examples/test110.php: SUCCEEDED
    @PHP/doc_examples/test111.php: SUCCEEDED
    @PHP/doc_examples/test112.php: SUCCEEDED
    @PHP/doc_examples/test113.php: SUCCEEDED
    @PHP/doc_examples/test114.php: SUCCEEDED
    @PHP/doc_examples/test115.php: SUCCEEDED
    @PHP/doc_examples/test116.php: SUCCEEDED
    @PHP/doc_examples/test117.php: SUCCEEDED
    @PHP/doc_examples/test118.php: SUCCEEDED
    @PHP/doc_examples/test119.php: SUCCEEDED
    @PHP/doc_examples/test120.php: SUCCEEDED
    @PHP/doc_examples/test121.php: SUCCEEDED
    @PHP/doc_examples/test122.php: SUCCEEDED
    @PHP/doc_examples/test123.php: SUCCEEDED
    @PHP/doc_examples/test124.php: SUCCEEDED
    @PHP/doc_examples/test125.php: SUCCEEDED
    @PHP/doc_examples/test126.php: SUCCEEDED
    @PHP/doc_examples/test127.php: SUCCEEDED
    @PHP/doc_examples/test128.php: SUCCEEDED
    @PHP/doc_examples/test129.php: SUCCEEDED
    @PHP/doc_examples/test130.php: SUCCEEDED
    @PHP/doc_examples/test131.php: SUCCEEDED
    @PHP/doc_examples/test132.php: SUCCEEDED
    @PHP/doc_examples/test133.php: SUCCEEDED
    @PHP/doc_examples/test134.php: SUCCEEDED
    @PHP/doc_examples/test136.php: SUCCEEDED
    @PHP/doc_examples/test137.php: SUCCEEDED
    @PHP/doc_examples/test138.php: SUCCEEDED
    @PHP/doc_examples/test139.php: SUCCEEDED
    @PHP/doc_examples/test148.php: SUCCEEDED
    @PHP/doc_examples/test149.php: SUCCEEDED
    @PHP/doc_examples/test150.php: SUCCEEDED
    @PHP/doc_examples/test151.php: SUCCEEDED
    @PHP/doc_examples/test152.php: SUCCEEDED
    @PHP/doc_examples/test153.php: SUCCEEDED
    @PHP/doc_examples/test154.php: SUCCEEDED
    @PHP/doc_examples/test155.php: SUCCEEDED
    @PHP/doc_examples/test156.php: SUCCEEDED
    @PHP/doc_examples/test158.php: SUCCEEDED
    @PHP/lang/001.php: SUCCEEDED
    @PHP/lang/002.php: SUCCEEDED
    @PHP/lang/003.php: SUCCEEDED
    @PHP/lang/004.php: SUCCEEDED
    @PHP/lang/005.php: SUCCEEDED
    @PHP/lang/006.php: SUCCEEDED
    @PHP/lang/007.php: SUCCEEDED
    @PHP/lang/008.php: SUCCEEDED
    @PHP/lang/009.php: SUCCEEDED
    @PHP/lang/010.php: SUCCEEDED
    @PHP/lang/011.php: SUCCEEDED
    @PHP/lang/012.php: SUCCEEDED
    @PHP/lang/013.php: SUCCEEDED
    @PHP/lang/014.php: SUCCEEDED
    @PHP/lang/015.php: SUCCEEDED
    @PHP/lang/016.php: SUCCEEDED
    @PHP/lang/017.php: SUCCEEDED
    @PHP/lang/018.php: SUCCEEDED
    @PHP/lang/019.php: SUCCEEDED
    @PHP/lang/020.php: SUCCEEDED
    @PHP/lang/021.php: SUCCEEDED
    @PHP/lang/022.php: SUCCEEDED
    @PHP/lang/023.php: SUCCEEDED
    @PHP/lang/024.php: SUCCEEDED
    @PHP/lang/025.php: SUCCEEDED
    @PHP/lang/026.php: SUCCEEDED
    @PHP/lang/027.php: SUCCEEDED
    @PHP/lang/028.php: SUCCEEDED
    @PHP/lang/030.php: SUCCEEDED
    @PHP/lang/032.php: SUCCEEDED
    @PHP/lang/036.php: SUCCEEDED
    @PHP/lang/037.php: SUCCEEDED
    @PHP/lang/038.php: SUCCEEDED
    @PHP/lang/039.php: SUCCEEDED
    @PHP/lang/040.php: SUCCEEDED
    @PHP/lang/bison1.php: SUCCEEDED
    @PHP/lang/bug17115.php: SUCCEEDED
    @PHP/lang/bug18872.php: SUCCEEDED
    @PHP/lang/bug19943.php: SUCCEEDED
    @PHP/lang/bug20175.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    Deprecated: Assigning the return value of new by reference is deprecated in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\lang\__input.txt on line 110
    foo_static()
    foo_global()
    foo:1
    foo_static()
    foo:1
    bar_static()
    bar_global()
    bar:1
    bar_static()
    bar:1
    wow_static()
    wow_global()
    wow:1
    wow_static()
    wow:1
    oop_test()
    oop_static()
    oop_class()
    oop:1
    oop_static()
    oop:1
    oop_test()
    oop_static()
    oop:1
    foo_static()
    foo_global()
    foo:1
    foo_static()
    foo:1
    bar_static()
    bar_global()
    bar:1
    bar_static()
    bar_global()
    bar:2
    wow_static()
    wow_global()
    wow:1
    wow_static()
    wow:1
    oop_test()
    oop_static()
    oop_class()
    oop:1
    oop_static()
    oop:1
    oop_test()
    oop_static()
    oop:1
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\lang\__input.txt(110,4): warning PHP0181: Assigning the return value of new by reference is deprecated
    
    @PHP/lang/bug21094.php: SUCCEEDED
    @PHP/lang/bug21600.php: SUCCEEDED
    @PHP/lang/bug21669.php: SUCCEEDED
    @PHP/lang/bug21849.php: SUCCEEDED
    @PHP/lang/bug21961.php: SUCCEEDED
    @PHP/lang/bug22231.php: SUCCEEDED
    @PHP/lang/bug22367.php: SUCCEEDED
    @PHP/lang/bug22510.php: SUCCEEDED
    @PHP/lang/bug22592.php: SUCCEEDED
    @PHP/lang/bug22690.php: SUCCEEDED
    @PHP/lang/bug23279.php: SUCCEEDED
    @PHP/lang/bug23384.php: SUCCEEDED
    @PHP/lang/bug23489.php: SUCCEEDED
    @PHP/lang/bug23524.php: SUCCEEDED
    @PHP/lang/bug23922.php: SUCCEEDED
    @PHP/lang/bug24054.php: SUCCEEDED
    @PHP/lang/bug24396.php: SUCCEEDED
    @PHP/lang/bug24403.php: SUCCEEDED
    @PHP/lang/bug24436.php: SUCCEEDED
    @PHP/lang/bug24499.php: SUCCEEDED
    @PHP/lang/bug24640.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    double(1700000000000000089258092433847514422797596587883870563356951996370064178581143932836831337636761368874297554515902592900802289500112731978596146714137401870842258241575178866354311397451139753100927220499450359906637902366244989496126909662726242240784739940994096632824796638102733857671280980918272.0000000000)
    1.7E+300
    
    ------
    double(0.0000000000)
    1.7E-300
    
    ------
    double(17000000000000001584208052028780237480128823455860622330108867175329927830437888.0000000000)
    1.7E+79
    
    ------
    double(0.0000000000)
    1.7E-79
    
    ------
    double(169999999999999996096025832433329868941658043870400163508258284150340918121070592.0000000000)
    1.7E+80
    
    ------
    double(0.0000000000)
    1.7E-80
    
    ------
    double(1700000000000000013616404158611892038375594280539217794530130541777964808366194688.0000000000)
    1.7E+81
    
    ------
    double(0.0000000000)
    1.7E-81
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    1.6999810742106E-319
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    1.7000798873397E-320
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    1.6995858216939E-321
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    0
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    0
    
    ------
    double(1700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+300
    
    ------
    double(0.0000000000)
    1.70000000000003E-300
    
    ------
    double(17000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+79
    
    ------
    double(0.0000000000)
    1.70000000000001E-79
    
    ------
    double(170000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+80
    
    ------
    double(0.0000000000)
    1.70000000000001E-80
    
    ------
    double(1700000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+81
    
    ------
    double(0.0000000000)
    1.70000000000001E-81
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    1.69998107421056E-319
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    1.70007988733973E-320
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    1.69464516523548E-321
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    0
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    0
    
    ------
    @PHP/lang/bug24652.php: SUCCEEDED
    @PHP/lang/bug24658.php: SUCCEEDED
    @PHP/lang/bug24783.php: SUCCEEDED
    @PHP/lang/bug24926.php: SUCCEEDED
    @PHP/lang/bug25547.php: SUCCEEDED
    @PHP/lang/bug25652.php: SUCCEEDED
    @PHP/lang/bug25922.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Undefined index here: 'error'
    Undefined index here: ''
    @PHP/lang/bug26182.php: SUCCEEDED
    @PHP/lang/bug26696.php: SUCCEEDED
    @PHP/lang/bug26866.php: SUCCEEDED
    @PHP/lang/bug26869.php: SUCCEEDED
    @PHP/lang/bug27354.php: SUCCEEDED
    @PHP/lang/bug27439.php: SUCCEEDED
    @PHP/lang/bug27535.php: SUCCEEDED
    @PHP/lang/bug28213.php: SUCCEEDED
    @PHP/lang/bug28800.php: SUCCEEDED
    @PHP/lang/bug29566.php: SUCCEEDED
    @PHP/lang/bug29893.php: SUCCEEDED
    @PHP/lang/bug29944.php: SUCCEEDED
    @PHP/lang/bug30638.php: SUCCEEDED
    @PHP/lang/bug30726.php: SUCCEEDED
    @PHP/lang/bug30862.php: SUCCEEDED
    @PHP/lang/bug32924.php: SUCCEEDED
    @PHP/lang/bug35382.php: SUCCEEDED
    @PHP/lang/bug7515.php: SUCCEEDED
    @PHP/lang/each_binary_safety.php: SUCCEEDED
    @PHP/lang/error_2_exception_001.php: SUCCEEDED
    @PHP/lang/foreach_with_object_001.php: SUCCEEDED
    @PHP/lang/foreach_with_references_001.php: SUCCEEDED
    @PHP/lang/type_hints_001.php: SUCCEEDED
    @PHP/standard/array/001.php: SUCCEEDED
    @PHP/standard/array/003.php: SUCCEEDED
    @PHP/standard/array/004.php: SUCCEEDED
    @PHP/standard/array/005.php: SUCCEEDED
    @PHP/standard/array/008.php: SUCCEEDED
    @PHP/standard/array/array_change_key_case.php: SUCCEEDED
    @PHP/standard/array/array_chunk.php: SUCCEEDED
    @PHP/standard/array/array_count_values.php: SUCCEEDED
    @PHP/standard/array/array_diff_1.php: SUCCEEDED
    @PHP/standard/array/array_diff_key.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ------ Test 1 --------
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 2 --------
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 3 --------
    array(6) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [2]=>
      int(4)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [2]=>
      int(4)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 4 --------
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 5 --------
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 6 --------
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 7 --------
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    ------ Test 8 --------
    array(6) {
      [0]=>
      int(0)
      [7]=>
      int(14)
      [2]=>
      int(4)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [0]=>
      int(0)
      [7]=>
      int(14)
      [2]=>
      int(4)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 9 --------
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    ------ Test 1 --------
    array(4) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(4) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 2 --------
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 3 --------
    array(6) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [2]=>
      &int(4)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [2]=>
      &int(4)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 4 --------
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 5 --------
    array(4) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(4) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 6 --------
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 7 --------
    array(3) {
      [7]=>
      &int(14)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
    }
    array(3) {
      [7]=>
      &int(14)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
    }
    ------ Test 8 --------
    array(6) {
      [0]=>
      &int(0)
      [7]=>
      &int(14)
      [2]=>
      &int(4)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [0]=>
      &int(0)
      [7]=>
      &int(14)
      [2]=>
      &int(4)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 9 --------
    array(3) {
      [7]=>
      &int(14)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
    }
    array(3) {
      [7]=>
      &int(14)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
    }
    @PHP/standard/array/array_intersect_key.php: SUCCEEDED
    @PHP/standard/array/array_sum.php: SUCCEEDED
    @PHP/standard/array/array_walk_recursive.php: SUCCEEDED
    @PHP/standard/array/bug12776.php: SUCCEEDED
    @PHP/standard/array/bug14580.php: SUCCEEDED
    @PHP/standard/array/bug20381.php: SUCCEEDED
    @PHP/standard/array/bug20865.php: SUCCEEDED
    @PHP/standard/array/bug21182.php: SUCCEEDED
    @PHP/standard/array/bug21918.php: SUCCEEDED
    @PHP/standard/array/bug21998.php: SUCCEEDED
    @PHP/standard/array/bug22088.php: SUCCEEDED
    @PHP/standard/array/bug22463.php: SUCCEEDED
    @PHP/standard/array/bug23581.php: SUCCEEDED
    @PHP/standard/array/bug23788.php: SUCCEEDED
    @PHP/standard/array/bug24198.php: SUCCEEDED
    @PHP/standard/array/bug24220.php: SUCCEEDED
    @PHP/standard/array/bug24766.php: SUCCEEDED
    @PHP/standard/array/bug24897.php: SUCCEEDED
    @PHP/standard/array/bug24980.php: SUCCEEDED
    @PHP/standard/array/bug25359.php: SUCCEEDED
    @PHP/standard/array/bug25708.php: SUCCEEDED
    @PHP/standard/array/bug25758.php: SUCCEEDED
    @PHP/standard/array/bug26458.php: SUCCEEDED
    @PHP/standard/array/bug28974.php: SUCCEEDED
    @PHP/standard/array/bug29493.php: SUCCEEDED
    @PHP/standard/array/bug30266.php: SUCCEEDED
    @PHP/standard/array/bug30833.php: SUCCEEDED
    @PHP/standard/array/bug31158.php: SUCCEEDED
    @PHP/standard/array/bug31213.php: SUCCEEDED
    @PHP/standard/array/bug32021.php: SUCCEEDED
    @PHP/standard/array/bug33382.php: SUCCEEDED
    @PHP/standard/array/bug33989.php: SUCCEEDED
    @PHP/standard/array/bug34227.php: SUCCEEDED
    @PHP/standard/array/bug34982.php: SUCCEEDED
    @PHP/standard/array/bug35014.php: SUCCEEDED
    @PHP/standard/array/bug35022.php: SUCCEEDED
    @PHP/standard/array/bug35821.php: SUCCEEDED
    @PHP/standard/array/count_recursive.php: SUCCEEDED
    @PHP/standard/array/locale_sort.php: SUCCEEDED
    @PHP/standard/array/range.php: SUCCEEDED
    @PHP/standard/assert/assert.php: SUCCEEDED
    @PHP/standard/general_functions/001.php: SUCCEEDED
    @PHP/standard/general_functions/002.php: SUCCEEDED
    @PHP/standard/general_functions/003.php: SUCCEEDED
    @PHP/standard/general_functions/004.php: SUCCEEDED
    @PHP/standard/general_functions/005.php: SUCCEEDED
    @PHP/standard/general_functions/006.php: SUCCEEDED
    @PHP/standard/general_functions/007.php: SUCCEEDED
    @PHP/standard/general_functions/009.php: SUCCEEDED
    @PHP/standard/general_functions/bug25038.php: SUCCEEDED
    @PHP/standard/general_functions/bug27678.php: SUCCEEDED
    @PHP/standard/general_functions/bug29038.php: SUCCEEDED
    @PHP/standard/general_functions/bug31190.php: SUCCEEDED
    @PHP/standard/general_functions/bug32647.php: SUCCEEDED
    @PHP/standard/general_functions/bug35229.php: SUCCEEDED
    @PHP/standard/general_functions/is_resource.php: SUCCEEDED
    @PHP/standard/math/abs.php: SUCCEEDED
    @PHP/standard/math/bug24142.php: SUCCEEDED
    @PHP/standard/math/bug25694.php: SUCCEEDED
    @PHP/standard/math/bug27646.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    double(INF-INF)
    'd:-INF;'
    double(INF-INF)
    double(INF-INF)
    'd:INF;'
    double(INF-INF)
    double(NaNInfini)
    'd:NAN;'
    double(NaNInfini)
    double(-Infinity)
    'd:-INF;'
    double(-Infinity)
    double(Infinity)
    'd:INF;'
    double(Infinity)
    double(NaN)
    'd:NAN;'
    double(NaN)
    @PHP/standard/math/bug30069.php: SUCCEEDED
    @PHP/standard/math/bug30695.php: SUCCEEDED
    @PHP/standard/math/floorceil.php: SUCCEEDED
    @PHP/standard/math/hexdec.php: SUCCEEDED
    @PHP/standard/math/log.php: SUCCEEDED
    @PHP/standard/math/pow.php: SUCCEEDED
    @PHP/standard/math/round.php: SUCCEEDED
    @PHP/standard/reg/001.php: SUCCEEDED
    @PHP/standard/reg/002.php: SUCCEEDED
    @PHP/standard/reg/003.php: SUCCEEDED
    @PHP/standard/reg/004.php: SUCCEEDED
    @PHP/standard/reg/005.php: SUCCEEDED
    @PHP/standard/reg/006.php: SUCCEEDED
    @PHP/standard/reg/007.php: SUCCEEDED
    @PHP/standard/reg/008.php: SUCCEEDED
    @PHP/standard/reg/009.php: SUCCEEDED
    @PHP/standard/reg/010.php: SUCCEEDED
    @PHP/standard/reg/011.php: SUCCEEDED
    @PHP/standard/reg/012.php: SUCCEEDED
    @PHP/standard/reg/013.php: SUCCEEDED
    @PHP/standard/reg/014.php: SUCCEEDED
    @PHP/standard/reg/015.php: SUCCEEDED
    @PHP/standard/reg/016.php: SUCCEEDED
    @PHP/standard/serialize/001.php: SUCCEEDED
    @PHP/standard/serialize/002.php: SUCCEEDED
    @PHP/standard/serialize/003.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    d:100;
    double(100.0000000000)
    
    d:51999999999999996980101120;
    double(51999999999999996980101120.0000000000)
    
    d:8.9999999999999995265585574287341141808127531476202420890331268310546875E-9;
    double(0.0000000090)
    d:100;
    double(100.0000000000)
    
    d:5.2000000000000006E+25;
    double(52000000000000000000000000.0000000000)
    
    d:9.0000000000000045E-09;
    double(0.0000000090)
    @PHP/standard/serialize/004.php: SUCCEEDED
    @PHP/standard/serialize/005.php: SUCCEEDED
    @PHP/standard/serialize/006.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    'O:3:"´┐Ż":1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    object
    {
      '´┐Ż' => '´┐Ż'
    }
    'a:1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    array
    {
      '´┐Ż' => '´┐Ż'
    }
    'O:3:"´┐Ż":1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    object
    {
      'ďż˝' => '´┐Ż'
    }
    'a:1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    array
    {
      'ďż˝' => '´┐Ż'
    }
    @PHP/standard/serialize/bug14293.php: SUCCEEDED
    @PHP/standard/serialize/bug21957.php: SUCCEEDED
    @PHP/standard/serialize/bug23298.php: SUCCEEDED
    @PHP/standard/serialize/bug24063.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0.1 0.1
    0.01 0.01
    0.001 0.001
    0.0001 0.0001
    1.0E-5 1.0E-5
    1.0E-6 1.0E-6
    1.0E-7 1.0E-7
    1.0E-8 1.0E-8
    1.0E-9 1.0E-9
    0.1 0.1
    0.01 0.01
    0.001 0.001
    0.0001 0.0001
    1E-05 1E-05
    1E-06 1E-06
    1E-07 1E-07
    1E-08 1E-08
    1E-09 1E-09
    @PHP/standard/serialize/bug25378.php: SUCCEEDED
    @PHP/standard/serialize/bug26762.php: SUCCEEDED
    @PHP/standard/serialize/bug27469.php: SUCCEEDED
    @PHP/standard/serialize/bug28325.php: SUCCEEDED
    @PHP/standard/serialize/bug30234.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    FALSE
    FALSE
    __autoload(Autoload_Implements)
    object [invalid]
    FALSE
    FALSE
    FALSE
    FALSE
    TRUE
    __autoload(Autoload_Implements)
    object [invalid]
    FALSE
    FALSE
    TRUE
    @PHP/standard/serialize/bug31402.php: SUCCEEDED
    @PHP/standard/serialize/bug31442.php: SUCCEEDED
    @PHP/standard/strings/add-and-stripcslashes.php: SUCCEEDED
    @PHP/standard/strings/add-and-stripslashes.php: SUCCEEDED
    @PHP/standard/strings/basename.php: SUCCEEDED
    @PHP/standard/strings/bin2hex.php: SUCCEEDED
    @PHP/standard/strings/bug20108.php: SUCCEEDED
    @PHP/standard/strings/bug20169.php: SUCCEEDED
    @PHP/standard/strings/bug20261.php: SUCCEEDED
    @PHP/standard/strings/bug20927.php: SUCCEEDED
    @PHP/standard/strings/bug21338.php: SUCCEEDED
    @PHP/standard/strings/bug21453.php: SUCCEEDED
    @PHP/standard/strings/bug21730.php: SUCCEEDED
    @PHP/standard/strings/bug21744.php: SUCCEEDED
    @PHP/standard/strings/bug22008.php: SUCCEEDED
    @PHP/standard/strings/bug22187.php: SUCCEEDED
    @PHP/standard/strings/bug22224.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      0 => 
      object
      {
      }
      1 => 
      object
      {
      }
    }
    @PHP/standard/strings/bug22227.php: SUCCEEDED
    @PHP/standard/strings/bug22904.php: SUCCEEDED
    @PHP/standard/strings/bug23650.php: SUCCEEDED
    @PHP/standard/strings/bug23894.php: SUCCEEDED
    @PHP/standard/strings/bug24098.php: SUCCEEDED
    @PHP/standard/strings/bug24208.php: SUCCEEDED
    @PHP/standard/strings/bug24281.php: SUCCEEDED
    @PHP/standard/strings/bug25671.php: SUCCEEDED
    @PHP/standard/strings/bug25707.php: SUCCEEDED
    @PHP/standard/strings/bug26878.php: SUCCEEDED
    @PHP/standard/strings/bug26973.php: SUCCEEDED
    @PHP/standard/strings/bug27276.php: SUCCEEDED
    @PHP/standard/strings/bug27278.php: SUCCEEDED
    @PHP/standard/strings/bug27295.php: SUCCEEDED
    @PHP/standard/strings/bug27457.php: SUCCEEDED
    @PHP/standard/strings/bug27675.php: SUCCEEDED
    @PHP/standard/strings/bug28386.php: SUCCEEDED
    @PHP/standard/strings/bug33076.php: SUCCEEDED
    @PHP/standard/strings/chr_ord.php: SUCCEEDED
    @PHP/standard/strings/chunk_split.php: SUCCEEDED
    @PHP/standard/strings/count_chars.php: SUCCEEDED
    @PHP/standard/strings/crc32.php: SUCCEEDED
    @PHP/standard/strings/explode.php: SUCCEEDED
    @PHP/standard/strings/implode.php: SUCCEEDED
    @PHP/standard/strings/md5.php: SUCCEEDED
    @PHP/standard/strings/md5raw.php: SUCCEEDED
    @PHP/standard/strings/nl2br.php: SUCCEEDED
    @PHP/standard/strings/sha1.php: SUCCEEDED
    @PHP/standard/strings/sha1raw.php: SUCCEEDED
    @PHP/standard/strings/sprintf_f.php: SUCCEEDED
    @PHP/standard/strings/strcspn.php: SUCCEEDED
    @PHP/standard/strings/strings001.php: SUCCEEDED
    @PHP/standard/strings/strpos.php: SUCCEEDED
    @PHP/standard/strings/strrev.php: SUCCEEDED
    @PHP/standard/strings/strripos.php: SUCCEEDED
    @PHP/standard/strings/strrpos.php: SUCCEEDED
    @PHP/standard/strings/strspn.php: SUCCEEDED
    @PHP/standard/strings/strstr.php: SUCCEEDED
    @PHP/standard/strings/strtoupper.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    cfbfbdcfbfbdcfbfbd
    cfafbdcfafbdcfafbd
    @PHP/standard/strings/strtr.php: SUCCEEDED
    @PHP/standard/strings/strval.php: SUCCEEDED
    @PHP/standard/strings/str_repeat.php: SUCCEEDED
    @PHP/standard/strings/str_shuffle.php: SUCCEEDED
    @PHP/standard/strings/str_word_count.php: SUCCEEDED
    @PHP/standard/strings/substr_count.php: SUCCEEDED
    @PHP/standard/strings/substr_replace.php: SUCCEEDED
    @PHP/standard/strings/wordwrap.php: SUCCEEDED
    @PHP/standard/time/001.php: SUCCEEDED
    @PHP/standard/time/idate.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    U: 1043324459
    Y: 2003
    z: 22
    y: 3
    m: 1
    n: 1
    d: 23
    j: 23
    H: 13
    G: 13
    h: 1
    g: 1
    i: 20
    s: 59
    t: 31
    w: 4
    L: 0
    B: 556
    I: 0
    W: 4
    U: 1043324459
    Y: 2003
    z: 22
    y: 3
    m: 1
    n: 1
    d: 23
    j: 23
    H: 12
    G: 12
    h: 12
    g: 12
    i: 20
    s: 59
    t: 31
    w: 4
    L: 0
    B: 556
    I: 0
    W: 4
    @PHP/strings/001.php: SUCCEEDED
    @PHP/strings/002.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    fprintf test 1:abcde
    20
    printf test 1:simple string
    printf test 2:42
    printf test 3:3.333333
    printf test 4:3.3333333333
    printf test 5:2.50      
    printf test 6:2.50000000
    printf test 7:0000002.50
    printf test 8:<                 foo>
    printf test 9:<bar                 >
    printf test 10: 123456789012345
    printf test 10:<h´┐Żyesterettsjustitiarius>
    printf test 11: 123456789012345678901234567890
    printf test 11:<    h´┐Żyesterettsjustitiarius>
    printf test 12:-12.34
    printf test 13:  -12
    printf test 14:@
    printf test 15:10101010
    printf test 16:aa
    printf test 17:AA
    printf test 18:        10101010
    printf test 19:              aa
    printf test 20:              AA
    printf test 21:0000000010101010
    printf test 22:00000000000000aa
    printf test 23:00000000000000AA
    printf test 24:abcde
    printf test 25:gazonk
    printf test 26:2 1
    printf test 27:3 1 2
    printf test 28:02  1
    printf test 29:2   1
    printf test 30:x
    vprintf test 1:2   1
    fprintf test 1:abcde
    20
    printf test 1:simple string
    printf test 2:42
    printf test 3:3.333333
    printf test 4:3.3333333333
    printf test 5:2.50      
    printf test 6:2.50000000
    printf test 7:0000002.50
    printf test 8:<                 foo>
    printf test 9:<bar                 >
    printf test 10: 123456789012345
    printf test 10:<h�yesterettsjustitiarius>
    printf test 11: 123456789012345678901234567890
    printf test 11:<    h�yesterettsjustitiarius>
    printf test 12:-12.34
    printf test 13:  -12
    printf test 14:@
    printf test 15:10101010
    printf test 16:aa
    printf test 17:AA
    printf test 18:        10101010
    printf test 19:              aa
    printf test 20:              AA
    printf test 21:0000000010101010
    printf test 22:00000000000000aa
    printf test 23:00000000000000AA
    printf test 24:abcde
    printf test 25:gazonk
    printf test 26:2 1
    printf test 27:3 1 2
    printf test 28:02  1
    printf test 29:2   1
    printf test 30:x
    vprintf test 1:2   1
    @PHP/strings/bug22592.php: SUCCEEDED
    Arrays/array1.php: SUCCEEDED
    Arrays/array_diff_intersect.php: SUCCEEDED
    Arrays/array_diff_intersect2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Strict Standards: array_udiff() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 35
    Array
    (
        [0.5] => cr Object
            (
                [priv_member:cr:private] => 12
            )
    
        [0] => cr Object
            (
                [priv_member:cr:private] => 23
            )
    
    )
    
    Strict Standards: array_udiff_assoc() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 36
    Array
    (
        [0.1] => cr Object
            (
                [priv_member:cr:private] => 9
            )
    
        [0.5] => cr Object
            (
                [priv_member:cr:private] => 12
            )
    
        [0] => cr Object
            (
                [priv_member:cr:private] => 23
            )
    
    )
    
    Strict Standards: array_udiff_uassoc() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 37
    
    Strict Standards: array_udiff_uassoc() expects parameter 4 to be a valid callback, non-static method cr::comp_func_key() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 37
    Array
    (
        [0.1] => cr Object
            (
                [priv_member:cr:private] => 9
            )
    
        [0.5] => cr Object
            (
                [priv_member:cr:private] => 12
            )
    
        [0] => cr Object
            (
                [priv_member:cr:private] => 23
            )
    
    )
    Array
    (
        [b] => brown
        [c] => blue
        [0] => red
    )
    ------------------------------------
    
    Strict Standards: array_uintersect() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 40
    Array
    (
        [0.1] => cr Object
            (
                [priv_member:cr:private] => 9
            )
    
        [1] => cr Object
            (
                [priv_member:cr:private] => 4
            )
    
        [2] => cr Object
            (
                [priv_member:cr:private] => -15
            )
    
    )
    
    Strict Standards: array_uintersect_assoc() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 41
    Array
    (
        [1] => cr Object
            (
                [priv_member:cr:private] => 4
            )
    
        [2] => cr Object
            (
                [priv_member:cr:private] => -15
            )
    
    )
    
    Strict Standards: array_uintersect_uassoc() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 42
    
    Strict Standards: array_uintersect_uassoc() expects parameter 4 to be a valid callback, non-static method cr::comp_func_key() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 42
    Array
    (
        [1] => cr Object
            (
                [priv_member:cr:private] => 4
            )
    
        [2] => cr Object
            (
                [priv_member:cr:private] => -15
            )
    
    )
    Array
    (
        [a] => green
    )
    Array
    (
        [0.5] => cr Object
        (
            [priv_member:private] => 12
        )
    
        [0] => cr Object
        (
            [priv_member:private] => 23
        )
    
    )
    Array
    (
        [0.1] => cr Object
        (
            [priv_member:private] => 9
        )
    
        [0.5] => cr Object
        (
            [priv_member:private] => 12
        )
    
        [0] => cr Object
        (
            [priv_member:private] => 23
        )
    
    )
    Array
    (
        [0.1] => cr Object
        (
            [priv_member:private] => 9
        )
    
        [0.5] => cr Object
        (
            [priv_member:private] => 12
        )
    
        [0] => cr Object
        (
            [priv_member:private] => 23
        )
    
    )
    Array
    (
        [b] => brown
        [c] => blue
        [0] => red
    )
    ------------------------------------
    Array
    (
        [0.1] => cr Object
        (
            [priv_member:private] => 9
        )
    
        [1] => cr Object
        (
            [priv_member:private] => 4
        )
    
        [2] => cr Object
        (
            [priv_member:private] => -15
        )
    
    )
    Array
    (
        [1] => cr Object
        (
            [priv_member:private] => 4
        )
    
        [2] => cr Object
        (
            [priv_member:private] => -15
        )
    
    )
    Array
    (
        [1] => cr Object
        (
            [priv_member:private] => 4
        )
    
        [2] => cr Object
        (
            [priv_member:private] => -15
        )
    
    )
    Array
    (
        [a] => green
    )
    Arrays/array_diff_intersect3.php: SUCCEEDED
    Arrays/array_filter%20false%20entries%20%2322016.php: SUCCEEDED
    Arrays/array_map.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Array
    (
        [0] => Array
            (
                [0] => 1
                [1] => A
                [2] => 0
            )
    
        [1] => Array
            (
                [0] => 2
                [1] => B
                [2] => 0
            )
    
        [2] => Array
            (
                [0] => 3
                [1] => C
                [2] => 
            )
    
    )
    Array
    (
        [0] => 1 A 0
        [1] => 2 B 0
        [2] => 3 C 
    )
    Array
    (
        [A] => 2
        [10] => 3
    )
    Array
    (
        [0] => 1
        [1] => 2
        [2] => 3
    )
    Array
    (
        [0] => A
        [1] => B
        [2] => C
    )
    Array
    (
        [0] => 0
        [1] => 0
    )
    Array
    (
        [A] => 1
        [10] => 2
    )
    Array
    (
        [0] => Array
        (
            [0] => 1
            [1] => A
            [2] => 0
        )
    
        [1] => Array
        (
            [0] => 2
            [1] => B
            [2] => 0
        )
    
        [2] => Array
        (
            [0] => 3
            [1] => C
            [2] => 
        )
    
    )
    Array
    (
        [0] => 1 A 0
        [1] => 2 B 0
        [2] => 3 C 
    )
    Array
    (
        [A] => 2
        [10] => 3
    )
    Array
    (
        [0] => 1
        [1] => 2
        [2] => 3
    )
    Array
    (
        [0] => A
        [1] => B
        [2] => C
    )
    Array
    (
        [0] => x
        [1] => x
    )
    Array
    (
        [A] => 1
        [10] => 2
    )
    Arrays/array_merge_recursive.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Array
    (
        [color] => Array
            (
                [favorite] => Array
                    (
                        [0] => red
                        [1] => green
                    )
    
                [0] => blue
            )
    
        [0] => Array
            (
                [0] => 1
                [1] => 2
                [2] => 3
            )
    
        [q] => Array
            (
                [0] => 
                [1] => 
                [2] => x
            )
    
        [1] => 10
        [2] => Array
            (
                [0] => 4
                [1] => 5
                [2] => 6
            )
    
    )
    Array
    (
        [a] => Array
            (
                [0] => 1
                [1] => 2
                [2] => 3
                [3] => e
            )
    
    )
    Array
    (
        [a] => Array
            (
                [0] => 1
                [1] => 2
                [2] => 3
                [3] => e
            )
    
    )
    Array
    (
        [a] => 1
        [b] => 2
    )
    Array
    (
        [a] => xxx
        [b] => 2
    )
    Array
    (
        [a] => Array
            (
                [a] => Array
                    (
                        [a] => Array
     *RECURSION*
                    )
    
                [0] => 1
                [1] => 2
                [2] => 3
            )
    
    )
    Array
    (
        [a] => Array
            (
                [b] => Array
                    (
                        [0] => 1
                        [1] => 1
                    )
    
                [c] => 1
                [d] => Array
                    (
                        [0] => 2
                        [1] => 3
                    )
    
            )
    
    )
    Array
    (
        [a] => Array
            (
                [0] => 
                [1] => 
            )
    
    )
    Array
    (
        [a] => Array
            (
                [0] => 
                [1] => 
            )
    
    )
    Array
    (
        [color] => Array
        (
            [favorite] => Array
            (
                [0] => red
                [1] => green
            )
    
            [0] => blue
        )
    
        [0] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
        )
    
        [q] => Array
        (
            [0] => x
        )
    
        [1] => 10
        [2] => Array
        (
            [0] => 4
            [1] => 5
            [2] => 6
        )
    
    )
    Array
    (
        [a] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
            [3] => e
        )
    
    )
    Array
    (
        [a] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
            [3] => e
        )
    
    )
    Array
    (
        [a] => 1
        [b] => 2
    )
    Array
    (
        [a] => xxx
        [b] => 2
    )
    Array
    (
        [a] => Array
        (
            [a] => Array
            (
                [a] => Array [recursion]
    
    
            )
    
            [0] => 1
            [1] => 2
            [2] => 3
        )
    
    )
    Array
    (
        [a] => Array
        (
            [b] => Array
            (
                [0] => 1
                [1] => 1
            )
    
            [c] => 1
            [d] => Array
            (
                [0] => 2
                [1] => 3
            )
    
        )
    
    )
    Array
    (
        [a] => Array
        (
        )
    
    )
    Array
    (
        [a] => Array
        (
        )
    
    )
    Arrays/array_reduce1.php: SUCCEEDED
    Arrays/array_reduce2.php: SUCCEEDED
    Arrays/array_slice.php: SUCCEEDED
    Arrays/array_sumprod.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    float(8.3)
    float(0)
    int(6)
    int(6)
    float(4294967297)
    float(9.2233720282648E+18)
    bool(true)
    bool(false)
    float(-7.7)
    float(-38.4)
    int(6)
    int(6)
    int64(4294967297)
    int64(9223372028264841218)
    bool(true)
    bool(true)
    Arrays/array_unset_add.php: SUCCEEDED
    Arrays/array_unshift.php: SUCCEEDED
    Arrays/array_walk.php: SUCCEEDED
    Arrays/array_walk_recursive.php: SUCCEEDED
    Arrays/multisort.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    bool(true)
    Array
    (
        [0] => Array
            (
                [0] => 2
                [1] => 8
                [2] => 2
                [3] => 2
                [4] => 8
                [5] => 8
            )
    
        [1] => Array
            (
                [0] => 7
                [1] => 2
                [2] => 7
                [3] => 4
                [4] => 8
                [5] => 1
            )
    
        [2] => Array
            (
                [0] => 1
                [1] => 4
                [2] => 8
                [3] => 0
                [4] => 6
                [5] => 2
            )
    
        [3] => Array
            (
                [0] => 8
                [1] => 4
                [2] => 1
                [3] => 0
                [4] => 7
                [5] => 1
            )
    
        [4] => Array
            (
                [0] => 20
                [1] => 2
                [2] => 12
                [3] => 11
                [4] => 10
                [5] => 1
            )
    
    )
    Array
    (
        [0] => Array
            (
                [0] => 10
                [1] => 100
                [2] => 100
                [3] => a
            )
    
        [1] => Array
            (
                [0] => 1
                [1] => 3
                [2] => 2
                [3] => 1
            )
    
    )
    Array
    (
        [0] => 10
        [1] => a
        [2] => 100
        [3] => 100
    )
    Array
    (
        [0] => 1
        [1] => 1
        [2] => 2
        [3] => 3
    )
    bool(true)
    Array
    (
        [0] => Array
        (
            [0] => 2
            [1] => 8
            [2] => 2
            [3] => 2
            [4] => 8
            [5] => 8
        )
    
        [1] => Array
        (
            [0] => 7
            [1] => 2
            [2] => 7
            [3] => 4
            [4] => 8
            [5] => 1
        )
    
        [2] => Array
        (
            [0] => 1
            [1] => 4
            [2] => 8
            [3] => 0
            [4] => 6
            [5] => 2
        )
    
        [3] => Array
        (
            [0] => 8
            [1] => 4
            [2] => 1
            [3] => 0
            [4] => 7
            [5] => 1
        )
    
        [4] => Array
        (
            [0] => 20
            [1] => 2
            [2] => 12
            [3] => 11
            [4] => 10
            [5] => 1
        )
    
    )
    Array
    (
        [0] => Array
        (
            [0] => 10
            [1] => 100
            [2] => 100
            [3] => a
        )
    
        [1] => Array
        (
            [0] => 1
            [1] => 3
            [2] => 2
            [3] => 1
        )
    
    )
    Array
    (
        [0] => 10
        [1] => a
        [2] => 100
        [3] => 100
    )
    Array
    (
        [0] => 1
        [1] => 1
        [2] => 2
        [3] => 3
    )
    Arrays/multisort_empty.php: SUCCEEDED
    Arrays/nonarray%20access%20%2322019.php: SUCCEEDED
    Arrays/optimizations.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    3
    4
    5
    a
    b
    c
    
    Warning: strtolower() expects parameter 1 to be string, array given in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 15
    
    cablo
    3
    4
    5
    a
    b
    c
    array
    cablo
    Arrays/recursion.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    f1:
    array(2) {
      ["a"]=>
      array(5) {
        ["a"]=>
        &array(3) {
          ["a"]=>
          &array(3) {
            ["a"]=>
            *RECURSION*
            [0]=>
            string(1) "y"
            [1]=>
            string(1) "z"
          }
          [0]=>
          string(1) "y"
          [1]=>
          string(1) "z"
        }
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        string(1) "x"
      }
      [0]=>
      string(1) "w"
    }
    f2:
    array(1) {
      ["A"]=>
      &array(2) {
        ["a"]=>
        &array(2) {
          ["a"]=>
          *RECURSION*
          [0]=>
          string(1) "z"
        }
        [0]=>
        string(1) "z"
      }
    }
    f3:
    array(2) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) {
          [0]=>
          *RECURSION*
          [1]=>
          string(1) "z"
        }
        [1]=>
        string(1) "z"
      }
      [1]=>
      string(1) "z"
    }
    f4:
    
    Warning: array_merge_recursive(): recursion detected in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 37
    array(1) {
      ["a"]=>
      &array(3) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
      }
    }
    f5:
    array(1) {
      ["a"]=>
      array(6) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        int(1)
        [4]=>
        int(2)
        [5]=>
        int(3)
      }
    }
    f6:
    array(1) {
      ["a"]=>
      array(2) {
        [0]=>
        string(2) "xx"
        [1]=>
        int(2)
      }
    }
    f7:
    array(1) {
      ["a"]=>
      array(1) {
        ["a"]=>
        array(1) {
          ["a"]=>
          &array(1) {
            ["a"]=>
            &array(1) {
              ["a"]=>
              *RECURSION*
            }
          }
        }
      }
    }
    f1:
    array(2) {
      ["a"]=>
      array(5) {
        ["a"]=>
        &array(3) {
          ["a"]=>
          &array(3) [recursion]
          [0]=>
          string(1) "y"
          [1]=>
          string(1) "z"
        }
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        string(1) "x"
      }
      [0]=>
      string(1) "w"
    }
    f2:
    array(1) {
      ["A"]=>
      &array(2) {
        ["a"]=>
        &array(2) [recursion]
        [0]=>
        string(1) "z"
      }
    }
    f3:
    array(2) {
      [0]=>
      &array(2) [recursion]
      [1]=>
      string(1) "z"
    }
    f4:
    array(1) {
      ["a"]=>
      array(6) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        int(1)
        [4]=>
        int(2)
        [5]=>
        int(3)
      }
    }
    f5:
    array(1) {
      ["a"]=>
      array(6) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        int(1)
        [4]=>
        int(2)
        [5]=>
        int(3)
      }
    }
    f6:
    array(1) {
      ["a"]=>
      array(2) {
        [0]=>
        string(2) "xx"
        [1]=>
        int(2)
      }
    }
    f7:
    array(1) {
      ["a"]=>
      &array(1) {
        ["a"]=>
        &array(1) [recursion]
      }
    }
    Arrays/sort.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    sort regular:
    Array
    (
        [0] => 0
        [1] => 1
        [2] => 1
        [3] => 8
        [4] => 0x10
        [5] => 10x
        [6] => 20x
        [7] => ach0
        [8] => add1
        [9] => x10
        [10] => x2
    )
    
    sort numeric:
    Array
    (
        [0] => add1
        [1] => x2
        [2] => 0x10
        [3] => ach0
        [4] => 0
        [5] => x10
        [6] => 1
        [7] => 1
        [8] => 8
        [9] => 10x
        [10] => 20x
    )
    
    sort string:
    Array
    (
        [0] => 0
        [1] => 0x10
        [2] => 1
        [3] => 1
        [4] => 10x
        [5] => 20x
        [6] => 8
        [7] => ach0
        [8] => add1
        [9] => x10
        [10] => x2
    )
    
    sort locale:
    Array
    (
        [0] => 0
        [1] => 0x10
        [2] => 1
        [3] => 1
        [4] => 10x
        [5] => 20x
        [6] => 8
        [7] => ach0
        [8] => add1
        [9] => x10
        [10] => x2
    )
    
    ksort regular:
    Array
    (
        [x] => 8
        [z] => 1
        [0] => x10
        [1] => 10x
        [2b] => 1
        [2] => 20x
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [10a] => 0
    )
    
    ksort numeric:
    Array
    (
        [x] => 8
        [z] => 1
        [0] => x10
        [1] => 10x
        [2b] => 1
        [2] => 20x
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [10a] => 0
    )
    
    ksort string:
    Array
    (
        [0] => x10
        [1] => 10x
        [10a] => 0
        [2] => 20x
        [2b] => 1
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [x] => 8
        [z] => 1
    )
    
    ksort locale:
    Array
    (
        [0] => x10
        [1] => 10x
        [10a] => 0
        [2] => 20x
        [2b] => 1
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [x] => 8
        [z] => 1
    )
    
    asort regular:
    Array
    (
        [10a] => 0
        [2b] => 1
        [z] => 1
        [x] => 8
        [4] => 0x10
        [1] => 10x
        [2] => 20x
        [5] => ach0
        [6] => add1
        [0] => x10
        [3] => x2
    )
    
    asort numeric:
    Array
    (
        [6] => add1
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [10a] => 0
        [0] => x10
        [z] => 1
        [2b] => 1
        [x] => 8
        [1] => 10x
        [2] => 20x
    )
    
    asort string:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [z] => 1
        [2b] => 1
        [1] => 10x
        [2] => 20x
        [x] => 8
        [5] => ach0
        [6] => add1
        [0] => x10
        [3] => x2
    )
    
    asort locale:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [z] => 1
        [2b] => 1
        [1] => 10x
        [2] => 20x
        [x] => 8
        [5] => ach0
        [6] => add1
        [0] => x10
        [3] => x2
    )
    
    rsort regular:
    Array
    (
        [0] => x2
        [1] => x10
        [2] => add1
        [3] => ach0
        [4] => 20x
        [5] => 10x
        [6] => 0x10
        [7] => 8
        [8] => 1
        [9] => 1
        [10] => 0
    )
    
    rsort numeric:
    Array
    (
        [0] => 20x
        [1] => 10x
        [2] => 8
        [3] => 1
        [4] => 1
        [5] => ach0
        [6] => add1
        [7] => 0x10
        [8] => x2
        [9] => x10
        [10] => 0
    )
    
    rsort string:
    Array
    (
        [0] => x2
        [1] => x10
        [2] => add1
        [3] => ach0
        [4] => 8
        [5] => 20x
        [6] => 10x
        [7] => 1
        [8] => 1
        [9] => 0x10
        [10] => 0
    )
    
    rsort locale:
    Array
    (
        [0] => x2
        [1] => x10
        [2] => add1
        [3] => ach0
        [4] => 8
        [5] => 20x
        [6] => 10x
        [7] => 1
        [8] => 1
        [9] => 0x10
        [10] => 0
    )
    
    natsort:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [2b] => 1
        [z] => 1
        [x] => 8
        [1] => 10x
        [2] => 20x
        [5] => ach0
        [6] => add1
        [3] => x2
        [0] => x10
    )
    sort regular:
    Array
    (
        [0] => 0x10
        [1] => 10x
        [2] => 20x
        [3] => ach0
        [4] => add1
        [5] => x10
        [6] => 0
        [7] => x2
        [8] => 1
        [9] => 1
        [10] => 8
    )
    
    sort numeric:
    Array
    (
        [0] => x10
        [1] => 0
        [2] => x2
        [3] => ach0
        [4] => add1
        [5] => 1
        [6] => 1
        [7] => 8
        [8] => 10x
        [9] => 0x10
        [10] => 20x
    )
    
    sort string:
    Array
    (
        [0] => 0
        [1] => 0x10
        [2] => 1
        [3] => 1
        [4] => 10x
        [5] => 20x
        [6] => 8
        [7] => ach0
        [8] => add1
        [9] => x10
        [10] => x2
    )
    
    sort locale:
    Array
    (
        [0] => 0
        [1] => 0x10
        [2] => 1
        [3] => 1
        [4] => 10x
        [5] => 20x
        [6] => 8
        [7] => add1
        [8] => ach0
        [9] => x10
        [10] => x2
    )
    
    ksort regular:
    Array
    (
        [x] => 8
        [z] => 1
        [0] => x10
        [1] => 10x
        [2] => 20x
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [10a] => 0
        [2b] => 1
    )
    
    ksort numeric:
    Array
    (
        [x] => 8
        [z] => 1
        [0] => x10
        [1] => 10x
        [2b] => 1
        [2] => 20x
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [10a] => 0
    )
    
    ksort string:
    Array
    (
        [0] => x10
        [1] => 10x
        [10a] => 0
        [2] => 20x
        [2b] => 1
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [x] => 8
        [z] => 1
    )
    
    ksort locale:
    Array
    (
        [0] => x10
        [1] => 10x
        [10a] => 0
        [2] => 20x
        [2b] => 1
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [x] => 8
        [z] => 1
    )
    
    asort regular:
    Array
    (
        [4] => 0x10
        [1] => 10x
        [2] => 20x
        [5] => ach0
        [6] => add1
        [0] => x10
        [10a] => 0
        [3] => x2
        [z] => 1
        [2b] => 1
        [x] => 8
    )
    
    asort numeric:
    Array
    (
        [0] => x10
        [10a] => 0
        [3] => x2
        [5] => ach0
        [6] => add1
        [z] => 1
        [2b] => 1
        [x] => 8
        [1] => 10x
        [4] => 0x10
        [2] => 20x
    )
    
    asort string:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [z] => 1
        [2b] => 1
        [1] => 10x
        [2] => 20x
        [x] => 8
        [5] => ach0
        [6] => add1
        [0] => x10
        [3] => x2
    )
    
    asort locale:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [z] => 1
        [2b] => 1
        [1] => 10x
        [2] => 20x
        [x] => 8
        [6] => add1
        [5] => ach0
        [0] => x10
        [3] => x2
    )
    
    rsort regular:
    Array
    (
        [0] => 8
        [1] => 1
        [2] => 1
        [3] => x2
        [4] => x10
        [5] => 0
        [6] => add1
        [7] => ach0
        [8] => 20x
        [9] => 10x
        [10] => 0x10
    )
    
    rsort numeric:
    Array
    (
        [0] => 20x
        [1] => 0x10
        [2] => 10x
        [3] => 8
        [4] => 1
        [5] => 1
        [6] => x10
        [7] => 0
        [8] => x2
        [9] => ach0
        [10] => add1
    )
    
    rsort string:
    Array
    (
        [0] => x2
        [1] => x10
        [2] => add1
        [3] => ach0
        [4] => 8
        [5] => 20x
        [6] => 10x
        [7] => 1
        [8] => 1
        [9] => 0x10
        [10] => 0
    )
    
    rsort locale:
    Array
    (
        [0] => x2
        [1] => x10
        [2] => ach0
        [3] => add1
        [4] => 8
        [5] => 20x
        [6] => 10x
        [7] => 1
        [8] => 1
        [9] => 0x10
        [10] => 0
    )
    
    natsort:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [z] => 1
        [2b] => 1
        [x] => 8
        [1] => 10x
        [2] => 20x
        [5] => ach0
        [6] => add1
        [3] => x2
        [0] => x10
    )
    Arrays/usort.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    Array
    (
        [0] => 10
        [1] => 9
        [2] => 8
        [3] => 7
        [4] => 6
        [5] => 5
        [6] => 4
        [7] => 3
        [8] => 2
        [9] => 1
    )
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Array
    (
        [0] => 10
        [1] => 9
        [2] => 8
        [3] => 7
        [4] => 6
        [5] => 5
        [6] => 4
        [7] => 3
        [8] => 2
        [9] => 1
    )
    Arrays/lazy_copy/001.php: SUCCEEDED
    Arrays/lazy_copy/002.php: SUCCEEDED
    Arrays/lazy_copy/003.php: SUCCEEDED
    Arrays/lazy_copy/004.php: SUCCEEDED
    Arrays/lazy_copy/005.php: SUCCEEDED
    Arrays/lazy_copy/006.php: SUCCEEDED
    Bugs/class_incompletepart.php: SUCCEEDED
    Bugs/division-by-zero.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    DIVISION
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 6
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 8
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 10
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 12
    bool(false)
    MODULO
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 16
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 18
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 20
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 22
    bool(false)
    DIVISION
    bool(false)
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt at expression on line 10, column 2.
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt at expression on line 12, column 2.
    bool(false)
    MODULO
    bool(false)
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt at expression on line 20, column 2.
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt at expression on line 22, column 2.
    bool(false)
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt(6,10): warning PHP0150: Division by zero
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt(8,9): warning PHP0150: Division by zero
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt(16,10): warning PHP0150: Division by zero
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt(18,9): warning PHP0150: Division by zero
    
    Bugs/function-in-unknown-class.php: SUCCEEDED
    Bugs/if_if.php: SUCCEEDED
    Bugs/is_a_null_value.php: SUCCEEDED
    Bugs/preg-named-groups.php: SUCCEEDED
    Bugs/preg-replace-advanced.php: SUCCEEDED
    Bugs/preg-replace-range.php: SUCCEEDED
    Bugs/preg-replace.php: SUCCEEDED
    Bugs/preg-this-dynamic.php: FAILED
    Script hung upNo errorsSuccess
    Expected test outputReal script output
    Unhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---> PHP.Core.Debug+AssertException: Assertion failed: 
       at PHP.Core.Debug.Fail(String message)
       at PHP.Core.Debug.Assert(Boolean condition)
       at PHP.Core.RelativePath.ParseCanonical(String relativePath)
       at PHP.Core.Emit.TransientAssemblyBuilder.Build(String sourceCode, SourceCodeDescriptor descriptor, EvalKinds kind, CompilationContext context, ScriptContext scriptContext, DTypeDesc referringType, NamingContext namingContext, Boolean completeSource)
       at PHP.Core.DynamicCode.EvalInternal(String prefix, String code, String suffix, EvalKinds kind, ScriptContext scriptContext, Dictionary`2 localVariables, DObject self, DTypeDesc referringType, SourceCodeDescriptor descriptor, Boolean entireFile, NamingContext namingContext)
       at PHP.Core.DynamicCode.Eval(String code, Boolean synthetic, ScriptContext context, Dictionary`2 definedVariables, DObject self, DTypeDesc referringType, String callerRelativeSourcePath, Int32 line, Int32 column, Int32 containerId, NamingContext namingContext)
       at PHP.Library.PerlRegExp.Evaluator.ReplaceCodeExecute(Match m)
       at System.Text.RegularExpressions.RegexReplacement.Replace(MatchEvaluator evaluator, Regex regex, String input, Int32 count, Int32 startat)
       at System.Text.RegularExpressions.Regex.Replace(String input, MatchEvaluator evaluator, Int32 count)
       at PHP.Library.PerlRegExp.ReplaceInternal(DObject self, Dictionary`2 definedVariables, PerlRegExpConverter converter, PhpCallback callback, String str, Int32 limit, SourceCodeDescriptor sourceCodeDesc, Int32& count)
       at PHP.Library.PerlRegExp.SimpleReplace(DObject self, Dictionary`2 definedVariables, Object pattern, String replacement, PhpCallback callback, Object data, Int32 limit, SourceCodeDescriptor descriptor, Int32& count)
       at PHP.Library.PerlRegExp.Replace(ScriptContext context, DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, PhpCallback callback, Object data, Int32 limit, Int32& count)
       at PHP.Library.PerlRegExp.Replace(ScriptContext context, DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, Object data)
       at PHP.Dynamic.PhpNetClassLibrary.preg_replace(Object , PhpStack )
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.CallInternal(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at PHP.Core.ScriptContext.CallVoid(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <__input.txt>.a.a(ScriptContext ) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt:line 17
       at <__input.txt>.a.<Mediator>(ScriptContext )
       at <__input.txt>.a.a(Object instance, PhpStack stack)
       at <__input.txt>.<Script>.<Main>(ScriptContext <context>, Dictionary`2 <locals>, DObject <self>, DTypeDesc <includer>, Boolean <request>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt:line 19
       at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)
       at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)
       --- End of inner exception stack trace ---
       at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)
       at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)
       at <Global>.Run(String[] )
    
    Bugs/preg-this-dynamic2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    foo: ahoj
    foo: lidi
    foo: rozkladame
    foo: ahoj
    foo: lidi
    foo: rozkladame
    foo: ahoj
    foo: lidi
    foo: rozkladame
    
    Notice: Undefined variable: this.
    
    Error: Call to a member function foo() on a non-object.
    Bugs/preg-this.php: SUCCEEDED
    Bugs/preg-ungreedy-bugs.php: SUCCEEDED
    Bugs/preg-unkn.php: SUCCEEDED
    Bugs/trigger_error%20line%20number%20%232787.php: SUCCEEDED
    CLR/BaseTypes.php: SUCCEEDED
    CLR/ClrEvent.php: SUCCEEDED
    CLR/ConditionalDecls.php: SUCCEEDED
    CLR/ConditionalDecls2.php: SUCCEEDED
    CLR/foreach.php: SUCCEEDED
    CLR/handle_enum.php: SUCCEEDED
    CLR/Inheritance1.php: FAILED
    Phalanger misbehaviour while compiling [file] sectionSee belowSuccess
    Expected test outputReal script output
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(3,2): error PHP2031: Circular interface inheritance dependency involving 'I4' and 'I1'
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(6,2): (related location)
    
    CLR/Inheritance2.php: FAILED
    Phalanger misbehaviour while compiling [file] sectionSee belowSuccess
    Expected test outputReal script output
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(3,2): error PHP2031: Circular interface inheritance dependency involving 'J4' and 'J1'
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(6,2): (related location)
    
    CLR/Inheritance3.php: FAILED
    Phalanger misbehaviour while compiling [file] sectionSee belowSuccess
    Expected test outputReal script output
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(3,2): error PHP2031: Circular interface inheritance dependency involving 'J5' and 'J5'
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(3,2): (related location)
    
    CLR/Inheritance4.php: FAILED
    Phalanger misbehaviour while compiling [file] sectionSee belowSuccess
    Expected test outputReal script output
    error PHP2007: Internal error! 
    Please, report this bug via http://www.codeplex.com/WorkItem/List.aspx?ProjectName=Phalanger.
    Additional information: 
    Could not load type '<__input.txt>.J`1' from assembly 'Inheritance4_file, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' because it has recursive generic definition.
       at System.Reflection.Emit.TypeBuilder.TermCreateClass(RuntimeModule module, Int32 tk, ObjectHandleOnStack type)
       at System.Reflection.Emit.TypeBuilder.CreateTypeNoLock()
       at System.Reflection.Emit.TypeBuilder.CreateType()
       at PHP.Core.Reflection.PhpType.Bake()
       at PHP.Core.Reflection.ScriptCompilationUnit.Bake()
       at PHP.Core.Reflection.InclusionGraphBuilder.EmitAllUnits(CodeGenerator codeGenerator)
       at PHP.Core.Emit.ScriptAssemblyBuilder.CompileScripts(IEnumerable`1 sourceFiles, String duckPath, String duckNamespace, CompilationContext context)
       at PHP.Core.Emit.ScriptAssemblyBuilder.Build(IEnumerable`1 sourceFiles, CompilationContext context)
       at PHP.Core.ApplicationCompiler.Compile(ApplicationContext applicationContext, CompilerConfiguration config, ErrorSink errorSink, CompilationParameters ps)
    
    
    CLR/Inheritance5.php: SUCCEEDED
    CLR/Inheritance6.php: SUCCEEDED
    CLR/Inheritance7.php: SUCCEEDED
    CLR/Inheritance8.php: SUCCEEDED
    CLR/Inheritance9.php: FAILED
    Phalanger misbehaviour while compiling [file] sectionSee belowSuccess
    Expected test outputReal script output
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(14,2): error PHP1018: Class 'D' doesn't implement abstract method I::f()
    
    CLR/Lambdas.php: FAILED
    Phalanger misbehaviour while compiling [file] sectionSee belowCompile error
    Expected test outputReal script output
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(4,3): error PHP1120: Unknown custom attribute; neither of types 'AttributeUsage' and 'AttributeUsageAttribute' exists
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(17,3): error PHP1120: Unknown custom attribute; neither of types 'MyAttribute' and 'MyAttributeAttribute' exists
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(27,22): error PHP1120: Unknown custom attribute; neither of types 'MyAttribute' and 'MyAttributeAttribute' exists
    
    CLR/NameResolving.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    bool(false)
    bool(true)
    object(Directory)(2)
    {
      ["handle"] => NULL
      ["path"] => NULL
    }
    bool(false)
    
    Error: Class 'Dictionary' not found in D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt at expression on line 12, column 4.
    Compiler/abstracts.php: SUCCEEDED
    Compiler/aliased%20assign%20add.php: SUCCEEDED
    Compiler/assignments.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ---1---1float(-1.5)
    float(2.5)
    float(0.83333333333333)
    int(6)
    int(8)
    ---2---2float(8.8333333333333)
    float(8.8333333333333)
    float(8.8333333333333)
    int(8)
    int(8)
    ---3---3---4---4---5---5array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [1]=>
      array(1) {
        [2]=>
        array(1) {
          [3]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    ---6---6array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "u"
    }
    array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "v"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    ---7---7array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    ---8---8
    ---1---1float(-1.5)
    float(2.5)
    float(0.833333333333333)
    int(6)
    int(8)
    ---2---2float(8.83333333333333)
    float(8.83333333333333)
    float(8.83333333333333)
    int(8)
    int(8)
    ---3---3---4---4---5---5array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [1]=>
      array(1) {
        [2]=>
        array(1) {
          [3]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    ---6---6array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "u"
    }
    array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "v"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    ---7---7array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    ---8---8
    Compiler/assign_in_call.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    g1:
    f(x)
    u(x)
    'x'
    
    g2:
    f(x)
    u(x)
    'b'
    
    g3:
    f(x)
    u(x)
    'b'
    
    g4:
    f(x)
    u(x)
    'b'
    
    g5:
    f()
    u()
    integer(1)
    
    g6:
    f(3)
    u(3)
    integer(3)
    
    g7:
    f(2)
    u(10)
    integer(10)
    
    g8:
    f(1)
    f(1)
    f(1)
    u(1)
    u()
    u(1)
    
    g9:
    known:
    __get(p) = 0
    __set(p,1)
    f(1)
    unknown:
    __get(p) = 1
    __set(p,3)
    u(3)
    
    g10:
    Done.
    g1:
    f(x)
    u(x)
    'x'
    
    g2:
    f(x)
    u(x)
    'b'
    
    g3:
    f(x)
    u(x)
    'b'
    
    g4:
    f(x)
    u(x)
    'b'
    
    g5:
    f()
    u()
    integer(1)
    
    g6:
    f(3)
    u(3)
    integer(3)
    
    g7:
    f(2)
    u(10)
    integer(10)
    
    g8:
    f(1)
    f(1)
    f(1)
    u(1)
    u()
    u(1)
    
    g9:
    known:
    __get(p) = 0
    __set(p,1)
    __get(p) = 1
    f(1)
    unknown:
    __get(p) = 1
    __set(p,3)
    __get(p) = 3
    u(3)
    
    g10:
    Done.
    Compiler/auto_globals_001.php: SUCCEEDED
    Compiler/auto_globals_002.php: SUCCEEDED
    Compiler/auto_globals_003.php: SUCCEEDED
    Compiler/break_in_global_code.php: SUCCEEDED
    Compiler/chaining_test.php: SUCCEEDED
    Compiler/chain_ending_by_string_index.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        string(1) "f"
      }
    }
    array(1) {
      [0]=>
      string(4) "xubu"
    }
    object(C)#1 (1) {
      ["f"]=>
      string(4) "kuxu"
    }
    string(5) "helxo"
    string(5) "helxo"
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        string(1) "f"
      }
    }
    array(1) {
      [0]=>
      string(4) "bubu"
    }
    
    Warning: A string item used as a reference in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt at expression on line 19, column 1.
    object(C)(1) {
      ["f"]=>
      string(4) "kuku"
    }
    
    Warning: A string item used as a reference in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt at expression on line 25, column 1.
    string(5) "hello"
    
    Warning: A string item used as a reference in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt at expression on line 31, column 1.
    string(5) "hello"
    Compiler/continue_in_global_code.php: SUCCEEDED
    Compiler/deep_copy.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array(1) {
      [0]=>
      &array(1) {
        [0]=>
        &array(1) {
          [0]=>
          *RECURSION*
        }
      }
    }
    array(1) {
      [0]=>
      &array(1) {
        [0]=>
        &array(1) {
          [0]=>
          *RECURSION*
        }
      }
    }
    array(2) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) {
          [0]=>
          *RECURSION*
          [1]=>
          int(1)
        }
        [1]=>
        int(1)
      }
      [1]=>
      int(1)
    }
    array(1) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) {
          [0]=>
          *RECURSION*
          [1]=>
          int(1)
        }
        [1]=>
        int(1)
      }
    }
    array(1) {
      [0]=>
      &array(1) [recursion]
    }
    array(1) {
      [0]=>
      &array(1) {
        [0]=>
        &array(1) [recursion]
      }
    }
    array(2) {
      [0]=>
      &array(2) [recursion]
      [1]=>
      int(1)
    }
    array(1) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) [recursion]
        [1]=>
        int(1)
      }
    }
    Compiler/deep_copy_refbox.php: SUCCEEDED
    Compiler/expr_init.php: SUCCEEDED
    Compiler/foreach1.php: SUCCEEDED
    Compiler/foreach_arrays.php: SUCCEEDED
    Compiler/for_loop.php: SUCCEEDED
    Compiler/function_002.php: SUCCEEDED
    Compiler/function_003.php: SUCCEEDED
    Compiler/function_004.php: SUCCEEDED
    Compiler/function_call.php: SUCCEEDED
    Compiler/func_get_args.php: SUCCEEDED
    Compiler/if_statement.php: SUCCEEDED
    Compiler/indirect_001.php: SUCCEEDED
    Compiler/indirect_002.php: SUCCEEDED
    Compiler/indirect_003.php: SUCCEEDED
    Compiler/indirect_004.php: SUCCEEDED
    Compiler/indirect_005.php: SUCCEEDED
    Compiler/indirect_007.php: SUCCEEDED
    Compiler/indirect_global.php: SUCCEEDED
    Compiler/inheritance.php: SUCCEEDED
    Compiler/inheritance2.php: SUCCEEDED
    Compiler/isset_unset_001.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Testing x in global code:  <br>
    1 <br>
     <br>
    Testing x (object) in optimized function:  <br>
    1 <br>
     <br>
    Testing x (PhpReference) in optimized function:  <br>
    1 <br>
     <br>
    
    Notice: Undefined variable: y in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt on line 29
    Testing $$x (created at runtime) in optimized function:  <br>
    1 <br>
    Testing x in global code:  <br>
    1 <br>
     <br>
    Testing x (object) in optimized function:  <br>
    1 <br>
     <br>
    Testing x (PhpReference) in optimized function:  <br>
    1 <br>
     <br>
    Testing $$x (created at runtime) in optimized function:  <br>
    1 <br>
    Compiler/list%20%2326681.php: SUCCEEDED
    Compiler/new_array_item_assignadd.php: SUCCEEDED
    Compiler/null_hints.php: SUCCEEDED
    Compiler/pure_create_function.php: SUCCEEDED
    Compiler/pure_function_exists.php: SUCCEEDED
    Compiler/pure_math_str.php: SUCCEEDED
    Compiler/static_call.php: SUCCEEDED
    Compiler/switch.php: SUCCEEDED
    Compiler/ternary_ex.php: SUCCEEDED
    Compiler/ternary_short.php: SUCCEEDED
    Compiler/this%20call.php: SUCCEEDED
    Compiler/typehint_check.php: SUCCEEDED
    Compiler/__call.php: SUCCEEDED
    Compiler/Inclusions/include2.php: SUCCEEDED
    Compiler/Inclusions/include3.php: SUCCEEDED
    Compiler/Inclusions/include6.php: SUCCEEDED
    Compiler/Inclusions/include_test.php: SUCCEEDED
    Compiler/Inclusions/script.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t01.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t02.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t03.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t04.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t05.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t08.php: SUCCEEDED
    Compiler/PseudoConst/parent.php: SUCCEEDED
    Compiler/PseudoConst/parent2.php: SUCCEEDED
    Compiler/PseudoConst/self.php: SUCCEEDED
    Compiler/PseudoConst/t01.php: SUCCEEDED
    Compiler/PseudoConst/t02.php: SUCCEEDED
    Compiler/PseudoConst/t03.php: SUCCEEDED
    Compiler/PseudoConst/t04.php: SUCCEEDED
    Compiler/PseudoConst/t05.php: SUCCEEDED
    Compiler/PseudoConst/t06.php: SUCCEEDED
    Compiler/PseudoConst/t07.php: SUCCEEDED
    Compiler/PseudoConst/t08.php: SUCCEEDED
    Compiler/PseudoConst/t09.php: SUCCEEDED
    Compiler/PseudoConst/t10.php: SUCCEEDED
    Compiler/PseudoConst/t11.php: SUCCEEDED
    Compiler/PseudoConst/_class_.php: SUCCEEDED
    Compiler/PseudoConst/_dir_.php: SUCCEEDED
    Compiler/PseudoConst/_function_.php: SUCCEEDED
    Compiler/References/array_argument.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(2)
        [1]=>
        int(3)
      }
    }
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    Compiler/References/array_local.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(2)
        [1]=>
        int(3)
      }
    }
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    Compiler/References/array_ret_argument.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(2)
        [1]=>
        int(3)
      }
    }
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    Compiler/References/array_ret_argument2.php: SUCCEEDED
    Compiler/References/deepcopy.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <br/><br/>globalobjects: array(2) {
      [0]=>
      int(1)
      [1]=>
      int(7)
    }
    <br/><br/>globalobjects: array(2) {
      [0]=>
      int(1)
      [1]=>
      &int(7)
    }
    Compiler/References/explicitclear.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Construyendo Y
    call foo12Destruyendo Y
    3object(X)#1 (2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      int(54)
    }
    array(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      string(10) "Init Value"
    }
    x: object(X)#1 (2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      int(1004)
    }
    <br/>checkpoint array(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      int(54)
    }
    Construyendo Y
    call foo123object(X)(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      &int(54)
    }
    array(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      &int(54)
    }
    x: object(X)(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      &int(1004)
    }
    <br/>checkpoint array(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      &int(1004)
    }
    Destruyendo Y
    Compiler/References/field_argument.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: int(7)
    <br/><br/>checkpoint array(1) {
      ["objects"]=>
      int(8)
    }
    x: int(7)
    <br/><br/>checkpoint array(1) {
      ["objects"]=>
      &int(7)
    }
    Compiler/References/field_local.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: object(X)#1 (1) {
      ["objects"]=>
      int(25)
    }
    <br/>checkpoint array(1) {
      ["objects"]=>
      int(7)
    }
    x: object(X)(1) {
      ["objects"]=>
      &int(25)
    }
    <br/>checkpoint array(1) {
      ["objects"]=>
      &int(25)
    }
    Compiler/References/ref_arrayitem.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(2)
        [1]=>
        int(3)
      }
    }
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    Compiler/References/ref_reasign.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    object(X)#1 (2) {
      ["objects"]=>
      int(54)
      ["objects2"]=>
      &int(222)
    }
    array(2) {
      ["objects"]=>
      int(7)
      ["objects2"]=>
      &int(222)
    }
    x: object(X)#1 (2) {
      ["objects"]=>
      int(1004)
      ["objects2"]=>
      int(777)
    }
    <br/>checkpoint array(2) {
      ["objects"]=>
      int(54)
      ["objects2"]=>
      int(222)
    }
    object(X)(2) {
      ["objects"]=>
      &int(54)
      ["objects2"]=>
      &int(222)
    }
    array(2) {
      ["objects"]=>
      &int(54)
      ["objects2"]=>
      &int(222)
    }
    x: object(X)(2) {
      ["objects"]=>
      &int(1004)
      ["objects2"]=>
      &int(777)
    }
    <br/>checkpoint array(2) {
      ["objects"]=>
      &int(1004)
      ["objects2"]=>
      &int(777)
    }
    Compiler/Unreachable/t13.php: SUCCEEDED
    Compiler/Unset/calluserfunc.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Warning: call_user_func() expects parameter 1 to be a valid callback, function 'unset' not found or invalid function name in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\Unset\__input.txt on line 3
    int(10)
    Error: call_user_func(): Call to undefined function: 'unset' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\Unset\__input.txt at expression on line 3, column 1.
    Compiler/Unset/issetref2.php: SUCCEEDED
    Compiler/Unset/unsetglobal.php: SUCCEEDED
    Compiler/Unset/unsetglobal2.php: SUCCEEDED
    Compiler/Unset/unsetindirect.php: SUCCEEDED
    Compiler/Unset/unsetproblem.php: SUCCEEDED
    Compiler/Unset/unsetref.php: SUCCEEDED
    Compiler/Unset/unsetref2.php: SUCCEEDED
    Compiler/Unset/unsetref3.php: SUCCEEDED
    Compiler/Unset/__unset.php: SUCCEEDED
    DateTime/strftime.php: SUCCEEDED
    DateTime/strtotime1.php: SUCCEEDED
    DateTime/strtotime2.php: SUCCEEDED
    DateTime/strtotime3.php: SUCCEEDED
    DateTime/strtotime4.php: SUCCEEDED
    DateTime/strtotime5.php: SUCCEEDED
    DateTime/time.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    -189388800:-189475200 - 86400
    1964-01-01T00:00:00+0000
    1963-12-31T00:00:00+0000
    1964-06-06
    1963-06-06
    1964-01-06
    1133305200
    -189388800:-189475200 - 86400
    1964-01-01T00:00:00+0000
    1963-12-31T00:00:00+0000
    1964-06-06
    1963-06-06
    1964-01-06
    DateTime/timezones1.php: SUCCEEDED
    DLR/classContext.php: SUCCEEDED
    DLR/classContext1.php: SUCCEEDED
    DLR/classContext2.php: SUCCEEDED
    DLR/restrictions%20generics.php: SUCCEEDED
    DLR/restrictions.php: SUCCEEDED
    DLR/targets.php: SUCCEEDED
    FileSystem/basename.php: SUCCEEDED
    FileSystem/basename2.php: SUCCEEDED
    FileSystem/chdir.php: SUCCEEDED
    FileSystem/csv.php: SUCCEEDED
    FileSystem/date.php: SUCCEEDED
    FileSystem/date2.php: SUCCEEDED
    FileSystem/date3.php: SUCCEEDED
    FileSystem/date_unix.php: SUCCEEDED
    FileSystem/dirname.php: SUCCEEDED
    FileSystem/dirname2.php: SUCCEEDED
    FileSystem/disk_free_space.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    596 GB
    Drive C: 27 GB
    Drive D: 596 GB
    Drive E: 
    Warning: disk_free_space(): The system cannot find the path specified.
     in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 14
    false
    Drive F: 
    Warning: disk_free_space(): The device is not ready.
     in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 14
    false
    596 GB
    Drive C: 27 GB
    Drive D: 596 GB
    Drive E: false
    Drive F: false
    FileSystem/disk_total_space.php: SUCCEEDED
    FileSystem/fgets.php: SUCCEEDED
    FileSystem/file.php: SUCCEEDED
    FileSystem/filesize.php: SUCCEEDED
    FileSystem/file_exists.php: SUCCEEDED
    FileSystem/file_get_contents.php: SUCCEEDED
    FileSystem/fpassthru.php: SUCCEEDED
    FileSystem/fread.php: SUCCEEDED
    FileSystem/fread1.php: SUCCEEDED
    FileSystem/fread2.php: SUCCEEDED
    FileSystem/fseek.php: SUCCEEDED
    FileSystem/fsockopen.php: SUCCEEDED
    FileSystem/ftell.php: SUCCEEDED
    FileSystem/glob_up_dirs.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string(7) "../@PHP"
    string(9) "../Arrays"
    string(7) "../Bugs"
    string(6) "../CLR"
    string(11) "../Compiler"
    string(6) "../DLR"
    string(11) "../DateTime"
    string(13) "../FileSystem"
    string(7) "../Math"
    string(7) "../Misc"
    string(10) "../Objects"
    string(10) "../PHP.NET"
    string(8) "../RegEx"
    string(6) "../SPL"
    string(10) "../Strings"
    string(12) "../Variables"
    string(6) "../Xml"
    string(7) "../@PHP"
    string(9) "../Arrays"
    string(7) "../Bugs"
    string(6) "../CLR"
    string(11) "../Compiler"
    string(11) "../DateTime"
    string(6) "../DLR"
    string(13) "../FileSystem"
    string(7) "../Math"
    string(7) "../Misc"
    string(10) "../Objects"
    string(10) "../PHP.NET"
    string(8) "../RegEx"
    string(6) "../SPL"
    string(10) "../Strings"
    string(12) "../Variables"
    string(6) "../Xml"
    FileSystem/is_dir.php: SUCCEEDED
    FileSystem/is_executable.php: SUCCEEDED
    FileSystem/pathinfo.php: SUCCEEDED
    FileSystem/popen.php: SUCCEEDED
    FileSystem/readdir.php: SUCCEEDED
    FileSystem/readfile.php: SUCCEEDED
    FileSystem/readline.php: SUCCEEDED
    FileSystem/realpath.php: SUCCEEDED
    FileSystem/scandir.php: SUCCEEDED
    FileSystem/stat.php: SUCCEEDED
    FileSystem/stream_context_set_option.php: SUCCEEDED
    FileSystem/stream_copy_to_stream.php: SUCCEEDED
    FileSystem/stream_copy_to_stream2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <p>Read <b>rb</b>, Write <b>wb</b>
    
    
    COPIED: <b>29808</b>
    <p>Read <b>rb</b>, Write <b>wt</b>
    
    
    COPIED: <b>29836</b>
    <p>Read <b>rb</b>, Write <b>wb</b>
    
    
    COPIED: <b>29848</b>
    <p>Read <b>rb</b>, Write <b>wt</b>
    
    
    COPIED: <b>29809</b>
    FileSystem/testinc.php: SUCCEEDED
    FileSystem/touch.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Warning: touch(): Utime failed: Bad file descriptor in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 8
    Sorry Could Not change modification time of touch.txt
    Warning: touch(): Utime failed: Bad file descriptor in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 14
    
    Warning: touch(): Utime failed: Bad file descriptor in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 16
    
    Warning: touch(): Utime failed: Bad file descriptor in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 17
    <pre>[ARRAY
      [INT (0)] => [STRING: "May 10, 2011; [00:50:21] (00h) ctime test.txt (1304981421)"]
      [INT (1)] => [STRING: "February 19, 2011; [22:06:05] (22h) mtime test.txt (1298149565)"]
      [INT (2)] => [STRING: "May 10, 2011; [00:50:21] (00h) ctime touch.txt (1304981421)"]
      [INT (3)] => [STRING: "February 19, 2011; [22:06:05] (22h) mtime touch.txt (1298149565)"]
      [INT (4)] => [STRING: "May 10, 2011; [00:50:21] (00h) atime touch.txt (1304981421)"]
      [INT (5)] => [STRING: "February 19, 2011; [22:06:05] (22h) mtime summer.txt (1298149565)"]
      [INT (6)] => [STRING: "February 19, 2011; [22:06:05] (22h) mtime winter.txt (1298149565)"]
    ]</pre>
    Warning: touch(): Unable to access (D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\touch.txt): Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 8, column 5.
    Sorry Could Not change modification time of touch.txt
    Warning: touch(): Unable to access (D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\touch.txt): Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 14, column 1.
    
    Warning: touch(): Unable to access (D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\winter.txt): Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 16, column 1.
    
    Warning: touch(): Unable to access (D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\summer.txt): Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 17, column 1.
    <pre>[ARRAY
      [INT (0)] => [STRING: "May 10, 2011; [00:50:21] (00h) ctime test.txt (1304981421)"]
      [INT (1)] => [STRING: "February 19, 2011; [23:06:05] (23h) mtime test.txt (1298153165)"]
      [INT (2)] => [STRING: "May 10, 2011; [00:50:21] (00h) ctime touch.txt (1304981421)"]
      [INT (3)] => [STRING: "February 19, 2011; [23:06:05] (23h) mtime touch.txt (1298153165)"]
      [INT (4)] => [STRING: "May 10, 2011; [00:50:21] (00h) atime touch.txt (1304981421)"]
      [INT (5)] => [STRING: "February 19, 2011; [23:06:05] (23h) mtime summer.txt (1298153165)"]
      [INT (6)] => [STRING: "February 19, 2011; [23:06:05] (23h) mtime winter.txt (1298153165)"]
    ]</pre>
    FileSystem/tar/tar_test.php: SUCCEEDED
    FileSystem/zip/zip.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    correct
    Error: Call to undefined function: 'zip_open' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\zip\__input.txt at expression on line 3, column 1.
    Math/abs.php: SUCCEEDED
    Math/atan2.php: SUCCEEDED
    Math/base_convert.php: SUCCEEDED
    Math/bindec.php: SUCCEEDED
    Math/ceil.php: SUCCEEDED
    Math/cos.php: SUCCEEDED
    Math/decbin.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <pre>
    [double: 2294967295]
    10001000110010100110101111111111
    [double: 4294967296]
    0
    [double: 8589934590]
    11111111111111111111111111111110
    [double: 8589934590]
    11111111111111111111111111111110
    [double: 8589934591]
    11111111111111111111111111111111
    [Int: 1000.000.000.000]
    11010100101001010001000000000000
    <hr>(-1, -5435, 2.14, 0, 26)
    11111111111111111111111111111111
    11111111111111111110101011000101
    10
    0
    11010 
    </pre>
    <pre>
    [???: 2294967295]
    10001000110010100110101111111111
    [???: 4294967296]
    0
    [???: 8589934590]
    11111111111111111111111111111110
    [???: 8589934590]
    11111111111111111111111111111110
    [???: 8589934591]
    11111111111111111111111111111111
    [Int: 1000.000.000.000]
    11010100101001010001000000000000
    <hr>(-1, -5435, 2.14, 0, 26)
    11111111111111111111111111111111
    11111111111111111110101011000101
    10
    0
    11010 
    </pre>
    Math/dechex.php: SUCCEEDED
    Math/decoct.php: SUCCEEDED
    Math/deg2rad.php: SUCCEEDED
    Math/exp.php: SUCCEEDED
    Math/floor.php: SUCCEEDED
    Math/fmod.php: SUCCEEDED
    Math/hexdec.php: SUCCEEDED
    Math/max.php: SUCCEEDED
    Math/min.php: SUCCEEDED
    Math/modulo_warn.php: SUCCEEDED
    Math/octdec.php: SUCCEEDED
    Math/pow.php: SUCCEEDED
    Math/rad2deg.php: SUCCEEDED
    Math/round.php: SUCCEEDED
    Math/sin.php: SUCCEEDED
    Math/sqrt.php: SUCCEEDED
    Math/tan.php: SUCCEEDED
    Math/uniqid.php: SUCCEEDED
    Misc/calendar_extension.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0
    0
    2375840
    0
    14
    32
    2
    There are 31 days in August 2003
    There are 28 days in February 2003
    There are 29 days in February 2004
    There are 31 days in December 2034
    1748326
    1748324
    374867
    0
    322f32322f35373633
    ebe120e7f9e5ef20e4faf9f1e2
    ebe120e7f9e5ef20e427faf9f1e2
    ebe120e7f9e5ef20e420e0ecf4e9ed20faf9f1e2
    ebe120e7f9e5ef20e42720e0ecf4e9ed20faf9f1e2
    eb22e120e7f9e5ef20e4faf9f122e2
    e12720e7f9e5ef20e4faf9f122e2
    e12720e7f9e5ef20e427faf9f122e2
    e12720e7f9e5ef20e420e0ecf4e9ed20faf9f122e2
    e12720e7f9e5ef20e42720e0ecf4e9ed20faf9f122e2
    Error: Call to undefined function: 'frenchtojd' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt at expression on line 2, column 1.
    Misc/dir_read.php: SUCCEEDED
    Misc/fgetcsv%20%2327492.php: SUCCEEDED
    Misc/hash%20functions%20%2326667.php: SUCCEEDED
    Misc/ini_parse.php: SUCCEEDED
    Misc/json%20%2327838.php: SUCCEEDED
    Misc/lexer.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    T_INLINE_HTML
    311 '\r\n'
    T_OPEN_TAG
    368 '&lt;?'
    T_WHITESPACE
    371 ' \r\n\r\n'
    T_FINAL
    345 'final'
    T_WHITESPACE
    371 ' '
    T_CLASS
    353 'class'
    T_WHITESPACE
    371 ' '
    T_STRING
    307 'A'
    T_WHITESPACE
    371 ' \r\n'
        '{'
    T_WHITESPACE
    371 ' \r\n  '
    T_FUNCTION
    334 'function'
    T_WHITESPACE
    371 ' '
    T_STRING
    307 '__get'
        '('
    T_VARIABLE
    309 '$x'
        ')'
    T_WHITESPACE
    371 ' \r\n  '
        '{'
    T_WHITESPACE
    371 ' \r\n    '
    T_VARIABLE
    309 '$x'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_START_HEREDOC
    372 '&lt;&lt;&lt;EOOOOOOOOOOOOOOT\r\n'
    T_ENCAPSED_AND_WHITESPACE
    314 '         &lt;&lt;&lt;hello\r\nEOOOOOOOOOOOOOOt;\r\nEOOOOOOOOOOOOOT;\r\n'
    T_END_HEREDOC
    373 'EOOOOOOOOOOOOOOT'
        ';'
    T_WHITESPACE
    371 '\r\n\r\n    '
        '$'
    T_VARIABLE
    309 '$y'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_ARRAY
    360 'array'
    T_WHITESPACE
    371 ' '
        '('
    T_LNUMBER
    305 '1'
        ','
    T_DNUMBER
    306 '100000000000000'
        ','
    T_DNUMBER
    306 '999999999999999999999999999999999'
        ','
    T_STRING
    307 'true'
        ','
    T_STRING
    307 'false'
        ')'
        ';'
    T_WHITESPACE
    371 '\r\n    '
        '$'
        '{'
        '&quot;'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
    T_DOLLAR_OPEN_CURLY_BRACES
    374 '${'
        '$'
        '{'
    T_CONSTANT_ENCAPSED_STRING
    315 '&quot;xxx&quot;'
        '}'
        '}'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
        '&quot;'
        '}'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_LNUMBER
    305 '1'
        ';'
    T_WHITESPACE
    371 '\r\n    '
        '$'
        '{'
        '&quot;'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
    T_DOLLAR_OPEN_CURLY_BRACES
    374 '${'
        '$'
        '{'
        '&quot;'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
    T_VARIABLE
    309 '$x'
    T_ENCAPSED_AND_WHITESPACE
    314 '-&gt;$$'
    T_VARIABLE
    309 '$x0xx'
        '&quot;'
        '}'
        '}'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
        '&quot;'
        '}'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_LNUMBER
    305 '1'
        ';'
    T_WHITESPACE
    371 '\r\n  '
        '}'
    T_WHITESPACE
    371 ' \r\n'
        '}'
    T_WHITESPACE
    371 '\r\n\r\n'
    T_CLOSE_TAG
    370 '?&gt;'
    '
    '
        '&lt;?'
        ' 
    
    '
        'final'
        ' '
        'class'
        ' '
        'A'
        ' 
    '
        '{'
        ' 
      '
        'function'
        ' '
    259
    259 '__get'
        '('
        '$x'
        ')'
        ' 
      '
        '{'
        ' 
        '
        '$x'
        ' '
        '='
        ' '
        '&lt;&lt;&lt;EOOOOOOOOOOOOOOT
    '
        '         &lt;&lt;&lt;'
        'hello'
        '
    '
        'EOOOOOOOOOOOOOOt;
    '
        'EOOOOOOOOOOOOOT;
    '
        'EOOOOOOOOOOOOOOT'
        ';'
        '
    
        '
        '$'
        '$y'
        ' '
        '='
        ' '
        'array'
        ' '
        '('
        '1'
        ','
        '100000000000000'
        ','
        '999999999999999999999999999999999'
        ','
    256
    256 'true'
        ','
    257
    257 'false'
        ')'
        ';'
        '
        '
        '$'
        '{'
        '&quot;'
        'x'
        '${'
        '$'
        '{'
    -29
    -29 '&quot;xxx&quot;'
        '}'
        '}'
        'x'
        '&quot;'
        '}'
        ' '
        '='
        ' '
        '1'
        ';'
        '
        '
        '$'
        '{'
        '&quot;'
        'x'
        '${'
        '$'
        '{'
        '&quot;'
        'x'
        '$x'
        '-&gt;'
        '$'
        '$'
        '$x0xx'
        '&quot;'
        '}'
        '}'
        'x'
        '&quot;'
        '}'
        ' '
        '='
        ' '
        '1'
        ';'
        '
      '
        '}'
        ' 
    '
        '}'
        '
    
    '
        '?&gt;'
    Misc/locale.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string(1) "C"
    double(1.54)
    double(Infinity)
    654564.145400
    Sat Saturday Apr April
    --------------
    string(19) "Danish_Denmark.1252"
    double(1.54)
    double(Infinity)
    654564,145400
    lo lordag apr april
    --------------
    string(25) "Czech_Czech Republic.1250"
    double(1.54)
    double(Infinity)
    654564,145400
    so sobota IV duben
    --------------
    string(1) "C"
    float(1.54)
    float(Infinity)
    654564.145400
    Sat Saturday Apr April
    --------------
    string(19) "Danish_Denmark.1252"
    float(1.54)
    float(Infinity)
    654564,145400
    lo lordag apr april
    --------------
    string(25) "Czech_Czech Republic.1250"
    float(1.54)
    float(Infinity)
    654564,145400
    so sobota 4 duben
    --------------
    Misc/output2.php: SUCCEEDED
    Misc/parse_url%20%2327377.php: SUCCEEDED
    Misc/parse_url_at_bug.php: SUCCEEDED
    Misc/stack_trace.php: FAILED
    Script hung upNo errorsSuccess
    Expected test outputReal script output
    Unhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---> System.IndexOutOfRangeException: Index was outside the bounds of the array.
       at PHP.Core.PhpStackFrame..ctor(ScriptContext context, StackFrame frame, FrameKinds kind)
       at PHP.Core.PhpStackTrace..ctor(ScriptContext context, StackTrace clrTrace)
       at PHP.Core.PhpStackTrace..ctor(ScriptContext context, Int32 skipFrames)
       at PHP.Library.Errors.Backtrace()
       at <stack_trace.inc>.<Script>.j(ScriptContext <context>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\stack_trace.inc:line 11
       at <stack_trace.inc>.<Script>.j(Object instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.CallInternal(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at PHP.Core.ScriptContext.CallVoid(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <stack_trace.inc>.<Script>.i(ScriptContext <context>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\stack_trace.inc:line 7
       at <stack_trace.inc>.<Script>.i(Object instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.CallInternal(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at PHP.Core.ScriptContext.CallVoid(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <^0>.<Global>.<?0>.h(ScriptContext <context>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt:line 14
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack, DTypeDesc caller)
       at PHP.Core.PhpCallback.InvokeInternal(Object[] args)
       at PHP.Core.PhpCallback.Invoke(Object[] args)
       at PHP.Library.PhpArrays.Map(DTypeDesc caller, PhpCallback map, PhpArray[] arrays)
       at <__input.txt>.<Script>.<Lambda>(ScriptContext <context>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt:line 4
       at <__input.txt>.<Script>.<Lambda>(Object instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.CallInternal(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at PHP.Core.ScriptContext.CallVoid(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <__input.txt>.<Script>.f(ScriptContext <context>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt:line 7
       at <__input.txt>.<Script>.f(Object instance, PhpStack stack)
       at <__input.txt>.<Script>.<Main>(ScriptContext <context>, Dictionary`2 <locals>, DObject <self>, DTypeDesc <includer>, Boolean <request>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt:line 18
       at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)
       at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)
       --- End of inner exception stack trace ---
       at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)
       at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)
       at <Global>.Run(String[] )
    
    Misc/str_getcsv%20%2326691.php: SUCCEEDED
    Misc/tokens.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    T_REQUIRE_ONCE = 258,
    T_REQUIRE = 259,
    T_EVAL = 260,
    T_INCLUDE_ONCE = 261,
    T_INCLUDE = 262,
    T_LOGICAL_OR = 263,
    T_LOGICAL_XOR = 264,
    T_LOGICAL_AND = 265,
    T_PRINT = 266,
    T_SR_EQUAL = 267,
    T_SL_EQUAL = 268,
    T_XOR_EQUAL = 269,
    T_OR_EQUAL = 270,
    T_AND_EQUAL = 271,
    T_MOD_EQUAL = 272,
    T_CONCAT_EQUAL = 273,
    T_DIV_EQUAL = 274,
    T_MUL_EQUAL = 275,
    T_MINUS_EQUAL = 276,
    T_PLUS_EQUAL = 277,
    T_BOOLEAN_OR = 278,
    T_BOOLEAN_AND = 279,
    T_IS_NOT_IDENTICAL = 280,
    T_IS_IDENTICAL = 281,
    T_IS_NOT_EQUAL = 282,
    T_IS_EQUAL = 283,
    T_IS_GREATER_OR_EQUAL = 284,
    T_IS_SMALLER_OR_EQUAL = 285,
    T_SR = 286,
    T_SL = 287,
    T_INSTANCEOF = 288,
    T_UNSET_CAST = 289,
    T_BOOL_CAST = 290,
    T_OBJECT_CAST = 291,
    T_ARRAY_CAST = 292,
    T_STRING_CAST = 293,
    T_DOUBLE_CAST = 294,
    T_INT_CAST = 295,
    T_DEC = 296,
    T_INC = 297,
    T_CLONE = 298,
    T_NEW = 299,
    T_EXIT = 300,
    T_IF = 301,
    T_ELSEIF = 302,
    T_ELSE = 303,
    T_ENDIF = 304,
    T_LNUMBER = 305,
    T_DNUMBER = 306,
    T_STRING = 307,
    T_STRING_VARNAME = 308,
    T_VARIABLE = 309,
    T_NUM_STRING = 310,
    T_INLINE_HTML = 311,
    T_CHARACTER = 312,
    T_BAD_CHARACTER = 313,
    T_ENCAPSED_AND_WHITESPACE = 314,
    T_CONSTANT_ENCAPSED_STRING = 315,
    T_ECHO = 316,
    T_DO = 317,
    T_WHILE = 318,
    T_ENDWHILE = 319,
    T_FOR = 320,
    T_ENDFOR = 321,
    T_FOREACH = 322,
    T_ENDFOREACH = 323,
    T_DECLARE = 324,
    T_ENDDECLARE = 325,
    T_AS = 326,
    T_SWITCH = 327,
    T_ENDSWITCH = 328,
    T_CASE = 329,
    T_DEFAULT = 330,
    T_BREAK = 331,
    T_CONTINUE = 332,
    T_GOTO = 333,
    T_FUNCTION = 334,
    T_CONST = 335,
    T_RETURN = 336,
    T_TRY = 337,
    T_CATCH = 338,
    T_THROW = 339,
    T_USE = 340,
    T_GLOBAL = 341,
    T_PUBLIC = 342,
    T_PROTECTED = 343,
    T_PRIVATE = 344,
    T_FINAL = 345,
    T_ABSTRACT = 346,
    T_STATIC = 347,
    T_VAR = 348,
    T_UNSET = 349,
    T_ISSET = 350,
    T_EMPTY = 351,
    T_HALT_COMPILER = 352,
    T_CLASS = 353,
    T_INTERFACE = 354,
    T_EXTENDS = 355,
    T_IMPLEMENTS = 356,
    T_OBJECT_OPERATOR = 357,
    T_DOUBLE_ARROW = 358,
    T_LIST = 359,
    T_ARRAY = 360,
    T_CLASS_C = 361,
    T_METHOD_C = 362,
    T_FUNC_C = 363,
    T_LINE = 364,
    T_FILE = 365,
    T_COMMENT = 366,
    T_DOC_COMMENT = 367,
    T_OPEN_TAG = 368,
    T_OPEN_TAG_WITH_ECHO = 369,
    T_CLOSE_TAG = 370,
    T_WHITESPACE = 371,
    T_START_HEREDOC = 372,
    T_END_HEREDOC = 373,
    T_DOLLAR_OPEN_CURLY_BRACES = 374,
    T_CURLY_OPEN = 375,
    T_PAAMAYIM_NEKUDOTAYIM = 376,
    T_DOUBLE_COLON = 376,
    T_NAMESPACE = 377,
    T_NS_C = 378,
    T_DIR = 379,
    T_NS_SEPARATOR = 380,
    T_INCLUDE = 129,
    T_INCLUDE_ONCE = 130,
    T_EVAL = 131,
    T_REQUIRE = 132,
    T_REQUIRE_ONCE = 133,
    T_LOGICAL_OR = 136,
    T_LOGICAL_XOR = 137,
    T_LOGICAL_AND = 138,
    T_PRINT = 139,
    T_PLUS_EQUAL = 140,
    T_MINUS_EQUAL = 141,
    T_MUL_EQUAL = 142,
    T_DIV_EQUAL = 143,
    T_CONCAT_EQUAL = 144,
    T_MOD_EQUAL = 145,
    T_AND_EQUAL = 146,
    T_OR_EQUAL = 147,
    T_XOR_EQUAL = 148,
    T_SL_EQUAL = 149,
    T_SR_EQUAL = 150,
    T_BOOLEAN_OR = 151,
    T_BOOLEAN_AND = 152,
    T_IS_EQUAL = 153,
    T_IS_NOT_EQUAL = 154,
    T_IS_IDENTICAL = 155,
    T_IS_NOT_IDENTICAL = 156,
    T_IS_SMALLER_OR_EQUAL = 157,
    T_IS_GREATER_OR_EQUAL = 158,
    T_SL = 159,
    T_SR = 160,
    T_INC = 161,
    T_DEC = 162,
    T_NEW = 164,
    T_INSTANCEOF = 165,
    T_CLONE = 167,
    T_LNUMBER = 168,
    T_DNUMBER = 170,
    T_STRING = 171,
    T_STRING_VARNAME = 172,
    T_VARIABLE = 173,
    T_NUM_STRING = 174,
    T_INLINE_HTML = 175,
    T_CHARACTER = 176,
    T_BAD_CHARACTER = 177,
    T_ENCAPSED_AND_WHITESPACE = 178,
    T_CONSTANT_ENCAPSED_STRING = 179,
    T_EXIT = 180,
    T_IF = 181,
    T_ELSEIF = 182,
    T_ELSE = 183,
    T_ENDIF = 184,
    T_ECHO = 185,
    T_DO = 186,
    T_WHILE = 187,
    T_ENDWHILE = 188,
    T_FOR = 189,
    T_ENDFOR = 190,
    T_FOREACH = 191,
    T_ENDFOREACH = 192,
    T_AS = 193,
    T_SWITCH = 194,
    T_ENDSWITCH = 195,
    T_CASE = 196,
    T_DEFAULT = 197,
    T_BREAK = 198,
    T_CONTINUE = 199,
    T_FUNCTION = 200,
    T_CONST = 201,
    T_RETURN = 202,
    T_GLOBAL = 203,
    T_STATIC = 204,
    T_VAR = 205,
    T_UNSET = 206,
    T_ISSET = 207,
    T_EMPTY = 208,
    T_CLASS = 209,
    T_EXTENDS = 210,
    T_OBJECT_OPERATOR = 211,
    T_DOUBLE_ARROW = 212,
    T_LIST = 213,
    T_ARRAY = 214,
    T_CLASS_C = 215,
    T_METHOD_C = 216,
    T_FUNC_C = 217,
    T_LINE = 218,
    T_FILE = 219,
    T_DIR = 220,
    T_COMMENT = 221,
    T_DOC_COMMENT = 222,
    T_OPEN_TAG = 227,
    T_OPEN_TAG_WITH_ECHO = 228,
    T_CLOSE_TAG = 229,
    T_WHITESPACE = 230,
    T_START_HEREDOC = 231,
    T_END_HEREDOC = 232,
    T_DOLLAR_OPEN_CURLY_BRACES = 233,
    T_CURLY_OPEN = 234,
    T_DOUBLE_COLON = 235,
    T_PAAMAYIM_NEKUDOTAYIM = 235,
    T_GOTO = 237,
    T_TRY = 238,
    T_CATCH = 239,
    T_THROW = 240,
    T_INTERFACE = 241,
    T_IMPLEMENTS = 242,
    T_ABSTRACT = 243,
    T_FINAL = 244,
    T_PRIVATE = 245,
    T_PROTECTED = 246,
    T_PUBLIC = 247,
    T_BOOL_CAST = 287,
    T_INT_CAST = 290,
    T_DOUBLE_CAST = 296,
    T_STRING_CAST = 299,
    T_ARRAY_CAST = 302,
    T_OBJECT_CAST = 303,
    T_UNSET_CAST = 304,
    T_HALT_COMPILER = 351,
    Misc/user_error_handlers.php: SUCCEEDED
    Objects/accessing%20property%20line%20number%20%2326052.php: SUCCEEDED
    Objects/conditional1.php: SUCCEEDED
    Objects/conditional2.php: SUCCEEDED
    Objects/conditional_base_class.php: SUCCEEDED
    Objects/constant_test.php: SUCCEEDED
    Objects/evaled_parent.php: SUCCEEDED
    Objects/getter_setter_bug28444.php: SUCCEEDED
    Objects/instanceof.php: SUCCEEDED
    Objects/new_via_unknown_ctor.php: SUCCEEDED
    Objects/object_creation_test.php: SUCCEEDED
    Objects/overrides%20%231285.php: SUCCEEDED
    Objects/static_field_test.php: SUCCEEDED
    Objects/static_inheritence.php: SUCCEEDED
    Objects/static_method_test.php: SUCCEEDED
    Objects/static_object_vars.php: SUCCEEDED
    Objects/sys_class_const.php: SUCCEEDED
    Objects/this2.php: SUCCEEDED
    Objects/__invoke.php: SUCCEEDED
    RegEx/backreferences.php: SUCCEEDED
    RegEx/dolar_escape.php: SUCCEEDED
    RegEx/ereg.php: SUCCEEDED
    RegEx/escaped_unicode.php: SUCCEEDED
    RegEx/namedbackref.php: SUCCEEDED
    RegEx/namedgroups.php: SUCCEEDED
    RegEx/namedgroups1.php: SUCCEEDED
    RegEx/namedgroups2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Warning: preg_match_all(): Numeric named subpatterns are not allowed in D:\Documents\Projects\Phalanger\Main\Testing\Tests\RegEx\__input.txt on line 6
    array(0) {
    }
    array(2) {
      [0]=>
      array(2) {
        [0]=>
        string(23) "flux.transitions.bars3d"
        [1]=>
        string(21) "flux.transitions.wrap"
      }
      [1]=>
      array(2) {
        [0]=>
        string(0) ""
        [1]=>
        string(0) ""
      }
    }
    RegEx/preg_match_unmatched_groups.php: SUCCEEDED
    RegEx/preg_replace_eval.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ab"01300 as"00da sd"0asdsa das asd 11asd a1sd a
    ab"01300 as"00da sd"0(aasdasdkjask,$a,\,\l,a,s,d,a,s,d,k,j,a,s,${120})(ldjaklsdjalk,$l,\,\l,d,j,a,k,l,s,d,j,a,l,${120})djdsa das asd 11asd a1sd a
    ab"01300 as"00da sd"0asdsa das asd 11asd a1sd a
    ab"01300 as"00da sd"0(aasdasdkjask,$a,\,\l,a,s,d,a,s,d,k,j,,,${120})(ldjaklsdjalk,$l,\,\l,d,j,a,k,l,s,d,j,,,${120})djdsa das asd 11asd a1sd a
    RegEx/regexp-sql.php: SUCCEEDED
    RegEx/regexp_smiles.php: SUCCEEDED
    RegEx/Perl/cache.php: SUCCEEDED
    RegEx/Perl/grep1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      [3] => string(3) "1.5"
      [6] => string(5) "58.54"
    }
    Notice: preg_grep(): Array to string conversion in D:\Documents\Projects\Phalanger\Main\Testing\Tests\RegEx\Perl\__input.txt at expression on line 5, column 1.
    array(2) {
      [3]=>
      string(3) "1.5"
      [6]=>
      string(5) "58.54"
    }
    RegEx/Perl/grep2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Food  array
    (
      [0] => apple
      [1] => banana
      [2] => squid
      [3] => pear
    )
    Fruit array
    (
      [0] => apple
      [1] => banana
      [3] => pear
    )
    Food  Array
    (
        [0] => apple
        [1] => banana
        [2] => squid
        [3] => pear
    )
    Fruit Array
    (
        [0] => apple
        [1] => banana
        [3] => pear
    )
    RegEx/Perl/match1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array [empty]
    array
    (
      [0] => array
      (
        [0] => def
        [1] => 3
      )
    )
    Array
    (
    )
    Array
    (
        [0] => Array
        (
            [0] => def
            [1] => 3
        )
    
    )
    RegEx/Perl/match10.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    (
      [0] => 1231
      [1] => 1
      [2] => 23
      [3] => 1
    )
    Array
    (
        [0] => 1231
        [1] => 1
        [2] => 23
        [3] => 1
    )
    RegEx/Perl/match2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    (
      [0] => array
      (
        [0] => def
        [1] => 0
      )
    )
    Array
    (
        [0] => Array
        (
            [0] => def
            [1] => 0
        )
    
    )
    RegEx/Perl/match3.php: SUCCEEDED
    RegEx/Perl/match4.php: SUCCEEDED
    RegEx/Perl/match5.php: SUCCEEDED
    RegEx/Perl/match6.php: SUCCEEDED
    RegEx/Perl/match7.php: SUCCEEDED
    RegEx/Perl/match8.php: SUCCEEDED
    RegEx/Perl/match9.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    (
      [0] => 209.6.145.47 - - [22/Nov/2003:19:02:30 -0500] "GET /dir/doc.htm HTTP/1.0" 200 6776 "http://search.yahoo.com/search?p=key+words=UTF-8" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)"
      [1] => 209.6.145.47
      [2] => -
      [3] => -
      [4] => 22/Nov/2003:19:02:30 -0500
      [5] => GET
      [6] => /dir/doc.htm
      [7] => HTTP
      [8] => 1.0
      [9] => 200
      [10] => 6776
      [11] => "http://search.yahoo.com/search?p=key+words=UTF-8"
      [12] => "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)"
    )
    Array
    (
        [0] => 209.6.145.47 - - [22/Nov/2003:19:02:30 -0500] "GET /dir/doc.htm HTTP/1.0" 200 6776 "http://search.yahoo.com/search?p=key+words=UTF-8" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)"
        [1] => 209.6.145.47
        [2] => -
        [3] => -
        [4] => 22/Nov/2003:19:02:30 -0500
        [5] => GET
        [6] => /dir/doc.htm
        [7] => HTTP
        [8] => 1.0
        [9] => 200
        [10] => 6776
        [11] => "http://search.yahoo.com/search?p=key+words=UTF-8"
        [12] => "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)"
    )
    RegEx/Perl/match_all1.php: SUCCEEDED
    RegEx/Perl/match_all2.php: SUCCEEDED
    RegEx/Perl/match_all3.php: SUCCEEDED
    RegEx/Perl/match_all4.php: SUCCEEDED
    RegEx/Perl/match_dollar.php: SUCCEEDED
    RegEx/Perl/overflow.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string("kfkaj +j k45´┐Ż´┐Ż´┐Ż´┐Ż´┐Ż3#$%^&kjakfjkaj|kfj")
    string("kfkaj +j k45�����3#$%^&kjakfjkaj|kfj")
    RegEx/Perl/quote1.php: SUCCEEDED
    RegEx/Perl/quote2.php: SUCCEEDED
    RegEx/Perl/quote3.php: SUCCEEDED
    RegEx/Perl/replace1.php: SUCCEEDED
    RegEx/Perl/replace2.php: SUCCEEDED
    RegEx/Perl/replace3.php: SUCCEEDED
    RegEx/Perl/replace4.php: SUCCEEDED
    RegEx/Perl/replace5.php: SUCCEEDED
    RegEx/Perl/replace6.php: SUCCEEDED
    RegEx/Perl/replace7.php: SUCCEEDED
    RegEx/Perl/replace8.php: SUCCEEDED
    RegEx/Perl/replace9.php: SUCCEEDED
    RegEx/Perl/replace_callback1.php: SUCCEEDED
    RegEx/Perl/replace_callback2.php: SUCCEEDED
    RegEx/Perl/split1.php: SUCCEEDED
    RegEx/Perl/split2.php: SUCCEEDED
    RegEx/Perl/split3.php: SUCCEEDED
    RegEx/Perl/split4.php: SUCCEEDED
    RegEx/Perl/split5.php: SUCCEEDED
    RegEx/Perl/split6.php: SUCCEEDED
    RegEx/Perl/ungreedy.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    aaa
    a
    aaa
    
    a
    aa
    aaa
    aa
    aaa
    aaa
    a
    aaa
    a
    a
    aa
    aaa
    aa
    aaa
    RegEx/Perl/unsuccessful-preg_match_all.php: SUCCEEDED
    RegEx/Perl/withoutdelimiters.php: SUCCEEDED
    SPL/ArrayAccess_offsetExists.php: SUCCEEDED
    SPL/Autoload_ctor.php: SUCCEEDED
    SPL/Autoload_extends.php: SUCCEEDED
    SPL/exceptions.php: SUCCEEDED
    Strings/addcslashes.php: SUCCEEDED
    Strings/addslashes.php: SUCCEEDED
    Strings/chunk_split.php: SUCCEEDED
    Strings/concat.php: SUCCEEDED
    Strings/count_chars.php: SUCCEEDED
    Strings/crc32.php: SUCCEEDED
    Strings/crypt.php: SUCCEEDED
    Strings/crypt2.php: SUCCEEDED
    Strings/echo.php: SUCCEEDED
    Strings/explode.php: SUCCEEDED
    Strings/get_html_translation_table.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <hr>[&] => &amp;
    [>] => &gt;
    [<] => &lt;
    ["] => &quot;
    <hr>Hallo &amp; &lt;Frau&gt; &amp; Kr&iuml;&iquest;&frac12;mer
    <hr>[&] => &amp;
    [>] => &gt;
    [<] => &lt;
    ["] => &quot;
    <hr>Hallo &amp; &lt;Frau&gt; &amp; Kr�mer
    Strings/mb_strlen.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Call to undefined function mb_strlen() in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 4
    Error: Call to undefined function: 'mb_strlen' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 4, column 1.
    Strings/nl2br.php: SUCCEEDED
    Strings/pack.php: SUCCEEDED
    Strings/pos.php: SUCCEEDED
    Strings/runtime-quotes.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    fread = (x''y"z)
    fgets = (x''y"z)
    file[0] = (x''y"z)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    
    Warning: fopen(runtime-quotes2.txt): failed to open stream: Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 33
    
    Warning: fwrite() expects parameter 1 to be resource, boolean given in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 35
    fwrite = ()
    
    Warning: fputs() expects parameter 1 to be resource, boolean given in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 38
    fputs = ()
    
    Warning: fclose() expects parameter 1 to be resource, boolean given in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 41
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (x'y"z)
    fgets = (x'y"z)
    file[0] = (x'y"z)
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (a\'b"\\ca\)
    fgets = (a\'b"\\ca\'b"\\c)
    file[0] = (a\'b"\\ca\'b"\\c)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    e'e
    e''e
    e'e
    e'e
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    e'e
    e'e
    e'e
    e'e
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    fread = (x''y"z)
    fgets = (x''y"z)
    file[0] = (x''y"z)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    
    Warning: fopen(): Unable to access (D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\runtime-quotes2.txt): Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 33, column 3.
    
    Warning: Cannot convert boolean to resource implicitly in a call to function fwrite() in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 35, column 3.
    fwrite = (0)
    
    Warning: Cannot convert boolean to resource implicitly in a call to function fputs() in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 38, column 3.
    fputs = (0)
    
    Warning: Cannot convert boolean to resource implicitly in a call to function fclose() in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 41, column 3.
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (x'y"z)
    fgets = (x'y"z)
    file[0] = (x'y"z)
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (a\'b"\\ca\)
    fgets = (a\'b"\\ca\'b"\\c)
    file[0] = (a\'b"\\ca\'b"\\c)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    e'e
    e''e
    e'e
    e'e
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    e'e
    e'e
    e'e
    e'e
    Strings/sprintf.php: SUCCEEDED
    Strings/sprintf2.php: SUCCEEDED
    Strings/strtr.php: SUCCEEDED
    Strings/str_ireplace.php: SUCCEEDED
    Strings/str_replace.php: SUCCEEDED
    Strings/str_word_count.php: SUCCEEDED
    Strings/substr_operations.php: SUCCEEDED
    Strings/wordwrap.php: SUCCEEDED
    Variables/advanced_serialize.php: SUCCEEDED
    Variables/arguments.php: SUCCEEDED
    Variables/assign_copy.php: SUCCEEDED
    Variables/bitwise.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "00"
    string(2) "31"
    string(2) "31"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    0
    0
    0
    5
    0
    5
    40
    5
    45
    string(48) "000000000000000000000000000000000000000000000000"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(14) "31323331323331"
    string(2) "30"
    string(14) "31323331323331"
    string(16) "3635343635343536"
    string(2) "30"
    string(16) "3635343635343536"
    string(14) "337a5e8be43d7a"
    string(14) "00002130120201"
    string(48) "337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42"
    string(16) "347d598ce33a7e77"
    string(16) "0200243214040100"
    string(48) "367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42"
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "00"
    string(2) "31"
    string(2) "31"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    0
    -9223372036854775808
    -9223372036854775808
    -9223372036854775803
    0
    -9223372036854775803
    40
    5
    45
    string(48) "000000000000000000000000000000000000000000000000"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(14) "31323331323331"
    string(2) "30"
    string(14) "31323331323331"
    string(16) "3635343635343536"
    string(2) "30"
    string(16) "3635343635343536"
    string(14) "337a5e8be43d7a"
    string(14) "00002130120201"
    string(48) "337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42"
    string(16) "347d598ce33a7e77"
    string(16) "0200243214040100"
    string(48) "367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42"
    Variables/class_constants.php: SUCCEEDED
    Variables/comparisons.php: SUCCEEDED
    Variables/constant.php: SUCCEEDED
    Variables/constants_defined.php: SUCCEEDED
    Variables/extract%20refs.php: SUCCEEDED
    Variables/extract.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    EXTR_PREFIX_ALL
    integer(4)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
      'prefix_non_existent' => integer(1)
    }
    <hr>EXTR_PREFIX_INVALID
    integer(5)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => integer(2)
      'non_existent' => integer(1)
      'prefix_' => integer(1)
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => 'hello'
    }
    <hr>EXTR_PREFIX_SAME
    integer(3)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'non_existent' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>EXTR_PREFIX_IF_EXISTS
    integer(3)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>
    EXTR_PREFIX_ALL
    integer(4)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
      'prefix_non_existent' => integer(1)
    }
    <hr>EXTR_PREFIX_INVALID
    integer(5)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => integer(2)
      'non_existent' => integer(1)
      'prefix_' => integer(1)
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => 'hello'
    }
    <hr>EXTR_PREFIX_SAME
    integer(4)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'non_existent' => integer(1)
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>EXTR_PREFIX_IF_EXISTS
    integer(3)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>
    Variables/func_get_args.php: SUCCEEDED
    Variables/is_number.php: SUCCEEDED
    Variables/serialize.php: SUCCEEDED
    Variables/unserialize_objects.php: SUCCEEDED
    Variables/var_dumping.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Array
    (
        [0] => 1
        [1] => 
        [2] => 1
        [3] => 1.2
        [4] => 
        [5] => asdas
        [6] => Array
            (
                [0] => 1
            )
    
        [7] => stdClass Object
            (
            )
    
        [8] => Resource id #1
    )
    array(9) {
      [0]=>
      bool(true)
      [1]=>
      bool(false)
      [2]=>
      int(1)
      [3]=>
      float(1.2)
      [4]=>
      NULL
      [5]=>
      string(5) "asdas"
      [6]=>
      array(1) {
        [0]=>
        int(1)
      }
      [7]=>
      object(stdClass)#1 (0) {
      }
      [8]=>
      resource(1) of type (stream)
    }
    array (
      0 => true,
      1 => false,
      2 => 1,
      3 => 1.2,
      4 => NULL,
      5 => 'asdas',
      6 => 
      array (
        0 => 1,
      ),
      7 => 
      stdClass::__set_state(array(
      )),
      8 => NULL,
    )
    Array
    (
        [0] => 1
        [1] => 
        [2] => 1
        [3] => 1.2
        [4] => 
        [5] => asdas
        [6] => Array
        (
            [0] => 1
        )
    
        [7] => stdClass Object
        (
        )
    
        [8] => resource id #4
    
    )
    array(9) {
      [0]=>
      bool(true)
      [1]=>
      bool(false)
      [2]=>
      int(1)
      [3]=>
      float(1.2)
      [4]=>
      NULL
      [5]=>
      string(5) "asdas"
      [6]=>
      array(1) {
        [0]=>
        int(1)
      }
      [7]=>
      object(stdClass)(0) {
      }
      [8]=>
      resource(4) of type (stream)
    }
    array (
      0 => true,
      1 => false,
      2 => 1,
      3 => 1.2,
      4 => NULL,
      5 => 'asdas',
      6 => array (
        0 => 1,
      ),
      7 => class stdClass
      {
    
      },
      8 => NULL,
    )
    Xml/025.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
      'foo' => 'foobar'
    }
    array
    {
      'html' => 'http://www.w3.org/1999/xhtml'
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
    }
    array
    {
      'html' => 'http://www.w3.org/1999/xhtml'
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'foo' => 'foobar'
      'baz' => 'foobarbaz'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
    }
    array
    {
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
      'baz' => 'foobarbaz'
      'foo' => 'foobar'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
      'baz' => 'foobarbaz'
      'foo' => 'foobar'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
    }
    array
    {
    }
    Xml/026.php: SUCCEEDED
    Xml/027.php: SUCCEEDED
    Xml/028.php: SUCCEEDED
    Xml/029.php: SUCCEEDED
    Xml/030.php: SUCCEEDED
    Xml/032.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    FALSE
    FALSE
    FALSE
    TRUE
    TRUE
    TRUE
    Xml/033.php: SUCCEEDED
    Xml/bug26384.php: SUCCEEDED
    Xml/bug28721.php: SUCCEEDED
    Xml/bug28817.php: SUCCEEDED
    Xml/bug32615.php: SUCCEEDED
    Xml/bug33853.php: SUCCEEDED
    Xml/bug34276.php: SUCCEEDED
    Xml/bug35342.php: SUCCEEDED
    Xml/bug36756.php: SUCCEEDED
    Xml/bug37277.php: SUCCEEDED
    Xml/dom002.php: SUCCEEDED
    Xml/dom003.php: SUCCEEDED
    Xml/dom006.php: SUCCEEDED
    Xml/dom007.php: SUCCEEDED
    Xml/dom_set_attr_node.php: SUCCEEDED
    Xml/xmlhandler.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test begins
    <br/>
    <br/>test begins
    <br/>empty begins
    <br/>empty ends
    <br/>nocontent begins
    <br/>nocontent ends
    <br/>content begins
    <br/>empty begins
    <br/>empty ends
    <br/>empty begins
    <br/>empty ends
    <br/>content ends
    <br/>empty begins
    <br/>empty ends
    <br/>empty begins
    <br/>empty ends
    <br/>test ends
    <br/>Test ends
    <br/>
    <br/>
    Test begins
    <br/>
    <br/>
    Error: Call to undefined function: 'xml_parser_create' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Xml\__input.txt at expression on line 18, column 3.
    Xml/xslt001.php: SUCCEEDED
    Xml/xslt002.php: SUCCEEDED
    Xml/xslt003.php: SUCCEEDED
    Xml/xslt004.php: SUCCEEDED
    Xml/xslt005.php: SUCCEEDED
    Xml/xslt006.php: SUCCEEDED
    Xml/xslt007.php: SUCCEEDED
    Xml/xslt010.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test 10: EXSLT Support
      
      
      Test Date : 0001-12-31Z
        year                 : 1
        leap-year            : false
        month-in-year        : 12
        month-name           : December
        month-abbreviation   : Dec
        week-in-year         : 1
        day-in-year          : 365
        day-in-month         : 31
        day-of-week-in-month : 5
        day-in-week          : 2
        day-name             : Monday
        day-abbreviation     : Mon
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : 3000-01-31
        year                 : 3000
        leap-year            : false
        month-in-year        : 1
        month-name           : January
        month-abbreviation   : Jan
        week-in-year         : 5
        day-in-year          : 31
        day-in-month         : 31
        day-of-week-in-month : 5
        day-in-week          : 6
        day-name             : Friday
        day-abbreviation     : Fri
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : 2000-02-29
        year                 : 2000
        leap-year            : true
        month-in-year        : 2
        month-name           : February
        month-abbreviation   : Feb
        week-in-year         : 9
        day-in-year          : 60
        day-in-month         : 29
        day-of-week-in-month : 5
        day-in-week          : 3
        day-name             : Tuesday
        day-abbreviation     : Tue
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : 9990001-12-31Z
        year                 : 9990001
        leap-year            : false
        month-in-year        : 12
        month-name           : December
        month-abbreviation   : Dec
        week-in-year         : 1
        day-in-year          : 365
        day-in-month         : 31
        day-of-week-in-month : 5
        day-in-week          : 2
        day-name             : Monday
        day-abbreviation     : Mon
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : -0004-02-29
        year                 : -4
        leap-year            : true
        month-in-year        : 2
        month-name           : February
        month-abbreviation   : Feb
        week-in-year         : 9
        day-in-year          : 60
        day-in-month         : 29
        day-of-week-in-month : 5
        day-in-week          : 1
        day-name             : Sunday
        day-abbreviation     : Sun
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
    Test 10: EXSLT Support
    Warning: Cannot find a script or an extension object associated with namespace 'http://exslt.org/dates-and-times'..
    
    Warning: Illegal string offset '-1' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Phalanger.inc at expression on line 7, column 6.
    Xml/xslt011.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test 11: php:function Support
    
    Warning: XSLTProcessor::transformToXml(): A PHP Object cannot be converted to a XPath-string in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Xml\__input.txt on line 18
    <?xml version="1.0"?>
    foobar - secondArg
    foobar - 
    this is from an external DomDocument
    from the Input Document
    static
    Test 11: php:function Support
    <?xml version="1.0" encoding="utf-8"?>foobar - secondArg
    foobar - 
    this is from an external DomDocument
    from the Input Document
    static
    not a DomNode object
    Xml/xslt012.php: SUCCEEDED
    ================================================ FILE: Testing/Tests/TestLogs/TestLog (2100).htm ================================================ PHP.NET Compiler test log

    PHP.NET Compiler test log

    (90%) 861 succeeded, 97 failed
    Test ResultCompiler error outputExpected test result
    @PHP/classes/array_access_001.php: SUCCEEDED
    @PHP/classes/array_access_002.php: SUCCEEDED
    @PHP/classes/array_access_003.php: SUCCEEDED
    @PHP/classes/array_access_004.php: SUCCEEDED
    @PHP/classes/array_access_005.php: SUCCEEDED
    @PHP/classes/array_access_006.php: SUCCEEDED
    @PHP/classes/array_access_007.php: SUCCEEDED
    @PHP/classes/array_access_008.php: SUCCEEDED
    @PHP/classes/array_access_009.php: SUCCEEDED
    @PHP/classes/array_access_010.php: SUCCEEDED
    @PHP/classes/array_access_011.php: SUCCEEDED
    @PHP/classes/array_access_013.php: SUCCEEDED
    @PHP/classes/assign_op_property_001.php: SUCCEEDED
    @PHP/classes/autoload_001.php: SUCCEEDED
    @PHP/classes/autoload_002.php: SUCCEEDED
    @PHP/classes/autoload_003.php: SUCCEEDED
    @PHP/classes/autoload_005.php: SUCCEEDED
    @PHP/classes/autoload_006.php: SUCCEEDED
    @PHP/classes/bug23951.php: SUCCEEDED
    @PHP/classes/bug24399.php: SUCCEEDED
    @PHP/classes/bug24445.php: SUCCEEDED
    @PHP/classes/bug26737.php: SUCCEEDED
    @PHP/classes/bug27468.php: SUCCEEDED
    @PHP/classes/bug27504.php: SUCCEEDED
    @PHP/classes/class_example.php: SUCCEEDED
    @PHP/classes/class_stdclass.php: SUCCEEDED
    @PHP/classes/clone_001.php: SUCCEEDED
    @PHP/classes/clone_002.php: SUCCEEDED
    @PHP/classes/clone_003.php: SUCCEEDED
    @PHP/classes/clone_004.php: SUCCEEDED
    @PHP/classes/clone_006.php: SUCCEEDED
    @PHP/classes/constants_scope_001.php: SUCCEEDED
    @PHP/classes/ctor_dtor.php: SUCCEEDED
    @PHP/classes/ctor_dtor_inheritance.php: SUCCEEDED
    @PHP/classes/ctor_name_clash.php: SUCCEEDED
    @PHP/classes/dereferencing_001.php: SUCCEEDED
    @PHP/classes/destructor_and_echo.php: SUCCEEDED
    @PHP/classes/destructor_and_references.php: SUCCEEDED
    @PHP/classes/destructor_inheritance.php: SUCCEEDED
    @PHP/classes/destructor_visibility_003.php: SUCCEEDED
    @PHP/classes/factory_001.php: SUCCEEDED
    @PHP/classes/factory_and_singleton_001.php: SUCCEEDED
    @PHP/classes/factory_and_singleton_002.php: SUCCEEDED
    @PHP/classes/final.php: SUCCEEDED
    @PHP/classes/incdec_property_001.php: SUCCEEDED
    @PHP/classes/incdec_property_002.php: SUCCEEDED
    @PHP/classes/incdec_property_003.php: SUCCEEDED
    @PHP/classes/incdec_property_004.php: SUCCEEDED
    @PHP/classes/inheritance.php: SUCCEEDED
    @PHP/classes/inheritance_002.php: SUCCEEDED
    @PHP/classes/interfaces_001.php: SUCCEEDED
    @PHP/classes/interface_construct.php: SUCCEEDED
    @PHP/classes/interface_doubled.php: SUCCEEDED
    @PHP/classes/interface_implemented.php: SUCCEEDED
    @PHP/classes/iterators_001.php: SUCCEEDED
    @PHP/classes/iterators_002.php: SUCCEEDED
    @PHP/classes/iterators_003.php: SUCCEEDED
    @PHP/classes/iterators_004.php: SUCCEEDED
    @PHP/classes/iterators_006.php: SUCCEEDED
    @PHP/classes/iterators_007.php: SUCCEEDED
    @PHP/classes/object_reference_001.php: SUCCEEDED
    @PHP/classes/private_001.php: SUCCEEDED
    @PHP/classes/private_002.php: SUCCEEDED
    @PHP/classes/private_003.php: SUCCEEDED
    @PHP/classes/private_003b.php: SUCCEEDED
    @PHP/classes/private_004.php: SUCCEEDED
    @PHP/classes/private_004b.php: SUCCEEDED
    @PHP/classes/private_005.php: SUCCEEDED
    @PHP/classes/private_005b.php: SUCCEEDED
    @PHP/classes/private_006.php: SUCCEEDED
    @PHP/classes/private_006b.php: SUCCEEDED
    @PHP/classes/private_007.php: SUCCEEDED
    @PHP/classes/private_007b.php: SUCCEEDED
    @PHP/classes/private_members.php: SUCCEEDED
    @PHP/classes/private_redeclare.php: SUCCEEDED
    @PHP/classes/protected_001.php: SUCCEEDED
    @PHP/classes/protected_001b.php: SUCCEEDED
    @PHP/classes/protected_002.php: SUCCEEDED
    @PHP/classes/serialize_001.php: SUCCEEDED
    @PHP/classes/singleton_001.php: SUCCEEDED
    @PHP/classes/static_properties_001.php: SUCCEEDED
    @PHP/classes/type_hinting_001.php: SUCCEEDED
    @PHP/classes/type_hinting_003.php: SUCCEEDED
    @PHP/classes/visibility_000c.php: SUCCEEDED
    @PHP/classes/visibility_001c.php: SUCCEEDED
    @PHP/classes/visibility_002c.php: SUCCEEDED
    @PHP/classes/visibility_003a.php: SUCCEEDED
    @PHP/classes/visibility_003c.php: SUCCEEDED
    @PHP/classes/visibility_004a.php: SUCCEEDED
    @PHP/classes/visibility_004b.php: SUCCEEDED
    @PHP/classes/visibility_004c.php: SUCCEEDED
    @PHP/classes/visibility_005.php: SUCCEEDED
    @PHP/classes/__call_001.php: SUCCEEDED
    @PHP/classes/__set_data_corrupt.php: SUCCEEDED
    @PHP/classes/__set__get_001.php: SUCCEEDED
    @PHP/classes/__set__get_004.php: SUCCEEDED
    @PHP/classes/__set__get_005.php: SUCCEEDED
    @PHP/date/bug17988.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2002-06-25 12:18:48
    2002-06-25 14:18:48
    2002-06-25 13:18:48
    2002-06-25 12:18:48
    2002-06-25 18:18:48
    2002-06-25 14:18:48
    2002-06-25 14:18:48
    2002-06-25 18:18:48
    2002-06-25 10:18:48
    2002-06-25 17:18:48
    2002-06-25 11:18:48
    2002-06-25 17:48:48
    2002-06-25 10:48:48
    2002-06-25 14:18:48
    2002-06-25 14:18:48
    2002-06-25 13:18:48
    2002-06-25 12:18:48
    2002-06-25 18:18:48
    2002-06-25 14:18:48
    2002-06-25 14:18:48
    2002-06-25 18:18:48
    2002-06-25 10:18:48
    2002-06-25 17:18:48
    2002-06-25 11:18:48
    2002-06-25 17:48:48
    2002-06-25 10:48:48
    @PHP/date/bug26317.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2003-11-19 17:20:42
    2003-11-19 17:20:42
    2003-11-19 17:20:42
    2003-11-19 16:20:42
    2003-11-19 16:20:42
    2003-11-19 16:20:42
    @PHP/date/bug26320.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2003-11-19 12:30:42
    2003-11-19 13:30:42
    2003-11-19 12:30:42
    2003-11-19 12:30:42
    @PHP/date/bug28088.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    The following line rightly shows the correct date time:
    04/04/04 2145
    But the following line fails to show the correct date time:
    04/03/04 2245
    The following line rightly shows the correct date time:
    04/04/04 2345
    But the following line fails to show the correct date time:
    04/04/04 0045
    @PHP/date/bug28599.php: SUCCEEDED
    @PHP/date/bug29150.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2005-06-19 22:00:00
    2005-06-20 00:00:00
    @PHP/date/bug29585.php: SUCCEEDED
    @PHP/date/bug29595.php: SUCCEEDED
    @PHP/date/bug33056.php: SUCCEEDED
    @PHP/date/bug33452.php: SUCCEEDED
    @PHP/date/bug33562.php: SUCCEEDED
    @PHP/date/bug33563.php: SUCCEEDED
    @PHP/date/bug33578.php: SUCCEEDED
    @PHP/date/bug33869.php: SUCCEEDED
    @PHP/date/bug34676.php: SUCCEEDED
    @PHP/date/bug34771.php: SUCCEEDED
    @PHP/date/bug35143.php: SUCCEEDED
    @PHP/date/bug35414.php: SUCCEEDED
    @PHP/date/bug35422.php: SUCCEEDED
    @PHP/date/bug35425.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    integer(42)
    integer(1)
    integer(1)
    integer(1)
    integer(1)
    integer(0)
    integer(0)
    integer(1)
    integer(1)
    integer(31)
    integer(1104537661)
    integer(6)
    integer(53)
    integer(5)
    integer(2005)
    integer(0)
    integer(3600)
    integer(292)
    integer(1)
    integer(1)
    integer(1)
    integer(1)
    integer(0)
    integer(0)
    integer(1)
    integer(1)
    integer(31)
    integer(1104559261)
    integer(6)
    integer(53)
    integer(5)
    integer(2005)
    integer(0)
    integer(-18000)
    @PHP/date/bug35456.php: SUCCEEDED
    @PHP/date/bug35624.php: SUCCEEDED
    @PHP/date/bug35630.php: SUCCEEDED
    @PHP/date/bug35699.php: SUCCEEDED
    @PHP/date/bug35705.php: SUCCEEDED
    @PHP/date/bug35885.php: SUCCEEDED
    @PHP/date/bug35887.php: SUCCEEDED
    @PHP/date/date.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    c: 2003-01-23T13:20:59+01:00
    r: Thu, 23 Jan 2003 13:20:59 +0100
    c: 2003-01-23T13:20:59+01:00
    r: Thu, 23 Jan 2003 13:20:59 +0100
    c: 2003-01-23T12:20:59+00:00
    r: Thu, 23 Jan 2003 12:20:59 +0000
    c: 2003-01-23T13:20:59+01:00
    r: Thu, 23 Jan 2003 13:20:59 +0100
    @PHP/date/date_create-1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\date\__input.txt on line 28
    SKIP
    @PHP/date/date_create-2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\date\__input.txt on line 6
    SKIP
    @PHP/date/date_default_timezone_get-3.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Europe/Prague
    America/Chicago
    Europe/Rome
    America/Chicago
    @PHP/date/date_modify-1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\date\__input.txt on line 6
    SKIP
    @PHP/date/date_modify-2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\date\__input.txt on line 6
    SKIP
    @PHP/date/default-timezone-1.php: SUCCEEDED
    @PHP/date/default-timezone-2.php: SUCCEEDED
    @PHP/date/format-negative-timestamp.php: SUCCEEDED
    @PHP/date/strtotime.php: SUCCEEDED
    @PHP/date/timezone-configuration.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    1119125744
    1119125744
    1119125744
    1119125744
    1119129344
    1119125744
    @PHP/doc_examples/test001.php: SUCCEEDED
    @PHP/doc_examples/test002.php: SUCCEEDED
    @PHP/doc_examples/test003.php: SUCCEEDED
    @PHP/doc_examples/test004.php: SUCCEEDED
    @PHP/doc_examples/test005.php: SUCCEEDED
    @PHP/doc_examples/test006.php: SUCCEEDED
    @PHP/doc_examples/test007.php: SUCCEEDED
    @PHP/doc_examples/test008.php: SUCCEEDED
    @PHP/doc_examples/test009.php: SUCCEEDED
    @PHP/doc_examples/test010.php: SUCCEEDED
    @PHP/doc_examples/test011.php: SUCCEEDED
    @PHP/doc_examples/test013.php: SUCCEEDED
    @PHP/doc_examples/test014.php: SUCCEEDED
    @PHP/doc_examples/test015.php: SUCCEEDED
    @PHP/doc_examples/test016.php: SUCCEEDED
    @PHP/doc_examples/test017.php: SUCCEEDED
    @PHP/doc_examples/test018.php: SUCCEEDED
    @PHP/doc_examples/test019.php: SUCCEEDED
    @PHP/doc_examples/test020.php: SUCCEEDED
    @PHP/doc_examples/test021.php: SUCCEEDED
    @PHP/doc_examples/test022.php: SUCCEEDED
    @PHP/doc_examples/test023.php: SUCCEEDED
    @PHP/doc_examples/test024.php: SUCCEEDED
    @PHP/doc_examples/test025.php: SUCCEEDED
    @PHP/doc_examples/test026.php: SUCCEEDED
    @PHP/doc_examples/test027.php: SUCCEEDED
    @PHP/doc_examples/test028.php: SUCCEEDED
    @PHP/doc_examples/test029.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ´┐Żauky
    �auky
    @PHP/doc_examples/test030.php: SUCCEEDED
    @PHP/doc_examples/test031.php: SUCCEEDED
    @PHP/doc_examples/test032.php: SUCCEEDED
    @PHP/doc_examples/test033.php: SUCCEEDED
    @PHP/doc_examples/test034.php: SUCCEEDED
    @PHP/doc_examples/test035.php: SUCCEEDED
    @PHP/doc_examples/test036.php: SUCCEEDED
    @PHP/doc_examples/test037.php: SUCCEEDED
    @PHP/doc_examples/test038.php: SUCCEEDED
    @PHP/doc_examples/test039.php: SUCCEEDED
    @PHP/doc_examples/test040.php: SUCCEEDED
    @PHP/doc_examples/test041.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    call_user_func():
    hello world!
    Strict Standards: call_user_func(): Non-static method MyClass::myCallbackMethod() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\doc_examples\__input.txt at expression on line 17, column 1.
    Hello World!Hello World!
    @PHP/doc_examples/test042.php: SUCCEEDED
    @PHP/doc_examples/test043.php: SUCCEEDED
    @PHP/doc_examples/test044.php: SUCCEEDED
    @PHP/doc_examples/test045.php: SUCCEEDED
    @PHP/doc_examples/test046.php: SUCCEEDED
    @PHP/doc_examples/test047.php: SUCCEEDED
    @PHP/doc_examples/test048.php: SUCCEEDED
    @PHP/doc_examples/test049.php: SUCCEEDED
    @PHP/doc_examples/test050.php: SUCCEEDED
    @PHP/doc_examples/test051.php: SUCCEEDED
    @PHP/doc_examples/test052.php: SUCCEEDED
    @PHP/doc_examples/test053.php: SUCCEEDED
    @PHP/doc_examples/test054.php: SUCCEEDED
    @PHP/doc_examples/test055.php: SUCCEEDED
    @PHP/doc_examples/test056.php: SUCCEEDED
    @PHP/doc_examples/test057.php: SUCCEEDED
    @PHP/doc_examples/test058.php: SUCCEEDED
    @PHP/doc_examples/test059.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    Deprecated: Assigning the return value of new by reference is deprecated in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\doc_examples\__input.txt on line 4
    NULL
    object(stdClass)#1 (0) {
    }
    NULL
    object(stdClass)(0) {
    }
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\doc_examples\__input.txt(4,5): warning PHP0181: Assigning the return value of new by reference is deprecated
    
    @PHP/doc_examples/test060.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    Deprecated: Assigning the return value of new by reference is deprecated in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\doc_examples\__input.txt on line 9
    Static object: NULL
    Static object: NULL
    
    Static object: NULL
    Static object: object(stdClass)#3 (1) {
      ["property"]=>
      int(1)
    }
    Static object: NULL
    Static object: NULL
    
    Static object: NULL
    Static object: object(stdClass)(1) {
      ["property"]=>
      int(1)
    }
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\doc_examples\__input.txt(9,9): warning PHP0181: Assigning the return value of new by reference is deprecated
    
    @PHP/doc_examples/test061.php: SUCCEEDED
    @PHP/doc_examples/test062.php: SUCCEEDED
    @PHP/doc_examples/test063.php: SUCCEEDED
    @PHP/doc_examples/test064.php: SUCCEEDED
    @PHP/doc_examples/test065.php: SUCCEEDED
    @PHP/doc_examples/test066.php: SUCCEEDED
    @PHP/doc_examples/test067.php: SUCCEEDED
    @PHP/doc_examples/test068.php: SUCCEEDED
    @PHP/doc_examples/test069.php: SUCCEEDED
    @PHP/doc_examples/test070.php: SUCCEEDED
    @PHP/doc_examples/test071.php: SUCCEEDED
    @PHP/doc_examples/test072.php: SUCCEEDED
    @PHP/doc_examples/test073.php: SUCCEEDED
    @PHP/doc_examples/test074.php: SUCCEEDED
    @PHP/doc_examples/test075.php: SUCCEEDED
    @PHP/doc_examples/test076.php: SUCCEEDED
    @PHP/doc_examples/test077.php: SUCCEEDED
    @PHP/doc_examples/test078.php: SUCCEEDED
    @PHP/doc_examples/test079.php: SUCCEEDED
    @PHP/doc_examples/test080.php: SUCCEEDED
    @PHP/doc_examples/test081.php: SUCCEEDED
    @PHP/doc_examples/test082.php: SUCCEEDED
    @PHP/doc_examples/test083.php: SUCCEEDED
    @PHP/doc_examples/test084.php: SUCCEEDED
    @PHP/doc_examples/test085.php: SUCCEEDED
    @PHP/doc_examples/test086.php: SUCCEEDED
    @PHP/doc_examples/test087.php: SUCCEEDED
    @PHP/doc_examples/test088.php: SUCCEEDED
    @PHP/doc_examples/test089.php: SUCCEEDED
    @PHP/doc_examples/test090.php: SUCCEEDED
    @PHP/doc_examples/test091.php: SUCCEEDED
    @PHP/doc_examples/test092.php: SUCCEEDED
    @PHP/doc_examples/test093.php: SUCCEEDED
    @PHP/doc_examples/test094.php: SUCCEEDED
    @PHP/doc_examples/test095.php: SUCCEEDED
    @PHP/doc_examples/test096.php: SUCCEEDED
    @PHP/doc_examples/test097.php: SUCCEEDED
    @PHP/doc_examples/test098.php: SUCCEEDED
    @PHP/doc_examples/test099.php: SUCCEEDED
    @PHP/doc_examples/test100.php: SUCCEEDED
    @PHP/doc_examples/test102.php: SUCCEEDED
    @PHP/doc_examples/test103.php: SUCCEEDED
    @PHP/doc_examples/test104.php: SUCCEEDED
    @PHP/doc_examples/test105.php: SUCCEEDED
    @PHP/doc_examples/test107.php: SUCCEEDED
    @PHP/doc_examples/test108.php: SUCCEEDED
    @PHP/doc_examples/test109.php: SUCCEEDED
    @PHP/doc_examples/test110.php: SUCCEEDED
    @PHP/doc_examples/test111.php: SUCCEEDED
    @PHP/doc_examples/test112.php: SUCCEEDED
    @PHP/doc_examples/test113.php: SUCCEEDED
    @PHP/doc_examples/test114.php: SUCCEEDED
    @PHP/doc_examples/test115.php: SUCCEEDED
    @PHP/doc_examples/test116.php: SUCCEEDED
    @PHP/doc_examples/test117.php: SUCCEEDED
    @PHP/doc_examples/test118.php: SUCCEEDED
    @PHP/doc_examples/test119.php: SUCCEEDED
    @PHP/doc_examples/test120.php: SUCCEEDED
    @PHP/doc_examples/test121.php: SUCCEEDED
    @PHP/doc_examples/test122.php: SUCCEEDED
    @PHP/doc_examples/test123.php: SUCCEEDED
    @PHP/doc_examples/test124.php: SUCCEEDED
    @PHP/doc_examples/test125.php: SUCCEEDED
    @PHP/doc_examples/test126.php: SUCCEEDED
    @PHP/doc_examples/test127.php: SUCCEEDED
    @PHP/doc_examples/test128.php: SUCCEEDED
    @PHP/doc_examples/test129.php: SUCCEEDED
    @PHP/doc_examples/test130.php: SUCCEEDED
    @PHP/doc_examples/test131.php: SUCCEEDED
    @PHP/doc_examples/test132.php: SUCCEEDED
    @PHP/doc_examples/test133.php: SUCCEEDED
    @PHP/doc_examples/test134.php: SUCCEEDED
    @PHP/doc_examples/test136.php: SUCCEEDED
    @PHP/doc_examples/test137.php: SUCCEEDED
    @PHP/doc_examples/test138.php: SUCCEEDED
    @PHP/doc_examples/test139.php: SUCCEEDED
    @PHP/doc_examples/test148.php: SUCCEEDED
    @PHP/doc_examples/test149.php: SUCCEEDED
    @PHP/doc_examples/test150.php: SUCCEEDED
    @PHP/doc_examples/test151.php: SUCCEEDED
    @PHP/doc_examples/test152.php: SUCCEEDED
    @PHP/doc_examples/test153.php: SUCCEEDED
    @PHP/doc_examples/test154.php: SUCCEEDED
    @PHP/doc_examples/test155.php: SUCCEEDED
    @PHP/doc_examples/test156.php: SUCCEEDED
    @PHP/doc_examples/test158.php: SUCCEEDED
    @PHP/lang/001.php: SUCCEEDED
    @PHP/lang/002.php: SUCCEEDED
    @PHP/lang/003.php: SUCCEEDED
    @PHP/lang/004.php: SUCCEEDED
    @PHP/lang/005.php: SUCCEEDED
    @PHP/lang/006.php: SUCCEEDED
    @PHP/lang/007.php: SUCCEEDED
    @PHP/lang/008.php: SUCCEEDED
    @PHP/lang/009.php: SUCCEEDED
    @PHP/lang/010.php: SUCCEEDED
    @PHP/lang/011.php: SUCCEEDED
    @PHP/lang/012.php: SUCCEEDED
    @PHP/lang/013.php: SUCCEEDED
    @PHP/lang/014.php: SUCCEEDED
    @PHP/lang/015.php: SUCCEEDED
    @PHP/lang/016.php: SUCCEEDED
    @PHP/lang/017.php: SUCCEEDED
    @PHP/lang/018.php: SUCCEEDED
    @PHP/lang/019.php: SUCCEEDED
    @PHP/lang/020.php: SUCCEEDED
    @PHP/lang/021.php: SUCCEEDED
    @PHP/lang/022.php: SUCCEEDED
    @PHP/lang/023.php: SUCCEEDED
    @PHP/lang/024.php: SUCCEEDED
    @PHP/lang/025.php: SUCCEEDED
    @PHP/lang/026.php: SUCCEEDED
    @PHP/lang/027.php: SUCCEEDED
    @PHP/lang/028.php: SUCCEEDED
    @PHP/lang/030.php: SUCCEEDED
    @PHP/lang/032.php: SUCCEEDED
    @PHP/lang/036.php: SUCCEEDED
    @PHP/lang/037.php: SUCCEEDED
    @PHP/lang/038.php: SUCCEEDED
    @PHP/lang/039.php: SUCCEEDED
    @PHP/lang/040.php: SUCCEEDED
    @PHP/lang/bison1.php: SUCCEEDED
    @PHP/lang/bug17115.php: SUCCEEDED
    @PHP/lang/bug18872.php: SUCCEEDED
    @PHP/lang/bug19943.php: SUCCEEDED
    @PHP/lang/bug20175.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    Deprecated: Assigning the return value of new by reference is deprecated in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\lang\__input.txt on line 110
    foo_static()
    foo_global()
    foo:1
    foo_static()
    foo:1
    bar_static()
    bar_global()
    bar:1
    bar_static()
    bar:1
    wow_static()
    wow_global()
    wow:1
    wow_static()
    wow:1
    oop_test()
    oop_static()
    oop_class()
    oop:1
    oop_static()
    oop:1
    oop_test()
    oop_static()
    oop:1
    foo_static()
    foo_global()
    foo:1
    foo_static()
    foo:1
    bar_static()
    bar_global()
    bar:1
    bar_static()
    bar_global()
    bar:2
    wow_static()
    wow_global()
    wow:1
    wow_static()
    wow:1
    oop_test()
    oop_static()
    oop_class()
    oop:1
    oop_static()
    oop:1
    oop_test()
    oop_static()
    oop:1
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\lang\__input.txt(110,4): warning PHP0181: Assigning the return value of new by reference is deprecated
    
    @PHP/lang/bug21094.php: SUCCEEDED
    @PHP/lang/bug21600.php: SUCCEEDED
    @PHP/lang/bug21669.php: SUCCEEDED
    @PHP/lang/bug21849.php: SUCCEEDED
    @PHP/lang/bug21961.php: SUCCEEDED
    @PHP/lang/bug22231.php: SUCCEEDED
    @PHP/lang/bug22367.php: SUCCEEDED
    @PHP/lang/bug22510.php: SUCCEEDED
    @PHP/lang/bug22592.php: SUCCEEDED
    @PHP/lang/bug22690.php: SUCCEEDED
    @PHP/lang/bug23279.php: SUCCEEDED
    @PHP/lang/bug23384.php: SUCCEEDED
    @PHP/lang/bug23489.php: SUCCEEDED
    @PHP/lang/bug23524.php: SUCCEEDED
    @PHP/lang/bug23922.php: SUCCEEDED
    @PHP/lang/bug24054.php: SUCCEEDED
    @PHP/lang/bug24396.php: SUCCEEDED
    @PHP/lang/bug24403.php: SUCCEEDED
    @PHP/lang/bug24436.php: SUCCEEDED
    @PHP/lang/bug24499.php: SUCCEEDED
    @PHP/lang/bug24640.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    double(1700000000000000089258092433847514422797596587883870563356951996370064178581143932836831337636761368874297554515902592900802289500112731978596146714137401870842258241575178866354311397451139753100927220499450359906637902366244989496126909662726242240784739940994096632824796638102733857671280980918272.0000000000)
    1.7E+300
    
    ------
    double(0.0000000000)
    1.7E-300
    
    ------
    double(17000000000000001584208052028780237480128823455860622330108867175329927830437888.0000000000)
    1.7E+79
    
    ------
    double(0.0000000000)
    1.7E-79
    
    ------
    double(169999999999999996096025832433329868941658043870400163508258284150340918121070592.0000000000)
    1.7E+80
    
    ------
    double(0.0000000000)
    1.7E-80
    
    ------
    double(1700000000000000013616404158611892038375594280539217794530130541777964808366194688.0000000000)
    1.7E+81
    
    ------
    double(0.0000000000)
    1.7E-81
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    1.6999810742106E-319
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    1.7000798873397E-320
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    1.6995858216939E-321
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    0
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    0
    
    ------
    double(1700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+300
    
    ------
    double(0.0000000000)
    1.70000000000003E-300
    
    ------
    double(17000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+79
    
    ------
    double(0.0000000000)
    1.70000000000001E-79
    
    ------
    double(170000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+80
    
    ------
    double(0.0000000000)
    1.70000000000001E-80
    
    ------
    double(1700000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+81
    
    ------
    double(0.0000000000)
    1.70000000000001E-81
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    1.69998107421056E-319
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    1.70007988733973E-320
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    1.69464516523548E-321
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    0
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    0
    
    ------
    @PHP/lang/bug24652.php: SUCCEEDED
    @PHP/lang/bug24658.php: SUCCEEDED
    @PHP/lang/bug24783.php: SUCCEEDED
    @PHP/lang/bug24926.php: SUCCEEDED
    @PHP/lang/bug25547.php: SUCCEEDED
    @PHP/lang/bug25652.php: SUCCEEDED
    @PHP/lang/bug25922.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Undefined index here: 'error'
    Undefined index here: ''
    @PHP/lang/bug26182.php: SUCCEEDED
    @PHP/lang/bug26696.php: SUCCEEDED
    @PHP/lang/bug26866.php: SUCCEEDED
    @PHP/lang/bug26869.php: SUCCEEDED
    @PHP/lang/bug27354.php: SUCCEEDED
    @PHP/lang/bug27439.php: SUCCEEDED
    @PHP/lang/bug27535.php: SUCCEEDED
    @PHP/lang/bug28213.php: SUCCEEDED
    @PHP/lang/bug28800.php: SUCCEEDED
    @PHP/lang/bug29566.php: SUCCEEDED
    @PHP/lang/bug29893.php: SUCCEEDED
    @PHP/lang/bug29944.php: SUCCEEDED
    @PHP/lang/bug30638.php: SUCCEEDED
    @PHP/lang/bug30726.php: SUCCEEDED
    @PHP/lang/bug30862.php: SUCCEEDED
    @PHP/lang/bug32924.php: SUCCEEDED
    @PHP/lang/bug35382.php: SUCCEEDED
    @PHP/lang/bug7515.php: SUCCEEDED
    @PHP/lang/each_binary_safety.php: SUCCEEDED
    @PHP/lang/error_2_exception_001.php: SUCCEEDED
    @PHP/lang/foreach_with_object_001.php: SUCCEEDED
    @PHP/lang/foreach_with_references_001.php: SUCCEEDED
    @PHP/lang/type_hints_001.php: SUCCEEDED
    @PHP/standard/array/001.php: SUCCEEDED
    @PHP/standard/array/003.php: SUCCEEDED
    @PHP/standard/array/004.php: SUCCEEDED
    @PHP/standard/array/005.php: SUCCEEDED
    @PHP/standard/array/008.php: SUCCEEDED
    @PHP/standard/array/array_change_key_case.php: SUCCEEDED
    @PHP/standard/array/array_chunk.php: SUCCEEDED
    @PHP/standard/array/array_count_values.php: SUCCEEDED
    @PHP/standard/array/array_diff_1.php: SUCCEEDED
    @PHP/standard/array/array_diff_key.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ------ Test 1 --------
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 2 --------
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 3 --------
    array(6) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [2]=>
      int(4)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [2]=>
      int(4)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 4 --------
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 5 --------
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 6 --------
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 7 --------
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    ------ Test 8 --------
    array(6) {
      [0]=>
      int(0)
      [7]=>
      int(14)
      [2]=>
      int(4)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [0]=>
      int(0)
      [7]=>
      int(14)
      [2]=>
      int(4)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 9 --------
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    ------ Test 1 --------
    array(4) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(4) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 2 --------
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 3 --------
    array(6) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [2]=>
      &int(4)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [2]=>
      &int(4)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 4 --------
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 5 --------
    array(4) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(4) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 6 --------
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 7 --------
    array(3) {
      [7]=>
      &int(14)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
    }
    array(3) {
      [7]=>
      &int(14)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
    }
    ------ Test 8 --------
    array(6) {
      [0]=>
      &int(0)
      [7]=>
      &int(14)
      [2]=>
      &int(4)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [0]=>
      &int(0)
      [7]=>
      &int(14)
      [2]=>
      &int(4)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 9 --------
    array(3) {
      [7]=>
      &int(14)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
    }
    array(3) {
      [7]=>
      &int(14)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
    }
    @PHP/standard/array/array_intersect_key.php: SUCCEEDED
    @PHP/standard/array/array_sum.php: SUCCEEDED
    @PHP/standard/array/array_walk_recursive.php: SUCCEEDED
    @PHP/standard/array/bug12776.php: SUCCEEDED
    @PHP/standard/array/bug14580.php: SUCCEEDED
    @PHP/standard/array/bug20381.php: SUCCEEDED
    @PHP/standard/array/bug20865.php: SUCCEEDED
    @PHP/standard/array/bug21182.php: SUCCEEDED
    @PHP/standard/array/bug21918.php: SUCCEEDED
    @PHP/standard/array/bug21998.php: SUCCEEDED
    @PHP/standard/array/bug22088.php: SUCCEEDED
    @PHP/standard/array/bug22463.php: SUCCEEDED
    @PHP/standard/array/bug23581.php: SUCCEEDED
    @PHP/standard/array/bug23788.php: SUCCEEDED
    @PHP/standard/array/bug24198.php: SUCCEEDED
    @PHP/standard/array/bug24220.php: SUCCEEDED
    @PHP/standard/array/bug24766.php: SUCCEEDED
    @PHP/standard/array/bug24897.php: SUCCEEDED
    @PHP/standard/array/bug24980.php: SUCCEEDED
    @PHP/standard/array/bug25359.php: SUCCEEDED
    @PHP/standard/array/bug25708.php: SUCCEEDED
    @PHP/standard/array/bug25758.php: SUCCEEDED
    @PHP/standard/array/bug26458.php: SUCCEEDED
    @PHP/standard/array/bug28974.php: SUCCEEDED
    @PHP/standard/array/bug29493.php: SUCCEEDED
    @PHP/standard/array/bug30266.php: SUCCEEDED
    @PHP/standard/array/bug30833.php: SUCCEEDED
    @PHP/standard/array/bug31158.php: SUCCEEDED
    @PHP/standard/array/bug31213.php: SUCCEEDED
    @PHP/standard/array/bug32021.php: SUCCEEDED
    @PHP/standard/array/bug33382.php: SUCCEEDED
    @PHP/standard/array/bug33989.php: SUCCEEDED
    @PHP/standard/array/bug34227.php: SUCCEEDED
    @PHP/standard/array/bug34982.php: SUCCEEDED
    @PHP/standard/array/bug35014.php: SUCCEEDED
    @PHP/standard/array/bug35022.php: SUCCEEDED
    @PHP/standard/array/bug35821.php: SUCCEEDED
    @PHP/standard/array/count_recursive.php: SUCCEEDED
    @PHP/standard/array/locale_sort.php: SUCCEEDED
    @PHP/standard/array/range.php: SUCCEEDED
    @PHP/standard/assert/assert.php: SUCCEEDED
    @PHP/standard/general_functions/001.php: SUCCEEDED
    @PHP/standard/general_functions/002.php: SUCCEEDED
    @PHP/standard/general_functions/003.php: SUCCEEDED
    @PHP/standard/general_functions/004.php: SUCCEEDED
    @PHP/standard/general_functions/005.php: SUCCEEDED
    @PHP/standard/general_functions/006.php: SUCCEEDED
    @PHP/standard/general_functions/007.php: SUCCEEDED
    @PHP/standard/general_functions/009.php: SUCCEEDED
    @PHP/standard/general_functions/bug25038.php: SUCCEEDED
    @PHP/standard/general_functions/bug27678.php: SUCCEEDED
    @PHP/standard/general_functions/bug29038.php: SUCCEEDED
    @PHP/standard/general_functions/bug31190.php: SUCCEEDED
    @PHP/standard/general_functions/bug32647.php: SUCCEEDED
    @PHP/standard/general_functions/bug35229.php: SUCCEEDED
    @PHP/standard/general_functions/is_resource.php: SUCCEEDED
    @PHP/standard/math/abs.php: SUCCEEDED
    @PHP/standard/math/bug24142.php: SUCCEEDED
    @PHP/standard/math/bug25694.php: SUCCEEDED
    @PHP/standard/math/bug27646.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    double(INF-INF)
    'd:-INF;'
    double(INF-INF)
    double(INF-INF)
    'd:INF;'
    double(INF-INF)
    double(NaNInfini)
    'd:NAN;'
    double(NaNInfini)
    double(-Infinity)
    'd:-INF;'
    double(-Infinity)
    double(Infinity)
    'd:INF;'
    double(Infinity)
    double(NaN)
    'd:NAN;'
    double(NaN)
    @PHP/standard/math/bug30069.php: SUCCEEDED
    @PHP/standard/math/bug30695.php: SUCCEEDED
    @PHP/standard/math/floorceil.php: SUCCEEDED
    @PHP/standard/math/hexdec.php: SUCCEEDED
    @PHP/standard/math/log.php: SUCCEEDED
    @PHP/standard/math/pow.php: SUCCEEDED
    @PHP/standard/math/round.php: SUCCEEDED
    @PHP/standard/reg/001.php: SUCCEEDED
    @PHP/standard/reg/002.php: SUCCEEDED
    @PHP/standard/reg/003.php: SUCCEEDED
    @PHP/standard/reg/004.php: SUCCEEDED
    @PHP/standard/reg/005.php: SUCCEEDED
    @PHP/standard/reg/006.php: SUCCEEDED
    @PHP/standard/reg/007.php: SUCCEEDED
    @PHP/standard/reg/008.php: SUCCEEDED
    @PHP/standard/reg/009.php: SUCCEEDED
    @PHP/standard/reg/010.php: SUCCEEDED
    @PHP/standard/reg/011.php: SUCCEEDED
    @PHP/standard/reg/012.php: SUCCEEDED
    @PHP/standard/reg/013.php: SUCCEEDED
    @PHP/standard/reg/014.php: SUCCEEDED
    @PHP/standard/reg/015.php: SUCCEEDED
    @PHP/standard/reg/016.php: SUCCEEDED
    @PHP/standard/serialize/001.php: SUCCEEDED
    @PHP/standard/serialize/002.php: SUCCEEDED
    @PHP/standard/serialize/003.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    d:100;
    double(100.0000000000)
    
    d:51999999999999996980101120;
    double(51999999999999996980101120.0000000000)
    
    d:8.9999999999999995265585574287341141808127531476202420890331268310546875E-9;
    double(0.0000000090)
    d:100;
    double(100.0000000000)
    
    d:5.2000000000000006E+25;
    double(52000000000000000000000000.0000000000)
    
    d:9.0000000000000045E-09;
    double(0.0000000090)
    @PHP/standard/serialize/004.php: SUCCEEDED
    @PHP/standard/serialize/005.php: SUCCEEDED
    @PHP/standard/serialize/006.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    'O:3:"´┐Ż":1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    object
    {
      '´┐Ż' => '´┐Ż'
    }
    'a:1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    array
    {
      '´┐Ż' => '´┐Ż'
    }
    'O:3:"´┐Ż":1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    object
    {
      'ďż˝' => '´┐Ż'
    }
    'a:1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    array
    {
      'ďż˝' => '´┐Ż'
    }
    @PHP/standard/serialize/bug14293.php: SUCCEEDED
    @PHP/standard/serialize/bug21957.php: SUCCEEDED
    @PHP/standard/serialize/bug23298.php: SUCCEEDED
    @PHP/standard/serialize/bug24063.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0.1 0.1
    0.01 0.01
    0.001 0.001
    0.0001 0.0001
    1.0E-5 1.0E-5
    1.0E-6 1.0E-6
    1.0E-7 1.0E-7
    1.0E-8 1.0E-8
    1.0E-9 1.0E-9
    0.1 0.1
    0.01 0.01
    0.001 0.001
    0.0001 0.0001
    1E-05 1E-05
    1E-06 1E-06
    1E-07 1E-07
    1E-08 1E-08
    1E-09 1E-09
    @PHP/standard/serialize/bug25378.php: SUCCEEDED
    @PHP/standard/serialize/bug26762.php: SUCCEEDED
    @PHP/standard/serialize/bug27469.php: SUCCEEDED
    @PHP/standard/serialize/bug28325.php: SUCCEEDED
    @PHP/standard/serialize/bug30234.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    FALSE
    FALSE
    __autoload(Autoload_Implements)
    object [invalid]
    FALSE
    FALSE
    FALSE
    FALSE
    TRUE
    __autoload(Autoload_Implements)
    object [invalid]
    FALSE
    FALSE
    TRUE
    @PHP/standard/serialize/bug31402.php: SUCCEEDED
    @PHP/standard/serialize/bug31442.php: SUCCEEDED
    @PHP/standard/strings/add-and-stripcslashes.php: SUCCEEDED
    @PHP/standard/strings/add-and-stripslashes.php: SUCCEEDED
    @PHP/standard/strings/basename.php: SUCCEEDED
    @PHP/standard/strings/bin2hex.php: SUCCEEDED
    @PHP/standard/strings/bug20108.php: SUCCEEDED
    @PHP/standard/strings/bug20169.php: SUCCEEDED
    @PHP/standard/strings/bug20261.php: SUCCEEDED
    @PHP/standard/strings/bug20927.php: SUCCEEDED
    @PHP/standard/strings/bug21338.php: SUCCEEDED
    @PHP/standard/strings/bug21453.php: SUCCEEDED
    @PHP/standard/strings/bug21730.php: SUCCEEDED
    @PHP/standard/strings/bug21744.php: SUCCEEDED
    @PHP/standard/strings/bug22008.php: SUCCEEDED
    @PHP/standard/strings/bug22187.php: SUCCEEDED
    @PHP/standard/strings/bug22224.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      0 => 
      object
      {
      }
      1 => 
      object
      {
      }
    }
    @PHP/standard/strings/bug22227.php: SUCCEEDED
    @PHP/standard/strings/bug22904.php: SUCCEEDED
    @PHP/standard/strings/bug23650.php: SUCCEEDED
    @PHP/standard/strings/bug23894.php: SUCCEEDED
    @PHP/standard/strings/bug24098.php: SUCCEEDED
    @PHP/standard/strings/bug24208.php: SUCCEEDED
    @PHP/standard/strings/bug24281.php: SUCCEEDED
    @PHP/standard/strings/bug25671.php: SUCCEEDED
    @PHP/standard/strings/bug25707.php: SUCCEEDED
    @PHP/standard/strings/bug26878.php: SUCCEEDED
    @PHP/standard/strings/bug26973.php: SUCCEEDED
    @PHP/standard/strings/bug27276.php: SUCCEEDED
    @PHP/standard/strings/bug27278.php: SUCCEEDED
    @PHP/standard/strings/bug27295.php: SUCCEEDED
    @PHP/standard/strings/bug27457.php: SUCCEEDED
    @PHP/standard/strings/bug27675.php: SUCCEEDED
    @PHP/standard/strings/bug28386.php: SUCCEEDED
    @PHP/standard/strings/bug33076.php: SUCCEEDED
    @PHP/standard/strings/chr_ord.php: SUCCEEDED
    @PHP/standard/strings/chunk_split.php: SUCCEEDED
    @PHP/standard/strings/count_chars.php: SUCCEEDED
    @PHP/standard/strings/crc32.php: SUCCEEDED
    @PHP/standard/strings/explode.php: SUCCEEDED
    @PHP/standard/strings/implode.php: SUCCEEDED
    @PHP/standard/strings/md5.php: SUCCEEDED
    @PHP/standard/strings/md5raw.php: SUCCEEDED
    @PHP/standard/strings/nl2br.php: SUCCEEDED
    @PHP/standard/strings/sha1.php: SUCCEEDED
    @PHP/standard/strings/sha1raw.php: SUCCEEDED
    @PHP/standard/strings/sprintf_f.php: SUCCEEDED
    @PHP/standard/strings/strcspn.php: SUCCEEDED
    @PHP/standard/strings/strings001.php: SUCCEEDED
    @PHP/standard/strings/strpos.php: SUCCEEDED
    @PHP/standard/strings/strrev.php: SUCCEEDED
    @PHP/standard/strings/strripos.php: SUCCEEDED
    @PHP/standard/strings/strrpos.php: SUCCEEDED
    @PHP/standard/strings/strspn.php: SUCCEEDED
    @PHP/standard/strings/strstr.php: SUCCEEDED
    @PHP/standard/strings/strtoupper.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    cfbfbdcfbfbdcfbfbd
    cfafbdcfafbdcfafbd
    @PHP/standard/strings/strtr.php: SUCCEEDED
    @PHP/standard/strings/strval.php: SUCCEEDED
    @PHP/standard/strings/str_repeat.php: SUCCEEDED
    @PHP/standard/strings/str_shuffle.php: SUCCEEDED
    @PHP/standard/strings/str_word_count.php: SUCCEEDED
    @PHP/standard/strings/substr_count.php: SUCCEEDED
    @PHP/standard/strings/substr_replace.php: SUCCEEDED
    @PHP/standard/strings/wordwrap.php: SUCCEEDED
    @PHP/standard/time/001.php: SUCCEEDED
    @PHP/standard/time/idate.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    U: 1043324459
    Y: 2003
    z: 22
    y: 3
    m: 1
    n: 1
    d: 23
    j: 23
    H: 13
    G: 13
    h: 1
    g: 1
    i: 20
    s: 59
    t: 31
    w: 4
    L: 0
    B: 556
    I: 0
    W: 4
    U: 1043324459
    Y: 2003
    z: 22
    y: 3
    m: 1
    n: 1
    d: 23
    j: 23
    H: 12
    G: 12
    h: 12
    g: 12
    i: 20
    s: 59
    t: 31
    w: 4
    L: 0
    B: 556
    I: 0
    W: 4
    @PHP/strings/001.php: SUCCEEDED
    @PHP/strings/002.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    fprintf test 1:abcde
    20
    printf test 1:simple string
    printf test 2:42
    printf test 3:3.333333
    printf test 4:3.3333333333
    printf test 5:2.50      
    printf test 6:2.50000000
    printf test 7:0000002.50
    printf test 8:<                 foo>
    printf test 9:<bar                 >
    printf test 10: 123456789012345
    printf test 10:<h´┐Żyesterettsjustitiarius>
    printf test 11: 123456789012345678901234567890
    printf test 11:<    h´┐Żyesterettsjustitiarius>
    printf test 12:-12.34
    printf test 13:  -12
    printf test 14:@
    printf test 15:10101010
    printf test 16:aa
    printf test 17:AA
    printf test 18:        10101010
    printf test 19:              aa
    printf test 20:              AA
    printf test 21:0000000010101010
    printf test 22:00000000000000aa
    printf test 23:00000000000000AA
    printf test 24:abcde
    printf test 25:gazonk
    printf test 26:2 1
    printf test 27:3 1 2
    printf test 28:02  1
    printf test 29:2   1
    printf test 30:x
    vprintf test 1:2   1
    fprintf test 1:abcde
    20
    printf test 1:simple string
    printf test 2:42
    printf test 3:3.333333
    printf test 4:3.3333333333
    printf test 5:2.50      
    printf test 6:2.50000000
    printf test 7:0000002.50
    printf test 8:<                 foo>
    printf test 9:<bar                 >
    printf test 10: 123456789012345
    printf test 10:<h�yesterettsjustitiarius>
    printf test 11: 123456789012345678901234567890
    printf test 11:<    h�yesterettsjustitiarius>
    printf test 12:-12.34
    printf test 13:  -12
    printf test 14:@
    printf test 15:10101010
    printf test 16:aa
    printf test 17:AA
    printf test 18:        10101010
    printf test 19:              aa
    printf test 20:              AA
    printf test 21:0000000010101010
    printf test 22:00000000000000aa
    printf test 23:00000000000000AA
    printf test 24:abcde
    printf test 25:gazonk
    printf test 26:2 1
    printf test 27:3 1 2
    printf test 28:02  1
    printf test 29:2   1
    printf test 30:x
    vprintf test 1:2   1
    @PHP/strings/bug22592.php: SUCCEEDED
    Arrays/array1.php: SUCCEEDED
    Arrays/array_diff_intersect.php: SUCCEEDED
    Arrays/array_diff_intersect2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Strict Standards: array_udiff() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 35
    Array
    (
        [0.5] => cr Object
            (
                [priv_member:cr:private] => 12
            )
    
        [0] => cr Object
            (
                [priv_member:cr:private] => 23
            )
    
    )
    
    Strict Standards: array_udiff_assoc() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 36
    Array
    (
        [0.1] => cr Object
            (
                [priv_member:cr:private] => 9
            )
    
        [0.5] => cr Object
            (
                [priv_member:cr:private] => 12
            )
    
        [0] => cr Object
            (
                [priv_member:cr:private] => 23
            )
    
    )
    
    Strict Standards: array_udiff_uassoc() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 37
    
    Strict Standards: array_udiff_uassoc() expects parameter 4 to be a valid callback, non-static method cr::comp_func_key() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 37
    Array
    (
        [0.1] => cr Object
            (
                [priv_member:cr:private] => 9
            )
    
        [0.5] => cr Object
            (
                [priv_member:cr:private] => 12
            )
    
        [0] => cr Object
            (
                [priv_member:cr:private] => 23
            )
    
    )
    Array
    (
        [b] => brown
        [c] => blue
        [0] => red
    )
    ------------------------------------
    
    Strict Standards: array_uintersect() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 40
    Array
    (
        [0.1] => cr Object
            (
                [priv_member:cr:private] => 9
            )
    
        [1] => cr Object
            (
                [priv_member:cr:private] => 4
            )
    
        [2] => cr Object
            (
                [priv_member:cr:private] => -15
            )
    
    )
    
    Strict Standards: array_uintersect_assoc() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 41
    Array
    (
        [1] => cr Object
            (
                [priv_member:cr:private] => 4
            )
    
        [2] => cr Object
            (
                [priv_member:cr:private] => -15
            )
    
    )
    
    Strict Standards: array_uintersect_uassoc() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 42
    
    Strict Standards: array_uintersect_uassoc() expects parameter 4 to be a valid callback, non-static method cr::comp_func_key() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 42
    Array
    (
        [1] => cr Object
            (
                [priv_member:cr:private] => 4
            )
    
        [2] => cr Object
            (
                [priv_member:cr:private] => -15
            )
    
    )
    Array
    (
        [a] => green
    )
    Array
    (
        [0.5] => cr Object
        (
            [priv_member:private] => 12
        )
    
        [0] => cr Object
        (
            [priv_member:private] => 23
        )
    
    )
    Array
    (
        [0.1] => cr Object
        (
            [priv_member:private] => 9
        )
    
        [0.5] => cr Object
        (
            [priv_member:private] => 12
        )
    
        [0] => cr Object
        (
            [priv_member:private] => 23
        )
    
    )
    Array
    (
        [0.1] => cr Object
        (
            [priv_member:private] => 9
        )
    
        [0.5] => cr Object
        (
            [priv_member:private] => 12
        )
    
        [0] => cr Object
        (
            [priv_member:private] => 23
        )
    
    )
    Array
    (
        [b] => brown
        [c] => blue
        [0] => red
    )
    ------------------------------------
    Array
    (
        [0.1] => cr Object
        (
            [priv_member:private] => 9
        )
    
        [1] => cr Object
        (
            [priv_member:private] => 4
        )
    
        [2] => cr Object
        (
            [priv_member:private] => -15
        )
    
    )
    Array
    (
        [1] => cr Object
        (
            [priv_member:private] => 4
        )
    
        [2] => cr Object
        (
            [priv_member:private] => -15
        )
    
    )
    Array
    (
        [1] => cr Object
        (
            [priv_member:private] => 4
        )
    
        [2] => cr Object
        (
            [priv_member:private] => -15
        )
    
    )
    Array
    (
        [a] => green
    )
    Arrays/array_diff_intersect3.php: SUCCEEDED
    Arrays/array_filter%20false%20entries%20%2322016.php: SUCCEEDED
    Arrays/array_map.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Array
    (
        [0] => Array
            (
                [0] => 1
                [1] => A
                [2] => 0
            )
    
        [1] => Array
            (
                [0] => 2
                [1] => B
                [2] => 0
            )
    
        [2] => Array
            (
                [0] => 3
                [1] => C
                [2] => 
            )
    
    )
    Array
    (
        [0] => 1 A 0
        [1] => 2 B 0
        [2] => 3 C 
    )
    Array
    (
        [A] => 2
        [10] => 3
    )
    Array
    (
        [0] => 1
        [1] => 2
        [2] => 3
    )
    Array
    (
        [0] => A
        [1] => B
        [2] => C
    )
    Array
    (
        [0] => 0
        [1] => 0
    )
    Array
    (
        [A] => 1
        [10] => 2
    )
    Array
    (
        [0] => Array
        (
            [0] => 1
            [1] => A
            [2] => 0
        )
    
        [1] => Array
        (
            [0] => 2
            [1] => B
            [2] => 0
        )
    
        [2] => Array
        (
            [0] => 3
            [1] => C
            [2] => 
        )
    
    )
    Array
    (
        [0] => 1 A 0
        [1] => 2 B 0
        [2] => 3 C 
    )
    Array
    (
        [A] => 2
        [10] => 3
    )
    Array
    (
        [0] => 1
        [1] => 2
        [2] => 3
    )
    Array
    (
        [0] => A
        [1] => B
        [2] => C
    )
    Array
    (
        [0] => x
        [1] => x
    )
    Array
    (
        [A] => 1
        [10] => 2
    )
    Arrays/array_merge_recursive.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Array
    (
        [color] => Array
            (
                [favorite] => Array
                    (
                        [0] => red
                        [1] => green
                    )
    
                [0] => blue
            )
    
        [0] => Array
            (
                [0] => 1
                [1] => 2
                [2] => 3
            )
    
        [q] => Array
            (
                [0] => 
                [1] => 
                [2] => x
            )
    
        [1] => 10
        [2] => Array
            (
                [0] => 4
                [1] => 5
                [2] => 6
            )
    
    )
    Array
    (
        [a] => Array
            (
                [0] => 1
                [1] => 2
                [2] => 3
                [3] => e
            )
    
    )
    Array
    (
        [a] => Array
            (
                [0] => 1
                [1] => 2
                [2] => 3
                [3] => e
            )
    
    )
    Array
    (
        [a] => 1
        [b] => 2
    )
    Array
    (
        [a] => xxx
        [b] => 2
    )
    Array
    (
        [a] => Array
            (
                [a] => Array
                    (
                        [a] => Array
     *RECURSION*
                    )
    
                [0] => 1
                [1] => 2
                [2] => 3
            )
    
    )
    Array
    (
        [a] => Array
            (
                [b] => Array
                    (
                        [0] => 1
                        [1] => 1
                    )
    
                [c] => 1
                [d] => Array
                    (
                        [0] => 2
                        [1] => 3
                    )
    
            )
    
    )
    Array
    (
        [a] => Array
            (
                [0] => 
                [1] => 
            )
    
    )
    Array
    (
        [a] => Array
            (
                [0] => 
                [1] => 
            )
    
    )
    Array
    (
        [color] => Array
        (
            [favorite] => Array
            (
                [0] => red
                [1] => green
            )
    
            [0] => blue
        )
    
        [0] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
        )
    
        [q] => Array
        (
            [0] => x
        )
    
        [1] => 10
        [2] => Array
        (
            [0] => 4
            [1] => 5
            [2] => 6
        )
    
    )
    Array
    (
        [a] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
            [3] => e
        )
    
    )
    Array
    (
        [a] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
            [3] => e
        )
    
    )
    Array
    (
        [a] => 1
        [b] => 2
    )
    Array
    (
        [a] => xxx
        [b] => 2
    )
    Array
    (
        [a] => Array
        (
            [a] => Array
            (
                [a] => Array [recursion]
    
    
            )
    
            [0] => 1
            [1] => 2
            [2] => 3
        )
    
    )
    Array
    (
        [a] => Array
        (
            [b] => Array
            (
                [0] => 1
                [1] => 1
            )
    
            [c] => 1
            [d] => Array
            (
                [0] => 2
                [1] => 3
            )
    
        )
    
    )
    Array
    (
        [a] => Array
        (
        )
    
    )
    Array
    (
        [a] => Array
        (
        )
    
    )
    Arrays/array_reduce1.php: SUCCEEDED
    Arrays/array_reduce2.php: SUCCEEDED
    Arrays/array_slice.php: SUCCEEDED
    Arrays/array_sumprod.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    float(8.3)
    float(0)
    int(6)
    int(6)
    float(4294967297)
    float(9.2233720282648E+18)
    bool(true)
    bool(false)
    float(-7.7)
    float(-38.4)
    int(6)
    int(6)
    int64(4294967297)
    int64(9223372028264841218)
    bool(true)
    bool(true)
    Arrays/array_unset_add.php: SUCCEEDED
    Arrays/array_unshift.php: SUCCEEDED
    Arrays/array_walk.php: SUCCEEDED
    Arrays/array_walk_recursive.php: SUCCEEDED
    Arrays/multisort.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    bool(true)
    Array
    (
        [0] => Array
            (
                [0] => 2
                [1] => 8
                [2] => 2
                [3] => 2
                [4] => 8
                [5] => 8
            )
    
        [1] => Array
            (
                [0] => 7
                [1] => 2
                [2] => 7
                [3] => 4
                [4] => 8
                [5] => 1
            )
    
        [2] => Array
            (
                [0] => 1
                [1] => 4
                [2] => 8
                [3] => 0
                [4] => 6
                [5] => 2
            )
    
        [3] => Array
            (
                [0] => 8
                [1] => 4
                [2] => 1
                [3] => 0
                [4] => 7
                [5] => 1
            )
    
        [4] => Array
            (
                [0] => 20
                [1] => 2
                [2] => 12
                [3] => 11
                [4] => 10
                [5] => 1
            )
    
    )
    Array
    (
        [0] => Array
            (
                [0] => 10
                [1] => 100
                [2] => 100
                [3] => a
            )
    
        [1] => Array
            (
                [0] => 1
                [1] => 3
                [2] => 2
                [3] => 1
            )
    
    )
    Array
    (
        [0] => 10
        [1] => a
        [2] => 100
        [3] => 100
    )
    Array
    (
        [0] => 1
        [1] => 1
        [2] => 2
        [3] => 3
    )
    bool(true)
    Array
    (
        [0] => Array
        (
            [0] => 2
            [1] => 8
            [2] => 2
            [3] => 2
            [4] => 8
            [5] => 8
        )
    
        [1] => Array
        (
            [0] => 7
            [1] => 2
            [2] => 7
            [3] => 4
            [4] => 8
            [5] => 1
        )
    
        [2] => Array
        (
            [0] => 1
            [1] => 4
            [2] => 8
            [3] => 0
            [4] => 6
            [5] => 2
        )
    
        [3] => Array
        (
            [0] => 8
            [1] => 4
            [2] => 1
            [3] => 0
            [4] => 7
            [5] => 1
        )
    
        [4] => Array
        (
            [0] => 20
            [1] => 2
            [2] => 12
            [3] => 11
            [4] => 10
            [5] => 1
        )
    
    )
    Array
    (
        [0] => Array
        (
            [0] => 10
            [1] => 100
            [2] => 100
            [3] => a
        )
    
        [1] => Array
        (
            [0] => 1
            [1] => 3
            [2] => 2
            [3] => 1
        )
    
    )
    Array
    (
        [0] => 10
        [1] => a
        [2] => 100
        [3] => 100
    )
    Array
    (
        [0] => 1
        [1] => 1
        [2] => 2
        [3] => 3
    )
    Arrays/multisort_empty.php: SUCCEEDED
    Arrays/nonarray%20access%20%2322019.php: SUCCEEDED
    Arrays/optimizations.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    3
    4
    5
    a
    b
    c
    
    Warning: strtolower() expects parameter 1 to be string, array given in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 15
    
    cablo
    3
    4
    5
    a
    b
    c
    array
    cablo
    Arrays/recursion.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    f1:
    array(2) {
      ["a"]=>
      array(5) {
        ["a"]=>
        &array(3) {
          ["a"]=>
          &array(3) {
            ["a"]=>
            *RECURSION*
            [0]=>
            string(1) "y"
            [1]=>
            string(1) "z"
          }
          [0]=>
          string(1) "y"
          [1]=>
          string(1) "z"
        }
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        string(1) "x"
      }
      [0]=>
      string(1) "w"
    }
    f2:
    array(1) {
      ["A"]=>
      &array(2) {
        ["a"]=>
        &array(2) {
          ["a"]=>
          *RECURSION*
          [0]=>
          string(1) "z"
        }
        [0]=>
        string(1) "z"
      }
    }
    f3:
    array(2) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) {
          [0]=>
          *RECURSION*
          [1]=>
          string(1) "z"
        }
        [1]=>
        string(1) "z"
      }
      [1]=>
      string(1) "z"
    }
    f4:
    
    Warning: array_merge_recursive(): recursion detected in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 37
    array(1) {
      ["a"]=>
      &array(3) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
      }
    }
    f5:
    array(1) {
      ["a"]=>
      array(6) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        int(1)
        [4]=>
        int(2)
        [5]=>
        int(3)
      }
    }
    f6:
    array(1) {
      ["a"]=>
      array(2) {
        [0]=>
        string(2) "xx"
        [1]=>
        int(2)
      }
    }
    f7:
    array(1) {
      ["a"]=>
      array(1) {
        ["a"]=>
        array(1) {
          ["a"]=>
          &array(1) {
            ["a"]=>
            &array(1) {
              ["a"]=>
              *RECURSION*
            }
          }
        }
      }
    }
    f1:
    array(2) {
      ["a"]=>
      array(5) {
        ["a"]=>
        &array(3) {
          ["a"]=>
          &array(3) [recursion]
          [0]=>
          string(1) "y"
          [1]=>
          string(1) "z"
        }
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        string(1) "x"
      }
      [0]=>
      string(1) "w"
    }
    f2:
    array(1) {
      ["A"]=>
      &array(2) {
        ["a"]=>
        &array(2) [recursion]
        [0]=>
        string(1) "z"
      }
    }
    f3:
    array(2) {
      [0]=>
      &array(2) [recursion]
      [1]=>
      string(1) "z"
    }
    f4:
    array(1) {
      ["a"]=>
      array(6) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        int(1)
        [4]=>
        int(2)
        [5]=>
        int(3)
      }
    }
    f5:
    array(1) {
      ["a"]=>
      array(6) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        int(1)
        [4]=>
        int(2)
        [5]=>
        int(3)
      }
    }
    f6:
    array(1) {
      ["a"]=>
      array(2) {
        [0]=>
        string(2) "xx"
        [1]=>
        int(2)
      }
    }
    f7:
    array(1) {
      ["a"]=>
      &array(1) {
        ["a"]=>
        &array(1) [recursion]
      }
    }
    Arrays/sort.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    sort regular:
    Array
    (
        [0] => 0
        [1] => 1
        [2] => 1
        [3] => 8
        [4] => 0x10
        [5] => 10x
        [6] => 20x
        [7] => ach0
        [8] => add1
        [9] => x10
        [10] => x2
    )
    
    sort numeric:
    Array
    (
        [0] => add1
        [1] => x2
        [2] => 0x10
        [3] => ach0
        [4] => 0
        [5] => x10
        [6] => 1
        [7] => 1
        [8] => 8
        [9] => 10x
        [10] => 20x
    )
    
    sort string:
    Array
    (
        [0] => 0
        [1] => 0x10
        [2] => 1
        [3] => 1
        [4] => 10x
        [5] => 20x
        [6] => 8
        [7] => ach0
        [8] => add1
        [9] => x10
        [10] => x2
    )
    
    sort locale:
    Array
    (
        [0] => 0
        [1] => 0x10
        [2] => 1
        [3] => 1
        [4] => 10x
        [5] => 20x
        [6] => 8
        [7] => ach0
        [8] => add1
        [9] => x10
        [10] => x2
    )
    
    ksort regular:
    Array
    (
        [x] => 8
        [z] => 1
        [0] => x10
        [1] => 10x
        [2b] => 1
        [2] => 20x
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [10a] => 0
    )
    
    ksort numeric:
    Array
    (
        [x] => 8
        [z] => 1
        [0] => x10
        [1] => 10x
        [2b] => 1
        [2] => 20x
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [10a] => 0
    )
    
    ksort string:
    Array
    (
        [0] => x10
        [1] => 10x
        [10a] => 0
        [2] => 20x
        [2b] => 1
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [x] => 8
        [z] => 1
    )
    
    ksort locale:
    Array
    (
        [0] => x10
        [1] => 10x
        [10a] => 0
        [2] => 20x
        [2b] => 1
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [x] => 8
        [z] => 1
    )
    
    asort regular:
    Array
    (
        [10a] => 0
        [2b] => 1
        [z] => 1
        [x] => 8
        [4] => 0x10
        [1] => 10x
        [2] => 20x
        [5] => ach0
        [6] => add1
        [0] => x10
        [3] => x2
    )
    
    asort numeric:
    Array
    (
        [6] => add1
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [10a] => 0
        [0] => x10
        [z] => 1
        [2b] => 1
        [x] => 8
        [1] => 10x
        [2] => 20x
    )
    
    asort string:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [z] => 1
        [2b] => 1
        [1] => 10x
        [2] => 20x
        [x] => 8
        [5] => ach0
        [6] => add1
        [0] => x10
        [3] => x2
    )
    
    asort locale:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [z] => 1
        [2b] => 1
        [1] => 10x
        [2] => 20x
        [x] => 8
        [5] => ach0
        [6] => add1
        [0] => x10
        [3] => x2
    )
    
    rsort regular:
    Array
    (
        [0] => x2
        [1] => x10
        [2] => add1
        [3] => ach0
        [4] => 20x
        [5] => 10x
        [6] => 0x10
        [7] => 8
        [8] => 1
        [9] => 1
        [10] => 0
    )
    
    rsort numeric:
    Array
    (
        [0] => 20x
        [1] => 10x
        [2] => 8
        [3] => 1
        [4] => 1
        [5] => ach0
        [6] => add1
        [7] => 0x10
        [8] => x2
        [9] => x10
        [10] => 0
    )
    
    rsort string:
    Array
    (
        [0] => x2
        [1] => x10
        [2] => add1
        [3] => ach0
        [4] => 8
        [5] => 20x
        [6] => 10x
        [7] => 1
        [8] => 1
        [9] => 0x10
        [10] => 0
    )
    
    rsort locale:
    Array
    (
        [0] => x2
        [1] => x10
        [2] => add1
        [3] => ach0
        [4] => 8
        [5] => 20x
        [6] => 10x
        [7] => 1
        [8] => 1
        [9] => 0x10
        [10] => 0
    )
    
    natsort:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [2b] => 1
        [z] => 1
        [x] => 8
        [1] => 10x
        [2] => 20x
        [5] => ach0
        [6] => add1
        [3] => x2
        [0] => x10
    )
    sort regular:
    Array
    (
        [0] => 0x10
        [1] => 10x
        [2] => 20x
        [3] => ach0
        [4] => add1
        [5] => x10
        [6] => 0
        [7] => x2
        [8] => 1
        [9] => 1
        [10] => 8
    )
    
    sort numeric:
    Array
    (
        [0] => x10
        [1] => 0
        [2] => x2
        [3] => ach0
        [4] => add1
        [5] => 1
        [6] => 1
        [7] => 8
        [8] => 10x
        [9] => 0x10
        [10] => 20x
    )
    
    sort string:
    Array
    (
        [0] => 0
        [1] => 0x10
        [2] => 1
        [3] => 1
        [4] => 10x
        [5] => 20x
        [6] => 8
        [7] => ach0
        [8] => add1
        [9] => x10
        [10] => x2
    )
    
    sort locale:
    Array
    (
        [0] => 0
        [1] => 0x10
        [2] => 1
        [3] => 1
        [4] => 10x
        [5] => 20x
        [6] => 8
        [7] => add1
        [8] => ach0
        [9] => x10
        [10] => x2
    )
    
    ksort regular:
    Array
    (
        [x] => 8
        [z] => 1
        [0] => x10
        [1] => 10x
        [2] => 20x
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [10a] => 0
        [2b] => 1
    )
    
    ksort numeric:
    Array
    (
        [x] => 8
        [z] => 1
        [0] => x10
        [1] => 10x
        [2b] => 1
        [2] => 20x
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [10a] => 0
    )
    
    ksort string:
    Array
    (
        [0] => x10
        [1] => 10x
        [10a] => 0
        [2] => 20x
        [2b] => 1
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [x] => 8
        [z] => 1
    )
    
    ksort locale:
    Array
    (
        [0] => x10
        [1] => 10x
        [10a] => 0
        [2] => 20x
        [2b] => 1
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [x] => 8
        [z] => 1
    )
    
    asort regular:
    Array
    (
        [4] => 0x10
        [1] => 10x
        [2] => 20x
        [5] => ach0
        [6] => add1
        [0] => x10
        [10a] => 0
        [3] => x2
        [z] => 1
        [2b] => 1
        [x] => 8
    )
    
    asort numeric:
    Array
    (
        [0] => x10
        [10a] => 0
        [3] => x2
        [5] => ach0
        [6] => add1
        [z] => 1
        [2b] => 1
        [x] => 8
        [1] => 10x
        [4] => 0x10
        [2] => 20x
    )
    
    asort string:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [z] => 1
        [2b] => 1
        [1] => 10x
        [2] => 20x
        [x] => 8
        [5] => ach0
        [6] => add1
        [0] => x10
        [3] => x2
    )
    
    asort locale:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [z] => 1
        [2b] => 1
        [1] => 10x
        [2] => 20x
        [x] => 8
        [6] => add1
        [5] => ach0
        [0] => x10
        [3] => x2
    )
    
    rsort regular:
    Array
    (
        [0] => 8
        [1] => 1
        [2] => 1
        [3] => x2
        [4] => x10
        [5] => 0
        [6] => add1
        [7] => ach0
        [8] => 20x
        [9] => 10x
        [10] => 0x10
    )
    
    rsort numeric:
    Array
    (
        [0] => 20x
        [1] => 0x10
        [2] => 10x
        [3] => 8
        [4] => 1
        [5] => 1
        [6] => x10
        [7] => 0
        [8] => x2
        [9] => ach0
        [10] => add1
    )
    
    rsort string:
    Array
    (
        [0] => x2
        [1] => x10
        [2] => add1
        [3] => ach0
        [4] => 8
        [5] => 20x
        [6] => 10x
        [7] => 1
        [8] => 1
        [9] => 0x10
        [10] => 0
    )
    
    rsort locale:
    Array
    (
        [0] => x2
        [1] => x10
        [2] => ach0
        [3] => add1
        [4] => 8
        [5] => 20x
        [6] => 10x
        [7] => 1
        [8] => 1
        [9] => 0x10
        [10] => 0
    )
    
    natsort:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [z] => 1
        [2b] => 1
        [x] => 8
        [1] => 10x
        [2] => 20x
        [5] => ach0
        [6] => add1
        [3] => x2
        [0] => x10
    )
    Arrays/usort.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    Array
    (
        [0] => 10
        [1] => 9
        [2] => 8
        [3] => 7
        [4] => 6
        [5] => 5
        [6] => 4
        [7] => 3
        [8] => 2
        [9] => 1
    )
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Array
    (
        [0] => 10
        [1] => 9
        [2] => 8
        [3] => 7
        [4] => 6
        [5] => 5
        [6] => 4
        [7] => 3
        [8] => 2
        [9] => 1
    )
    Arrays/lazy_copy/001.php: SUCCEEDED
    Arrays/lazy_copy/002.php: SUCCEEDED
    Arrays/lazy_copy/003.php: SUCCEEDED
    Arrays/lazy_copy/004.php: SUCCEEDED
    Arrays/lazy_copy/005.php: SUCCEEDED
    Arrays/lazy_copy/006.php: SUCCEEDED
    Bugs/class_incompletepart.php: SUCCEEDED
    Bugs/division-by-zero.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    DIVISION
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 6
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 8
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 10
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 12
    bool(false)
    MODULO
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 16
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 18
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 20
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 22
    bool(false)
    DIVISION
    bool(false)
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt at expression on line 10, column 2.
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt at expression on line 12, column 2.
    bool(false)
    MODULO
    bool(false)
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt at expression on line 20, column 2.
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt at expression on line 22, column 2.
    bool(false)
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt(6,10): warning PHP0150: Division by zero
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt(8,9): warning PHP0150: Division by zero
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt(16,10): warning PHP0150: Division by zero
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt(18,9): warning PHP0150: Division by zero
    
    Bugs/function-in-unknown-class.php: SUCCEEDED
    Bugs/if_if.php: SUCCEEDED
    Bugs/is_a_null_value.php: SUCCEEDED
    Bugs/preg-named-groups.php: SUCCEEDED
    Bugs/preg-replace-advanced.php: SUCCEEDED
    Bugs/preg-replace-range.php: SUCCEEDED
    Bugs/preg-replace.php: SUCCEEDED
    Bugs/preg-this-dynamic.php: FAILED
    Script hung upNo errorsSuccess
    Expected test outputReal script output
    Unhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---> PHP.Core.Debug+AssertException: Assertion failed: 
       at PHP.Core.Debug.Fail(String message)
       at PHP.Core.Debug.Assert(Boolean condition)
       at PHP.Core.RelativePath.ParseCanonical(String relativePath)
       at PHP.Core.Emit.TransientAssemblyBuilder.Build(String sourceCode, SourceCodeDescriptor descriptor, EvalKinds kind, CompilationContext context, ScriptContext scriptContext, DTypeDesc referringType, NamingContext namingContext, Boolean completeSource)
       at PHP.Core.DynamicCode.EvalInternal(String prefix, String code, String suffix, EvalKinds kind, ScriptContext scriptContext, Dictionary`2 localVariables, DObject self, DTypeDesc referringType, SourceCodeDescriptor descriptor, Boolean entireFile, NamingContext namingContext)
       at PHP.Core.DynamicCode.Eval(String code, Boolean synthetic, ScriptContext context, Dictionary`2 definedVariables, DObject self, DTypeDesc referringType, String callerRelativeSourcePath, Int32 line, Int32 column, Int32 containerId, NamingContext namingContext)
       at PHP.Library.PerlRegExp.Evaluator.ReplaceCodeExecute(Match m)
       at System.Text.RegularExpressions.RegexReplacement.Replace(MatchEvaluator evaluator, Regex regex, String input, Int32 count, Int32 startat)
       at System.Text.RegularExpressions.Regex.Replace(String input, MatchEvaluator evaluator, Int32 count)
       at PHP.Library.PerlRegExp.ReplaceInternal(DObject self, Dictionary`2 definedVariables, PerlRegExpConverter converter, PhpCallback callback, String str, Int32 limit, SourceCodeDescriptor sourceCodeDesc, Int32& count)
       at PHP.Library.PerlRegExp.SimpleReplace(DObject self, Dictionary`2 definedVariables, Object pattern, String replacement, PhpCallback callback, Object data, Int32 limit, SourceCodeDescriptor descriptor, Int32& count)
       at PHP.Library.PerlRegExp.Replace(ScriptContext context, DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, PhpCallback callback, Object data, Int32 limit, Int32& count)
       at PHP.Library.PerlRegExp.Replace(ScriptContext context, DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, Object data)
       at PHP.Dynamic.PhpNetClassLibrary.preg_replace(Object , PhpStack )
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.CallInternal(Dictionary`2 localVariables, NamingContext namingContext, Object name, String fallbackName, ScriptContext context)
       at PHP.Core.ScriptContext.CallVoid(Dictionary`2 localVariables, NamingContext namingContext, Object name, String fallbackName, ScriptContext context)
       at <__input.txt>.a.a(ScriptContext ) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt:line 17
       at <__input.txt>.a.<Mediator>(ScriptContext )
       at <__input.txt>.a.a(Object instance, PhpStack stack)
       at <__input.txt>.<Script>.<Main>(ScriptContext <context>, Dictionary`2 <locals>, DObject <self>, DTypeDesc <includer>, Boolean <request>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt:line 19
       at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)
       at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)
       --- End of inner exception stack trace ---
       at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)
       at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)
       at <Global>.Run(String[] )
    
    Bugs/preg-this-dynamic2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    foo: ahoj
    foo: lidi
    foo: rozkladame
    foo: ahoj
    foo: lidi
    foo: rozkladame
    foo: ahoj
    foo: lidi
    foo: rozkladame
    
    Notice: Undefined variable: this.
    
    Error: Call to a member function foo() on a non-object.
    Bugs/preg-this.php: SUCCEEDED
    Bugs/preg-ungreedy-bugs.php: SUCCEEDED
    Bugs/preg-unkn.php: SUCCEEDED
    Bugs/trigger_error%20line%20number%20%232787.php: SUCCEEDED
    CLR/BaseTypes.php: SUCCEEDED
    CLR/ClrEvent.php: SUCCEEDED
    CLR/ConditionalDecls.php: SUCCEEDED
    CLR/ConditionalDecls2.php: SUCCEEDED
    CLR/foreach.php: SUCCEEDED
    CLR/handle_enum.php: SUCCEEDED
    CLR/Inheritance1.php: FAILED
    Phalanger misbehaviour while compiling [file] sectionSee belowSuccess
    Expected test outputReal script output
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(3,2): error PHP2031: Circular interface inheritance dependency involving 'I4' and 'I1'
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(6,2): (related location)
    
    CLR/Inheritance2.php: FAILED
    Phalanger misbehaviour while compiling [file] sectionSee belowSuccess
    Expected test outputReal script output
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(3,2): error PHP2031: Circular interface inheritance dependency involving 'J4' and 'J1'
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(6,2): (related location)
    
    CLR/Inheritance3.php: FAILED
    Phalanger misbehaviour while compiling [file] sectionSee belowSuccess
    Expected test outputReal script output
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(3,2): error PHP2031: Circular interface inheritance dependency involving 'J5' and 'J5'
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(3,2): (related location)
    
    CLR/Inheritance4.php: FAILED
    Phalanger misbehaviour while compiling [file] sectionSee belowSuccess
    Expected test outputReal script output
    error PHP2007: Internal error! 
    Please, report this bug via http://www.codeplex.com/WorkItem/List.aspx?ProjectName=Phalanger.
    Additional information: 
    Could not load type '<__input.txt>.J`1' from assembly 'Inheritance4_file, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' because it has recursive generic definition.
       at System.Reflection.Emit.TypeBuilder.TermCreateClass(RuntimeModule module, Int32 tk, ObjectHandleOnStack type)
       at System.Reflection.Emit.TypeBuilder.CreateTypeNoLock()
       at System.Reflection.Emit.TypeBuilder.CreateType()
       at PHP.Core.Reflection.PhpType.Bake()
       at PHP.Core.Reflection.ScriptCompilationUnit.Bake()
       at PHP.Core.Reflection.InclusionGraphBuilder.EmitAllUnits(CodeGenerator codeGenerator)
       at PHP.Core.Emit.ScriptAssemblyBuilder.CompileScripts(IEnumerable`1 sourceFiles, String duckPath, String duckNamespace, CompilationContext context)
       at PHP.Core.Emit.ScriptAssemblyBuilder.Build(IEnumerable`1 sourceFiles, CompilationContext context)
       at PHP.Core.ApplicationCompiler.Compile(ApplicationContext applicationContext, CompilerConfiguration config, ErrorSink errorSink, CompilationParameters ps)
    
    
    CLR/Inheritance5.php: SUCCEEDED
    CLR/Inheritance6.php: SUCCEEDED
    CLR/Inheritance7.php: SUCCEEDED
    CLR/Inheritance8.php: SUCCEEDED
    CLR/Inheritance9.php: FAILED
    Phalanger misbehaviour while compiling [file] sectionSee belowSuccess
    Expected test outputReal script output
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(14,2): error PHP1018: Class 'D' doesn't implement abstract method I::f()
    
    CLR/Lambdas.php: FAILED
    Phalanger misbehaviour while compiling [file] sectionSee belowCompile error
    Expected test outputReal script output
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(5,34): error PHP2014: Syntax error: unexpected token '::'
    
    CLR/NameResolving.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    bool(false)
    bool(true)
    object(Directory)(2)
    {
      ["handle"] => NULL
      ["path"] => NULL
    }
    bool(false)
    
    Error: Class 'System\Collections\Dictionary' not found in D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt at expression on line 16, column 5.
    Compiler/abstracts.php: SUCCEEDED
    Compiler/aliased%20assign%20add.php: SUCCEEDED
    Compiler/assignments.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ---1---1float(-1.5)
    float(2.5)
    float(0.83333333333333)
    int(6)
    int(8)
    ---2---2float(8.8333333333333)
    float(8.8333333333333)
    float(8.8333333333333)
    int(8)
    int(8)
    ---3---3---4---4---5---5array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [1]=>
      array(1) {
        [2]=>
        array(1) {
          [3]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    ---6---6array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "u"
    }
    array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "v"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    ---7---7array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    ---8---8
    ---1---1float(-1.5)
    float(2.5)
    float(0.833333333333333)
    int(6)
    int(8)
    ---2---2float(8.83333333333333)
    float(8.83333333333333)
    float(8.83333333333333)
    int(8)
    int(8)
    ---3---3---4---4---5---5array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [1]=>
      array(1) {
        [2]=>
        array(1) {
          [3]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    ---6---6array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "u"
    }
    array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "v"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    ---7---7array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    ---8---8
    Compiler/assign_in_call.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    g1:
    f(x)
    u(x)
    'x'
    
    g2:
    f(x)
    u(x)
    'b'
    
    g3:
    f(x)
    u(x)
    'b'
    
    g4:
    f(x)
    u(x)
    'b'
    
    g5:
    f()
    u()
    integer(1)
    
    g6:
    f(3)
    u(3)
    integer(3)
    
    g7:
    f(2)
    u(10)
    integer(10)
    
    g8:
    f(1)
    f(1)
    f(1)
    u(1)
    u()
    u(1)
    
    g9:
    known:
    __get(p) = 0
    __set(p,1)
    f(1)
    unknown:
    __get(p) = 1
    __set(p,3)
    u(3)
    
    g10:
    Done.
    g1:
    f(x)
    u(x)
    'x'
    
    g2:
    f(x)
    u(x)
    'b'
    
    g3:
    f(x)
    u(x)
    'b'
    
    g4:
    f(x)
    u(x)
    'b'
    
    g5:
    f()
    u()
    integer(1)
    
    g6:
    f(3)
    u(3)
    integer(3)
    
    g7:
    f(2)
    u(10)
    integer(10)
    
    g8:
    f(1)
    f(1)
    f(1)
    u(1)
    u()
    u(1)
    
    g9:
    known:
    __get(p) = 0
    __set(p,1)
    __get(p) = 1
    f(1)
    unknown:
    __get(p) = 1
    __set(p,3)
    __get(p) = 3
    u(3)
    
    g10:
    Done.
    Compiler/auto_globals_001.php: SUCCEEDED
    Compiler/auto_globals_002.php: SUCCEEDED
    Compiler/auto_globals_003.php: SUCCEEDED
    Compiler/break_in_global_code.php: SUCCEEDED
    Compiler/chaining_test.php: SUCCEEDED
    Compiler/chain_ending_by_string_index.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        string(1) "f"
      }
    }
    array(1) {
      [0]=>
      string(4) "xubu"
    }
    object(C)#1 (1) {
      ["f"]=>
      string(4) "kuxu"
    }
    string(5) "helxo"
    string(5) "helxo"
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        string(1) "f"
      }
    }
    array(1) {
      [0]=>
      string(4) "bubu"
    }
    
    Warning: A string item used as a reference in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt at expression on line 19, column 1.
    object(C)(1) {
      ["f"]=>
      string(4) "kuku"
    }
    
    Warning: A string item used as a reference in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt at expression on line 25, column 1.
    string(5) "hello"
    
    Warning: A string item used as a reference in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt at expression on line 31, column 1.
    string(5) "hello"
    Compiler/continue_in_global_code.php: SUCCEEDED
    Compiler/deep_copy.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array(1) {
      [0]=>
      &array(1) {
        [0]=>
        &array(1) {
          [0]=>
          *RECURSION*
        }
      }
    }
    array(1) {
      [0]=>
      &array(1) {
        [0]=>
        &array(1) {
          [0]=>
          *RECURSION*
        }
      }
    }
    array(2) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) {
          [0]=>
          *RECURSION*
          [1]=>
          int(1)
        }
        [1]=>
        int(1)
      }
      [1]=>
      int(1)
    }
    array(1) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) {
          [0]=>
          *RECURSION*
          [1]=>
          int(1)
        }
        [1]=>
        int(1)
      }
    }
    array(1) {
      [0]=>
      &array(1) [recursion]
    }
    array(1) {
      [0]=>
      &array(1) {
        [0]=>
        &array(1) [recursion]
      }
    }
    array(2) {
      [0]=>
      &array(2) [recursion]
      [1]=>
      int(1)
    }
    array(1) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) [recursion]
        [1]=>
        int(1)
      }
    }
    Compiler/deep_copy_refbox.php: SUCCEEDED
    Compiler/expr_init.php: SUCCEEDED
    Compiler/foreach1.php: SUCCEEDED
    Compiler/foreach_arrays.php: SUCCEEDED
    Compiler/for_loop.php: SUCCEEDED
    Compiler/function_002.php: SUCCEEDED
    Compiler/function_003.php: SUCCEEDED
    Compiler/function_004.php: SUCCEEDED
    Compiler/function_call.php: SUCCEEDED
    Compiler/func_get_args.php: SUCCEEDED
    Compiler/if_statement.php: SUCCEEDED
    Compiler/indirect_001.php: SUCCEEDED
    Compiler/indirect_002.php: SUCCEEDED
    Compiler/indirect_003.php: SUCCEEDED
    Compiler/indirect_004.php: SUCCEEDED
    Compiler/indirect_005.php: SUCCEEDED
    Compiler/indirect_007.php: SUCCEEDED
    Compiler/indirect_global.php: SUCCEEDED
    Compiler/inheritance.php: SUCCEEDED
    Compiler/inheritance2.php: SUCCEEDED
    Compiler/isset_unset_001.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Testing x in global code:  <br>
    1 <br>
     <br>
    Testing x (object) in optimized function:  <br>
    1 <br>
     <br>
    Testing x (PhpReference) in optimized function:  <br>
    1 <br>
     <br>
    
    Notice: Undefined variable: y in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt on line 29
    Testing $$x (created at runtime) in optimized function:  <br>
    1 <br>
    Testing x in global code:  <br>
    1 <br>
     <br>
    Testing x (object) in optimized function:  <br>
    1 <br>
     <br>
    Testing x (PhpReference) in optimized function:  <br>
    1 <br>
     <br>
    Testing $$x (created at runtime) in optimized function:  <br>
    1 <br>
    Compiler/list%20%2326681.php: SUCCEEDED
    Compiler/new_array_item_assignadd.php: SUCCEEDED
    Compiler/null_hints.php: SUCCEEDED
    Compiler/pure_create_function.php: SUCCEEDED
    Compiler/pure_function_exists.php: SUCCEEDED
    Compiler/pure_math_str.php: SUCCEEDED
    Compiler/static_call.php: SUCCEEDED
    Compiler/switch.php: SUCCEEDED
    Compiler/ternary_ex.php: SUCCEEDED
    Compiler/ternary_short.php: SUCCEEDED
    Compiler/this%20call.php: SUCCEEDED
    Compiler/typehint_check.php: SUCCEEDED
    Compiler/__call.php: SUCCEEDED
    Compiler/Inclusions/include2.php: SUCCEEDED
    Compiler/Inclusions/include3.php: SUCCEEDED
    Compiler/Inclusions/include6.php: SUCCEEDED
    Compiler/Inclusions/include_test.php: SUCCEEDED
    Compiler/Inclusions/script.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t01.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t02.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t03.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t04.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t05.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t08.php: SUCCEEDED
    Compiler/Namespaces/const1.php: SUCCEEDED
    Compiler/Namespaces/constants1.php: SUCCEEDED
    Compiler/Namespaces/extends1.php: SUCCEEDED
    Compiler/Namespaces/function1.php: SUCCEEDED
    Compiler/Namespaces/function2.php: SUCCEEDED
    Compiler/Namespaces/namespace1.php: SUCCEEDED
    Compiler/Namespaces/simple_syntax1.php: SUCCEEDED
    Compiler/Namespaces/use1.php: SUCCEEDED
    Compiler/Namespaces/use2.php: SUCCEEDED
    Compiler/Namespaces/use3.php: SUCCEEDED
    Compiler/PseudoConst/parent.php: SUCCEEDED
    Compiler/PseudoConst/parent2.php: SUCCEEDED
    Compiler/PseudoConst/self.php: SUCCEEDED
    Compiler/PseudoConst/t01.php: SUCCEEDED
    Compiler/PseudoConst/t02.php: SUCCEEDED
    Compiler/PseudoConst/t03.php: SUCCEEDED
    Compiler/PseudoConst/t04.php: SUCCEEDED
    Compiler/PseudoConst/t05.php: SUCCEEDED
    Compiler/PseudoConst/t06.php: SUCCEEDED
    Compiler/PseudoConst/t07.php: SUCCEEDED
    Compiler/PseudoConst/t08.php: SUCCEEDED
    Compiler/PseudoConst/t09.php: SUCCEEDED
    Compiler/PseudoConst/t10.php: SUCCEEDED
    Compiler/PseudoConst/t11.php: SUCCEEDED
    Compiler/PseudoConst/_class_.php: SUCCEEDED
    Compiler/PseudoConst/_dir_.php: SUCCEEDED
    Compiler/PseudoConst/_function_.php: SUCCEEDED
    Compiler/References/array_argument.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(2)
        [1]=>
        int(3)
      }
    }
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    Compiler/References/array_local.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(2)
        [1]=>
        int(3)
      }
    }
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    Compiler/References/array_ret_argument.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(2)
        [1]=>
        int(3)
      }
    }
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    Compiler/References/array_ret_argument2.php: SUCCEEDED
    Compiler/References/deepcopy.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <br/><br/>globalobjects: array(2) {
      [0]=>
      int(1)
      [1]=>
      int(7)
    }
    <br/><br/>globalobjects: array(2) {
      [0]=>
      int(1)
      [1]=>
      &int(7)
    }
    Compiler/References/explicitclear.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Construyendo Y
    call foo12Destruyendo Y
    3object(X)#1 (2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      int(54)
    }
    array(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      string(10) "Init Value"
    }
    x: object(X)#1 (2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      int(1004)
    }
    <br/>checkpoint array(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      int(54)
    }
    Construyendo Y
    call foo123object(X)(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      &int(54)
    }
    array(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      &int(54)
    }
    x: object(X)(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      &int(1004)
    }
    <br/>checkpoint array(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      &int(1004)
    }
    Destruyendo Y
    Compiler/References/field_argument.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: int(7)
    <br/><br/>checkpoint array(1) {
      ["objects"]=>
      int(8)
    }
    x: int(7)
    <br/><br/>checkpoint array(1) {
      ["objects"]=>
      &int(7)
    }
    Compiler/References/field_local.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: object(X)#1 (1) {
      ["objects"]=>
      int(25)
    }
    <br/>checkpoint array(1) {
      ["objects"]=>
      int(7)
    }
    x: object(X)(1) {
      ["objects"]=>
      &int(25)
    }
    <br/>checkpoint array(1) {
      ["objects"]=>
      &int(25)
    }
    Compiler/References/ref_arrayitem.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(2)
        [1]=>
        int(3)
      }
    }
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    Compiler/References/ref_reasign.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    object(X)#1 (2) {
      ["objects"]=>
      int(54)
      ["objects2"]=>
      &int(222)
    }
    array(2) {
      ["objects"]=>
      int(7)
      ["objects2"]=>
      &int(222)
    }
    x: object(X)#1 (2) {
      ["objects"]=>
      int(1004)
      ["objects2"]=>
      int(777)
    }
    <br/>checkpoint array(2) {
      ["objects"]=>
      int(54)
      ["objects2"]=>
      int(222)
    }
    object(X)(2) {
      ["objects"]=>
      &int(54)
      ["objects2"]=>
      &int(222)
    }
    array(2) {
      ["objects"]=>
      &int(54)
      ["objects2"]=>
      &int(222)
    }
    x: object(X)(2) {
      ["objects"]=>
      &int(1004)
      ["objects2"]=>
      &int(777)
    }
    <br/>checkpoint array(2) {
      ["objects"]=>
      &int(1004)
      ["objects2"]=>
      &int(777)
    }
    Compiler/Unreachable/t13.php: SUCCEEDED
    Compiler/Unset/calluserfunc.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Warning: call_user_func() expects parameter 1 to be a valid callback, function 'unset' not found or invalid function name in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\Unset\__input.txt on line 3
    int(10)
    Error: call_user_func(): Call to undefined function: 'unset' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\Unset\__input.txt at expression on line 3, column 1.
    Compiler/Unset/issetref2.php: SUCCEEDED
    Compiler/Unset/unsetglobal.php: SUCCEEDED
    Compiler/Unset/unsetglobal2.php: SUCCEEDED
    Compiler/Unset/unsetindirect.php: SUCCEEDED
    Compiler/Unset/unsetproblem.php: SUCCEEDED
    Compiler/Unset/unsetref.php: SUCCEEDED
    Compiler/Unset/unsetref2.php: SUCCEEDED
    Compiler/Unset/unsetref3.php: SUCCEEDED
    Compiler/Unset/__unset.php: SUCCEEDED
    DateTime/strftime.php: SUCCEEDED
    DateTime/strtotime1.php: SUCCEEDED
    DateTime/strtotime2.php: SUCCEEDED
    DateTime/strtotime3.php: SUCCEEDED
    DateTime/strtotime4.php: SUCCEEDED
    DateTime/strtotime5.php: SUCCEEDED
    DateTime/time.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    -189388800:-189475200 - 86400
    1964-01-01T00:00:00+0000
    1963-12-31T00:00:00+0000
    1964-06-06
    1963-06-06
    1964-01-06
    1133305200
    -189388800:-189475200 - 86400
    1964-01-01T00:00:00+0000
    1963-12-31T00:00:00+0000
    1964-06-06
    1963-06-06
    1964-01-06
    DateTime/timezones1.php: SUCCEEDED
    DLR/classContext.php: SUCCEEDED
    DLR/classContext1.php: SUCCEEDED
    DLR/classContext2.php: SUCCEEDED
    DLR/restrictions%20generics.php: SUCCEEDED
    DLR/restrictions.php: SUCCEEDED
    DLR/targets.php: SUCCEEDED
    FileSystem/basename.php: SUCCEEDED
    FileSystem/basename2.php: SUCCEEDED
    FileSystem/chdir.php: SUCCEEDED
    FileSystem/csv.php: SUCCEEDED
    FileSystem/date.php: SUCCEEDED
    FileSystem/date2.php: SUCCEEDED
    FileSystem/date3.php: SUCCEEDED
    FileSystem/date_unix.php: SUCCEEDED
    FileSystem/dirname.php: SUCCEEDED
    FileSystem/dirname2.php: SUCCEEDED
    FileSystem/disk_free_space.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    543 GB
    Drive C: 24 GB
    Drive D: 543 GB
    Drive E: 
    Warning: disk_free_space(): The system cannot find the path specified.
     in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 14
    false
    Drive F: 
    Warning: disk_free_space(): The device is not ready.
     in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 14
    false
    543 GB
    Drive C: 24 GB
    Drive D: 543 GB
    Drive E: false
    Drive F: false
    FileSystem/disk_total_space.php: SUCCEEDED
    FileSystem/fgets.php: SUCCEEDED
    FileSystem/file.php: SUCCEEDED
    FileSystem/filesize.php: SUCCEEDED
    FileSystem/file_exists.php: SUCCEEDED
    FileSystem/file_get_contents.php: SUCCEEDED
    FileSystem/fpassthru.php: SUCCEEDED
    FileSystem/fread.php: SUCCEEDED
    FileSystem/fread1.php: SUCCEEDED
    FileSystem/fread2.php: SUCCEEDED
    FileSystem/fseek.php: SUCCEEDED
    FileSystem/fsockopen.php: SUCCEEDED
    FileSystem/ftell.php: SUCCEEDED
    FileSystem/glob_up_dirs.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string(7) "../@PHP"
    string(9) "../Arrays"
    string(7) "../Bugs"
    string(6) "../CLR"
    string(11) "../Compiler"
    string(6) "../DLR"
    string(11) "../DateTime"
    string(13) "../FileSystem"
    string(7) "../Math"
    string(7) "../Misc"
    string(10) "../Objects"
    string(10) "../PHP.NET"
    string(8) "../RegEx"
    string(6) "../SPL"
    string(10) "../Strings"
    string(11) "../TestLogs"
    string(12) "../Variables"
    string(6) "../Xml"
    string(7) "../@PHP"
    string(9) "../Arrays"
    string(7) "../Bugs"
    string(6) "../CLR"
    string(11) "../Compiler"
    string(11) "../DateTime"
    string(6) "../DLR"
    string(13) "../FileSystem"
    string(7) "../Math"
    string(7) "../Misc"
    string(10) "../Objects"
    string(10) "../PHP.NET"
    string(8) "../RegEx"
    string(6) "../SPL"
    string(10) "../Strings"
    string(11) "../TestLogs"
    string(12) "../Variables"
    string(6) "../Xml"
    FileSystem/is_dir.php: SUCCEEDED
    FileSystem/is_executable.php: SUCCEEDED
    FileSystem/pathinfo.php: SUCCEEDED
    FileSystem/popen.php: SUCCEEDED
    FileSystem/readdir.php: SUCCEEDED
    FileSystem/readfile.php: SUCCEEDED
    FileSystem/readline.php: SUCCEEDED
    FileSystem/realpath.php: SUCCEEDED
    FileSystem/scandir.php: SUCCEEDED
    FileSystem/stat.php: SUCCEEDED
    FileSystem/stream_context_set_option.php: SUCCEEDED
    FileSystem/stream_copy_to_stream.php: SUCCEEDED
    FileSystem/stream_copy_to_stream2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <p>Read <b>rb</b>, Write <b>wb</b>
    
    
    COPIED: <b>29872</b>
    <p>Read <b>rb</b>, Write <b>wt</b>
    
    
    COPIED: <b>29860</b>
    <p>Read <b>rb</b>, Write <b>wb</b>
    
    
    COPIED: <b>29872</b>
    <p>Read <b>rb</b>, Write <b>wt</b>
    
    
    COPIED: <b>29848</b>
    FileSystem/testinc.php: SUCCEEDED
    FileSystem/touch.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Warning: touch(): Utime failed: Bad file descriptor in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 8
    Sorry Could Not change modification time of touch.txt
    Warning: touch(): Utime failed: Bad file descriptor in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 14
    
    Warning: touch(): Utime failed: Bad file descriptor in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 16
    
    Warning: touch(): Utime failed: Bad file descriptor in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 17
    <pre>[ARRAY
      [INT (0)] => [STRING: "May 10, 2011; [00:50:21] (00h) ctime test.txt (1304981421)"]
      [INT (1)] => [STRING: "February 19, 2011; [22:06:05] (22h) mtime test.txt (1298149565)"]
      [INT (2)] => [STRING: "May 10, 2011; [00:50:21] (00h) ctime touch.txt (1304981421)"]
      [INT (3)] => [STRING: "February 19, 2011; [22:06:05] (22h) mtime touch.txt (1298149565)"]
      [INT (4)] => [STRING: "May 10, 2011; [00:50:21] (00h) atime touch.txt (1304981421)"]
      [INT (5)] => [STRING: "February 19, 2011; [22:06:05] (22h) mtime summer.txt (1298149565)"]
      [INT (6)] => [STRING: "February 19, 2011; [22:06:05] (22h) mtime winter.txt (1298149565)"]
    ]</pre>
    Warning: touch(): Unable to access (D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\touch.txt): Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 8, column 5.
    Sorry Could Not change modification time of touch.txt
    Warning: touch(): Unable to access (D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\touch.txt): Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 14, column 1.
    
    Warning: touch(): Unable to access (D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\winter.txt): Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 16, column 1.
    
    Warning: touch(): Unable to access (D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\summer.txt): Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 17, column 1.
    <pre>[ARRAY
      [INT (0)] => [STRING: "May 10, 2011; [00:50:21] (00h) ctime test.txt (1304981421)"]
      [INT (1)] => [STRING: "February 19, 2011; [23:06:05] (23h) mtime test.txt (1298153165)"]
      [INT (2)] => [STRING: "May 10, 2011; [00:50:21] (00h) ctime touch.txt (1304981421)"]
      [INT (3)] => [STRING: "February 19, 2011; [23:06:05] (23h) mtime touch.txt (1298153165)"]
      [INT (4)] => [STRING: "May 10, 2011; [00:50:21] (00h) atime touch.txt (1304981421)"]
      [INT (5)] => [STRING: "February 19, 2011; [23:06:05] (23h) mtime summer.txt (1298153165)"]
      [INT (6)] => [STRING: "February 19, 2011; [23:06:05] (23h) mtime winter.txt (1298153165)"]
    ]</pre>
    FileSystem/tar/tar_test.php: SUCCEEDED
    FileSystem/zip/zip.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    correct
    Error: Call to undefined function: 'zip_open' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\zip\__input.txt at expression on line 3, column 1.
    Math/abs.php: SUCCEEDED
    Math/atan2.php: SUCCEEDED
    Math/base_convert.php: SUCCEEDED
    Math/bindec.php: SUCCEEDED
    Math/ceil.php: SUCCEEDED
    Math/cos.php: SUCCEEDED
    Math/decbin.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <pre>
    [double: 2294967295]
    10001000110010100110101111111111
    [double: 4294967296]
    0
    [double: 8589934590]
    11111111111111111111111111111110
    [double: 8589934590]
    11111111111111111111111111111110
    [double: 8589934591]
    11111111111111111111111111111111
    [Int: 1000.000.000.000]
    11010100101001010001000000000000
    <hr>(-1, -5435, 2.14, 0, 26)
    11111111111111111111111111111111
    11111111111111111110101011000101
    10
    0
    11010 
    </pre>
    <pre>
    [???: 2294967295]
    10001000110010100110101111111111
    [???: 4294967296]
    0
    [???: 8589934590]
    11111111111111111111111111111110
    [???: 8589934590]
    11111111111111111111111111111110
    [???: 8589934591]
    11111111111111111111111111111111
    [Int: 1000.000.000.000]
    11010100101001010001000000000000
    <hr>(-1, -5435, 2.14, 0, 26)
    11111111111111111111111111111111
    11111111111111111110101011000101
    10
    0
    11010 
    </pre>
    Math/dechex.php: SUCCEEDED
    Math/decoct.php: SUCCEEDED
    Math/deg2rad.php: SUCCEEDED
    Math/exp.php: SUCCEEDED
    Math/floor.php: SUCCEEDED
    Math/fmod.php: SUCCEEDED
    Math/hexdec.php: SUCCEEDED
    Math/max.php: SUCCEEDED
    Math/min.php: SUCCEEDED
    Math/modulo_warn.php: SUCCEEDED
    Math/octdec.php: SUCCEEDED
    Math/pow.php: SUCCEEDED
    Math/rad2deg.php: SUCCEEDED
    Math/round.php: SUCCEEDED
    Math/sin.php: SUCCEEDED
    Math/sqrt.php: SUCCEEDED
    Math/tan.php: SUCCEEDED
    Math/uniqid.php: SUCCEEDED
    Misc/calendar_extension.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0
    0
    2375840
    0
    14
    32
    2
    There are 31 days in August 2003
    There are 28 days in February 2003
    There are 29 days in February 2004
    There are 31 days in December 2034
    1748326
    1748324
    374867
    0
    322f32322f35373633
    ebe120e7f9e5ef20e4faf9f1e2
    ebe120e7f9e5ef20e427faf9f1e2
    ebe120e7f9e5ef20e420e0ecf4e9ed20faf9f1e2
    ebe120e7f9e5ef20e42720e0ecf4e9ed20faf9f1e2
    eb22e120e7f9e5ef20e4faf9f122e2
    e12720e7f9e5ef20e4faf9f122e2
    e12720e7f9e5ef20e427faf9f122e2
    e12720e7f9e5ef20e420e0ecf4e9ed20faf9f122e2
    e12720e7f9e5ef20e42720e0ecf4e9ed20faf9f122e2
    Error: Call to undefined function: 'frenchtojd' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt at expression on line 2, column 1.
    Misc/dir_read.php: SUCCEEDED
    Misc/fgetcsv%20%2327492.php: SUCCEEDED
    Misc/hash%20functions%20%2326667.php: SUCCEEDED
    Misc/ini_parse.php: SUCCEEDED
    Misc/json%20%2327838.php: SUCCEEDED
    Misc/lexer.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    T_INLINE_HTML
    311 '\r\n'
    T_OPEN_TAG
    368 '&lt;?'
    T_WHITESPACE
    371 ' \r\n\r\n'
    T_FINAL
    345 'final'
    T_WHITESPACE
    371 ' '
    T_CLASS
    353 'class'
    T_WHITESPACE
    371 ' '
    T_STRING
    307 'A'
    T_WHITESPACE
    371 ' \r\n'
        '{'
    T_WHITESPACE
    371 ' \r\n  '
    T_FUNCTION
    334 'function'
    T_WHITESPACE
    371 ' '
    T_STRING
    307 '__get'
        '('
    T_VARIABLE
    309 '$x'
        ')'
    T_WHITESPACE
    371 ' \r\n  '
        '{'
    T_WHITESPACE
    371 ' \r\n    '
    T_VARIABLE
    309 '$x'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_START_HEREDOC
    372 '&lt;&lt;&lt;EOOOOOOOOOOOOOOT\r\n'
    T_ENCAPSED_AND_WHITESPACE
    314 '         &lt;&lt;&lt;hello\r\nEOOOOOOOOOOOOOOt;\r\nEOOOOOOOOOOOOOT;\r\n'
    T_END_HEREDOC
    373 'EOOOOOOOOOOOOOOT'
        ';'
    T_WHITESPACE
    371 '\r\n\r\n    '
        '$'
    T_VARIABLE
    309 '$y'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_ARRAY
    360 'array'
    T_WHITESPACE
    371 ' '
        '('
    T_LNUMBER
    305 '1'
        ','
    T_DNUMBER
    306 '100000000000000'
        ','
    T_DNUMBER
    306 '999999999999999999999999999999999'
        ','
    T_STRING
    307 'true'
        ','
    T_STRING
    307 'false'
        ')'
        ';'
    T_WHITESPACE
    371 '\r\n    '
        '$'
        '{'
        '&quot;'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
    T_DOLLAR_OPEN_CURLY_BRACES
    374 '${'
        '$'
        '{'
    T_CONSTANT_ENCAPSED_STRING
    315 '&quot;xxx&quot;'
        '}'
        '}'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
        '&quot;'
        '}'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_LNUMBER
    305 '1'
        ';'
    T_WHITESPACE
    371 '\r\n    '
        '$'
        '{'
        '&quot;'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
    T_DOLLAR_OPEN_CURLY_BRACES
    374 '${'
        '$'
        '{'
        '&quot;'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
    T_VARIABLE
    309 '$x'
    T_ENCAPSED_AND_WHITESPACE
    314 '-&gt;$$'
    T_VARIABLE
    309 '$x0xx'
        '&quot;'
        '}'
        '}'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
        '&quot;'
        '}'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_LNUMBER
    305 '1'
        ';'
    T_WHITESPACE
    371 '\r\n  '
        '}'
    T_WHITESPACE
    371 ' \r\n'
        '}'
    T_WHITESPACE
    371 '\r\n\r\n'
    T_CLOSE_TAG
    370 '?&gt;'
    '
    '
        '&lt;?'
        ' 
    
    '
        'final'
        ' '
        'class'
        ' '
        'A'
        ' 
    '
        '{'
        ' 
      '
        'function'
        ' '
    259
    259 '__get'
        '('
        '$x'
        ')'
        ' 
      '
        '{'
        ' 
        '
        '$x'
        ' '
        '='
        ' '
        '&lt;&lt;&lt;EOOOOOOOOOOOOOOT
    '
        '         &lt;&lt;&lt;'
        'hello'
        '
    '
        'EOOOOOOOOOOOOOOt;
    '
        'EOOOOOOOOOOOOOT;
    '
        'EOOOOOOOOOOOOOOT'
        ';'
        '
    
        '
        '$'
        '$y'
        ' '
        '='
        ' '
        'array'
        ' '
        '('
        '1'
        ','
        '100000000000000'
        ','
        '999999999999999999999999999999999'
        ','
    256
    256 'true'
        ','
    257
    257 'false'
        ')'
        ';'
        '
        '
        '$'
        '{'
        '&quot;'
        'x'
        '${'
        '$'
        '{'
    -29
    -29 '&quot;xxx&quot;'
        '}'
        '}'
        'x'
        '&quot;'
        '}'
        ' '
        '='
        ' '
        '1'
        ';'
        '
        '
        '$'
        '{'
        '&quot;'
        'x'
        '${'
        '$'
        '{'
        '&quot;'
        'x'
        '$x'
        '-&gt;'
        '$'
        '$'
        '$x0xx'
        '&quot;'
        '}'
        '}'
        'x'
        '&quot;'
        '}'
        ' '
        '='
        ' '
        '1'
        ';'
        '
      '
        '}'
        ' 
    '
        '}'
        '
    
    '
        '?&gt;'
    Misc/locale.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string(1) "C"
    double(1.54)
    double(Infinity)
    654564.145400
    Sat Saturday Apr April
    --------------
    string(19) "Danish_Denmark.1252"
    double(1.54)
    double(Infinity)
    654564,145400
    lo lordag apr april
    --------------
    string(25) "Czech_Czech Republic.1250"
    double(1.54)
    double(Infinity)
    654564,145400
    so sobota IV duben
    --------------
    string(1) "C"
    float(1.54)
    float(Infinity)
    654564.145400
    Sat Saturday Apr April
    --------------
    string(19) "Danish_Denmark.1252"
    float(1.54)
    float(Infinity)
    654564,145400
    lo lordag apr april
    --------------
    string(25) "Czech_Czech Republic.1250"
    float(1.54)
    float(Infinity)
    654564,145400
    so sobota 4 duben
    --------------
    Misc/output2.php: SUCCEEDED
    Misc/parse_url%20%2327377.php: SUCCEEDED
    Misc/parse_url_at_bug.php: SUCCEEDED
    Misc/stack_trace.php: FAILED
    Script hung upNo errorsSuccess
    Expected test outputReal script output
    Unhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---> System.IndexOutOfRangeException: Index was outside the bounds of the array.
       at PHP.Core.PhpStackFrame..ctor(ScriptContext context, StackFrame frame, FrameKinds kind)
       at PHP.Core.PhpStackTrace..ctor(ScriptContext context, StackTrace clrTrace)
       at PHP.Core.PhpStackTrace..ctor(ScriptContext context, Int32 skipFrames)
       at PHP.Library.Errors.Backtrace()
       at <stack_trace.inc>.<Script>.j(ScriptContext <context>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\stack_trace.inc:line 11
       at <stack_trace.inc>.<Script>.j(Object instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.CallInternal(Dictionary`2 localVariables, NamingContext namingContext, Object name, String fallbackName, ScriptContext context)
       at PHP.Core.ScriptContext.CallVoid(Dictionary`2 localVariables, NamingContext namingContext, Object name, String fallbackName, ScriptContext context)
       at <stack_trace.inc>.<Script>.i(ScriptContext <context>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\stack_trace.inc:line 7
       at <stack_trace.inc>.<Script>.i(Object instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.CallInternal(Dictionary`2 localVariables, NamingContext namingContext, Object name, String fallbackName, ScriptContext context)
       at PHP.Core.ScriptContext.CallVoid(Dictionary`2 localVariables, NamingContext namingContext, Object name, String fallbackName, ScriptContext context)
       at <^0>.<Global>.<?0>.h(ScriptContext <context>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt:line 14
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack, DTypeDesc caller)
       at PHP.Core.PhpCallback.InvokeInternal(Object[] args)
       at PHP.Core.PhpCallback.Invoke(Object[] args)
       at PHP.Library.PhpArrays.Map(DTypeDesc caller, PhpCallback map, PhpArray[] arrays)
       at <__input.txt>.<Script>.<Lambda>(ScriptContext <context>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt:line 4
       at <__input.txt>.<Script>.<Lambda>(Object instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.CallInternal(Dictionary`2 localVariables, NamingContext namingContext, Object name, String fallbackName, ScriptContext context)
       at PHP.Core.ScriptContext.CallVoid(Dictionary`2 localVariables, NamingContext namingContext, Object name, String fallbackName, ScriptContext context)
       at <__input.txt>.<Script>.f(ScriptContext <context>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt:line 7
       at <__input.txt>.<Script>.f(Object instance, PhpStack stack)
       at <__input.txt>.<Script>.<Main>(ScriptContext <context>, Dictionary`2 <locals>, DObject <self>, DTypeDesc <includer>, Boolean <request>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt:line 18
       at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)
       at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)
       --- End of inner exception stack trace ---
       at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)
       at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)
       at <Global>.Run(String[] )
    
    Misc/str_getcsv%20%2326691.php: SUCCEEDED
    Misc/tokens.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    T_REQUIRE_ONCE = 258,
    T_REQUIRE = 259,
    T_EVAL = 260,
    T_INCLUDE_ONCE = 261,
    T_INCLUDE = 262,
    T_LOGICAL_OR = 263,
    T_LOGICAL_XOR = 264,
    T_LOGICAL_AND = 265,
    T_PRINT = 266,
    T_SR_EQUAL = 267,
    T_SL_EQUAL = 268,
    T_XOR_EQUAL = 269,
    T_OR_EQUAL = 270,
    T_AND_EQUAL = 271,
    T_MOD_EQUAL = 272,
    T_CONCAT_EQUAL = 273,
    T_DIV_EQUAL = 274,
    T_MUL_EQUAL = 275,
    T_MINUS_EQUAL = 276,
    T_PLUS_EQUAL = 277,
    T_BOOLEAN_OR = 278,
    T_BOOLEAN_AND = 279,
    T_IS_NOT_IDENTICAL = 280,
    T_IS_IDENTICAL = 281,
    T_IS_NOT_EQUAL = 282,
    T_IS_EQUAL = 283,
    T_IS_GREATER_OR_EQUAL = 284,
    T_IS_SMALLER_OR_EQUAL = 285,
    T_SR = 286,
    T_SL = 287,
    T_INSTANCEOF = 288,
    T_UNSET_CAST = 289,
    T_BOOL_CAST = 290,
    T_OBJECT_CAST = 291,
    T_ARRAY_CAST = 292,
    T_STRING_CAST = 293,
    T_DOUBLE_CAST = 294,
    T_INT_CAST = 295,
    T_DEC = 296,
    T_INC = 297,
    T_CLONE = 298,
    T_NEW = 299,
    T_EXIT = 300,
    T_IF = 301,
    T_ELSEIF = 302,
    T_ELSE = 303,
    T_ENDIF = 304,
    T_LNUMBER = 305,
    T_DNUMBER = 306,
    T_STRING = 307,
    T_STRING_VARNAME = 308,
    T_VARIABLE = 309,
    T_NUM_STRING = 310,
    T_INLINE_HTML = 311,
    T_CHARACTER = 312,
    T_BAD_CHARACTER = 313,
    T_ENCAPSED_AND_WHITESPACE = 314,
    T_CONSTANT_ENCAPSED_STRING = 315,
    T_ECHO = 316,
    T_DO = 317,
    T_WHILE = 318,
    T_ENDWHILE = 319,
    T_FOR = 320,
    T_ENDFOR = 321,
    T_FOREACH = 322,
    T_ENDFOREACH = 323,
    T_DECLARE = 324,
    T_ENDDECLARE = 325,
    T_AS = 326,
    T_SWITCH = 327,
    T_ENDSWITCH = 328,
    T_CASE = 329,
    T_DEFAULT = 330,
    T_BREAK = 331,
    T_CONTINUE = 332,
    T_GOTO = 333,
    T_FUNCTION = 334,
    T_CONST = 335,
    T_RETURN = 336,
    T_TRY = 337,
    T_CATCH = 338,
    T_THROW = 339,
    T_USE = 340,
    T_GLOBAL = 341,
    T_PUBLIC = 342,
    T_PROTECTED = 343,
    T_PRIVATE = 344,
    T_FINAL = 345,
    T_ABSTRACT = 346,
    T_STATIC = 347,
    T_VAR = 348,
    T_UNSET = 349,
    T_ISSET = 350,
    T_EMPTY = 351,
    T_HALT_COMPILER = 352,
    T_CLASS = 353,
    T_INTERFACE = 354,
    T_EXTENDS = 355,
    T_IMPLEMENTS = 356,
    T_OBJECT_OPERATOR = 357,
    T_DOUBLE_ARROW = 358,
    T_LIST = 359,
    T_ARRAY = 360,
    T_CLASS_C = 361,
    T_METHOD_C = 362,
    T_FUNC_C = 363,
    T_LINE = 364,
    T_FILE = 365,
    T_COMMENT = 366,
    T_DOC_COMMENT = 367,
    T_OPEN_TAG = 368,
    T_OPEN_TAG_WITH_ECHO = 369,
    T_CLOSE_TAG = 370,
    T_WHITESPACE = 371,
    T_START_HEREDOC = 372,
    T_END_HEREDOC = 373,
    T_DOLLAR_OPEN_CURLY_BRACES = 374,
    T_CURLY_OPEN = 375,
    T_PAAMAYIM_NEKUDOTAYIM = 376,
    T_DOUBLE_COLON = 376,
    T_NAMESPACE = 377,
    T_NS_C = 378,
    T_DIR = 379,
    T_NS_SEPARATOR = 380,
    T_INCLUDE = 129,
    T_INCLUDE_ONCE = 130,
    T_EVAL = 131,
    T_REQUIRE = 132,
    T_REQUIRE_ONCE = 133,
    T_LOGICAL_OR = 136,
    T_LOGICAL_XOR = 137,
    T_LOGICAL_AND = 138,
    T_PRINT = 139,
    T_PLUS_EQUAL = 140,
    T_MINUS_EQUAL = 141,
    T_MUL_EQUAL = 142,
    T_DIV_EQUAL = 143,
    T_CONCAT_EQUAL = 144,
    T_MOD_EQUAL = 145,
    T_AND_EQUAL = 146,
    T_OR_EQUAL = 147,
    T_XOR_EQUAL = 148,
    T_SL_EQUAL = 149,
    T_SR_EQUAL = 150,
    T_BOOLEAN_OR = 151,
    T_BOOLEAN_AND = 152,
    T_IS_EQUAL = 153,
    T_IS_NOT_EQUAL = 154,
    T_IS_IDENTICAL = 155,
    T_IS_NOT_IDENTICAL = 156,
    T_IS_SMALLER_OR_EQUAL = 157,
    T_IS_GREATER_OR_EQUAL = 158,
    T_SL = 159,
    T_SR = 160,
    T_INC = 161,
    T_DEC = 162,
    T_NEW = 164,
    T_INSTANCEOF = 165,
    T_CLONE = 167,
    T_LNUMBER = 168,
    T_DNUMBER = 170,
    T_STRING = 171,
    T_STRING_VARNAME = 172,
    T_VARIABLE = 173,
    T_NUM_STRING = 174,
    T_INLINE_HTML = 175,
    T_CHARACTER = 176,
    T_BAD_CHARACTER = 177,
    T_ENCAPSED_AND_WHITESPACE = 178,
    T_CONSTANT_ENCAPSED_STRING = 179,
    T_EXIT = 180,
    T_IF = 181,
    T_ELSEIF = 182,
    T_ELSE = 183,
    T_ENDIF = 184,
    T_ECHO = 185,
    T_DO = 186,
    T_WHILE = 187,
    T_ENDWHILE = 188,
    T_FOR = 189,
    T_ENDFOR = 190,
    T_FOREACH = 191,
    T_ENDFOREACH = 192,
    T_AS = 193,
    T_SWITCH = 194,
    T_ENDSWITCH = 195,
    T_CASE = 196,
    T_DEFAULT = 197,
    T_BREAK = 198,
    T_CONTINUE = 199,
    T_FUNCTION = 200,
    T_CONST = 201,
    T_RETURN = 202,
    T_GLOBAL = 203,
    T_STATIC = 204,
    T_VAR = 205,
    T_UNSET = 206,
    T_ISSET = 207,
    T_EMPTY = 208,
    T_CLASS = 209,
    T_EXTENDS = 210,
    T_OBJECT_OPERATOR = 211,
    T_DOUBLE_ARROW = 212,
    T_LIST = 213,
    T_ARRAY = 214,
    T_CLASS_C = 215,
    T_METHOD_C = 216,
    T_FUNC_C = 217,
    T_LINE = 218,
    T_FILE = 219,
    T_DIR = 220,
    T_COMMENT = 221,
    T_DOC_COMMENT = 222,
    T_OPEN_TAG = 227,
    T_OPEN_TAG_WITH_ECHO = 228,
    T_CLOSE_TAG = 229,
    T_WHITESPACE = 230,
    T_START_HEREDOC = 231,
    T_END_HEREDOC = 232,
    T_DOLLAR_OPEN_CURLY_BRACES = 233,
    T_CURLY_OPEN = 234,
    T_DOUBLE_COLON = 235,
    T_PAAMAYIM_NEKUDOTAYIM = 235,
    T_GOTO = 237,
    T_TRY = 238,
    T_CATCH = 239,
    T_THROW = 240,
    T_INTERFACE = 241,
    T_IMPLEMENTS = 242,
    T_ABSTRACT = 243,
    T_FINAL = 244,
    T_PRIVATE = 245,
    T_PROTECTED = 246,
    T_PUBLIC = 247,
    T_BOOL_CAST = 287,
    T_INT_CAST = 290,
    T_DOUBLE_CAST = 296,
    T_STRING_CAST = 299,
    T_ARRAY_CAST = 302,
    T_OBJECT_CAST = 303,
    T_UNSET_CAST = 304,
    T_HALT_COMPILER = 351,
    Misc/user_error_handlers.php: SUCCEEDED
    Objects/accessing%20property%20line%20number%20%2326052.php: SUCCEEDED
    Objects/conditional1.php: SUCCEEDED
    Objects/conditional2.php: SUCCEEDED
    Objects/conditional_base_class.php: SUCCEEDED
    Objects/constant_test.php: SUCCEEDED
    Objects/evaled_parent.php: SUCCEEDED
    Objects/getter_setter_bug28444.php: SUCCEEDED
    Objects/instanceof.php: SUCCEEDED
    Objects/new_via_unknown_ctor.php: SUCCEEDED
    Objects/object_creation_test.php: SUCCEEDED
    Objects/overrides%20%231285.php: SUCCEEDED
    Objects/static_field_test.php: SUCCEEDED
    Objects/static_inheritence.php: SUCCEEDED
    Objects/static_method_test.php: SUCCEEDED
    Objects/static_object_vars.php: SUCCEEDED
    Objects/sys_class_const.php: SUCCEEDED
    Objects/this2.php: SUCCEEDED
    Objects/__invoke.php: SUCCEEDED
    RegEx/backreferences.php: SUCCEEDED
    RegEx/dolar_escape.php: SUCCEEDED
    RegEx/ereg.php: SUCCEEDED
    RegEx/escaped_unicode.php: SUCCEEDED
    RegEx/namedbackref.php: SUCCEEDED
    RegEx/namedgroups.php: SUCCEEDED
    RegEx/namedgroups1.php: SUCCEEDED
    RegEx/namedgroups2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Warning: preg_match_all(): Numeric named subpatterns are not allowed in D:\Documents\Projects\Phalanger\Main\Testing\Tests\RegEx\__input.txt on line 6
    array(0) {
    }
    array(2) {
      [0]=>
      array(2) {
        [0]=>
        string(23) "flux.transitions.bars3d"
        [1]=>
        string(21) "flux.transitions.wrap"
      }
      [1]=>
      array(2) {
        [0]=>
        string(0) ""
        [1]=>
        string(0) ""
      }
    }
    RegEx/preg_match_unmatched_groups.php: SUCCEEDED
    RegEx/preg_replace_eval.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ab"01300 as"00da sd"0asdsa das asd 11asd a1sd a
    ab"01300 as"00da sd"0(aasdasdkjask,$a,\,\l,a,s,d,a,s,d,k,j,a,s,${120})(ldjaklsdjalk,$l,\,\l,d,j,a,k,l,s,d,j,a,l,${120})djdsa das asd 11asd a1sd a
    ab"01300 as"00da sd"0asdsa das asd 11asd a1sd a
    ab"01300 as"00da sd"0(aasdasdkjask,$a,\,\l,a,s,d,a,s,d,k,j,,,${120})(ldjaklsdjalk,$l,\,\l,d,j,a,k,l,s,d,j,,,${120})djdsa das asd 11asd a1sd a
    RegEx/regexp-sql.php: SUCCEEDED
    RegEx/regexp_smiles.php: SUCCEEDED
    RegEx/Perl/cache.php: SUCCEEDED
    RegEx/Perl/grep1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      [3] => string(3) "1.5"
      [6] => string(5) "58.54"
    }
    Notice: preg_grep(): Array to string conversion in D:\Documents\Projects\Phalanger\Main\Testing\Tests\RegEx\Perl\__input.txt at expression on line 5, column 1.
    array(2) {
      [3]=>
      string(3) "1.5"
      [6]=>
      string(5) "58.54"
    }
    RegEx/Perl/grep2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Food  array
    (
      [0] => apple
      [1] => banana
      [2] => squid
      [3] => pear
    )
    Fruit array
    (
      [0] => apple
      [1] => banana
      [3] => pear
    )
    Food  Array
    (
        [0] => apple
        [1] => banana
        [2] => squid
        [3] => pear
    )
    Fruit Array
    (
        [0] => apple
        [1] => banana
        [3] => pear
    )
    RegEx/Perl/match1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array [empty]
    array
    (
      [0] => array
      (
        [0] => def
        [1] => 3
      )
    )
    Array
    (
    )
    Array
    (
        [0] => Array
        (
            [0] => def
            [1] => 3
        )
    
    )
    RegEx/Perl/match10.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    (
      [0] => 1231
      [1] => 1
      [2] => 23
      [3] => 1
    )
    Array
    (
        [0] => 1231
        [1] => 1
        [2] => 23
        [3] => 1
    )
    RegEx/Perl/match2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    (
      [0] => array
      (
        [0] => def
        [1] => 0
      )
    )
    Array
    (
        [0] => Array
        (
            [0] => def
            [1] => 0
        )
    
    )
    RegEx/Perl/match3.php: SUCCEEDED
    RegEx/Perl/match4.php: SUCCEEDED
    RegEx/Perl/match5.php: SUCCEEDED
    RegEx/Perl/match6.php: SUCCEEDED
    RegEx/Perl/match7.php: SUCCEEDED
    RegEx/Perl/match8.php: SUCCEEDED
    RegEx/Perl/match9.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    (
      [0] => 209.6.145.47 - - [22/Nov/2003:19:02:30 -0500] "GET /dir/doc.htm HTTP/1.0" 200 6776 "http://search.yahoo.com/search?p=key+words=UTF-8" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)"
      [1] => 209.6.145.47
      [2] => -
      [3] => -
      [4] => 22/Nov/2003:19:02:30 -0500
      [5] => GET
      [6] => /dir/doc.htm
      [7] => HTTP
      [8] => 1.0
      [9] => 200
      [10] => 6776
      [11] => "http://search.yahoo.com/search?p=key+words=UTF-8"
      [12] => "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)"
    )
    Array
    (
        [0] => 209.6.145.47 - - [22/Nov/2003:19:02:30 -0500] "GET /dir/doc.htm HTTP/1.0" 200 6776 "http://search.yahoo.com/search?p=key+words=UTF-8" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)"
        [1] => 209.6.145.47
        [2] => -
        [3] => -
        [4] => 22/Nov/2003:19:02:30 -0500
        [5] => GET
        [6] => /dir/doc.htm
        [7] => HTTP
        [8] => 1.0
        [9] => 200
        [10] => 6776
        [11] => "http://search.yahoo.com/search?p=key+words=UTF-8"
        [12] => "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)"
    )
    RegEx/Perl/match_all1.php: SUCCEEDED
    RegEx/Perl/match_all2.php: SUCCEEDED
    RegEx/Perl/match_all3.php: SUCCEEDED
    RegEx/Perl/match_all4.php: SUCCEEDED
    RegEx/Perl/match_dollar.php: SUCCEEDED
    RegEx/Perl/overflow.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string("kfkaj +j k45´┐Ż´┐Ż´┐Ż´┐Ż´┐Ż3#$%^&kjakfjkaj|kfj")
    string("kfkaj +j k45�����3#$%^&kjakfjkaj|kfj")
    RegEx/Perl/quote1.php: SUCCEEDED
    RegEx/Perl/quote2.php: SUCCEEDED
    RegEx/Perl/quote3.php: SUCCEEDED
    RegEx/Perl/replace1.php: SUCCEEDED
    RegEx/Perl/replace2.php: SUCCEEDED
    RegEx/Perl/replace3.php: SUCCEEDED
    RegEx/Perl/replace4.php: SUCCEEDED
    RegEx/Perl/replace5.php: SUCCEEDED
    RegEx/Perl/replace6.php: SUCCEEDED
    RegEx/Perl/replace7.php: SUCCEEDED
    RegEx/Perl/replace8.php: SUCCEEDED
    RegEx/Perl/replace9.php: SUCCEEDED
    RegEx/Perl/replace_callback1.php: SUCCEEDED
    RegEx/Perl/replace_callback2.php: SUCCEEDED
    RegEx/Perl/split1.php: SUCCEEDED
    RegEx/Perl/split2.php: SUCCEEDED
    RegEx/Perl/split3.php: SUCCEEDED
    RegEx/Perl/split4.php: SUCCEEDED
    RegEx/Perl/split5.php: SUCCEEDED
    RegEx/Perl/split6.php: SUCCEEDED
    RegEx/Perl/ungreedy.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    aaa
    a
    aaa
    
    a
    aa
    aaa
    aa
    aaa
    aaa
    a
    aaa
    a
    a
    aa
    aaa
    aa
    aaa
    RegEx/Perl/unsuccessful-preg_match_all.php: SUCCEEDED
    RegEx/Perl/withoutdelimiters.php: SUCCEEDED
    SPL/ArrayAccess_offsetExists.php: SUCCEEDED
    SPL/Autoload_ctor.php: SUCCEEDED
    SPL/Autoload_extends.php: SUCCEEDED
    SPL/exceptions.php: SUCCEEDED
    Strings/addcslashes.php: SUCCEEDED
    Strings/addslashes.php: SUCCEEDED
    Strings/chunk_split.php: SUCCEEDED
    Strings/concat.php: SUCCEEDED
    Strings/count_chars.php: SUCCEEDED
    Strings/crc32.php: SUCCEEDED
    Strings/crypt.php: SUCCEEDED
    Strings/crypt2.php: SUCCEEDED
    Strings/echo.php: SUCCEEDED
    Strings/explode.php: SUCCEEDED
    Strings/get_html_translation_table.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <hr>[&] => &amp;
    [>] => &gt;
    [<] => &lt;
    ["] => &quot;
    <hr>Hallo &amp; &lt;Frau&gt; &amp; Kr&iuml;&iquest;&frac12;mer
    <hr>[&] => &amp;
    [>] => &gt;
    [<] => &lt;
    ["] => &quot;
    <hr>Hallo &amp; &lt;Frau&gt; &amp; Kr�mer
    Strings/mb_strlen.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Call to undefined function mb_strlen() in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 4
    Error: Call to undefined function: 'mb_strlen' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 4, column 1.
    Strings/nl2br.php: SUCCEEDED
    Strings/pack.php: SUCCEEDED
    Strings/pos.php: SUCCEEDED
    Strings/runtime-quotes.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    fread = (x''y"z)
    fgets = (x''y"z)
    file[0] = (x''y"z)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    
    Warning: fopen(runtime-quotes2.txt): failed to open stream: Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 33
    
    Warning: fwrite() expects parameter 1 to be resource, boolean given in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 35
    fwrite = ()
    
    Warning: fputs() expects parameter 1 to be resource, boolean given in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 38
    fputs = ()
    
    Warning: fclose() expects parameter 1 to be resource, boolean given in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 41
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (x'y"z)
    fgets = (x'y"z)
    file[0] = (x'y"z)
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (a\'b"\\ca\)
    fgets = (a\'b"\\ca\'b"\\c)
    file[0] = (a\'b"\\ca\'b"\\c)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    e'e
    e''e
    e'e
    e'e
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    e'e
    e'e
    e'e
    e'e
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    fread = (x''y"z)
    fgets = (x''y"z)
    file[0] = (x''y"z)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    
    Warning: fopen(): Unable to access (D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\runtime-quotes2.txt): Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 33, column 3.
    
    Warning: Cannot convert boolean to resource implicitly in a call to function fwrite() in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 35, column 3.
    fwrite = (0)
    
    Warning: Cannot convert boolean to resource implicitly in a call to function fputs() in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 38, column 3.
    fputs = (0)
    
    Warning: Cannot convert boolean to resource implicitly in a call to function fclose() in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 41, column 3.
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (x'y"z)
    fgets = (x'y"z)
    file[0] = (x'y"z)
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (a\'b"\\ca\)
    fgets = (a\'b"\\ca\'b"\\c)
    file[0] = (a\'b"\\ca\'b"\\c)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    e'e
    e''e
    e'e
    e'e
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    e'e
    e'e
    e'e
    e'e
    Strings/sprintf.php: SUCCEEDED
    Strings/sprintf2.php: SUCCEEDED
    Strings/stripslashes.php: SUCCEEDED
    Strings/strtr.php: SUCCEEDED
    Strings/str_ireplace.php: SUCCEEDED
    Strings/str_replace.php: SUCCEEDED
    Strings/str_word_count.php: SUCCEEDED
    Strings/substr_operations.php: SUCCEEDED
    Strings/wordwrap.php: SUCCEEDED
    Variables/advanced_serialize.php: SUCCEEDED
    Variables/arguments.php: SUCCEEDED
    Variables/assign_copy.php: SUCCEEDED
    Variables/bitwise.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "00"
    string(2) "31"
    string(2) "31"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    0
    0
    0
    5
    0
    5
    40
    5
    45
    string(48) "000000000000000000000000000000000000000000000000"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(14) "31323331323331"
    string(2) "30"
    string(14) "31323331323331"
    string(16) "3635343635343536"
    string(2) "30"
    string(16) "3635343635343536"
    string(14) "337a5e8be43d7a"
    string(14) "00002130120201"
    string(48) "337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42"
    string(16) "347d598ce33a7e77"
    string(16) "0200243214040100"
    string(48) "367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42"
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "00"
    string(2) "31"
    string(2) "31"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    0
    -9223372036854775808
    -9223372036854775808
    -9223372036854775803
    0
    -9223372036854775803
    40
    5
    45
    string(48) "000000000000000000000000000000000000000000000000"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(14) "31323331323331"
    string(2) "30"
    string(14) "31323331323331"
    string(16) "3635343635343536"
    string(2) "30"
    string(16) "3635343635343536"
    string(14) "337a5e8be43d7a"
    string(14) "00002130120201"
    string(48) "337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42"
    string(16) "347d598ce33a7e77"
    string(16) "0200243214040100"
    string(48) "367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42"
    Variables/class_constants.php: SUCCEEDED
    Variables/comparisons.php: SUCCEEDED
    Variables/constant.php: SUCCEEDED
    Variables/constants_defined.php: SUCCEEDED
    Variables/extract%20refs.php: SUCCEEDED
    Variables/extract.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    EXTR_PREFIX_ALL
    integer(4)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
      'prefix_non_existent' => integer(1)
    }
    <hr>EXTR_PREFIX_INVALID
    integer(5)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => integer(2)
      'non_existent' => integer(1)
      'prefix_' => integer(1)
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => 'hello'
    }
    <hr>EXTR_PREFIX_SAME
    integer(3)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'non_existent' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>EXTR_PREFIX_IF_EXISTS
    integer(3)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>
    EXTR_PREFIX_ALL
    integer(4)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
      'prefix_non_existent' => integer(1)
    }
    <hr>EXTR_PREFIX_INVALID
    integer(5)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => integer(2)
      'non_existent' => integer(1)
      'prefix_' => integer(1)
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => 'hello'
    }
    <hr>EXTR_PREFIX_SAME
    integer(4)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'non_existent' => integer(1)
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>EXTR_PREFIX_IF_EXISTS
    integer(3)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>
    Variables/func_get_args.php: SUCCEEDED
    Variables/is_number.php: SUCCEEDED
    Variables/serialize.php: SUCCEEDED
    Variables/unserialize_objects.php: SUCCEEDED
    Variables/var_dumping.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Array
    (
        [0] => 1
        [1] => 
        [2] => 1
        [3] => 1.2
        [4] => 
        [5] => asdas
        [6] => Array
            (
                [0] => 1
            )
    
        [7] => stdClass Object
            (
            )
    
        [8] => Resource id #1
    )
    array(9) {
      [0]=>
      bool(true)
      [1]=>
      bool(false)
      [2]=>
      int(1)
      [3]=>
      float(1.2)
      [4]=>
      NULL
      [5]=>
      string(5) "asdas"
      [6]=>
      array(1) {
        [0]=>
        int(1)
      }
      [7]=>
      object(stdClass)#1 (0) {
      }
      [8]=>
      resource(1) of type (stream)
    }
    array (
      0 => true,
      1 => false,
      2 => 1,
      3 => 1.2,
      4 => NULL,
      5 => 'asdas',
      6 => 
      array (
        0 => 1,
      ),
      7 => 
      stdClass::__set_state(array(
      )),
      8 => NULL,
    )
    Array
    (
        [0] => 1
        [1] => 
        [2] => 1
        [3] => 1.2
        [4] => 
        [5] => asdas
        [6] => Array
        (
            [0] => 1
        )
    
        [7] => stdClass Object
        (
        )
    
        [8] => resource id #4
    
    )
    array(9) {
      [0]=>
      bool(true)
      [1]=>
      bool(false)
      [2]=>
      int(1)
      [3]=>
      float(1.2)
      [4]=>
      NULL
      [5]=>
      string(5) "asdas"
      [6]=>
      array(1) {
        [0]=>
        int(1)
      }
      [7]=>
      object(stdClass)(0) {
      }
      [8]=>
      resource(4) of type (stream)
    }
    array (
      0 => true,
      1 => false,
      2 => 1,
      3 => 1.2,
      4 => NULL,
      5 => 'asdas',
      6 => array (
        0 => 1,
      ),
      7 => class stdClass
      {
    
      },
      8 => NULL,
    )
    Xml/025.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
      'foo' => 'foobar'
    }
    array
    {
      'html' => 'http://www.w3.org/1999/xhtml'
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
    }
    array
    {
      'html' => 'http://www.w3.org/1999/xhtml'
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'foo' => 'foobar'
      'baz' => 'foobarbaz'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
    }
    array
    {
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
      'baz' => 'foobarbaz'
      'foo' => 'foobar'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
      'baz' => 'foobarbaz'
      'foo' => 'foobar'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
    }
    array
    {
    }
    Xml/026.php: SUCCEEDED
    Xml/027.php: SUCCEEDED
    Xml/028.php: SUCCEEDED
    Xml/029.php: SUCCEEDED
    Xml/030.php: SUCCEEDED
    Xml/032.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    FALSE
    FALSE
    FALSE
    TRUE
    TRUE
    TRUE
    Xml/033.php: SUCCEEDED
    Xml/bug26384.php: SUCCEEDED
    Xml/bug28721.php: SUCCEEDED
    Xml/bug28817.php: SUCCEEDED
    Xml/bug32615.php: SUCCEEDED
    Xml/bug33853.php: SUCCEEDED
    Xml/bug34276.php: SUCCEEDED
    Xml/bug35342.php: SUCCEEDED
    Xml/bug36756.php: SUCCEEDED
    Xml/bug37277.php: SUCCEEDED
    Xml/dom002.php: SUCCEEDED
    Xml/dom003.php: SUCCEEDED
    Xml/dom006.php: SUCCEEDED
    Xml/dom007.php: SUCCEEDED
    Xml/dom_set_attr_node.php: SUCCEEDED
    Xml/xmlhandler.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test begins
    <br/>
    <br/>test begins
    <br/>empty begins
    <br/>empty ends
    <br/>nocontent begins
    <br/>nocontent ends
    <br/>content begins
    <br/>empty begins
    <br/>empty ends
    <br/>empty begins
    <br/>empty ends
    <br/>content ends
    <br/>empty begins
    <br/>empty ends
    <br/>empty begins
    <br/>empty ends
    <br/>test ends
    <br/>Test ends
    <br/>
    <br/>
    Test begins
    <br/>
    <br/>
    Error: Call to undefined function: 'xml_parser_create' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Xml\__input.txt at expression on line 18, column 3.
    Xml/xslt001.php: SUCCEEDED
    Xml/xslt002.php: SUCCEEDED
    Xml/xslt003.php: SUCCEEDED
    Xml/xslt004.php: SUCCEEDED
    Xml/xslt005.php: SUCCEEDED
    Xml/xslt006.php: SUCCEEDED
    Xml/xslt007.php: SUCCEEDED
    Xml/xslt010.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test 10: EXSLT Support
      
      
      Test Date : 0001-12-31Z
        year                 : 1
        leap-year            : false
        month-in-year        : 12
        month-name           : December
        month-abbreviation   : Dec
        week-in-year         : 1
        day-in-year          : 365
        day-in-month         : 31
        day-of-week-in-month : 5
        day-in-week          : 2
        day-name             : Monday
        day-abbreviation     : Mon
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : 3000-01-31
        year                 : 3000
        leap-year            : false
        month-in-year        : 1
        month-name           : January
        month-abbreviation   : Jan
        week-in-year         : 5
        day-in-year          : 31
        day-in-month         : 31
        day-of-week-in-month : 5
        day-in-week          : 6
        day-name             : Friday
        day-abbreviation     : Fri
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : 2000-02-29
        year                 : 2000
        leap-year            : true
        month-in-year        : 2
        month-name           : February
        month-abbreviation   : Feb
        week-in-year         : 9
        day-in-year          : 60
        day-in-month         : 29
        day-of-week-in-month : 5
        day-in-week          : 3
        day-name             : Tuesday
        day-abbreviation     : Tue
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : 9990001-12-31Z
        year                 : 9990001
        leap-year            : false
        month-in-year        : 12
        month-name           : December
        month-abbreviation   : Dec
        week-in-year         : 1
        day-in-year          : 365
        day-in-month         : 31
        day-of-week-in-month : 5
        day-in-week          : 2
        day-name             : Monday
        day-abbreviation     : Mon
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : -0004-02-29
        year                 : -4
        leap-year            : true
        month-in-year        : 2
        month-name           : February
        month-abbreviation   : Feb
        week-in-year         : 9
        day-in-year          : 60
        day-in-month         : 29
        day-of-week-in-month : 5
        day-in-week          : 1
        day-name             : Sunday
        day-abbreviation     : Sun
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
    Test 10: EXSLT Support
    Warning: Cannot find a script or an extension object associated with namespace 'http://exslt.org/dates-and-times'..
    
    Warning: Illegal string offset '-1' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Phalanger.inc at expression on line 7, column 6.
    Xml/xslt011.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test 11: php:function Support
    
    Warning: XSLTProcessor::transformToXml(): A PHP Object cannot be converted to a XPath-string in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Xml\__input.txt on line 18
    <?xml version="1.0"?>
    foobar - secondArg
    foobar - 
    this is from an external DomDocument
    from the Input Document
    static
    Test 11: php:function Support
    <?xml version="1.0" encoding="utf-8"?>foobar - secondArg
    foobar - 
    this is from an external DomDocument
    from the Input Document
    static
    not a DomNode object
    Xml/xslt012.php: SUCCEEDED
    ================================================ FILE: Testing/Tests/TestLogs/TestLog (2215).htm ================================================ PHP.NET Compiler test log

    PHP.NET Compiler test log

    (90%) 885 succeeded, 96 failed
    Test ResultCompiler error outputExpected test result
    @PHP/classes/array_access_001.php: SUCCEEDED
    @PHP/classes/array_access_002.php: SUCCEEDED
    @PHP/classes/array_access_003.php: SUCCEEDED
    @PHP/classes/array_access_004.php: SUCCEEDED
    @PHP/classes/array_access_005.php: SUCCEEDED
    @PHP/classes/array_access_006.php: SUCCEEDED
    @PHP/classes/array_access_007.php: SUCCEEDED
    @PHP/classes/array_access_008.php: SUCCEEDED
    @PHP/classes/array_access_009.php: SUCCEEDED
    @PHP/classes/array_access_010.php: SUCCEEDED
    @PHP/classes/array_access_011.php: SUCCEEDED
    @PHP/classes/array_access_013.php: SUCCEEDED
    @PHP/classes/assign_op_property_001.php: SUCCEEDED
    @PHP/classes/autoload_001.php: SUCCEEDED
    @PHP/classes/autoload_002.php: SUCCEEDED
    @PHP/classes/autoload_003.php: SUCCEEDED
    @PHP/classes/autoload_005.php: SUCCEEDED
    @PHP/classes/autoload_006.php: SUCCEEDED
    @PHP/classes/bug23951.php: SUCCEEDED
    @PHP/classes/bug24399.php: SUCCEEDED
    @PHP/classes/bug24445.php: SUCCEEDED
    @PHP/classes/bug26737.php: SUCCEEDED
    @PHP/classes/bug27468.php: SUCCEEDED
    @PHP/classes/bug27504.php: SUCCEEDED
    @PHP/classes/class_example.php: SUCCEEDED
    @PHP/classes/class_stdclass.php: SUCCEEDED
    @PHP/classes/clone_001.php: SUCCEEDED
    @PHP/classes/clone_002.php: SUCCEEDED
    @PHP/classes/clone_003.php: SUCCEEDED
    @PHP/classes/clone_004.php: SUCCEEDED
    @PHP/classes/clone_006.php: SUCCEEDED
    @PHP/classes/constants_scope_001.php: SUCCEEDED
    @PHP/classes/ctor_dtor.php: SUCCEEDED
    @PHP/classes/ctor_dtor_inheritance.php: SUCCEEDED
    @PHP/classes/ctor_name_clash.php: SUCCEEDED
    @PHP/classes/dereferencing_001.php: SUCCEEDED
    @PHP/classes/destructor_and_echo.php: SUCCEEDED
    @PHP/classes/destructor_and_references.php: SUCCEEDED
    @PHP/classes/destructor_inheritance.php: SUCCEEDED
    @PHP/classes/destructor_visibility_003.php: SUCCEEDED
    @PHP/classes/factory_001.php: SUCCEEDED
    @PHP/classes/factory_and_singleton_001.php: SUCCEEDED
    @PHP/classes/factory_and_singleton_002.php: SUCCEEDED
    @PHP/classes/final.php: SUCCEEDED
    @PHP/classes/incdec_property_001.php: SUCCEEDED
    @PHP/classes/incdec_property_002.php: SUCCEEDED
    @PHP/classes/incdec_property_003.php: SUCCEEDED
    @PHP/classes/incdec_property_004.php: SUCCEEDED
    @PHP/classes/inheritance.php: SUCCEEDED
    @PHP/classes/inheritance_002.php: SUCCEEDED
    @PHP/classes/interfaces_001.php: SUCCEEDED
    @PHP/classes/interface_construct.php: SUCCEEDED
    @PHP/classes/interface_doubled.php: SUCCEEDED
    @PHP/classes/interface_implemented.php: SUCCEEDED
    @PHP/classes/iterators_001.php: SUCCEEDED
    @PHP/classes/iterators_002.php: SUCCEEDED
    @PHP/classes/iterators_003.php: SUCCEEDED
    @PHP/classes/iterators_004.php: SUCCEEDED
    @PHP/classes/iterators_006.php: SUCCEEDED
    @PHP/classes/iterators_007.php: SUCCEEDED
    @PHP/classes/object_reference_001.php: SUCCEEDED
    @PHP/classes/private_001.php: SUCCEEDED
    @PHP/classes/private_002.php: SUCCEEDED
    @PHP/classes/private_003.php: SUCCEEDED
    @PHP/classes/private_003b.php: SUCCEEDED
    @PHP/classes/private_004.php: SUCCEEDED
    @PHP/classes/private_004b.php: SUCCEEDED
    @PHP/classes/private_005.php: SUCCEEDED
    @PHP/classes/private_005b.php: SUCCEEDED
    @PHP/classes/private_006.php: SUCCEEDED
    @PHP/classes/private_006b.php: SUCCEEDED
    @PHP/classes/private_007.php: SUCCEEDED
    @PHP/classes/private_007b.php: SUCCEEDED
    @PHP/classes/private_members.php: SUCCEEDED
    @PHP/classes/private_redeclare.php: SUCCEEDED
    @PHP/classes/protected_001.php: SUCCEEDED
    @PHP/classes/protected_001b.php: SUCCEEDED
    @PHP/classes/protected_002.php: SUCCEEDED
    @PHP/classes/serialize_001.php: SUCCEEDED
    @PHP/classes/singleton_001.php: SUCCEEDED
    @PHP/classes/static_properties_001.php: SUCCEEDED
    @PHP/classes/type_hinting_001.php: SUCCEEDED
    @PHP/classes/type_hinting_003.php: SUCCEEDED
    @PHP/classes/visibility_000c.php: SUCCEEDED
    @PHP/classes/visibility_001c.php: SUCCEEDED
    @PHP/classes/visibility_002c.php: SUCCEEDED
    @PHP/classes/visibility_003a.php: SUCCEEDED
    @PHP/classes/visibility_003c.php: SUCCEEDED
    @PHP/classes/visibility_004a.php: SUCCEEDED
    @PHP/classes/visibility_004b.php: SUCCEEDED
    @PHP/classes/visibility_004c.php: SUCCEEDED
    @PHP/classes/visibility_005.php: SUCCEEDED
    @PHP/classes/__call_001.php: SUCCEEDED
    @PHP/classes/__set_data_corrupt.php: SUCCEEDED
    @PHP/classes/__set__get_001.php: SUCCEEDED
    @PHP/classes/__set__get_004.php: SUCCEEDED
    @PHP/classes/__set__get_005.php: SUCCEEDED
    @PHP/date/bug17988.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2002-06-25 12:18:48
    2002-06-25 14:18:48
    2002-06-25 13:18:48
    2002-06-25 12:18:48
    2002-06-25 18:18:48
    2002-06-25 14:18:48
    2002-06-25 14:18:48
    2002-06-25 18:18:48
    2002-06-25 10:18:48
    2002-06-25 17:18:48
    2002-06-25 11:18:48
    2002-06-25 17:48:48
    2002-06-25 10:48:48
    2002-06-25 14:18:48
    2002-06-25 14:18:48
    2002-06-25 13:18:48
    2002-06-25 12:18:48
    2002-06-25 18:18:48
    2002-06-25 14:18:48
    2002-06-25 14:18:48
    2002-06-25 18:18:48
    2002-06-25 10:18:48
    2002-06-25 17:18:48
    2002-06-25 11:18:48
    2002-06-25 17:48:48
    2002-06-25 10:48:48
    @PHP/date/bug26317.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2003-11-19 17:20:42
    2003-11-19 17:20:42
    2003-11-19 17:20:42
    2003-11-19 16:20:42
    2003-11-19 16:20:42
    2003-11-19 16:20:42
    @PHP/date/bug26320.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2003-11-19 12:30:42
    2003-11-19 13:30:42
    2003-11-19 12:30:42
    2003-11-19 12:30:42
    @PHP/date/bug28088.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    The following line rightly shows the correct date time:
    04/04/04 2145
    But the following line fails to show the correct date time:
    04/03/04 2245
    The following line rightly shows the correct date time:
    04/04/04 2345
    But the following line fails to show the correct date time:
    04/04/04 0045
    @PHP/date/bug28599.php: SUCCEEDED
    @PHP/date/bug29150.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2005-06-19 22:00:00
    2005-06-20 00:00:00
    @PHP/date/bug29585.php: SUCCEEDED
    @PHP/date/bug29595.php: SUCCEEDED
    @PHP/date/bug33056.php: SUCCEEDED
    @PHP/date/bug33452.php: SUCCEEDED
    @PHP/date/bug33562.php: SUCCEEDED
    @PHP/date/bug33563.php: SUCCEEDED
    @PHP/date/bug33578.php: SUCCEEDED
    @PHP/date/bug33869.php: SUCCEEDED
    @PHP/date/bug34676.php: SUCCEEDED
    @PHP/date/bug34771.php: SUCCEEDED
    @PHP/date/bug35143.php: SUCCEEDED
    @PHP/date/bug35414.php: SUCCEEDED
    @PHP/date/bug35422.php: SUCCEEDED
    @PHP/date/bug35425.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    integer(42)
    integer(1)
    integer(1)
    integer(1)
    integer(1)
    integer(0)
    integer(0)
    integer(1)
    integer(1)
    integer(31)
    integer(1104537661)
    integer(6)
    integer(53)
    integer(5)
    integer(2005)
    integer(0)
    integer(3600)
    integer(292)
    integer(1)
    integer(1)
    integer(1)
    integer(1)
    integer(0)
    integer(0)
    integer(1)
    integer(1)
    integer(31)
    integer(1104559261)
    integer(6)
    integer(53)
    integer(5)
    integer(2005)
    integer(0)
    integer(-18000)
    @PHP/date/bug35456.php: SUCCEEDED
    @PHP/date/bug35624.php: SUCCEEDED
    @PHP/date/bug35630.php: SUCCEEDED
    @PHP/date/bug35699.php: SUCCEEDED
    @PHP/date/bug35705.php: SUCCEEDED
    @PHP/date/bug35885.php: SUCCEEDED
    @PHP/date/bug35887.php: SUCCEEDED
    @PHP/date/date.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    c: 2003-01-23T13:20:59+01:00
    r: Thu, 23 Jan 2003 13:20:59 +0100
    c: 2003-01-23T13:20:59+01:00
    r: Thu, 23 Jan 2003 13:20:59 +0100
    c: 2003-01-23T12:20:59+00:00
    r: Thu, 23 Jan 2003 12:20:59 +0000
    c: 2003-01-23T13:20:59+01:00
    r: Thu, 23 Jan 2003 13:20:59 +0100
    @PHP/date/date_create-1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\date\__input.txt on line 28
    SKIP
    @PHP/date/date_create-2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\date\__input.txt on line 6
    SKIP
    @PHP/date/date_default_timezone_get-3.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Europe/Prague
    America/Chicago
    Europe/Rome
    America/Chicago
    @PHP/date/date_modify-1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\date\__input.txt on line 6
    SKIP
    @PHP/date/date_modify-2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\date\__input.txt on line 6
    SKIP
    @PHP/date/default-timezone-1.php: SUCCEEDED
    @PHP/date/default-timezone-2.php: SUCCEEDED
    @PHP/date/format-negative-timestamp.php: SUCCEEDED
    @PHP/date/strtotime.php: SUCCEEDED
    @PHP/date/timezone-configuration.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    1119125744
    1119125744
    1119125744
    1119125744
    1119129344
    1119125744
    @PHP/doc_examples/test001.php: SUCCEEDED
    @PHP/doc_examples/test002.php: SUCCEEDED
    @PHP/doc_examples/test003.php: SUCCEEDED
    @PHP/doc_examples/test004.php: SUCCEEDED
    @PHP/doc_examples/test005.php: SUCCEEDED
    @PHP/doc_examples/test006.php: SUCCEEDED
    @PHP/doc_examples/test007.php: SUCCEEDED
    @PHP/doc_examples/test008.php: SUCCEEDED
    @PHP/doc_examples/test009.php: SUCCEEDED
    @PHP/doc_examples/test010.php: SUCCEEDED
    @PHP/doc_examples/test011.php: SUCCEEDED
    @PHP/doc_examples/test013.php: SUCCEEDED
    @PHP/doc_examples/test014.php: SUCCEEDED
    @PHP/doc_examples/test015.php: SUCCEEDED
    @PHP/doc_examples/test016.php: SUCCEEDED
    @PHP/doc_examples/test017.php: SUCCEEDED
    @PHP/doc_examples/test018.php: SUCCEEDED
    @PHP/doc_examples/test019.php: SUCCEEDED
    @PHP/doc_examples/test020.php: SUCCEEDED
    @PHP/doc_examples/test021.php: SUCCEEDED
    @PHP/doc_examples/test022.php: SUCCEEDED
    @PHP/doc_examples/test023.php: SUCCEEDED
    @PHP/doc_examples/test024.php: SUCCEEDED
    @PHP/doc_examples/test025.php: SUCCEEDED
    @PHP/doc_examples/test026.php: SUCCEEDED
    @PHP/doc_examples/test027.php: SUCCEEDED
    @PHP/doc_examples/test028.php: SUCCEEDED
    @PHP/doc_examples/test029.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ´┐Żauky
    �auky
    @PHP/doc_examples/test030.php: SUCCEEDED
    @PHP/doc_examples/test031.php: SUCCEEDED
    @PHP/doc_examples/test032.php: SUCCEEDED
    @PHP/doc_examples/test033.php: SUCCEEDED
    @PHP/doc_examples/test034.php: SUCCEEDED
    @PHP/doc_examples/test035.php: SUCCEEDED
    @PHP/doc_examples/test036.php: SUCCEEDED
    @PHP/doc_examples/test037.php: SUCCEEDED
    @PHP/doc_examples/test038.php: SUCCEEDED
    @PHP/doc_examples/test039.php: SUCCEEDED
    @PHP/doc_examples/test040.php: SUCCEEDED
    @PHP/doc_examples/test041.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    call_user_func():
    hello world!
    Strict Standards: call_user_func(): Non-static method MyClass::myCallbackMethod() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\doc_examples\__input.txt at expression on line 17, column 1.
    Hello World!Hello World!
    @PHP/doc_examples/test042.php: SUCCEEDED
    @PHP/doc_examples/test043.php: SUCCEEDED
    @PHP/doc_examples/test044.php: SUCCEEDED
    @PHP/doc_examples/test045.php: SUCCEEDED
    @PHP/doc_examples/test046.php: SUCCEEDED
    @PHP/doc_examples/test047.php: SUCCEEDED
    @PHP/doc_examples/test048.php: SUCCEEDED
    @PHP/doc_examples/test049.php: SUCCEEDED
    @PHP/doc_examples/test050.php: SUCCEEDED
    @PHP/doc_examples/test051.php: SUCCEEDED
    @PHP/doc_examples/test052.php: SUCCEEDED
    @PHP/doc_examples/test053.php: SUCCEEDED
    @PHP/doc_examples/test054.php: SUCCEEDED
    @PHP/doc_examples/test055.php: SUCCEEDED
    @PHP/doc_examples/test056.php: SUCCEEDED
    @PHP/doc_examples/test057.php: SUCCEEDED
    @PHP/doc_examples/test058.php: SUCCEEDED
    @PHP/doc_examples/test059.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    Deprecated: Assigning the return value of new by reference is deprecated in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\doc_examples\__input.txt on line 4
    NULL
    object(stdClass)#1 (0) {
    }
    NULL
    object(stdClass)(0) {
    }
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\doc_examples\__input.txt(4,5): warning PHP0181: Assigning the return value of new by reference is deprecated
    
    @PHP/doc_examples/test060.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    Deprecated: Assigning the return value of new by reference is deprecated in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\doc_examples\__input.txt on line 9
    Static object: NULL
    Static object: NULL
    
    Static object: NULL
    Static object: object(stdClass)#3 (1) {
      ["property"]=>
      int(1)
    }
    Static object: NULL
    Static object: NULL
    
    Static object: NULL
    Static object: object(stdClass)(1) {
      ["property"]=>
      int(1)
    }
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\doc_examples\__input.txt(9,9): warning PHP0181: Assigning the return value of new by reference is deprecated
    
    @PHP/doc_examples/test061.php: SUCCEEDED
    @PHP/doc_examples/test062.php: SUCCEEDED
    @PHP/doc_examples/test063.php: SUCCEEDED
    @PHP/doc_examples/test064.php: SUCCEEDED
    @PHP/doc_examples/test065.php: SUCCEEDED
    @PHP/doc_examples/test066.php: SUCCEEDED
    @PHP/doc_examples/test067.php: SUCCEEDED
    @PHP/doc_examples/test068.php: SUCCEEDED
    @PHP/doc_examples/test069.php: SUCCEEDED
    @PHP/doc_examples/test070.php: SUCCEEDED
    @PHP/doc_examples/test071.php: SUCCEEDED
    @PHP/doc_examples/test072.php: SUCCEEDED
    @PHP/doc_examples/test073.php: SUCCEEDED
    @PHP/doc_examples/test074.php: SUCCEEDED
    @PHP/doc_examples/test075.php: SUCCEEDED
    @PHP/doc_examples/test076.php: SUCCEEDED
    @PHP/doc_examples/test077.php: SUCCEEDED
    @PHP/doc_examples/test078.php: SUCCEEDED
    @PHP/doc_examples/test079.php: SUCCEEDED
    @PHP/doc_examples/test080.php: SUCCEEDED
    @PHP/doc_examples/test081.php: SUCCEEDED
    @PHP/doc_examples/test082.php: SUCCEEDED
    @PHP/doc_examples/test083.php: SUCCEEDED
    @PHP/doc_examples/test084.php: SUCCEEDED
    @PHP/doc_examples/test085.php: SUCCEEDED
    @PHP/doc_examples/test086.php: SUCCEEDED
    @PHP/doc_examples/test087.php: SUCCEEDED
    @PHP/doc_examples/test088.php: SUCCEEDED
    @PHP/doc_examples/test089.php: SUCCEEDED
    @PHP/doc_examples/test090.php: SUCCEEDED
    @PHP/doc_examples/test091.php: SUCCEEDED
    @PHP/doc_examples/test092.php: SUCCEEDED
    @PHP/doc_examples/test093.php: SUCCEEDED
    @PHP/doc_examples/test094.php: SUCCEEDED
    @PHP/doc_examples/test095.php: SUCCEEDED
    @PHP/doc_examples/test096.php: SUCCEEDED
    @PHP/doc_examples/test097.php: SUCCEEDED
    @PHP/doc_examples/test098.php: SUCCEEDED
    @PHP/doc_examples/test099.php: SUCCEEDED
    @PHP/doc_examples/test100.php: SUCCEEDED
    @PHP/doc_examples/test102.php: SUCCEEDED
    @PHP/doc_examples/test103.php: SUCCEEDED
    @PHP/doc_examples/test104.php: SUCCEEDED
    @PHP/doc_examples/test105.php: SUCCEEDED
    @PHP/doc_examples/test107.php: SUCCEEDED
    @PHP/doc_examples/test108.php: SUCCEEDED
    @PHP/doc_examples/test109.php: SUCCEEDED
    @PHP/doc_examples/test110.php: SUCCEEDED
    @PHP/doc_examples/test111.php: SUCCEEDED
    @PHP/doc_examples/test112.php: SUCCEEDED
    @PHP/doc_examples/test113.php: SUCCEEDED
    @PHP/doc_examples/test114.php: SUCCEEDED
    @PHP/doc_examples/test115.php: SUCCEEDED
    @PHP/doc_examples/test116.php: SUCCEEDED
    @PHP/doc_examples/test117.php: SUCCEEDED
    @PHP/doc_examples/test118.php: SUCCEEDED
    @PHP/doc_examples/test119.php: SUCCEEDED
    @PHP/doc_examples/test120.php: SUCCEEDED
    @PHP/doc_examples/test121.php: SUCCEEDED
    @PHP/doc_examples/test122.php: SUCCEEDED
    @PHP/doc_examples/test123.php: SUCCEEDED
    @PHP/doc_examples/test124.php: SUCCEEDED
    @PHP/doc_examples/test125.php: SUCCEEDED
    @PHP/doc_examples/test126.php: SUCCEEDED
    @PHP/doc_examples/test127.php: SUCCEEDED
    @PHP/doc_examples/test128.php: SUCCEEDED
    @PHP/doc_examples/test129.php: SUCCEEDED
    @PHP/doc_examples/test130.php: SUCCEEDED
    @PHP/doc_examples/test131.php: SUCCEEDED
    @PHP/doc_examples/test132.php: SUCCEEDED
    @PHP/doc_examples/test133.php: SUCCEEDED
    @PHP/doc_examples/test134.php: SUCCEEDED
    @PHP/doc_examples/test136.php: SUCCEEDED
    @PHP/doc_examples/test137.php: SUCCEEDED
    @PHP/doc_examples/test138.php: SUCCEEDED
    @PHP/doc_examples/test139.php: SUCCEEDED
    @PHP/doc_examples/test148.php: SUCCEEDED
    @PHP/doc_examples/test149.php: SUCCEEDED
    @PHP/doc_examples/test150.php: SUCCEEDED
    @PHP/doc_examples/test151.php: SUCCEEDED
    @PHP/doc_examples/test152.php: SUCCEEDED
    @PHP/doc_examples/test153.php: SUCCEEDED
    @PHP/doc_examples/test154.php: SUCCEEDED
    @PHP/doc_examples/test155.php: SUCCEEDED
    @PHP/doc_examples/test156.php: SUCCEEDED
    @PHP/doc_examples/test158.php: SUCCEEDED
    @PHP/lang/001.php: SUCCEEDED
    @PHP/lang/002.php: SUCCEEDED
    @PHP/lang/003.php: SUCCEEDED
    @PHP/lang/004.php: SUCCEEDED
    @PHP/lang/005.php: SUCCEEDED
    @PHP/lang/006.php: SUCCEEDED
    @PHP/lang/007.php: SUCCEEDED
    @PHP/lang/008.php: SUCCEEDED
    @PHP/lang/009.php: SUCCEEDED
    @PHP/lang/010.php: SUCCEEDED
    @PHP/lang/011.php: SUCCEEDED
    @PHP/lang/012.php: SUCCEEDED
    @PHP/lang/013.php: SUCCEEDED
    @PHP/lang/014.php: SUCCEEDED
    @PHP/lang/015.php: SUCCEEDED
    @PHP/lang/016.php: SUCCEEDED
    @PHP/lang/017.php: SUCCEEDED
    @PHP/lang/018.php: SUCCEEDED
    @PHP/lang/019.php: SUCCEEDED
    @PHP/lang/020.php: SUCCEEDED
    @PHP/lang/021.php: SUCCEEDED
    @PHP/lang/022.php: SUCCEEDED
    @PHP/lang/023.php: SUCCEEDED
    @PHP/lang/024.php: SUCCEEDED
    @PHP/lang/025.php: SUCCEEDED
    @PHP/lang/026.php: SUCCEEDED
    @PHP/lang/027.php: SUCCEEDED
    @PHP/lang/028.php: SUCCEEDED
    @PHP/lang/030.php: SUCCEEDED
    @PHP/lang/032.php: SUCCEEDED
    @PHP/lang/036.php: SUCCEEDED
    @PHP/lang/037.php: SUCCEEDED
    @PHP/lang/038.php: SUCCEEDED
    @PHP/lang/039.php: SUCCEEDED
    @PHP/lang/040.php: SUCCEEDED
    @PHP/lang/bison1.php: SUCCEEDED
    @PHP/lang/bug17115.php: SUCCEEDED
    @PHP/lang/bug18872.php: SUCCEEDED
    @PHP/lang/bug19943.php: SUCCEEDED
    @PHP/lang/bug20175.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    Deprecated: Assigning the return value of new by reference is deprecated in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\lang\__input.txt on line 110
    foo_static()
    foo_global()
    foo:1
    foo_static()
    foo:1
    bar_static()
    bar_global()
    bar:1
    bar_static()
    bar:1
    wow_static()
    wow_global()
    wow:1
    wow_static()
    wow:1
    oop_test()
    oop_static()
    oop_class()
    oop:1
    oop_static()
    oop:1
    oop_test()
    oop_static()
    oop:1
    foo_static()
    foo_global()
    foo:1
    foo_static()
    foo:1
    bar_static()
    bar_global()
    bar:1
    bar_static()
    bar_global()
    bar:2
    wow_static()
    wow_global()
    wow:1
    wow_static()
    wow:1
    oop_test()
    oop_static()
    oop_class()
    oop:1
    oop_static()
    oop:1
    oop_test()
    oop_static()
    oop:1
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\lang\__input.txt(110,4): warning PHP0181: Assigning the return value of new by reference is deprecated
    
    @PHP/lang/bug21094.php: SUCCEEDED
    @PHP/lang/bug21600.php: SUCCEEDED
    @PHP/lang/bug21669.php: SUCCEEDED
    @PHP/lang/bug21849.php: SUCCEEDED
    @PHP/lang/bug21961.php: SUCCEEDED
    @PHP/lang/bug22231.php: SUCCEEDED
    @PHP/lang/bug22367.php: SUCCEEDED
    @PHP/lang/bug22510.php: SUCCEEDED
    @PHP/lang/bug22592.php: SUCCEEDED
    @PHP/lang/bug22690.php: SUCCEEDED
    @PHP/lang/bug23279.php: SUCCEEDED
    @PHP/lang/bug23384.php: SUCCEEDED
    @PHP/lang/bug23489.php: SUCCEEDED
    @PHP/lang/bug23524.php: SUCCEEDED
    @PHP/lang/bug23922.php: SUCCEEDED
    @PHP/lang/bug24054.php: SUCCEEDED
    @PHP/lang/bug24396.php: SUCCEEDED
    @PHP/lang/bug24403.php: SUCCEEDED
    @PHP/lang/bug24436.php: SUCCEEDED
    @PHP/lang/bug24499.php: SUCCEEDED
    @PHP/lang/bug24640.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    double(1700000000000000089258092433847514422797596587883870563356951996370064178581143932836831337636761368874297554515902592900802289500112731978596146714137401870842258241575178866354311397451139753100927220499450359906637902366244989496126909662726242240784739940994096632824796638102733857671280980918272.0000000000)
    1.7E+300
    
    ------
    double(0.0000000000)
    1.7E-300
    
    ------
    double(17000000000000001584208052028780237480128823455860622330108867175329927830437888.0000000000)
    1.7E+79
    
    ------
    double(0.0000000000)
    1.7E-79
    
    ------
    double(169999999999999996096025832433329868941658043870400163508258284150340918121070592.0000000000)
    1.7E+80
    
    ------
    double(0.0000000000)
    1.7E-80
    
    ------
    double(1700000000000000013616404158611892038375594280539217794530130541777964808366194688.0000000000)
    1.7E+81
    
    ------
    double(0.0000000000)
    1.7E-81
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    1.6999810742106E-319
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    1.7000798873397E-320
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    1.6995858216939E-321
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    0
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    0
    
    ------
    double(1700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+300
    
    ------
    double(0.0000000000)
    1.70000000000003E-300
    
    ------
    double(17000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+79
    
    ------
    double(0.0000000000)
    1.70000000000001E-79
    
    ------
    double(170000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+80
    
    ------
    double(0.0000000000)
    1.70000000000001E-80
    
    ------
    double(1700000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+81
    
    ------
    double(0.0000000000)
    1.70000000000001E-81
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    1.69998107421056E-319
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    1.70007988733973E-320
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    1.69464516523548E-321
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    0
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    0
    
    ------
    @PHP/lang/bug24652.php: SUCCEEDED
    @PHP/lang/bug24658.php: SUCCEEDED
    @PHP/lang/bug24783.php: SUCCEEDED
    @PHP/lang/bug24926.php: SUCCEEDED
    @PHP/lang/bug25547.php: SUCCEEDED
    @PHP/lang/bug25652.php: SUCCEEDED
    @PHP/lang/bug25922.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Undefined index here: 'error'
    Undefined index here: ''
    @PHP/lang/bug26182.php: SUCCEEDED
    @PHP/lang/bug26696.php: SUCCEEDED
    @PHP/lang/bug26866.php: SUCCEEDED
    @PHP/lang/bug26869.php: SUCCEEDED
    @PHP/lang/bug27354.php: SUCCEEDED
    @PHP/lang/bug27439.php: SUCCEEDED
    @PHP/lang/bug27535.php: SUCCEEDED
    @PHP/lang/bug28213.php: SUCCEEDED
    @PHP/lang/bug28800.php: SUCCEEDED
    @PHP/lang/bug29566.php: SUCCEEDED
    @PHP/lang/bug29893.php: SUCCEEDED
    @PHP/lang/bug29944.php: SUCCEEDED
    @PHP/lang/bug30638.php: SUCCEEDED
    @PHP/lang/bug30726.php: SUCCEEDED
    @PHP/lang/bug30862.php: SUCCEEDED
    @PHP/lang/bug32924.php: SUCCEEDED
    @PHP/lang/bug35382.php: SUCCEEDED
    @PHP/lang/bug7515.php: SUCCEEDED
    @PHP/lang/each_binary_safety.php: SUCCEEDED
    @PHP/lang/error_2_exception_001.php: SUCCEEDED
    @PHP/lang/foreach_with_object_001.php: SUCCEEDED
    @PHP/lang/foreach_with_references_001.php: SUCCEEDED
    @PHP/lang/type_hints_001.php: SUCCEEDED
    @PHP/standard/array/001.php: SUCCEEDED
    @PHP/standard/array/003.php: SUCCEEDED
    @PHP/standard/array/004.php: SUCCEEDED
    @PHP/standard/array/005.php: SUCCEEDED
    @PHP/standard/array/008.php: SUCCEEDED
    @PHP/standard/array/array_change_key_case.php: SUCCEEDED
    @PHP/standard/array/array_chunk.php: SUCCEEDED
    @PHP/standard/array/array_count_values.php: SUCCEEDED
    @PHP/standard/array/array_diff_1.php: SUCCEEDED
    @PHP/standard/array/array_diff_key.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ------ Test 1 --------
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 2 --------
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 3 --------
    array(6) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [2]=>
      int(4)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [2]=>
      int(4)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 4 --------
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 5 --------
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 6 --------
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 7 --------
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    ------ Test 8 --------
    array(6) {
      [0]=>
      int(0)
      [7]=>
      int(14)
      [2]=>
      int(4)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [0]=>
      int(0)
      [7]=>
      int(14)
      [2]=>
      int(4)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 9 --------
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    ------ Test 1 --------
    array(4) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(4) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 2 --------
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 3 --------
    array(6) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [2]=>
      &int(4)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [2]=>
      &int(4)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 4 --------
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 5 --------
    array(4) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(4) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 6 --------
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 7 --------
    array(3) {
      [7]=>
      &int(14)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
    }
    array(3) {
      [7]=>
      &int(14)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
    }
    ------ Test 8 --------
    array(6) {
      [0]=>
      &int(0)
      [7]=>
      &int(14)
      [2]=>
      &int(4)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [0]=>
      &int(0)
      [7]=>
      &int(14)
      [2]=>
      &int(4)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 9 --------
    array(3) {
      [7]=>
      &int(14)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
    }
    array(3) {
      [7]=>
      &int(14)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
    }
    @PHP/standard/array/array_intersect_key.php: SUCCEEDED
    @PHP/standard/array/array_sum.php: SUCCEEDED
    @PHP/standard/array/array_walk_recursive.php: SUCCEEDED
    @PHP/standard/array/bug12776.php: SUCCEEDED
    @PHP/standard/array/bug14580.php: SUCCEEDED
    @PHP/standard/array/bug20381.php: SUCCEEDED
    @PHP/standard/array/bug20865.php: SUCCEEDED
    @PHP/standard/array/bug21182.php: SUCCEEDED
    @PHP/standard/array/bug21918.php: SUCCEEDED
    @PHP/standard/array/bug21998.php: SUCCEEDED
    @PHP/standard/array/bug22088.php: SUCCEEDED
    @PHP/standard/array/bug22463.php: SUCCEEDED
    @PHP/standard/array/bug23581.php: SUCCEEDED
    @PHP/standard/array/bug23788.php: SUCCEEDED
    @PHP/standard/array/bug24198.php: SUCCEEDED
    @PHP/standard/array/bug24220.php: SUCCEEDED
    @PHP/standard/array/bug24766.php: SUCCEEDED
    @PHP/standard/array/bug24897.php: SUCCEEDED
    @PHP/standard/array/bug24980.php: SUCCEEDED
    @PHP/standard/array/bug25359.php: SUCCEEDED
    @PHP/standard/array/bug25708.php: SUCCEEDED
    @PHP/standard/array/bug25758.php: SUCCEEDED
    @PHP/standard/array/bug26458.php: SUCCEEDED
    @PHP/standard/array/bug28974.php: SUCCEEDED
    @PHP/standard/array/bug29493.php: SUCCEEDED
    @PHP/standard/array/bug30266.php: SUCCEEDED
    @PHP/standard/array/bug30833.php: SUCCEEDED
    @PHP/standard/array/bug31158.php: SUCCEEDED
    @PHP/standard/array/bug31213.php: SUCCEEDED
    @PHP/standard/array/bug32021.php: SUCCEEDED
    @PHP/standard/array/bug33382.php: SUCCEEDED
    @PHP/standard/array/bug33989.php: SUCCEEDED
    @PHP/standard/array/bug34227.php: SUCCEEDED
    @PHP/standard/array/bug34982.php: SUCCEEDED
    @PHP/standard/array/bug35014.php: SUCCEEDED
    @PHP/standard/array/bug35022.php: SUCCEEDED
    @PHP/standard/array/bug35821.php: SUCCEEDED
    @PHP/standard/array/count_recursive.php: SUCCEEDED
    @PHP/standard/array/locale_sort.php: SUCCEEDED
    @PHP/standard/array/range.php: SUCCEEDED
    @PHP/standard/assert/assert.php: SUCCEEDED
    @PHP/standard/general_functions/001.php: SUCCEEDED
    @PHP/standard/general_functions/002.php: SUCCEEDED
    @PHP/standard/general_functions/003.php: SUCCEEDED
    @PHP/standard/general_functions/004.php: SUCCEEDED
    @PHP/standard/general_functions/005.php: SUCCEEDED
    @PHP/standard/general_functions/006.php: SUCCEEDED
    @PHP/standard/general_functions/007.php: SUCCEEDED
    @PHP/standard/general_functions/009.php: SUCCEEDED
    @PHP/standard/general_functions/bug25038.php: SUCCEEDED
    @PHP/standard/general_functions/bug27678.php: SUCCEEDED
    @PHP/standard/general_functions/bug29038.php: SUCCEEDED
    @PHP/standard/general_functions/bug31190.php: SUCCEEDED
    @PHP/standard/general_functions/bug32647.php: SUCCEEDED
    @PHP/standard/general_functions/bug35229.php: SUCCEEDED
    @PHP/standard/general_functions/is_resource.php: SUCCEEDED
    @PHP/standard/math/abs.php: SUCCEEDED
    @PHP/standard/math/bug24142.php: SUCCEEDED
    @PHP/standard/math/bug25694.php: SUCCEEDED
    @PHP/standard/math/bug27646.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    double(INF-INF)
    'd:-INF;'
    double(INF-INF)
    double(INF-INF)
    'd:INF;'
    double(INF-INF)
    double(NaNInfini)
    'd:NAN;'
    double(NaNInfini)
    double(-Infinity)
    'd:-INF;'
    double(-Infinity)
    double(Infinity)
    'd:INF;'
    double(Infinity)
    double(NaN)
    'd:NAN;'
    double(NaN)
    @PHP/standard/math/bug30069.php: SUCCEEDED
    @PHP/standard/math/bug30695.php: SUCCEEDED
    @PHP/standard/math/floorceil.php: SUCCEEDED
    @PHP/standard/math/hexdec.php: SUCCEEDED
    @PHP/standard/math/log.php: SUCCEEDED
    @PHP/standard/math/pow.php: SUCCEEDED
    @PHP/standard/math/round.php: SUCCEEDED
    @PHP/standard/reg/001.php: SUCCEEDED
    @PHP/standard/reg/002.php: SUCCEEDED
    @PHP/standard/reg/003.php: SUCCEEDED
    @PHP/standard/reg/004.php: SUCCEEDED
    @PHP/standard/reg/005.php: SUCCEEDED
    @PHP/standard/reg/006.php: SUCCEEDED
    @PHP/standard/reg/007.php: SUCCEEDED
    @PHP/standard/reg/008.php: SUCCEEDED
    @PHP/standard/reg/009.php: SUCCEEDED
    @PHP/standard/reg/010.php: SUCCEEDED
    @PHP/standard/reg/011.php: SUCCEEDED
    @PHP/standard/reg/012.php: SUCCEEDED
    @PHP/standard/reg/013.php: SUCCEEDED
    @PHP/standard/reg/014.php: SUCCEEDED
    @PHP/standard/reg/015.php: SUCCEEDED
    @PHP/standard/reg/016.php: SUCCEEDED
    @PHP/standard/serialize/001.php: SUCCEEDED
    @PHP/standard/serialize/002.php: SUCCEEDED
    @PHP/standard/serialize/003.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    d:100;
    double(100.0000000000)
    
    d:51999999999999996980101120;
    double(51999999999999996980101120.0000000000)
    
    d:8.9999999999999995265585574287341141808127531476202420890331268310546875E-9;
    double(0.0000000090)
    d:100;
    double(100.0000000000)
    
    d:5.2000000000000006E+25;
    double(52000000000000000000000000.0000000000)
    
    d:9.0000000000000045E-09;
    double(0.0000000090)
    @PHP/standard/serialize/004.php: SUCCEEDED
    @PHP/standard/serialize/005.php: SUCCEEDED
    @PHP/standard/serialize/006.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    'O:3:"´┐Ż":1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    object
    {
      '´┐Ż' => '´┐Ż'
    }
    'a:1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    array
    {
      '´┐Ż' => '´┐Ż'
    }
    'O:3:"´┐Ż":1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    object
    {
      'ďż˝' => '´┐Ż'
    }
    'a:1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    array
    {
      'ďż˝' => '´┐Ż'
    }
    @PHP/standard/serialize/bug14293.php: SUCCEEDED
    @PHP/standard/serialize/bug21957.php: SUCCEEDED
    @PHP/standard/serialize/bug23298.php: SUCCEEDED
    @PHP/standard/serialize/bug24063.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0.1 0.1
    0.01 0.01
    0.001 0.001
    0.0001 0.0001
    1.0E-5 1.0E-5
    1.0E-6 1.0E-6
    1.0E-7 1.0E-7
    1.0E-8 1.0E-8
    1.0E-9 1.0E-9
    0.1 0.1
    0.01 0.01
    0.001 0.001
    0.0001 0.0001
    1E-05 1E-05
    1E-06 1E-06
    1E-07 1E-07
    1E-08 1E-08
    1E-09 1E-09
    @PHP/standard/serialize/bug25378.php: SUCCEEDED
    @PHP/standard/serialize/bug26762.php: SUCCEEDED
    @PHP/standard/serialize/bug27469.php: SUCCEEDED
    @PHP/standard/serialize/bug28325.php: SUCCEEDED
    @PHP/standard/serialize/bug30234.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    FALSE
    FALSE
    __autoload(Autoload_Implements)
    object [invalid]
    FALSE
    FALSE
    FALSE
    FALSE
    TRUE
    __autoload(Autoload_Implements)
    object [invalid]
    FALSE
    FALSE
    TRUE
    @PHP/standard/serialize/bug31402.php: SUCCEEDED
    @PHP/standard/serialize/bug31442.php: SUCCEEDED
    @PHP/standard/strings/add-and-stripcslashes.php: SUCCEEDED
    @PHP/standard/strings/add-and-stripslashes.php: SUCCEEDED
    @PHP/standard/strings/basename.php: SUCCEEDED
    @PHP/standard/strings/bin2hex.php: SUCCEEDED
    @PHP/standard/strings/bug20108.php: SUCCEEDED
    @PHP/standard/strings/bug20169.php: SUCCEEDED
    @PHP/standard/strings/bug20261.php: SUCCEEDED
    @PHP/standard/strings/bug20927.php: SUCCEEDED
    @PHP/standard/strings/bug21338.php: SUCCEEDED
    @PHP/standard/strings/bug21453.php: SUCCEEDED
    @PHP/standard/strings/bug21730.php: SUCCEEDED
    @PHP/standard/strings/bug21744.php: SUCCEEDED
    @PHP/standard/strings/bug22008.php: SUCCEEDED
    @PHP/standard/strings/bug22187.php: SUCCEEDED
    @PHP/standard/strings/bug22224.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      0 => 
      object
      {
      }
      1 => 
      object
      {
      }
    }
    @PHP/standard/strings/bug22227.php: SUCCEEDED
    @PHP/standard/strings/bug22904.php: SUCCEEDED
    @PHP/standard/strings/bug23650.php: SUCCEEDED
    @PHP/standard/strings/bug23894.php: SUCCEEDED
    @PHP/standard/strings/bug24098.php: SUCCEEDED
    @PHP/standard/strings/bug24208.php: SUCCEEDED
    @PHP/standard/strings/bug24281.php: SUCCEEDED
    @PHP/standard/strings/bug25671.php: SUCCEEDED
    @PHP/standard/strings/bug25707.php: SUCCEEDED
    @PHP/standard/strings/bug26878.php: SUCCEEDED
    @PHP/standard/strings/bug26973.php: SUCCEEDED
    @PHP/standard/strings/bug27276.php: SUCCEEDED
    @PHP/standard/strings/bug27278.php: SUCCEEDED
    @PHP/standard/strings/bug27295.php: SUCCEEDED
    @PHP/standard/strings/bug27457.php: SUCCEEDED
    @PHP/standard/strings/bug27675.php: SUCCEEDED
    @PHP/standard/strings/bug28386.php: SUCCEEDED
    @PHP/standard/strings/bug33076.php: SUCCEEDED
    @PHP/standard/strings/chr_ord.php: SUCCEEDED
    @PHP/standard/strings/chunk_split.php: SUCCEEDED
    @PHP/standard/strings/count_chars.php: SUCCEEDED
    @PHP/standard/strings/crc32.php: SUCCEEDED
    @PHP/standard/strings/explode.php: SUCCEEDED
    @PHP/standard/strings/implode.php: SUCCEEDED
    @PHP/standard/strings/md5.php: SUCCEEDED
    @PHP/standard/strings/md5raw.php: SUCCEEDED
    @PHP/standard/strings/nl2br.php: SUCCEEDED
    @PHP/standard/strings/sha1.php: SUCCEEDED
    @PHP/standard/strings/sha1raw.php: SUCCEEDED
    @PHP/standard/strings/sprintf_f.php: SUCCEEDED
    @PHP/standard/strings/strcspn.php: SUCCEEDED
    @PHP/standard/strings/strings001.php: SUCCEEDED
    @PHP/standard/strings/strpos.php: SUCCEEDED
    @PHP/standard/strings/strrev.php: SUCCEEDED
    @PHP/standard/strings/strripos.php: SUCCEEDED
    @PHP/standard/strings/strrpos.php: SUCCEEDED
    @PHP/standard/strings/strspn.php: SUCCEEDED
    @PHP/standard/strings/strstr.php: SUCCEEDED
    @PHP/standard/strings/strtoupper.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    cfbfbdcfbfbdcfbfbd
    cfafbdcfafbdcfafbd
    @PHP/standard/strings/strtr.php: SUCCEEDED
    @PHP/standard/strings/strval.php: SUCCEEDED
    @PHP/standard/strings/str_repeat.php: SUCCEEDED
    @PHP/standard/strings/str_shuffle.php: SUCCEEDED
    @PHP/standard/strings/str_word_count.php: SUCCEEDED
    @PHP/standard/strings/substr_count.php: SUCCEEDED
    @PHP/standard/strings/substr_replace.php: SUCCEEDED
    @PHP/standard/strings/wordwrap.php: SUCCEEDED
    @PHP/standard/time/001.php: SUCCEEDED
    @PHP/standard/time/idate.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    U: 1043324459
    Y: 2003
    z: 22
    y: 3
    m: 1
    n: 1
    d: 23
    j: 23
    H: 13
    G: 13
    h: 1
    g: 1
    i: 20
    s: 59
    t: 31
    w: 4
    L: 0
    B: 556
    I: 0
    W: 4
    U: 1043324459
    Y: 2003
    z: 22
    y: 3
    m: 1
    n: 1
    d: 23
    j: 23
    H: 12
    G: 12
    h: 12
    g: 12
    i: 20
    s: 59
    t: 31
    w: 4
    L: 0
    B: 556
    I: 0
    W: 4
    @PHP/strings/001.php: SUCCEEDED
    @PHP/strings/002.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    fprintf test 1:abcde
    20
    printf test 1:simple string
    printf test 2:42
    printf test 3:3.333333
    printf test 4:3.3333333333
    printf test 5:2.50      
    printf test 6:2.50000000
    printf test 7:0000002.50
    printf test 8:<                 foo>
    printf test 9:<bar                 >
    printf test 10: 123456789012345
    printf test 10:<h´┐Żyesterettsjustitiarius>
    printf test 11: 123456789012345678901234567890
    printf test 11:<    h´┐Żyesterettsjustitiarius>
    printf test 12:-12.34
    printf test 13:  -12
    printf test 14:@
    printf test 15:10101010
    printf test 16:aa
    printf test 17:AA
    printf test 18:        10101010
    printf test 19:              aa
    printf test 20:              AA
    printf test 21:0000000010101010
    printf test 22:00000000000000aa
    printf test 23:00000000000000AA
    printf test 24:abcde
    printf test 25:gazonk
    printf test 26:2 1
    printf test 27:3 1 2
    printf test 28:02  1
    printf test 29:2   1
    printf test 30:x
    vprintf test 1:2   1
    fprintf test 1:abcde
    20
    printf test 1:simple string
    printf test 2:42
    printf test 3:3.333333
    printf test 4:3.3333333333
    printf test 5:2.50      
    printf test 6:2.50000000
    printf test 7:0000002.50
    printf test 8:<                 foo>
    printf test 9:<bar                 >
    printf test 10: 123456789012345
    printf test 10:<h�yesterettsjustitiarius>
    printf test 11: 123456789012345678901234567890
    printf test 11:<    h�yesterettsjustitiarius>
    printf test 12:-12.34
    printf test 13:  -12
    printf test 14:@
    printf test 15:10101010
    printf test 16:aa
    printf test 17:AA
    printf test 18:        10101010
    printf test 19:              aa
    printf test 20:              AA
    printf test 21:0000000010101010
    printf test 22:00000000000000aa
    printf test 23:00000000000000AA
    printf test 24:abcde
    printf test 25:gazonk
    printf test 26:2 1
    printf test 27:3 1 2
    printf test 28:02  1
    printf test 29:2   1
    printf test 30:x
    vprintf test 1:2   1
    @PHP/strings/bug22592.php: SUCCEEDED
    Arrays/array1.php: SUCCEEDED
    Arrays/array_diff_intersect.php: SUCCEEDED
    Arrays/array_diff_intersect2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Strict Standards: array_udiff() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 35
    Array
    (
        [0.5] => cr Object
            (
                [priv_member:cr:private] => 12
            )
    
        [0] => cr Object
            (
                [priv_member:cr:private] => 23
            )
    
    )
    
    Strict Standards: array_udiff_assoc() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 36
    Array
    (
        [0.1] => cr Object
            (
                [priv_member:cr:private] => 9
            )
    
        [0.5] => cr Object
            (
                [priv_member:cr:private] => 12
            )
    
        [0] => cr Object
            (
                [priv_member:cr:private] => 23
            )
    
    )
    
    Strict Standards: array_udiff_uassoc() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 37
    
    Strict Standards: array_udiff_uassoc() expects parameter 4 to be a valid callback, non-static method cr::comp_func_key() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 37
    Array
    (
        [0.1] => cr Object
            (
                [priv_member:cr:private] => 9
            )
    
        [0.5] => cr Object
            (
                [priv_member:cr:private] => 12
            )
    
        [0] => cr Object
            (
                [priv_member:cr:private] => 23
            )
    
    )
    Array
    (
        [b] => brown
        [c] => blue
        [0] => red
    )
    ------------------------------------
    
    Strict Standards: array_uintersect() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 40
    Array
    (
        [0.1] => cr Object
            (
                [priv_member:cr:private] => 9
            )
    
        [1] => cr Object
            (
                [priv_member:cr:private] => 4
            )
    
        [2] => cr Object
            (
                [priv_member:cr:private] => -15
            )
    
    )
    
    Strict Standards: array_uintersect_assoc() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 41
    Array
    (
        [1] => cr Object
            (
                [priv_member:cr:private] => 4
            )
    
        [2] => cr Object
            (
                [priv_member:cr:private] => -15
            )
    
    )
    
    Strict Standards: array_uintersect_uassoc() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 42
    
    Strict Standards: array_uintersect_uassoc() expects parameter 4 to be a valid callback, non-static method cr::comp_func_key() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 42
    Array
    (
        [1] => cr Object
            (
                [priv_member:cr:private] => 4
            )
    
        [2] => cr Object
            (
                [priv_member:cr:private] => -15
            )
    
    )
    Array
    (
        [a] => green
    )
    Array
    (
        [0.5] => cr Object
        (
            [priv_member:private] => 12
        )
    
        [0] => cr Object
        (
            [priv_member:private] => 23
        )
    
    )
    Array
    (
        [0.1] => cr Object
        (
            [priv_member:private] => 9
        )
    
        [0.5] => cr Object
        (
            [priv_member:private] => 12
        )
    
        [0] => cr Object
        (
            [priv_member:private] => 23
        )
    
    )
    Array
    (
        [0.1] => cr Object
        (
            [priv_member:private] => 9
        )
    
        [0.5] => cr Object
        (
            [priv_member:private] => 12
        )
    
        [0] => cr Object
        (
            [priv_member:private] => 23
        )
    
    )
    Array
    (
        [b] => brown
        [c] => blue
        [0] => red
    )
    ------------------------------------
    Array
    (
        [0.1] => cr Object
        (
            [priv_member:private] => 9
        )
    
        [1] => cr Object
        (
            [priv_member:private] => 4
        )
    
        [2] => cr Object
        (
            [priv_member:private] => -15
        )
    
    )
    Array
    (
        [1] => cr Object
        (
            [priv_member:private] => 4
        )
    
        [2] => cr Object
        (
            [priv_member:private] => -15
        )
    
    )
    Array
    (
        [1] => cr Object
        (
            [priv_member:private] => 4
        )
    
        [2] => cr Object
        (
            [priv_member:private] => -15
        )
    
    )
    Array
    (
        [a] => green
    )
    Arrays/array_diff_intersect3.php: SUCCEEDED
    Arrays/array_filter%20false%20entries%20%2322016.php: SUCCEEDED
    Arrays/array_instantiated.php: SUCCEEDED
    Arrays/array_map.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Array
    (
        [0] => Array
            (
                [0] => 1
                [1] => A
                [2] => 0
            )
    
        [1] => Array
            (
                [0] => 2
                [1] => B
                [2] => 0
            )
    
        [2] => Array
            (
                [0] => 3
                [1] => C
                [2] => 
            )
    
    )
    Array
    (
        [0] => 1 A 0
        [1] => 2 B 0
        [2] => 3 C 
    )
    Array
    (
        [A] => 2
        [10] => 3
    )
    Array
    (
        [0] => 1
        [1] => 2
        [2] => 3
    )
    Array
    (
        [0] => A
        [1] => B
        [2] => C
    )
    Array
    (
        [0] => 0
        [1] => 0
    )
    Array
    (
        [A] => 1
        [10] => 2
    )
    Array
    (
        [0] => Array
        (
            [0] => 1
            [1] => A
            [2] => 0
        )
    
        [1] => Array
        (
            [0] => 2
            [1] => B
            [2] => 0
        )
    
        [2] => Array
        (
            [0] => 3
            [1] => C
            [2] => 
        )
    
    )
    Array
    (
        [0] => 1 A 0
        [1] => 2 B 0
        [2] => 3 C 
    )
    Array
    (
        [A] => 2
        [10] => 3
    )
    Array
    (
        [0] => 1
        [1] => 2
        [2] => 3
    )
    Array
    (
        [0] => A
        [1] => B
        [2] => C
    )
    Array
    (
        [0] => x
        [1] => x
    )
    Array
    (
        [A] => 1
        [10] => 2
    )
    Arrays/array_merge_recursive.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Array
    (
        [color] => Array
            (
                [favorite] => Array
                    (
                        [0] => red
                        [1] => green
                    )
    
                [0] => blue
            )
    
        [0] => Array
            (
                [0] => 1
                [1] => 2
                [2] => 3
            )
    
        [q] => Array
            (
                [0] => 
                [1] => 
                [2] => x
            )
    
        [1] => 10
        [2] => Array
            (
                [0] => 4
                [1] => 5
                [2] => 6
            )
    
    )
    Array
    (
        [a] => Array
            (
                [0] => 1
                [1] => 2
                [2] => 3
                [3] => e
            )
    
    )
    Array
    (
        [a] => Array
            (
                [0] => 1
                [1] => 2
                [2] => 3
                [3] => e
            )
    
    )
    Array
    (
        [a] => 1
        [b] => 2
    )
    Array
    (
        [a] => xxx
        [b] => 2
    )
    Array
    (
        [a] => Array
            (
                [a] => Array
                    (
                        [a] => Array
     *RECURSION*
                    )
    
                [0] => 1
                [1] => 2
                [2] => 3
            )
    
    )
    Array
    (
        [a] => Array
            (
                [b] => Array
                    (
                        [0] => 1
                        [1] => 1
                    )
    
                [c] => 1
                [d] => Array
                    (
                        [0] => 2
                        [1] => 3
                    )
    
            )
    
    )
    Array
    (
        [a] => Array
            (
                [0] => 
                [1] => 
            )
    
    )
    Array
    (
        [a] => Array
            (
                [0] => 
                [1] => 
            )
    
    )
    Array
    (
        [color] => Array
        (
            [favorite] => Array
            (
                [0] => red
                [1] => green
            )
    
            [0] => blue
        )
    
        [0] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
        )
    
        [q] => Array
        (
            [0] => x
        )
    
        [1] => 10
        [2] => Array
        (
            [0] => 4
            [1] => 5
            [2] => 6
        )
    
    )
    Array
    (
        [a] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
            [3] => e
        )
    
    )
    Array
    (
        [a] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
            [3] => e
        )
    
    )
    Array
    (
        [a] => 1
        [b] => 2
    )
    Array
    (
        [a] => xxx
        [b] => 2
    )
    Array
    (
        [a] => Array
        (
            [a] => Array
            (
                [a] => Array [recursion]
    
    
            )
    
            [0] => 1
            [1] => 2
            [2] => 3
        )
    
    )
    Array
    (
        [a] => Array
        (
            [b] => Array
            (
                [0] => 1
                [1] => 1
            )
    
            [c] => 1
            [d] => Array
            (
                [0] => 2
                [1] => 3
            )
    
        )
    
    )
    Array
    (
        [a] => Array
        (
        )
    
    )
    Array
    (
        [a] => Array
        (
        )
    
    )
    Arrays/array_op.php: SUCCEEDED
    Arrays/array_reduce1.php: SUCCEEDED
    Arrays/array_reduce2.php: SUCCEEDED
    Arrays/array_slice.php: SUCCEEDED
    Arrays/array_sumprod.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    float(8.3)
    float(0)
    int(6)
    int(6)
    float(4294967297)
    float(9.2233720282648E+18)
    bool(true)
    bool(false)
    float(-7.7)
    float(-38.4)
    int(6)
    int(6)
    int64(4294967297)
    int64(9223372028264841218)
    bool(true)
    bool(true)
    Arrays/array_unset_add.php: SUCCEEDED
    Arrays/array_unshift.php: SUCCEEDED
    Arrays/array_walk.php: SUCCEEDED
    Arrays/array_walk_recursive.php: SUCCEEDED
    Arrays/multisort.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    bool(true)
    Array
    (
        [0] => Array
            (
                [0] => 2
                [1] => 8
                [2] => 2
                [3] => 2
                [4] => 8
                [5] => 8
            )
    
        [1] => Array
            (
                [0] => 7
                [1] => 2
                [2] => 7
                [3] => 4
                [4] => 8
                [5] => 1
            )
    
        [2] => Array
            (
                [0] => 1
                [1] => 4
                [2] => 8
                [3] => 0
                [4] => 6
                [5] => 2
            )
    
        [3] => Array
            (
                [0] => 8
                [1] => 4
                [2] => 1
                [3] => 0
                [4] => 7
                [5] => 1
            )
    
        [4] => Array
            (
                [0] => 20
                [1] => 2
                [2] => 12
                [3] => 11
                [4] => 10
                [5] => 1
            )
    
    )
    Array
    (
        [0] => Array
            (
                [0] => 10
                [1] => 100
                [2] => 100
                [3] => a
            )
    
        [1] => Array
            (
                [0] => 1
                [1] => 3
                [2] => 2
                [3] => 1
            )
    
    )
    Array
    (
        [0] => 10
        [1] => a
        [2] => 100
        [3] => 100
    )
    Array
    (
        [0] => 1
        [1] => 1
        [2] => 2
        [3] => 3
    )
    bool(true)
    Array
    (
        [0] => Array
        (
            [0] => 2
            [1] => 8
            [2] => 2
            [3] => 2
            [4] => 8
            [5] => 8
        )
    
        [1] => Array
        (
            [0] => 7
            [1] => 2
            [2] => 7
            [3] => 4
            [4] => 8
            [5] => 1
        )
    
        [2] => Array
        (
            [0] => 1
            [1] => 4
            [2] => 8
            [3] => 0
            [4] => 6
            [5] => 2
        )
    
        [3] => Array
        (
            [0] => 8
            [1] => 4
            [2] => 1
            [3] => 0
            [4] => 7
            [5] => 1
        )
    
        [4] => Array
        (
            [0] => 20
            [1] => 2
            [2] => 12
            [3] => 11
            [4] => 10
            [5] => 1
        )
    
    )
    Array
    (
        [0] => Array
        (
            [0] => 10
            [1] => 100
            [2] => 100
            [3] => a
        )
    
        [1] => Array
        (
            [0] => 1
            [1] => 3
            [2] => 2
            [3] => 1
        )
    
    )
    Array
    (
        [0] => 10
        [1] => a
        [2] => 100
        [3] => 100
    )
    Array
    (
        [0] => 1
        [1] => 1
        [2] => 2
        [3] => 3
    )
    Arrays/multisort_empty.php: SUCCEEDED
    Arrays/nonarray%20access%20%2322019.php: SUCCEEDED
    Arrays/optimizations.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    3
    4
    5
    a
    b
    c
    
    Warning: strtolower() expects parameter 1 to be string, array given in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 15
    
    cablo
    3
    4
    5
    a
    b
    c
    array
    cablo
    Arrays/recursion.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    f1:
    array(2) {
      ["a"]=>
      array(5) {
        ["a"]=>
        &array(3) {
          ["a"]=>
          &array(3) {
            ["a"]=>
            *RECURSION*
            [0]=>
            string(1) "y"
            [1]=>
            string(1) "z"
          }
          [0]=>
          string(1) "y"
          [1]=>
          string(1) "z"
        }
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        string(1) "x"
      }
      [0]=>
      string(1) "w"
    }
    f2:
    array(1) {
      ["A"]=>
      &array(2) {
        ["a"]=>
        &array(2) {
          ["a"]=>
          *RECURSION*
          [0]=>
          string(1) "z"
        }
        [0]=>
        string(1) "z"
      }
    }
    f3:
    array(2) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) {
          [0]=>
          *RECURSION*
          [1]=>
          string(1) "z"
        }
        [1]=>
        string(1) "z"
      }
      [1]=>
      string(1) "z"
    }
    f4:
    
    Warning: array_merge_recursive(): recursion detected in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 37
    array(1) {
      ["a"]=>
      &array(3) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
      }
    }
    f5:
    array(1) {
      ["a"]=>
      array(6) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        int(1)
        [4]=>
        int(2)
        [5]=>
        int(3)
      }
    }
    f6:
    array(1) {
      ["a"]=>
      array(2) {
        [0]=>
        string(2) "xx"
        [1]=>
        int(2)
      }
    }
    f7:
    array(1) {
      ["a"]=>
      array(1) {
        ["a"]=>
        array(1) {
          ["a"]=>
          &array(1) {
            ["a"]=>
            &array(1) {
              ["a"]=>
              *RECURSION*
            }
          }
        }
      }
    }
    f1:
    array(2) {
      ["a"]=>
      array(5) {
        ["a"]=>
        &array(3) {
          ["a"]=>
          &array(3) [recursion]
          [0]=>
          string(1) "y"
          [1]=>
          string(1) "z"
        }
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        string(1) "x"
      }
      [0]=>
      string(1) "w"
    }
    f2:
    array(1) {
      ["A"]=>
      &array(2) {
        ["a"]=>
        &array(2) [recursion]
        [0]=>
        string(1) "z"
      }
    }
    f3:
    array(2) {
      [0]=>
      &array(2) [recursion]
      [1]=>
      string(1) "z"
    }
    f4:
    array(1) {
      ["a"]=>
      array(6) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        int(1)
        [4]=>
        int(2)
        [5]=>
        int(3)
      }
    }
    f5:
    array(1) {
      ["a"]=>
      array(6) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        int(1)
        [4]=>
        int(2)
        [5]=>
        int(3)
      }
    }
    f6:
    array(1) {
      ["a"]=>
      array(2) {
        [0]=>
        string(2) "xx"
        [1]=>
        int(2)
      }
    }
    f7:
    array(1) {
      ["a"]=>
      &array(1) {
        ["a"]=>
        &array(1) [recursion]
      }
    }
    Arrays/sort.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    sort regular:
    Array
    (
        [0] => 0
        [1] => 1
        [2] => 1
        [3] => 8
        [4] => 0x10
        [5] => 10x
        [6] => 20x
        [7] => ach0
        [8] => add1
        [9] => x10
        [10] => x2
    )
    
    sort numeric:
    Array
    (
        [0] => add1
        [1] => x2
        [2] => 0x10
        [3] => ach0
        [4] => 0
        [5] => x10
        [6] => 1
        [7] => 1
        [8] => 8
        [9] => 10x
        [10] => 20x
    )
    
    sort string:
    Array
    (
        [0] => 0
        [1] => 0x10
        [2] => 1
        [3] => 1
        [4] => 10x
        [5] => 20x
        [6] => 8
        [7] => ach0
        [8] => add1
        [9] => x10
        [10] => x2
    )
    
    sort locale:
    Array
    (
        [0] => 0
        [1] => 0x10
        [2] => 1
        [3] => 1
        [4] => 10x
        [5] => 20x
        [6] => 8
        [7] => ach0
        [8] => add1
        [9] => x10
        [10] => x2
    )
    
    ksort regular:
    Array
    (
        [x] => 8
        [z] => 1
        [0] => x10
        [1] => 10x
        [2b] => 1
        [2] => 20x
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [10a] => 0
    )
    
    ksort numeric:
    Array
    (
        [x] => 8
        [z] => 1
        [0] => x10
        [1] => 10x
        [2b] => 1
        [2] => 20x
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [10a] => 0
    )
    
    ksort string:
    Array
    (
        [0] => x10
        [1] => 10x
        [10a] => 0
        [2] => 20x
        [2b] => 1
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [x] => 8
        [z] => 1
    )
    
    ksort locale:
    Array
    (
        [0] => x10
        [1] => 10x
        [10a] => 0
        [2] => 20x
        [2b] => 1
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [x] => 8
        [z] => 1
    )
    
    asort regular:
    Array
    (
        [10a] => 0
        [2b] => 1
        [z] => 1
        [x] => 8
        [4] => 0x10
        [1] => 10x
        [2] => 20x
        [5] => ach0
        [6] => add1
        [0] => x10
        [3] => x2
    )
    
    asort numeric:
    Array
    (
        [6] => add1
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [10a] => 0
        [0] => x10
        [z] => 1
        [2b] => 1
        [x] => 8
        [1] => 10x
        [2] => 20x
    )
    
    asort string:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [z] => 1
        [2b] => 1
        [1] => 10x
        [2] => 20x
        [x] => 8
        [5] => ach0
        [6] => add1
        [0] => x10
        [3] => x2
    )
    
    asort locale:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [z] => 1
        [2b] => 1
        [1] => 10x
        [2] => 20x
        [x] => 8
        [5] => ach0
        [6] => add1
        [0] => x10
        [3] => x2
    )
    
    rsort regular:
    Array
    (
        [0] => x2
        [1] => x10
        [2] => add1
        [3] => ach0
        [4] => 20x
        [5] => 10x
        [6] => 0x10
        [7] => 8
        [8] => 1
        [9] => 1
        [10] => 0
    )
    
    rsort numeric:
    Array
    (
        [0] => 20x
        [1] => 10x
        [2] => 8
        [3] => 1
        [4] => 1
        [5] => ach0
        [6] => add1
        [7] => 0x10
        [8] => x2
        [9] => x10
        [10] => 0
    )
    
    rsort string:
    Array
    (
        [0] => x2
        [1] => x10
        [2] => add1
        [3] => ach0
        [4] => 8
        [5] => 20x
        [6] => 10x
        [7] => 1
        [8] => 1
        [9] => 0x10
        [10] => 0
    )
    
    rsort locale:
    Array
    (
        [0] => x2
        [1] => x10
        [2] => add1
        [3] => ach0
        [4] => 8
        [5] => 20x
        [6] => 10x
        [7] => 1
        [8] => 1
        [9] => 0x10
        [10] => 0
    )
    
    natsort:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [2b] => 1
        [z] => 1
        [x] => 8
        [1] => 10x
        [2] => 20x
        [5] => ach0
        [6] => add1
        [3] => x2
        [0] => x10
    )
    sort regular:
    Array
    (
        [0] => 0x10
        [1] => 10x
        [2] => 20x
        [3] => ach0
        [4] => add1
        [5] => x10
        [6] => 0
        [7] => x2
        [8] => 1
        [9] => 1
        [10] => 8
    )
    
    sort numeric:
    Array
    (
        [0] => x10
        [1] => 0
        [2] => x2
        [3] => ach0
        [4] => add1
        [5] => 1
        [6] => 1
        [7] => 8
        [8] => 10x
        [9] => 0x10
        [10] => 20x
    )
    
    sort string:
    Array
    (
        [0] => 0
        [1] => 0x10
        [2] => 1
        [3] => 1
        [4] => 10x
        [5] => 20x
        [6] => 8
        [7] => ach0
        [8] => add1
        [9] => x10
        [10] => x2
    )
    
    sort locale:
    Array
    (
        [0] => 0
        [1] => 0x10
        [2] => 1
        [3] => 1
        [4] => 10x
        [5] => 20x
        [6] => 8
        [7] => add1
        [8] => ach0
        [9] => x10
        [10] => x2
    )
    
    ksort regular:
    Array
    (
        [x] => 8
        [z] => 1
        [0] => x10
        [1] => 10x
        [2] => 20x
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [10a] => 0
        [2b] => 1
    )
    
    ksort numeric:
    Array
    (
        [x] => 8
        [z] => 1
        [0] => x10
        [1] => 10x
        [2b] => 1
        [2] => 20x
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [10a] => 0
    )
    
    ksort string:
    Array
    (
        [0] => x10
        [1] => 10x
        [10a] => 0
        [2] => 20x
        [2b] => 1
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [x] => 8
        [z] => 1
    )
    
    ksort locale:
    Array
    (
        [0] => x10
        [1] => 10x
        [10a] => 0
        [2] => 20x
        [2b] => 1
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [x] => 8
        [z] => 1
    )
    
    asort regular:
    Array
    (
        [4] => 0x10
        [1] => 10x
        [2] => 20x
        [5] => ach0
        [6] => add1
        [0] => x10
        [10a] => 0
        [3] => x2
        [z] => 1
        [2b] => 1
        [x] => 8
    )
    
    asort numeric:
    Array
    (
        [0] => x10
        [10a] => 0
        [3] => x2
        [5] => ach0
        [6] => add1
        [z] => 1
        [2b] => 1
        [x] => 8
        [1] => 10x
        [4] => 0x10
        [2] => 20x
    )
    
    asort string:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [z] => 1
        [2b] => 1
        [1] => 10x
        [2] => 20x
        [x] => 8
        [5] => ach0
        [6] => add1
        [0] => x10
        [3] => x2
    )
    
    asort locale:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [z] => 1
        [2b] => 1
        [1] => 10x
        [2] => 20x
        [x] => 8
        [6] => add1
        [5] => ach0
        [0] => x10
        [3] => x2
    )
    
    rsort regular:
    Array
    (
        [0] => 8
        [1] => 1
        [2] => 1
        [3] => x2
        [4] => x10
        [5] => 0
        [6] => add1
        [7] => ach0
        [8] => 20x
        [9] => 10x
        [10] => 0x10
    )
    
    rsort numeric:
    Array
    (
        [0] => 20x
        [1] => 0x10
        [2] => 10x
        [3] => 8
        [4] => 1
        [5] => 1
        [6] => x10
        [7] => 0
        [8] => x2
        [9] => ach0
        [10] => add1
    )
    
    rsort string:
    Array
    (
        [0] => x2
        [1] => x10
        [2] => add1
        [3] => ach0
        [4] => 8
        [5] => 20x
        [6] => 10x
        [7] => 1
        [8] => 1
        [9] => 0x10
        [10] => 0
    )
    
    rsort locale:
    Array
    (
        [0] => x2
        [1] => x10
        [2] => ach0
        [3] => add1
        [4] => 8
        [5] => 20x
        [6] => 10x
        [7] => 1
        [8] => 1
        [9] => 0x10
        [10] => 0
    )
    
    natsort:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [z] => 1
        [2b] => 1
        [x] => 8
        [1] => 10x
        [2] => 20x
        [5] => ach0
        [6] => add1
        [3] => x2
        [0] => x10
    )
    Arrays/usort.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    Array
    (
        [0] => 10
        [1] => 9
        [2] => 8
        [3] => 7
        [4] => 6
        [5] => 5
        [6] => 4
        [7] => 3
        [8] => 2
        [9] => 1
    )
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Array
    (
        [0] => 10
        [1] => 9
        [2] => 8
        [3] => 7
        [4] => 6
        [5] => 5
        [6] => 4
        [7] => 3
        [8] => 2
        [9] => 1
    )
    Arrays/lazy_copy/001.php: SUCCEEDED
    Arrays/lazy_copy/002.php: SUCCEEDED
    Arrays/lazy_copy/003.php: SUCCEEDED
    Arrays/lazy_copy/004.php: SUCCEEDED
    Arrays/lazy_copy/005.php: SUCCEEDED
    Arrays/lazy_copy/006.php: SUCCEEDED
    Bugs/class_incompletepart.php: SUCCEEDED
    Bugs/division-by-zero.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    DIVISION
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 6
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 8
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 10
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 12
    bool(false)
    MODULO
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 16
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 18
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 20
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 22
    bool(false)
    DIVISION
    bool(false)
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt at expression on line 10, column 2.
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt at expression on line 12, column 2.
    bool(false)
    MODULO
    bool(false)
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt at expression on line 20, column 2.
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt at expression on line 22, column 2.
    bool(false)
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt(6,10): warning PHP0150: Division by zero
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt(8,9): warning PHP0150: Division by zero
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt(16,10): warning PHP0150: Division by zero
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt(18,9): warning PHP0150: Division by zero
    
    Bugs/function-in-unknown-class.php: SUCCEEDED
    Bugs/if_if.php: SUCCEEDED
    Bugs/is_a_null_value.php: SUCCEEDED
    Bugs/obj_instantiated.php: SUCCEEDED
    Bugs/preg-named-groups.php: SUCCEEDED
    Bugs/preg-replace-advanced.php: SUCCEEDED
    Bugs/preg-replace-range.php: SUCCEEDED
    Bugs/preg-replace.php: SUCCEEDED
    Bugs/preg-this-dynamic.php: FAILED
    Script hung upNo errorsSuccess
    Expected test outputReal script output
    Unhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---> PHP.Core.Debug+AssertException: Assertion failed: 
       at PHP.Core.Debug.Fail(String message)
       at PHP.Core.Debug.Assert(Boolean condition)
       at PHP.Core.RelativePath.ParseCanonical(String relativePath)
       at PHP.Core.Emit.TransientAssemblyBuilder.Build(String sourceCode, SourceCodeDescriptor descriptor, EvalKinds kind, CompilationContext context, ScriptContext scriptContext, DTypeDesc referringType, NamingContext namingContext, Boolean completeSource)
       at PHP.Core.DynamicCode.EvalInternal(String prefix, String code, String suffix, EvalKinds kind, ScriptContext scriptContext, Dictionary`2 localVariables, DObject self, DTypeDesc referringType, SourceCodeDescriptor descriptor, Boolean entireFile, NamingContext namingContext)
       at PHP.Core.DynamicCode.Eval(String code, Boolean synthetic, ScriptContext context, Dictionary`2 definedVariables, DObject self, DTypeDesc referringType, String callerRelativeSourcePath, Int32 line, Int32 column, Int32 containerId, NamingContext namingContext)
       at PHP.Library.PerlRegExp.Evaluator.ReplaceCodeExecute(Match m)
       at System.Text.RegularExpressions.RegexReplacement.Replace(MatchEvaluator evaluator, Regex regex, String input, Int32 count, Int32 startat)
       at System.Text.RegularExpressions.Regex.Replace(String input, MatchEvaluator evaluator, Int32 count)
       at PHP.Library.PerlRegExp.ReplaceInternal(DObject self, Dictionary`2 definedVariables, PerlRegExpConverter converter, PhpCallback callback, String str, Int32 limit, SourceCodeDescriptor sourceCodeDesc, Int32& count)
       at PHP.Library.PerlRegExp.SimpleReplace(DObject self, Dictionary`2 definedVariables, Object pattern, String replacement, PhpCallback callback, Object data, Int32 limit, SourceCodeDescriptor descriptor, Int32& count)
       at PHP.Library.PerlRegExp.Replace(ScriptContext context, DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, PhpCallback callback, Object data, Int32 limit, Int32& count)
       at PHP.Library.PerlRegExp.Replace(ScriptContext context, DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, Object data)
       at PHP.Dynamic.PhpNetClassLibrary.preg_replace(Object , PhpStack )
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.CallInternal(Dictionary`2 localVariables, NamingContext namingContext, Object name, String fallbackName, DRoutineDesc& routineHint, ScriptContext context)
       at PHP.Core.ScriptContext.CallVoid(Dictionary`2 localVariables, NamingContext namingContext, Object name, String fallbackName, DRoutineDesc& routineHint, ScriptContext context)
       at <__input.txt>.a.a(ScriptContext ) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt:line 17
       at <__input.txt>.a.<Mediator>(ScriptContext )
       at <__input.txt>.a.a(Object instance, PhpStack stack)
       at <__input.txt>.<Script>.<Main>(ScriptContext <context>, Dictionary`2 <locals>, DObject <self>, DTypeDesc <includer>, Boolean <request>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt:line 19
       at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)
       at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)
       --- End of inner exception stack trace ---
       at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)
       at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)
       at <Global>.Run(String[] )
    
    Bugs/preg-this-dynamic2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    foo: ahoj
    foo: lidi
    foo: rozkladame
    foo: ahoj
    foo: lidi
    foo: rozkladame
    foo: ahoj
    foo: lidi
    foo: rozkladame
    
    Notice: Undefined variable: this.
    
    Error: Call to a member function foo() on a non-object.
    Bugs/preg-this.php: SUCCEEDED
    Bugs/preg-ungreedy-bugs.php: SUCCEEDED
    Bugs/preg-unkn.php: SUCCEEDED
    Bugs/trigger_error%20line%20number%20%232787.php: SUCCEEDED
    CLR/BaseTypes.php: SUCCEEDED
    CLR/ClrEvent.php: SUCCEEDED
    CLR/ConditionalDecls.php: SUCCEEDED
    CLR/ConditionalDecls2.php: SUCCEEDED
    CLR/foreach.php: SUCCEEDED
    CLR/handle_enum.php: SUCCEEDED
    CLR/Inheritance1.php: FAILED
    Phalanger misbehaviour while compiling [file] sectionSee belowSuccess
    Expected test outputReal script output
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(3,2): error PHP2031: Circular interface inheritance dependency involving 'I4' and 'I1'
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(6,2): (related location)
    
    CLR/Inheritance2.php: FAILED
    Phalanger misbehaviour while compiling [file] sectionSee belowSuccess
    Expected test outputReal script output
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(3,2): error PHP2031: Circular interface inheritance dependency involving 'J4' and 'J1'
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(6,2): (related location)
    
    CLR/Inheritance3.php: FAILED
    Phalanger misbehaviour while compiling [file] sectionSee belowSuccess
    Expected test outputReal script output
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(3,2): error PHP2031: Circular interface inheritance dependency involving 'J5' and 'J5'
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(3,2): (related location)
    
    CLR/Inheritance4.php: FAILED
    Phalanger misbehaviour while compiling [file] sectionSee belowSuccess
    Expected test outputReal script output
    error PHP2007: Internal error! 
    Please, report this bug via http://www.codeplex.com/WorkItem/List.aspx?ProjectName=Phalanger.
    Additional information: 
    Could not load type '<__input.txt>.J`1' from assembly 'Inheritance4_file, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' because it has recursive generic definition.
       at System.Reflection.Emit.TypeBuilder.TermCreateClass(RuntimeModule module, Int32 tk, ObjectHandleOnStack type)
       at System.Reflection.Emit.TypeBuilder.CreateTypeNoLock()
       at System.Reflection.Emit.TypeBuilder.CreateType()
       at PHP.Core.Reflection.PhpType.Bake()
       at PHP.Core.Reflection.ScriptCompilationUnit.Bake()
       at PHP.Core.Reflection.InclusionGraphBuilder.EmitAllUnits(CodeGenerator codeGenerator)
       at PHP.Core.Emit.ScriptAssemblyBuilder.CompileScripts(IEnumerable`1 sourceFiles, String duckPath, String duckNamespace, CompilationContext context)
       at PHP.Core.Emit.ScriptAssemblyBuilder.Build(IEnumerable`1 sourceFiles, CompilationContext context)
       at PHP.Core.ApplicationCompiler.Compile(ApplicationContext applicationContext, CompilerConfiguration config, ErrorSink errorSink, CompilationParameters ps)
    
    
    CLR/Inheritance5.php: SUCCEEDED
    CLR/Inheritance6.php: SUCCEEDED
    CLR/Inheritance7.php: SUCCEEDED
    CLR/Inheritance8.php: SUCCEEDED
    CLR/Inheritance9.php: FAILED
    Phalanger misbehaviour while compiling [file] sectionSee belowSuccess
    Expected test outputReal script output
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(14,2): error PHP1018: Class 'D' doesn't implement abstract method I::f()
    
    CLR/Lambdas.php: FAILED
    Phalanger misbehaviour while compiling [file] sectionSee belowCompile error
    Expected test outputReal script output
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(5,34): error PHP2014: Syntax error: unexpected token '::'
    
    CLR/NameResolving.php: SUCCEEDED
    Compiler/abstracts.php: SUCCEEDED
    Compiler/aliased%20assign%20add.php: SUCCEEDED
    Compiler/assignments.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ---1---1float(-1.5)
    float(2.5)
    float(0.83333333333333)
    int(6)
    int(8)
    ---2---2float(8.8333333333333)
    float(8.8333333333333)
    float(8.8333333333333)
    int(8)
    int(8)
    ---3---3---4---4---5---5array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [1]=>
      array(1) {
        [2]=>
        array(1) {
          [3]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    ---6---6array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "u"
    }
    array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "v"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    ---7---7array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    ---8---8
    ---1---1float(-1.5)
    float(2.5)
    float(0.833333333333333)
    int(6)
    int(8)
    ---2---2float(8.83333333333333)
    float(8.83333333333333)
    float(8.83333333333333)
    int(8)
    int(8)
    ---3---3---4---4---5---5array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [1]=>
      array(1) {
        [2]=>
        array(1) {
          [3]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    ---6---6array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "u"
    }
    array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "v"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    ---7---7array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    ---8---8
    Compiler/assign_in_call.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    g1:
    f(x)
    u(x)
    'x'
    
    g2:
    f(x)
    u(x)
    'b'
    
    g3:
    f(x)
    u(x)
    'b'
    
    g4:
    f(x)
    u(x)
    'b'
    
    g5:
    f()
    u()
    integer(1)
    
    g6:
    f(3)
    u(3)
    integer(3)
    
    g7:
    f(2)
    u(10)
    integer(10)
    
    g8:
    f(1)
    f(1)
    f(1)
    u(1)
    u()
    u(1)
    
    g9:
    known:
    __get(p) = 0
    __set(p,1)
    f(1)
    unknown:
    __get(p) = 1
    __set(p,3)
    u(3)
    
    g10:
    Done.
    g1:
    f(x)
    u(x)
    'x'
    
    g2:
    f(x)
    u(x)
    'b'
    
    g3:
    f(x)
    u(x)
    'b'
    
    g4:
    f(x)
    u(x)
    'b'
    
    g5:
    f()
    u()
    integer(1)
    
    g6:
    f(3)
    u(3)
    integer(3)
    
    g7:
    f(2)
    u(10)
    integer(10)
    
    g8:
    f(1)
    f(1)
    f(1)
    u(1)
    u()
    u(1)
    
    g9:
    known:
    __get(p) = 0
    __set(p,1)
    __get(p) = 1
    f(1)
    unknown:
    __get(p) = 1
    __set(p,3)
    __get(p) = 3
    u(3)
    
    g10:
    Done.
    Compiler/auto_globals_001.php: SUCCEEDED
    Compiler/auto_globals_002.php: SUCCEEDED
    Compiler/auto_globals_003.php: SUCCEEDED
    Compiler/break_in_global_code.php: SUCCEEDED
    Compiler/chaining_test.php: SUCCEEDED
    Compiler/chain_ending_by_string_index.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        string(1) "f"
      }
    }
    array(1) {
      [0]=>
      string(4) "xubu"
    }
    object(C)#1 (1) {
      ["f"]=>
      string(4) "kuxu"
    }
    string(5) "helxo"
    string(5) "helxo"
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        string(1) "f"
      }
    }
    array(1) {
      [0]=>
      string(4) "bubu"
    }
    
    Warning: A string item used as a reference in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt at expression on line 19, column 1.
    object(C)(1) {
      ["f"]=>
      string(4) "kuku"
    }
    
    Warning: A string item used as a reference in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt at expression on line 25, column 1.
    string(5) "hello"
    
    Warning: A string item used as a reference in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt at expression on line 31, column 1.
    string(5) "hello"
    Compiler/continue_in_global_code.php: SUCCEEDED
    Compiler/deep_copy.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array(1) {
      [0]=>
      &array(1) {
        [0]=>
        &array(1) {
          [0]=>
          *RECURSION*
        }
      }
    }
    array(1) {
      [0]=>
      &array(1) {
        [0]=>
        &array(1) {
          [0]=>
          *RECURSION*
        }
      }
    }
    array(2) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) {
          [0]=>
          *RECURSION*
          [1]=>
          int(1)
        }
        [1]=>
        int(1)
      }
      [1]=>
      int(1)
    }
    array(1) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) {
          [0]=>
          *RECURSION*
          [1]=>
          int(1)
        }
        [1]=>
        int(1)
      }
    }
    array(1) {
      [0]=>
      &array(1) [recursion]
    }
    array(1) {
      [0]=>
      &array(1) {
        [0]=>
        &array(1) [recursion]
      }
    }
    array(2) {
      [0]=>
      &array(2) [recursion]
      [1]=>
      int(1)
    }
    array(1) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) [recursion]
        [1]=>
        int(1)
      }
    }
    Compiler/deep_copy_refbox.php: SUCCEEDED
    Compiler/expr_init.php: SUCCEEDED
    Compiler/foreach1.php: SUCCEEDED
    Compiler/foreach_arrays.php: SUCCEEDED
    Compiler/for_loop.php: SUCCEEDED
    Compiler/function_002.php: SUCCEEDED
    Compiler/function_003.php: SUCCEEDED
    Compiler/function_004.php: SUCCEEDED
    Compiler/function_call.php: SUCCEEDED
    Compiler/func_get_args.php: SUCCEEDED
    Compiler/if_statement.php: SUCCEEDED
    Compiler/indirect_001.php: SUCCEEDED
    Compiler/indirect_002.php: SUCCEEDED
    Compiler/indirect_003.php: SUCCEEDED
    Compiler/indirect_004.php: SUCCEEDED
    Compiler/indirect_005.php: SUCCEEDED
    Compiler/indirect_007.php: SUCCEEDED
    Compiler/indirect_global.php: SUCCEEDED
    Compiler/inheritance.php: SUCCEEDED
    Compiler/inheritance2.php: SUCCEEDED
    Compiler/isset_unset_001.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Testing x in global code:  <br>
    1 <br>
     <br>
    Testing x (object) in optimized function:  <br>
    1 <br>
     <br>
    Testing x (PhpReference) in optimized function:  <br>
    1 <br>
     <br>
    
    Notice: Undefined variable: y in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt on line 29
    Testing $$x (created at runtime) in optimized function:  <br>
    1 <br>
    Testing x in global code:  <br>
    1 <br>
     <br>
    Testing x (object) in optimized function:  <br>
    1 <br>
     <br>
    Testing x (PhpReference) in optimized function:  <br>
    1 <br>
     <br>
    Testing $$x (created at runtime) in optimized function:  <br>
    1 <br>
    Compiler/list%20%2326681.php: SUCCEEDED
    Compiler/new_array_item_assignadd.php: SUCCEEDED
    Compiler/null_hints.php: SUCCEEDED
    Compiler/pure_create_function.php: SUCCEEDED
    Compiler/pure_function_exists.php: SUCCEEDED
    Compiler/pure_math_str.php: SUCCEEDED
    Compiler/self.php: SUCCEEDED
    Compiler/static_call.php: SUCCEEDED
    Compiler/switch.php: SUCCEEDED
    Compiler/ternary_ex.php: SUCCEEDED
    Compiler/ternary_short.php: SUCCEEDED
    Compiler/this%20call.php: SUCCEEDED
    Compiler/typehint_check.php: SUCCEEDED
    Compiler/__call.php: SUCCEEDED
    Compiler/Inclusions/include2.php: SUCCEEDED
    Compiler/Inclusions/include3.php: SUCCEEDED
    Compiler/Inclusions/include6.php: SUCCEEDED
    Compiler/Inclusions/include_test.php: SUCCEEDED
    Compiler/Inclusions/script.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t01.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t02.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t03.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t04.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t05.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t08.php: SUCCEEDED
    Compiler/Namespaces/const1.php: SUCCEEDED
    Compiler/Namespaces/constants1.php: SUCCEEDED
    Compiler/Namespaces/extends1.php: SUCCEEDED
    Compiler/Namespaces/extends2.php: SUCCEEDED
    Compiler/Namespaces/function1.php: SUCCEEDED
    Compiler/Namespaces/function2.php: SUCCEEDED
    Compiler/Namespaces/namespace1.php: SUCCEEDED
    Compiler/Namespaces/simple_syntax1.php: SUCCEEDED
    Compiler/Namespaces/use1.php: SUCCEEDED
    Compiler/Namespaces/use2.php: SUCCEEDED
    Compiler/Namespaces/use3.php: SUCCEEDED
    Compiler/Namespaces/use4.php: SUCCEEDED
    Compiler/PseudoConst/parent.php: SUCCEEDED
    Compiler/PseudoConst/parent2.php: SUCCEEDED
    Compiler/PseudoConst/self.php: SUCCEEDED
    Compiler/PseudoConst/t01.php: SUCCEEDED
    Compiler/PseudoConst/t02.php: SUCCEEDED
    Compiler/PseudoConst/t03.php: SUCCEEDED
    Compiler/PseudoConst/t04.php: SUCCEEDED
    Compiler/PseudoConst/t05.php: SUCCEEDED
    Compiler/PseudoConst/t06.php: SUCCEEDED
    Compiler/PseudoConst/t07.php: SUCCEEDED
    Compiler/PseudoConst/t08.php: SUCCEEDED
    Compiler/PseudoConst/t09.php: SUCCEEDED
    Compiler/PseudoConst/t10.php: SUCCEEDED
    Compiler/PseudoConst/t11.php: SUCCEEDED
    Compiler/PseudoConst/_class_.php: SUCCEEDED
    Compiler/PseudoConst/_dir_.php: SUCCEEDED
    Compiler/PseudoConst/_function_.php: SUCCEEDED
    Compiler/References/array_argument.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(2)
        [1]=>
        int(3)
      }
    }
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    Compiler/References/array_local.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(2)
        [1]=>
        int(3)
      }
    }
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    Compiler/References/array_ret_argument.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(2)
        [1]=>
        int(3)
      }
    }
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    Compiler/References/array_ret_argument2.php: SUCCEEDED
    Compiler/References/deepcopy.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <br/><br/>globalobjects: array(2) {
      [0]=>
      int(1)
      [1]=>
      int(7)
    }
    <br/><br/>globalobjects: array(2) {
      [0]=>
      int(1)
      [1]=>
      &int(7)
    }
    Compiler/References/explicitclear.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Construyendo Y
    call foo12Destruyendo Y
    3object(X)#1 (2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      int(54)
    }
    array(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      string(10) "Init Value"
    }
    x: object(X)#1 (2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      int(1004)
    }
    <br/>checkpoint array(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      int(54)
    }
    Construyendo Y
    call foo123object(X)(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      &int(54)
    }
    array(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      &int(54)
    }
    x: object(X)(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      &int(1004)
    }
    <br/>checkpoint array(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      &int(1004)
    }
    Destruyendo Y
    Compiler/References/field_argument.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: int(7)
    <br/><br/>checkpoint array(1) {
      ["objects"]=>
      int(8)
    }
    x: int(7)
    <br/><br/>checkpoint array(1) {
      ["objects"]=>
      &int(7)
    }
    Compiler/References/field_local.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: object(X)#1 (1) {
      ["objects"]=>
      int(25)
    }
    <br/>checkpoint array(1) {
      ["objects"]=>
      int(7)
    }
    x: object(X)(1) {
      ["objects"]=>
      &int(25)
    }
    <br/>checkpoint array(1) {
      ["objects"]=>
      &int(25)
    }
    Compiler/References/ref_arrayitem.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(2)
        [1]=>
        int(3)
      }
    }
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    Compiler/References/ref_reasign.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    object(X)#1 (2) {
      ["objects"]=>
      int(54)
      ["objects2"]=>
      &int(222)
    }
    array(2) {
      ["objects"]=>
      int(7)
      ["objects2"]=>
      &int(222)
    }
    x: object(X)#1 (2) {
      ["objects"]=>
      int(1004)
      ["objects2"]=>
      int(777)
    }
    <br/>checkpoint array(2) {
      ["objects"]=>
      int(54)
      ["objects2"]=>
      int(222)
    }
    object(X)(2) {
      ["objects"]=>
      &int(54)
      ["objects2"]=>
      &int(222)
    }
    array(2) {
      ["objects"]=>
      &int(54)
      ["objects2"]=>
      &int(222)
    }
    x: object(X)(2) {
      ["objects"]=>
      &int(1004)
      ["objects2"]=>
      &int(777)
    }
    <br/>checkpoint array(2) {
      ["objects"]=>
      &int(1004)
      ["objects2"]=>
      &int(777)
    }
    Compiler/Unreachable/t13.php: SUCCEEDED
    Compiler/Unset/calluserfunc.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Warning: call_user_func() expects parameter 1 to be a valid callback, function 'unset' not found or invalid function name in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\Unset\__input.txt on line 3
    int(10)
    Error: call_user_func(): Call to undefined function: 'unset' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\Unset\__input.txt at expression on line 3, column 1.
    Compiler/Unset/issetref2.php: SUCCEEDED
    Compiler/Unset/unsetglobal.php: SUCCEEDED
    Compiler/Unset/unsetglobal2.php: SUCCEEDED
    Compiler/Unset/unsetindirect.php: SUCCEEDED
    Compiler/Unset/unsetproblem.php: SUCCEEDED
    Compiler/Unset/unsetref.php: SUCCEEDED
    Compiler/Unset/unsetref2.php: SUCCEEDED
    Compiler/Unset/unsetref3.php: SUCCEEDED
    Compiler/Unset/__unset.php: SUCCEEDED
    DateTime/strftime.php: SUCCEEDED
    DateTime/strtotime1.php: SUCCEEDED
    DateTime/strtotime2.php: SUCCEEDED
    DateTime/strtotime3.php: SUCCEEDED
    DateTime/strtotime4.php: SUCCEEDED
    DateTime/strtotime5.php: SUCCEEDED
    DateTime/time.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    -189388800:-189475200 - 86400
    1964-01-01T00:00:00+0000
    1963-12-31T00:00:00+0000
    1964-06-06
    1963-06-06
    1964-01-06
    1133305200
    -189388800:-189475200 - 86400
    1964-01-01T00:00:00+0000
    1963-12-31T00:00:00+0000
    1964-06-06
    1963-06-06
    1964-01-06
    DateTime/timezones1.php: SUCCEEDED
    DLR/classContext.php: SUCCEEDED
    DLR/classContext1.php: SUCCEEDED
    DLR/classContext2.php: SUCCEEDED
    DLR/restrictions%20generics.php: SUCCEEDED
    DLR/restrictions.php: SUCCEEDED
    DLR/targets.php: SUCCEEDED
    DLR/__call.php: SUCCEEDED
    FileSystem/basename.php: SUCCEEDED
    FileSystem/basename2.php: SUCCEEDED
    FileSystem/chdir.php: SUCCEEDED
    FileSystem/csv.php: SUCCEEDED
    FileSystem/date.php: SUCCEEDED
    FileSystem/date2.php: SUCCEEDED
    FileSystem/date3.php: SUCCEEDED
    FileSystem/date_unix.php: SUCCEEDED
    FileSystem/dirname.php: SUCCEEDED
    FileSystem/dirname2.php: SUCCEEDED
    FileSystem/disk_free_space.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    355 GB
    Drive C: 19 GB
    Drive D: 355 GB
    Drive E: 
    Warning: disk_free_space(): The system cannot find the path specified.
     in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 14
    false
    Drive F: 
    Warning: disk_free_space(): The device is not ready.
     in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 14
    false
    355 GB
    Drive C: 19 GB
    Drive D: 355 GB
    Drive E: false
    Drive F: false
    FileSystem/disk_total_space.php: SUCCEEDED
    FileSystem/fgets.php: SUCCEEDED
    FileSystem/file.php: SUCCEEDED
    FileSystem/filesize.php: SUCCEEDED
    FileSystem/file_exists.php: SUCCEEDED
    FileSystem/file_get_contents.php: SUCCEEDED
    FileSystem/fpassthru.php: SUCCEEDED
    FileSystem/fread.php: SUCCEEDED
    FileSystem/fread1.php: SUCCEEDED
    FileSystem/fread2.php: SUCCEEDED
    FileSystem/fseek.php: SUCCEEDED
    FileSystem/fsockopen.php: SUCCEEDED
    FileSystem/ftell.php: SUCCEEDED
    FileSystem/glob_up_dirs.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string(7) "../@PHP"
    string(9) "../Arrays"
    string(7) "../Bugs"
    string(6) "../CLR"
    string(11) "../Compiler"
    string(6) "../DLR"
    string(11) "../DateTime"
    string(13) "../FileSystem"
    string(7) "../Math"
    string(7) "../Misc"
    string(10) "../Objects"
    string(10) "../PHP.NET"
    string(8) "../RegEx"
    string(6) "../SPL"
    string(10) "../Strings"
    string(11) "../TestLogs"
    string(12) "../Variables"
    string(6) "../Xml"
    string(7) "../@PHP"
    string(9) "../Arrays"
    string(7) "../Bugs"
    string(6) "../CLR"
    string(11) "../Compiler"
    string(11) "../DateTime"
    string(6) "../DLR"
    string(13) "../FileSystem"
    string(7) "../Math"
    string(7) "../Misc"
    string(10) "../Objects"
    string(10) "../PHP.NET"
    string(8) "../RegEx"
    string(6) "../SPL"
    string(10) "../Strings"
    string(11) "../TestLogs"
    string(12) "../Variables"
    string(6) "../Xml"
    FileSystem/is_dir.php: SUCCEEDED
    FileSystem/is_executable.php: SUCCEEDED
    FileSystem/pathinfo.php: SUCCEEDED
    FileSystem/popen.php: SUCCEEDED
    FileSystem/readdir.php: SUCCEEDED
    FileSystem/readfile.php: SUCCEEDED
    FileSystem/readline.php: SUCCEEDED
    FileSystem/realpath.php: SUCCEEDED
    FileSystem/scandir.php: SUCCEEDED
    FileSystem/stat.php: SUCCEEDED
    FileSystem/stream_context_set_option.php: SUCCEEDED
    FileSystem/stream_copy_to_stream.php: SUCCEEDED
    FileSystem/stream_copy_to_stream2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <p>Read <b>rb</b>, Write <b>wb</b>
    
    
    COPIED: <b>31295</b>
    <p>Read <b>rb</b>, Write <b>wt</b>
    
    
    COPIED: <b>31271</b>
    <p>Read <b>rb</b>, Write <b>wb</b>
    
    
    COPIED: <b>31283</b>
    <p>Read <b>rb</b>, Write <b>wt</b>
    
    
    COPIED: <b>31271</b>
    FileSystem/testinc.php: SUCCEEDED
    FileSystem/touch.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Warning: touch(): Utime failed: Bad file descriptor in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 8
    Sorry Could Not change modification time of touch.txt
    Warning: touch(): Utime failed: Bad file descriptor in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 14
    
    Warning: touch(): Utime failed: Bad file descriptor in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 16
    
    Warning: touch(): Utime failed: Bad file descriptor in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 17
    <pre>[ARRAY
      [INT (0)] => [STRING: "May 10, 2011; [00:50:21] (00h) ctime test.txt (1304981421)"]
      [INT (1)] => [STRING: "February 19, 2011; [22:06:05] (22h) mtime test.txt (1298149565)"]
      [INT (2)] => [STRING: "May 10, 2011; [00:50:21] (00h) ctime touch.txt (1304981421)"]
      [INT (3)] => [STRING: "February 19, 2011; [22:06:05] (22h) mtime touch.txt (1298149565)"]
      [INT (4)] => [STRING: "May 10, 2011; [00:50:21] (00h) atime touch.txt (1304981421)"]
      [INT (5)] => [STRING: "February 19, 2011; [22:06:05] (22h) mtime summer.txt (1298149565)"]
      [INT (6)] => [STRING: "February 19, 2011; [22:06:05] (22h) mtime winter.txt (1298149565)"]
    ]</pre>
    Warning: touch(): Unable to access (D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\touch.txt): Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 8, column 5.
    Sorry Could Not change modification time of touch.txt
    Warning: touch(): Unable to access (D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\touch.txt): Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 14, column 1.
    
    Warning: touch(): Unable to access (D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\winter.txt): Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 16, column 1.
    
    Warning: touch(): Unable to access (D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\summer.txt): Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 17, column 1.
    <pre>[ARRAY
      [INT (0)] => [STRING: "May 9, 2011; [23:50:21] (23h) ctime test.txt (1304977821)"]
      [INT (1)] => [STRING: "February 19, 2011; [22:06:05] (22h) mtime test.txt (1298149565)"]
      [INT (2)] => [STRING: "May 9, 2011; [23:50:21] (23h) ctime touch.txt (1304977821)"]
      [INT (3)] => [STRING: "February 19, 2011; [22:06:05] (22h) mtime touch.txt (1298149565)"]
      [INT (4)] => [STRING: "May 9, 2011; [23:50:21] (23h) atime touch.txt (1304977821)"]
      [INT (5)] => [STRING: "February 19, 2011; [22:06:05] (22h) mtime summer.txt (1298149565)"]
      [INT (6)] => [STRING: "February 19, 2011; [22:06:05] (22h) mtime winter.txt (1298149565)"]
    ]</pre>
    FileSystem/tar/tar_test.php: SUCCEEDED
    FileSystem/zip/zip.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    correct
    Error: Call to undefined function: 'zip_open' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\zip\__input.txt at expression on line 3, column 1.
    Math/abs.php: SUCCEEDED
    Math/atan2.php: SUCCEEDED
    Math/base_convert.php: SUCCEEDED
    Math/bindec.php: SUCCEEDED
    Math/ceil.php: SUCCEEDED
    Math/cos.php: SUCCEEDED
    Math/decbin.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <pre>
    [double: 2294967295]
    10001000110010100110101111111111
    [double: 4294967296]
    0
    [double: 8589934590]
    11111111111111111111111111111110
    [double: 8589934590]
    11111111111111111111111111111110
    [double: 8589934591]
    11111111111111111111111111111111
    [Int: 1000.000.000.000]
    11010100101001010001000000000000
    <hr>(-1, -5435, 2.14, 0, 26)
    11111111111111111111111111111111
    11111111111111111110101011000101
    10
    0
    11010 
    </pre>
    <pre>
    [???: 2294967295]
    10001000110010100110101111111111
    [???: 4294967296]
    0
    [???: 8589934590]
    11111111111111111111111111111110
    [???: 8589934590]
    11111111111111111111111111111110
    [???: 8589934591]
    11111111111111111111111111111111
    [Int: 1000.000.000.000]
    11010100101001010001000000000000
    <hr>(-1, -5435, 2.14, 0, 26)
    11111111111111111111111111111111
    11111111111111111110101011000101
    10
    0
    11010 
    </pre>
    Math/dechex.php: SUCCEEDED
    Math/decoct.php: SUCCEEDED
    Math/deg2rad.php: SUCCEEDED
    Math/exp.php: SUCCEEDED
    Math/floor.php: SUCCEEDED
    Math/fmod.php: SUCCEEDED
    Math/hexdec.php: SUCCEEDED
    Math/max.php: SUCCEEDED
    Math/min.php: SUCCEEDED
    Math/modulo_warn.php: SUCCEEDED
    Math/octdec.php: SUCCEEDED
    Math/pow.php: SUCCEEDED
    Math/rad2deg.php: SUCCEEDED
    Math/round.php: SUCCEEDED
    Math/sin.php: SUCCEEDED
    Math/sqrt.php: SUCCEEDED
    Math/tan.php: SUCCEEDED
    Math/uniqid.php: SUCCEEDED
    Misc/calendar_extension.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0
    0
    2375840
    0
    14
    32
    2
    There are 31 days in August 2003
    There are 28 days in February 2003
    There are 29 days in February 2004
    There are 31 days in December 2034
    1748326
    1748324
    374867
    0
    322f32322f35373633
    ebe120e7f9e5ef20e4faf9f1e2
    ebe120e7f9e5ef20e427faf9f1e2
    ebe120e7f9e5ef20e420e0ecf4e9ed20faf9f1e2
    ebe120e7f9e5ef20e42720e0ecf4e9ed20faf9f1e2
    eb22e120e7f9e5ef20e4faf9f122e2
    e12720e7f9e5ef20e4faf9f122e2
    e12720e7f9e5ef20e427faf9f122e2
    e12720e7f9e5ef20e420e0ecf4e9ed20faf9f122e2
    e12720e7f9e5ef20e42720e0ecf4e9ed20faf9f122e2
    Error: Call to undefined function: 'frenchtojd' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt at expression on line 2, column 1.
    Misc/dir_read.php: SUCCEEDED
    Misc/fgetcsv%20%2327492.php: SUCCEEDED
    Misc/hash%20functions%20%2326667.php: SUCCEEDED
    Misc/ini_parse.php: SUCCEEDED
    Misc/json%20%2327838.php: SUCCEEDED
    Misc/lexer.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    T_INLINE_HTML
    311 '\r\n'
    T_OPEN_TAG
    368 '&lt;?'
    T_WHITESPACE
    371 ' \r\n\r\n'
    T_FINAL
    345 'final'
    T_WHITESPACE
    371 ' '
    T_CLASS
    353 'class'
    T_WHITESPACE
    371 ' '
    T_STRING
    307 'A'
    T_WHITESPACE
    371 ' \r\n'
        '{'
    T_WHITESPACE
    371 ' \r\n  '
    T_FUNCTION
    334 'function'
    T_WHITESPACE
    371 ' '
    T_STRING
    307 '__get'
        '('
    T_VARIABLE
    309 '$x'
        ')'
    T_WHITESPACE
    371 ' \r\n  '
        '{'
    T_WHITESPACE
    371 ' \r\n    '
    T_VARIABLE
    309 '$x'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_START_HEREDOC
    372 '&lt;&lt;&lt;EOOOOOOOOOOOOOOT\r\n'
    T_ENCAPSED_AND_WHITESPACE
    314 '         &lt;&lt;&lt;hello\r\nEOOOOOOOOOOOOOOt;\r\nEOOOOOOOOOOOOOT;\r\n'
    T_END_HEREDOC
    373 'EOOOOOOOOOOOOOOT'
        ';'
    T_WHITESPACE
    371 '\r\n\r\n    '
        '$'
    T_VARIABLE
    309 '$y'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_ARRAY
    360 'array'
    T_WHITESPACE
    371 ' '
        '('
    T_LNUMBER
    305 '1'
        ','
    T_DNUMBER
    306 '100000000000000'
        ','
    T_DNUMBER
    306 '999999999999999999999999999999999'
        ','
    T_STRING
    307 'true'
        ','
    T_STRING
    307 'false'
        ')'
        ';'
    T_WHITESPACE
    371 '\r\n    '
        '$'
        '{'
        '&quot;'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
    T_DOLLAR_OPEN_CURLY_BRACES
    374 '${'
        '$'
        '{'
    T_CONSTANT_ENCAPSED_STRING
    315 '&quot;xxx&quot;'
        '}'
        '}'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
        '&quot;'
        '}'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_LNUMBER
    305 '1'
        ';'
    T_WHITESPACE
    371 '\r\n    '
        '$'
        '{'
        '&quot;'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
    T_DOLLAR_OPEN_CURLY_BRACES
    374 '${'
        '$'
        '{'
        '&quot;'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
    T_VARIABLE
    309 '$x'
    T_ENCAPSED_AND_WHITESPACE
    314 '-&gt;$$'
    T_VARIABLE
    309 '$x0xx'
        '&quot;'
        '}'
        '}'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
        '&quot;'
        '}'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_LNUMBER
    305 '1'
        ';'
    T_WHITESPACE
    371 '\r\n  '
        '}'
    T_WHITESPACE
    371 ' \r\n'
        '}'
    T_WHITESPACE
    371 '\r\n\r\n'
    T_CLOSE_TAG
    370 '?&gt;'
    '
    '
        '&lt;?'
        ' 
    
    '
        'final'
        ' '
        'class'
        ' '
        'A'
        ' 
    '
        '{'
        ' 
      '
        'function'
        ' '
    259
    259 '__get'
        '('
        '$x'
        ')'
        ' 
      '
        '{'
        ' 
        '
        '$x'
        ' '
        '='
        ' '
        '&lt;&lt;&lt;EOOOOOOOOOOOOOOT
    '
        '         &lt;&lt;&lt;'
        'hello'
        '
    '
        'EOOOOOOOOOOOOOOt;
    '
        'EOOOOOOOOOOOOOT;
    '
        'EOOOOOOOOOOOOOOT'
        ';'
        '
    
        '
        '$'
        '$y'
        ' '
        '='
        ' '
        'array'
        ' '
        '('
        '1'
        ','
        '100000000000000'
        ','
        '999999999999999999999999999999999'
        ','
    256
    256 'true'
        ','
    257
    257 'false'
        ')'
        ';'
        '
        '
        '$'
        '{'
        '&quot;'
        'x'
        '${'
        '$'
        '{'
    -29
    -29 '&quot;xxx&quot;'
        '}'
        '}'
        'x'
        '&quot;'
        '}'
        ' '
        '='
        ' '
        '1'
        ';'
        '
        '
        '$'
        '{'
        '&quot;'
        'x'
        '${'
        '$'
        '{'
        '&quot;'
        'x'
        '$x'
        '-&gt;'
        '$'
        '$'
        '$x0xx'
        '&quot;'
        '}'
        '}'
        'x'
        '&quot;'
        '}'
        ' '
        '='
        ' '
        '1'
        ';'
        '
      '
        '}'
        ' 
    '
        '}'
        '
    
    '
        '?&gt;'
    Misc/locale.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string(1) "C"
    double(1.54)
    double(Infinity)
    654564.145400
    Sat Saturday Apr April
    --------------
    string(19) "Danish_Denmark.1252"
    double(1.54)
    double(Infinity)
    654564,145400
    lo lordag apr april
    --------------
    string(25) "Czech_Czech Republic.1250"
    double(1.54)
    double(Infinity)
    654564,145400
    so sobota IV duben
    --------------
    string(1) "C"
    float(1.54)
    float(Infinity)
    654564.145400
    Sat Saturday Apr April
    --------------
    string(19) "Danish_Denmark.1252"
    float(1.54)
    float(Infinity)
    654564,145400
    lo lordag apr april
    --------------
    string(25) "Czech_Czech Republic.1250"
    float(1.54)
    float(Infinity)
    654564,145400
    so sobota 4 duben
    --------------
    Misc/output2.php: SUCCEEDED
    Misc/parse_url%20%2327377.php: SUCCEEDED
    Misc/parse_url_at_bug.php: SUCCEEDED
    Misc/stack_trace.php: FAILED
    Script hung upNo errorsSuccess
    Expected test outputReal script output
    Unhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---> System.IndexOutOfRangeException: Index was outside the bounds of the array.
       at PHP.Core.PhpStackFrame..ctor(ScriptContext context, StackFrame frame, FrameKinds kind)
       at PHP.Core.PhpStackTrace..ctor(ScriptContext context, StackTrace clrTrace)
       at PHP.Core.PhpStackTrace..ctor(ScriptContext context, Int32 skipFrames)
       at PHP.Library.Errors.Backtrace()
       at <stack_trace.inc>.<Script>.j(ScriptContext <context>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\stack_trace.inc:line 11
       at <stack_trace.inc>.<Script>.j(Object instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.CallInternal(Dictionary`2 localVariables, NamingContext namingContext, Object name, String fallbackName, DRoutineDesc& routineHint, ScriptContext context)
       at PHP.Core.ScriptContext.CallVoid(Dictionary`2 localVariables, NamingContext namingContext, Object name, String fallbackName, DRoutineDesc& routineHint, ScriptContext context)
       at <stack_trace.inc>.<Script>.i(ScriptContext <context>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\stack_trace.inc:line 7
       at <stack_trace.inc>.<Script>.i(Object instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.CallInternal(Dictionary`2 localVariables, NamingContext namingContext, Object name, String fallbackName, DRoutineDesc& routineHint, ScriptContext context)
       at PHP.Core.ScriptContext.CallVoid(Dictionary`2 localVariables, NamingContext namingContext, Object name, String fallbackName, DRoutineDesc& routineHint, ScriptContext context)
       at <^0>.<Global>.<?0>.h(ScriptContext <context>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt:line 14
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack, DTypeDesc caller)
       at PHP.Core.PhpCallback.InvokeInternal(Object[] args)
       at PHP.Core.PhpCallback.Invoke(Object[] args)
       at PHP.Library.PhpArrays.Map(DTypeDesc caller, PhpCallback map, PhpArray[] arrays)
       at <__input.txt>.<Script>.<Lambda>(ScriptContext <context>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt:line 4
       at <__input.txt>.<Script>.<Lambda>(Object instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.CallInternal(Dictionary`2 localVariables, NamingContext namingContext, Object name, String fallbackName, DRoutineDesc& routineHint, ScriptContext context)
       at PHP.Core.ScriptContext.CallVoid(Dictionary`2 localVariables, NamingContext namingContext, Object name, String fallbackName, DRoutineDesc& routineHint, ScriptContext context)
       at <__input.txt>.<Script>.f(ScriptContext <context>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt:line 7
       at <__input.txt>.<Script>.f(Object instance, PhpStack stack)
       at <__input.txt>.<Script>.<Main>(ScriptContext <context>, Dictionary`2 <locals>, DObject <self>, DTypeDesc <includer>, Boolean <request>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt:line 18
       at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)
       at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)
       --- End of inner exception stack trace ---
       at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)
       at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)
       at <Global>.Run(String[] )
    
    Misc/str_getcsv%20%2326691.php: SUCCEEDED
    Misc/tokens.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    T_REQUIRE_ONCE = 258,
    T_REQUIRE = 259,
    T_EVAL = 260,
    T_INCLUDE_ONCE = 261,
    T_INCLUDE = 262,
    T_LOGICAL_OR = 263,
    T_LOGICAL_XOR = 264,
    T_LOGICAL_AND = 265,
    T_PRINT = 266,
    T_SR_EQUAL = 267,
    T_SL_EQUAL = 268,
    T_XOR_EQUAL = 269,
    T_OR_EQUAL = 270,
    T_AND_EQUAL = 271,
    T_MOD_EQUAL = 272,
    T_CONCAT_EQUAL = 273,
    T_DIV_EQUAL = 274,
    T_MUL_EQUAL = 275,
    T_MINUS_EQUAL = 276,
    T_PLUS_EQUAL = 277,
    T_BOOLEAN_OR = 278,
    T_BOOLEAN_AND = 279,
    T_IS_NOT_IDENTICAL = 280,
    T_IS_IDENTICAL = 281,
    T_IS_NOT_EQUAL = 282,
    T_IS_EQUAL = 283,
    T_IS_GREATER_OR_EQUAL = 284,
    T_IS_SMALLER_OR_EQUAL = 285,
    T_SR = 286,
    T_SL = 287,
    T_INSTANCEOF = 288,
    T_UNSET_CAST = 289,
    T_BOOL_CAST = 290,
    T_OBJECT_CAST = 291,
    T_ARRAY_CAST = 292,
    T_STRING_CAST = 293,
    T_DOUBLE_CAST = 294,
    T_INT_CAST = 295,
    T_DEC = 296,
    T_INC = 297,
    T_CLONE = 298,
    T_NEW = 299,
    T_EXIT = 300,
    T_IF = 301,
    T_ELSEIF = 302,
    T_ELSE = 303,
    T_ENDIF = 304,
    T_LNUMBER = 305,
    T_DNUMBER = 306,
    T_STRING = 307,
    T_STRING_VARNAME = 308,
    T_VARIABLE = 309,
    T_NUM_STRING = 310,
    T_INLINE_HTML = 311,
    T_CHARACTER = 312,
    T_BAD_CHARACTER = 313,
    T_ENCAPSED_AND_WHITESPACE = 314,
    T_CONSTANT_ENCAPSED_STRING = 315,
    T_ECHO = 316,
    T_DO = 317,
    T_WHILE = 318,
    T_ENDWHILE = 319,
    T_FOR = 320,
    T_ENDFOR = 321,
    T_FOREACH = 322,
    T_ENDFOREACH = 323,
    T_DECLARE = 324,
    T_ENDDECLARE = 325,
    T_AS = 326,
    T_SWITCH = 327,
    T_ENDSWITCH = 328,
    T_CASE = 329,
    T_DEFAULT = 330,
    T_BREAK = 331,
    T_CONTINUE = 332,
    T_GOTO = 333,
    T_FUNCTION = 334,
    T_CONST = 335,
    T_RETURN = 336,
    T_TRY = 337,
    T_CATCH = 338,
    T_THROW = 339,
    T_USE = 340,
    T_GLOBAL = 341,
    T_PUBLIC = 342,
    T_PROTECTED = 343,
    T_PRIVATE = 344,
    T_FINAL = 345,
    T_ABSTRACT = 346,
    T_STATIC = 347,
    T_VAR = 348,
    T_UNSET = 349,
    T_ISSET = 350,
    T_EMPTY = 351,
    T_HALT_COMPILER = 352,
    T_CLASS = 353,
    T_INTERFACE = 354,
    T_EXTENDS = 355,
    T_IMPLEMENTS = 356,
    T_OBJECT_OPERATOR = 357,
    T_DOUBLE_ARROW = 358,
    T_LIST = 359,
    T_ARRAY = 360,
    T_CLASS_C = 361,
    T_METHOD_C = 362,
    T_FUNC_C = 363,
    T_LINE = 364,
    T_FILE = 365,
    T_COMMENT = 366,
    T_DOC_COMMENT = 367,
    T_OPEN_TAG = 368,
    T_OPEN_TAG_WITH_ECHO = 369,
    T_CLOSE_TAG = 370,
    T_WHITESPACE = 371,
    T_START_HEREDOC = 372,
    T_END_HEREDOC = 373,
    T_DOLLAR_OPEN_CURLY_BRACES = 374,
    T_CURLY_OPEN = 375,
    T_PAAMAYIM_NEKUDOTAYIM = 376,
    T_DOUBLE_COLON = 376,
    T_NAMESPACE = 377,
    T_NS_C = 378,
    T_DIR = 379,
    T_NS_SEPARATOR = 380,
    T_INCLUDE = 129,
    T_INCLUDE_ONCE = 130,
    T_EVAL = 131,
    T_REQUIRE = 132,
    T_REQUIRE_ONCE = 133,
    T_LOGICAL_OR = 136,
    T_LOGICAL_XOR = 137,
    T_LOGICAL_AND = 138,
    T_PRINT = 139,
    T_PLUS_EQUAL = 140,
    T_MINUS_EQUAL = 141,
    T_MUL_EQUAL = 142,
    T_DIV_EQUAL = 143,
    T_CONCAT_EQUAL = 144,
    T_MOD_EQUAL = 145,
    T_AND_EQUAL = 146,
    T_OR_EQUAL = 147,
    T_XOR_EQUAL = 148,
    T_SL_EQUAL = 149,
    T_SR_EQUAL = 150,
    T_BOOLEAN_OR = 151,
    T_BOOLEAN_AND = 152,
    T_IS_EQUAL = 153,
    T_IS_NOT_EQUAL = 154,
    T_IS_IDENTICAL = 155,
    T_IS_NOT_IDENTICAL = 156,
    T_IS_SMALLER_OR_EQUAL = 157,
    T_IS_GREATER_OR_EQUAL = 158,
    T_SL = 159,
    T_SR = 160,
    T_INC = 161,
    T_DEC = 162,
    T_NEW = 164,
    T_INSTANCEOF = 165,
    T_CLONE = 167,
    T_LNUMBER = 168,
    T_DNUMBER = 170,
    T_STRING = 171,
    T_STRING_VARNAME = 172,
    T_VARIABLE = 173,
    T_NUM_STRING = 174,
    T_INLINE_HTML = 175,
    T_CHARACTER = 176,
    T_BAD_CHARACTER = 177,
    T_ENCAPSED_AND_WHITESPACE = 178,
    T_CONSTANT_ENCAPSED_STRING = 179,
    T_EXIT = 180,
    T_IF = 181,
    T_ELSEIF = 182,
    T_ELSE = 183,
    T_ENDIF = 184,
    T_ECHO = 185,
    T_DO = 186,
    T_WHILE = 187,
    T_ENDWHILE = 188,
    T_FOR = 189,
    T_ENDFOR = 190,
    T_FOREACH = 191,
    T_ENDFOREACH = 192,
    T_AS = 193,
    T_SWITCH = 194,
    T_ENDSWITCH = 195,
    T_CASE = 196,
    T_DEFAULT = 197,
    T_BREAK = 198,
    T_CONTINUE = 199,
    T_FUNCTION = 200,
    T_CONST = 201,
    T_RETURN = 202,
    T_GLOBAL = 203,
    T_STATIC = 204,
    T_VAR = 205,
    T_UNSET = 206,
    T_ISSET = 207,
    T_EMPTY = 208,
    T_CLASS = 209,
    T_EXTENDS = 210,
    T_OBJECT_OPERATOR = 211,
    T_DOUBLE_ARROW = 212,
    T_LIST = 213,
    T_ARRAY = 214,
    T_CLASS_C = 215,
    T_METHOD_C = 216,
    T_FUNC_C = 217,
    T_LINE = 218,
    T_FILE = 219,
    T_DIR = 220,
    T_COMMENT = 221,
    T_DOC_COMMENT = 222,
    T_OPEN_TAG = 227,
    T_OPEN_TAG_WITH_ECHO = 228,
    T_CLOSE_TAG = 229,
    T_WHITESPACE = 230,
    T_START_HEREDOC = 231,
    T_END_HEREDOC = 232,
    T_DOLLAR_OPEN_CURLY_BRACES = 233,
    T_CURLY_OPEN = 234,
    T_DOUBLE_COLON = 235,
    T_PAAMAYIM_NEKUDOTAYIM = 235,
    T_GOTO = 237,
    T_TRY = 238,
    T_CATCH = 239,
    T_THROW = 240,
    T_INTERFACE = 241,
    T_IMPLEMENTS = 242,
    T_ABSTRACT = 243,
    T_FINAL = 244,
    T_PRIVATE = 245,
    T_PROTECTED = 246,
    T_PUBLIC = 247,
    T_BOOL_CAST = 288,
    T_INT_CAST = 291,
    T_DOUBLE_CAST = 297,
    T_STRING_CAST = 300,
    T_ARRAY_CAST = 303,
    T_OBJECT_CAST = 304,
    T_UNSET_CAST = 305,
    T_HALT_COMPILER = 351,
    Misc/user_error_handlers.php: SUCCEEDED
    Objects/accessing%20property%20line%20number%20%2326052.php: SUCCEEDED
    Objects/conditional1.php: SUCCEEDED
    Objects/conditional2.php: SUCCEEDED
    Objects/conditional_base_class.php: SUCCEEDED
    Objects/constant_test.php: SUCCEEDED
    Objects/convobjtoany.php: SUCCEEDED
    Objects/convobjtostr.php: SUCCEEDED
    Objects/evaled_parent.php: SUCCEEDED
    Objects/getter_setter_bug28444.php: SUCCEEDED
    Objects/instanceof.php: SUCCEEDED
    Objects/new_via_unknown_ctor.php: SUCCEEDED
    Objects/object_creation_test.php: SUCCEEDED
    Objects/objop.php: SUCCEEDED
    Objects/objopstr.php: SUCCEEDED
    Objects/overrides%20%231285.php: SUCCEEDED
    Objects/static_field_test.php: SUCCEEDED
    Objects/static_inheritence.php: SUCCEEDED
    Objects/static_method_test.php: SUCCEEDED
    Objects/static_object_vars.php: SUCCEEDED
    Objects/sys_class_const.php: SUCCEEDED
    Objects/this2.php: SUCCEEDED
    Objects/__invoke.php: SUCCEEDED
    RegEx/backreferences.php: SUCCEEDED
    RegEx/dolar_escape.php: SUCCEEDED
    RegEx/ereg.php: SUCCEEDED
    RegEx/escaped_unicode.php: SUCCEEDED
    RegEx/groupbug.php: SUCCEEDED
    RegEx/namedbackref.php: SUCCEEDED
    RegEx/namedbackref2.php: SUCCEEDED
    RegEx/namedgroups.php: SUCCEEDED
    RegEx/namedgroups1.php: SUCCEEDED
    RegEx/namedgroups2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Warning: preg_match_all(): Numeric named subpatterns are not allowed in D:\Documents\Projects\Phalanger\Main\Testing\Tests\RegEx\__input.txt on line 6
    array(0) {
    }
    array(3) {
      [0]=>
      array(2) {
        [0]=>
        string(23) "flux.transitions.bars3d"
        [1]=>
        string(21) "flux.transitions.wrap"
      }
      ["10"]=>
      array(2) {
        [0]=>
        string(6) "bars3d"
        [1]=>
        string(4) "wrap"
      }
      [1]=>
      array(2) {
        [0]=>
        string(6) "bars3d"
        [1]=>
        string(4) "wrap"
      }
    }
    RegEx/nomatchall.php: SUCCEEDED
    RegEx/preg_match_unmatched_groups.php: SUCCEEDED
    RegEx/preg_replace_eval.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ab"01300 as"00da sd"0asdsa das asd 11asd a1sd a
    ab"01300 as"00da sd"0(aasdasdkjask,$a,\,\l,a,s,d,a,s,d,k,j,a,s,${120})(ldjaklsdjalk,$l,\,\l,d,j,a,k,l,s,d,j,a,l,${120})djdsa das asd 11asd a1sd a
    ab"01300 as"00da sd"0asdsa das asd 11asd a1sd a
    ab"01300 as"00da sd"0(aasdasdkjask,$a,\,\l,a,s,d,a,s,d,k,j,,,${120})(ldjaklsdjalk,$l,\,\l,d,j,a,k,l,s,d,j,,,${120})djdsa das asd 11asd a1sd a
    RegEx/regexp-sql.php: SUCCEEDED
    RegEx/regexp_smiles.php: SUCCEEDED
    RegEx/Perl/cache.php: SUCCEEDED
    RegEx/Perl/grep1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      [3] => string(3) "1.5"
      [6] => string(5) "58.54"
    }
    Notice: preg_grep(): Array to string conversion in D:\Documents\Projects\Phalanger\Main\Testing\Tests\RegEx\Perl\__input.txt at expression on line 5, column 1.
    array(2) {
      [3]=>
      string(3) "1.5"
      [6]=>
      string(5) "58.54"
    }
    RegEx/Perl/grep2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Food  array
    (
      [0] => apple
      [1] => banana
      [2] => squid
      [3] => pear
    )
    Fruit array
    (
      [0] => apple
      [1] => banana
      [3] => pear
    )
    Food  Array
    (
        [0] => apple
        [1] => banana
        [2] => squid
        [3] => pear
    )
    Fruit Array
    (
        [0] => apple
        [1] => banana
        [3] => pear
    )
    RegEx/Perl/match1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array [empty]
    array
    (
      [0] => array
      (
        [0] => def
        [1] => 3
      )
    )
    Array
    (
    )
    Array
    (
        [0] => Array
        (
            [0] => def
            [1] => 3
        )
    
    )
    RegEx/Perl/match10.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    (
      [0] => 1231
      [1] => 1
      [2] => 23
      [3] => 1
    )
    Array
    (
        [0] => 1231
        [1] => 1
        [2] => 23
        [3] => 1
    )
    RegEx/Perl/match2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    (
      [0] => array
      (
        [0] => def
        [1] => 0
      )
    )
    Array
    (
        [0] => Array
        (
            [0] => def
            [1] => 0
        )
    
    )
    RegEx/Perl/match3.php: SUCCEEDED
    RegEx/Perl/match4.php: SUCCEEDED
    RegEx/Perl/match5.php: SUCCEEDED
    RegEx/Perl/match6.php: SUCCEEDED
    RegEx/Perl/match7.php: SUCCEEDED
    RegEx/Perl/match8.php: SUCCEEDED
    RegEx/Perl/match9.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    (
      [0] => 209.6.145.47 - - [22/Nov/2003:19:02:30 -0500] "GET /dir/doc.htm HTTP/1.0" 200 6776 "http://search.yahoo.com/search?p=key+words=UTF-8" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)"
      [1] => 209.6.145.47
      [2] => -
      [3] => -
      [4] => 22/Nov/2003:19:02:30 -0500
      [5] => GET
      [6] => /dir/doc.htm
      [7] => HTTP
      [8] => 1.0
      [9] => 200
      [10] => 6776
      [11] => "http://search.yahoo.com/search?p=key+words=UTF-8"
      [12] => "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)"
    )
    Array
    (
        [0] => 209.6.145.47 - - [22/Nov/2003:19:02:30 -0500] "GET /dir/doc.htm HTTP/1.0" 200 6776 "http://search.yahoo.com/search?p=key+words=UTF-8" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)"
        [1] => 209.6.145.47
        [2] => -
        [3] => -
        [4] => 22/Nov/2003:19:02:30 -0500
        [5] => GET
        [6] => /dir/doc.htm
        [7] => HTTP
        [8] => 1.0
        [9] => 200
        [10] => 6776
        [11] => "http://search.yahoo.com/search?p=key+words=UTF-8"
        [12] => "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)"
    )
    RegEx/Perl/match_all1.php: SUCCEEDED
    RegEx/Perl/match_all2.php: SUCCEEDED
    RegEx/Perl/match_all3.php: SUCCEEDED
    RegEx/Perl/match_all4.php: SUCCEEDED
    RegEx/Perl/match_dollar.php: SUCCEEDED
    RegEx/Perl/overflow.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string("kfkaj +j k45´┐Ż´┐Ż´┐Ż´┐Ż´┐Ż3#$%^&kjakfjkaj|kfj")
    string("kfkaj +j k45�����3#$%^&kjakfjkaj|kfj")
    RegEx/Perl/quote1.php: SUCCEEDED
    RegEx/Perl/quote2.php: SUCCEEDED
    RegEx/Perl/quote3.php: SUCCEEDED
    RegEx/Perl/replace1.php: SUCCEEDED
    RegEx/Perl/replace2.php: SUCCEEDED
    RegEx/Perl/replace3.php: SUCCEEDED
    RegEx/Perl/replace4.php: SUCCEEDED
    RegEx/Perl/replace5.php: SUCCEEDED
    RegEx/Perl/replace6.php: SUCCEEDED
    RegEx/Perl/replace7.php: SUCCEEDED
    RegEx/Perl/replace8.php: SUCCEEDED
    RegEx/Perl/replace9.php: SUCCEEDED
    RegEx/Perl/replace_callback1.php: SUCCEEDED
    RegEx/Perl/replace_callback2.php: SUCCEEDED
    RegEx/Perl/split1.php: SUCCEEDED
    RegEx/Perl/split2.php: SUCCEEDED
    RegEx/Perl/split3.php: SUCCEEDED
    RegEx/Perl/split4.php: SUCCEEDED
    RegEx/Perl/split5.php: SUCCEEDED
    RegEx/Perl/split6.php: SUCCEEDED
    RegEx/Perl/ungreedy.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    aaa
    a
    aaa
    
    a
    aa
    aaa
    aa
    aaa
    aaa
    a
    aaa
    a
    a
    aa
    aaa
    aa
    aaa
    RegEx/Perl/unsuccessful-preg_match_all.php: SUCCEEDED
    RegEx/Perl/withoutdelimiters.php: SUCCEEDED
    SPL/ArrayAccess_offsetExists.php: SUCCEEDED
    SPL/ArrayIterator1.php: SUCCEEDED
    SPL/ArrayIterator2.php: SUCCEEDED
    SPL/Autoload_ctor.php: SUCCEEDED
    SPL/Autoload_extends.php: SUCCEEDED
    SPL/exceptions.php: SUCCEEDED
    SPL/FilterIterator.php: SUCCEEDED
    SPL/SplFixedArray1.php: SUCCEEDED
    SPL/SplFixedArray2.php: SUCCEEDED
    SPL/SplObjectStorage1.php: SUCCEEDED
    SPL/SplObjectStorage2.php: SUCCEEDED
    SPL/SplObjectStorage3.php: SUCCEEDED
    SPL/SplObjectStorage4.php: SUCCEEDED
    Strings/addcslashes.php: SUCCEEDED
    Strings/addslashes.php: SUCCEEDED
    Strings/chunk_split.php: SUCCEEDED
    Strings/concat.php: SUCCEEDED
    Strings/count_chars.php: SUCCEEDED
    Strings/crc32.php: SUCCEEDED
    Strings/crypt.php: SUCCEEDED
    Strings/crypt2.php: SUCCEEDED
    Strings/echo.php: SUCCEEDED
    Strings/explode.php: SUCCEEDED
    Strings/get_html_translation_table.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <hr>[&] => &amp;
    [>] => &gt;
    [<] => &lt;
    ["] => &quot;
    <hr>Hallo &amp; &lt;Frau&gt; &amp; Kr&iuml;&iquest;&frac12;mer
    <hr>[&] => &amp;
    [>] => &gt;
    [<] => &lt;
    ["] => &quot;
    <hr>Hallo &amp; &lt;Frau&gt; &amp; Kr�mer
    Strings/mb_strlen.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Call to undefined function mb_strlen() in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 4
    Error: Call to undefined function: 'mb_strlen' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 4, column 1.
    Strings/nl2br.php: SUCCEEDED
    Strings/pack.php: SUCCEEDED
    Strings/pos.php: SUCCEEDED
    Strings/runtime-quotes.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    fread = (x''y"z)
    fgets = (x''y"z)
    file[0] = (x''y"z)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    
    Warning: fopen(runtime-quotes2.txt): failed to open stream: Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 33
    
    Warning: fwrite() expects parameter 1 to be resource, boolean given in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 35
    fwrite = ()
    
    Warning: fputs() expects parameter 1 to be resource, boolean given in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 38
    fputs = ()
    
    Warning: fclose() expects parameter 1 to be resource, boolean given in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 41
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (x'y"z)
    fgets = (x'y"z)
    file[0] = (x'y"z)
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (a\'b"\\ca\)
    fgets = (a\'b"\\ca\'b"\\c)
    file[0] = (a\'b"\\ca\'b"\\c)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    e'e
    e''e
    e'e
    e'e
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    e'e
    e'e
    e'e
    e'e
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    fread = (x''y"z)
    fgets = (x''y"z)
    file[0] = (x''y"z)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    
    Warning: fopen(): Unable to access (D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\runtime-quotes2.txt): Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 33, column 3.
    
    Warning: Cannot convert boolean to resource implicitly in a call to function fwrite() in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 35, column 3.
    fwrite = (0)
    
    Warning: Cannot convert boolean to resource implicitly in a call to function fputs() in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 38, column 3.
    fputs = (0)
    
    Warning: Cannot convert boolean to resource implicitly in a call to function fclose() in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 41, column 3.
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (x'y"z)
    fgets = (x'y"z)
    file[0] = (x'y"z)
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (a\'b"\\ca\)
    fgets = (a\'b"\\ca\'b"\\c)
    file[0] = (a\'b"\\ca\'b"\\c)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    e'e
    e''e
    e'e
    e'e
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    e'e
    e'e
    e'e
    e'e
    Strings/sprintf.php: SUCCEEDED
    Strings/sprintf2.php: SUCCEEDED
    Strings/stripslashes.php: SUCCEEDED
    Strings/strtr.php: SUCCEEDED
    Strings/str_ireplace.php: SUCCEEDED
    Strings/str_replace.php: SUCCEEDED
    Strings/str_word_count.php: SUCCEEDED
    Strings/substr_operations.php: SUCCEEDED
    Strings/wordwrap.php: SUCCEEDED
    Variables/advanced_serialize.php: SUCCEEDED
    Variables/arguments.php: SUCCEEDED
    Variables/assign_copy.php: SUCCEEDED
    Variables/bitwise.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "00"
    string(2) "31"
    string(2) "31"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    0
    0
    0
    5
    0
    5
    40
    5
    45
    string(48) "000000000000000000000000000000000000000000000000"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(14) "31323331323331"
    string(2) "30"
    string(14) "31323331323331"
    string(16) "3635343635343536"
    string(2) "30"
    string(16) "3635343635343536"
    string(14) "337a5e8be43d7a"
    string(14) "00002130120201"
    string(48) "337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42"
    string(16) "347d598ce33a7e77"
    string(16) "0200243214040100"
    string(48) "367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42"
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "00"
    string(2) "31"
    string(2) "31"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    0
    -9223372036854775808
    -9223372036854775808
    -9223372036854775803
    0
    -9223372036854775803
    40
    5
    45
    string(48) "000000000000000000000000000000000000000000000000"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(14) "31323331323331"
    string(2) "30"
    string(14) "31323331323331"
    string(16) "3635343635343536"
    string(2) "30"
    string(16) "3635343635343536"
    string(14) "337a5e8be43d7a"
    string(14) "00002130120201"
    string(48) "337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42"
    string(16) "347d598ce33a7e77"
    string(16) "0200243214040100"
    string(48) "367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42"
    Variables/class_constants.php: SUCCEEDED
    Variables/comparisons.php: SUCCEEDED
    Variables/constant.php: SUCCEEDED
    Variables/constants_defined.php: SUCCEEDED
    Variables/extract%20refs.php: SUCCEEDED
    Variables/extract.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    EXTR_PREFIX_ALL
    integer(4)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
      'prefix_non_existent' => integer(1)
    }
    <hr>EXTR_PREFIX_INVALID
    integer(5)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => integer(2)
      'non_existent' => integer(1)
      'prefix_' => integer(1)
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => 'hello'
    }
    <hr>EXTR_PREFIX_SAME
    integer(3)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'non_existent' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>EXTR_PREFIX_IF_EXISTS
    integer(3)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>
    EXTR_PREFIX_ALL
    integer(4)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
      'prefix_non_existent' => integer(1)
    }
    <hr>EXTR_PREFIX_INVALID
    integer(5)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => integer(2)
      'non_existent' => integer(1)
      'prefix_' => integer(1)
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => 'hello'
    }
    <hr>EXTR_PREFIX_SAME
    integer(4)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'non_existent' => integer(1)
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>EXTR_PREFIX_IF_EXISTS
    integer(3)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>
    Variables/func_get_args.php: SUCCEEDED
    Variables/is_number.php: SUCCEEDED
    Variables/serialize.php: SUCCEEDED
    Variables/unserialize_objects.php: SUCCEEDED
    Variables/var_dumping.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Array
    (
        [0] => 1
        [1] => 
        [2] => 1
        [3] => 1.2
        [4] => 
        [5] => asdas
        [6] => Array
            (
                [0] => 1
            )
    
        [7] => stdClass Object
            (
            )
    
        [8] => Resource id #1
    )
    array(9) {
      [0]=>
      bool(true)
      [1]=>
      bool(false)
      [2]=>
      int(1)
      [3]=>
      float(1.2)
      [4]=>
      NULL
      [5]=>
      string(5) "asdas"
      [6]=>
      array(1) {
        [0]=>
        int(1)
      }
      [7]=>
      object(stdClass)#1 (0) {
      }
      [8]=>
      resource(1) of type (stream)
    }
    array (
      0 => true,
      1 => false,
      2 => 1,
      3 => 1.2,
      4 => NULL,
      5 => 'asdas',
      6 => 
      array (
        0 => 1,
      ),
      7 => 
      stdClass::__set_state(array(
      )),
      8 => NULL,
    )
    Array
    (
        [0] => 1
        [1] => 
        [2] => 1
        [3] => 1.2
        [4] => 
        [5] => asdas
        [6] => Array
        (
            [0] => 1
        )
    
        [7] => stdClass Object
        (
        )
    
        [8] => resource id #4
    
    )
    array(9) {
      [0]=>
      bool(true)
      [1]=>
      bool(false)
      [2]=>
      int(1)
      [3]=>
      float(1.2)
      [4]=>
      NULL
      [5]=>
      string(5) "asdas"
      [6]=>
      array(1) {
        [0]=>
        int(1)
      }
      [7]=>
      object(stdClass)(0) {
      }
      [8]=>
      resource(4) of type (stream)
    }
    array (
      0 => true,
      1 => false,
      2 => 1,
      3 => 1.2,
      4 => NULL,
      5 => 'asdas',
      6 => array (
        0 => 1,
      ),
      7 => class stdClass
      {
    
      },
      8 => NULL,
    )
    Xml/025.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
      'foo' => 'foobar'
    }
    array
    {
      'html' => 'http://www.w3.org/1999/xhtml'
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
    }
    array
    {
      'html' => 'http://www.w3.org/1999/xhtml'
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'foo' => 'foobar'
      'baz' => 'foobarbaz'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
    }
    array
    {
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
      'baz' => 'foobarbaz'
      'foo' => 'foobar'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
      'baz' => 'foobarbaz'
      'foo' => 'foobar'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
    }
    array
    {
    }
    Xml/026.php: SUCCEEDED
    Xml/027.php: SUCCEEDED
    Xml/028.php: SUCCEEDED
    Xml/029.php: SUCCEEDED
    Xml/030.php: SUCCEEDED
    Xml/032.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    FALSE
    FALSE
    FALSE
    TRUE
    TRUE
    TRUE
    Xml/033.php: SUCCEEDED
    Xml/bug26384.php: SUCCEEDED
    Xml/bug28721.php: SUCCEEDED
    Xml/bug28817.php: SUCCEEDED
    Xml/bug32615.php: SUCCEEDED
    Xml/bug33853.php: SUCCEEDED
    Xml/bug34276.php: SUCCEEDED
    Xml/bug35342.php: SUCCEEDED
    Xml/bug36756.php: SUCCEEDED
    Xml/bug37277.php: SUCCEEDED
    Xml/dom002.php: SUCCEEDED
    Xml/dom003.php: SUCCEEDED
    Xml/dom006.php: SUCCEEDED
    Xml/dom007.php: SUCCEEDED
    Xml/dom_set_attr_node.php: SUCCEEDED
    Xml/xmlhandler.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test begins
    <br/>
    <br/>test begins
    <br/>empty begins
    <br/>empty ends
    <br/>nocontent begins
    <br/>nocontent ends
    <br/>content begins
    <br/>empty begins
    <br/>empty ends
    <br/>empty begins
    <br/>empty ends
    <br/>content ends
    <br/>empty begins
    <br/>empty ends
    <br/>empty begins
    <br/>empty ends
    <br/>test ends
    <br/>Test ends
    <br/>
    <br/>
    Test begins
    <br/>
    <br/>
    Error: Call to undefined function: 'xml_parser_create' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Xml\__input.txt at expression on line 18, column 3.
    Xml/xslt001.php: SUCCEEDED
    Xml/xslt002.php: SUCCEEDED
    Xml/xslt003.php: SUCCEEDED
    Xml/xslt004.php: SUCCEEDED
    Xml/xslt005.php: SUCCEEDED
    Xml/xslt006.php: SUCCEEDED
    Xml/xslt007.php: SUCCEEDED
    Xml/xslt010.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test 10: EXSLT Support
      
      
      Test Date : 0001-12-31Z
        year                 : 1
        leap-year            : false
        month-in-year        : 12
        month-name           : December
        month-abbreviation   : Dec
        week-in-year         : 1
        day-in-year          : 365
        day-in-month         : 31
        day-of-week-in-month : 5
        day-in-week          : 2
        day-name             : Monday
        day-abbreviation     : Mon
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : 3000-01-31
        year                 : 3000
        leap-year            : false
        month-in-year        : 1
        month-name           : January
        month-abbreviation   : Jan
        week-in-year         : 5
        day-in-year          : 31
        day-in-month         : 31
        day-of-week-in-month : 5
        day-in-week          : 6
        day-name             : Friday
        day-abbreviation     : Fri
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : 2000-02-29
        year                 : 2000
        leap-year            : true
        month-in-year        : 2
        month-name           : February
        month-abbreviation   : Feb
        week-in-year         : 9
        day-in-year          : 60
        day-in-month         : 29
        day-of-week-in-month : 5
        day-in-week          : 3
        day-name             : Tuesday
        day-abbreviation     : Tue
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : 9990001-12-31Z
        year                 : 9990001
        leap-year            : false
        month-in-year        : 12
        month-name           : December
        month-abbreviation   : Dec
        week-in-year         : 1
        day-in-year          : 365
        day-in-month         : 31
        day-of-week-in-month : 5
        day-in-week          : 2
        day-name             : Monday
        day-abbreviation     : Mon
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : -0004-02-29
        year                 : -4
        leap-year            : true
        month-in-year        : 2
        month-name           : February
        month-abbreviation   : Feb
        week-in-year         : 9
        day-in-year          : 60
        day-in-month         : 29
        day-of-week-in-month : 5
        day-in-week          : 1
        day-name             : Sunday
        day-abbreviation     : Sun
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
    Test 10: EXSLT Support
    Warning: Cannot find a script or an extension object associated with namespace 'http://exslt.org/dates-and-times'..
    
    Warning: Illegal string offset '-1' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Phalanger.inc at expression on line 7, column 6.
    Xml/xslt011.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test 11: php:function Support
    
    Warning: XSLTProcessor::transformToXml(): A PHP Object cannot be converted to a XPath-string in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Xml\__input.txt on line 18
    <?xml version="1.0"?>
    foobar - secondArg
    foobar - 
    this is from an external DomDocument
    from the Input Document
    static
    Test 11: php:function Support
    <?xml version="1.0" encoding="utf-8"?>foobar - secondArg
    foobar - 
    this is from an external DomDocument
    from the Input Document
    static
    not a DomNode object
    Xml/xslt012.php: SUCCEEDED
    ================================================ FILE: Testing/Tests/TestLogs/TestLog (2220).htm ================================================ PHP.NET Compiler test log

    PHP.NET Compiler test log

    (90%) 890 succeeded, 96 failed
    Test ResultCompiler error outputExpected test result
    @PHP/classes/array_access_001.php: SUCCEEDED
    @PHP/classes/array_access_002.php: SUCCEEDED
    @PHP/classes/array_access_003.php: SUCCEEDED
    @PHP/classes/array_access_004.php: SUCCEEDED
    @PHP/classes/array_access_005.php: SUCCEEDED
    @PHP/classes/array_access_006.php: SUCCEEDED
    @PHP/classes/array_access_007.php: SUCCEEDED
    @PHP/classes/array_access_008.php: SUCCEEDED
    @PHP/classes/array_access_009.php: SUCCEEDED
    @PHP/classes/array_access_010.php: SUCCEEDED
    @PHP/classes/array_access_011.php: SUCCEEDED
    @PHP/classes/array_access_013.php: SUCCEEDED
    @PHP/classes/assign_op_property_001.php: SUCCEEDED
    @PHP/classes/autoload_001.php: SUCCEEDED
    @PHP/classes/autoload_002.php: SUCCEEDED
    @PHP/classes/autoload_003.php: SUCCEEDED
    @PHP/classes/autoload_005.php: SUCCEEDED
    @PHP/classes/autoload_006.php: SUCCEEDED
    @PHP/classes/bug23951.php: SUCCEEDED
    @PHP/classes/bug24399.php: SUCCEEDED
    @PHP/classes/bug24445.php: SUCCEEDED
    @PHP/classes/bug26737.php: SUCCEEDED
    @PHP/classes/bug27468.php: SUCCEEDED
    @PHP/classes/bug27504.php: SUCCEEDED
    @PHP/classes/class_example.php: SUCCEEDED
    @PHP/classes/class_stdclass.php: SUCCEEDED
    @PHP/classes/clone_001.php: SUCCEEDED
    @PHP/classes/clone_002.php: SUCCEEDED
    @PHP/classes/clone_003.php: SUCCEEDED
    @PHP/classes/clone_004.php: SUCCEEDED
    @PHP/classes/clone_006.php: SUCCEEDED
    @PHP/classes/constants_scope_001.php: SUCCEEDED
    @PHP/classes/ctor_dtor.php: SUCCEEDED
    @PHP/classes/ctor_dtor_inheritance.php: SUCCEEDED
    @PHP/classes/ctor_name_clash.php: SUCCEEDED
    @PHP/classes/dereferencing_001.php: SUCCEEDED
    @PHP/classes/destructor_and_echo.php: SUCCEEDED
    @PHP/classes/destructor_and_references.php: SUCCEEDED
    @PHP/classes/destructor_inheritance.php: SUCCEEDED
    @PHP/classes/destructor_visibility_003.php: SUCCEEDED
    @PHP/classes/factory_001.php: SUCCEEDED
    @PHP/classes/factory_and_singleton_001.php: SUCCEEDED
    @PHP/classes/factory_and_singleton_002.php: SUCCEEDED
    @PHP/classes/final.php: SUCCEEDED
    @PHP/classes/incdec_property_001.php: SUCCEEDED
    @PHP/classes/incdec_property_002.php: SUCCEEDED
    @PHP/classes/incdec_property_003.php: SUCCEEDED
    @PHP/classes/incdec_property_004.php: SUCCEEDED
    @PHP/classes/inheritance.php: SUCCEEDED
    @PHP/classes/inheritance_002.php: SUCCEEDED
    @PHP/classes/interfaces_001.php: SUCCEEDED
    @PHP/classes/interface_construct.php: SUCCEEDED
    @PHP/classes/interface_doubled.php: SUCCEEDED
    @PHP/classes/interface_implemented.php: SUCCEEDED
    @PHP/classes/iterators_001.php: SUCCEEDED
    @PHP/classes/iterators_002.php: SUCCEEDED
    @PHP/classes/iterators_003.php: SUCCEEDED
    @PHP/classes/iterators_004.php: SUCCEEDED
    @PHP/classes/iterators_006.php: SUCCEEDED
    @PHP/classes/iterators_007.php: SUCCEEDED
    @PHP/classes/object_reference_001.php: SUCCEEDED
    @PHP/classes/private_001.php: SUCCEEDED
    @PHP/classes/private_002.php: SUCCEEDED
    @PHP/classes/private_003.php: SUCCEEDED
    @PHP/classes/private_003b.php: SUCCEEDED
    @PHP/classes/private_004.php: SUCCEEDED
    @PHP/classes/private_004b.php: SUCCEEDED
    @PHP/classes/private_005.php: SUCCEEDED
    @PHP/classes/private_005b.php: SUCCEEDED
    @PHP/classes/private_006.php: SUCCEEDED
    @PHP/classes/private_006b.php: SUCCEEDED
    @PHP/classes/private_007.php: SUCCEEDED
    @PHP/classes/private_007b.php: SUCCEEDED
    @PHP/classes/private_members.php: SUCCEEDED
    @PHP/classes/private_redeclare.php: SUCCEEDED
    @PHP/classes/protected_001.php: SUCCEEDED
    @PHP/classes/protected_001b.php: SUCCEEDED
    @PHP/classes/protected_002.php: SUCCEEDED
    @PHP/classes/serialize_001.php: SUCCEEDED
    @PHP/classes/singleton_001.php: SUCCEEDED
    @PHP/classes/static_properties_001.php: SUCCEEDED
    @PHP/classes/type_hinting_001.php: SUCCEEDED
    @PHP/classes/type_hinting_003.php: SUCCEEDED
    @PHP/classes/visibility_000c.php: SUCCEEDED
    @PHP/classes/visibility_001c.php: SUCCEEDED
    @PHP/classes/visibility_002c.php: SUCCEEDED
    @PHP/classes/visibility_003a.php: SUCCEEDED
    @PHP/classes/visibility_003c.php: SUCCEEDED
    @PHP/classes/visibility_004a.php: SUCCEEDED
    @PHP/classes/visibility_004b.php: SUCCEEDED
    @PHP/classes/visibility_004c.php: SUCCEEDED
    @PHP/classes/visibility_005.php: SUCCEEDED
    @PHP/classes/__call_001.php: SUCCEEDED
    @PHP/classes/__set_data_corrupt.php: SUCCEEDED
    @PHP/classes/__set__get_001.php: SUCCEEDED
    @PHP/classes/__set__get_004.php: SUCCEEDED
    @PHP/classes/__set__get_005.php: SUCCEEDED
    @PHP/date/bug17988.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2002-06-25 12:18:48
    2002-06-25 14:18:48
    2002-06-25 13:18:48
    2002-06-25 12:18:48
    2002-06-25 18:18:48
    2002-06-25 14:18:48
    2002-06-25 14:18:48
    2002-06-25 18:18:48
    2002-06-25 10:18:48
    2002-06-25 17:18:48
    2002-06-25 11:18:48
    2002-06-25 17:48:48
    2002-06-25 10:48:48
    2002-06-25 14:18:48
    2002-06-25 14:18:48
    2002-06-25 13:18:48
    2002-06-25 12:18:48
    2002-06-25 18:18:48
    2002-06-25 14:18:48
    2002-06-25 14:18:48
    2002-06-25 18:18:48
    2002-06-25 10:18:48
    2002-06-25 17:18:48
    2002-06-25 11:18:48
    2002-06-25 17:48:48
    2002-06-25 10:48:48
    @PHP/date/bug26317.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2003-11-19 17:20:42
    2003-11-19 17:20:42
    2003-11-19 17:20:42
    2003-11-19 16:20:42
    2003-11-19 16:20:42
    2003-11-19 16:20:42
    @PHP/date/bug26320.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2003-11-19 12:30:42
    2003-11-19 13:30:42
    2003-11-19 12:30:42
    2003-11-19 12:30:42
    @PHP/date/bug28088.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    The following line rightly shows the correct date time:
    04/04/04 2145
    But the following line fails to show the correct date time:
    04/03/04 2245
    The following line rightly shows the correct date time:
    04/04/04 2345
    But the following line fails to show the correct date time:
    04/04/04 0045
    @PHP/date/bug28599.php: SUCCEEDED
    @PHP/date/bug29150.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2005-06-19 22:00:00
    2005-06-20 00:00:00
    @PHP/date/bug29585.php: SUCCEEDED
    @PHP/date/bug29595.php: SUCCEEDED
    @PHP/date/bug33056.php: SUCCEEDED
    @PHP/date/bug33452.php: SUCCEEDED
    @PHP/date/bug33562.php: SUCCEEDED
    @PHP/date/bug33563.php: SUCCEEDED
    @PHP/date/bug33578.php: SUCCEEDED
    @PHP/date/bug33869.php: SUCCEEDED
    @PHP/date/bug34676.php: SUCCEEDED
    @PHP/date/bug34771.php: SUCCEEDED
    @PHP/date/bug35143.php: SUCCEEDED
    @PHP/date/bug35414.php: SUCCEEDED
    @PHP/date/bug35422.php: SUCCEEDED
    @PHP/date/bug35425.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    integer(42)
    integer(1)
    integer(1)
    integer(1)
    integer(1)
    integer(0)
    integer(0)
    integer(1)
    integer(1)
    integer(31)
    integer(1104537661)
    integer(6)
    integer(53)
    integer(5)
    integer(2005)
    integer(0)
    integer(3600)
    integer(292)
    integer(1)
    integer(1)
    integer(1)
    integer(1)
    integer(0)
    integer(0)
    integer(1)
    integer(1)
    integer(31)
    integer(1104559261)
    integer(6)
    integer(53)
    integer(5)
    integer(2005)
    integer(0)
    integer(-18000)
    @PHP/date/bug35456.php: SUCCEEDED
    @PHP/date/bug35624.php: SUCCEEDED
    @PHP/date/bug35630.php: SUCCEEDED
    @PHP/date/bug35699.php: SUCCEEDED
    @PHP/date/bug35705.php: SUCCEEDED
    @PHP/date/bug35885.php: SUCCEEDED
    @PHP/date/bug35887.php: SUCCEEDED
    @PHP/date/date.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    c: 2003-01-23T13:20:59+01:00
    r: Thu, 23 Jan 2003 13:20:59 +0100
    c: 2003-01-23T13:20:59+01:00
    r: Thu, 23 Jan 2003 13:20:59 +0100
    c: 2003-01-23T12:20:59+00:00
    r: Thu, 23 Jan 2003 12:20:59 +0000
    c: 2003-01-23T13:20:59+01:00
    r: Thu, 23 Jan 2003 13:20:59 +0100
    @PHP/date/date_create-1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\date\__input.txt on line 28
    SKIP
    @PHP/date/date_create-2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\date\__input.txt on line 6
    SKIP
    @PHP/date/date_default_timezone_get-3.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Europe/Prague
    America/Chicago
    Europe/Rome
    America/Chicago
    @PHP/date/date_modify-1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\date\__input.txt on line 6
    SKIP
    @PHP/date/date_modify-2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\date\__input.txt on line 6
    SKIP
    @PHP/date/default-timezone-1.php: SUCCEEDED
    @PHP/date/default-timezone-2.php: SUCCEEDED
    @PHP/date/format-negative-timestamp.php: SUCCEEDED
    @PHP/date/strtotime.php: SUCCEEDED
    @PHP/date/timezone-configuration.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    1119125744
    1119125744
    1119125744
    1119125744
    1119129344
    1119125744
    @PHP/doc_examples/test001.php: SUCCEEDED
    @PHP/doc_examples/test002.php: SUCCEEDED
    @PHP/doc_examples/test003.php: SUCCEEDED
    @PHP/doc_examples/test004.php: SUCCEEDED
    @PHP/doc_examples/test005.php: SUCCEEDED
    @PHP/doc_examples/test006.php: SUCCEEDED
    @PHP/doc_examples/test007.php: SUCCEEDED
    @PHP/doc_examples/test008.php: SUCCEEDED
    @PHP/doc_examples/test009.php: SUCCEEDED
    @PHP/doc_examples/test010.php: SUCCEEDED
    @PHP/doc_examples/test011.php: SUCCEEDED
    @PHP/doc_examples/test013.php: SUCCEEDED
    @PHP/doc_examples/test014.php: SUCCEEDED
    @PHP/doc_examples/test015.php: SUCCEEDED
    @PHP/doc_examples/test016.php: SUCCEEDED
    @PHP/doc_examples/test017.php: SUCCEEDED
    @PHP/doc_examples/test018.php: SUCCEEDED
    @PHP/doc_examples/test019.php: SUCCEEDED
    @PHP/doc_examples/test020.php: SUCCEEDED
    @PHP/doc_examples/test021.php: SUCCEEDED
    @PHP/doc_examples/test022.php: SUCCEEDED
    @PHP/doc_examples/test023.php: SUCCEEDED
    @PHP/doc_examples/test024.php: SUCCEEDED
    @PHP/doc_examples/test025.php: SUCCEEDED
    @PHP/doc_examples/test026.php: SUCCEEDED
    @PHP/doc_examples/test027.php: SUCCEEDED
    @PHP/doc_examples/test028.php: SUCCEEDED
    @PHP/doc_examples/test029.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ´┐Żauky
    �auky
    @PHP/doc_examples/test030.php: SUCCEEDED
    @PHP/doc_examples/test031.php: SUCCEEDED
    @PHP/doc_examples/test032.php: SUCCEEDED
    @PHP/doc_examples/test033.php: SUCCEEDED
    @PHP/doc_examples/test034.php: SUCCEEDED
    @PHP/doc_examples/test035.php: SUCCEEDED
    @PHP/doc_examples/test036.php: SUCCEEDED
    @PHP/doc_examples/test037.php: SUCCEEDED
    @PHP/doc_examples/test038.php: SUCCEEDED
    @PHP/doc_examples/test039.php: SUCCEEDED
    @PHP/doc_examples/test040.php: SUCCEEDED
    @PHP/doc_examples/test041.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    call_user_func():
    hello world!
    Strict Standards: call_user_func(): Non-static method MyClass::myCallbackMethod() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\doc_examples\__input.txt at expression on line 17, column 1.
    Hello World!Hello World!
    @PHP/doc_examples/test042.php: SUCCEEDED
    @PHP/doc_examples/test043.php: SUCCEEDED
    @PHP/doc_examples/test044.php: SUCCEEDED
    @PHP/doc_examples/test045.php: SUCCEEDED
    @PHP/doc_examples/test046.php: SUCCEEDED
    @PHP/doc_examples/test047.php: SUCCEEDED
    @PHP/doc_examples/test048.php: SUCCEEDED
    @PHP/doc_examples/test049.php: SUCCEEDED
    @PHP/doc_examples/test050.php: SUCCEEDED
    @PHP/doc_examples/test051.php: SUCCEEDED
    @PHP/doc_examples/test052.php: SUCCEEDED
    @PHP/doc_examples/test053.php: SUCCEEDED
    @PHP/doc_examples/test054.php: SUCCEEDED
    @PHP/doc_examples/test055.php: SUCCEEDED
    @PHP/doc_examples/test056.php: SUCCEEDED
    @PHP/doc_examples/test057.php: SUCCEEDED
    @PHP/doc_examples/test058.php: SUCCEEDED
    @PHP/doc_examples/test059.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    Deprecated: Assigning the return value of new by reference is deprecated in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\doc_examples\__input.txt on line 4
    NULL
    object(stdClass)#1 (0) {
    }
    NULL
    object(stdClass)(0) {
    }
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\doc_examples\__input.txt(4,5): warning PHP0181: Assigning the return value of new by reference is deprecated
    
    @PHP/doc_examples/test060.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    Deprecated: Assigning the return value of new by reference is deprecated in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\doc_examples\__input.txt on line 9
    Static object: NULL
    Static object: NULL
    
    Static object: NULL
    Static object: object(stdClass)#3 (1) {
      ["property"]=>
      int(1)
    }
    Static object: NULL
    Static object: NULL
    
    Static object: NULL
    Static object: object(stdClass)(1) {
      ["property"]=>
      int(1)
    }
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\doc_examples\__input.txt(9,9): warning PHP0181: Assigning the return value of new by reference is deprecated
    
    @PHP/doc_examples/test061.php: SUCCEEDED
    @PHP/doc_examples/test062.php: SUCCEEDED
    @PHP/doc_examples/test063.php: SUCCEEDED
    @PHP/doc_examples/test064.php: SUCCEEDED
    @PHP/doc_examples/test065.php: SUCCEEDED
    @PHP/doc_examples/test066.php: SUCCEEDED
    @PHP/doc_examples/test067.php: SUCCEEDED
    @PHP/doc_examples/test068.php: SUCCEEDED
    @PHP/doc_examples/test069.php: SUCCEEDED
    @PHP/doc_examples/test070.php: SUCCEEDED
    @PHP/doc_examples/test071.php: SUCCEEDED
    @PHP/doc_examples/test072.php: SUCCEEDED
    @PHP/doc_examples/test073.php: SUCCEEDED
    @PHP/doc_examples/test074.php: SUCCEEDED
    @PHP/doc_examples/test075.php: SUCCEEDED
    @PHP/doc_examples/test076.php: SUCCEEDED
    @PHP/doc_examples/test077.php: SUCCEEDED
    @PHP/doc_examples/test078.php: SUCCEEDED
    @PHP/doc_examples/test079.php: SUCCEEDED
    @PHP/doc_examples/test080.php: SUCCEEDED
    @PHP/doc_examples/test081.php: SUCCEEDED
    @PHP/doc_examples/test082.php: SUCCEEDED
    @PHP/doc_examples/test083.php: SUCCEEDED
    @PHP/doc_examples/test084.php: SUCCEEDED
    @PHP/doc_examples/test085.php: SUCCEEDED
    @PHP/doc_examples/test086.php: SUCCEEDED
    @PHP/doc_examples/test087.php: SUCCEEDED
    @PHP/doc_examples/test088.php: SUCCEEDED
    @PHP/doc_examples/test089.php: SUCCEEDED
    @PHP/doc_examples/test090.php: SUCCEEDED
    @PHP/doc_examples/test091.php: SUCCEEDED
    @PHP/doc_examples/test092.php: SUCCEEDED
    @PHP/doc_examples/test093.php: SUCCEEDED
    @PHP/doc_examples/test094.php: SUCCEEDED
    @PHP/doc_examples/test095.php: SUCCEEDED
    @PHP/doc_examples/test096.php: SUCCEEDED
    @PHP/doc_examples/test097.php: SUCCEEDED
    @PHP/doc_examples/test098.php: SUCCEEDED
    @PHP/doc_examples/test099.php: SUCCEEDED
    @PHP/doc_examples/test100.php: SUCCEEDED
    @PHP/doc_examples/test102.php: SUCCEEDED
    @PHP/doc_examples/test103.php: SUCCEEDED
    @PHP/doc_examples/test104.php: SUCCEEDED
    @PHP/doc_examples/test105.php: SUCCEEDED
    @PHP/doc_examples/test107.php: SUCCEEDED
    @PHP/doc_examples/test108.php: SUCCEEDED
    @PHP/doc_examples/test109.php: SUCCEEDED
    @PHP/doc_examples/test110.php: SUCCEEDED
    @PHP/doc_examples/test111.php: SUCCEEDED
    @PHP/doc_examples/test112.php: SUCCEEDED
    @PHP/doc_examples/test113.php: SUCCEEDED
    @PHP/doc_examples/test114.php: SUCCEEDED
    @PHP/doc_examples/test115.php: SUCCEEDED
    @PHP/doc_examples/test116.php: SUCCEEDED
    @PHP/doc_examples/test117.php: SUCCEEDED
    @PHP/doc_examples/test118.php: SUCCEEDED
    @PHP/doc_examples/test119.php: SUCCEEDED
    @PHP/doc_examples/test120.php: SUCCEEDED
    @PHP/doc_examples/test121.php: SUCCEEDED
    @PHP/doc_examples/test122.php: SUCCEEDED
    @PHP/doc_examples/test123.php: SUCCEEDED
    @PHP/doc_examples/test124.php: SUCCEEDED
    @PHP/doc_examples/test125.php: SUCCEEDED
    @PHP/doc_examples/test126.php: SUCCEEDED
    @PHP/doc_examples/test127.php: SUCCEEDED
    @PHP/doc_examples/test128.php: SUCCEEDED
    @PHP/doc_examples/test129.php: SUCCEEDED
    @PHP/doc_examples/test130.php: SUCCEEDED
    @PHP/doc_examples/test131.php: SUCCEEDED
    @PHP/doc_examples/test132.php: SUCCEEDED
    @PHP/doc_examples/test133.php: SUCCEEDED
    @PHP/doc_examples/test134.php: SUCCEEDED
    @PHP/doc_examples/test136.php: SUCCEEDED
    @PHP/doc_examples/test137.php: SUCCEEDED
    @PHP/doc_examples/test138.php: SUCCEEDED
    @PHP/doc_examples/test139.php: SUCCEEDED
    @PHP/doc_examples/test148.php: SUCCEEDED
    @PHP/doc_examples/test149.php: SUCCEEDED
    @PHP/doc_examples/test150.php: SUCCEEDED
    @PHP/doc_examples/test151.php: SUCCEEDED
    @PHP/doc_examples/test152.php: SUCCEEDED
    @PHP/doc_examples/test153.php: SUCCEEDED
    @PHP/doc_examples/test154.php: SUCCEEDED
    @PHP/doc_examples/test155.php: SUCCEEDED
    @PHP/doc_examples/test156.php: SUCCEEDED
    @PHP/doc_examples/test158.php: SUCCEEDED
    @PHP/lang/001.php: SUCCEEDED
    @PHP/lang/002.php: SUCCEEDED
    @PHP/lang/003.php: SUCCEEDED
    @PHP/lang/004.php: SUCCEEDED
    @PHP/lang/005.php: SUCCEEDED
    @PHP/lang/006.php: SUCCEEDED
    @PHP/lang/007.php: SUCCEEDED
    @PHP/lang/008.php: SUCCEEDED
    @PHP/lang/009.php: SUCCEEDED
    @PHP/lang/010.php: SUCCEEDED
    @PHP/lang/011.php: SUCCEEDED
    @PHP/lang/012.php: SUCCEEDED
    @PHP/lang/013.php: SUCCEEDED
    @PHP/lang/014.php: SUCCEEDED
    @PHP/lang/015.php: SUCCEEDED
    @PHP/lang/016.php: SUCCEEDED
    @PHP/lang/017.php: SUCCEEDED
    @PHP/lang/018.php: SUCCEEDED
    @PHP/lang/019.php: SUCCEEDED
    @PHP/lang/020.php: SUCCEEDED
    @PHP/lang/021.php: SUCCEEDED
    @PHP/lang/022.php: SUCCEEDED
    @PHP/lang/023.php: SUCCEEDED
    @PHP/lang/024.php: SUCCEEDED
    @PHP/lang/025.php: SUCCEEDED
    @PHP/lang/026.php: SUCCEEDED
    @PHP/lang/027.php: SUCCEEDED
    @PHP/lang/028.php: SUCCEEDED
    @PHP/lang/030.php: SUCCEEDED
    @PHP/lang/032.php: SUCCEEDED
    @PHP/lang/036.php: SUCCEEDED
    @PHP/lang/037.php: SUCCEEDED
    @PHP/lang/038.php: SUCCEEDED
    @PHP/lang/039.php: SUCCEEDED
    @PHP/lang/040.php: SUCCEEDED
    @PHP/lang/bison1.php: SUCCEEDED
    @PHP/lang/bug17115.php: SUCCEEDED
    @PHP/lang/bug18872.php: SUCCEEDED
    @PHP/lang/bug19943.php: SUCCEEDED
    @PHP/lang/bug20175.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    Deprecated: Assigning the return value of new by reference is deprecated in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\lang\__input.txt on line 110
    foo_static()
    foo_global()
    foo:1
    foo_static()
    foo:1
    bar_static()
    bar_global()
    bar:1
    bar_static()
    bar:1
    wow_static()
    wow_global()
    wow:1
    wow_static()
    wow:1
    oop_test()
    oop_static()
    oop_class()
    oop:1
    oop_static()
    oop:1
    oop_test()
    oop_static()
    oop:1
    foo_static()
    foo_global()
    foo:1
    foo_static()
    foo:1
    bar_static()
    bar_global()
    bar:1
    bar_static()
    bar_global()
    bar:2
    wow_static()
    wow_global()
    wow:1
    wow_static()
    wow:1
    oop_test()
    oop_static()
    oop_class()
    oop:1
    oop_static()
    oop:1
    oop_test()
    oop_static()
    oop:1
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\lang\__input.txt(110,4): warning PHP0181: Assigning the return value of new by reference is deprecated
    
    @PHP/lang/bug21094.php: SUCCEEDED
    @PHP/lang/bug21600.php: SUCCEEDED
    @PHP/lang/bug21669.php: SUCCEEDED
    @PHP/lang/bug21849.php: SUCCEEDED
    @PHP/lang/bug21961.php: SUCCEEDED
    @PHP/lang/bug22231.php: SUCCEEDED
    @PHP/lang/bug22367.php: SUCCEEDED
    @PHP/lang/bug22510.php: SUCCEEDED
    @PHP/lang/bug22592.php: SUCCEEDED
    @PHP/lang/bug22690.php: SUCCEEDED
    @PHP/lang/bug23279.php: SUCCEEDED
    @PHP/lang/bug23384.php: SUCCEEDED
    @PHP/lang/bug23489.php: SUCCEEDED
    @PHP/lang/bug23524.php: SUCCEEDED
    @PHP/lang/bug23922.php: SUCCEEDED
    @PHP/lang/bug24054.php: SUCCEEDED
    @PHP/lang/bug24396.php: SUCCEEDED
    @PHP/lang/bug24403.php: SUCCEEDED
    @PHP/lang/bug24436.php: SUCCEEDED
    @PHP/lang/bug24499.php: SUCCEEDED
    @PHP/lang/bug24640.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    double(1700000000000000089258092433847514422797596587883870563356951996370064178581143932836831337636761368874297554515902592900802289500112731978596146714137401870842258241575178866354311397451139753100927220499450359906637902366244989496126909662726242240784739940994096632824796638102733857671280980918272.0000000000)
    1.7E+300
    
    ------
    double(0.0000000000)
    1.7E-300
    
    ------
    double(17000000000000001584208052028780237480128823455860622330108867175329927830437888.0000000000)
    1.7E+79
    
    ------
    double(0.0000000000)
    1.7E-79
    
    ------
    double(169999999999999996096025832433329868941658043870400163508258284150340918121070592.0000000000)
    1.7E+80
    
    ------
    double(0.0000000000)
    1.7E-80
    
    ------
    double(1700000000000000013616404158611892038375594280539217794530130541777964808366194688.0000000000)
    1.7E+81
    
    ------
    double(0.0000000000)
    1.7E-81
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    1.6999810742106E-319
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    1.7000798873397E-320
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    1.6995858216939E-321
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    0
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    0
    
    ------
    double(1700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+300
    
    ------
    double(0.0000000000)
    1.70000000000003E-300
    
    ------
    double(17000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+79
    
    ------
    double(0.0000000000)
    1.70000000000001E-79
    
    ------
    double(170000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+80
    
    ------
    double(0.0000000000)
    1.70000000000001E-80
    
    ------
    double(1700000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+81
    
    ------
    double(0.0000000000)
    1.70000000000001E-81
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    1.69998107421056E-319
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    1.70007988733973E-320
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    1.69464516523548E-321
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    0
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    0
    
    ------
    @PHP/lang/bug24652.php: SUCCEEDED
    @PHP/lang/bug24658.php: SUCCEEDED
    @PHP/lang/bug24783.php: SUCCEEDED
    @PHP/lang/bug24926.php: SUCCEEDED
    @PHP/lang/bug25547.php: SUCCEEDED
    @PHP/lang/bug25652.php: SUCCEEDED
    @PHP/lang/bug25922.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Undefined index here: 'error'
    Undefined index here: ''
    @PHP/lang/bug26182.php: SUCCEEDED
    @PHP/lang/bug26696.php: SUCCEEDED
    @PHP/lang/bug26866.php: SUCCEEDED
    @PHP/lang/bug26869.php: SUCCEEDED
    @PHP/lang/bug27354.php: SUCCEEDED
    @PHP/lang/bug27439.php: SUCCEEDED
    @PHP/lang/bug27535.php: SUCCEEDED
    @PHP/lang/bug28213.php: SUCCEEDED
    @PHP/lang/bug28800.php: SUCCEEDED
    @PHP/lang/bug29566.php: SUCCEEDED
    @PHP/lang/bug29893.php: SUCCEEDED
    @PHP/lang/bug29944.php: SUCCEEDED
    @PHP/lang/bug30638.php: SUCCEEDED
    @PHP/lang/bug30726.php: SUCCEEDED
    @PHP/lang/bug30862.php: SUCCEEDED
    @PHP/lang/bug32924.php: SUCCEEDED
    @PHP/lang/bug35382.php: SUCCEEDED
    @PHP/lang/bug7515.php: SUCCEEDED
    @PHP/lang/each_binary_safety.php: SUCCEEDED
    @PHP/lang/error_2_exception_001.php: SUCCEEDED
    @PHP/lang/foreach_with_object_001.php: SUCCEEDED
    @PHP/lang/foreach_with_references_001.php: SUCCEEDED
    @PHP/lang/type_hints_001.php: SUCCEEDED
    @PHP/standard/array/001.php: SUCCEEDED
    @PHP/standard/array/003.php: SUCCEEDED
    @PHP/standard/array/004.php: SUCCEEDED
    @PHP/standard/array/005.php: SUCCEEDED
    @PHP/standard/array/008.php: SUCCEEDED
    @PHP/standard/array/array_change_key_case.php: SUCCEEDED
    @PHP/standard/array/array_chunk.php: SUCCEEDED
    @PHP/standard/array/array_count_values.php: SUCCEEDED
    @PHP/standard/array/array_diff_1.php: SUCCEEDED
    @PHP/standard/array/array_diff_key.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ------ Test 1 --------
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 2 --------
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 3 --------
    array(6) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [2]=>
      int(4)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [2]=>
      int(4)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 4 --------
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 5 --------
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 6 --------
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 7 --------
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    ------ Test 8 --------
    array(6) {
      [0]=>
      int(0)
      [7]=>
      int(14)
      [2]=>
      int(4)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [0]=>
      int(0)
      [7]=>
      int(14)
      [2]=>
      int(4)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 9 --------
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    ------ Test 1 --------
    array(4) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(4) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 2 --------
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 3 --------
    array(6) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [2]=>
      &int(4)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [2]=>
      &int(4)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 4 --------
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 5 --------
    array(4) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(4) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 6 --------
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 7 --------
    array(3) {
      [7]=>
      &int(14)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
    }
    array(3) {
      [7]=>
      &int(14)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
    }
    ------ Test 8 --------
    array(6) {
      [0]=>
      &int(0)
      [7]=>
      &int(14)
      [2]=>
      &int(4)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [0]=>
      &int(0)
      [7]=>
      &int(14)
      [2]=>
      &int(4)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 9 --------
    array(3) {
      [7]=>
      &int(14)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
    }
    array(3) {
      [7]=>
      &int(14)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
    }
    @PHP/standard/array/array_intersect_key.php: SUCCEEDED
    @PHP/standard/array/array_sum.php: SUCCEEDED
    @PHP/standard/array/array_walk_recursive.php: SUCCEEDED
    @PHP/standard/array/bug12776.php: SUCCEEDED
    @PHP/standard/array/bug14580.php: SUCCEEDED
    @PHP/standard/array/bug20381.php: SUCCEEDED
    @PHP/standard/array/bug20865.php: SUCCEEDED
    @PHP/standard/array/bug21182.php: SUCCEEDED
    @PHP/standard/array/bug21918.php: SUCCEEDED
    @PHP/standard/array/bug21998.php: SUCCEEDED
    @PHP/standard/array/bug22088.php: SUCCEEDED
    @PHP/standard/array/bug22463.php: SUCCEEDED
    @PHP/standard/array/bug23581.php: SUCCEEDED
    @PHP/standard/array/bug23788.php: SUCCEEDED
    @PHP/standard/array/bug24198.php: SUCCEEDED
    @PHP/standard/array/bug24220.php: SUCCEEDED
    @PHP/standard/array/bug24766.php: SUCCEEDED
    @PHP/standard/array/bug24897.php: SUCCEEDED
    @PHP/standard/array/bug24980.php: SUCCEEDED
    @PHP/standard/array/bug25359.php: SUCCEEDED
    @PHP/standard/array/bug25708.php: SUCCEEDED
    @PHP/standard/array/bug25758.php: SUCCEEDED
    @PHP/standard/array/bug26458.php: SUCCEEDED
    @PHP/standard/array/bug28974.php: SUCCEEDED
    @PHP/standard/array/bug29493.php: SUCCEEDED
    @PHP/standard/array/bug30266.php: SUCCEEDED
    @PHP/standard/array/bug30833.php: SUCCEEDED
    @PHP/standard/array/bug31158.php: SUCCEEDED
    @PHP/standard/array/bug31213.php: SUCCEEDED
    @PHP/standard/array/bug32021.php: SUCCEEDED
    @PHP/standard/array/bug33382.php: SUCCEEDED
    @PHP/standard/array/bug33989.php: SUCCEEDED
    @PHP/standard/array/bug34227.php: SUCCEEDED
    @PHP/standard/array/bug34982.php: SUCCEEDED
    @PHP/standard/array/bug35014.php: SUCCEEDED
    @PHP/standard/array/bug35022.php: SUCCEEDED
    @PHP/standard/array/bug35821.php: SUCCEEDED
    @PHP/standard/array/count_recursive.php: SUCCEEDED
    @PHP/standard/array/locale_sort.php: SUCCEEDED
    @PHP/standard/array/range.php: SUCCEEDED
    @PHP/standard/assert/assert.php: SUCCEEDED
    @PHP/standard/general_functions/001.php: SUCCEEDED
    @PHP/standard/general_functions/002.php: SUCCEEDED
    @PHP/standard/general_functions/003.php: SUCCEEDED
    @PHP/standard/general_functions/004.php: SUCCEEDED
    @PHP/standard/general_functions/005.php: SUCCEEDED
    @PHP/standard/general_functions/006.php: SUCCEEDED
    @PHP/standard/general_functions/007.php: SUCCEEDED
    @PHP/standard/general_functions/009.php: SUCCEEDED
    @PHP/standard/general_functions/bug25038.php: SUCCEEDED
    @PHP/standard/general_functions/bug27678.php: SUCCEEDED
    @PHP/standard/general_functions/bug29038.php: SUCCEEDED
    @PHP/standard/general_functions/bug31190.php: SUCCEEDED
    @PHP/standard/general_functions/bug32647.php: SUCCEEDED
    @PHP/standard/general_functions/bug35229.php: SUCCEEDED
    @PHP/standard/general_functions/is_resource.php: SUCCEEDED
    @PHP/standard/math/abs.php: SUCCEEDED
    @PHP/standard/math/bug24142.php: SUCCEEDED
    @PHP/standard/math/bug25694.php: SUCCEEDED
    @PHP/standard/math/bug27646.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    double(INF-INF)
    'd:-INF;'
    double(INF-INF)
    double(INF-INF)
    'd:INF;'
    double(INF-INF)
    double(NaNInfini)
    'd:NAN;'
    double(NaNInfini)
    double(-Infinity)
    'd:-INF;'
    double(-Infinity)
    double(Infinity)
    'd:INF;'
    double(Infinity)
    double(NaN)
    'd:NAN;'
    double(NaN)
    @PHP/standard/math/bug30069.php: SUCCEEDED
    @PHP/standard/math/bug30695.php: SUCCEEDED
    @PHP/standard/math/floorceil.php: SUCCEEDED
    @PHP/standard/math/hexdec.php: SUCCEEDED
    @PHP/standard/math/log.php: SUCCEEDED
    @PHP/standard/math/pow.php: SUCCEEDED
    @PHP/standard/math/round.php: SUCCEEDED
    @PHP/standard/reg/001.php: SUCCEEDED
    @PHP/standard/reg/002.php: SUCCEEDED
    @PHP/standard/reg/003.php: SUCCEEDED
    @PHP/standard/reg/004.php: SUCCEEDED
    @PHP/standard/reg/005.php: SUCCEEDED
    @PHP/standard/reg/006.php: SUCCEEDED
    @PHP/standard/reg/007.php: SUCCEEDED
    @PHP/standard/reg/008.php: SUCCEEDED
    @PHP/standard/reg/009.php: SUCCEEDED
    @PHP/standard/reg/010.php: SUCCEEDED
    @PHP/standard/reg/011.php: SUCCEEDED
    @PHP/standard/reg/012.php: SUCCEEDED
    @PHP/standard/reg/013.php: SUCCEEDED
    @PHP/standard/reg/014.php: SUCCEEDED
    @PHP/standard/reg/015.php: SUCCEEDED
    @PHP/standard/reg/016.php: SUCCEEDED
    @PHP/standard/serialize/001.php: SUCCEEDED
    @PHP/standard/serialize/002.php: SUCCEEDED
    @PHP/standard/serialize/003.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    d:100;
    double(100.0000000000)
    
    d:51999999999999996980101120;
    double(51999999999999996980101120.0000000000)
    
    d:8.9999999999999995265585574287341141808127531476202420890331268310546875E-9;
    double(0.0000000090)
    d:100;
    double(100.0000000000)
    
    d:5.2000000000000006E+25;
    double(52000000000000000000000000.0000000000)
    
    d:9.0000000000000045E-09;
    double(0.0000000090)
    @PHP/standard/serialize/004.php: SUCCEEDED
    @PHP/standard/serialize/005.php: SUCCEEDED
    @PHP/standard/serialize/006.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    'O:3:"´┐Ż":1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    object
    {
      '´┐Ż' => '´┐Ż'
    }
    'a:1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    array
    {
      '´┐Ż' => '´┐Ż'
    }
    'O:3:"´┐Ż":1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    object
    {
      'ďż˝' => '´┐Ż'
    }
    'a:1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    array
    {
      'ďż˝' => '´┐Ż'
    }
    @PHP/standard/serialize/bug14293.php: SUCCEEDED
    @PHP/standard/serialize/bug21957.php: SUCCEEDED
    @PHP/standard/serialize/bug23298.php: SUCCEEDED
    @PHP/standard/serialize/bug24063.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0.1 0.1
    0.01 0.01
    0.001 0.001
    0.0001 0.0001
    1.0E-5 1.0E-5
    1.0E-6 1.0E-6
    1.0E-7 1.0E-7
    1.0E-8 1.0E-8
    1.0E-9 1.0E-9
    0.1 0.1
    0.01 0.01
    0.001 0.001
    0.0001 0.0001
    1E-05 1E-05
    1E-06 1E-06
    1E-07 1E-07
    1E-08 1E-08
    1E-09 1E-09
    @PHP/standard/serialize/bug25378.php: SUCCEEDED
    @PHP/standard/serialize/bug26762.php: SUCCEEDED
    @PHP/standard/serialize/bug27469.php: SUCCEEDED
    @PHP/standard/serialize/bug28325.php: SUCCEEDED
    @PHP/standard/serialize/bug30234.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    FALSE
    FALSE
    __autoload(Autoload_Implements)
    object [invalid]
    FALSE
    FALSE
    FALSE
    FALSE
    TRUE
    __autoload(Autoload_Implements)
    object [invalid]
    FALSE
    FALSE
    TRUE
    @PHP/standard/serialize/bug31402.php: SUCCEEDED
    @PHP/standard/serialize/bug31442.php: SUCCEEDED
    @PHP/standard/strings/add-and-stripcslashes.php: SUCCEEDED
    @PHP/standard/strings/add-and-stripslashes.php: SUCCEEDED
    @PHP/standard/strings/basename.php: SUCCEEDED
    @PHP/standard/strings/bin2hex.php: SUCCEEDED
    @PHP/standard/strings/bug20108.php: SUCCEEDED
    @PHP/standard/strings/bug20169.php: SUCCEEDED
    @PHP/standard/strings/bug20261.php: SUCCEEDED
    @PHP/standard/strings/bug20927.php: SUCCEEDED
    @PHP/standard/strings/bug21338.php: SUCCEEDED
    @PHP/standard/strings/bug21453.php: SUCCEEDED
    @PHP/standard/strings/bug21730.php: SUCCEEDED
    @PHP/standard/strings/bug21744.php: SUCCEEDED
    @PHP/standard/strings/bug22008.php: SUCCEEDED
    @PHP/standard/strings/bug22187.php: SUCCEEDED
    @PHP/standard/strings/bug22224.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      0 => 
      object
      {
      }
      1 => 
      object
      {
      }
    }
    @PHP/standard/strings/bug22227.php: SUCCEEDED
    @PHP/standard/strings/bug22904.php: SUCCEEDED
    @PHP/standard/strings/bug23650.php: SUCCEEDED
    @PHP/standard/strings/bug23894.php: SUCCEEDED
    @PHP/standard/strings/bug24098.php: SUCCEEDED
    @PHP/standard/strings/bug24208.php: SUCCEEDED
    @PHP/standard/strings/bug24281.php: SUCCEEDED
    @PHP/standard/strings/bug25671.php: SUCCEEDED
    @PHP/standard/strings/bug25707.php: SUCCEEDED
    @PHP/standard/strings/bug26878.php: SUCCEEDED
    @PHP/standard/strings/bug26973.php: SUCCEEDED
    @PHP/standard/strings/bug27276.php: SUCCEEDED
    @PHP/standard/strings/bug27278.php: SUCCEEDED
    @PHP/standard/strings/bug27295.php: SUCCEEDED
    @PHP/standard/strings/bug27457.php: SUCCEEDED
    @PHP/standard/strings/bug27675.php: SUCCEEDED
    @PHP/standard/strings/bug28386.php: SUCCEEDED
    @PHP/standard/strings/bug33076.php: SUCCEEDED
    @PHP/standard/strings/chr_ord.php: SUCCEEDED
    @PHP/standard/strings/chunk_split.php: SUCCEEDED
    @PHP/standard/strings/count_chars.php: SUCCEEDED
    @PHP/standard/strings/crc32.php: SUCCEEDED
    @PHP/standard/strings/explode.php: SUCCEEDED
    @PHP/standard/strings/implode.php: SUCCEEDED
    @PHP/standard/strings/md5.php: SUCCEEDED
    @PHP/standard/strings/md5raw.php: SUCCEEDED
    @PHP/standard/strings/nl2br.php: SUCCEEDED
    @PHP/standard/strings/sha1.php: SUCCEEDED
    @PHP/standard/strings/sha1raw.php: SUCCEEDED
    @PHP/standard/strings/sprintf_f.php: SUCCEEDED
    @PHP/standard/strings/strcspn.php: SUCCEEDED
    @PHP/standard/strings/strings001.php: SUCCEEDED
    @PHP/standard/strings/strpos.php: SUCCEEDED
    @PHP/standard/strings/strrev.php: SUCCEEDED
    @PHP/standard/strings/strripos.php: SUCCEEDED
    @PHP/standard/strings/strrpos.php: SUCCEEDED
    @PHP/standard/strings/strspn.php: SUCCEEDED
    @PHP/standard/strings/strstr.php: SUCCEEDED
    @PHP/standard/strings/strtoupper.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    cfbfbdcfbfbdcfbfbd
    cfafbdcfafbdcfafbd
    @PHP/standard/strings/strtr.php: SUCCEEDED
    @PHP/standard/strings/strval.php: SUCCEEDED
    @PHP/standard/strings/str_repeat.php: SUCCEEDED
    @PHP/standard/strings/str_shuffle.php: SUCCEEDED
    @PHP/standard/strings/str_word_count.php: SUCCEEDED
    @PHP/standard/strings/substr_count.php: SUCCEEDED
    @PHP/standard/strings/substr_replace.php: SUCCEEDED
    @PHP/standard/strings/wordwrap.php: SUCCEEDED
    @PHP/standard/time/001.php: SUCCEEDED
    @PHP/standard/time/idate.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    U: 1043324459
    Y: 2003
    z: 22
    y: 3
    m: 1
    n: 1
    d: 23
    j: 23
    H: 13
    G: 13
    h: 1
    g: 1
    i: 20
    s: 59
    t: 31
    w: 4
    L: 0
    B: 556
    I: 0
    W: 4
    U: 1043324459
    Y: 2003
    z: 22
    y: 3
    m: 1
    n: 1
    d: 23
    j: 23
    H: 12
    G: 12
    h: 12
    g: 12
    i: 20
    s: 59
    t: 31
    w: 4
    L: 0
    B: 556
    I: 0
    W: 4
    @PHP/strings/001.php: SUCCEEDED
    @PHP/strings/002.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    fprintf test 1:abcde
    20
    printf test 1:simple string
    printf test 2:42
    printf test 3:3.333333
    printf test 4:3.3333333333
    printf test 5:2.50      
    printf test 6:2.50000000
    printf test 7:0000002.50
    printf test 8:<                 foo>
    printf test 9:<bar                 >
    printf test 10: 123456789012345
    printf test 10:<h´┐Żyesterettsjustitiarius>
    printf test 11: 123456789012345678901234567890
    printf test 11:<    h´┐Żyesterettsjustitiarius>
    printf test 12:-12.34
    printf test 13:  -12
    printf test 14:@
    printf test 15:10101010
    printf test 16:aa
    printf test 17:AA
    printf test 18:        10101010
    printf test 19:              aa
    printf test 20:              AA
    printf test 21:0000000010101010
    printf test 22:00000000000000aa
    printf test 23:00000000000000AA
    printf test 24:abcde
    printf test 25:gazonk
    printf test 26:2 1
    printf test 27:3 1 2
    printf test 28:02  1
    printf test 29:2   1
    printf test 30:x
    vprintf test 1:2   1
    fprintf test 1:abcde
    20
    printf test 1:simple string
    printf test 2:42
    printf test 3:3.333333
    printf test 4:3.3333333333
    printf test 5:2.50      
    printf test 6:2.50000000
    printf test 7:0000002.50
    printf test 8:<                 foo>
    printf test 9:<bar                 >
    printf test 10: 123456789012345
    printf test 10:<h�yesterettsjustitiarius>
    printf test 11: 123456789012345678901234567890
    printf test 11:<    h�yesterettsjustitiarius>
    printf test 12:-12.34
    printf test 13:  -12
    printf test 14:@
    printf test 15:10101010
    printf test 16:aa
    printf test 17:AA
    printf test 18:        10101010
    printf test 19:              aa
    printf test 20:              AA
    printf test 21:0000000010101010
    printf test 22:00000000000000aa
    printf test 23:00000000000000AA
    printf test 24:abcde
    printf test 25:gazonk
    printf test 26:2 1
    printf test 27:3 1 2
    printf test 28:02  1
    printf test 29:2   1
    printf test 30:x
    vprintf test 1:2   1
    @PHP/strings/bug22592.php: SUCCEEDED
    Arrays/array1.php: SUCCEEDED
    Arrays/array_diff_intersect.php: SUCCEEDED
    Arrays/array_diff_intersect2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Strict Standards: array_udiff() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 35
    Array
    (
        [0.5] => cr Object
            (
                [priv_member:cr:private] => 12
            )
    
        [0] => cr Object
            (
                [priv_member:cr:private] => 23
            )
    
    )
    
    Strict Standards: array_udiff_assoc() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 36
    Array
    (
        [0.1] => cr Object
            (
                [priv_member:cr:private] => 9
            )
    
        [0.5] => cr Object
            (
                [priv_member:cr:private] => 12
            )
    
        [0] => cr Object
            (
                [priv_member:cr:private] => 23
            )
    
    )
    
    Strict Standards: array_udiff_uassoc() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 37
    
    Strict Standards: array_udiff_uassoc() expects parameter 4 to be a valid callback, non-static method cr::comp_func_key() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 37
    Array
    (
        [0.1] => cr Object
            (
                [priv_member:cr:private] => 9
            )
    
        [0.5] => cr Object
            (
                [priv_member:cr:private] => 12
            )
    
        [0] => cr Object
            (
                [priv_member:cr:private] => 23
            )
    
    )
    Array
    (
        [b] => brown
        [c] => blue
        [0] => red
    )
    ------------------------------------
    
    Strict Standards: array_uintersect() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 40
    Array
    (
        [0.1] => cr Object
            (
                [priv_member:cr:private] => 9
            )
    
        [1] => cr Object
            (
                [priv_member:cr:private] => 4
            )
    
        [2] => cr Object
            (
                [priv_member:cr:private] => -15
            )
    
    )
    
    Strict Standards: array_uintersect_assoc() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 41
    Array
    (
        [1] => cr Object
            (
                [priv_member:cr:private] => 4
            )
    
        [2] => cr Object
            (
                [priv_member:cr:private] => -15
            )
    
    )
    
    Strict Standards: array_uintersect_uassoc() expects parameter 3 to be a valid callback, non-static method cr::comp_func_cr() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 42
    
    Strict Standards: array_uintersect_uassoc() expects parameter 4 to be a valid callback, non-static method cr::comp_func_key() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 42
    Array
    (
        [1] => cr Object
            (
                [priv_member:cr:private] => 4
            )
    
        [2] => cr Object
            (
                [priv_member:cr:private] => -15
            )
    
    )
    Array
    (
        [a] => green
    )
    Array
    (
        [0.5] => cr Object
        (
            [priv_member:private] => 12
        )
    
        [0] => cr Object
        (
            [priv_member:private] => 23
        )
    
    )
    Array
    (
        [0.1] => cr Object
        (
            [priv_member:private] => 9
        )
    
        [0.5] => cr Object
        (
            [priv_member:private] => 12
        )
    
        [0] => cr Object
        (
            [priv_member:private] => 23
        )
    
    )
    Array
    (
        [0.1] => cr Object
        (
            [priv_member:private] => 9
        )
    
        [0.5] => cr Object
        (
            [priv_member:private] => 12
        )
    
        [0] => cr Object
        (
            [priv_member:private] => 23
        )
    
    )
    Array
    (
        [b] => brown
        [c] => blue
        [0] => red
    )
    ------------------------------------
    Array
    (
        [0.1] => cr Object
        (
            [priv_member:private] => 9
        )
    
        [1] => cr Object
        (
            [priv_member:private] => 4
        )
    
        [2] => cr Object
        (
            [priv_member:private] => -15
        )
    
    )
    Array
    (
        [1] => cr Object
        (
            [priv_member:private] => 4
        )
    
        [2] => cr Object
        (
            [priv_member:private] => -15
        )
    
    )
    Array
    (
        [1] => cr Object
        (
            [priv_member:private] => 4
        )
    
        [2] => cr Object
        (
            [priv_member:private] => -15
        )
    
    )
    Array
    (
        [a] => green
    )
    Arrays/array_diff_intersect3.php: SUCCEEDED
    Arrays/array_filter%20false%20entries%20%2322016.php: SUCCEEDED
    Arrays/array_instantiated.php: SUCCEEDED
    Arrays/array_map.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Array
    (
        [0] => Array
            (
                [0] => 1
                [1] => A
                [2] => 0
            )
    
        [1] => Array
            (
                [0] => 2
                [1] => B
                [2] => 0
            )
    
        [2] => Array
            (
                [0] => 3
                [1] => C
                [2] => 
            )
    
    )
    Array
    (
        [0] => 1 A 0
        [1] => 2 B 0
        [2] => 3 C 
    )
    Array
    (
        [A] => 2
        [10] => 3
    )
    Array
    (
        [0] => 1
        [1] => 2
        [2] => 3
    )
    Array
    (
        [0] => A
        [1] => B
        [2] => C
    )
    Array
    (
        [0] => 0
        [1] => 0
    )
    Array
    (
        [A] => 1
        [10] => 2
    )
    Array
    (
        [0] => Array
        (
            [0] => 1
            [1] => A
            [2] => 0
        )
    
        [1] => Array
        (
            [0] => 2
            [1] => B
            [2] => 0
        )
    
        [2] => Array
        (
            [0] => 3
            [1] => C
            [2] => 
        )
    
    )
    Array
    (
        [0] => 1 A 0
        [1] => 2 B 0
        [2] => 3 C 
    )
    Array
    (
        [A] => 2
        [10] => 3
    )
    Array
    (
        [0] => 1
        [1] => 2
        [2] => 3
    )
    Array
    (
        [0] => A
        [1] => B
        [2] => C
    )
    Array
    (
        [0] => x
        [1] => x
    )
    Array
    (
        [A] => 1
        [10] => 2
    )
    Arrays/array_merge_recursive.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Array
    (
        [color] => Array
            (
                [favorite] => Array
                    (
                        [0] => red
                        [1] => green
                    )
    
                [0] => blue
            )
    
        [0] => Array
            (
                [0] => 1
                [1] => 2
                [2] => 3
            )
    
        [q] => Array
            (
                [0] => 
                [1] => 
                [2] => x
            )
    
        [1] => 10
        [2] => Array
            (
                [0] => 4
                [1] => 5
                [2] => 6
            )
    
    )
    Array
    (
        [a] => Array
            (
                [0] => 1
                [1] => 2
                [2] => 3
                [3] => e
            )
    
    )
    Array
    (
        [a] => Array
            (
                [0] => 1
                [1] => 2
                [2] => 3
                [3] => e
            )
    
    )
    Array
    (
        [a] => 1
        [b] => 2
    )
    Array
    (
        [a] => xxx
        [b] => 2
    )
    Array
    (
        [a] => Array
            (
                [a] => Array
                    (
                        [a] => Array
     *RECURSION*
                    )
    
                [0] => 1
                [1] => 2
                [2] => 3
            )
    
    )
    Array
    (
        [a] => Array
            (
                [b] => Array
                    (
                        [0] => 1
                        [1] => 1
                    )
    
                [c] => 1
                [d] => Array
                    (
                        [0] => 2
                        [1] => 3
                    )
    
            )
    
    )
    Array
    (
        [a] => Array
            (
                [0] => 
                [1] => 
            )
    
    )
    Array
    (
        [a] => Array
            (
                [0] => 
                [1] => 
            )
    
    )
    Array
    (
        [color] => Array
        (
            [favorite] => Array
            (
                [0] => red
                [1] => green
            )
    
            [0] => blue
        )
    
        [0] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
        )
    
        [q] => Array
        (
            [0] => x
        )
    
        [1] => 10
        [2] => Array
        (
            [0] => 4
            [1] => 5
            [2] => 6
        )
    
    )
    Array
    (
        [a] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
            [3] => e
        )
    
    )
    Array
    (
        [a] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
            [3] => e
        )
    
    )
    Array
    (
        [a] => 1
        [b] => 2
    )
    Array
    (
        [a] => xxx
        [b] => 2
    )
    Array
    (
        [a] => Array
        (
            [a] => Array
            (
                [a] => Array [recursion]
    
    
            )
    
            [0] => 1
            [1] => 2
            [2] => 3
        )
    
    )
    Array
    (
        [a] => Array
        (
            [b] => Array
            (
                [0] => 1
                [1] => 1
            )
    
            [c] => 1
            [d] => Array
            (
                [0] => 2
                [1] => 3
            )
    
        )
    
    )
    Array
    (
        [a] => Array
        (
        )
    
    )
    Array
    (
        [a] => Array
        (
        )
    
    )
    Arrays/array_op.php: SUCCEEDED
    Arrays/array_reduce1.php: SUCCEEDED
    Arrays/array_reduce2.php: SUCCEEDED
    Arrays/array_slice.php: SUCCEEDED
    Arrays/array_sumprod.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    float(8.3)
    float(0)
    int(6)
    int(6)
    float(4294967297)
    float(9.2233720282648E+18)
    bool(true)
    bool(false)
    float(-7.7)
    float(-38.4)
    int(6)
    int(6)
    int64(4294967297)
    int64(9223372028264841218)
    bool(true)
    bool(true)
    Arrays/array_unset_add.php: SUCCEEDED
    Arrays/array_unshift.php: SUCCEEDED
    Arrays/array_walk.php: SUCCEEDED
    Arrays/array_walk_recursive.php: SUCCEEDED
    Arrays/multisort.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    bool(true)
    Array
    (
        [0] => Array
            (
                [0] => 2
                [1] => 8
                [2] => 2
                [3] => 2
                [4] => 8
                [5] => 8
            )
    
        [1] => Array
            (
                [0] => 7
                [1] => 2
                [2] => 7
                [3] => 4
                [4] => 8
                [5] => 1
            )
    
        [2] => Array
            (
                [0] => 1
                [1] => 4
                [2] => 8
                [3] => 0
                [4] => 6
                [5] => 2
            )
    
        [3] => Array
            (
                [0] => 8
                [1] => 4
                [2] => 1
                [3] => 0
                [4] => 7
                [5] => 1
            )
    
        [4] => Array
            (
                [0] => 20
                [1] => 2
                [2] => 12
                [3] => 11
                [4] => 10
                [5] => 1
            )
    
    )
    Array
    (
        [0] => Array
            (
                [0] => 10
                [1] => 100
                [2] => 100
                [3] => a
            )
    
        [1] => Array
            (
                [0] => 1
                [1] => 3
                [2] => 2
                [3] => 1
            )
    
    )
    Array
    (
        [0] => 10
        [1] => a
        [2] => 100
        [3] => 100
    )
    Array
    (
        [0] => 1
        [1] => 1
        [2] => 2
        [3] => 3
    )
    bool(true)
    Array
    (
        [0] => Array
        (
            [0] => 2
            [1] => 8
            [2] => 2
            [3] => 2
            [4] => 8
            [5] => 8
        )
    
        [1] => Array
        (
            [0] => 7
            [1] => 2
            [2] => 7
            [3] => 4
            [4] => 8
            [5] => 1
        )
    
        [2] => Array
        (
            [0] => 1
            [1] => 4
            [2] => 8
            [3] => 0
            [4] => 6
            [5] => 2
        )
    
        [3] => Array
        (
            [0] => 8
            [1] => 4
            [2] => 1
            [3] => 0
            [4] => 7
            [5] => 1
        )
    
        [4] => Array
        (
            [0] => 20
            [1] => 2
            [2] => 12
            [3] => 11
            [4] => 10
            [5] => 1
        )
    
    )
    Array
    (
        [0] => Array
        (
            [0] => 10
            [1] => 100
            [2] => 100
            [3] => a
        )
    
        [1] => Array
        (
            [0] => 1
            [1] => 3
            [2] => 2
            [3] => 1
        )
    
    )
    Array
    (
        [0] => 10
        [1] => a
        [2] => 100
        [3] => 100
    )
    Array
    (
        [0] => 1
        [1] => 1
        [2] => 2
        [3] => 3
    )
    Arrays/multisort_empty.php: SUCCEEDED
    Arrays/nonarray%20access%20%2322019.php: SUCCEEDED
    Arrays/optimizations.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    3
    4
    5
    a
    b
    c
    
    Warning: strtolower() expects parameter 1 to be string, array given in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 15
    
    cablo
    3
    4
    5
    a
    b
    c
    array
    cablo
    Arrays/recursion.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    f1:
    array(2) {
      ["a"]=>
      array(5) {
        ["a"]=>
        &array(3) {
          ["a"]=>
          &array(3) {
            ["a"]=>
            *RECURSION*
            [0]=>
            string(1) "y"
            [1]=>
            string(1) "z"
          }
          [0]=>
          string(1) "y"
          [1]=>
          string(1) "z"
        }
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        string(1) "x"
      }
      [0]=>
      string(1) "w"
    }
    f2:
    array(1) {
      ["A"]=>
      &array(2) {
        ["a"]=>
        &array(2) {
          ["a"]=>
          *RECURSION*
          [0]=>
          string(1) "z"
        }
        [0]=>
        string(1) "z"
      }
    }
    f3:
    array(2) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) {
          [0]=>
          *RECURSION*
          [1]=>
          string(1) "z"
        }
        [1]=>
        string(1) "z"
      }
      [1]=>
      string(1) "z"
    }
    f4:
    
    Warning: array_merge_recursive(): recursion detected in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 37
    array(1) {
      ["a"]=>
      &array(3) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
      }
    }
    f5:
    array(1) {
      ["a"]=>
      array(6) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        int(1)
        [4]=>
        int(2)
        [5]=>
        int(3)
      }
    }
    f6:
    array(1) {
      ["a"]=>
      array(2) {
        [0]=>
        string(2) "xx"
        [1]=>
        int(2)
      }
    }
    f7:
    array(1) {
      ["a"]=>
      array(1) {
        ["a"]=>
        array(1) {
          ["a"]=>
          &array(1) {
            ["a"]=>
            &array(1) {
              ["a"]=>
              *RECURSION*
            }
          }
        }
      }
    }
    f1:
    array(2) {
      ["a"]=>
      array(5) {
        ["a"]=>
        &array(3) {
          ["a"]=>
          &array(3) [recursion]
          [0]=>
          string(1) "y"
          [1]=>
          string(1) "z"
        }
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        string(1) "x"
      }
      [0]=>
      string(1) "w"
    }
    f2:
    array(1) {
      ["A"]=>
      &array(2) {
        ["a"]=>
        &array(2) [recursion]
        [0]=>
        string(1) "z"
      }
    }
    f3:
    array(2) {
      [0]=>
      &array(2) [recursion]
      [1]=>
      string(1) "z"
    }
    f4:
    array(1) {
      ["a"]=>
      array(6) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        int(1)
        [4]=>
        int(2)
        [5]=>
        int(3)
      }
    }
    f5:
    array(1) {
      ["a"]=>
      array(6) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        int(1)
        [4]=>
        int(2)
        [5]=>
        int(3)
      }
    }
    f6:
    array(1) {
      ["a"]=>
      array(2) {
        [0]=>
        string(2) "xx"
        [1]=>
        int(2)
      }
    }
    f7:
    array(1) {
      ["a"]=>
      &array(1) {
        ["a"]=>
        &array(1) [recursion]
      }
    }
    Arrays/sort.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    sort regular:
    Array
    (
        [0] => 0
        [1] => 1
        [2] => 1
        [3] => 8
        [4] => 0x10
        [5] => 10x
        [6] => 20x
        [7] => ach0
        [8] => add1
        [9] => x10
        [10] => x2
    )
    
    sort numeric:
    Array
    (
        [0] => add1
        [1] => x2
        [2] => 0x10
        [3] => ach0
        [4] => 0
        [5] => x10
        [6] => 1
        [7] => 1
        [8] => 8
        [9] => 10x
        [10] => 20x
    )
    
    sort string:
    Array
    (
        [0] => 0
        [1] => 0x10
        [2] => 1
        [3] => 1
        [4] => 10x
        [5] => 20x
        [6] => 8
        [7] => ach0
        [8] => add1
        [9] => x10
        [10] => x2
    )
    
    sort locale:
    Array
    (
        [0] => 0
        [1] => 0x10
        [2] => 1
        [3] => 1
        [4] => 10x
        [5] => 20x
        [6] => 8
        [7] => ach0
        [8] => add1
        [9] => x10
        [10] => x2
    )
    
    ksort regular:
    Array
    (
        [x] => 8
        [z] => 1
        [0] => x10
        [1] => 10x
        [2b] => 1
        [2] => 20x
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [10a] => 0
    )
    
    ksort numeric:
    Array
    (
        [x] => 8
        [z] => 1
        [0] => x10
        [1] => 10x
        [2b] => 1
        [2] => 20x
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [10a] => 0
    )
    
    ksort string:
    Array
    (
        [0] => x10
        [1] => 10x
        [10a] => 0
        [2] => 20x
        [2b] => 1
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [x] => 8
        [z] => 1
    )
    
    ksort locale:
    Array
    (
        [0] => x10
        [1] => 10x
        [10a] => 0
        [2] => 20x
        [2b] => 1
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [x] => 8
        [z] => 1
    )
    
    asort regular:
    Array
    (
        [10a] => 0
        [2b] => 1
        [z] => 1
        [x] => 8
        [4] => 0x10
        [1] => 10x
        [2] => 20x
        [5] => ach0
        [6] => add1
        [0] => x10
        [3] => x2
    )
    
    asort numeric:
    Array
    (
        [6] => add1
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [10a] => 0
        [0] => x10
        [z] => 1
        [2b] => 1
        [x] => 8
        [1] => 10x
        [2] => 20x
    )
    
    asort string:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [z] => 1
        [2b] => 1
        [1] => 10x
        [2] => 20x
        [x] => 8
        [5] => ach0
        [6] => add1
        [0] => x10
        [3] => x2
    )
    
    asort locale:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [z] => 1
        [2b] => 1
        [1] => 10x
        [2] => 20x
        [x] => 8
        [5] => ach0
        [6] => add1
        [0] => x10
        [3] => x2
    )
    
    rsort regular:
    Array
    (
        [0] => x2
        [1] => x10
        [2] => add1
        [3] => ach0
        [4] => 20x
        [5] => 10x
        [6] => 0x10
        [7] => 8
        [8] => 1
        [9] => 1
        [10] => 0
    )
    
    rsort numeric:
    Array
    (
        [0] => 20x
        [1] => 10x
        [2] => 8
        [3] => 1
        [4] => 1
        [5] => ach0
        [6] => add1
        [7] => 0x10
        [8] => x2
        [9] => x10
        [10] => 0
    )
    
    rsort string:
    Array
    (
        [0] => x2
        [1] => x10
        [2] => add1
        [3] => ach0
        [4] => 8
        [5] => 20x
        [6] => 10x
        [7] => 1
        [8] => 1
        [9] => 0x10
        [10] => 0
    )
    
    rsort locale:
    Array
    (
        [0] => x2
        [1] => x10
        [2] => add1
        [3] => ach0
        [4] => 8
        [5] => 20x
        [6] => 10x
        [7] => 1
        [8] => 1
        [9] => 0x10
        [10] => 0
    )
    
    natsort:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [2b] => 1
        [z] => 1
        [x] => 8
        [1] => 10x
        [2] => 20x
        [5] => ach0
        [6] => add1
        [3] => x2
        [0] => x10
    )
    sort regular:
    Array
    (
        [0] => 0x10
        [1] => 10x
        [2] => 20x
        [3] => ach0
        [4] => add1
        [5] => x10
        [6] => 0
        [7] => x2
        [8] => 1
        [9] => 1
        [10] => 8
    )
    
    sort numeric:
    Array
    (
        [0] => x10
        [1] => 0
        [2] => x2
        [3] => ach0
        [4] => add1
        [5] => 1
        [6] => 1
        [7] => 8
        [8] => 10x
        [9] => 0x10
        [10] => 20x
    )
    
    sort string:
    Array
    (
        [0] => 0
        [1] => 0x10
        [2] => 1
        [3] => 1
        [4] => 10x
        [5] => 20x
        [6] => 8
        [7] => ach0
        [8] => add1
        [9] => x10
        [10] => x2
    )
    
    sort locale:
    Array
    (
        [0] => 0
        [1] => 0x10
        [2] => 1
        [3] => 1
        [4] => 10x
        [5] => 20x
        [6] => 8
        [7] => add1
        [8] => ach0
        [9] => x10
        [10] => x2
    )
    
    ksort regular:
    Array
    (
        [x] => 8
        [z] => 1
        [0] => x10
        [1] => 10x
        [2] => 20x
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [10a] => 0
        [2b] => 1
    )
    
    ksort numeric:
    Array
    (
        [x] => 8
        [z] => 1
        [0] => x10
        [1] => 10x
        [2b] => 1
        [2] => 20x
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [10a] => 0
    )
    
    ksort string:
    Array
    (
        [0] => x10
        [1] => 10x
        [10a] => 0
        [2] => 20x
        [2b] => 1
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [x] => 8
        [z] => 1
    )
    
    ksort locale:
    Array
    (
        [0] => x10
        [1] => 10x
        [10a] => 0
        [2] => 20x
        [2b] => 1
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [x] => 8
        [z] => 1
    )
    
    asort regular:
    Array
    (
        [4] => 0x10
        [1] => 10x
        [2] => 20x
        [5] => ach0
        [6] => add1
        [0] => x10
        [10a] => 0
        [3] => x2
        [z] => 1
        [2b] => 1
        [x] => 8
    )
    
    asort numeric:
    Array
    (
        [0] => x10
        [10a] => 0
        [3] => x2
        [5] => ach0
        [6] => add1
        [z] => 1
        [2b] => 1
        [x] => 8
        [1] => 10x
        [4] => 0x10
        [2] => 20x
    )
    
    asort string:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [z] => 1
        [2b] => 1
        [1] => 10x
        [2] => 20x
        [x] => 8
        [5] => ach0
        [6] => add1
        [0] => x10
        [3] => x2
    )
    
    asort locale:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [z] => 1
        [2b] => 1
        [1] => 10x
        [2] => 20x
        [x] => 8
        [6] => add1
        [5] => ach0
        [0] => x10
        [3] => x2
    )
    
    rsort regular:
    Array
    (
        [0] => 8
        [1] => 1
        [2] => 1
        [3] => x2
        [4] => x10
        [5] => 0
        [6] => add1
        [7] => ach0
        [8] => 20x
        [9] => 10x
        [10] => 0x10
    )
    
    rsort numeric:
    Array
    (
        [0] => 20x
        [1] => 0x10
        [2] => 10x
        [3] => 8
        [4] => 1
        [5] => 1
        [6] => x10
        [7] => 0
        [8] => x2
        [9] => ach0
        [10] => add1
    )
    
    rsort string:
    Array
    (
        [0] => x2
        [1] => x10
        [2] => add1
        [3] => ach0
        [4] => 8
        [5] => 20x
        [6] => 10x
        [7] => 1
        [8] => 1
        [9] => 0x10
        [10] => 0
    )
    
    rsort locale:
    Array
    (
        [0] => x2
        [1] => x10
        [2] => ach0
        [3] => add1
        [4] => 8
        [5] => 20x
        [6] => 10x
        [7] => 1
        [8] => 1
        [9] => 0x10
        [10] => 0
    )
    
    natsort:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [z] => 1
        [2b] => 1
        [x] => 8
        [1] => 10x
        [2] => 20x
        [5] => ach0
        [6] => add1
        [3] => x2
        [0] => x10
    )
    Arrays/usort.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    Array
    (
        [0] => 10
        [1] => 9
        [2] => 8
        [3] => 7
        [4] => 6
        [5] => 5
        [6] => 4
        [7] => 3
        [8] => 2
        [9] => 1
    )
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Array
    (
        [0] => 10
        [1] => 9
        [2] => 8
        [3] => 7
        [4] => 6
        [5] => 5
        [6] => 4
        [7] => 3
        [8] => 2
        [9] => 1
    )
    Arrays/lazy_copy/001.php: SUCCEEDED
    Arrays/lazy_copy/002.php: SUCCEEDED
    Arrays/lazy_copy/003.php: SUCCEEDED
    Arrays/lazy_copy/004.php: SUCCEEDED
    Arrays/lazy_copy/005.php: SUCCEEDED
    Arrays/lazy_copy/006.php: SUCCEEDED
    Bugs/class_incompletepart.php: SUCCEEDED
    Bugs/division-by-zero.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    DIVISION
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 6
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 8
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 10
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 12
    bool(false)
    MODULO
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 16
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 18
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 20
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 22
    bool(false)
    DIVISION
    bool(false)
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt at expression on line 10, column 2.
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt at expression on line 12, column 2.
    bool(false)
    MODULO
    bool(false)
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt at expression on line 20, column 2.
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt at expression on line 22, column 2.
    bool(false)
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt(6,10): warning PHP0150: Division by zero
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt(8,9): warning PHP0150: Division by zero
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt(16,10): warning PHP0150: Division by zero
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt(18,9): warning PHP0150: Division by zero
    
    Bugs/function-in-unknown-class.php: SUCCEEDED
    Bugs/if_if.php: SUCCEEDED
    Bugs/is_a_null_value.php: SUCCEEDED
    Bugs/obj_instantiated.php: SUCCEEDED
    Bugs/preg-named-groups.php: SUCCEEDED
    Bugs/preg-replace-advanced.php: SUCCEEDED
    Bugs/preg-replace-range.php: SUCCEEDED
    Bugs/preg-replace.php: SUCCEEDED
    Bugs/preg-this-dynamic.php: FAILED
    Script hung upNo errorsSuccess
    Expected test outputReal script output
    Unhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---> PHP.Core.Debug+AssertException: Assertion failed: 
       at PHP.Core.Debug.Fail(String message)
       at PHP.Core.Debug.Assert(Boolean condition)
       at PHP.Core.RelativePath.ParseCanonical(String relativePath)
       at PHP.Core.Emit.TransientAssemblyBuilder.Build(String sourceCode, SourceCodeDescriptor descriptor, EvalKinds kind, CompilationContext context, ScriptContext scriptContext, DTypeDesc referringType, NamingContext namingContext, Boolean completeSource)
       at PHP.Core.DynamicCode.EvalInternal(String prefix, String code, String suffix, EvalKinds kind, ScriptContext scriptContext, Dictionary`2 localVariables, DObject self, DTypeDesc referringType, SourceCodeDescriptor descriptor, Boolean entireFile, NamingContext namingContext)
       at PHP.Core.DynamicCode.Eval(String code, Boolean synthetic, ScriptContext context, Dictionary`2 definedVariables, DObject self, DTypeDesc referringType, String callerRelativeSourcePath, Int32 line, Int32 column, Int32 containerId, NamingContext namingContext)
       at PHP.Library.PerlRegExp.Evaluator.ReplaceCodeExecute(Match m)
       at System.Text.RegularExpressions.RegexReplacement.Replace(MatchEvaluator evaluator, Regex regex, String input, Int32 count, Int32 startat)
       at System.Text.RegularExpressions.Regex.Replace(String input, MatchEvaluator evaluator, Int32 count)
       at PHP.Library.PerlRegExp.ReplaceInternal(DObject self, Dictionary`2 definedVariables, PerlRegExpConverter converter, PhpCallback callback, String str, Int32 limit, SourceCodeDescriptor sourceCodeDesc, Int32& count)
       at PHP.Library.PerlRegExp.SimpleReplace(DObject self, Dictionary`2 definedVariables, Object pattern, String replacement, PhpCallback callback, Object data, Int32 limit, SourceCodeDescriptor descriptor, Int32& count)
       at PHP.Library.PerlRegExp.Replace(ScriptContext context, DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, PhpCallback callback, Object data, Int32 limit, Int32& count)
       at PHP.Library.PerlRegExp.Replace(ScriptContext context, DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, Object data)
       at PHP.Dynamic.PhpNetClassLibrary.preg_replace(Object , PhpStack )
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.CallInternal(Dictionary`2 localVariables, NamingContext namingContext, Object name, String fallbackName, DRoutineDesc& routineHint, ScriptContext context)
       at PHP.Core.ScriptContext.CallVoid(Dictionary`2 localVariables, NamingContext namingContext, Object name, String fallbackName, DRoutineDesc& routineHint, ScriptContext context)
       at <__input.txt>.a.a(ScriptContext ) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt:line 17
       at <__input.txt>.a.<Mediator>(ScriptContext )
       at <__input.txt>.a.a(Object instance, PhpStack stack)
       at <__input.txt>.<Script>.<Main>(ScriptContext <context>, Dictionary`2 <locals>, DObject <self>, DTypeDesc <includer>, Boolean <request>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt:line 19
       at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)
       at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)
       --- End of inner exception stack trace ---
       at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)
       at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)
       at <Global>.Run(String[] )
    
    Bugs/preg-this-dynamic2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    foo: ahoj
    foo: lidi
    foo: rozkladame
    foo: ahoj
    foo: lidi
    foo: rozkladame
    foo: ahoj
    foo: lidi
    foo: rozkladame
    
    Notice: Undefined variable: this.
    
    Error: Call to a member function foo() on a non-object.
    Bugs/preg-this.php: SUCCEEDED
    Bugs/preg-ungreedy-bugs.php: SUCCEEDED
    Bugs/preg-unkn.php: SUCCEEDED
    Bugs/trigger_error%20line%20number%20%232787.php: SUCCEEDED
    CLR/BaseTypes.php: SUCCEEDED
    CLR/ClrEvent.php: SUCCEEDED
    CLR/ConditionalDecls.php: SUCCEEDED
    CLR/ConditionalDecls2.php: SUCCEEDED
    CLR/foreach.php: SUCCEEDED
    CLR/handle_enum.php: SUCCEEDED
    CLR/Inheritance1.php: FAILED
    Phalanger misbehaviour while compiling [file] sectionSee belowSuccess
    Expected test outputReal script output
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(3,2): error PHP2031: Circular interface inheritance dependency involving 'I4' and 'I1'
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(6,2): (related location)
    
    CLR/Inheritance2.php: FAILED
    Phalanger misbehaviour while compiling [file] sectionSee belowSuccess
    Expected test outputReal script output
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(3,2): error PHP2031: Circular interface inheritance dependency involving 'J4' and 'J1'
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(6,2): (related location)
    
    CLR/Inheritance3.php: FAILED
    Phalanger misbehaviour while compiling [file] sectionSee belowSuccess
    Expected test outputReal script output
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(3,2): error PHP2031: Circular interface inheritance dependency involving 'J5' and 'J5'
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(3,2): (related location)
    
    CLR/Inheritance4.php: FAILED
    Phalanger misbehaviour while compiling [file] sectionSee belowSuccess
    Expected test outputReal script output
    error PHP2007: Internal error! 
    Please, report this bug via http://www.codeplex.com/WorkItem/List.aspx?ProjectName=Phalanger.
    Additional information: 
    Could not load type '<__input.txt>.J`1' from assembly 'Inheritance4_file, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' because it has recursive generic definition.
       at System.Reflection.Emit.TypeBuilder.TermCreateClass(RuntimeModule module, Int32 tk, ObjectHandleOnStack type)
       at System.Reflection.Emit.TypeBuilder.CreateTypeNoLock()
       at System.Reflection.Emit.TypeBuilder.CreateType()
       at PHP.Core.Reflection.PhpType.Bake()
       at PHP.Core.Reflection.ScriptCompilationUnit.Bake()
       at PHP.Core.Reflection.InclusionGraphBuilder.EmitAllUnits(CodeGenerator codeGenerator)
       at PHP.Core.Emit.ScriptAssemblyBuilder.CompileScripts(IEnumerable`1 sourceFiles, String duckPath, String duckNamespace, CompilationContext context)
       at PHP.Core.Emit.ScriptAssemblyBuilder.Build(IEnumerable`1 sourceFiles, CompilationContext context)
       at PHP.Core.ApplicationCompiler.Compile(ApplicationContext applicationContext, CompilerConfiguration config, ErrorSink errorSink, CompilationParameters ps)
    
    
    CLR/Inheritance5.php: SUCCEEDED
    CLR/Inheritance6.php: SUCCEEDED
    CLR/Inheritance7.php: SUCCEEDED
    CLR/Inheritance8.php: SUCCEEDED
    CLR/Inheritance9.php: FAILED
    Phalanger misbehaviour while compiling [file] sectionSee belowSuccess
    Expected test outputReal script output
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(14,2): error PHP1018: Class 'D' doesn't implement abstract method I::f()
    
    CLR/Lambdas.php: FAILED
    Phalanger misbehaviour while compiling [file] sectionSee belowCompile error
    Expected test outputReal script output
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(5,34): error PHP2014: Syntax error: unexpected token '::'
    
    CLR/NameResolving.php: SUCCEEDED
    Compiler/abstracts.php: SUCCEEDED
    Compiler/aliased%20assign%20add.php: SUCCEEDED
    Compiler/assignments.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ---1---1float(-1.5)
    float(2.5)
    float(0.83333333333333)
    int(6)
    int(8)
    ---2---2float(8.8333333333333)
    float(8.8333333333333)
    float(8.8333333333333)
    int(8)
    int(8)
    ---3---3---4---4---5---5array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [1]=>
      array(1) {
        [2]=>
        array(1) {
          [3]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    ---6---6array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "u"
    }
    array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "v"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    ---7---7array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    ---8---8
    ---1---1float(-1.5)
    float(2.5)
    float(0.833333333333333)
    int(6)
    int(8)
    ---2---2float(8.83333333333333)
    float(8.83333333333333)
    float(8.83333333333333)
    int(8)
    int(8)
    ---3---3---4---4---5---5array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [1]=>
      array(1) {
        [2]=>
        array(1) {
          [3]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    ---6---6array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "u"
    }
    array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "v"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    ---7---7array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    ---8---8
    Compiler/assign_in_call.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    g1:
    f(x)
    u(x)
    'x'
    
    g2:
    f(x)
    u(x)
    'b'
    
    g3:
    f(x)
    u(x)
    'b'
    
    g4:
    f(x)
    u(x)
    'b'
    
    g5:
    f()
    u()
    integer(1)
    
    g6:
    f(3)
    u(3)
    integer(3)
    
    g7:
    f(2)
    u(10)
    integer(10)
    
    g8:
    f(1)
    f(1)
    f(1)
    u(1)
    u()
    u(1)
    
    g9:
    known:
    __get(p) = 0
    __set(p,1)
    f(1)
    unknown:
    __get(p) = 1
    __set(p,3)
    u(3)
    
    g10:
    Done.
    g1:
    f(x)
    u(x)
    'x'
    
    g2:
    f(x)
    u(x)
    'b'
    
    g3:
    f(x)
    u(x)
    'b'
    
    g4:
    f(x)
    u(x)
    'b'
    
    g5:
    f()
    u()
    integer(1)
    
    g6:
    f(3)
    u(3)
    integer(3)
    
    g7:
    f(2)
    u(10)
    integer(10)
    
    g8:
    f(1)
    f(1)
    f(1)
    u(1)
    u()
    u(1)
    
    g9:
    known:
    __get(p) = 0
    __set(p,1)
    __get(p) = 1
    f(1)
    unknown:
    __get(p) = 1
    __set(p,3)
    __get(p) = 3
    u(3)
    
    g10:
    Done.
    Compiler/auto_globals_001.php: SUCCEEDED
    Compiler/auto_globals_002.php: SUCCEEDED
    Compiler/auto_globals_003.php: SUCCEEDED
    Compiler/break_in_global_code.php: SUCCEEDED
    Compiler/chaining_test.php: SUCCEEDED
    Compiler/chain_ending_by_string_index.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        string(1) "f"
      }
    }
    array(1) {
      [0]=>
      string(4) "xubu"
    }
    object(C)#1 (1) {
      ["f"]=>
      string(4) "kuxu"
    }
    string(5) "helxo"
    string(5) "helxo"
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        string(1) "f"
      }
    }
    array(1) {
      [0]=>
      string(4) "bubu"
    }
    
    Warning: A string item used as a reference in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt at expression on line 19, column 1.
    object(C)(1) {
      ["f"]=>
      string(4) "kuku"
    }
    
    Warning: A string item used as a reference in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt at expression on line 25, column 1.
    string(5) "hello"
    
    Warning: A string item used as a reference in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt at expression on line 31, column 1.
    string(5) "hello"
    Compiler/continue_in_global_code.php: SUCCEEDED
    Compiler/deep_copy.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array(1) {
      [0]=>
      &array(1) {
        [0]=>
        &array(1) {
          [0]=>
          *RECURSION*
        }
      }
    }
    array(1) {
      [0]=>
      &array(1) {
        [0]=>
        &array(1) {
          [0]=>
          *RECURSION*
        }
      }
    }
    array(2) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) {
          [0]=>
          *RECURSION*
          [1]=>
          int(1)
        }
        [1]=>
        int(1)
      }
      [1]=>
      int(1)
    }
    array(1) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) {
          [0]=>
          *RECURSION*
          [1]=>
          int(1)
        }
        [1]=>
        int(1)
      }
    }
    array(1) {
      [0]=>
      &array(1) [recursion]
    }
    array(1) {
      [0]=>
      &array(1) {
        [0]=>
        &array(1) [recursion]
      }
    }
    array(2) {
      [0]=>
      &array(2) [recursion]
      [1]=>
      int(1)
    }
    array(1) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) [recursion]
        [1]=>
        int(1)
      }
    }
    Compiler/deep_copy_refbox.php: SUCCEEDED
    Compiler/expr_init.php: SUCCEEDED
    Compiler/foreach1.php: SUCCEEDED
    Compiler/foreach_arrays.php: SUCCEEDED
    Compiler/for_loop.php: SUCCEEDED
    Compiler/function_002.php: SUCCEEDED
    Compiler/function_003.php: SUCCEEDED
    Compiler/function_004.php: SUCCEEDED
    Compiler/function_call.php: SUCCEEDED
    Compiler/func_get_args.php: SUCCEEDED
    Compiler/if_statement.php: SUCCEEDED
    Compiler/indirect_001.php: SUCCEEDED
    Compiler/indirect_002.php: SUCCEEDED
    Compiler/indirect_003.php: SUCCEEDED
    Compiler/indirect_004.php: SUCCEEDED
    Compiler/indirect_005.php: SUCCEEDED
    Compiler/indirect_007.php: SUCCEEDED
    Compiler/indirect_global.php: SUCCEEDED
    Compiler/inheritance.php: SUCCEEDED
    Compiler/inheritance2.php: SUCCEEDED
    Compiler/isset_unset_001.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Testing x in global code:  <br>
    1 <br>
     <br>
    Testing x (object) in optimized function:  <br>
    1 <br>
     <br>
    Testing x (PhpReference) in optimized function:  <br>
    1 <br>
     <br>
    
    Notice: Undefined variable: y in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt on line 29
    Testing $$x (created at runtime) in optimized function:  <br>
    1 <br>
    Testing x in global code:  <br>
    1 <br>
     <br>
    Testing x (object) in optimized function:  <br>
    1 <br>
     <br>
    Testing x (PhpReference) in optimized function:  <br>
    1 <br>
     <br>
    Testing $$x (created at runtime) in optimized function:  <br>
    1 <br>
    Compiler/list%20%2326681.php: SUCCEEDED
    Compiler/new_array_item_assignadd.php: SUCCEEDED
    Compiler/null_hints.php: SUCCEEDED
    Compiler/pure_create_function.php: SUCCEEDED
    Compiler/pure_function_exists.php: SUCCEEDED
    Compiler/pure_math_str.php: SUCCEEDED
    Compiler/self.php: SUCCEEDED
    Compiler/static_call.php: SUCCEEDED
    Compiler/switch.php: SUCCEEDED
    Compiler/ternary_ex.php: SUCCEEDED
    Compiler/ternary_short.php: SUCCEEDED
    Compiler/this%20call.php: SUCCEEDED
    Compiler/typehint_check.php: SUCCEEDED
    Compiler/__call.php: SUCCEEDED
    Compiler/Inclusions/include2.php: SUCCEEDED
    Compiler/Inclusions/include3.php: SUCCEEDED
    Compiler/Inclusions/include6.php: SUCCEEDED
    Compiler/Inclusions/include_test.php: SUCCEEDED
    Compiler/Inclusions/script.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t01.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t02.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t03.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t04.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t05.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t08.php: SUCCEEDED
    Compiler/Namespaces/const1.php: SUCCEEDED
    Compiler/Namespaces/constants1.php: SUCCEEDED
    Compiler/Namespaces/extends1.php: SUCCEEDED
    Compiler/Namespaces/extends2.php: SUCCEEDED
    Compiler/Namespaces/function1.php: SUCCEEDED
    Compiler/Namespaces/function2.php: SUCCEEDED
    Compiler/Namespaces/namespace1.php: SUCCEEDED
    Compiler/Namespaces/simple_syntax1.php: SUCCEEDED
    Compiler/Namespaces/use1.php: SUCCEEDED
    Compiler/Namespaces/use2.php: SUCCEEDED
    Compiler/Namespaces/use3.php: SUCCEEDED
    Compiler/Namespaces/use4.php: SUCCEEDED
    Compiler/PseudoConst/parent.php: SUCCEEDED
    Compiler/PseudoConst/parent2.php: SUCCEEDED
    Compiler/PseudoConst/self.php: SUCCEEDED
    Compiler/PseudoConst/t01.php: SUCCEEDED
    Compiler/PseudoConst/t02.php: SUCCEEDED
    Compiler/PseudoConst/t03.php: SUCCEEDED
    Compiler/PseudoConst/t04.php: SUCCEEDED
    Compiler/PseudoConst/t05.php: SUCCEEDED
    Compiler/PseudoConst/t06.php: SUCCEEDED
    Compiler/PseudoConst/t07.php: SUCCEEDED
    Compiler/PseudoConst/t08.php: SUCCEEDED
    Compiler/PseudoConst/t09.php: SUCCEEDED
    Compiler/PseudoConst/t10.php: SUCCEEDED
    Compiler/PseudoConst/t11.php: SUCCEEDED
    Compiler/PseudoConst/_class_.php: SUCCEEDED
    Compiler/PseudoConst/_dir_.php: SUCCEEDED
    Compiler/PseudoConst/_function_.php: SUCCEEDED
    Compiler/References/array_argument.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(2)
        [1]=>
        int(3)
      }
    }
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    Compiler/References/array_local.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(2)
        [1]=>
        int(3)
      }
    }
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    Compiler/References/array_ret_argument.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(2)
        [1]=>
        int(3)
      }
    }
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    Compiler/References/array_ret_argument2.php: SUCCEEDED
    Compiler/References/deepcopy.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <br/><br/>globalobjects: array(2) {
      [0]=>
      int(1)
      [1]=>
      int(7)
    }
    <br/><br/>globalobjects: array(2) {
      [0]=>
      int(1)
      [1]=>
      &int(7)
    }
    Compiler/References/explicitclear.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Construyendo Y
    call foo12Destruyendo Y
    3object(X)#1 (2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      int(54)
    }
    array(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      string(10) "Init Value"
    }
    x: object(X)#1 (2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      int(1004)
    }
    <br/>checkpoint array(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      int(54)
    }
    Construyendo Y
    call foo123object(X)(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      &int(54)
    }
    array(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      &int(54)
    }
    x: object(X)(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      &int(1004)
    }
    <br/>checkpoint array(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      &int(1004)
    }
    Destruyendo Y
    Compiler/References/field_argument.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: int(7)
    <br/><br/>checkpoint array(1) {
      ["objects"]=>
      int(8)
    }
    x: int(7)
    <br/><br/>checkpoint array(1) {
      ["objects"]=>
      &int(7)
    }
    Compiler/References/field_local.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: object(X)#1 (1) {
      ["objects"]=>
      int(25)
    }
    <br/>checkpoint array(1) {
      ["objects"]=>
      int(7)
    }
    x: object(X)(1) {
      ["objects"]=>
      &int(25)
    }
    <br/>checkpoint array(1) {
      ["objects"]=>
      &int(25)
    }
    Compiler/References/ref_arrayitem.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(2)
        [1]=>
        int(3)
      }
    }
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    Compiler/References/ref_reasign.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    object(X)#1 (2) {
      ["objects"]=>
      int(54)
      ["objects2"]=>
      &int(222)
    }
    array(2) {
      ["objects"]=>
      int(7)
      ["objects2"]=>
      &int(222)
    }
    x: object(X)#1 (2) {
      ["objects"]=>
      int(1004)
      ["objects2"]=>
      int(777)
    }
    <br/>checkpoint array(2) {
      ["objects"]=>
      int(54)
      ["objects2"]=>
      int(222)
    }
    object(X)(2) {
      ["objects"]=>
      &int(54)
      ["objects2"]=>
      &int(222)
    }
    array(2) {
      ["objects"]=>
      &int(54)
      ["objects2"]=>
      &int(222)
    }
    x: object(X)(2) {
      ["objects"]=>
      &int(1004)
      ["objects2"]=>
      &int(777)
    }
    <br/>checkpoint array(2) {
      ["objects"]=>
      &int(1004)
      ["objects2"]=>
      &int(777)
    }
    Compiler/Unreachable/t13.php: SUCCEEDED
    Compiler/Unset/calluserfunc.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Warning: call_user_func() expects parameter 1 to be a valid callback, function 'unset' not found or invalid function name in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\Unset\__input.txt on line 3
    int(10)
    Error: call_user_func(): Call to undefined function: 'unset' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\Unset\__input.txt at expression on line 3, column 1.
    Compiler/Unset/issetref2.php: SUCCEEDED
    Compiler/Unset/unsetglobal.php: SUCCEEDED
    Compiler/Unset/unsetglobal2.php: SUCCEEDED
    Compiler/Unset/unsetindirect.php: SUCCEEDED
    Compiler/Unset/unsetproblem.php: SUCCEEDED
    Compiler/Unset/unsetref.php: SUCCEEDED
    Compiler/Unset/unsetref2.php: SUCCEEDED
    Compiler/Unset/unsetref3.php: SUCCEEDED
    Compiler/Unset/__unset.php: SUCCEEDED
    DateTime/strftime.php: SUCCEEDED
    DateTime/strtotime1.php: SUCCEEDED
    DateTime/strtotime2.php: SUCCEEDED
    DateTime/strtotime3.php: SUCCEEDED
    DateTime/strtotime4.php: SUCCEEDED
    DateTime/strtotime5.php: SUCCEEDED
    DateTime/time.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    -189388800:-189475200 - 86400
    1964-01-01T00:00:00+0000
    1963-12-31T00:00:00+0000
    1964-06-06
    1963-06-06
    1964-01-06
    1133305200
    -189388800:-189475200 - 86400
    1964-01-01T00:00:00+0000
    1963-12-31T00:00:00+0000
    1964-06-06
    1963-06-06
    1964-01-06
    DateTime/timezones1.php: SUCCEEDED
    DLR/classContext.php: SUCCEEDED
    DLR/classContext1.php: SUCCEEDED
    DLR/classContext2.php: SUCCEEDED
    DLR/restrictions%20generics.php: SUCCEEDED
    DLR/restrictions.php: SUCCEEDED
    DLR/targets.php: SUCCEEDED
    DLR/__call.php: SUCCEEDED
    FileSystem/basename.php: SUCCEEDED
    FileSystem/basename2.php: SUCCEEDED
    FileSystem/chdir.php: SUCCEEDED
    FileSystem/csv.php: SUCCEEDED
    FileSystem/date.php: SUCCEEDED
    FileSystem/date2.php: SUCCEEDED
    FileSystem/date3.php: SUCCEEDED
    FileSystem/date_unix.php: SUCCEEDED
    FileSystem/dirname.php: SUCCEEDED
    FileSystem/dirname2.php: SUCCEEDED
    FileSystem/disk_free_space.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    316 GB
    Drive C: 20 GB
    Drive D: 316 GB
    Drive E: 
    Warning: disk_free_space(): The system cannot find the path specified.
     in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 14
    false
    Drive F: 
    Warning: disk_free_space(): The device is not ready.
     in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 14
    false
    316 GB
    Drive C: 20 GB
    Drive D: 316 GB
    Drive E: false
    Drive F: false
    FileSystem/disk_total_space.php: SUCCEEDED
    FileSystem/fgets.php: SUCCEEDED
    FileSystem/file.php: SUCCEEDED
    FileSystem/filesize.php: SUCCEEDED
    FileSystem/file_exists.php: SUCCEEDED
    FileSystem/file_get_contents.php: SUCCEEDED
    FileSystem/fpassthru.php: SUCCEEDED
    FileSystem/fread.php: SUCCEEDED
    FileSystem/fread1.php: SUCCEEDED
    FileSystem/fread2.php: SUCCEEDED
    FileSystem/fseek.php: SUCCEEDED
    FileSystem/fsockopen.php: SUCCEEDED
    FileSystem/ftell.php: SUCCEEDED
    FileSystem/glob_up_dirs.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string(7) "../@PHP"
    string(9) "../Arrays"
    string(7) "../Bugs"
    string(6) "../CLR"
    string(11) "../Compiler"
    string(6) "../DLR"
    string(11) "../DateTime"
    string(13) "../FileSystem"
    string(7) "../Math"
    string(7) "../Misc"
    string(10) "../Objects"
    string(10) "../PHP.NET"
    string(8) "../RegEx"
    string(6) "../SPL"
    string(10) "../Strings"
    string(11) "../TestLogs"
    string(12) "../Variables"
    string(6) "../Xml"
    string(7) "../@PHP"
    string(9) "../Arrays"
    string(7) "../Bugs"
    string(6) "../CLR"
    string(11) "../Compiler"
    string(11) "../DateTime"
    string(6) "../DLR"
    string(13) "../FileSystem"
    string(7) "../Math"
    string(7) "../Misc"
    string(10) "../Objects"
    string(10) "../PHP.NET"
    string(8) "../RegEx"
    string(6) "../SPL"
    string(10) "../Strings"
    string(11) "../TestLogs"
    string(12) "../Variables"
    string(6) "../Xml"
    FileSystem/is_dir.php: SUCCEEDED
    FileSystem/is_executable.php: SUCCEEDED
    FileSystem/pathinfo.php: SUCCEEDED
    FileSystem/popen.php: SUCCEEDED
    FileSystem/readdir.php: SUCCEEDED
    FileSystem/readfile.php: SUCCEEDED
    FileSystem/readline.php: SUCCEEDED
    FileSystem/realpath.php: SUCCEEDED
    FileSystem/scandir.php: SUCCEEDED
    FileSystem/stat.php: SUCCEEDED
    FileSystem/stream_context_set_option.php: SUCCEEDED
    FileSystem/stream_copy_to_stream.php: SUCCEEDED
    FileSystem/stream_copy_to_stream2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <p>Read <b>rb</b>, Write <b>wb</b>
    
    
    COPIED: <b>30818</b>
    <p>Read <b>rb</b>, Write <b>wt</b>
    
    
    COPIED: <b>30814</b>
    <p>Read <b>rb</b>, Write <b>wb</b>
    
    
    COPIED: <b>30814</b>
    <p>Read <b>rb</b>, Write <b>wt</b>
    
    
    COPIED: <b>30818</b>
    FileSystem/testinc.php: SUCCEEDED
    FileSystem/touch.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Warning: touch(): Utime failed: Bad file descriptor in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 8
    Sorry Could Not change modification time of touch.txt
    Warning: touch(): Utime failed: Bad file descriptor in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 14
    
    Warning: touch(): Utime failed: Bad file descriptor in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 16
    
    Warning: touch(): Utime failed: Bad file descriptor in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 17
    <pre>[ARRAY
      [INT (0)] => [STRING: "May 10, 2011; [00:50:21] (00h) ctime test.txt (1304981421)"]
      [INT (1)] => [STRING: "February 19, 2011; [22:06:05] (22h) mtime test.txt (1298149565)"]
      [INT (2)] => [STRING: "May 10, 2011; [00:50:21] (00h) ctime touch.txt (1304981421)"]
      [INT (3)] => [STRING: "February 19, 2011; [22:06:05] (22h) mtime touch.txt (1298149565)"]
      [INT (4)] => [STRING: "May 10, 2011; [00:50:21] (00h) atime touch.txt (1304981421)"]
      [INT (5)] => [STRING: "February 19, 2011; [22:06:05] (22h) mtime summer.txt (1298149565)"]
      [INT (6)] => [STRING: "February 19, 2011; [22:06:05] (22h) mtime winter.txt (1298149565)"]
    ]</pre>
    Warning: touch(): Unable to access (D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\touch.txt): Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 8, column 5.
    Sorry Could Not change modification time of touch.txt
    Warning: touch(): Unable to access (D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\touch.txt): Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 14, column 1.
    
    Warning: touch(): Unable to access (D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\winter.txt): Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 16, column 1.
    
    Warning: touch(): Unable to access (D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\summer.txt): Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 17, column 1.
    <pre>[ARRAY
      [INT (0)] => [STRING: "May 9, 2011; [23:50:21] (23h) ctime test.txt (1304977821)"]
      [INT (1)] => [STRING: "February 19, 2011; [22:06:05] (22h) mtime test.txt (1298149565)"]
      [INT (2)] => [STRING: "May 9, 2011; [23:50:21] (23h) ctime touch.txt (1304977821)"]
      [INT (3)] => [STRING: "February 19, 2011; [22:06:05] (22h) mtime touch.txt (1298149565)"]
      [INT (4)] => [STRING: "May 9, 2011; [23:50:21] (23h) atime touch.txt (1304977821)"]
      [INT (5)] => [STRING: "February 19, 2011; [22:06:05] (22h) mtime summer.txt (1298149565)"]
      [INT (6)] => [STRING: "February 19, 2011; [22:06:05] (22h) mtime winter.txt (1298149565)"]
    ]</pre>
    FileSystem/tar/tar_test.php: SUCCEEDED
    FileSystem/zip/zip.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    correct
    Error: Call to undefined function: 'zip_open' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\zip\__input.txt at expression on line 3, column 1.
    Math/abs.php: SUCCEEDED
    Math/atan2.php: SUCCEEDED
    Math/base_convert.php: SUCCEEDED
    Math/bindec.php: SUCCEEDED
    Math/ceil.php: SUCCEEDED
    Math/cos.php: SUCCEEDED
    Math/decbin.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <pre>
    [double: 2294967295]
    10001000110010100110101111111111
    [double: 4294967296]
    0
    [double: 8589934590]
    11111111111111111111111111111110
    [double: 8589934590]
    11111111111111111111111111111110
    [double: 8589934591]
    11111111111111111111111111111111
    [Int: 1000.000.000.000]
    11010100101001010001000000000000
    <hr>(-1, -5435, 2.14, 0, 26)
    11111111111111111111111111111111
    11111111111111111110101011000101
    10
    0
    11010 
    </pre>
    <pre>
    [???: 2294967295]
    10001000110010100110101111111111
    [???: 4294967296]
    0
    [???: 8589934590]
    11111111111111111111111111111110
    [???: 8589934590]
    11111111111111111111111111111110
    [???: 8589934591]
    11111111111111111111111111111111
    [Int: 1000.000.000.000]
    11010100101001010001000000000000
    <hr>(-1, -5435, 2.14, 0, 26)
    11111111111111111111111111111111
    11111111111111111110101011000101
    10
    0
    11010 
    </pre>
    Math/dechex.php: SUCCEEDED
    Math/decoct.php: SUCCEEDED
    Math/deg2rad.php: SUCCEEDED
    Math/exp.php: SUCCEEDED
    Math/floor.php: SUCCEEDED
    Math/fmod.php: SUCCEEDED
    Math/hexdec.php: SUCCEEDED
    Math/max.php: SUCCEEDED
    Math/min.php: SUCCEEDED
    Math/modulo_warn.php: SUCCEEDED
    Math/octdec.php: SUCCEEDED
    Math/pow.php: SUCCEEDED
    Math/rad2deg.php: SUCCEEDED
    Math/round.php: SUCCEEDED
    Math/sin.php: SUCCEEDED
    Math/sqrt.php: SUCCEEDED
    Math/tan.php: SUCCEEDED
    Math/uniqid.php: SUCCEEDED
    Misc/calendar_extension.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0
    0
    2375840
    0
    14
    32
    2
    There are 31 days in August 2003
    There are 28 days in February 2003
    There are 29 days in February 2004
    There are 31 days in December 2034
    1748326
    1748324
    374867
    0
    322f32322f35373633
    ebe120e7f9e5ef20e4faf9f1e2
    ebe120e7f9e5ef20e427faf9f1e2
    ebe120e7f9e5ef20e420e0ecf4e9ed20faf9f1e2
    ebe120e7f9e5ef20e42720e0ecf4e9ed20faf9f1e2
    eb22e120e7f9e5ef20e4faf9f122e2
    e12720e7f9e5ef20e4faf9f122e2
    e12720e7f9e5ef20e427faf9f122e2
    e12720e7f9e5ef20e420e0ecf4e9ed20faf9f122e2
    e12720e7f9e5ef20e42720e0ecf4e9ed20faf9f122e2
    Error: Call to undefined function: 'frenchtojd' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt at expression on line 2, column 1.
    Misc/dir_read.php: SUCCEEDED
    Misc/fgetcsv%20%2327492.php: SUCCEEDED
    Misc/hash%20functions%20%2326667.php: SUCCEEDED
    Misc/ini_parse.php: SUCCEEDED
    Misc/json%20%2327838.php: SUCCEEDED
    Misc/lexer.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    T_INLINE_HTML
    311 '\r\n'
    T_OPEN_TAG
    368 '&lt;?'
    T_WHITESPACE
    371 ' \r\n\r\n'
    T_FINAL
    345 'final'
    T_WHITESPACE
    371 ' '
    T_CLASS
    353 'class'
    T_WHITESPACE
    371 ' '
    T_STRING
    307 'A'
    T_WHITESPACE
    371 ' \r\n'
        '{'
    T_WHITESPACE
    371 ' \r\n  '
    T_FUNCTION
    334 'function'
    T_WHITESPACE
    371 ' '
    T_STRING
    307 '__get'
        '('
    T_VARIABLE
    309 '$x'
        ')'
    T_WHITESPACE
    371 ' \r\n  '
        '{'
    T_WHITESPACE
    371 ' \r\n    '
    T_VARIABLE
    309 '$x'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_START_HEREDOC
    372 '&lt;&lt;&lt;EOOOOOOOOOOOOOOT\r\n'
    T_ENCAPSED_AND_WHITESPACE
    314 '         &lt;&lt;&lt;hello\r\nEOOOOOOOOOOOOOOt;\r\nEOOOOOOOOOOOOOT;\r\n'
    T_END_HEREDOC
    373 'EOOOOOOOOOOOOOOT'
        ';'
    T_WHITESPACE
    371 '\r\n\r\n    '
        '$'
    T_VARIABLE
    309 '$y'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_ARRAY
    360 'array'
    T_WHITESPACE
    371 ' '
        '('
    T_LNUMBER
    305 '1'
        ','
    T_DNUMBER
    306 '100000000000000'
        ','
    T_DNUMBER
    306 '999999999999999999999999999999999'
        ','
    T_STRING
    307 'true'
        ','
    T_STRING
    307 'false'
        ')'
        ';'
    T_WHITESPACE
    371 '\r\n    '
        '$'
        '{'
        '&quot;'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
    T_DOLLAR_OPEN_CURLY_BRACES
    374 '${'
        '$'
        '{'
    T_CONSTANT_ENCAPSED_STRING
    315 '&quot;xxx&quot;'
        '}'
        '}'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
        '&quot;'
        '}'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_LNUMBER
    305 '1'
        ';'
    T_WHITESPACE
    371 '\r\n    '
        '$'
        '{'
        '&quot;'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
    T_DOLLAR_OPEN_CURLY_BRACES
    374 '${'
        '$'
        '{'
        '&quot;'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
    T_VARIABLE
    309 '$x'
    T_ENCAPSED_AND_WHITESPACE
    314 '-&gt;$$'
    T_VARIABLE
    309 '$x0xx'
        '&quot;'
        '}'
        '}'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
        '&quot;'
        '}'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_LNUMBER
    305 '1'
        ';'
    T_WHITESPACE
    371 '\r\n  '
        '}'
    T_WHITESPACE
    371 ' \r\n'
        '}'
    T_WHITESPACE
    371 '\r\n\r\n'
    T_CLOSE_TAG
    370 '?&gt;'
    '
    '
        '&lt;?'
        ' 
    
    '
        'final'
        ' '
        'class'
        ' '
        'A'
        ' 
    '
        '{'
        ' 
      '
        'function'
        ' '
    259
    259 '__get'
        '('
        '$x'
        ')'
        ' 
      '
        '{'
        ' 
        '
        '$x'
        ' '
        '='
        ' '
        '&lt;&lt;&lt;EOOOOOOOOOOOOOOT
    '
        '         &lt;&lt;&lt;'
        'hello'
        '
    '
        'EOOOOOOOOOOOOOOt;
    '
        'EOOOOOOOOOOOOOT;
    '
        'EOOOOOOOOOOOOOOT'
        ';'
        '
    
        '
        '$'
        '$y'
        ' '
        '='
        ' '
        'array'
        ' '
        '('
        '1'
        ','
        '100000000000000'
        ','
        '999999999999999999999999999999999'
        ','
    256
    256 'true'
        ','
    257
    257 'false'
        ')'
        ';'
        '
        '
        '$'
        '{'
        '&quot;'
        'x'
        '${'
        '$'
        '{'
    -29
    -29 '&quot;xxx&quot;'
        '}'
        '}'
        'x'
        '&quot;'
        '}'
        ' '
        '='
        ' '
        '1'
        ';'
        '
        '
        '$'
        '{'
        '&quot;'
        'x'
        '${'
        '$'
        '{'
        '&quot;'
        'x'
        '$x'
        '-&gt;'
        '$'
        '$'
        '$x0xx'
        '&quot;'
        '}'
        '}'
        'x'
        '&quot;'
        '}'
        ' '
        '='
        ' '
        '1'
        ';'
        '
      '
        '}'
        ' 
    '
        '}'
        '
    
    '
        '?&gt;'
    Misc/locale.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string(1) "C"
    double(1.54)
    double(Infinity)
    654564.145400
    Sat Saturday Apr April
    --------------
    string(19) "Danish_Denmark.1252"
    double(1.54)
    double(Infinity)
    654564,145400
    lo lordag apr april
    --------------
    string(25) "Czech_Czech Republic.1250"
    double(1.54)
    double(Infinity)
    654564,145400
    so sobota IV duben
    --------------
    string(1) "C"
    float(1.54)
    float(Infinity)
    654564.145400
    Sat Saturday Apr April
    --------------
    string(19) "Danish_Denmark.1252"
    float(1.54)
    float(Infinity)
    654564,145400
    lo lordag apr april
    --------------
    string(25) "Czech_Czech Republic.1250"
    float(1.54)
    float(Infinity)
    654564,145400
    so sobota 4 duben
    --------------
    Misc/output2.php: SUCCEEDED
    Misc/parse_url%20%2327377.php: SUCCEEDED
    Misc/parse_url_at_bug.php: SUCCEEDED
    Misc/stack_trace.php: FAILED
    Script hung upNo errorsSuccess
    Expected test outputReal script output
    Unhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---> System.IndexOutOfRangeException: Index was outside the bounds of the array.
       at PHP.Core.PhpStackFrame..ctor(ScriptContext context, StackFrame frame, FrameKinds kind)
       at PHP.Core.PhpStackTrace..ctor(ScriptContext context, StackTrace clrTrace)
       at PHP.Core.PhpStackTrace..ctor(ScriptContext context, Int32 skipFrames)
       at PHP.Library.Errors.Backtrace()
       at <stack_trace.inc>.<Script>.j(ScriptContext <context>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\stack_trace.inc:line 11
       at <stack_trace.inc>.<Script>.j(Object instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.CallInternal(Dictionary`2 localVariables, NamingContext namingContext, Object name, String fallbackName, DRoutineDesc& routineHint, ScriptContext context)
       at PHP.Core.ScriptContext.CallVoid(Dictionary`2 localVariables, NamingContext namingContext, Object name, String fallbackName, DRoutineDesc& routineHint, ScriptContext context)
       at <stack_trace.inc>.<Script>.i(ScriptContext <context>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\stack_trace.inc:line 7
       at <stack_trace.inc>.<Script>.i(Object instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.CallInternal(Dictionary`2 localVariables, NamingContext namingContext, Object name, String fallbackName, DRoutineDesc& routineHint, ScriptContext context)
       at PHP.Core.ScriptContext.CallVoid(Dictionary`2 localVariables, NamingContext namingContext, Object name, String fallbackName, DRoutineDesc& routineHint, ScriptContext context)
       at <^0>.<Global>.<?0>.h(ScriptContext <context>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt:line 14
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack, DTypeDesc caller)
       at PHP.Core.PhpCallback.InvokeInternal(Object[] args)
       at PHP.Core.PhpCallback.Invoke(Object[] args)
       at PHP.Library.PhpArrays.Map(DTypeDesc caller, PhpCallback map, PhpArray[] arrays)
       at <__input.txt>.<Script>.<Lambda>(ScriptContext <context>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt:line 4
       at <__input.txt>.<Script>.<Lambda>(Object instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.CallInternal(Dictionary`2 localVariables, NamingContext namingContext, Object name, String fallbackName, DRoutineDesc& routineHint, ScriptContext context)
       at PHP.Core.ScriptContext.CallVoid(Dictionary`2 localVariables, NamingContext namingContext, Object name, String fallbackName, DRoutineDesc& routineHint, ScriptContext context)
       at <__input.txt>.<Script>.f(ScriptContext <context>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt:line 7
       at <__input.txt>.<Script>.f(Object instance, PhpStack stack)
       at <__input.txt>.<Script>.<Main>(ScriptContext <context>, Dictionary`2 <locals>, DObject <self>, DTypeDesc <includer>, Boolean <request>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt:line 18
       at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)
       at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)
       --- End of inner exception stack trace ---
       at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)
       at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)
       at <Global>.Run(String[] )
    
    Misc/str_getcsv%20%2326691.php: SUCCEEDED
    Misc/tokens.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    T_REQUIRE_ONCE = 258,
    T_REQUIRE = 259,
    T_EVAL = 260,
    T_INCLUDE_ONCE = 261,
    T_INCLUDE = 262,
    T_LOGICAL_OR = 263,
    T_LOGICAL_XOR = 264,
    T_LOGICAL_AND = 265,
    T_PRINT = 266,
    T_SR_EQUAL = 267,
    T_SL_EQUAL = 268,
    T_XOR_EQUAL = 269,
    T_OR_EQUAL = 270,
    T_AND_EQUAL = 271,
    T_MOD_EQUAL = 272,
    T_CONCAT_EQUAL = 273,
    T_DIV_EQUAL = 274,
    T_MUL_EQUAL = 275,
    T_MINUS_EQUAL = 276,
    T_PLUS_EQUAL = 277,
    T_BOOLEAN_OR = 278,
    T_BOOLEAN_AND = 279,
    T_IS_NOT_IDENTICAL = 280,
    T_IS_IDENTICAL = 281,
    T_IS_NOT_EQUAL = 282,
    T_IS_EQUAL = 283,
    T_IS_GREATER_OR_EQUAL = 284,
    T_IS_SMALLER_OR_EQUAL = 285,
    T_SR = 286,
    T_SL = 287,
    T_INSTANCEOF = 288,
    T_UNSET_CAST = 289,
    T_BOOL_CAST = 290,
    T_OBJECT_CAST = 291,
    T_ARRAY_CAST = 292,
    T_STRING_CAST = 293,
    T_DOUBLE_CAST = 294,
    T_INT_CAST = 295,
    T_DEC = 296,
    T_INC = 297,
    T_CLONE = 298,
    T_NEW = 299,
    T_EXIT = 300,
    T_IF = 301,
    T_ELSEIF = 302,
    T_ELSE = 303,
    T_ENDIF = 304,
    T_LNUMBER = 305,
    T_DNUMBER = 306,
    T_STRING = 307,
    T_STRING_VARNAME = 308,
    T_VARIABLE = 309,
    T_NUM_STRING = 310,
    T_INLINE_HTML = 311,
    T_CHARACTER = 312,
    T_BAD_CHARACTER = 313,
    T_ENCAPSED_AND_WHITESPACE = 314,
    T_CONSTANT_ENCAPSED_STRING = 315,
    T_ECHO = 316,
    T_DO = 317,
    T_WHILE = 318,
    T_ENDWHILE = 319,
    T_FOR = 320,
    T_ENDFOR = 321,
    T_FOREACH = 322,
    T_ENDFOREACH = 323,
    T_DECLARE = 324,
    T_ENDDECLARE = 325,
    T_AS = 326,
    T_SWITCH = 327,
    T_ENDSWITCH = 328,
    T_CASE = 329,
    T_DEFAULT = 330,
    T_BREAK = 331,
    T_CONTINUE = 332,
    T_GOTO = 333,
    T_FUNCTION = 334,
    T_CONST = 335,
    T_RETURN = 336,
    T_TRY = 337,
    T_CATCH = 338,
    T_THROW = 339,
    T_USE = 340,
    T_GLOBAL = 341,
    T_PUBLIC = 342,
    T_PROTECTED = 343,
    T_PRIVATE = 344,
    T_FINAL = 345,
    T_ABSTRACT = 346,
    T_STATIC = 347,
    T_VAR = 348,
    T_UNSET = 349,
    T_ISSET = 350,
    T_EMPTY = 351,
    T_HALT_COMPILER = 352,
    T_CLASS = 353,
    T_INTERFACE = 354,
    T_EXTENDS = 355,
    T_IMPLEMENTS = 356,
    T_OBJECT_OPERATOR = 357,
    T_DOUBLE_ARROW = 358,
    T_LIST = 359,
    T_ARRAY = 360,
    T_CLASS_C = 361,
    T_METHOD_C = 362,
    T_FUNC_C = 363,
    T_LINE = 364,
    T_FILE = 365,
    T_COMMENT = 366,
    T_DOC_COMMENT = 367,
    T_OPEN_TAG = 368,
    T_OPEN_TAG_WITH_ECHO = 369,
    T_CLOSE_TAG = 370,
    T_WHITESPACE = 371,
    T_START_HEREDOC = 372,
    T_END_HEREDOC = 373,
    T_DOLLAR_OPEN_CURLY_BRACES = 374,
    T_CURLY_OPEN = 375,
    T_PAAMAYIM_NEKUDOTAYIM = 376,
    T_DOUBLE_COLON = 376,
    T_NAMESPACE = 377,
    T_NS_C = 378,
    T_DIR = 379,
    T_NS_SEPARATOR = 380,
    T_INCLUDE = 129,
    T_INCLUDE_ONCE = 130,
    T_EVAL = 131,
    T_REQUIRE = 132,
    T_REQUIRE_ONCE = 133,
    T_LOGICAL_OR = 136,
    T_LOGICAL_XOR = 137,
    T_LOGICAL_AND = 138,
    T_PRINT = 139,
    T_PLUS_EQUAL = 140,
    T_MINUS_EQUAL = 141,
    T_MUL_EQUAL = 142,
    T_DIV_EQUAL = 143,
    T_CONCAT_EQUAL = 144,
    T_MOD_EQUAL = 145,
    T_AND_EQUAL = 146,
    T_OR_EQUAL = 147,
    T_XOR_EQUAL = 148,
    T_SL_EQUAL = 149,
    T_SR_EQUAL = 150,
    T_BOOLEAN_OR = 151,
    T_BOOLEAN_AND = 152,
    T_IS_EQUAL = 153,
    T_IS_NOT_EQUAL = 154,
    T_IS_IDENTICAL = 155,
    T_IS_NOT_IDENTICAL = 156,
    T_IS_SMALLER_OR_EQUAL = 157,
    T_IS_GREATER_OR_EQUAL = 158,
    T_SL = 159,
    T_SR = 160,
    T_INC = 161,
    T_DEC = 162,
    T_NEW = 164,
    T_INSTANCEOF = 165,
    T_CLONE = 167,
    T_LNUMBER = 168,
    T_DNUMBER = 170,
    T_STRING = 171,
    T_STRING_VARNAME = 172,
    T_VARIABLE = 173,
    T_NUM_STRING = 174,
    T_INLINE_HTML = 175,
    T_CHARACTER = 176,
    T_BAD_CHARACTER = 177,
    T_ENCAPSED_AND_WHITESPACE = 178,
    T_CONSTANT_ENCAPSED_STRING = 179,
    T_EXIT = 180,
    T_IF = 181,
    T_ELSEIF = 182,
    T_ELSE = 183,
    T_ENDIF = 184,
    T_ECHO = 185,
    T_DO = 186,
    T_WHILE = 187,
    T_ENDWHILE = 188,
    T_FOR = 189,
    T_ENDFOR = 190,
    T_FOREACH = 191,
    T_ENDFOREACH = 192,
    T_AS = 193,
    T_SWITCH = 194,
    T_ENDSWITCH = 195,
    T_CASE = 196,
    T_DEFAULT = 197,
    T_BREAK = 198,
    T_CONTINUE = 199,
    T_FUNCTION = 200,
    T_CONST = 201,
    T_RETURN = 202,
    T_GLOBAL = 203,
    T_STATIC = 204,
    T_VAR = 205,
    T_UNSET = 206,
    T_ISSET = 207,
    T_EMPTY = 208,
    T_CLASS = 209,
    T_EXTENDS = 210,
    T_OBJECT_OPERATOR = 211,
    T_DOUBLE_ARROW = 212,
    T_LIST = 213,
    T_ARRAY = 214,
    T_CLASS_C = 215,
    T_METHOD_C = 216,
    T_FUNC_C = 217,
    T_LINE = 218,
    T_FILE = 219,
    T_DIR = 220,
    T_COMMENT = 221,
    T_DOC_COMMENT = 222,
    T_OPEN_TAG = 227,
    T_OPEN_TAG_WITH_ECHO = 228,
    T_CLOSE_TAG = 229,
    T_WHITESPACE = 230,
    T_START_HEREDOC = 231,
    T_END_HEREDOC = 232,
    T_DOLLAR_OPEN_CURLY_BRACES = 233,
    T_CURLY_OPEN = 234,
    T_DOUBLE_COLON = 235,
    T_PAAMAYIM_NEKUDOTAYIM = 235,
    T_GOTO = 237,
    T_TRY = 238,
    T_CATCH = 239,
    T_THROW = 240,
    T_INTERFACE = 241,
    T_IMPLEMENTS = 242,
    T_ABSTRACT = 243,
    T_FINAL = 244,
    T_PRIVATE = 245,
    T_PROTECTED = 246,
    T_PUBLIC = 247,
    T_BOOL_CAST = 288,
    T_INT_CAST = 291,
    T_DOUBLE_CAST = 297,
    T_STRING_CAST = 300,
    T_ARRAY_CAST = 303,
    T_OBJECT_CAST = 304,
    T_UNSET_CAST = 305,
    T_HALT_COMPILER = 351,
    Misc/user_error_handlers.php: SUCCEEDED
    Objects/accessing%20property%20line%20number%20%2326052.php: SUCCEEDED
    Objects/conditional1.php: SUCCEEDED
    Objects/conditional2.php: SUCCEEDED
    Objects/conditional_base_class.php: SUCCEEDED
    Objects/constant_test.php: SUCCEEDED
    Objects/convobjtoany.php: SUCCEEDED
    Objects/convobjtostr.php: SUCCEEDED
    Objects/evaled_parent.php: SUCCEEDED
    Objects/getter_setter_bug28444.php: SUCCEEDED
    Objects/instanceof.php: SUCCEEDED
    Objects/new_via_unknown_ctor.php: SUCCEEDED
    Objects/object_creation_test.php: SUCCEEDED
    Objects/objop.php: SUCCEEDED
    Objects/objopstr.php: SUCCEEDED
    Objects/overrides%20%231285.php: SUCCEEDED
    Objects/static_field_test.php: SUCCEEDED
    Objects/static_inheritence.php: SUCCEEDED
    Objects/static_method_test.php: SUCCEEDED
    Objects/static_object_vars.php: SUCCEEDED
    Objects/sys_class_const.php: SUCCEEDED
    Objects/this2.php: SUCCEEDED
    Objects/__invoke.php: SUCCEEDED
    RegEx/backreferences.php: SUCCEEDED
    RegEx/dolar_escape.php: SUCCEEDED
    RegEx/ereg.php: SUCCEEDED
    RegEx/escaped_unicode.php: SUCCEEDED
    RegEx/groupbug.php: SUCCEEDED
    RegEx/namedbackref.php: SUCCEEDED
    RegEx/namedbackref2.php: SUCCEEDED
    RegEx/namedgroups.php: SUCCEEDED
    RegEx/namedgroups1.php: SUCCEEDED
    RegEx/namedgroups2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Warning: preg_match_all(): Numeric named subpatterns are not allowed in D:\Documents\Projects\Phalanger\Main\Testing\Tests\RegEx\__input.txt on line 6
    array(0) {
    }
    array(3) {
      [0]=>
      array(2) {
        [0]=>
        string(23) "flux.transitions.bars3d"
        [1]=>
        string(21) "flux.transitions.wrap"
      }
      ["10"]=>
      array(2) {
        [0]=>
        string(6) "bars3d"
        [1]=>
        string(4) "wrap"
      }
      [1]=>
      array(2) {
        [0]=>
        string(6) "bars3d"
        [1]=>
        string(4) "wrap"
      }
    }
    RegEx/nomatchall.php: SUCCEEDED
    RegEx/preg_match_unmatched_groups.php: SUCCEEDED
    RegEx/preg_replace_eval.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ab"01300 as"00da sd"0asdsa das asd 11asd a1sd a
    ab"01300 as"00da sd"0(aasdasdkjask,$a,\,\l,a,s,d,a,s,d,k,j,a,s,${120})(ldjaklsdjalk,$l,\,\l,d,j,a,k,l,s,d,j,a,l,${120})djdsa das asd 11asd a1sd a
    ab"01300 as"00da sd"0asdsa das asd 11asd a1sd a
    ab"01300 as"00da sd"0(aasdasdkjask,$a,\,\l,a,s,d,a,s,d,k,j,,,${120})(ldjaklsdjalk,$l,\,\l,d,j,a,k,l,s,d,j,,,${120})djdsa das asd 11asd a1sd a
    RegEx/regexp-sql.php: SUCCEEDED
    RegEx/regexp_smiles.php: SUCCEEDED
    RegEx/Perl/cache.php: SUCCEEDED
    RegEx/Perl/grep1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      [3] => string(3) "1.5"
      [6] => string(5) "58.54"
    }
    Notice: preg_grep(): Array to string conversion in D:\Documents\Projects\Phalanger\Main\Testing\Tests\RegEx\Perl\__input.txt at expression on line 5, column 1.
    array(2) {
      [3]=>
      string(3) "1.5"
      [6]=>
      string(5) "58.54"
    }
    RegEx/Perl/grep2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Food  array
    (
      [0] => apple
      [1] => banana
      [2] => squid
      [3] => pear
    )
    Fruit array
    (
      [0] => apple
      [1] => banana
      [3] => pear
    )
    Food  Array
    (
        [0] => apple
        [1] => banana
        [2] => squid
        [3] => pear
    )
    Fruit Array
    (
        [0] => apple
        [1] => banana
        [3] => pear
    )
    RegEx/Perl/match1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array [empty]
    array
    (
      [0] => array
      (
        [0] => def
        [1] => 3
      )
    )
    Array
    (
    )
    Array
    (
        [0] => Array
        (
            [0] => def
            [1] => 3
        )
    
    )
    RegEx/Perl/match10.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    (
      [0] => 1231
      [1] => 1
      [2] => 23
      [3] => 1
    )
    Array
    (
        [0] => 1231
        [1] => 1
        [2] => 23
        [3] => 1
    )
    RegEx/Perl/match2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    (
      [0] => array
      (
        [0] => def
        [1] => 0
      )
    )
    Array
    (
        [0] => Array
        (
            [0] => def
            [1] => 0
        )
    
    )
    RegEx/Perl/match3.php: SUCCEEDED
    RegEx/Perl/match4.php: SUCCEEDED
    RegEx/Perl/match5.php: SUCCEEDED
    RegEx/Perl/match6.php: SUCCEEDED
    RegEx/Perl/match7.php: SUCCEEDED
    RegEx/Perl/match8.php: SUCCEEDED
    RegEx/Perl/match9.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    (
      [0] => 209.6.145.47 - - [22/Nov/2003:19:02:30 -0500] "GET /dir/doc.htm HTTP/1.0" 200 6776 "http://search.yahoo.com/search?p=key+words=UTF-8" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)"
      [1] => 209.6.145.47
      [2] => -
      [3] => -
      [4] => 22/Nov/2003:19:02:30 -0500
      [5] => GET
      [6] => /dir/doc.htm
      [7] => HTTP
      [8] => 1.0
      [9] => 200
      [10] => 6776
      [11] => "http://search.yahoo.com/search?p=key+words=UTF-8"
      [12] => "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)"
    )
    Array
    (
        [0] => 209.6.145.47 - - [22/Nov/2003:19:02:30 -0500] "GET /dir/doc.htm HTTP/1.0" 200 6776 "http://search.yahoo.com/search?p=key+words=UTF-8" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)"
        [1] => 209.6.145.47
        [2] => -
        [3] => -
        [4] => 22/Nov/2003:19:02:30 -0500
        [5] => GET
        [6] => /dir/doc.htm
        [7] => HTTP
        [8] => 1.0
        [9] => 200
        [10] => 6776
        [11] => "http://search.yahoo.com/search?p=key+words=UTF-8"
        [12] => "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)"
    )
    RegEx/Perl/match_all1.php: SUCCEEDED
    RegEx/Perl/match_all2.php: SUCCEEDED
    RegEx/Perl/match_all3.php: SUCCEEDED
    RegEx/Perl/match_all4.php: SUCCEEDED
    RegEx/Perl/match_dollar.php: SUCCEEDED
    RegEx/Perl/overflow.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string("kfkaj +j k45´┐Ż´┐Ż´┐Ż´┐Ż´┐Ż3#$%^&kjakfjkaj|kfj")
    string("kfkaj +j k45�����3#$%^&kjakfjkaj|kfj")
    RegEx/Perl/quote1.php: SUCCEEDED
    RegEx/Perl/quote2.php: SUCCEEDED
    RegEx/Perl/quote3.php: SUCCEEDED
    RegEx/Perl/replace1.php: SUCCEEDED
    RegEx/Perl/replace2.php: SUCCEEDED
    RegEx/Perl/replace3.php: SUCCEEDED
    RegEx/Perl/replace4.php: SUCCEEDED
    RegEx/Perl/replace5.php: SUCCEEDED
    RegEx/Perl/replace6.php: SUCCEEDED
    RegEx/Perl/replace7.php: SUCCEEDED
    RegEx/Perl/replace8.php: SUCCEEDED
    RegEx/Perl/replace9.php: SUCCEEDED
    RegEx/Perl/replace_callback1.php: SUCCEEDED
    RegEx/Perl/replace_callback2.php: SUCCEEDED
    RegEx/Perl/split1.php: SUCCEEDED
    RegEx/Perl/split2.php: SUCCEEDED
    RegEx/Perl/split3.php: SUCCEEDED
    RegEx/Perl/split4.php: SUCCEEDED
    RegEx/Perl/split5.php: SUCCEEDED
    RegEx/Perl/split6.php: SUCCEEDED
    RegEx/Perl/ungreedy.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    aaa
    a
    aaa
    
    a
    aa
    aaa
    aa
    aaa
    aaa
    a
    aaa
    a
    a
    aa
    aaa
    aa
    aaa
    RegEx/Perl/unsuccessful-preg_match_all.php: SUCCEEDED
    RegEx/Perl/withoutdelimiters.php: SUCCEEDED
    SPL/AppendIterator1.php: SUCCEEDED
    SPL/AppendIterator2.php: SUCCEEDED
    SPL/ArrayAccess_offsetExists.php: SUCCEEDED
    SPL/ArrayIterator1.php: SUCCEEDED
    SPL/ArrayIterator2.php: SUCCEEDED
    SPL/Autoload_ctor.php: SUCCEEDED
    SPL/Autoload_extends.php: SUCCEEDED
    SPL/exceptions.php: SUCCEEDED
    SPL/FilterIterator.php: SUCCEEDED
    SPL/RecursiveIteratorIterator1.php: SUCCEEDED
    SPL/RecursiveIteratorIterator2.php: SUCCEEDED
    SPL/RecursiveIteratorIterator3.php: SUCCEEDED
    SPL/SplFixedArray1.php: SUCCEEDED
    SPL/SplFixedArray2.php: SUCCEEDED
    SPL/SplObjectStorage1.php: SUCCEEDED
    SPL/SplObjectStorage2.php: SUCCEEDED
    SPL/SplObjectStorage3.php: SUCCEEDED
    SPL/SplObjectStorage4.php: SUCCEEDED
    Strings/addcslashes.php: SUCCEEDED
    Strings/addslashes.php: SUCCEEDED
    Strings/chunk_split.php: SUCCEEDED
    Strings/concat.php: SUCCEEDED
    Strings/count_chars.php: SUCCEEDED
    Strings/crc32.php: SUCCEEDED
    Strings/crypt.php: SUCCEEDED
    Strings/crypt2.php: SUCCEEDED
    Strings/echo.php: SUCCEEDED
    Strings/explode.php: SUCCEEDED
    Strings/get_html_translation_table.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <hr>[&] => &amp;
    [>] => &gt;
    [<] => &lt;
    ["] => &quot;
    <hr>Hallo &amp; &lt;Frau&gt; &amp; Kr&iuml;&iquest;&frac12;mer
    <hr>[&] => &amp;
    [>] => &gt;
    [<] => &lt;
    ["] => &quot;
    <hr>Hallo &amp; &lt;Frau&gt; &amp; Kr�mer
    Strings/mb_strlen.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Call to undefined function mb_strlen() in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 4
    Error: Call to undefined function: 'mb_strlen' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 4, column 1.
    Strings/nl2br.php: SUCCEEDED
    Strings/pack.php: SUCCEEDED
    Strings/pos.php: SUCCEEDED
    Strings/runtime-quotes.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    fread = (x''y"z)
    fgets = (x''y"z)
    file[0] = (x''y"z)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    
    Warning: fopen(runtime-quotes2.txt): failed to open stream: Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 33
    
    Warning: fwrite() expects parameter 1 to be resource, boolean given in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 35
    fwrite = ()
    
    Warning: fputs() expects parameter 1 to be resource, boolean given in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 38
    fputs = ()
    
    Warning: fclose() expects parameter 1 to be resource, boolean given in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 41
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (x'y"z)
    fgets = (x'y"z)
    file[0] = (x'y"z)
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (a\'b"\\ca\)
    fgets = (a\'b"\\ca\'b"\\c)
    file[0] = (a\'b"\\ca\'b"\\c)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    e'e
    e''e
    e'e
    e'e
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    e'e
    e'e
    e'e
    e'e
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    fread = (x''y"z)
    fgets = (x''y"z)
    file[0] = (x''y"z)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    
    Warning: fopen(): Unable to access (D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\runtime-quotes2.txt): Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 33, column 3.
    
    Warning: Cannot convert boolean to resource implicitly in a call to function fwrite() in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 35, column 3.
    fwrite = (0)
    
    Warning: Cannot convert boolean to resource implicitly in a call to function fputs() in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 38, column 3.
    fputs = (0)
    
    Warning: Cannot convert boolean to resource implicitly in a call to function fclose() in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 41, column 3.
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (x'y"z)
    fgets = (x'y"z)
    file[0] = (x'y"z)
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (a\'b"\\ca\)
    fgets = (a\'b"\\ca\'b"\\c)
    file[0] = (a\'b"\\ca\'b"\\c)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    e'e
    e''e
    e'e
    e'e
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    e'e
    e'e
    e'e
    e'e
    Strings/sprintf.php: SUCCEEDED
    Strings/sprintf2.php: SUCCEEDED
    Strings/stripslashes.php: SUCCEEDED
    Strings/strtr.php: SUCCEEDED
    Strings/str_ireplace.php: SUCCEEDED
    Strings/str_replace.php: SUCCEEDED
    Strings/str_word_count.php: SUCCEEDED
    Strings/substr_operations.php: SUCCEEDED
    Strings/wordwrap.php: SUCCEEDED
    Variables/advanced_serialize.php: SUCCEEDED
    Variables/arguments.php: SUCCEEDED
    Variables/assign_copy.php: SUCCEEDED
    Variables/bitwise.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "00"
    string(2) "31"
    string(2) "31"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    0
    0
    0
    5
    0
    5
    40
    5
    45
    string(48) "000000000000000000000000000000000000000000000000"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(14) "31323331323331"
    string(2) "30"
    string(14) "31323331323331"
    string(16) "3635343635343536"
    string(2) "30"
    string(16) "3635343635343536"
    string(14) "337a5e8be43d7a"
    string(14) "00002130120201"
    string(48) "337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42"
    string(16) "347d598ce33a7e77"
    string(16) "0200243214040100"
    string(48) "367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42"
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "00"
    string(2) "31"
    string(2) "31"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    0
    -9223372036854775808
    -9223372036854775808
    -9223372036854775803
    0
    -9223372036854775803
    40
    5
    45
    string(48) "000000000000000000000000000000000000000000000000"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(14) "31323331323331"
    string(2) "30"
    string(14) "31323331323331"
    string(16) "3635343635343536"
    string(2) "30"
    string(16) "3635343635343536"
    string(14) "337a5e8be43d7a"
    string(14) "00002130120201"
    string(48) "337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42"
    string(16) "347d598ce33a7e77"
    string(16) "0200243214040100"
    string(48) "367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42"
    Variables/class_constants.php: SUCCEEDED
    Variables/comparisons.php: SUCCEEDED
    Variables/constant.php: SUCCEEDED
    Variables/constants_defined.php: SUCCEEDED
    Variables/extract%20refs.php: SUCCEEDED
    Variables/extract.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    EXTR_PREFIX_ALL
    integer(4)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
      'prefix_non_existent' => integer(1)
    }
    <hr>EXTR_PREFIX_INVALID
    integer(5)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => integer(2)
      'non_existent' => integer(1)
      'prefix_' => integer(1)
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => 'hello'
    }
    <hr>EXTR_PREFIX_SAME
    integer(3)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'non_existent' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>EXTR_PREFIX_IF_EXISTS
    integer(3)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>
    EXTR_PREFIX_ALL
    integer(4)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
      'prefix_non_existent' => integer(1)
    }
    <hr>EXTR_PREFIX_INVALID
    integer(5)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => integer(2)
      'non_existent' => integer(1)
      'prefix_' => integer(1)
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => 'hello'
    }
    <hr>EXTR_PREFIX_SAME
    integer(4)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'non_existent' => integer(1)
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>EXTR_PREFIX_IF_EXISTS
    integer(3)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>
    Variables/func_get_args.php: SUCCEEDED
    Variables/is_number.php: SUCCEEDED
    Variables/serialize.php: SUCCEEDED
    Variables/unserialize_objects.php: SUCCEEDED
    Variables/var_dumping.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Array
    (
        [0] => 1
        [1] => 
        [2] => 1
        [3] => 1.2
        [4] => 
        [5] => asdas
        [6] => Array
            (
                [0] => 1
            )
    
        [7] => stdClass Object
            (
            )
    
        [8] => Resource id #1
    )
    array(9) {
      [0]=>
      bool(true)
      [1]=>
      bool(false)
      [2]=>
      int(1)
      [3]=>
      float(1.2)
      [4]=>
      NULL
      [5]=>
      string(5) "asdas"
      [6]=>
      array(1) {
        [0]=>
        int(1)
      }
      [7]=>
      object(stdClass)#1 (0) {
      }
      [8]=>
      resource(1) of type (stream)
    }
    array (
      0 => true,
      1 => false,
      2 => 1,
      3 => 1.2,
      4 => NULL,
      5 => 'asdas',
      6 => 
      array (
        0 => 1,
      ),
      7 => 
      stdClass::__set_state(array(
      )),
      8 => NULL,
    )
    Array
    (
        [0] => 1
        [1] => 
        [2] => 1
        [3] => 1.2
        [4] => 
        [5] => asdas
        [6] => Array
        (
            [0] => 1
        )
    
        [7] => stdClass Object
        (
        )
    
        [8] => resource id #4
    
    )
    array(9) {
      [0]=>
      bool(true)
      [1]=>
      bool(false)
      [2]=>
      int(1)
      [3]=>
      float(1.2)
      [4]=>
      NULL
      [5]=>
      string(5) "asdas"
      [6]=>
      array(1) {
        [0]=>
        int(1)
      }
      [7]=>
      object(stdClass)(0) {
      }
      [8]=>
      resource(4) of type (stream)
    }
    array (
      0 => true,
      1 => false,
      2 => 1,
      3 => 1.2,
      4 => NULL,
      5 => 'asdas',
      6 => array (
        0 => 1,
      ),
      7 => class stdClass
      {
    
      },
      8 => NULL,
    )
    Xml/025.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
      'foo' => 'foobar'
    }
    array
    {
      'html' => 'http://www.w3.org/1999/xhtml'
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
    }
    array
    {
      'html' => 'http://www.w3.org/1999/xhtml'
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'foo' => 'foobar'
      'baz' => 'foobarbaz'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
    }
    array
    {
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
      'baz' => 'foobarbaz'
      'foo' => 'foobar'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
      'baz' => 'foobarbaz'
      'foo' => 'foobar'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
    }
    array
    {
    }
    Xml/026.php: SUCCEEDED
    Xml/027.php: SUCCEEDED
    Xml/028.php: SUCCEEDED
    Xml/029.php: SUCCEEDED
    Xml/030.php: SUCCEEDED
    Xml/032.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    FALSE
    FALSE
    FALSE
    TRUE
    TRUE
    TRUE
    Xml/033.php: SUCCEEDED
    Xml/bug26384.php: SUCCEEDED
    Xml/bug28721.php: SUCCEEDED
    Xml/bug28817.php: SUCCEEDED
    Xml/bug32615.php: SUCCEEDED
    Xml/bug33853.php: SUCCEEDED
    Xml/bug34276.php: SUCCEEDED
    Xml/bug35342.php: SUCCEEDED
    Xml/bug36756.php: SUCCEEDED
    Xml/bug37277.php: SUCCEEDED
    Xml/dom002.php: SUCCEEDED
    Xml/dom003.php: SUCCEEDED
    Xml/dom006.php: SUCCEEDED
    Xml/dom007.php: SUCCEEDED
    Xml/dom_set_attr_node.php: SUCCEEDED
    Xml/xmlhandler.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test begins
    <br/>
    <br/>test begins
    <br/>empty begins
    <br/>empty ends
    <br/>nocontent begins
    <br/>nocontent ends
    <br/>content begins
    <br/>empty begins
    <br/>empty ends
    <br/>empty begins
    <br/>empty ends
    <br/>content ends
    <br/>empty begins
    <br/>empty ends
    <br/>empty begins
    <br/>empty ends
    <br/>test ends
    <br/>Test ends
    <br/>
    <br/>
    Test begins
    <br/>
    <br/>
    Error: Call to undefined function: 'xml_parser_create' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Xml\__input.txt at expression on line 18, column 3.
    Xml/xslt001.php: SUCCEEDED
    Xml/xslt002.php: SUCCEEDED
    Xml/xslt003.php: SUCCEEDED
    Xml/xslt004.php: SUCCEEDED
    Xml/xslt005.php: SUCCEEDED
    Xml/xslt006.php: SUCCEEDED
    Xml/xslt007.php: SUCCEEDED
    Xml/xslt010.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test 10: EXSLT Support
      
      
      Test Date : 0001-12-31Z
        year                 : 1
        leap-year            : false
        month-in-year        : 12
        month-name           : December
        month-abbreviation   : Dec
        week-in-year         : 1
        day-in-year          : 365
        day-in-month         : 31
        day-of-week-in-month : 5
        day-in-week          : 2
        day-name             : Monday
        day-abbreviation     : Mon
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : 3000-01-31
        year                 : 3000
        leap-year            : false
        month-in-year        : 1
        month-name           : January
        month-abbreviation   : Jan
        week-in-year         : 5
        day-in-year          : 31
        day-in-month         : 31
        day-of-week-in-month : 5
        day-in-week          : 6
        day-name             : Friday
        day-abbreviation     : Fri
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : 2000-02-29
        year                 : 2000
        leap-year            : true
        month-in-year        : 2
        month-name           : February
        month-abbreviation   : Feb
        week-in-year         : 9
        day-in-year          : 60
        day-in-month         : 29
        day-of-week-in-month : 5
        day-in-week          : 3
        day-name             : Tuesday
        day-abbreviation     : Tue
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : 9990001-12-31Z
        year                 : 9990001
        leap-year            : false
        month-in-year        : 12
        month-name           : December
        month-abbreviation   : Dec
        week-in-year         : 1
        day-in-year          : 365
        day-in-month         : 31
        day-of-week-in-month : 5
        day-in-week          : 2
        day-name             : Monday
        day-abbreviation     : Mon
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : -0004-02-29
        year                 : -4
        leap-year            : true
        month-in-year        : 2
        month-name           : February
        month-abbreviation   : Feb
        week-in-year         : 9
        day-in-year          : 60
        day-in-month         : 29
        day-of-week-in-month : 5
        day-in-week          : 1
        day-name             : Sunday
        day-abbreviation     : Sun
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
    Test 10: EXSLT Support
    Warning: Cannot find a script or an extension object associated with namespace 'http://exslt.org/dates-and-times'..
    
    Warning: Illegal string offset '-1' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Phalanger.inc at expression on line 7, column 6.
    Xml/xslt011.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test 11: php:function Support
    
    Warning: XSLTProcessor::transformToXml(): A PHP Object cannot be converted to a XPath-string in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Xml\__input.txt on line 18
    <?xml version="1.0"?>
    foobar - secondArg
    foobar - 
    this is from an external DomDocument
    from the Input Document
    static
    Test 11: php:function Support
    <?xml version="1.0" encoding="utf-8"?>foobar - secondArg
    foobar - 
    this is from an external DomDocument
    from the Input Document
    static
    not a DomNode object
    Xml/xslt012.php: SUCCEEDED
    ================================================ FILE: Testing/Tests/TestLogs/TestLog (2277).htm ================================================ PHP.NET Compiler test log

    PHP.NET Compiler test log

    (91%) 900 succeeded, 92 failed
    Test ResultCompiler error outputExpected test result
    @PHP/classes/array_access_001.php: SUCCEEDED
    @PHP/classes/array_access_002.php: SUCCEEDED
    @PHP/classes/array_access_003.php: SUCCEEDED
    @PHP/classes/array_access_004.php: SUCCEEDED
    @PHP/classes/array_access_005.php: SUCCEEDED
    @PHP/classes/array_access_006.php: SUCCEEDED
    @PHP/classes/array_access_007.php: SUCCEEDED
    @PHP/classes/array_access_008.php: SUCCEEDED
    @PHP/classes/array_access_009.php: SUCCEEDED
    @PHP/classes/array_access_010.php: SUCCEEDED
    @PHP/classes/array_access_011.php: SUCCEEDED
    @PHP/classes/array_access_013.php: SUCCEEDED
    @PHP/classes/assign_op_property_001.php: SUCCEEDED
    @PHP/classes/autoload_001.php: SUCCEEDED
    @PHP/classes/autoload_002.php: SUCCEEDED
    @PHP/classes/autoload_003.php: SUCCEEDED
    @PHP/classes/autoload_005.php: SUCCEEDED
    @PHP/classes/autoload_006.php: SUCCEEDED
    @PHP/classes/bug23951.php: SUCCEEDED
    @PHP/classes/bug24399.php: SUCCEEDED
    @PHP/classes/bug24445.php: SUCCEEDED
    @PHP/classes/bug26737.php: SUCCEEDED
    @PHP/classes/bug27468.php: SUCCEEDED
    @PHP/classes/bug27504.php: SUCCEEDED
    @PHP/classes/class_example.php: SUCCEEDED
    @PHP/classes/class_stdclass.php: SUCCEEDED
    @PHP/classes/clone_001.php: SUCCEEDED
    @PHP/classes/clone_002.php: SUCCEEDED
    @PHP/classes/clone_003.php: SUCCEEDED
    @PHP/classes/clone_004.php: SUCCEEDED
    @PHP/classes/clone_006.php: SUCCEEDED
    @PHP/classes/constants_scope_001.php: SUCCEEDED
    @PHP/classes/ctor_dtor.php: SUCCEEDED
    @PHP/classes/ctor_dtor_inheritance.php: SUCCEEDED
    @PHP/classes/ctor_name_clash.php: SUCCEEDED
    @PHP/classes/dereferencing_001.php: SUCCEEDED
    @PHP/classes/destructor_and_echo.php: SUCCEEDED
    @PHP/classes/destructor_and_references.php: SUCCEEDED
    @PHP/classes/destructor_inheritance.php: SUCCEEDED
    @PHP/classes/destructor_visibility_003.php: SUCCEEDED
    @PHP/classes/factory_001.php: SUCCEEDED
    @PHP/classes/factory_and_singleton_001.php: SUCCEEDED
    @PHP/classes/factory_and_singleton_002.php: SUCCEEDED
    @PHP/classes/final.php: SUCCEEDED
    @PHP/classes/incdec_property_001.php: SUCCEEDED
    @PHP/classes/incdec_property_002.php: SUCCEEDED
    @PHP/classes/incdec_property_003.php: SUCCEEDED
    @PHP/classes/incdec_property_004.php: SUCCEEDED
    @PHP/classes/inheritance.php: SUCCEEDED
    @PHP/classes/inheritance_002.php: SUCCEEDED
    @PHP/classes/interfaces_001.php: SUCCEEDED
    @PHP/classes/interface_construct.php: SUCCEEDED
    @PHP/classes/interface_doubled.php: SUCCEEDED
    @PHP/classes/interface_implemented.php: SUCCEEDED
    @PHP/classes/iterators_001.php: SUCCEEDED
    @PHP/classes/iterators_002.php: SUCCEEDED
    @PHP/classes/iterators_003.php: SUCCEEDED
    @PHP/classes/iterators_004.php: SUCCEEDED
    @PHP/classes/iterators_006.php: SUCCEEDED
    @PHP/classes/iterators_007.php: SUCCEEDED
    @PHP/classes/object_reference_001.php: SUCCEEDED
    @PHP/classes/private_001.php: SUCCEEDED
    @PHP/classes/private_002.php: SUCCEEDED
    @PHP/classes/private_003.php: SUCCEEDED
    @PHP/classes/private_003b.php: SUCCEEDED
    @PHP/classes/private_004.php: SUCCEEDED
    @PHP/classes/private_004b.php: SUCCEEDED
    @PHP/classes/private_005.php: SUCCEEDED
    @PHP/classes/private_005b.php: SUCCEEDED
    @PHP/classes/private_006.php: SUCCEEDED
    @PHP/classes/private_006b.php: SUCCEEDED
    @PHP/classes/private_007.php: SUCCEEDED
    @PHP/classes/private_007b.php: SUCCEEDED
    @PHP/classes/private_members.php: SUCCEEDED
    @PHP/classes/private_redeclare.php: SUCCEEDED
    @PHP/classes/protected_001.php: SUCCEEDED
    @PHP/classes/protected_001b.php: SUCCEEDED
    @PHP/classes/protected_002.php: SUCCEEDED
    @PHP/classes/serialize_001.php: SUCCEEDED
    @PHP/classes/singleton_001.php: SUCCEEDED
    @PHP/classes/static_properties_001.php: SUCCEEDED
    @PHP/classes/type_hinting_001.php: SUCCEEDED
    @PHP/classes/type_hinting_003.php: SUCCEEDED
    @PHP/classes/visibility_000c.php: SUCCEEDED
    @PHP/classes/visibility_001c.php: SUCCEEDED
    @PHP/classes/visibility_002c.php: SUCCEEDED
    @PHP/classes/visibility_003a.php: SUCCEEDED
    @PHP/classes/visibility_003c.php: SUCCEEDED
    @PHP/classes/visibility_004a.php: SUCCEEDED
    @PHP/classes/visibility_004b.php: SUCCEEDED
    @PHP/classes/visibility_004c.php: SUCCEEDED
    @PHP/classes/visibility_005.php: SUCCEEDED
    @PHP/classes/__call_001.php: SUCCEEDED
    @PHP/classes/__set_data_corrupt.php: SUCCEEDED
    @PHP/classes/__set__get_001.php: SUCCEEDED
    @PHP/classes/__set__get_004.php: SUCCEEDED
    @PHP/classes/__set__get_005.php: SUCCEEDED
    @PHP/date/bug17988.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2002-06-25 12:18:48
    2002-06-25 14:18:48
    2002-06-25 13:18:48
    2002-06-25 12:18:48
    2002-06-25 18:18:48
    2002-06-25 14:18:48
    2002-06-25 14:18:48
    2002-06-25 18:18:48
    2002-06-25 10:18:48
    2002-06-25 17:18:48
    2002-06-25 11:18:48
    2002-06-25 17:48:48
    2002-06-25 10:48:48
    2002-06-25 14:18:48
    2002-06-25 14:18:48
    2002-06-25 13:18:48
    2002-06-25 12:18:48
    2002-06-25 18:18:48
    2002-06-25 14:18:48
    2002-06-25 14:18:48
    2002-06-25 18:18:48
    2002-06-25 10:18:48
    2002-06-25 17:18:48
    2002-06-25 11:18:48
    2002-06-25 17:48:48
    2002-06-25 10:48:48
    @PHP/date/bug26317.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2003-11-19 17:20:42
    2003-11-19 17:20:42
    2003-11-19 17:20:42
    2003-11-19 16:20:42
    2003-11-19 16:20:42
    2003-11-19 16:20:42
    @PHP/date/bug26320.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2003-11-19 12:30:42
    2003-11-19 13:30:42
    2003-11-19 12:30:42
    2003-11-19 12:30:42
    @PHP/date/bug28088.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    The following line rightly shows the correct date time:
    04/04/04 2145
    But the following line fails to show the correct date time:
    04/03/04 2245
    The following line rightly shows the correct date time:
    04/04/04 2345
    But the following line fails to show the correct date time:
    04/04/04 0045
    @PHP/date/bug28599.php: SUCCEEDED
    @PHP/date/bug29150.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2005-06-19 22:00:00
    2005-06-20 00:00:00
    @PHP/date/bug29585.php: SUCCEEDED
    @PHP/date/bug29595.php: SUCCEEDED
    @PHP/date/bug33056.php: SUCCEEDED
    @PHP/date/bug33452.php: SUCCEEDED
    @PHP/date/bug33562.php: SUCCEEDED
    @PHP/date/bug33563.php: SUCCEEDED
    @PHP/date/bug33578.php: SUCCEEDED
    @PHP/date/bug33869.php: SUCCEEDED
    @PHP/date/bug34676.php: SUCCEEDED
    @PHP/date/bug34771.php: SUCCEEDED
    @PHP/date/bug35143.php: SUCCEEDED
    @PHP/date/bug35414.php: SUCCEEDED
    @PHP/date/bug35422.php: SUCCEEDED
    @PHP/date/bug35425.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    integer(42)
    integer(1)
    integer(1)
    integer(1)
    integer(1)
    integer(0)
    integer(0)
    integer(1)
    integer(1)
    integer(31)
    integer(1104537661)
    integer(6)
    integer(53)
    integer(5)
    integer(2005)
    integer(0)
    integer(3600)
    integer(292)
    integer(1)
    integer(1)
    integer(1)
    integer(1)
    integer(0)
    integer(0)
    integer(1)
    integer(1)
    integer(31)
    integer(1104559261)
    integer(6)
    integer(53)
    integer(5)
    integer(2005)
    integer(0)
    integer(-18000)
    @PHP/date/bug35456.php: SUCCEEDED
    @PHP/date/bug35624.php: SUCCEEDED
    @PHP/date/bug35630.php: SUCCEEDED
    @PHP/date/bug35699.php: SUCCEEDED
    @PHP/date/bug35705.php: SUCCEEDED
    @PHP/date/bug35885.php: SUCCEEDED
    @PHP/date/bug35887.php: SUCCEEDED
    @PHP/date/date.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    c: 2003-01-23T13:20:59+01:00
    r: Thu, 23 Jan 2003 13:20:59 +0100
    c: 2003-01-23T13:20:59+01:00
    r: Thu, 23 Jan 2003 13:20:59 +0100
    c: 2003-01-23T12:20:59+00:00
    r: Thu, 23 Jan 2003 12:20:59 +0000
    c: 2003-01-23T13:20:59+01:00
    r: Thu, 23 Jan 2003 13:20:59 +0100
    @PHP/date/date_create-1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\date\__input.txt on line 28
    SKIP
    @PHP/date/date_create-2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\date\__input.txt on line 6
    SKIP
    @PHP/date/date_default_timezone_get-3.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Europe/Prague
    America/Chicago
    Europe/Rome
    America/Chicago
    @PHP/date/date_modify-1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\date\__input.txt on line 6
    SKIP
    @PHP/date/date_modify-2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\date\__input.txt on line 6
    SKIP
    @PHP/date/default-timezone-1.php: SUCCEEDED
    @PHP/date/default-timezone-2.php: SUCCEEDED
    @PHP/date/format-negative-timestamp.php: SUCCEEDED
    @PHP/date/strtotime.php: SUCCEEDED
    @PHP/date/timezone-configuration.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    1119125744
    1119125744
    1119125744
    1119125744
    1119129344
    1119125744
    @PHP/doc_examples/test001.php: SUCCEEDED
    @PHP/doc_examples/test002.php: SUCCEEDED
    @PHP/doc_examples/test003.php: SUCCEEDED
    @PHP/doc_examples/test004.php: SUCCEEDED
    @PHP/doc_examples/test005.php: SUCCEEDED
    @PHP/doc_examples/test006.php: SUCCEEDED
    @PHP/doc_examples/test007.php: SUCCEEDED
    @PHP/doc_examples/test008.php: SUCCEEDED
    @PHP/doc_examples/test009.php: SUCCEEDED
    @PHP/doc_examples/test010.php: SUCCEEDED
    @PHP/doc_examples/test011.php: SUCCEEDED
    @PHP/doc_examples/test013.php: SUCCEEDED
    @PHP/doc_examples/test014.php: SUCCEEDED
    @PHP/doc_examples/test015.php: SUCCEEDED
    @PHP/doc_examples/test016.php: SUCCEEDED
    @PHP/doc_examples/test017.php: SUCCEEDED
    @PHP/doc_examples/test018.php: SUCCEEDED
    @PHP/doc_examples/test019.php: SUCCEEDED
    @PHP/doc_examples/test020.php: SUCCEEDED
    @PHP/doc_examples/test021.php: SUCCEEDED
    @PHP/doc_examples/test022.php: SUCCEEDED
    @PHP/doc_examples/test023.php: SUCCEEDED
    @PHP/doc_examples/test024.php: SUCCEEDED
    @PHP/doc_examples/test025.php: SUCCEEDED
    @PHP/doc_examples/test026.php: SUCCEEDED
    @PHP/doc_examples/test027.php: SUCCEEDED
    @PHP/doc_examples/test028.php: SUCCEEDED
    @PHP/doc_examples/test029.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ´┐Żauky
    �auky
    @PHP/doc_examples/test030.php: SUCCEEDED
    @PHP/doc_examples/test031.php: SUCCEEDED
    @PHP/doc_examples/test032.php: SUCCEEDED
    @PHP/doc_examples/test033.php: SUCCEEDED
    @PHP/doc_examples/test034.php: SUCCEEDED
    @PHP/doc_examples/test035.php: SUCCEEDED
    @PHP/doc_examples/test036.php: SUCCEEDED
    @PHP/doc_examples/test037.php: SUCCEEDED
    @PHP/doc_examples/test038.php: SUCCEEDED
    @PHP/doc_examples/test039.php: SUCCEEDED
    @PHP/doc_examples/test040.php: SUCCEEDED
    @PHP/doc_examples/test041.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    call_user_func():
    hello world!
    Strict Standards: call_user_func(): Non-static method MyClass::myCallbackMethod() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\doc_examples\__input.txt at expression on line 17, column 1.
    Hello World!Hello World!
    @PHP/doc_examples/test042.php: SUCCEEDED
    @PHP/doc_examples/test043.php: SUCCEEDED
    @PHP/doc_examples/test044.php: SUCCEEDED
    @PHP/doc_examples/test045.php: SUCCEEDED
    @PHP/doc_examples/test046.php: SUCCEEDED
    @PHP/doc_examples/test047.php: SUCCEEDED
    @PHP/doc_examples/test048.php: SUCCEEDED
    @PHP/doc_examples/test049.php: SUCCEEDED
    @PHP/doc_examples/test050.php: SUCCEEDED
    @PHP/doc_examples/test051.php: SUCCEEDED
    @PHP/doc_examples/test052.php: SUCCEEDED
    @PHP/doc_examples/test053.php: SUCCEEDED
    @PHP/doc_examples/test054.php: SUCCEEDED
    @PHP/doc_examples/test055.php: SUCCEEDED
    @PHP/doc_examples/test056.php: SUCCEEDED
    @PHP/doc_examples/test057.php: SUCCEEDED
    @PHP/doc_examples/test058.php: SUCCEEDED
    @PHP/doc_examples/test059.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    Deprecated: Assigning the return value of new by reference is deprecated in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\doc_examples\__input.txt on line 4
    NULL
    object(stdClass)#1 (0) {
    }
    NULL
    object(stdClass)#64844482 (0) {
    }
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\doc_examples\__input.txt(4,5): warning PHP0181: Assigning the return value of new by reference is deprecated
    
    @PHP/doc_examples/test060.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    Deprecated: Assigning the return value of new by reference is deprecated in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\doc_examples\__input.txt on line 9
    Static object: NULL
    Static object: NULL
    
    Static object: NULL
    Static object: object(stdClass)#3 (1) {
      ["property"]=>
      int(1)
    }
    Static object: NULL
    Static object: NULL
    
    Static object: NULL
    Static object: object(stdClass)#21224086 (1) {
      ["property"]=>
      int(1)
    }
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\doc_examples\__input.txt(9,9): warning PHP0181: Assigning the return value of new by reference is deprecated
    
    @PHP/doc_examples/test061.php: SUCCEEDED
    @PHP/doc_examples/test062.php: SUCCEEDED
    @PHP/doc_examples/test063.php: SUCCEEDED
    @PHP/doc_examples/test064.php: SUCCEEDED
    @PHP/doc_examples/test065.php: SUCCEEDED
    @PHP/doc_examples/test066.php: SUCCEEDED
    @PHP/doc_examples/test067.php: SUCCEEDED
    @PHP/doc_examples/test068.php: SUCCEEDED
    @PHP/doc_examples/test069.php: SUCCEEDED
    @PHP/doc_examples/test070.php: SUCCEEDED
    @PHP/doc_examples/test071.php: SUCCEEDED
    @PHP/doc_examples/test072.php: SUCCEEDED
    @PHP/doc_examples/test073.php: SUCCEEDED
    @PHP/doc_examples/test074.php: SUCCEEDED
    @PHP/doc_examples/test075.php: SUCCEEDED
    @PHP/doc_examples/test076.php: SUCCEEDED
    @PHP/doc_examples/test077.php: SUCCEEDED
    @PHP/doc_examples/test078.php: SUCCEEDED
    @PHP/doc_examples/test079.php: SUCCEEDED
    @PHP/doc_examples/test080.php: SUCCEEDED
    @PHP/doc_examples/test081.php: SUCCEEDED
    @PHP/doc_examples/test082.php: SUCCEEDED
    @PHP/doc_examples/test083.php: SUCCEEDED
    @PHP/doc_examples/test084.php: SUCCEEDED
    @PHP/doc_examples/test085.php: SUCCEEDED
    @PHP/doc_examples/test086.php: SUCCEEDED
    @PHP/doc_examples/test087.php: SUCCEEDED
    @PHP/doc_examples/test088.php: SUCCEEDED
    @PHP/doc_examples/test089.php: SUCCEEDED
    @PHP/doc_examples/test090.php: SUCCEEDED
    @PHP/doc_examples/test091.php: SUCCEEDED
    @PHP/doc_examples/test092.php: SUCCEEDED
    @PHP/doc_examples/test093.php: SUCCEEDED
    @PHP/doc_examples/test094.php: SUCCEEDED
    @PHP/doc_examples/test095.php: SUCCEEDED
    @PHP/doc_examples/test096.php: SUCCEEDED
    @PHP/doc_examples/test097.php: SUCCEEDED
    @PHP/doc_examples/test098.php: SUCCEEDED
    @PHP/doc_examples/test099.php: SUCCEEDED
    @PHP/doc_examples/test100.php: SUCCEEDED
    @PHP/doc_examples/test102.php: SUCCEEDED
    @PHP/doc_examples/test103.php: SUCCEEDED
    @PHP/doc_examples/test104.php: SUCCEEDED
    @PHP/doc_examples/test105.php: SUCCEEDED
    @PHP/doc_examples/test107.php: SUCCEEDED
    @PHP/doc_examples/test108.php: SUCCEEDED
    @PHP/doc_examples/test109.php: SUCCEEDED
    @PHP/doc_examples/test110.php: SUCCEEDED
    @PHP/doc_examples/test111.php: SUCCEEDED
    @PHP/doc_examples/test112.php: SUCCEEDED
    @PHP/doc_examples/test113.php: SUCCEEDED
    @PHP/doc_examples/test114.php: SUCCEEDED
    @PHP/doc_examples/test115.php: SUCCEEDED
    @PHP/doc_examples/test116.php: SUCCEEDED
    @PHP/doc_examples/test117.php: SUCCEEDED
    @PHP/doc_examples/test118.php: SUCCEEDED
    @PHP/doc_examples/test119.php: SUCCEEDED
    @PHP/doc_examples/test120.php: SUCCEEDED
    @PHP/doc_examples/test121.php: SUCCEEDED
    @PHP/doc_examples/test122.php: SUCCEEDED
    @PHP/doc_examples/test123.php: SUCCEEDED
    @PHP/doc_examples/test124.php: SUCCEEDED
    @PHP/doc_examples/test125.php: SUCCEEDED
    @PHP/doc_examples/test126.php: SUCCEEDED
    @PHP/doc_examples/test127.php: SUCCEEDED
    @PHP/doc_examples/test128.php: SUCCEEDED
    @PHP/doc_examples/test129.php: SUCCEEDED
    @PHP/doc_examples/test130.php: SUCCEEDED
    @PHP/doc_examples/test131.php: SUCCEEDED
    @PHP/doc_examples/test132.php: SUCCEEDED
    @PHP/doc_examples/test133.php: SUCCEEDED
    @PHP/doc_examples/test134.php: SUCCEEDED
    @PHP/doc_examples/test136.php: SUCCEEDED
    @PHP/doc_examples/test137.php: SUCCEEDED
    @PHP/doc_examples/test138.php: SUCCEEDED
    @PHP/doc_examples/test139.php: SUCCEEDED
    @PHP/doc_examples/test148.php: SUCCEEDED
    @PHP/doc_examples/test149.php: SUCCEEDED
    @PHP/doc_examples/test150.php: SUCCEEDED
    @PHP/doc_examples/test151.php: SUCCEEDED
    @PHP/doc_examples/test152.php: SUCCEEDED
    @PHP/doc_examples/test153.php: SUCCEEDED
    @PHP/doc_examples/test154.php: SUCCEEDED
    @PHP/doc_examples/test155.php: SUCCEEDED
    @PHP/doc_examples/test156.php: SUCCEEDED
    @PHP/doc_examples/test158.php: SUCCEEDED
    @PHP/lang/001.php: SUCCEEDED
    @PHP/lang/002.php: SUCCEEDED
    @PHP/lang/003.php: SUCCEEDED
    @PHP/lang/004.php: SUCCEEDED
    @PHP/lang/005.php: SUCCEEDED
    @PHP/lang/006.php: SUCCEEDED
    @PHP/lang/007.php: SUCCEEDED
    @PHP/lang/008.php: SUCCEEDED
    @PHP/lang/009.php: SUCCEEDED
    @PHP/lang/010.php: SUCCEEDED
    @PHP/lang/011.php: SUCCEEDED
    @PHP/lang/012.php: SUCCEEDED
    @PHP/lang/013.php: SUCCEEDED
    @PHP/lang/014.php: SUCCEEDED
    @PHP/lang/015.php: SUCCEEDED
    @PHP/lang/016.php: SUCCEEDED
    @PHP/lang/017.php: SUCCEEDED
    @PHP/lang/018.php: SUCCEEDED
    @PHP/lang/019.php: SUCCEEDED
    @PHP/lang/020.php: SUCCEEDED
    @PHP/lang/021.php: SUCCEEDED
    @PHP/lang/022.php: SUCCEEDED
    @PHP/lang/023.php: SUCCEEDED
    @PHP/lang/024.php: SUCCEEDED
    @PHP/lang/025.php: SUCCEEDED
    @PHP/lang/026.php: SUCCEEDED
    @PHP/lang/027.php: SUCCEEDED
    @PHP/lang/028.php: SUCCEEDED
    @PHP/lang/030.php: SUCCEEDED
    @PHP/lang/032.php: SUCCEEDED
    @PHP/lang/036.php: SUCCEEDED
    @PHP/lang/037.php: SUCCEEDED
    @PHP/lang/038.php: SUCCEEDED
    @PHP/lang/039.php: SUCCEEDED
    @PHP/lang/040.php: SUCCEEDED
    @PHP/lang/bison1.php: SUCCEEDED
    @PHP/lang/bug17115.php: SUCCEEDED
    @PHP/lang/bug18872.php: SUCCEEDED
    @PHP/lang/bug19943.php: SUCCEEDED
    @PHP/lang/bug20175.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    Deprecated: Assigning the return value of new by reference is deprecated in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\lang\__input.txt on line 110
    foo_static()
    foo_global()
    foo:1
    foo_static()
    foo:1
    bar_static()
    bar_global()
    bar:1
    bar_static()
    bar:1
    wow_static()
    wow_global()
    wow:1
    wow_static()
    wow:1
    oop_test()
    oop_static()
    oop_class()
    oop:1
    oop_static()
    oop:1
    oop_test()
    oop_static()
    oop:1
    foo_static()
    foo_global()
    foo:1
    foo_static()
    foo:1
    bar_static()
    bar_global()
    bar:1
    bar_static()
    bar_global()
    bar:2
    wow_static()
    wow_global()
    wow:1
    wow_static()
    wow:1
    oop_test()
    oop_static()
    oop_class()
    oop:1
    oop_static()
    oop:1
    oop_test()
    oop_static()
    oop:1
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\lang\__input.txt(110,4): warning PHP0181: Assigning the return value of new by reference is deprecated
    
    @PHP/lang/bug21094.php: SUCCEEDED
    @PHP/lang/bug21600.php: SUCCEEDED
    @PHP/lang/bug21669.php: SUCCEEDED
    @PHP/lang/bug21849.php: SUCCEEDED
    @PHP/lang/bug21961.php: SUCCEEDED
    @PHP/lang/bug22231.php: SUCCEEDED
    @PHP/lang/bug22367.php: SUCCEEDED
    @PHP/lang/bug22510.php: SUCCEEDED
    @PHP/lang/bug22592.php: SUCCEEDED
    @PHP/lang/bug22690.php: SUCCEEDED
    @PHP/lang/bug23279.php: SUCCEEDED
    @PHP/lang/bug23384.php: SUCCEEDED
    @PHP/lang/bug23489.php: SUCCEEDED
    @PHP/lang/bug23524.php: SUCCEEDED
    @PHP/lang/bug23922.php: SUCCEEDED
    @PHP/lang/bug24054.php: SUCCEEDED
    @PHP/lang/bug24396.php: SUCCEEDED
    @PHP/lang/bug24403.php: SUCCEEDED
    @PHP/lang/bug24436.php: SUCCEEDED
    @PHP/lang/bug24499.php: SUCCEEDED
    @PHP/lang/bug24640.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    double(1700000000000000089258092433847514422797596587883870563356951996370064178581143932836831337636761368874297554515902592900802289500112731978596146714137401870842258241575178866354311397451139753100927220499450359906637902366244989496126909662726242240784739940994096632824796638102733857671280980918272.0000000000)
    1.7E+300
    
    ------
    double(0.0000000000)
    1.7E-300
    
    ------
    double(17000000000000001584208052028780237480128823455860622330108867175329927830437888.0000000000)
    1.7E+79
    
    ------
    double(0.0000000000)
    1.7E-79
    
    ------
    double(169999999999999996096025832433329868941658043870400163508258284150340918121070592.0000000000)
    1.7E+80
    
    ------
    double(0.0000000000)
    1.7E-80
    
    ------
    double(1700000000000000013616404158611892038375594280539217794530130541777964808366194688.0000000000)
    1.7E+81
    
    ------
    double(0.0000000000)
    1.7E-81
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    1.6999810742106E-319
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    1.7000798873397E-320
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    1.6995858216939E-321
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    0
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    0
    
    ------
    double(1700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+300
    
    ------
    double(0.0000000000)
    1.70000000000003E-300
    
    ------
    double(17000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+79
    
    ------
    double(0.0000000000)
    1.70000000000001E-79
    
    ------
    double(170000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+80
    
    ------
    double(0.0000000000)
    1.70000000000001E-80
    
    ------
    double(1700000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+81
    
    ------
    double(0.0000000000)
    1.70000000000001E-81
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    1.69998107421056E-319
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    1.70007988733973E-320
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    1.69464516523548E-321
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    0
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    0
    
    ------
    @PHP/lang/bug24652.php: SUCCEEDED
    @PHP/lang/bug24658.php: SUCCEEDED
    @PHP/lang/bug24783.php: SUCCEEDED
    @PHP/lang/bug24926.php: SUCCEEDED
    @PHP/lang/bug25547.php: SUCCEEDED
    @PHP/lang/bug25652.php: SUCCEEDED
    @PHP/lang/bug25922.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Undefined index here: 'error'
    Undefined index here: ''
    @PHP/lang/bug26182.php: SUCCEEDED
    @PHP/lang/bug26696.php: SUCCEEDED
    @PHP/lang/bug26866.php: SUCCEEDED
    @PHP/lang/bug26869.php: SUCCEEDED
    @PHP/lang/bug27354.php: SUCCEEDED
    @PHP/lang/bug27439.php: SUCCEEDED
    @PHP/lang/bug27535.php: SUCCEEDED
    @PHP/lang/bug28213.php: SUCCEEDED
    @PHP/lang/bug28800.php: SUCCEEDED
    @PHP/lang/bug29566.php: SUCCEEDED
    @PHP/lang/bug29893.php: SUCCEEDED
    @PHP/lang/bug29944.php: SUCCEEDED
    @PHP/lang/bug30638.php: SUCCEEDED
    @PHP/lang/bug30726.php: SUCCEEDED
    @PHP/lang/bug30862.php: SUCCEEDED
    @PHP/lang/bug32924.php: SUCCEEDED
    @PHP/lang/bug35382.php: SUCCEEDED
    @PHP/lang/bug7515.php: SUCCEEDED
    @PHP/lang/each_binary_safety.php: SUCCEEDED
    @PHP/lang/error_2_exception_001.php: SUCCEEDED
    @PHP/lang/foreach_with_object_001.php: SUCCEEDED
    @PHP/lang/foreach_with_references_001.php: SUCCEEDED
    @PHP/lang/type_hints_001.php: SUCCEEDED
    @PHP/standard/array/001.php: SUCCEEDED
    @PHP/standard/array/003.php: SUCCEEDED
    @PHP/standard/array/004.php: SUCCEEDED
    @PHP/standard/array/005.php: SUCCEEDED
    @PHP/standard/array/008.php: SUCCEEDED
    @PHP/standard/array/array_change_key_case.php: SUCCEEDED
    @PHP/standard/array/array_chunk.php: SUCCEEDED
    @PHP/standard/array/array_count_values.php: SUCCEEDED
    @PHP/standard/array/array_diff_1.php: SUCCEEDED
    @PHP/standard/array/array_diff_key.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ------ Test 1 --------
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 2 --------
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 3 --------
    array(6) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [2]=>
      int(4)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [2]=>
      int(4)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 4 --------
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 5 --------
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 6 --------
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 7 --------
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    ------ Test 8 --------
    array(6) {
      [0]=>
      int(0)
      [7]=>
      int(14)
      [2]=>
      int(4)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [0]=>
      int(0)
      [7]=>
      int(14)
      [2]=>
      int(4)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 9 --------
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    ------ Test 1 --------
    array(4) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(4) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 2 --------
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 3 --------
    array(6) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [2]=>
      &int(4)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [2]=>
      &int(4)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 4 --------
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 5 --------
    array(4) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(4) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 6 --------
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 7 --------
    array(3) {
      [7]=>
      &int(14)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
    }
    array(3) {
      [7]=>
      &int(14)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
    }
    ------ Test 8 --------
    array(6) {
      [0]=>
      &int(0)
      [7]=>
      &int(14)
      [2]=>
      &int(4)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [0]=>
      &int(0)
      [7]=>
      &int(14)
      [2]=>
      &int(4)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 9 --------
    array(3) {
      [7]=>
      &int(14)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
    }
    array(3) {
      [7]=>
      &int(14)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
    }
    @PHP/standard/array/array_intersect_key.php: SUCCEEDED
    @PHP/standard/array/array_sum.php: SUCCEEDED
    @PHP/standard/array/array_walk_recursive.php: SUCCEEDED
    @PHP/standard/array/bug12776.php: SUCCEEDED
    @PHP/standard/array/bug14580.php: SUCCEEDED
    @PHP/standard/array/bug20381.php: SUCCEEDED
    @PHP/standard/array/bug20865.php: SUCCEEDED
    @PHP/standard/array/bug21182.php: SUCCEEDED
    @PHP/standard/array/bug21918.php: SUCCEEDED
    @PHP/standard/array/bug21998.php: SUCCEEDED
    @PHP/standard/array/bug22088.php: SUCCEEDED
    @PHP/standard/array/bug22463.php: SUCCEEDED
    @PHP/standard/array/bug23581.php: SUCCEEDED
    @PHP/standard/array/bug23788.php: SUCCEEDED
    @PHP/standard/array/bug24198.php: SUCCEEDED
    @PHP/standard/array/bug24220.php: SUCCEEDED
    @PHP/standard/array/bug24766.php: SUCCEEDED
    @PHP/standard/array/bug24897.php: SUCCEEDED
    @PHP/standard/array/bug24980.php: SUCCEEDED
    @PHP/standard/array/bug25359.php: SUCCEEDED
    @PHP/standard/array/bug25708.php: SUCCEEDED
    @PHP/standard/array/bug25758.php: SUCCEEDED
    @PHP/standard/array/bug26458.php: SUCCEEDED
    @PHP/standard/array/bug28974.php: SUCCEEDED
    @PHP/standard/array/bug29493.php: SUCCEEDED
    @PHP/standard/array/bug30266.php: SUCCEEDED
    @PHP/standard/array/bug30833.php: SUCCEEDED
    @PHP/standard/array/bug31158.php: SUCCEEDED
    @PHP/standard/array/bug31213.php: SUCCEEDED
    @PHP/standard/array/bug32021.php: SUCCEEDED
    @PHP/standard/array/bug33382.php: SUCCEEDED
    @PHP/standard/array/bug33989.php: SUCCEEDED
    @PHP/standard/array/bug34227.php: SUCCEEDED
    @PHP/standard/array/bug34982.php: SUCCEEDED
    @PHP/standard/array/bug35014.php: SUCCEEDED
    @PHP/standard/array/bug35022.php: SUCCEEDED
    @PHP/standard/array/bug35821.php: SUCCEEDED
    @PHP/standard/array/count_recursive.php: SUCCEEDED
    @PHP/standard/array/locale_sort.php: SUCCEEDED
    @PHP/standard/array/range.php: SUCCEEDED
    @PHP/standard/assert/assert.php: SUCCEEDED
    @PHP/standard/general_functions/001.php: SUCCEEDED
    @PHP/standard/general_functions/002.php: SUCCEEDED
    @PHP/standard/general_functions/003.php: SUCCEEDED
    @PHP/standard/general_functions/004.php: SUCCEEDED
    @PHP/standard/general_functions/005.php: SUCCEEDED
    @PHP/standard/general_functions/006.php: SUCCEEDED
    @PHP/standard/general_functions/007.php: SUCCEEDED
    @PHP/standard/general_functions/009.php: SUCCEEDED
    @PHP/standard/general_functions/bug25038.php: SUCCEEDED
    @PHP/standard/general_functions/bug27678.php: SUCCEEDED
    @PHP/standard/general_functions/bug29038.php: SUCCEEDED
    @PHP/standard/general_functions/bug31190.php: SUCCEEDED
    @PHP/standard/general_functions/bug32647.php: SUCCEEDED
    @PHP/standard/general_functions/bug35229.php: SUCCEEDED
    @PHP/standard/general_functions/is_resource.php: SUCCEEDED
    @PHP/standard/math/abs.php: SUCCEEDED
    @PHP/standard/math/bug24142.php: SUCCEEDED
    @PHP/standard/math/bug25694.php: SUCCEEDED
    @PHP/standard/math/bug27646.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    double(INF-INF)
    'd:-INF;'
    double(INF-INF)
    double(INF-INF)
    'd:INF;'
    double(INF-INF)
    double(NaNInfini)
    'd:NAN;'
    double(NaNInfini)
    double(-Infinity)
    'd:-INF;'
    double(-Infinity)
    double(Infinity)
    'd:INF;'
    double(Infinity)
    double(NaN)
    'd:NAN;'
    double(NaN)
    @PHP/standard/math/bug30069.php: SUCCEEDED
    @PHP/standard/math/bug30695.php: SUCCEEDED
    @PHP/standard/math/floorceil.php: SUCCEEDED
    @PHP/standard/math/hexdec.php: SUCCEEDED
    @PHP/standard/math/log.php: SUCCEEDED
    @PHP/standard/math/pow.php: SUCCEEDED
    @PHP/standard/math/round.php: SUCCEEDED
    @PHP/standard/reg/001.php: SUCCEEDED
    @PHP/standard/reg/002.php: SUCCEEDED
    @PHP/standard/reg/003.php: SUCCEEDED
    @PHP/standard/reg/004.php: SUCCEEDED
    @PHP/standard/reg/005.php: SUCCEEDED
    @PHP/standard/reg/006.php: SUCCEEDED
    @PHP/standard/reg/007.php: SUCCEEDED
    @PHP/standard/reg/008.php: SUCCEEDED
    @PHP/standard/reg/009.php: SUCCEEDED
    @PHP/standard/reg/010.php: SUCCEEDED
    @PHP/standard/reg/011.php: SUCCEEDED
    @PHP/standard/reg/012.php: SUCCEEDED
    @PHP/standard/reg/013.php: SUCCEEDED
    @PHP/standard/reg/014.php: SUCCEEDED
    @PHP/standard/reg/015.php: SUCCEEDED
    @PHP/standard/reg/016.php: SUCCEEDED
    @PHP/standard/serialize/001.php: SUCCEEDED
    @PHP/standard/serialize/002.php: SUCCEEDED
    @PHP/standard/serialize/003.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    d:100;
    double(100.0000000000)
    
    d:51999999999999996980101120;
    double(51999999999999996980101120.0000000000)
    
    d:8.9999999999999995265585574287341141808127531476202420890331268310546875E-9;
    double(0.0000000090)
    d:100;
    double(100.0000000000)
    
    d:5.2000000000000006E+25;
    double(52000000000000000000000000.0000000000)
    
    d:9.0000000000000045E-09;
    double(0.0000000090)
    @PHP/standard/serialize/004.php: SUCCEEDED
    @PHP/standard/serialize/005.php: SUCCEEDED
    @PHP/standard/serialize/006.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    'O:3:"´┐Ż":1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    object
    {
      '´┐Ż' => '´┐Ż'
    }
    'a:1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    array
    {
      '´┐Ż' => '´┐Ż'
    }
    'O:3:"´┐Ż":1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    object
    {
      'ďż˝' => '´┐Ż'
    }
    'a:1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    array
    {
      'ďż˝' => '´┐Ż'
    }
    @PHP/standard/serialize/bug14293.php: SUCCEEDED
    @PHP/standard/serialize/bug21957.php: SUCCEEDED
    @PHP/standard/serialize/bug23298.php: SUCCEEDED
    @PHP/standard/serialize/bug24063.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0.1 0.1
    0.01 0.01
    0.001 0.001
    0.0001 0.0001
    1.0E-5 1.0E-5
    1.0E-6 1.0E-6
    1.0E-7 1.0E-7
    1.0E-8 1.0E-8
    1.0E-9 1.0E-9
    0.1 0.1
    0.01 0.01
    0.001 0.001
    0.0001 0.0001
    1E-05 1E-05
    1E-06 1E-06
    1E-07 1E-07
    1E-08 1E-08
    1E-09 1E-09
    @PHP/standard/serialize/bug25378.php: SUCCEEDED
    @PHP/standard/serialize/bug26762.php: SUCCEEDED
    @PHP/standard/serialize/bug27469.php: SUCCEEDED
    @PHP/standard/serialize/bug28325.php: SUCCEEDED
    @PHP/standard/serialize/bug30234.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    FALSE
    FALSE
    __autoload(Autoload_Implements)
    object [invalid]
    FALSE
    FALSE
    FALSE
    FALSE
    TRUE
    __autoload(Autoload_Implements)
    object [invalid]
    FALSE
    FALSE
    TRUE
    @PHP/standard/serialize/bug31402.php: SUCCEEDED
    @PHP/standard/serialize/bug31442.php: SUCCEEDED
    @PHP/standard/strings/add-and-stripcslashes.php: SUCCEEDED
    @PHP/standard/strings/add-and-stripslashes.php: SUCCEEDED
    @PHP/standard/strings/basename.php: SUCCEEDED
    @PHP/standard/strings/bin2hex.php: SUCCEEDED
    @PHP/standard/strings/bug20108.php: SUCCEEDED
    @PHP/standard/strings/bug20169.php: SUCCEEDED
    @PHP/standard/strings/bug20261.php: SUCCEEDED
    @PHP/standard/strings/bug20927.php: SUCCEEDED
    @PHP/standard/strings/bug21338.php: SUCCEEDED
    @PHP/standard/strings/bug21453.php: SUCCEEDED
    @PHP/standard/strings/bug21730.php: SUCCEEDED
    @PHP/standard/strings/bug21744.php: SUCCEEDED
    @PHP/standard/strings/bug22008.php: SUCCEEDED
    @PHP/standard/strings/bug22187.php: SUCCEEDED
    @PHP/standard/strings/bug22224.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      0 => 
      object
      {
      }
      1 => 
      object
      {
      }
    }
    @PHP/standard/strings/bug22227.php: SUCCEEDED
    @PHP/standard/strings/bug22904.php: SUCCEEDED
    @PHP/standard/strings/bug23650.php: SUCCEEDED
    @PHP/standard/strings/bug23894.php: SUCCEEDED
    @PHP/standard/strings/bug24098.php: SUCCEEDED
    @PHP/standard/strings/bug24208.php: SUCCEEDED
    @PHP/standard/strings/bug24281.php: SUCCEEDED
    @PHP/standard/strings/bug25671.php: SUCCEEDED
    @PHP/standard/strings/bug25707.php: SUCCEEDED
    @PHP/standard/strings/bug26878.php: SUCCEEDED
    @PHP/standard/strings/bug26973.php: SUCCEEDED
    @PHP/standard/strings/bug27276.php: SUCCEEDED
    @PHP/standard/strings/bug27278.php: SUCCEEDED
    @PHP/standard/strings/bug27295.php: SUCCEEDED
    @PHP/standard/strings/bug27457.php: SUCCEEDED
    @PHP/standard/strings/bug27675.php: SUCCEEDED
    @PHP/standard/strings/bug28386.php: SUCCEEDED
    @PHP/standard/strings/bug33076.php: SUCCEEDED
    @PHP/standard/strings/chr_ord.php: SUCCEEDED
    @PHP/standard/strings/chunk_split.php: SUCCEEDED
    @PHP/standard/strings/count_chars.php: SUCCEEDED
    @PHP/standard/strings/crc32.php: SUCCEEDED
    @PHP/standard/strings/explode.php: SUCCEEDED
    @PHP/standard/strings/implode.php: SUCCEEDED
    @PHP/standard/strings/md5.php: SUCCEEDED
    @PHP/standard/strings/md5raw.php: SUCCEEDED
    @PHP/standard/strings/nl2br.php: SUCCEEDED
    @PHP/standard/strings/sha1.php: SUCCEEDED
    @PHP/standard/strings/sha1raw.php: SUCCEEDED
    @PHP/standard/strings/sprintf_f.php: SUCCEEDED
    @PHP/standard/strings/strcspn.php: SUCCEEDED
    @PHP/standard/strings/strings001.php: SUCCEEDED
    @PHP/standard/strings/strpos.php: SUCCEEDED
    @PHP/standard/strings/strrev.php: SUCCEEDED
    @PHP/standard/strings/strripos.php: SUCCEEDED
    @PHP/standard/strings/strrpos.php: SUCCEEDED
    @PHP/standard/strings/strspn.php: SUCCEEDED
    @PHP/standard/strings/strstr.php: SUCCEEDED
    @PHP/standard/strings/strtoupper.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    cfbfbdcfbfbdcfbfbd
    cfafbdcfafbdcfafbd
    @PHP/standard/strings/strtr.php: SUCCEEDED
    @PHP/standard/strings/strval.php: SUCCEEDED
    @PHP/standard/strings/str_repeat.php: SUCCEEDED
    @PHP/standard/strings/str_shuffle.php: SUCCEEDED
    @PHP/standard/strings/str_word_count.php: SUCCEEDED
    @PHP/standard/strings/substr_count.php: SUCCEEDED
    @PHP/standard/strings/substr_replace.php: SUCCEEDED
    @PHP/standard/strings/wordwrap.php: SUCCEEDED
    @PHP/standard/time/001.php: SUCCEEDED
    @PHP/standard/time/idate.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    U: 1043324459
    Y: 2003
    z: 22
    y: 3
    m: 1
    n: 1
    d: 23
    j: 23
    H: 13
    G: 13
    h: 1
    g: 1
    i: 20
    s: 59
    t: 31
    w: 4
    L: 0
    B: 556
    I: 0
    W: 4
    U: 1043324459
    Y: 2003
    z: 22
    y: 3
    m: 1
    n: 1
    d: 23
    j: 23
    H: 12
    G: 12
    h: 12
    g: 12
    i: 20
    s: 59
    t: 31
    w: 4
    L: 0
    B: 556
    I: 0
    W: 4
    @PHP/strings/001.php: SUCCEEDED
    @PHP/strings/002.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    fprintf test 1:abcde
    20
    printf test 1:simple string
    printf test 2:42
    printf test 3:3.333333
    printf test 4:3.3333333333
    printf test 5:2.50      
    printf test 6:2.50000000
    printf test 7:0000002.50
    printf test 8:<                 foo>
    printf test 9:<bar                 >
    printf test 10: 123456789012345
    printf test 10:<h´┐Żyesterettsjustitiarius>
    printf test 11: 123456789012345678901234567890
    printf test 11:<    h´┐Żyesterettsjustitiarius>
    printf test 12:-12.34
    printf test 13:  -12
    printf test 14:@
    printf test 15:10101010
    printf test 16:aa
    printf test 17:AA
    printf test 18:        10101010
    printf test 19:              aa
    printf test 20:              AA
    printf test 21:0000000010101010
    printf test 22:00000000000000aa
    printf test 23:00000000000000AA
    printf test 24:abcde
    printf test 25:gazonk
    printf test 26:2 1
    printf test 27:3 1 2
    printf test 28:02  1
    printf test 29:2   1
    printf test 30:x
    vprintf test 1:2   1
    fprintf test 1:abcde
    20
    printf test 1:simple string
    printf test 2:42
    printf test 3:3.333333
    printf test 4:3.3333333333
    printf test 5:2.50      
    printf test 6:2.50000000
    printf test 7:0000002.50
    printf test 8:<                 foo>
    printf test 9:<bar                 >
    printf test 10: 123456789012345
    printf test 10:<h�yesterettsjustitiarius>
    printf test 11: 123456789012345678901234567890
    printf test 11:<    h�yesterettsjustitiarius>
    printf test 12:-12.34
    printf test 13:  -12
    printf test 14:@
    printf test 15:10101010
    printf test 16:aa
    printf test 17:AA
    printf test 18:        10101010
    printf test 19:              aa
    printf test 20:              AA
    printf test 21:0000000010101010
    printf test 22:00000000000000aa
    printf test 23:00000000000000AA
    printf test 24:abcde
    printf test 25:gazonk
    printf test 26:2 1
    printf test 27:3 1 2
    printf test 28:02  1
    printf test 29:2   1
    printf test 30:x
    vprintf test 1:2   1
    @PHP/strings/bug22592.php: SUCCEEDED
    Arrays/array1.php: SUCCEEDED
    Arrays/array_diff_intersect.php: SUCCEEDED
    Arrays/array_diff_intersect2.php: SUCCEEDED
    Arrays/array_diff_intersect3.php: SUCCEEDED
    Arrays/array_filter%20false%20entries%20%2322016.php: SUCCEEDED
    Arrays/array_instantiated.php: SUCCEEDED
    Arrays/array_map.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Array
    (
        [0] => Array
            (
                [0] => 1
                [1] => A
                [2] => 0
            )
    
        [1] => Array
            (
                [0] => 2
                [1] => B
                [2] => 0
            )
    
        [2] => Array
            (
                [0] => 3
                [1] => C
                [2] => 
            )
    
    )
    Array
    (
        [0] => 1 A 0
        [1] => 2 B 0
        [2] => 3 C 
    )
    Array
    (
        [A] => 2
        [10] => 3
    )
    Array
    (
        [0] => 1
        [1] => 2
        [2] => 3
    )
    Array
    (
        [0] => A
        [1] => B
        [2] => C
    )
    Array
    (
        [0] => 0
        [1] => 0
    )
    Array
    (
        [A] => 1
        [10] => 2
    )
    Array
    (
        [0] => Array
            (
                [0] => 1
                [1] => A
                [2] => 0
            )
    
        [1] => Array
            (
                [0] => 2
                [1] => B
                [2] => 0
            )
    
        [2] => Array
            (
                [0] => 3
                [1] => C
                [2] => 
            )
    
    )
    Array
    (
        [0] => 1 A 0
        [1] => 2 B 0
        [2] => 3 C 
    )
    Array
    (
        [A] => 2
        [10] => 3
    )
    Array
    (
        [0] => 1
        [1] => 2
        [2] => 3
    )
    Array
    (
        [0] => A
        [1] => B
        [2] => C
    )
    Array
    (
        [0] => x
        [1] => x
    )
    Array
    (
        [A] => 1
        [10] => 2
    )
    Arrays/array_merge_recursive.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Array
    (
        [color] => Array
            (
                [favorite] => Array
                    (
                        [0] => red
                        [1] => green
                    )
    
                [0] => blue
            )
    
        [0] => Array
            (
                [0] => 1
                [1] => 2
                [2] => 3
            )
    
        [q] => Array
            (
                [0] => 
                [1] => 
                [2] => x
            )
    
        [1] => 10
        [2] => Array
            (
                [0] => 4
                [1] => 5
                [2] => 6
            )
    
    )
    Array
    (
        [a] => Array
            (
                [0] => 1
                [1] => 2
                [2] => 3
                [3] => e
            )
    
    )
    Array
    (
        [a] => Array
            (
                [0] => 1
                [1] => 2
                [2] => 3
                [3] => e
            )
    
    )
    Array
    (
        [a] => 1
        [b] => 2
    )
    Array
    (
        [a] => xxx
        [b] => 2
    )
    Array
    (
        [a] => Array
            (
                [a] => Array
                    (
                        [a] => Array
     *RECURSION*
                    )
    
                [0] => 1
                [1] => 2
                [2] => 3
            )
    
    )
    Array
    (
        [a] => Array
            (
                [b] => Array
                    (
                        [0] => 1
                        [1] => 1
                    )
    
                [c] => 1
                [d] => Array
                    (
                        [0] => 2
                        [1] => 3
                    )
    
            )
    
    )
    Array
    (
        [a] => Array
            (
                [0] => 
                [1] => 
            )
    
    )
    Array
    (
        [a] => Array
            (
                [0] => 
                [1] => 
            )
    
    )
    Array
    (
        [color] => Array
            (
                [favorite] => Array
                    (
                        [0] => red
                        [1] => green
                    )
    
                [0] => blue
            )
    
        [0] => Array
            (
                [0] => 1
                [1] => 2
                [2] => 3
            )
    
        [q] => Array
            (
                [0] => x
            )
    
        [1] => 10
        [2] => Array
            (
                [0] => 4
                [1] => 5
                [2] => 6
            )
    
    )
    Array
    (
        [a] => Array
            (
                [0] => 1
                [1] => 2
                [2] => 3
                [3] => e
            )
    
    )
    Array
    (
        [a] => Array
            (
                [0] => 1
                [1] => 2
                [2] => 3
                [3] => e
            )
    
    )
    Array
    (
        [a] => 1
        [b] => 2
    )
    Array
    (
        [a] => xxx
        [b] => 2
    )
    Array
    (
        [a] => Array
            (
                [a] => Array
                    (
                        [a] => Array [recursion]
    
    
                    )
    
                [0] => 1
                [1] => 2
                [2] => 3
            )
    
    )
    Array
    (
        [a] => Array
            (
                [b] => Array
                    (
                        [0] => 1
                        [1] => 1
                    )
    
                [c] => 1
                [d] => Array
                    (
                        [0] => 2
                        [1] => 3
                    )
    
            )
    
    )
    Array
    (
        [a] => Array
            (
            )
    
    )
    Array
    (
        [a] => Array
            (
            )
    
    )
    Arrays/array_op.php: SUCCEEDED
    Arrays/array_reduce1.php: SUCCEEDED
    Arrays/array_reduce2.php: SUCCEEDED
    Arrays/array_slice.php: SUCCEEDED
    Arrays/array_sumprod.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    float(8.3)
    float(0)
    int(6)
    int(6)
    float(4294967297)
    float(9.2233720282648E+18)
    bool(true)
    bool(false)
    float(-7.7)
    float(-38.4)
    int(6)
    int(6)
    int64(4294967297)
    int64(9223372028264841218)
    bool(true)
    bool(true)
    Arrays/array_unset_add.php: SUCCEEDED
    Arrays/array_unshift.php: SUCCEEDED
    Arrays/array_walk.php: SUCCEEDED
    Arrays/array_walk_recursive.php: SUCCEEDED
    Arrays/multisort.php: SUCCEEDED
    Arrays/multisort_empty.php: SUCCEEDED
    Arrays/nonarray%20access%20%2322019.php: SUCCEEDED
    Arrays/optimizations.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    3
    4
    5
    a
    b
    c
    
    Warning: strtolower() expects parameter 1 to be string, array given in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 15
    
    cablo
    3
    4
    5
    a
    b
    c
    array
    cablo
    Arrays/recursion.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    f1:
    array(2) {
      ["a"]=>
      array(5) {
        ["a"]=>
        &array(3) {
          ["a"]=>
          &array(3) {
            ["a"]=>
            *RECURSION*
            [0]=>
            string(1) "y"
            [1]=>
            string(1) "z"
          }
          [0]=>
          string(1) "y"
          [1]=>
          string(1) "z"
        }
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        string(1) "x"
      }
      [0]=>
      string(1) "w"
    }
    f2:
    array(1) {
      ["A"]=>
      &array(2) {
        ["a"]=>
        &array(2) {
          ["a"]=>
          *RECURSION*
          [0]=>
          string(1) "z"
        }
        [0]=>
        string(1) "z"
      }
    }
    f3:
    array(2) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) {
          [0]=>
          *RECURSION*
          [1]=>
          string(1) "z"
        }
        [1]=>
        string(1) "z"
      }
      [1]=>
      string(1) "z"
    }
    f4:
    
    Warning: array_merge_recursive(): recursion detected in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 37
    array(1) {
      ["a"]=>
      &array(3) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
      }
    }
    f5:
    array(1) {
      ["a"]=>
      array(6) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        int(1)
        [4]=>
        int(2)
        [5]=>
        int(3)
      }
    }
    f6:
    array(1) {
      ["a"]=>
      array(2) {
        [0]=>
        string(2) "xx"
        [1]=>
        int(2)
      }
    }
    f7:
    array(1) {
      ["a"]=>
      array(1) {
        ["a"]=>
        array(1) {
          ["a"]=>
          &array(1) {
            ["a"]=>
            &array(1) {
              ["a"]=>
              *RECURSION*
            }
          }
        }
      }
    }
    f1:
    array(2) {
      ["a"]=>
      array(5) {
        ["a"]=>
        &array(3) {
          ["a"]=>
          &array(3) [recursion]
          [0]=>
          string(1) "y"
          [1]=>
          string(1) "z"
        }
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        string(1) "x"
      }
      [0]=>
      string(1) "w"
    }
    f2:
    array(1) {
      ["A"]=>
      &array(2) {
        ["a"]=>
        &array(2) [recursion]
        [0]=>
        string(1) "z"
      }
    }
    f3:
    array(2) {
      [0]=>
      &array(2) [recursion]
      [1]=>
      string(1) "z"
    }
    f4:
    array(1) {
      ["a"]=>
      array(6) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        int(1)
        [4]=>
        int(2)
        [5]=>
        int(3)
      }
    }
    f5:
    array(1) {
      ["a"]=>
      array(6) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        int(1)
        [4]=>
        int(2)
        [5]=>
        int(3)
      }
    }
    f6:
    array(1) {
      ["a"]=>
      array(2) {
        [0]=>
        string(2) "xx"
        [1]=>
        int(2)
      }
    }
    f7:
    array(1) {
      ["a"]=>
      &array(1) {
        ["a"]=>
        &array(1) [recursion]
      }
    }
    Arrays/sort.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    sort regular:
    Array
    (
        [0] => 0
        [1] => 1
        [2] => 1
        [3] => 8
        [4] => 0x10
        [5] => 10x
        [6] => 20x
        [7] => ach0
        [8] => add1
        [9] => x10
        [10] => x2
    )
    
    sort numeric:
    Array
    (
        [0] => add1
        [1] => x2
        [2] => 0x10
        [3] => ach0
        [4] => 0
        [5] => x10
        [6] => 1
        [7] => 1
        [8] => 8
        [9] => 10x
        [10] => 20x
    )
    
    sort string:
    Array
    (
        [0] => 0
        [1] => 0x10
        [2] => 1
        [3] => 1
        [4] => 10x
        [5] => 20x
        [6] => 8
        [7] => ach0
        [8] => add1
        [9] => x10
        [10] => x2
    )
    
    sort locale:
    Array
    (
        [0] => 0
        [1] => 0x10
        [2] => 1
        [3] => 1
        [4] => 10x
        [5] => 20x
        [6] => 8
        [7] => ach0
        [8] => add1
        [9] => x10
        [10] => x2
    )
    
    ksort regular:
    Array
    (
        [x] => 8
        [z] => 1
        [0] => x10
        [1] => 10x
        [2b] => 1
        [2] => 20x
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [10a] => 0
    )
    
    ksort numeric:
    Array
    (
        [x] => 8
        [z] => 1
        [0] => x10
        [1] => 10x
        [2b] => 1
        [2] => 20x
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [10a] => 0
    )
    
    ksort string:
    Array
    (
        [0] => x10
        [1] => 10x
        [10a] => 0
        [2] => 20x
        [2b] => 1
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [x] => 8
        [z] => 1
    )
    
    ksort locale:
    Array
    (
        [0] => x10
        [1] => 10x
        [10a] => 0
        [2] => 20x
        [2b] => 1
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [x] => 8
        [z] => 1
    )
    
    asort regular:
    Array
    (
        [10a] => 0
        [2b] => 1
        [z] => 1
        [x] => 8
        [4] => 0x10
        [1] => 10x
        [2] => 20x
        [5] => ach0
        [6] => add1
        [0] => x10
        [3] => x2
    )
    
    asort numeric:
    Array
    (
        [6] => add1
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [10a] => 0
        [0] => x10
        [z] => 1
        [2b] => 1
        [x] => 8
        [1] => 10x
        [2] => 20x
    )
    
    asort string:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [z] => 1
        [2b] => 1
        [1] => 10x
        [2] => 20x
        [x] => 8
        [5] => ach0
        [6] => add1
        [0] => x10
        [3] => x2
    )
    
    asort locale:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [z] => 1
        [2b] => 1
        [1] => 10x
        [2] => 20x
        [x] => 8
        [5] => ach0
        [6] => add1
        [0] => x10
        [3] => x2
    )
    
    rsort regular:
    Array
    (
        [0] => x2
        [1] => x10
        [2] => add1
        [3] => ach0
        [4] => 20x
        [5] => 10x
        [6] => 0x10
        [7] => 8
        [8] => 1
        [9] => 1
        [10] => 0
    )
    
    rsort numeric:
    Array
    (
        [0] => 20x
        [1] => 10x
        [2] => 8
        [3] => 1
        [4] => 1
        [5] => ach0
        [6] => add1
        [7] => 0x10
        [8] => x2
        [9] => x10
        [10] => 0
    )
    
    rsort string:
    Array
    (
        [0] => x2
        [1] => x10
        [2] => add1
        [3] => ach0
        [4] => 8
        [5] => 20x
        [6] => 10x
        [7] => 1
        [8] => 1
        [9] => 0x10
        [10] => 0
    )
    
    rsort locale:
    Array
    (
        [0] => x2
        [1] => x10
        [2] => add1
        [3] => ach0
        [4] => 8
        [5] => 20x
        [6] => 10x
        [7] => 1
        [8] => 1
        [9] => 0x10
        [10] => 0
    )
    
    natsort:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [2b] => 1
        [z] => 1
        [x] => 8
        [1] => 10x
        [2] => 20x
        [5] => ach0
        [6] => add1
        [3] => x2
        [0] => x10
    )
    sort regular:
    Array
    (
        [0] => 0x10
        [1] => 10x
        [2] => 20x
        [3] => ach0
        [4] => add1
        [5] => x10
        [6] => 0
        [7] => x2
        [8] => 1
        [9] => 1
        [10] => 8
    )
    
    sort numeric:
    Array
    (
        [0] => x10
        [1] => 0
        [2] => x2
        [3] => ach0
        [4] => add1
        [5] => 1
        [6] => 1
        [7] => 8
        [8] => 10x
        [9] => 0x10
        [10] => 20x
    )
    
    sort string:
    Array
    (
        [0] => 0
        [1] => 0x10
        [2] => 1
        [3] => 1
        [4] => 10x
        [5] => 20x
        [6] => 8
        [7] => ach0
        [8] => add1
        [9] => x10
        [10] => x2
    )
    
    sort locale:
    Array
    (
        [0] => 0
        [1] => 0x10
        [2] => 1
        [3] => 1
        [4] => 10x
        [5] => 20x
        [6] => 8
        [7] => add1
        [8] => ach0
        [9] => x10
        [10] => x2
    )
    
    ksort regular:
    Array
    (
        [x] => 8
        [z] => 1
        [0] => x10
        [1] => 10x
        [2] => 20x
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [10a] => 0
        [2b] => 1
    )
    
    ksort numeric:
    Array
    (
        [x] => 8
        [z] => 1
        [0] => x10
        [1] => 10x
        [2b] => 1
        [2] => 20x
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [10a] => 0
    )
    
    ksort string:
    Array
    (
        [0] => x10
        [1] => 10x
        [10a] => 0
        [2] => 20x
        [2b] => 1
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [x] => 8
        [z] => 1
    )
    
    ksort locale:
    Array
    (
        [0] => x10
        [1] => 10x
        [10a] => 0
        [2] => 20x
        [2b] => 1
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [x] => 8
        [z] => 1
    )
    
    asort regular:
    Array
    (
        [4] => 0x10
        [1] => 10x
        [2] => 20x
        [5] => ach0
        [6] => add1
        [0] => x10
        [10a] => 0
        [3] => x2
        [z] => 1
        [2b] => 1
        [x] => 8
    )
    
    asort numeric:
    Array
    (
        [0] => x10
        [10a] => 0
        [3] => x2
        [5] => ach0
        [6] => add1
        [z] => 1
        [2b] => 1
        [x] => 8
        [1] => 10x
        [4] => 0x10
        [2] => 20x
    )
    
    asort string:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [z] => 1
        [2b] => 1
        [1] => 10x
        [2] => 20x
        [x] => 8
        [5] => ach0
        [6] => add1
        [0] => x10
        [3] => x2
    )
    
    asort locale:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [z] => 1
        [2b] => 1
        [1] => 10x
        [2] => 20x
        [x] => 8
        [6] => add1
        [5] => ach0
        [0] => x10
        [3] => x2
    )
    
    rsort regular:
    Array
    (
        [0] => 8
        [1] => 1
        [2] => 1
        [3] => x2
        [4] => x10
        [5] => 0
        [6] => add1
        [7] => ach0
        [8] => 20x
        [9] => 10x
        [10] => 0x10
    )
    
    rsort numeric:
    Array
    (
        [0] => 20x
        [1] => 0x10
        [2] => 10x
        [3] => 8
        [4] => 1
        [5] => 1
        [6] => x10
        [7] => 0
        [8] => x2
        [9] => ach0
        [10] => add1
    )
    
    rsort string:
    Array
    (
        [0] => x2
        [1] => x10
        [2] => add1
        [3] => ach0
        [4] => 8
        [5] => 20x
        [6] => 10x
        [7] => 1
        [8] => 1
        [9] => 0x10
        [10] => 0
    )
    
    rsort locale:
    Array
    (
        [0] => x2
        [1] => x10
        [2] => ach0
        [3] => add1
        [4] => 8
        [5] => 20x
        [6] => 10x
        [7] => 1
        [8] => 1
        [9] => 0x10
        [10] => 0
    )
    
    natsort:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [z] => 1
        [2b] => 1
        [x] => 8
        [1] => 10x
        [2] => 20x
        [5] => ach0
        [6] => add1
        [3] => x2
        [0] => x10
    )
    Arrays/usort.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    Array
    (
        [0] => 10
        [1] => 9
        [2] => 8
        [3] => 7
        [4] => 6
        [5] => 5
        [6] => 4
        [7] => 3
        [8] => 2
        [9] => 1
    )
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Array
    (
        [0] => 10
        [1] => 9
        [2] => 8
        [3] => 7
        [4] => 6
        [5] => 5
        [6] => 4
        [7] => 3
        [8] => 2
        [9] => 1
    )
    Arrays/lazy_copy/001.php: SUCCEEDED
    Arrays/lazy_copy/002.php: SUCCEEDED
    Arrays/lazy_copy/003.php: SUCCEEDED
    Arrays/lazy_copy/004.php: SUCCEEDED
    Arrays/lazy_copy/005.php: SUCCEEDED
    Arrays/lazy_copy/006.php: SUCCEEDED
    Bugs/class_incompletepart.php: SUCCEEDED
    Bugs/division-by-zero.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    DIVISION
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 6
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 8
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 10
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 12
    bool(false)
    MODULO
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 16
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 18
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 20
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 22
    bool(false)
    DIVISION
    bool(false)
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt at expression on line 10, column 2.
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt at expression on line 12, column 2.
    bool(false)
    MODULO
    bool(false)
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt at expression on line 20, column 2.
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt at expression on line 22, column 2.
    bool(false)
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt(6,10): warning PHP0150: Division by zero
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt(8,9): warning PHP0150: Division by zero
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt(16,10): warning PHP0150: Division by zero
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt(18,9): warning PHP0150: Division by zero
    
    Bugs/function-in-unknown-class.php: SUCCEEDED
    Bugs/if_if.php: SUCCEEDED
    Bugs/is_a_null_value.php: SUCCEEDED
    Bugs/obj_instantiated.php: SUCCEEDED
    Bugs/preg-named-groups.php: SUCCEEDED
    Bugs/preg-replace-advanced.php: SUCCEEDED
    Bugs/preg-replace-range.php: SUCCEEDED
    Bugs/preg-replace.php: SUCCEEDED
    Bugs/preg-this-dynamic.php: FAILED
    Script hung upNo errorsSuccess
    Expected test outputReal script output
    Unhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---> PHP.Core.Debug+AssertException: Assertion failed: 
       at PHP.Core.Debug.Fail(String message)
       at PHP.Core.Debug.Assert(Boolean condition)
       at PHP.Core.RelativePath.ParseCanonical(String relativePath)
       at PHP.Core.Emit.TransientAssemblyBuilder.Build(String sourceCode, SourceCodeDescriptor descriptor, EvalKinds kind, CompilationContext context, ScriptContext scriptContext, DTypeDesc referringType, NamingContext namingContext, Boolean completeSource)
       at PHP.Core.DynamicCode.EvalInternal(String prefix, String code, String suffix, EvalKinds kind, ScriptContext scriptContext, Dictionary`2 localVariables, DObject self, DTypeDesc referringType, SourceCodeDescriptor descriptor, Boolean entireFile, NamingContext namingContext)
       at PHP.Core.DynamicCode.Eval(String code, Boolean synthetic, ScriptContext context, Dictionary`2 definedVariables, DObject self, DTypeDesc referringType, String callerRelativeSourcePath, Int32 line, Int32 column, Int32 containerId, NamingContext namingContext)
       at PHP.Library.PerlRegExp.Evaluator.ReplaceCodeExecute(Match m)
       at System.Text.RegularExpressions.RegexReplacement.Replace(MatchEvaluator evaluator, Regex regex, String input, Int32 count, Int32 startat)
       at System.Text.RegularExpressions.Regex.Replace(String input, MatchEvaluator evaluator, Int32 count)
       at PHP.Library.PerlRegExp.ReplaceInternal(DObject self, Dictionary`2 definedVariables, PerlRegExpConverter converter, PhpCallback callback, String str, Int32 limit, SourceCodeDescriptor sourceCodeDesc, Int32& count)
       at PHP.Library.PerlRegExp.SimpleReplace(DObject self, Dictionary`2 definedVariables, Object pattern, String replacement, PhpCallback callback, Object data, Int32 limit, SourceCodeDescriptor descriptor, Int32& count)
       at PHP.Library.PerlRegExp.Replace(ScriptContext context, DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, PhpCallback callback, Object data, Int32 limit, Int32& count)
       at PHP.Library.PerlRegExp.Replace(ScriptContext context, DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, Object data)
       at PHP.Dynamic.PhpNetClassLibrary.preg_replace(Object , PhpStack )
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.CallInternal(Dictionary`2 localVariables, NamingContext namingContext, Object name, String fallbackName, DRoutineDesc& routineHint, ScriptContext context)
       at PHP.Core.ScriptContext.CallVoid(Dictionary`2 localVariables, NamingContext namingContext, Object name, String fallbackName, DRoutineDesc& routineHint, ScriptContext context)
       at <__input.txt>.a.a(ScriptContext ) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt:line 17
       at <__input.txt>.a.<Mediator>(ScriptContext )
       at <__input.txt>.a.a(Object instance, PhpStack stack)
       at <__input.txt>.<Script>.<Main>(ScriptContext <context>, Dictionary`2 <locals>, DObject <self>, DTypeDesc <includer>, Boolean <request>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt:line 19
       at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)
       at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)
       --- End of inner exception stack trace ---
       at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)
       at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)
       at <Global>.Run(String[] )
    
    Bugs/preg-this-dynamic2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    foo: ahoj
    foo: lidi
    foo: rozkladame
    foo: ahoj
    foo: lidi
    foo: rozkladame
    foo: ahoj
    foo: lidi
    foo: rozkladame
    
    Notice: Undefined variable: this.
    
    Error: Call to a member function foo() on a non-object.
    Bugs/preg-this.php: SUCCEEDED
    Bugs/preg-ungreedy-bugs.php: SUCCEEDED
    Bugs/preg-unkn.php: SUCCEEDED
    Bugs/trigger_error%20line%20number%20%232787.php: SUCCEEDED
    CLR/BaseTypes.php: SUCCEEDED
    CLR/ClrEvent.php: SUCCEEDED
    CLR/ConditionalDecls.php: SUCCEEDED
    CLR/ConditionalDecls2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    object(T<:C:>)(0) {
    }
    object(T<:C:>)#39434786 (0) {
    }
    CLR/foreach.php: SUCCEEDED
    CLR/handle_enum.php: SUCCEEDED
    CLR/Inheritance1.php: FAILED
    Phalanger misbehaviour while compiling [file] sectionSee belowSuccess
    Expected test outputReal script output
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(3,2): error PHP2031: Circular interface inheritance dependency involving 'I4' and 'I1'
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(6,2): (related location)
    
    CLR/Inheritance2.php: FAILED
    Phalanger misbehaviour while compiling [file] sectionSee belowSuccess
    Expected test outputReal script output
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(3,2): error PHP2031: Circular interface inheritance dependency involving 'J4' and 'J1'
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(6,2): (related location)
    
    CLR/Inheritance3.php: FAILED
    Phalanger misbehaviour while compiling [file] sectionSee belowSuccess
    Expected test outputReal script output
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(3,2): error PHP2031: Circular interface inheritance dependency involving 'J5' and 'J5'
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(3,2): (related location)
    
    CLR/Inheritance4.php: FAILED
    Phalanger misbehaviour while compiling [file] sectionSee belowSuccess
    Expected test outputReal script output
    error PHP2007: Internal error! 
    Please, report this bug via http://www.codeplex.com/WorkItem/List.aspx?ProjectName=Phalanger.
    Additional information: 
    Could not load type '<__input.txt>.J`1' from assembly 'Inheritance4_file, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' because it has recursive generic definition.
       at System.Reflection.Emit.TypeBuilder.TermCreateClass(RuntimeModule module, Int32 tk, ObjectHandleOnStack type)
       at System.Reflection.Emit.TypeBuilder.CreateTypeNoLock()
       at System.Reflection.Emit.TypeBuilder.CreateType()
       at PHP.Core.Reflection.PhpType.Bake()
       at PHP.Core.Reflection.ScriptCompilationUnit.Bake()
       at PHP.Core.Reflection.InclusionGraphBuilder.EmitAllUnits(CodeGenerator codeGenerator)
       at PHP.Core.Emit.ScriptAssemblyBuilder.CompileScripts(IEnumerable`1 sourceFiles, String duckPath, String duckNamespace, CompilationContext context)
       at PHP.Core.Emit.ScriptAssemblyBuilder.Build(IEnumerable`1 sourceFiles, CompilationContext context)
       at PHP.Core.ApplicationCompiler.Compile(ApplicationContext applicationContext, CompilerConfiguration config, ErrorSink errorSink, CompilationParameters ps)
    
    
    CLR/Inheritance5.php: SUCCEEDED
    CLR/Inheritance6.php: SUCCEEDED
    CLR/Inheritance7.php: SUCCEEDED
    CLR/Inheritance8.php: SUCCEEDED
    CLR/Inheritance9.php: FAILED
    Phalanger misbehaviour while compiling [file] sectionSee belowSuccess
    Expected test outputReal script output
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(14,2): error PHP1018: Class 'D' doesn't implement abstract method I::f()
    
    CLR/Lambdas.php: FAILED
    Phalanger misbehaviour while compiling [file] sectionSee belowCompile error
    Expected test outputReal script output
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(5,34): error PHP2014: Syntax error: unexpected token '::'
    
    CLR/NameResolving.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    bool(true)
    bool(true)
    object(Directory)(2) {
      ["handle"]=>
      NULL
      ["path"]=>
      NULL
    }
    bool(true)
    bool(true)
    object(Directory)#40101120 (2) {
      ["handle"]=>
      NULL
      ["path"]=>
      NULL
    }
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\CLR\__input.txt(2,2): warning PHP0162: Import statement is deprecated and will be removed in future versions. Use PHP aliasing instead.
    
    Compiler/abstracts.php: SUCCEEDED
    Compiler/aliased%20assign%20add.php: SUCCEEDED
    Compiler/assignments.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ---1---1float(-1.5)
    float(2.5)
    float(0.83333333333333)
    int(6)
    int(8)
    ---2---2float(8.8333333333333)
    float(8.8333333333333)
    float(8.8333333333333)
    int(8)
    int(8)
    ---3---3---4---4---5---5array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [1]=>
      array(1) {
        [2]=>
        array(1) {
          [3]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    ---6---6array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "u"
    }
    array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "v"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    ---7---7array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    ---8---8
    ---1---1float(-1.5)
    float(2.5)
    float(0.833333333333333)
    int(6)
    int(8)
    ---2---2float(8.83333333333333)
    float(8.83333333333333)
    float(8.83333333333333)
    int(8)
    int(8)
    ---3---3---4---4---5---5array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [1]=>
      array(1) {
        [2]=>
        array(1) {
          [3]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    ---6---6array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "u"
    }
    array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "v"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    ---7---7array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    ---8---8
    Compiler/assign_in_call.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    g1:
    f(x)
    u(x)
    'x'
    
    g2:
    f(x)
    u(x)
    'b'
    
    g3:
    f(x)
    u(x)
    'b'
    
    g4:
    f(x)
    u(x)
    'b'
    
    g5:
    f()
    u()
    integer(1)
    
    g6:
    f(3)
    u(3)
    integer(3)
    
    g7:
    f(2)
    u(10)
    integer(10)
    
    g8:
    f(1)
    f(1)
    f(1)
    u(1)
    u()
    u(1)
    
    g9:
    known:
    __get(p) = 0
    __set(p,1)
    f(1)
    unknown:
    __get(p) = 1
    __set(p,3)
    u(3)
    
    g10:
    Done.
    g1:
    f(x)
    u(x)
    'x'
    
    g2:
    f(x)
    u(x)
    'b'
    
    g3:
    f(x)
    u(x)
    'b'
    
    g4:
    f(x)
    u(x)
    'b'
    
    g5:
    f()
    u()
    integer(1)
    
    g6:
    f(3)
    u(3)
    integer(3)
    
    g7:
    f(2)
    u(10)
    integer(10)
    
    g8:
    f(1)
    f(1)
    f(1)
    u(1)
    u()
    u(1)
    
    g9:
    known:
    __get(p) = 0
    __set(p,1)
    __get(p) = 1
    f(1)
    unknown:
    __get(p) = 1
    __set(p,3)
    __get(p) = 3
    u(3)
    
    g10:
    Done.
    Compiler/auto_globals_001.php: SUCCEEDED
    Compiler/auto_globals_002.php: SUCCEEDED
    Compiler/auto_globals_003.php: SUCCEEDED
    Compiler/break_in_global_code.php: SUCCEEDED
    Compiler/chaining_test.php: SUCCEEDED
    Compiler/chain_ending_by_string_index.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        string(1) "f"
      }
    }
    array(1) {
      [0]=>
      string(4) "xubu"
    }
    object(C)#1 (1) {
      ["f"]=>
      string(4) "kuxu"
    }
    string(5) "helxo"
    string(5) "helxo"
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        string(1) "f"
      }
    }
    array(1) {
      [0]=>
      string(4) "bubu"
    }
    
    Warning: A string item used as a reference in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt at expression on line 19, column 1.
    object(C)#10923418 (1) {
      ["f"]=>
      string(4) "kuku"
    }
    
    Warning: A string item used as a reference in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt at expression on line 25, column 1.
    string(5) "hello"
    
    Warning: A string item used as a reference in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt at expression on line 31, column 1.
    string(5) "hello"
    Compiler/continue_in_global_code.php: SUCCEEDED
    Compiler/deep_copy.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array(1) {
      [0]=>
      &array(1) {
        [0]=>
        &array(1) {
          [0]=>
          *RECURSION*
        }
      }
    }
    array(1) {
      [0]=>
      &array(1) {
        [0]=>
        &array(1) {
          [0]=>
          *RECURSION*
        }
      }
    }
    array(2) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) {
          [0]=>
          *RECURSION*
          [1]=>
          int(1)
        }
        [1]=>
        int(1)
      }
      [1]=>
      int(1)
    }
    array(1) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) {
          [0]=>
          *RECURSION*
          [1]=>
          int(1)
        }
        [1]=>
        int(1)
      }
    }
    array(1) {
      [0]=>
      &array(1) [recursion]
    }
    array(1) {
      [0]=>
      &array(1) {
        [0]=>
        &array(1) [recursion]
      }
    }
    array(2) {
      [0]=>
      &array(2) [recursion]
      [1]=>
      int(1)
    }
    array(1) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) [recursion]
        [1]=>
        int(1)
      }
    }
    Compiler/deep_copy_refbox.php: SUCCEEDED
    Compiler/expr_init.php: SUCCEEDED
    Compiler/foreach1.php: SUCCEEDED
    Compiler/foreach_arrays.php: SUCCEEDED
    Compiler/for_loop.php: SUCCEEDED
    Compiler/function_002.php: SUCCEEDED
    Compiler/function_003.php: SUCCEEDED
    Compiler/function_004.php: SUCCEEDED
    Compiler/function_call.php: SUCCEEDED
    Compiler/func_get_args.php: SUCCEEDED
    Compiler/if_statement.php: SUCCEEDED
    Compiler/indirect_001.php: SUCCEEDED
    Compiler/indirect_002.php: SUCCEEDED
    Compiler/indirect_003.php: SUCCEEDED
    Compiler/indirect_004.php: SUCCEEDED
    Compiler/indirect_005.php: SUCCEEDED
    Compiler/indirect_007.php: SUCCEEDED
    Compiler/indirect_global.php: SUCCEEDED
    Compiler/inheritance.php: SUCCEEDED
    Compiler/inheritance2.php: SUCCEEDED
    Compiler/isset_unset_001.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Testing x in global code:  <br>
    1 <br>
     <br>
    Testing x (object) in optimized function:  <br>
    1 <br>
     <br>
    Testing x (PhpReference) in optimized function:  <br>
    1 <br>
     <br>
    
    Notice: Undefined variable: y in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt on line 29
    Testing $$x (created at runtime) in optimized function:  <br>
    1 <br>
    Testing x in global code:  <br>
    1 <br>
     <br>
    Testing x (object) in optimized function:  <br>
    1 <br>
     <br>
    Testing x (PhpReference) in optimized function:  <br>
    1 <br>
     <br>
    Testing $$x (created at runtime) in optimized function:  <br>
    1 <br>
    Compiler/list%20%2326681.php: SUCCEEDED
    Compiler/new_array_item_assignadd.php: SUCCEEDED
    Compiler/null_hints.php: SUCCEEDED
    Compiler/pure_create_function.php: SUCCEEDED
    Compiler/pure_function_exists.php: SUCCEEDED
    Compiler/pure_math_str.php: SUCCEEDED
    Compiler/self.php: SUCCEEDED
    Compiler/static_call.php: SUCCEEDED
    Compiler/switch.php: SUCCEEDED
    Compiler/ternary_ex.php: SUCCEEDED
    Compiler/ternary_short.php: SUCCEEDED
    Compiler/this%20call.php: SUCCEEDED
    Compiler/typehint_check.php: SUCCEEDED
    Compiler/__call.php: SUCCEEDED
    Compiler/Inclusions/include2.php: SUCCEEDED
    Compiler/Inclusions/include3.php: SUCCEEDED
    Compiler/Inclusions/include6.php: SUCCEEDED
    Compiler/Inclusions/include_test.php: SUCCEEDED
    Compiler/Inclusions/script.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t01.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t02.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t03.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t04.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t05.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t08.php: SUCCEEDED
    Compiler/Namespaces/const1.php: SUCCEEDED
    Compiler/Namespaces/constants1.php: SUCCEEDED
    Compiler/Namespaces/extends1.php: SUCCEEDED
    Compiler/Namespaces/extends2.php: SUCCEEDED
    Compiler/Namespaces/function1.php: SUCCEEDED
    Compiler/Namespaces/function2.php: SUCCEEDED
    Compiler/Namespaces/namespace1.php: SUCCEEDED
    Compiler/Namespaces/simple_syntax1.php: SUCCEEDED
    Compiler/Namespaces/use1.php: SUCCEEDED
    Compiler/Namespaces/use2.php: SUCCEEDED
    Compiler/Namespaces/use3.php: SUCCEEDED
    Compiler/Namespaces/use4.php: SUCCEEDED
    Compiler/PseudoConst/parent.php: SUCCEEDED
    Compiler/PseudoConst/parent2.php: SUCCEEDED
    Compiler/PseudoConst/self.php: SUCCEEDED
    Compiler/PseudoConst/t01.php: SUCCEEDED
    Compiler/PseudoConst/t02.php: SUCCEEDED
    Compiler/PseudoConst/t03.php: SUCCEEDED
    Compiler/PseudoConst/t04.php: SUCCEEDED
    Compiler/PseudoConst/t05.php: SUCCEEDED
    Compiler/PseudoConst/t06.php: SUCCEEDED
    Compiler/PseudoConst/t07.php: SUCCEEDED
    Compiler/PseudoConst/t08.php: SUCCEEDED
    Compiler/PseudoConst/t09.php: SUCCEEDED
    Compiler/PseudoConst/t10.php: SUCCEEDED
    Compiler/PseudoConst/t11.php: SUCCEEDED
    Compiler/PseudoConst/_class_.php: SUCCEEDED
    Compiler/PseudoConst/_dir_.php: SUCCEEDED
    Compiler/PseudoConst/_function_.php: SUCCEEDED
    Compiler/References/array_argument.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(2)
        [1]=>
        int(3)
      }
    }
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    Compiler/References/array_local.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(2)
        [1]=>
        int(3)
      }
    }
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    Compiler/References/array_ret_argument.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(2)
        [1]=>
        int(3)
      }
    }
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    Compiler/References/array_ret_argument2.php: SUCCEEDED
    Compiler/References/deepcopy.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <br/><br/>globalobjects: array(2) {
      [0]=>
      int(1)
      [1]=>
      int(7)
    }
    <br/><br/>globalobjects: array(2) {
      [0]=>
      int(1)
      [1]=>
      &int(7)
    }
    Compiler/References/explicitclear.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Construyendo Y
    call foo12Destruyendo Y
    3object(X)#1 (2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      int(54)
    }
    array(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      string(10) "Init Value"
    }
    x: object(X)#1 (2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      int(1004)
    }
    <br/>checkpoint array(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      int(54)
    }
    Construyendo Y
    call foo123object(X)#13256970 (2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      &int(54)
    }
    array(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      &int(54)
    }
    x: object(X)#13256970 (2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      &int(1004)
    }
    <br/>checkpoint array(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      &int(1004)
    }
    Destruyendo Y
    Compiler/References/field_argument.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: int(7)
    <br/><br/>checkpoint array(1) {
      ["objects"]=>
      int(8)
    }
    x: int(7)
    <br/><br/>checkpoint array(1) {
      ["objects"]=>
      &int(7)
    }
    Compiler/References/field_local.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: object(X)#1 (1) {
      ["objects"]=>
      int(25)
    }
    <br/>checkpoint array(1) {
      ["objects"]=>
      int(7)
    }
    x: object(X)#26987408 (1) {
      ["objects"]=>
      &int(25)
    }
    <br/>checkpoint array(1) {
      ["objects"]=>
      &int(25)
    }
    Compiler/References/ref_arrayitem.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(2)
        [1]=>
        int(3)
      }
    }
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    Compiler/References/ref_reasign.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    object(X)#1 (2) {
      ["objects"]=>
      int(54)
      ["objects2"]=>
      &int(222)
    }
    array(2) {
      ["objects"]=>
      int(7)
      ["objects2"]=>
      &int(222)
    }
    x: object(X)#1 (2) {
      ["objects"]=>
      int(1004)
      ["objects2"]=>
      int(777)
    }
    <br/>checkpoint array(2) {
      ["objects"]=>
      int(54)
      ["objects2"]=>
      int(222)
    }
    object(X)#46212239 (2) {
      ["objects"]=>
      &int(54)
      ["objects2"]=>
      &int(222)
    }
    array(2) {
      ["objects"]=>
      &int(54)
      ["objects2"]=>
      &int(222)
    }
    x: object(X)#46212239 (2) {
      ["objects"]=>
      &int(1004)
      ["objects2"]=>
      &int(777)
    }
    <br/>checkpoint array(2) {
      ["objects"]=>
      &int(1004)
      ["objects2"]=>
      &int(777)
    }
    Compiler/Unreachable/t13.php: SUCCEEDED
    Compiler/Unset/calluserfunc.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Warning: call_user_func() expects parameter 1 to be a valid callback, function 'unset' not found or invalid function name in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\Unset\__input.txt on line 3
    int(10)
    Error: call_user_func(): Call to undefined function: 'unset' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\Unset\__input.txt at expression on line 3, column 1.
    Compiler/Unset/issetref2.php: SUCCEEDED
    Compiler/Unset/unsetglobal.php: SUCCEEDED
    Compiler/Unset/unsetglobal2.php: SUCCEEDED
    Compiler/Unset/unsetindirect.php: SUCCEEDED
    Compiler/Unset/unsetproblem.php: SUCCEEDED
    Compiler/Unset/unsetref.php: SUCCEEDED
    Compiler/Unset/unsetref2.php: SUCCEEDED
    Compiler/Unset/unsetref3.php: SUCCEEDED
    Compiler/Unset/__unset.php: SUCCEEDED
    DateTime/strftime.php: SUCCEEDED
    DateTime/strtotime1.php: SUCCEEDED
    DateTime/strtotime2.php: SUCCEEDED
    DateTime/strtotime3.php: SUCCEEDED
    DateTime/strtotime4.php: SUCCEEDED
    DateTime/strtotime5.php: SUCCEEDED
    DateTime/time.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    -189388800:-189475200 - 86400
    1964-01-01T00:00:00+0000
    1963-12-31T00:00:00+0000
    1964-06-06
    1963-06-06
    1964-01-06
    1133305200
    -189388800:-189475200 - 86400
    1964-01-01T00:00:00+0000
    1963-12-31T00:00:00+0000
    1964-06-06
    1963-06-06
    1964-01-06
    DateTime/timezones1.php: SUCCEEDED
    DLR/classContext.php: SUCCEEDED
    DLR/classContext1.php: SUCCEEDED
    DLR/classContext2.php: SUCCEEDED
    DLR/restrictions%20generics.php: SUCCEEDED
    DLR/restrictions.php: SUCCEEDED
    DLR/targets.php: SUCCEEDED
    DLR/__call.php: SUCCEEDED
    FileSystem/basename.php: SUCCEEDED
    FileSystem/basename2.php: SUCCEEDED
    FileSystem/chdir.php: SUCCEEDED
    FileSystem/csv.php: SUCCEEDED
    FileSystem/date.php: SUCCEEDED
    FileSystem/date2.php: SUCCEEDED
    FileSystem/date3.php: SUCCEEDED
    FileSystem/date_unix.php: SUCCEEDED
    FileSystem/dirname.php: SUCCEEDED
    FileSystem/dirname2.php: SUCCEEDED
    FileSystem/disk_free_space.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    273 GB
    Drive C: 34 GB
    Drive D: 273 GB
    Drive E: 
    Warning: disk_free_space(): The system cannot find the path specified.
     in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 14
    false
    Drive F: 
    Warning: disk_free_space(): The device is not ready.
     in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 14
    false
    273 GB
    Drive C: 34 GB
    Drive D: 273 GB
    Drive E: false
    Drive F: false
    FileSystem/disk_total_space.php: SUCCEEDED
    FileSystem/fgets.php: SUCCEEDED
    FileSystem/file.php: SUCCEEDED
    FileSystem/filesize.php: SUCCEEDED
    FileSystem/file_exists.php: SUCCEEDED
    FileSystem/file_get_contents.php: SUCCEEDED
    FileSystem/fpassthru.php: SUCCEEDED
    FileSystem/fread.php: SUCCEEDED
    FileSystem/fread1.php: SUCCEEDED
    FileSystem/fread2.php: SUCCEEDED
    FileSystem/fseek.php: SUCCEEDED
    FileSystem/fsockopen.php: SUCCEEDED
    FileSystem/ftell.php: SUCCEEDED
    FileSystem/glob_up_dirs.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string(7) "../@PHP"
    string(9) "../Arrays"
    string(7) "../Bugs"
    string(6) "../CLR"
    string(11) "../Compiler"
    string(6) "../DLR"
    string(11) "../DateTime"
    string(13) "../FileSystem"
    string(7) "../Math"
    string(7) "../Misc"
    string(10) "../Objects"
    string(10) "../PHP.NET"
    string(8) "../RegEx"
    string(6) "../SPL"
    string(10) "../Strings"
    string(11) "../TestLogs"
    string(12) "../Variables"
    string(6) "../Xml"
    string(7) "../@PHP"
    string(9) "../Arrays"
    string(7) "../Bugs"
    string(6) "../CLR"
    string(11) "../Compiler"
    string(11) "../DateTime"
    string(6) "../DLR"
    string(13) "../FileSystem"
    string(7) "../Math"
    string(7) "../Misc"
    string(10) "../Objects"
    string(10) "../PHP.NET"
    string(8) "../RegEx"
    string(6) "../SPL"
    string(10) "../Strings"
    string(11) "../TestLogs"
    string(12) "../Variables"
    string(6) "../Xml"
    FileSystem/is_dir.php: SUCCEEDED
    FileSystem/is_executable.php: SUCCEEDED
    FileSystem/pathinfo.php: SUCCEEDED
    FileSystem/popen.php: SUCCEEDED
    FileSystem/readdir.php: SUCCEEDED
    FileSystem/readfile.php: SUCCEEDED
    FileSystem/readline.php: SUCCEEDED
    FileSystem/realpath.php: SUCCEEDED
    FileSystem/scandir.php: SUCCEEDED
    FileSystem/stat.php: SUCCEEDED
    FileSystem/stream_context_set_option.php: SUCCEEDED
    FileSystem/stream_copy_to_stream.php: SUCCEEDED
    FileSystem/stream_copy_to_stream2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <p>Read <b>rb</b>, Write <b>wb</b>
    
    
    COPIED: <b>31090</b>
    <p>Read <b>rb</b>, Write <b>wt</b>
    
    
    COPIED: <b>31090</b>
    <p>Read <b>rb</b>, Write <b>wb</b>
    
    
    COPIED: <b>31090</b>
    <p>Read <b>rb</b>, Write <b>wt</b>
    
    
    COPIED: <b>31078</b>
    FileSystem/testinc.php: SUCCEEDED
    FileSystem/touch.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Warning: touch(): Utime failed: Bad file descriptor in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 8
    Sorry Could Not change modification time of touch.txt
    Warning: touch(): Utime failed: Bad file descriptor in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 14
    
    Warning: touch(): Utime failed: Bad file descriptor in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 16
    
    Warning: touch(): Utime failed: Bad file descriptor in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 17
    <pre>[ARRAY
      [INT (0)] => [STRING: "May 10, 2011; [00:50:21] (00h) ctime test.txt (1304981421)"]
      [INT (1)] => [STRING: "February 19, 2011; [22:06:05] (22h) mtime test.txt (1298149565)"]
      [INT (2)] => [STRING: "May 10, 2011; [00:50:21] (00h) ctime touch.txt (1304981421)"]
      [INT (3)] => [STRING: "February 19, 2011; [22:06:05] (22h) mtime touch.txt (1298149565)"]
      [INT (4)] => [STRING: "May 10, 2011; [00:50:21] (00h) atime touch.txt (1304981421)"]
      [INT (5)] => [STRING: "February 19, 2011; [22:06:05] (22h) mtime summer.txt (1298149565)"]
      [INT (6)] => [STRING: "February 19, 2011; [22:06:05] (22h) mtime winter.txt (1298149565)"]
    ]</pre>
    Warning: touch(): Unable to access (D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\touch.txt): Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 8, column 5.
    Sorry Could Not change modification time of touch.txt
    Warning: touch(): Unable to access (D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\touch.txt): Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 14, column 1.
    
    Warning: touch(): Unable to access (D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\winter.txt): Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 16, column 1.
    
    Warning: touch(): Unable to access (D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\summer.txt): Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 17, column 1.
    <pre>[ARRAY
      [INT (0)] => [STRING: "May 9, 2011; [23:50:21] (23h) ctime test.txt (1304977821)"]
      [INT (1)] => [STRING: "February 19, 2011; [22:06:05] (22h) mtime test.txt (1298149565)"]
      [INT (2)] => [STRING: "May 9, 2011; [23:50:21] (23h) ctime touch.txt (1304977821)"]
      [INT (3)] => [STRING: "February 19, 2011; [22:06:05] (22h) mtime touch.txt (1298149565)"]
      [INT (4)] => [STRING: "May 9, 2011; [23:50:21] (23h) atime touch.txt (1304977821)"]
      [INT (5)] => [STRING: "February 19, 2011; [22:06:05] (22h) mtime summer.txt (1298149565)"]
      [INT (6)] => [STRING: "February 19, 2011; [22:06:05] (22h) mtime winter.txt (1298149565)"]
    ]</pre>
    FileSystem/tar/tar_test.php: SUCCEEDED
    FileSystem/zip/zip.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    correct
    Error: Call to undefined function: 'zip_open' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\zip\__input.txt at expression on line 3, column 1.
    Math/abs.php: SUCCEEDED
    Math/atan2.php: SUCCEEDED
    Math/base_convert.php: SUCCEEDED
    Math/bindec.php: SUCCEEDED
    Math/ceil.php: SUCCEEDED
    Math/cos.php: SUCCEEDED
    Math/decbin.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <pre>
    [double: 2294967295]
    10001000110010100110101111111111
    [double: 4294967296]
    0
    [double: 8589934590]
    11111111111111111111111111111110
    [double: 8589934590]
    11111111111111111111111111111110
    [double: 8589934591]
    11111111111111111111111111111111
    [Int: 1000.000.000.000]
    11010100101001010001000000000000
    <hr>(-1, -5435, 2.14, 0, 26)
    11111111111111111111111111111111
    11111111111111111110101011000101
    10
    0
    11010 
    </pre>
    <pre>
    [???: 2294967295]
    10001000110010100110101111111111
    [???: 4294967296]
    0
    [???: 8589934590]
    11111111111111111111111111111110
    [???: 8589934590]
    11111111111111111111111111111110
    [???: 8589934591]
    11111111111111111111111111111111
    [Int: 1000.000.000.000]
    11010100101001010001000000000000
    <hr>(-1, -5435, 2.14, 0, 26)
    11111111111111111111111111111111
    11111111111111111110101011000101
    10
    0
    11010 
    </pre>
    Math/dechex.php: SUCCEEDED
    Math/decoct.php: SUCCEEDED
    Math/deg2rad.php: SUCCEEDED
    Math/exp.php: SUCCEEDED
    Math/floor.php: SUCCEEDED
    Math/fmod.php: SUCCEEDED
    Math/hexdec.php: SUCCEEDED
    Math/max.php: SUCCEEDED
    Math/min.php: SUCCEEDED
    Math/modulo_warn.php: SUCCEEDED
    Math/octdec.php: SUCCEEDED
    Math/pow.php: SUCCEEDED
    Math/rad2deg.php: SUCCEEDED
    Math/round.php: SUCCEEDED
    Math/sin.php: SUCCEEDED
    Math/sqrt.php: SUCCEEDED
    Math/tan.php: SUCCEEDED
    Math/uniqid.php: SUCCEEDED
    Misc/calendar_extension.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0
    0
    2375840
    0
    14
    32
    2
    There are 31 days in August 2003
    There are 28 days in February 2003
    There are 29 days in February 2004
    There are 31 days in December 2034
    1748326
    1748324
    374867
    0
    322f32322f35373633
    ebe120e7f9e5ef20e4faf9f1e2
    ebe120e7f9e5ef20e427faf9f1e2
    ebe120e7f9e5ef20e420e0ecf4e9ed20faf9f1e2
    ebe120e7f9e5ef20e42720e0ecf4e9ed20faf9f1e2
    eb22e120e7f9e5ef20e4faf9f122e2
    e12720e7f9e5ef20e4faf9f122e2
    e12720e7f9e5ef20e427faf9f122e2
    e12720e7f9e5ef20e420e0ecf4e9ed20faf9f122e2
    e12720e7f9e5ef20e42720e0ecf4e9ed20faf9f122e2
    Error: Call to undefined function: 'frenchtojd' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt at expression on line 2, column 1.
    Misc/dir_read.php: SUCCEEDED
    Misc/fgetcsv%20%2327492.php: SUCCEEDED
    Misc/hash%20functions%20%2326667.php: SUCCEEDED
    Misc/ini_parse.php: SUCCEEDED
    Misc/json%20%2327838.php: SUCCEEDED
    Misc/lexer.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    T_INLINE_HTML
    311 '\r\n'
    T_OPEN_TAG
    368 '&lt;?'
    T_WHITESPACE
    371 ' \r\n\r\n'
    T_FINAL
    345 'final'
    T_WHITESPACE
    371 ' '
    T_CLASS
    353 'class'
    T_WHITESPACE
    371 ' '
    T_STRING
    307 'A'
    T_WHITESPACE
    371 ' \r\n'
        '{'
    T_WHITESPACE
    371 ' \r\n  '
    T_FUNCTION
    334 'function'
    T_WHITESPACE
    371 ' '
    T_STRING
    307 '__get'
        '('
    T_VARIABLE
    309 '$x'
        ')'
    T_WHITESPACE
    371 ' \r\n  '
        '{'
    T_WHITESPACE
    371 ' \r\n    '
    T_VARIABLE
    309 '$x'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_START_HEREDOC
    372 '&lt;&lt;&lt;EOOOOOOOOOOOOOOT\r\n'
    T_ENCAPSED_AND_WHITESPACE
    314 '         &lt;&lt;&lt;hello\r\nEOOOOOOOOOOOOOOt;\r\nEOOOOOOOOOOOOOT;\r\n'
    T_END_HEREDOC
    373 'EOOOOOOOOOOOOOOT'
        ';'
    T_WHITESPACE
    371 '\r\n\r\n    '
        '$'
    T_VARIABLE
    309 '$y'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_ARRAY
    360 'array'
    T_WHITESPACE
    371 ' '
        '('
    T_LNUMBER
    305 '1'
        ','
    T_DNUMBER
    306 '100000000000000'
        ','
    T_DNUMBER
    306 '999999999999999999999999999999999'
        ','
    T_STRING
    307 'true'
        ','
    T_STRING
    307 'false'
        ')'
        ';'
    T_WHITESPACE
    371 '\r\n    '
        '$'
        '{'
        '&quot;'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
    T_DOLLAR_OPEN_CURLY_BRACES
    374 '${'
        '$'
        '{'
    T_CONSTANT_ENCAPSED_STRING
    315 '&quot;xxx&quot;'
        '}'
        '}'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
        '&quot;'
        '}'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_LNUMBER
    305 '1'
        ';'
    T_WHITESPACE
    371 '\r\n    '
        '$'
        '{'
        '&quot;'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
    T_DOLLAR_OPEN_CURLY_BRACES
    374 '${'
        '$'
        '{'
        '&quot;'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
    T_VARIABLE
    309 '$x'
    T_ENCAPSED_AND_WHITESPACE
    314 '-&gt;$$'
    T_VARIABLE
    309 '$x0xx'
        '&quot;'
        '}'
        '}'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
        '&quot;'
        '}'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_LNUMBER
    305 '1'
        ';'
    T_WHITESPACE
    371 '\r\n  '
        '}'
    T_WHITESPACE
    371 ' \r\n'
        '}'
    T_WHITESPACE
    371 '\r\n\r\n'
    T_CLOSE_TAG
    370 '?&gt;'
    '
    '
        '&lt;?'
        ' 
    
    '
        'final'
        ' '
        'class'
        ' '
        'A'
        ' 
    '
        '{'
        ' 
      '
        'function'
        ' '
    259
    259 '__get'
        '('
        '$x'
        ')'
        ' 
      '
        '{'
        ' 
        '
        '$x'
        ' '
        '='
        ' '
        '&lt;&lt;&lt;EOOOOOOOOOOOOOOT
    '
        '         &lt;&lt;&lt;'
        'hello'
        '
    '
        'EOOOOOOOOOOOOOOt;
    '
        'EOOOOOOOOOOOOOT;
    '
        'EOOOOOOOOOOOOOOT'
        ';'
        '
    
        '
        '$'
        '$y'
        ' '
        '='
        ' '
        'array'
        ' '
        '('
        '1'
        ','
        '100000000000000'
        ','
        '999999999999999999999999999999999'
        ','
    256
    256 'true'
        ','
    257
    257 'false'
        ')'
        ';'
        '
        '
        '$'
        '{'
        '&quot;'
        'x'
        '${'
        '$'
        '{'
    -29
    -29 '&quot;xxx&quot;'
        '}'
        '}'
        'x'
        '&quot;'
        '}'
        ' '
        '='
        ' '
        '1'
        ';'
        '
        '
        '$'
        '{'
        '&quot;'
        'x'
        '${'
        '$'
        '{'
        '&quot;'
        'x'
        '$x'
        '-&gt;'
        '$'
        '$'
        '$x0xx'
        '&quot;'
        '}'
        '}'
        'x'
        '&quot;'
        '}'
        ' '
        '='
        ' '
        '1'
        ';'
        '
      '
        '}'
        ' 
    '
        '}'
        '
    
    '
        '?&gt;'
    Misc/locale.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string(1) "C"
    double(1.54)
    double(Infinity)
    654564.145400
    Sat Saturday Apr April
    --------------
    string(19) "Danish_Denmark.1252"
    double(1.54)
    double(Infinity)
    654564,145400
    lo lordag apr april
    --------------
    string(25) "Czech_Czech Republic.1250"
    double(1.54)
    double(Infinity)
    654564,145400
    so sobota IV duben
    --------------
    string(1) "C"
    float(1.54)
    float(Infinity)
    654564.145400
    Sat Saturday Apr April
    --------------
    string(19) "Danish_Denmark.1252"
    float(1.54)
    float(Infinity)
    654564,145400
    lo lordag apr april
    --------------
    string(25) "Czech_Czech Republic.1250"
    float(1.54)
    float(Infinity)
    654564,145400
    so sobota 4 duben
    --------------
    Misc/output2.php: SUCCEEDED
    Misc/parse_url%20%2327377.php: SUCCEEDED
    Misc/parse_url_at_bug.php: SUCCEEDED
    Misc/stack_trace.php: FAILED
    Script hung upNo errorsSuccess
    Expected test outputReal script output
    Unhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---> System.IndexOutOfRangeException: Index was outside the bounds of the array.
       at PHP.Core.PhpStackFrame..ctor(ScriptContext context, StackFrame frame, FrameKinds kind)
       at PHP.Core.PhpStackTrace..ctor(ScriptContext context, StackTrace clrTrace)
       at PHP.Core.PhpStackTrace..ctor(ScriptContext context, Int32 skipFrames)
       at PHP.Library.Errors.Backtrace()
       at <stack_trace.inc>.<Script>.j(ScriptContext <context>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\stack_trace.inc:line 11
       at <stack_trace.inc>.<Script>.j(Object instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.CallInternal(Dictionary`2 localVariables, NamingContext namingContext, Object name, String fallbackName, DRoutineDesc& routineHint, ScriptContext context)
       at PHP.Core.ScriptContext.CallVoid(Dictionary`2 localVariables, NamingContext namingContext, Object name, String fallbackName, DRoutineDesc& routineHint, ScriptContext context)
       at <stack_trace.inc>.<Script>.i(ScriptContext <context>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\stack_trace.inc:line 7
       at <stack_trace.inc>.<Script>.i(Object instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.CallInternal(Dictionary`2 localVariables, NamingContext namingContext, Object name, String fallbackName, DRoutineDesc& routineHint, ScriptContext context)
       at PHP.Core.ScriptContext.CallVoid(Dictionary`2 localVariables, NamingContext namingContext, Object name, String fallbackName, DRoutineDesc& routineHint, ScriptContext context)
       at <^0>.<Global>.<?0>.h(ScriptContext <context>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt:line 14
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack, DTypeDesc caller)
       at PHP.Core.PhpCallback.InvokeInternal(Object[] args)
       at PHP.Core.PhpCallback.Invoke(Object[] args)
       at PHP.Library.PhpArrays.Map(DTypeDesc caller, PhpCallback map, PhpArray[] arrays)
       at <__input.txt>.<Script>.<Lambda>(ScriptContext <context>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt:line 4
       at <__input.txt>.<Script>.<Lambda>(Object instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.CallInternal(Dictionary`2 localVariables, NamingContext namingContext, Object name, String fallbackName, DRoutineDesc& routineHint, ScriptContext context)
       at PHP.Core.ScriptContext.CallVoid(Dictionary`2 localVariables, NamingContext namingContext, Object name, String fallbackName, DRoutineDesc& routineHint, ScriptContext context)
       at <__input.txt>.<Script>.f(ScriptContext <context>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt:line 7
       at <__input.txt>.<Script>.f(Object instance, PhpStack stack)
       at <__input.txt>.<Script>.<Main>(ScriptContext <context>, Dictionary`2 <locals>, DObject <self>, DTypeDesc <includer>, Boolean <request>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt:line 18
       at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)
       at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)
       --- End of inner exception stack trace ---
       at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)
       at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)
       at <Global>.Run(String[] )
    
    Misc/str_getcsv%20%2326691.php: SUCCEEDED
    Misc/tokens.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    T_REQUIRE_ONCE = 258,
    T_REQUIRE = 259,
    T_EVAL = 260,
    T_INCLUDE_ONCE = 261,
    T_INCLUDE = 262,
    T_LOGICAL_OR = 263,
    T_LOGICAL_XOR = 264,
    T_LOGICAL_AND = 265,
    T_PRINT = 266,
    T_SR_EQUAL = 267,
    T_SL_EQUAL = 268,
    T_XOR_EQUAL = 269,
    T_OR_EQUAL = 270,
    T_AND_EQUAL = 271,
    T_MOD_EQUAL = 272,
    T_CONCAT_EQUAL = 273,
    T_DIV_EQUAL = 274,
    T_MUL_EQUAL = 275,
    T_MINUS_EQUAL = 276,
    T_PLUS_EQUAL = 277,
    T_BOOLEAN_OR = 278,
    T_BOOLEAN_AND = 279,
    T_IS_NOT_IDENTICAL = 280,
    T_IS_IDENTICAL = 281,
    T_IS_NOT_EQUAL = 282,
    T_IS_EQUAL = 283,
    T_IS_GREATER_OR_EQUAL = 284,
    T_IS_SMALLER_OR_EQUAL = 285,
    T_SR = 286,
    T_SL = 287,
    T_INSTANCEOF = 288,
    T_UNSET_CAST = 289,
    T_BOOL_CAST = 290,
    T_OBJECT_CAST = 291,
    T_ARRAY_CAST = 292,
    T_STRING_CAST = 293,
    T_DOUBLE_CAST = 294,
    T_INT_CAST = 295,
    T_DEC = 296,
    T_INC = 297,
    T_CLONE = 298,
    T_NEW = 299,
    T_EXIT = 300,
    T_IF = 301,
    T_ELSEIF = 302,
    T_ELSE = 303,
    T_ENDIF = 304,
    T_LNUMBER = 305,
    T_DNUMBER = 306,
    T_STRING = 307,
    T_STRING_VARNAME = 308,
    T_VARIABLE = 309,
    T_NUM_STRING = 310,
    T_INLINE_HTML = 311,
    T_CHARACTER = 312,
    T_BAD_CHARACTER = 313,
    T_ENCAPSED_AND_WHITESPACE = 314,
    T_CONSTANT_ENCAPSED_STRING = 315,
    T_ECHO = 316,
    T_DO = 317,
    T_WHILE = 318,
    T_ENDWHILE = 319,
    T_FOR = 320,
    T_ENDFOR = 321,
    T_FOREACH = 322,
    T_ENDFOREACH = 323,
    T_DECLARE = 324,
    T_ENDDECLARE = 325,
    T_AS = 326,
    T_SWITCH = 327,
    T_ENDSWITCH = 328,
    T_CASE = 329,
    T_DEFAULT = 330,
    T_BREAK = 331,
    T_CONTINUE = 332,
    T_GOTO = 333,
    T_FUNCTION = 334,
    T_CONST = 335,
    T_RETURN = 336,
    T_TRY = 337,
    T_CATCH = 338,
    T_THROW = 339,
    T_USE = 340,
    T_GLOBAL = 341,
    T_PUBLIC = 342,
    T_PROTECTED = 343,
    T_PRIVATE = 344,
    T_FINAL = 345,
    T_ABSTRACT = 346,
    T_STATIC = 347,
    T_VAR = 348,
    T_UNSET = 349,
    T_ISSET = 350,
    T_EMPTY = 351,
    T_HALT_COMPILER = 352,
    T_CLASS = 353,
    T_INTERFACE = 354,
    T_EXTENDS = 355,
    T_IMPLEMENTS = 356,
    T_OBJECT_OPERATOR = 357,
    T_DOUBLE_ARROW = 358,
    T_LIST = 359,
    T_ARRAY = 360,
    T_CLASS_C = 361,
    T_METHOD_C = 362,
    T_FUNC_C = 363,
    T_LINE = 364,
    T_FILE = 365,
    T_COMMENT = 366,
    T_DOC_COMMENT = 367,
    T_OPEN_TAG = 368,
    T_OPEN_TAG_WITH_ECHO = 369,
    T_CLOSE_TAG = 370,
    T_WHITESPACE = 371,
    T_START_HEREDOC = 372,
    T_END_HEREDOC = 373,
    T_DOLLAR_OPEN_CURLY_BRACES = 374,
    T_CURLY_OPEN = 375,
    T_PAAMAYIM_NEKUDOTAYIM = 376,
    T_DOUBLE_COLON = 376,
    T_NAMESPACE = 377,
    T_NS_C = 378,
    T_DIR = 379,
    T_NS_SEPARATOR = 380,
    T_INCLUDE = 129,
    T_INCLUDE_ONCE = 130,
    T_EVAL = 131,
    T_REQUIRE = 132,
    T_REQUIRE_ONCE = 133,
    T_LOGICAL_OR = 136,
    T_LOGICAL_XOR = 137,
    T_LOGICAL_AND = 138,
    T_PRINT = 139,
    T_PLUS_EQUAL = 140,
    T_MINUS_EQUAL = 141,
    T_MUL_EQUAL = 142,
    T_DIV_EQUAL = 143,
    T_CONCAT_EQUAL = 144,
    T_MOD_EQUAL = 145,
    T_AND_EQUAL = 146,
    T_OR_EQUAL = 147,
    T_XOR_EQUAL = 148,
    T_SL_EQUAL = 149,
    T_SR_EQUAL = 150,
    T_BOOLEAN_OR = 151,
    T_BOOLEAN_AND = 152,
    T_IS_EQUAL = 153,
    T_IS_NOT_EQUAL = 154,
    T_IS_IDENTICAL = 155,
    T_IS_NOT_IDENTICAL = 156,
    T_IS_SMALLER_OR_EQUAL = 157,
    T_IS_GREATER_OR_EQUAL = 158,
    T_SL = 159,
    T_SR = 160,
    T_INC = 161,
    T_DEC = 162,
    T_NEW = 164,
    T_INSTANCEOF = 165,
    T_CLONE = 167,
    T_LNUMBER = 168,
    T_DNUMBER = 170,
    T_STRING = 171,
    T_STRING_VARNAME = 172,
    T_VARIABLE = 173,
    T_NUM_STRING = 174,
    T_INLINE_HTML = 175,
    T_CHARACTER = 176,
    T_BAD_CHARACTER = 177,
    T_ENCAPSED_AND_WHITESPACE = 178,
    T_CONSTANT_ENCAPSED_STRING = 179,
    T_EXIT = 180,
    T_IF = 181,
    T_ELSEIF = 182,
    T_ELSE = 183,
    T_ENDIF = 184,
    T_ECHO = 185,
    T_DO = 186,
    T_WHILE = 187,
    T_ENDWHILE = 188,
    T_FOR = 189,
    T_ENDFOR = 190,
    T_FOREACH = 191,
    T_ENDFOREACH = 192,
    T_AS = 193,
    T_SWITCH = 194,
    T_ENDSWITCH = 195,
    T_CASE = 196,
    T_DEFAULT = 197,
    T_BREAK = 198,
    T_CONTINUE = 199,
    T_FUNCTION = 200,
    T_CONST = 201,
    T_RETURN = 202,
    T_GLOBAL = 203,
    T_STATIC = 204,
    T_VAR = 205,
    T_UNSET = 206,
    T_ISSET = 207,
    T_EMPTY = 208,
    T_CLASS = 209,
    T_EXTENDS = 210,
    T_OBJECT_OPERATOR = 211,
    T_DOUBLE_ARROW = 212,
    T_LIST = 213,
    T_ARRAY = 214,
    T_CLASS_C = 215,
    T_METHOD_C = 216,
    T_FUNC_C = 217,
    T_LINE = 218,
    T_FILE = 219,
    T_DIR = 220,
    T_COMMENT = 221,
    T_DOC_COMMENT = 222,
    T_OPEN_TAG = 227,
    T_OPEN_TAG_WITH_ECHO = 228,
    T_CLOSE_TAG = 229,
    T_WHITESPACE = 230,
    T_START_HEREDOC = 231,
    T_END_HEREDOC = 232,
    T_DOLLAR_OPEN_CURLY_BRACES = 233,
    T_CURLY_OPEN = 234,
    T_DOUBLE_COLON = 235,
    T_PAAMAYIM_NEKUDOTAYIM = 235,
    T_GOTO = 237,
    T_TRY = 238,
    T_CATCH = 239,
    T_THROW = 240,
    T_INTERFACE = 241,
    T_IMPLEMENTS = 242,
    T_ABSTRACT = 243,
    T_FINAL = 244,
    T_PRIVATE = 245,
    T_PROTECTED = 246,
    T_PUBLIC = 247,
    T_BOOL_CAST = 288,
    T_INT_CAST = 291,
    T_DOUBLE_CAST = 297,
    T_STRING_CAST = 300,
    T_ARRAY_CAST = 303,
    T_OBJECT_CAST = 304,
    T_UNSET_CAST = 305,
    T_HALT_COMPILER = 351,
    Misc/user_error_handlers.php: SUCCEEDED
    Objects/accessing%20property%20line%20number%20%2326052.php: SUCCEEDED
    Objects/conditional1.php: SUCCEEDED
    Objects/conditional2.php: SUCCEEDED
    Objects/conditional_base_class.php: SUCCEEDED
    Objects/constant_test.php: SUCCEEDED
    Objects/convobjtoany.php: SUCCEEDED
    Objects/convobjtostr.php: SUCCEEDED
    Objects/evaled_parent.php: SUCCEEDED
    Objects/field_inheritance1.php: SUCCEEDED
    Objects/field_inheritance2.php: SUCCEEDED
    Objects/field_inheritance3.php: SUCCEEDED
    Objects/getter_setter_bug28444.php: SUCCEEDED
    Objects/instanceof.php: SUCCEEDED
    Objects/new_via_unknown_ctor.php: SUCCEEDED
    Objects/object_creation_test.php: SUCCEEDED
    Objects/objop.php: SUCCEEDED
    Objects/objopstr.php: SUCCEEDED
    Objects/overrides%20%231285.php: SUCCEEDED
    Objects/static_field_inheritance1.php: SUCCEEDED
    Objects/static_field_inheritance2.php: SUCCEEDED
    Objects/static_field_inheritance3.php: SUCCEEDED
    Objects/static_field_test.php: SUCCEEDED
    Objects/static_inheritence.php: SUCCEEDED
    Objects/static_method_test.php: SUCCEEDED
    Objects/static_object_vars.php: SUCCEEDED
    Objects/sys_class_const.php: SUCCEEDED
    Objects/this2.php: SUCCEEDED
    Objects/__invoke.php: SUCCEEDED
    RegEx/backreferences.php: SUCCEEDED
    RegEx/dolar_escape.php: SUCCEEDED
    RegEx/ereg.php: SUCCEEDED
    RegEx/escaped_unicode.php: SUCCEEDED
    RegEx/groupbug.php: SUCCEEDED
    RegEx/namedbackref.php: SUCCEEDED
    RegEx/namedbackref2.php: SUCCEEDED
    RegEx/namedgroups.php: SUCCEEDED
    RegEx/namedgroups1.php: SUCCEEDED
    RegEx/namedgroups2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Warning: preg_match_all(): Numeric named subpatterns are not allowed in D:\Documents\Projects\Phalanger\Main\Testing\Tests\RegEx\__input.txt on line 6
    array(0) {
    }
    array(3) {
      [0]=>
      array(2) {
        [0]=>
        string(23) "flux.transitions.bars3d"
        [1]=>
        string(21) "flux.transitions.wrap"
      }
      ["10"]=>
      array(2) {
        [0]=>
        string(6) "bars3d"
        [1]=>
        string(4) "wrap"
      }
      [1]=>
      array(2) {
        [0]=>
        string(6) "bars3d"
        [1]=>
        string(4) "wrap"
      }
    }
    RegEx/nomatchall.php: SUCCEEDED
    RegEx/preg_match_unmatched_groups.php: SUCCEEDED
    RegEx/preg_replace_eval.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ab"01300 as"00da sd"0asdsa das asd 11asd a1sd a
    ab"01300 as"00da sd"0(aasdasdkjask,$a,\,\l,a,s,d,a,s,d,k,j,a,s,${120})(ldjaklsdjalk,$l,\,\l,d,j,a,k,l,s,d,j,a,l,${120})djdsa das asd 11asd a1sd a
    ab"01300 as"00da sd"0asdsa das asd 11asd a1sd a
    ab"01300 as"00da sd"0(aasdasdkjask,$a,\,\l,a,s,d,a,s,d,k,j,,,${120})(ldjaklsdjalk,$l,\,\l,d,j,a,k,l,s,d,j,,,${120})djdsa das asd 11asd a1sd a
    RegEx/regexp-sql.php: SUCCEEDED
    RegEx/regexp_smiles.php: SUCCEEDED
    RegEx/Perl/cache.php: SUCCEEDED
    RegEx/Perl/grep1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Notice: Array to string conversion in D:\Documents\Projects\Phalanger\Main\Testing\Tests\RegEx\Perl\__input.txt on line 5
    array(2) {
      [3]=>
      float(1.5)
      [6]=>
      float(58.54)
    }
    Notice: preg_grep(): Array to string conversion in D:\Documents\Projects\Phalanger\Main\Testing\Tests\RegEx\Perl\__input.txt at expression on line 5, column 1.
    array(2) {
      [3]=>
      string(3) "1.5"
      [6]=>
      string(5) "58.54"
    }
    RegEx/Perl/grep2.php: SUCCEEDED
    RegEx/Perl/match1.php: SUCCEEDED
    RegEx/Perl/match10.php: SUCCEEDED
    RegEx/Perl/match2.php: SUCCEEDED
    RegEx/Perl/match3.php: SUCCEEDED
    RegEx/Perl/match4.php: SUCCEEDED
    RegEx/Perl/match5.php: SUCCEEDED
    RegEx/Perl/match6.php: SUCCEEDED
    RegEx/Perl/match7.php: SUCCEEDED
    RegEx/Perl/match8.php: SUCCEEDED
    RegEx/Perl/match9.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    (
      [0] => 209.6.145.47 - - [22/Nov/2003:19:02:30 -0500] "GET /dir/doc.htm HTTP/1.0" 200 6776 "http://search.yahoo.com/search?p=key+words=UTF-8" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)"
      [1] => 209.6.145.47
      [2] => -
      [3] => -
      [4] => 22/Nov/2003:19:02:30 -0500
      [5] => GET
      [6] => /dir/doc.htm
      [7] => HTTP
      [8] => 1.0
      [9] => 200
      [10] => 6776
      [11] => "http://search.yahoo.com/search?p=key+words=UTF-8"
      [12] => "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)"
    )
    Array
    (
        [0] => 209.6.145.47 - - [22/Nov/2003:19:02:30 -0500] "GET /dir/doc.htm HTTP/1.0" 200 6776 "http://search.yahoo.com/search?p=key+words=UTF-8" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)"
        [1] => 209.6.145.47
        [2] => -
        [3] => -
        [4] => 22/Nov/2003:19:02:30 -0500
        [5] => GET
        [6] => /dir/doc.htm
        [7] => HTTP
        [8] => 1.0
        [9] => 200
        [10] => 6776
        [11] => "http://search.yahoo.com/search?p=key+words=UTF-8"
        [12] => "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)"
    )
    RegEx/Perl/match_all1.php: SUCCEEDED
    RegEx/Perl/match_all2.php: SUCCEEDED
    RegEx/Perl/match_all3.php: SUCCEEDED
    RegEx/Perl/match_all4.php: SUCCEEDED
    RegEx/Perl/match_dollar.php: SUCCEEDED
    RegEx/Perl/overflow.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string("kfkaj +j k45´┐Ż´┐Ż´┐Ż´┐Ż´┐Ż3#$%^&kjakfjkaj|kfj")
    string("kfkaj +j k45�����3#$%^&kjakfjkaj|kfj")
    RegEx/Perl/quote1.php: SUCCEEDED
    RegEx/Perl/quote2.php: SUCCEEDED
    RegEx/Perl/quote3.php: SUCCEEDED
    RegEx/Perl/replace1.php: SUCCEEDED
    RegEx/Perl/replace2.php: SUCCEEDED
    RegEx/Perl/replace3.php: SUCCEEDED
    RegEx/Perl/replace4.php: SUCCEEDED
    RegEx/Perl/replace5.php: SUCCEEDED
    RegEx/Perl/replace6.php: SUCCEEDED
    RegEx/Perl/replace7.php: SUCCEEDED
    RegEx/Perl/replace8.php: SUCCEEDED
    RegEx/Perl/replace9.php: SUCCEEDED
    RegEx/Perl/replace_callback1.php: SUCCEEDED
    RegEx/Perl/replace_callback2.php: SUCCEEDED
    RegEx/Perl/split1.php: SUCCEEDED
    RegEx/Perl/split2.php: SUCCEEDED
    RegEx/Perl/split3.php: SUCCEEDED
    RegEx/Perl/split4.php: SUCCEEDED
    RegEx/Perl/split5.php: SUCCEEDED
    RegEx/Perl/split6.php: SUCCEEDED
    RegEx/Perl/ungreedy.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    aaa
    a
    aaa
    
    a
    aa
    aaa
    aa
    aaa
    aaa
    a
    aaa
    a
    a
    aa
    aaa
    aa
    aaa
    RegEx/Perl/unsuccessful-preg_match_all.php: SUCCEEDED
    RegEx/Perl/withoutdelimiters.php: SUCCEEDED
    SPL/AppendIterator1.php: SUCCEEDED
    SPL/AppendIterator2.php: SUCCEEDED
    SPL/ArrayAccess_offsetExists.php: SUCCEEDED
    SPL/ArrayIterator1.php: SUCCEEDED
    SPL/ArrayIterator2.php: SUCCEEDED
    SPL/Autoload_ctor.php: SUCCEEDED
    SPL/Autoload_extends.php: SUCCEEDED
    SPL/exceptions.php: SUCCEEDED
    SPL/FilterIterator.php: SUCCEEDED
    SPL/RecursiveIteratorIterator1.php: SUCCEEDED
    SPL/RecursiveIteratorIterator2.php: SUCCEEDED
    SPL/RecursiveIteratorIterator3.php: SUCCEEDED
    SPL/SplFixedArray1.php: SUCCEEDED
    SPL/SplFixedArray2.php: SUCCEEDED
    SPL/SplObjectStorage1.php: SUCCEEDED
    SPL/SplObjectStorage2.php: SUCCEEDED
    SPL/SplObjectStorage3.php: SUCCEEDED
    SPL/SplObjectStorage4.php: SUCCEEDED
    Strings/addcslashes.php: SUCCEEDED
    Strings/addslashes.php: SUCCEEDED
    Strings/chunk_split.php: SUCCEEDED
    Strings/concat.php: SUCCEEDED
    Strings/count_chars.php: SUCCEEDED
    Strings/crc32.php: SUCCEEDED
    Strings/crypt.php: SUCCEEDED
    Strings/crypt2.php: SUCCEEDED
    Strings/echo.php: SUCCEEDED
    Strings/explode.php: SUCCEEDED
    Strings/get_html_translation_table.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <hr>[&] => &amp;
    [>] => &gt;
    [<] => &lt;
    ["] => &quot;
    <hr>Hallo &amp; &lt;Frau&gt; &amp; Kr&iuml;&iquest;&frac12;mer
    <hr>[&] => &amp;
    [>] => &gt;
    [<] => &lt;
    ["] => &quot;
    <hr>Hallo &amp; &lt;Frau&gt; &amp; Kr�mer
    Strings/mb_strlen.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Call to undefined function mb_strlen() in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 4
    Error: Call to undefined function: 'mb_strlen' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 4, column 1.
    Strings/nl2br.php: SUCCEEDED
    Strings/pack.php: SUCCEEDED
    Strings/pos.php: SUCCEEDED
    Strings/runtime-quotes.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    fread = (x''y"z)
    fgets = (x''y"z)
    file[0] = (x''y"z)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    
    Warning: fopen(runtime-quotes2.txt): failed to open stream: Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 33
    
    Warning: fwrite() expects parameter 1 to be resource, boolean given in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 35
    fwrite = ()
    
    Warning: fputs() expects parameter 1 to be resource, boolean given in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 38
    fputs = ()
    
    Warning: fclose() expects parameter 1 to be resource, boolean given in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 41
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (x'y"z)
    fgets = (x'y"z)
    file[0] = (x'y"z)
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (a\'b"\\ca\)
    fgets = (a\'b"\\ca\'b"\\c)
    file[0] = (a\'b"\\ca\'b"\\c)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    e'e
    e''e
    e'e
    e'e
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    e'e
    e'e
    e'e
    e'e
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    fread = (x''y"z)
    fgets = (x''y"z)
    file[0] = (x''y"z)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    
    Warning: fopen(): Unable to access (D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\runtime-quotes2.txt): Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 33, column 3.
    
    Warning: Cannot convert boolean to resource implicitly in a call to function fwrite() in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 35, column 3.
    fwrite = (0)
    
    Warning: Cannot convert boolean to resource implicitly in a call to function fputs() in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 38, column 3.
    fputs = (0)
    
    Warning: Cannot convert boolean to resource implicitly in a call to function fclose() in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 41, column 3.
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (x'y"z)
    fgets = (x'y"z)
    file[0] = (x'y"z)
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (a\'b"\\ca\)
    fgets = (a\'b"\\ca\'b"\\c)
    file[0] = (a\'b"\\ca\'b"\\c)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    e'e
    e''e
    e'e
    e'e
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    e'e
    e'e
    e'e
    e'e
    Strings/sprintf.php: SUCCEEDED
    Strings/sprintf2.php: SUCCEEDED
    Strings/stripslashes.php: SUCCEEDED
    Strings/strtr.php: SUCCEEDED
    Strings/str_ireplace.php: SUCCEEDED
    Strings/str_replace.php: SUCCEEDED
    Strings/str_word_count.php: SUCCEEDED
    Strings/substr_operations.php: SUCCEEDED
    Strings/wordwrap.php: SUCCEEDED
    Variables/advanced_serialize.php: SUCCEEDED
    Variables/arguments.php: SUCCEEDED
    Variables/assign_copy.php: SUCCEEDED
    Variables/bitwise.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "00"
    string(2) "31"
    string(2) "31"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    0
    0
    0
    5
    0
    5
    40
    5
    45
    string(48) "000000000000000000000000000000000000000000000000"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(14) "31323331323331"
    string(2) "30"
    string(14) "31323331323331"
    string(16) "3635343635343536"
    string(2) "30"
    string(16) "3635343635343536"
    string(14) "337a5e8be43d7a"
    string(14) "00002130120201"
    string(48) "337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42"
    string(16) "347d598ce33a7e77"
    string(16) "0200243214040100"
    string(48) "367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42"
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "00"
    string(2) "31"
    string(2) "31"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    0
    -9223372036854775808
    -9223372036854775808
    -9223372036854775803
    0
    -9223372036854775803
    40
    5
    45
    string(48) "000000000000000000000000000000000000000000000000"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(14) "31323331323331"
    string(2) "30"
    string(14) "31323331323331"
    string(16) "3635343635343536"
    string(2) "30"
    string(16) "3635343635343536"
    string(14) "337a5e8be43d7a"
    string(14) "00002130120201"
    string(48) "337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42"
    string(16) "347d598ce33a7e77"
    string(16) "0200243214040100"
    string(48) "367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42"
    Variables/class_constants.php: SUCCEEDED
    Variables/comparisons.php: SUCCEEDED
    Variables/constant.php: SUCCEEDED
    Variables/constants_defined.php: SUCCEEDED
    Variables/extract%20refs.php: SUCCEEDED
    Variables/extract.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    EXTR_PREFIX_ALL
    integer(4)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
      'prefix_non_existent' => integer(1)
    }
    <hr>EXTR_PREFIX_INVALID
    integer(5)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => integer(2)
      'non_existent' => integer(1)
      'prefix_' => integer(1)
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => 'hello'
    }
    <hr>EXTR_PREFIX_SAME
    integer(3)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'non_existent' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>EXTR_PREFIX_IF_EXISTS
    integer(3)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>
    EXTR_PREFIX_ALL
    integer(4)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
      'prefix_non_existent' => integer(1)
    }
    <hr>EXTR_PREFIX_INVALID
    integer(5)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => integer(2)
      'non_existent' => integer(1)
      'prefix_' => integer(1)
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => 'hello'
    }
    <hr>EXTR_PREFIX_SAME
    integer(4)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'non_existent' => integer(1)
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>EXTR_PREFIX_IF_EXISTS
    integer(3)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>
    Variables/func_get_args.php: SUCCEEDED
    Variables/is_number.php: SUCCEEDED
    Variables/serialize.php: SUCCEEDED
    Variables/unserialize_objects.php: SUCCEEDED
    Variables/var_dumping.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Array
    (
        [0] => 1
        [1] => 
        [2] => 1
        [3] => 1.2
        [4] => 
        [5] => asdas
        [6] => Array
            (
                [0] => 1
            )
    
        [7] => stdClass Object
            (
            )
    
        [8] => Resource id #1
    )
    array(9) {
      [0]=>
      bool(true)
      [1]=>
      bool(false)
      [2]=>
      int(1)
      [3]=>
      float(1.2)
      [4]=>
      NULL
      [5]=>
      string(5) "asdas"
      [6]=>
      array(1) {
        [0]=>
        int(1)
      }
      [7]=>
      object(stdClass)#1 (0) {
      }
      [8]=>
      resource(1) of type (stream)
    }
    array (
      0 => true,
      1 => false,
      2 => 1,
      3 => 1.2,
      4 => NULL,
      5 => 'asdas',
      6 => 
      array (
        0 => 1,
      ),
      7 => 
      stdClass::__set_state(array(
      )),
      8 => NULL,
    )
    Array
    (
        [0] => 1
        [1] => 
        [2] => 1
        [3] => 1.2
        [4] => 
        [5] => asdas
        [6] => Array
            (
                [0] => 1
            )
    
        [7] => stdClass Object
            (
            )
    
        [8] => resource id #4
    
    )
    array(9) {
      [0]=>
      bool(true)
      [1]=>
      bool(false)
      [2]=>
      int(1)
      [3]=>
      float(1.2)
      [4]=>
      NULL
      [5]=>
      string(5) "asdas"
      [6]=>
      array(1) {
        [0]=>
        int(1)
      }
      [7]=>
      object(stdClass)#64844482 (0) {
      }
      [8]=>
      resource(4) of type (stream)
    }
    array (
      0 => true,
      1 => false,
      2 => 1,
      3 => 1.2,
      4 => NULL,
      5 => 'asdas',
      6 => array (
        0 => 1,
      ),
      7 => class stdClass
      {
    
      },
      8 => NULL,
    )
    Xml/025.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
      'foo' => 'foobar'
    }
    array
    {
      'html' => 'http://www.w3.org/1999/xhtml'
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
    }
    array
    {
      'html' => 'http://www.w3.org/1999/xhtml'
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'foo' => 'foobar'
      'baz' => 'foobarbaz'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
    }
    array
    {
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
      'baz' => 'foobarbaz'
      'foo' => 'foobar'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
      'baz' => 'foobarbaz'
      'foo' => 'foobar'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
    }
    array
    {
    }
    Xml/026.php: SUCCEEDED
    Xml/027.php: SUCCEEDED
    Xml/028.php: SUCCEEDED
    Xml/029.php: SUCCEEDED
    Xml/030.php: SUCCEEDED
    Xml/032.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    FALSE
    FALSE
    FALSE
    TRUE
    TRUE
    TRUE
    Xml/033.php: SUCCEEDED
    Xml/bug26384.php: SUCCEEDED
    Xml/bug28721.php: SUCCEEDED
    Xml/bug28817.php: SUCCEEDED
    Xml/bug32615.php: SUCCEEDED
    Xml/bug33853.php: SUCCEEDED
    Xml/bug34276.php: SUCCEEDED
    Xml/bug35342.php: SUCCEEDED
    Xml/bug36756.php: SUCCEEDED
    Xml/bug37277.php: SUCCEEDED
    Xml/dom002.php: SUCCEEDED
    Xml/dom003.php: SUCCEEDED
    Xml/dom006.php: SUCCEEDED
    Xml/dom007.php: SUCCEEDED
    Xml/dom_set_attr_node.php: SUCCEEDED
    Xml/xmlhandler.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test begins
    <br/>
    <br/>test begins
    <br/>empty begins
    <br/>empty ends
    <br/>nocontent begins
    <br/>nocontent ends
    <br/>content begins
    <br/>empty begins
    <br/>empty ends
    <br/>empty begins
    <br/>empty ends
    <br/>content ends
    <br/>empty begins
    <br/>empty ends
    <br/>empty begins
    <br/>empty ends
    <br/>test ends
    <br/>Test ends
    <br/>
    <br/>
    Test begins
    <br/>
    <br/>
    Error: Call to undefined function: 'xml_parser_create' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Xml\__input.txt at expression on line 18, column 3.
    Xml/xslt001.php: SUCCEEDED
    Xml/xslt002.php: SUCCEEDED
    Xml/xslt003.php: SUCCEEDED
    Xml/xslt004.php: SUCCEEDED
    Xml/xslt005.php: SUCCEEDED
    Xml/xslt006.php: SUCCEEDED
    Xml/xslt007.php: SUCCEEDED
    Xml/xslt010.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test 10: EXSLT Support
      
      
      Test Date : 0001-12-31Z
        year                 : 1
        leap-year            : false
        month-in-year        : 12
        month-name           : December
        month-abbreviation   : Dec
        week-in-year         : 1
        day-in-year          : 365
        day-in-month         : 31
        day-of-week-in-month : 5
        day-in-week          : 2
        day-name             : Monday
        day-abbreviation     : Mon
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : 3000-01-31
        year                 : 3000
        leap-year            : false
        month-in-year        : 1
        month-name           : January
        month-abbreviation   : Jan
        week-in-year         : 5
        day-in-year          : 31
        day-in-month         : 31
        day-of-week-in-month : 5
        day-in-week          : 6
        day-name             : Friday
        day-abbreviation     : Fri
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : 2000-02-29
        year                 : 2000
        leap-year            : true
        month-in-year        : 2
        month-name           : February
        month-abbreviation   : Feb
        week-in-year         : 9
        day-in-year          : 60
        day-in-month         : 29
        day-of-week-in-month : 5
        day-in-week          : 3
        day-name             : Tuesday
        day-abbreviation     : Tue
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : 9990001-12-31Z
        year                 : 9990001
        leap-year            : false
        month-in-year        : 12
        month-name           : December
        month-abbreviation   : Dec
        week-in-year         : 1
        day-in-year          : 365
        day-in-month         : 31
        day-of-week-in-month : 5
        day-in-week          : 2
        day-name             : Monday
        day-abbreviation     : Mon
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : -0004-02-29
        year                 : -4
        leap-year            : true
        month-in-year        : 2
        month-name           : February
        month-abbreviation   : Feb
        week-in-year         : 9
        day-in-year          : 60
        day-in-month         : 29
        day-of-week-in-month : 5
        day-in-week          : 1
        day-name             : Sunday
        day-abbreviation     : Sun
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
    Test 10: EXSLT Support
    Warning: Cannot find a script or an extension object associated with namespace 'http://exslt.org/dates-and-times'..
    
    Warning: Illegal string offset '-1' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Phalanger.inc at expression on line 7, column 6.
    Xml/xslt011.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test 11: php:function Support
    
    Warning: XSLTProcessor::transformToXml(): A PHP Object cannot be converted to a XPath-string in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Xml\__input.txt on line 18
    <?xml version="1.0"?>
    foobar - secondArg
    foobar - 
    this is from an external DomDocument
    from the Input Document
    static
    Test 11: php:function Support
    <?xml version="1.0" encoding="utf-8"?>foobar - secondArg
    foobar - 
    this is from an external DomDocument
    from the Input Document
    static
    not a DomNode object
    Xml/xslt012.php: SUCCEEDED
    ================================================ FILE: Testing/Tests/TestLogs/TestLog (79002).htm ================================================ PHP.NET Compiler test log

    PHP.NET Compiler test log

    (92%) 803 succeeded, 67 failed
    Test ResultCompiler error outputExpected test result
    @PHP/classes/array_access_001.php: SUCCEEDED
    @PHP/classes/array_access_002.php: SUCCEEDED
    @PHP/classes/array_access_003.php: SUCCEEDED
    @PHP/classes/array_access_004.php: SUCCEEDED
    @PHP/classes/array_access_005.php: SUCCEEDED
    @PHP/classes/array_access_006.php: SUCCEEDED
    @PHP/classes/array_access_007.php: SUCCEEDED
    @PHP/classes/array_access_008.php: SUCCEEDED
    @PHP/classes/array_access_009.php: SUCCEEDED
    @PHP/classes/array_access_010.php: SUCCEEDED
    @PHP/classes/array_access_011.php: SUCCEEDED
    @PHP/classes/array_access_013.php: SUCCEEDED
    @PHP/classes/assign_op_property_001.php: SUCCEEDED
    @PHP/classes/autoload_001.php: SUCCEEDED
    @PHP/classes/autoload_002.php: SUCCEEDED
    @PHP/classes/autoload_003.php: SUCCEEDED
    @PHP/classes/autoload_005.php: SUCCEEDED
    @PHP/classes/autoload_006.php: SUCCEEDED
    @PHP/classes/bug23951.php: SUCCEEDED
    @PHP/classes/bug24399.php: SUCCEEDED
    @PHP/classes/bug24445.php: SUCCEEDED
    @PHP/classes/bug26737.php: SUCCEEDED
    @PHP/classes/bug27468.php: SUCCEEDED
    @PHP/classes/bug27504.php: SUCCEEDED
    @PHP/classes/class_example.php: SUCCEEDED
    @PHP/classes/class_stdclass.php: SUCCEEDED
    @PHP/classes/clone_001.php: SUCCEEDED
    @PHP/classes/clone_002.php: SUCCEEDED
    @PHP/classes/clone_003.php: SUCCEEDED
    @PHP/classes/clone_004.php: SUCCEEDED
    @PHP/classes/clone_006.php: SUCCEEDED
    @PHP/classes/constants_scope_001.php: SUCCEEDED
    @PHP/classes/ctor_dtor.php: SUCCEEDED
    @PHP/classes/ctor_dtor_inheritance.php: SUCCEEDED
    @PHP/classes/ctor_name_clash.php: SUCCEEDED
    @PHP/classes/dereferencing_001.php: SUCCEEDED
    @PHP/classes/destructor_and_echo.php: SUCCEEDED
    @PHP/classes/destructor_and_references.php: SUCCEEDED
    @PHP/classes/destructor_inheritance.php: SUCCEEDED
    @PHP/classes/destructor_visibility_003.php: SUCCEEDED
    @PHP/classes/factory_001.php: SUCCEEDED
    @PHP/classes/factory_and_singleton_001.php: SUCCEEDED
    @PHP/classes/factory_and_singleton_002.php: SUCCEEDED
    @PHP/classes/final.php: SUCCEEDED
    @PHP/classes/incdec_property_001.php: SUCCEEDED
    @PHP/classes/incdec_property_002.php: SUCCEEDED
    @PHP/classes/incdec_property_003.php: SUCCEEDED
    @PHP/classes/incdec_property_004.php: SUCCEEDED
    @PHP/classes/inheritance.php: SUCCEEDED
    @PHP/classes/inheritance_002.php: SUCCEEDED
    @PHP/classes/interfaces_001.php: SUCCEEDED
    @PHP/classes/interface_construct.php: SUCCEEDED
    @PHP/classes/interface_doubled.php: SUCCEEDED
    @PHP/classes/interface_implemented.php: SUCCEEDED
    @PHP/classes/iterators_001.php: SUCCEEDED
    @PHP/classes/iterators_002.php: SUCCEEDED
    @PHP/classes/iterators_003.php: SUCCEEDED
    @PHP/classes/iterators_004.php: SUCCEEDED
    @PHP/classes/iterators_006.php: SUCCEEDED
    @PHP/classes/iterators_007.php: SUCCEEDED
    @PHP/classes/object_reference_001.php: SUCCEEDED
    @PHP/classes/private_001.php: SUCCEEDED
    @PHP/classes/private_002.php: SUCCEEDED
    @PHP/classes/private_003.php: SUCCEEDED
    @PHP/classes/private_003b.php: SUCCEEDED
    @PHP/classes/private_004.php: SUCCEEDED
    @PHP/classes/private_004b.php: SUCCEEDED
    @PHP/classes/private_005.php: SUCCEEDED
    @PHP/classes/private_005b.php: SUCCEEDED
    @PHP/classes/private_006.php: SUCCEEDED
    @PHP/classes/private_006b.php: SUCCEEDED
    @PHP/classes/private_007.php: SUCCEEDED
    @PHP/classes/private_007b.php: SUCCEEDED
    @PHP/classes/private_members.php: SUCCEEDED
    @PHP/classes/private_redeclare.php: SUCCEEDED
    @PHP/classes/protected_001.php: SUCCEEDED
    @PHP/classes/protected_001b.php: SUCCEEDED
    @PHP/classes/protected_002.php: SUCCEEDED
    @PHP/classes/serialize_001.php: SUCCEEDED
    @PHP/classes/singleton_001.php: SUCCEEDED
    @PHP/classes/static_properties_001.php: SUCCEEDED
    @PHP/classes/type_hinting_001.php: SUCCEEDED
    @PHP/classes/type_hinting_003.php: SUCCEEDED
    @PHP/classes/visibility_000c.php: SUCCEEDED
    @PHP/classes/visibility_001c.php: SUCCEEDED
    @PHP/classes/visibility_002c.php: SUCCEEDED
    @PHP/classes/visibility_003a.php: SUCCEEDED
    @PHP/classes/visibility_003c.php: SUCCEEDED
    @PHP/classes/visibility_004a.php: SUCCEEDED
    @PHP/classes/visibility_004b.php: SUCCEEDED
    @PHP/classes/visibility_004c.php: SUCCEEDED
    @PHP/classes/visibility_005.php: SUCCEEDED
    @PHP/classes/__call_001.php: SUCCEEDED
    @PHP/classes/__set_data_corrupt.php: SUCCEEDED
    @PHP/classes/__set__get_001.php: SUCCEEDED
    @PHP/classes/__set__get_004.php: SUCCEEDED
    @PHP/classes/__set__get_005.php: SUCCEEDED
    @PHP/date/bug17988.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2002-06-25 12:18:48
    2002-06-25 14:18:48
    2002-06-25 13:18:48
    2002-06-25 12:18:48
    2002-06-25 18:18:48
    2002-06-25 14:18:48
    2002-06-25 14:18:48
    2002-06-25 18:18:48
    2002-06-25 10:18:48
    2002-06-25 17:18:48
    2002-06-25 11:18:48
    2002-06-25 17:48:48
    2002-06-25 10:48:48
    2002-06-25 14:18:48
    2002-06-25 14:18:48
    2002-06-25 13:18:48
    2002-06-25 12:18:48
    2002-06-25 18:18:48
    2002-06-25 14:18:48
    2002-06-25 14:18:48
    2002-06-25 18:18:48
    2002-06-25 10:18:48
    2002-06-25 17:18:48
    2002-06-25 11:18:48
    2002-06-25 17:48:48
    2002-06-25 10:48:48
    @PHP/date/bug26317.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2003-11-19 17:20:42
    2003-11-19 17:20:42
    2003-11-19 17:20:42
    2003-11-19 16:20:42
    2003-11-19 16:20:42
    2003-11-19 16:20:42
    @PHP/date/bug26320.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2003-11-19 12:30:42
    2003-11-19 13:30:42
    2003-11-19 12:30:42
    2003-11-19 12:30:42
    @PHP/date/bug28088.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    The following line rightly shows the correct date time:
    04/04/04 2145
    But the following line fails to show the correct date time:
    04/03/04 2245
    The following line rightly shows the correct date time:
    04/04/04 2345
    But the following line fails to show the correct date time:
    04/04/04 0045
    @PHP/date/bug28599.php: SUCCEEDED
    @PHP/date/bug29150.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2005-06-19 22:00:00
    2005-06-20 00:00:00
    @PHP/date/bug29585.php: SUCCEEDED
    @PHP/date/bug29595.php: SUCCEEDED
    @PHP/date/bug33056.php: SUCCEEDED
    @PHP/date/bug33452.php: SUCCEEDED
    @PHP/date/bug33562.php: SUCCEEDED
    @PHP/date/bug33563.php: SUCCEEDED
    @PHP/date/bug33578.php: SUCCEEDED
    @PHP/date/bug33869.php: SUCCEEDED
    @PHP/date/bug34676.php: SUCCEEDED
    @PHP/date/bug34771.php: SUCCEEDED
    @PHP/date/bug35143.php: SUCCEEDED
    @PHP/date/bug35414.php: SUCCEEDED
    @PHP/date/bug35422.php: SUCCEEDED
    @PHP/date/bug35425.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    integer(42)
    integer(1)
    integer(1)
    integer(1)
    integer(1)
    integer(0)
    integer(0)
    integer(1)
    integer(1)
    integer(31)
    integer(1104537661)
    integer(6)
    integer(53)
    integer(5)
    integer(2005)
    integer(0)
    integer(3600)
    integer(292)
    integer(1)
    integer(1)
    integer(1)
    integer(1)
    integer(0)
    integer(0)
    integer(1)
    integer(1)
    integer(31)
    integer(1104559261)
    integer(6)
    integer(53)
    integer(5)
    integer(2005)
    integer(0)
    integer(-18000)
    @PHP/date/bug35456.php: SUCCEEDED
    @PHP/date/bug35624.php: SUCCEEDED
    @PHP/date/bug35630.php: SUCCEEDED
    @PHP/date/bug35699.php: SUCCEEDED
    @PHP/date/bug35705.php: SUCCEEDED
    @PHP/date/bug35885.php: SUCCEEDED
    @PHP/date/bug35887.php: SUCCEEDED
    @PHP/date/date.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    c: 2003-01-23T13:20:59+01:00
    r: Thu, 23 Jan 2003 13:20:59 +0100
    c: 2003-01-23T13:20:59+01:00
    r: Thu, 23 Jan 2003 13:20:59 +0100
    c: 2003-01-23T12:20:59+00:00
    r: Thu, 23 Jan 2003 12:20:59 +0000
    c: 2003-01-23T13:20:59+01:00
    r: Thu, 23 Jan 2003 13:20:59 +0100
    @PHP/date/date_create-1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\date\__input.txt on line 28
    SKIP
    @PHP/date/date_create-2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\date\__input.txt on line 6
    SKIP
    @PHP/date/date_default_timezone_get-3.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Europe/Prague
    America/Chicago
    Europe/Rome
    America/Chicago
    @PHP/date/date_modify-1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\date\__input.txt on line 6
    SKIP
    @PHP/date/date_modify-2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\date\__input.txt on line 6
    SKIP
    @PHP/date/default-timezone-1.php: SUCCEEDED
    @PHP/date/default-timezone-2.php: SUCCEEDED
    @PHP/date/format-negative-timestamp.php: SUCCEEDED
    @PHP/date/strtotime.php: SUCCEEDED
    @PHP/date/timezone-configuration.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    1119125744
    1119125744
    1119125744
    1119125744
    1119129344
    1119125744
    @PHP/doc_examples/test001.php: SUCCEEDED
    @PHP/doc_examples/test002.php: SUCCEEDED
    @PHP/doc_examples/test003.php: SUCCEEDED
    @PHP/doc_examples/test004.php: SUCCEEDED
    @PHP/doc_examples/test005.php: SUCCEEDED
    @PHP/doc_examples/test006.php: SUCCEEDED
    @PHP/doc_examples/test007.php: SUCCEEDED
    @PHP/doc_examples/test008.php: SUCCEEDED
    @PHP/doc_examples/test009.php: SUCCEEDED
    @PHP/doc_examples/test010.php: SUCCEEDED
    @PHP/doc_examples/test011.php: SUCCEEDED
    @PHP/doc_examples/test013.php: SUCCEEDED
    @PHP/doc_examples/test014.php: SUCCEEDED
    @PHP/doc_examples/test015.php: SUCCEEDED
    @PHP/doc_examples/test016.php: SUCCEEDED
    @PHP/doc_examples/test017.php: SUCCEEDED
    @PHP/doc_examples/test018.php: SUCCEEDED
    @PHP/doc_examples/test019.php: SUCCEEDED
    @PHP/doc_examples/test020.php: SUCCEEDED
    @PHP/doc_examples/test021.php: SUCCEEDED
    @PHP/doc_examples/test022.php: SUCCEEDED
    @PHP/doc_examples/test023.php: SUCCEEDED
    @PHP/doc_examples/test024.php: SUCCEEDED
    @PHP/doc_examples/test025.php: SUCCEEDED
    @PHP/doc_examples/test026.php: SUCCEEDED
    @PHP/doc_examples/test027.php: SUCCEEDED
    @PHP/doc_examples/test028.php: SUCCEEDED
    @PHP/doc_examples/test029.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ´┐Żauky
    ─Ć┼╝╦Łauky
    @PHP/doc_examples/test030.php: SUCCEEDED
    @PHP/doc_examples/test031.php: SUCCEEDED
    @PHP/doc_examples/test032.php: SUCCEEDED
    @PHP/doc_examples/test033.php: SUCCEEDED
    @PHP/doc_examples/test034.php: SUCCEEDED
    @PHP/doc_examples/test035.php: SUCCEEDED
    @PHP/doc_examples/test036.php: SUCCEEDED
    @PHP/doc_examples/test037.php: SUCCEEDED
    @PHP/doc_examples/test038.php: SUCCEEDED
    @PHP/doc_examples/test039.php: SUCCEEDED
    @PHP/doc_examples/test040.php: SUCCEEDED
    @PHP/doc_examples/test041.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    call_user_func():
    hello world!
    Strict Standards: call_user_func(): Non-static method MyClass::myCallbackMethod() should not be called statically in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\doc_examples\__input.txt at expression on line 17, column 1.
    Hello World!Hello World!
    @PHP/doc_examples/test042.php: SUCCEEDED
    @PHP/doc_examples/test043.php: SUCCEEDED
    @PHP/doc_examples/test044.php: SUCCEEDED
    @PHP/doc_examples/test045.php: SUCCEEDED
    @PHP/doc_examples/test046.php: SUCCEEDED
    @PHP/doc_examples/test047.php: SUCCEEDED
    @PHP/doc_examples/test048.php: SUCCEEDED
    @PHP/doc_examples/test049.php: SUCCEEDED
    @PHP/doc_examples/test050.php: SUCCEEDED
    @PHP/doc_examples/test051.php: SUCCEEDED
    @PHP/doc_examples/test052.php: SUCCEEDED
    @PHP/doc_examples/test053.php: SUCCEEDED
    @PHP/doc_examples/test054.php: SUCCEEDED
    @PHP/doc_examples/test055.php: SUCCEEDED
    @PHP/doc_examples/test056.php: SUCCEEDED
    @PHP/doc_examples/test057.php: SUCCEEDED
    @PHP/doc_examples/test058.php: SUCCEEDED
    @PHP/doc_examples/test059.php: SUCCEEDED
    @PHP/doc_examples/test060.php: SUCCEEDED
    @PHP/doc_examples/test061.php: SUCCEEDED
    @PHP/doc_examples/test062.php: SUCCEEDED
    @PHP/doc_examples/test063.php: SUCCEEDED
    @PHP/doc_examples/test064.php: SUCCEEDED
    @PHP/doc_examples/test065.php: SUCCEEDED
    @PHP/doc_examples/test066.php: SUCCEEDED
    @PHP/doc_examples/test067.php: SUCCEEDED
    @PHP/doc_examples/test068.php: SUCCEEDED
    @PHP/doc_examples/test069.php: SUCCEEDED
    @PHP/doc_examples/test070.php: SUCCEEDED
    @PHP/doc_examples/test071.php: SUCCEEDED
    @PHP/doc_examples/test072.php: SUCCEEDED
    @PHP/doc_examples/test073.php: SUCCEEDED
    @PHP/doc_examples/test074.php: SUCCEEDED
    @PHP/doc_examples/test075.php: SUCCEEDED
    @PHP/doc_examples/test076.php: SUCCEEDED
    @PHP/doc_examples/test077.php: SUCCEEDED
    @PHP/doc_examples/test078.php: SUCCEEDED
    @PHP/doc_examples/test079.php: SUCCEEDED
    @PHP/doc_examples/test080.php: SUCCEEDED
    @PHP/doc_examples/test081.php: SUCCEEDED
    @PHP/doc_examples/test082.php: SUCCEEDED
    @PHP/doc_examples/test083.php: SUCCEEDED
    @PHP/doc_examples/test084.php: SUCCEEDED
    @PHP/doc_examples/test085.php: SUCCEEDED
    @PHP/doc_examples/test086.php: SUCCEEDED
    @PHP/doc_examples/test087.php: SUCCEEDED
    @PHP/doc_examples/test088.php: SUCCEEDED
    @PHP/doc_examples/test089.php: SUCCEEDED
    @PHP/doc_examples/test090.php: SUCCEEDED
    @PHP/doc_examples/test091.php: SUCCEEDED
    @PHP/doc_examples/test092.php: SUCCEEDED
    @PHP/doc_examples/test093.php: SUCCEEDED
    @PHP/doc_examples/test094.php: SUCCEEDED
    @PHP/doc_examples/test095.php: SUCCEEDED
    @PHP/doc_examples/test096.php: SUCCEEDED
    @PHP/doc_examples/test097.php: SUCCEEDED
    @PHP/doc_examples/test098.php: SUCCEEDED
    @PHP/doc_examples/test099.php: SUCCEEDED
    @PHP/doc_examples/test100.php: SUCCEEDED
    @PHP/doc_examples/test102.php: SUCCEEDED
    @PHP/doc_examples/test103.php: SUCCEEDED
    @PHP/doc_examples/test104.php: SUCCEEDED
    @PHP/doc_examples/test105.php: SUCCEEDED
    @PHP/doc_examples/test107.php: SUCCEEDED
    @PHP/doc_examples/test108.php: SUCCEEDED
    @PHP/doc_examples/test109.php: SUCCEEDED
    @PHP/doc_examples/test110.php: SUCCEEDED
    @PHP/doc_examples/test111.php: SUCCEEDED
    @PHP/doc_examples/test112.php: SUCCEEDED
    @PHP/doc_examples/test113.php: SUCCEEDED
    @PHP/doc_examples/test114.php: SUCCEEDED
    @PHP/doc_examples/test115.php: SUCCEEDED
    @PHP/doc_examples/test116.php: SUCCEEDED
    @PHP/doc_examples/test117.php: SUCCEEDED
    @PHP/doc_examples/test118.php: SUCCEEDED
    @PHP/doc_examples/test119.php: SUCCEEDED
    @PHP/doc_examples/test120.php: SUCCEEDED
    @PHP/doc_examples/test121.php: SUCCEEDED
    @PHP/doc_examples/test122.php: SUCCEEDED
    @PHP/doc_examples/test123.php: SUCCEEDED
    @PHP/doc_examples/test124.php: SUCCEEDED
    @PHP/doc_examples/test125.php: SUCCEEDED
    @PHP/doc_examples/test126.php: SUCCEEDED
    @PHP/doc_examples/test127.php: SUCCEEDED
    @PHP/doc_examples/test128.php: SUCCEEDED
    @PHP/doc_examples/test129.php: SUCCEEDED
    @PHP/doc_examples/test130.php: SUCCEEDED
    @PHP/doc_examples/test131.php: SUCCEEDED
    @PHP/doc_examples/test132.php: SUCCEEDED
    @PHP/doc_examples/test133.php: SUCCEEDED
    @PHP/doc_examples/test134.php: SUCCEEDED
    @PHP/doc_examples/test136.php: SUCCEEDED
    @PHP/doc_examples/test137.php: SUCCEEDED
    @PHP/doc_examples/test138.php: SUCCEEDED
    @PHP/doc_examples/test139.php: SUCCEEDED
    @PHP/doc_examples/test148.php: SUCCEEDED
    @PHP/doc_examples/test149.php: SUCCEEDED
    @PHP/doc_examples/test150.php: SUCCEEDED
    @PHP/doc_examples/test151.php: SUCCEEDED
    @PHP/doc_examples/test152.php: SUCCEEDED
    @PHP/doc_examples/test153.php: SUCCEEDED
    @PHP/doc_examples/test154.php: SUCCEEDED
    @PHP/doc_examples/test155.php: SUCCEEDED
    @PHP/doc_examples/test156.php: SUCCEEDED
    @PHP/doc_examples/test158.php: SUCCEEDED
    @PHP/lang/001.php: SUCCEEDED
    @PHP/lang/002.php: SUCCEEDED
    @PHP/lang/003.php: SUCCEEDED
    @PHP/lang/004.php: SUCCEEDED
    @PHP/lang/005.php: SUCCEEDED
    @PHP/lang/006.php: SUCCEEDED
    @PHP/lang/007.php: SUCCEEDED
    @PHP/lang/008.php: SUCCEEDED
    @PHP/lang/009.php: SUCCEEDED
    @PHP/lang/010.php: SUCCEEDED
    @PHP/lang/011.php: SUCCEEDED
    @PHP/lang/012.php: SUCCEEDED
    @PHP/lang/013.php: SUCCEEDED
    @PHP/lang/014.php: SUCCEEDED
    @PHP/lang/015.php: SUCCEEDED
    @PHP/lang/016.php: SUCCEEDED
    @PHP/lang/017.php: SUCCEEDED
    @PHP/lang/018.php: SUCCEEDED
    @PHP/lang/019.php: SUCCEEDED
    @PHP/lang/020.php: SUCCEEDED
    @PHP/lang/021.php: SUCCEEDED
    @PHP/lang/022.php: SUCCEEDED
    @PHP/lang/023.php: SUCCEEDED
    @PHP/lang/024.php: SUCCEEDED
    @PHP/lang/025.php: SUCCEEDED
    @PHP/lang/026.php: SUCCEEDED
    @PHP/lang/027.php: SUCCEEDED
    @PHP/lang/028.php: SUCCEEDED
    @PHP/lang/030.php: SUCCEEDED
    @PHP/lang/032.php: SUCCEEDED
    @PHP/lang/036.php: SUCCEEDED
    @PHP/lang/037.php: SUCCEEDED
    @PHP/lang/038.php: SUCCEEDED
    @PHP/lang/039.php: SUCCEEDED
    @PHP/lang/040.php: SUCCEEDED
    @PHP/lang/bison1.php: SUCCEEDED
    @PHP/lang/bug17115.php: SUCCEEDED
    @PHP/lang/bug18872.php: SUCCEEDED
    @PHP/lang/bug19943.php: SUCCEEDED
    @PHP/lang/bug20175.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    Deprecated: Assigning the return value of new by reference is deprecated in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\lang\__input.txt on line 110
    foo_static()
    foo_global()
    foo:1
    foo_static()
    foo:1
    bar_static()
    bar_global()
    bar:1
    bar_static()
    bar:1
    wow_static()
    wow_global()
    wow:1
    wow_static()
    wow:1
    oop_test()
    oop_static()
    oop_class()
    oop:1
    oop_static()
    oop:1
    oop_test()
    oop_static()
    oop:1
    foo_static()
    foo_global()
    foo:1
    foo_static()
    foo:1
    bar_static()
    bar_global()
    bar:1
    bar_static()
    bar_global()
    bar:2
    wow_static()
    wow_global()
    wow:1
    wow_static()
    wow:1
    oop_test()
    oop_static()
    oop_class()
    oop:1
    oop_static()
    oop:1
    oop_test()
    oop_static()
    oop:1
    D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\lang\__input.txt(110,4): warning PHP0181: Assigning the return value of new by reference is deprecated
    
    @PHP/lang/bug21094.php: SUCCEEDED
    @PHP/lang/bug21600.php: SUCCEEDED
    @PHP/lang/bug21669.php: SUCCEEDED
    @PHP/lang/bug21849.php: SUCCEEDED
    @PHP/lang/bug21961.php: SUCCEEDED
    @PHP/lang/bug22231.php: SUCCEEDED
    @PHP/lang/bug22367.php: SUCCEEDED
    @PHP/lang/bug22510.php: SUCCEEDED
    @PHP/lang/bug22592.php: SUCCEEDED
    @PHP/lang/bug22690.php: SUCCEEDED
    @PHP/lang/bug23279.php: SUCCEEDED
    @PHP/lang/bug23384.php: SUCCEEDED
    @PHP/lang/bug23489.php: SUCCEEDED
    @PHP/lang/bug23524.php: SUCCEEDED
    @PHP/lang/bug23922.php: SUCCEEDED
    @PHP/lang/bug24054.php: SUCCEEDED
    @PHP/lang/bug24396.php: SUCCEEDED
    @PHP/lang/bug24403.php: SUCCEEDED
    @PHP/lang/bug24436.php: SUCCEEDED
    @PHP/lang/bug24499.php: SUCCEEDED
    @PHP/lang/bug24640.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    double(1700000000000000089258092433847514422797596587883870563356951996370064178581143932836831337636761368874297554515902592900802289500112731978596146714137401870842258241575178866354311397451139753100927220499450359906637902366244989496126909662726242240784739940994096632824796638102733857671280980918272.0000000000)
    1.7E+300
    
    ------
    double(0.0000000000)
    1.7E-300
    
    ------
    double(17000000000000001584208052028780237480128823455860622330108867175329927830437888.0000000000)
    1.7E+79
    
    ------
    double(0.0000000000)
    1.7E-79
    
    ------
    double(169999999999999996096025832433329868941658043870400163508258284150340918121070592.0000000000)
    1.7E+80
    
    ------
    double(0.0000000000)
    1.7E-80
    
    ------
    double(1700000000000000013616404158611892038375594280539217794530130541777964808366194688.0000000000)
    1.7E+81
    
    ------
    double(0.0000000000)
    1.7E-81
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    1.6999810742106E-319
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    1.7000798873397E-320
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    1.6995858216939E-321
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    0
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    0
    
    ------
    double(1700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+300
    
    ------
    double(0.0000000000)
    1.70000000000003E-300
    
    ------
    double(17000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+79
    
    ------
    double(0.0000000000)
    1.70000000000001E-79
    
    ------
    double(170000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+80
    
    ------
    double(0.0000000000)
    1.70000000000001E-80
    
    ------
    double(1700000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+81
    
    ------
    double(0.0000000000)
    1.70000000000001E-81
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    1.69998107421056E-319
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    1.70007988733973E-320
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    1.69464516523548E-321
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    0
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    0
    
    ------
    @PHP/lang/bug24652.php: SUCCEEDED
    @PHP/lang/bug24658.php: SUCCEEDED
    @PHP/lang/bug24783.php: SUCCEEDED
    @PHP/lang/bug24926.php: SUCCEEDED
    @PHP/lang/bug25547.php: SUCCEEDED
    @PHP/lang/bug25652.php: SUCCEEDED
    @PHP/lang/bug25922.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Undefined index here: 'error'
    Undefined index here: ''
    @PHP/lang/bug26182.php: SUCCEEDED
    @PHP/lang/bug26696.php: SUCCEEDED
    @PHP/lang/bug26866.php: SUCCEEDED
    @PHP/lang/bug26869.php: SUCCEEDED
    @PHP/lang/bug27354.php: SUCCEEDED
    @PHP/lang/bug27439.php: SUCCEEDED
    @PHP/lang/bug27535.php: SUCCEEDED
    @PHP/lang/bug28213.php: SUCCEEDED
    @PHP/lang/bug28800.php: SUCCEEDED
    @PHP/lang/bug29566.php: SUCCEEDED
    @PHP/lang/bug29893.php: SUCCEEDED
    @PHP/lang/bug29944.php: SUCCEEDED
    @PHP/lang/bug30638.php: SUCCEEDED
    @PHP/lang/bug30726.php: SUCCEEDED
    @PHP/lang/bug30862.php: SUCCEEDED
    @PHP/lang/bug32924.php: SUCCEEDED
    @PHP/lang/bug35382.php: SUCCEEDED
    @PHP/lang/bug7515.php: SUCCEEDED
    @PHP/lang/each_binary_safety.php: SUCCEEDED
    @PHP/lang/error_2_exception_001.php: SUCCEEDED
    @PHP/lang/foreach_with_object_001.php: SUCCEEDED
    @PHP/lang/foreach_with_references_001.php: SUCCEEDED
    @PHP/lang/type_hints_001.php: SUCCEEDED
    @PHP/standard/array/001.php: SUCCEEDED
    @PHP/standard/array/003.php: SUCCEEDED
    @PHP/standard/array/004.php: SUCCEEDED
    @PHP/standard/array/005.php: SUCCEEDED
    @PHP/standard/array/008.php: SUCCEEDED
    @PHP/standard/array/array_change_key_case.php: SUCCEEDED
    @PHP/standard/array/array_chunk.php: SUCCEEDED
    @PHP/standard/array/array_count_values.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array(0) {
    }
    
    array(1) {
      [0]=>
      int(1)
    }
    
    array(1) {
      [1]=>
      int(1)
    }
    
    array(1) {
      [-1]=>
      int(1)
    }
    
    array(1) {
      [0]=>
      int(2)
    }
    
    array(2) {
      [0]=>
      int(1)
      [1]=>
      int(1)
    }
    
    array(1) {
      [1]=>
      int(2)
    }
    
    array(3) {
      [1]=>
      int(2)
      ["hello"]=>
      int(2)
      ["world"]=>
      int(1)
    }
    
    array(2) {
      ["hello"]=>
      int(2)
      ["world"]=>
      int(1)
    }
    
    array(3) {
      [""]=>
      int(2)
      ["world"]=>
      int(3)
      ["hello"]=>
      int(4)
    }
    
    array(1) {
      [0]=>
      int(1)
    }
    
    array(1) {
      [1]=>
      int(1)
    }
    array(0) [empty]
    
    array(1)
    {
      [0] => integer(1)
    }
    
    array(1)
    {
      [1] => integer(1)
    }
    
    array(1)
    {
      [-1] => integer(1)
    }
    
    array(1)
    {
      [0] => integer(2)
    }
    
    array(2)
    {
      [0] => integer(1)
      [1] => integer(1)
    }
    
    array(1)
    {
      [1] => integer(2)
    }
    
    array(3)
    {
      [1] => integer(2)
      ['hello'] => integer(2)
      ['world'] => integer(1)
    }
    
    array(2)
    {
      ['hello'] => integer(2)
      ['world'] => integer(1)
    }
    
    array(3)
    {
      [''] => integer(2)
      ['world'] => integer(3)
      ['hello'] => integer(4)
    }
    
    array(1)
    {
      [0] => integer(1)
    }
    
    array(1)
    {
      [1] => integer(1)
    }
    @PHP/standard/array/array_diff_1.php: SUCCEEDED
    @PHP/standard/array/array_diff_key.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ------ Test 1 --------
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 2 --------
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 3 --------
    array(6) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [2]=>
      int(4)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [2]=>
      int(4)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 4 --------
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 5 --------
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 6 --------
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 7 --------
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    ------ Test 8 --------
    array(6) {
      [0]=>
      int(0)
      [7]=>
      int(14)
      [2]=>
      int(4)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [0]=>
      int(0)
      [7]=>
      int(14)
      [2]=>
      int(4)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 9 --------
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    ------ Test 1 --------
    array(4)
    {
      [1] => &integer(2)
      [6] => &integer(12)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    array(4)
    {
      [1] => &integer(2)
      [6] => &integer(12)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    ------ Test 2 --------
    array(3)
    {
      [1] => &integer(2)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    array(3)
    {
      [1] => &integer(2)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    ------ Test 3 --------
    array(6)
    {
      [1] => &integer(2)
      [6] => &integer(12)
      [2] => &integer(4)
      [15] => &integer(30)
      [1200] => &integer(2400)
      [-2500] => &integer(-5000)
    }
    array(6)
    {
      [1] => &integer(2)
      [6] => &integer(12)
      [2] => &integer(4)
      [15] => &integer(30)
      [1200] => &integer(2400)
      [-2500] => &integer(-5000)
    }
    ------ Test 4 --------
    array(3)
    {
      [1] => &integer(2)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    array(3)
    {
      [1] => &integer(2)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    ------ Test 5 --------
    array(4)
    {
      [1] => &integer(2)
      [6] => &integer(12)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    array(4)
    {
      [1] => &integer(2)
      [6] => &integer(12)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    ------ Test 6 --------
    array(3)
    {
      [1] => &integer(2)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    array(3)
    {
      [1] => &integer(2)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    ------ Test 7 --------
    array(3)
    {
      [7] => &integer(14)
      [11] => &integer(22)
      [1100] => &integer(2200)
    }
    array(3)
    {
      [7] => &integer(14)
      [11] => &integer(22)
      [1100] => &integer(2200)
    }
    ------ Test 8 --------
    array(6)
    {
      [0] => &integer(0)
      [7] => &integer(14)
      [2] => &integer(4)
      [11] => &integer(22)
      [1100] => &integer(2200)
      [-2500] => &integer(-5000)
    }
    array(6)
    {
      [0] => &integer(0)
      [7] => &integer(14)
      [2] => &integer(4)
      [11] => &integer(22)
      [1100] => &integer(2200)
      [-2500] => &integer(-5000)
    }
    ------ Test 9 --------
    array(3)
    {
      [7] => &integer(14)
      [11] => &integer(22)
      [1100] => &integer(2200)
    }
    array(3)
    {
      [7] => &integer(14)
      [11] => &integer(22)
      [1100] => &integer(2200)
    }
    @PHP/standard/array/array_intersect_key.php: SUCCEEDED
    @PHP/standard/array/array_sum.php: SUCCEEDED
    @PHP/standard/array/array_walk_recursive.php: SUCCEEDED
    @PHP/standard/array/bug12776.php: SUCCEEDED
    @PHP/standard/array/bug14580.php: SUCCEEDED
    @PHP/standard/array/bug20381.php: SUCCEEDED
    @PHP/standard/array/bug20865.php: SUCCEEDED
    @PHP/standard/array/bug21182.php: SUCCEEDED
    @PHP/standard/array/bug21918.php: SUCCEEDED
    @PHP/standard/array/bug21998.php: SUCCEEDED
    @PHP/standard/array/bug22088.php: SUCCEEDED
    @PHP/standard/array/bug22463.php: SUCCEEDED
    @PHP/standard/array/bug23581.php: SUCCEEDED
    @PHP/standard/array/bug23788.php: SUCCEEDED
    @PHP/standard/array/bug24198.php: SUCCEEDED
    @PHP/standard/array/bug24220.php: SUCCEEDED
    @PHP/standard/array/bug24766.php: SUCCEEDED
    @PHP/standard/array/bug24897.php: SUCCEEDED
    @PHP/standard/array/bug24980.php: SUCCEEDED
    @PHP/standard/array/bug25359.php: SUCCEEDED
    @PHP/standard/array/bug25708.php: SUCCEEDED
    @PHP/standard/array/bug25758.php: SUCCEEDED
    @PHP/standard/array/bug26458.php: SUCCEEDED
    @PHP/standard/array/bug28974.php: SUCCEEDED
    @PHP/standard/array/bug29493.php: SUCCEEDED
    @PHP/standard/array/bug30266.php: SUCCEEDED
    @PHP/standard/array/bug30833.php: SUCCEEDED
    @PHP/standard/array/bug31158.php: SUCCEEDED
    @PHP/standard/array/bug31213.php: SUCCEEDED
    @PHP/standard/array/bug32021.php: SUCCEEDED
    @PHP/standard/array/bug33382.php: SUCCEEDED
    @PHP/standard/array/bug33989.php: SUCCEEDED
    @PHP/standard/array/bug34227.php: SUCCEEDED
    @PHP/standard/array/bug34982.php: SUCCEEDED
    @PHP/standard/array/bug35014.php: SUCCEEDED
    @PHP/standard/array/bug35022.php: SUCCEEDED
    @PHP/standard/array/bug35821.php: SUCCEEDED
    @PHP/standard/array/count_recursive.php: SUCCEEDED
    @PHP/standard/array/locale_sort.php: SUCCEEDED
    @PHP/standard/array/range.php: SUCCEEDED
    @PHP/standard/assert/assert.php: SUCCEEDED
    @PHP/standard/general_functions/001.php: SUCCEEDED
    @PHP/standard/general_functions/002.php: SUCCEEDED
    @PHP/standard/general_functions/003.php: SUCCEEDED
    @PHP/standard/general_functions/004.php: SUCCEEDED
    @PHP/standard/general_functions/005.php: SUCCEEDED
    @PHP/standard/general_functions/006.php: SUCCEEDED
    @PHP/standard/general_functions/007.php: SUCCEEDED
    @PHP/standard/general_functions/009.php: SUCCEEDED
    @PHP/standard/general_functions/bug25038.php: SUCCEEDED
    @PHP/standard/general_functions/bug27678.php: SUCCEEDED
    @PHP/standard/general_functions/bug29038.php: SUCCEEDED
    @PHP/standard/general_functions/bug31190.php: SUCCEEDED
    @PHP/standard/general_functions/bug32647.php: SUCCEEDED
    @PHP/standard/general_functions/bug35229.php: SUCCEEDED
    @PHP/standard/general_functions/is_resource.php: SUCCEEDED
    @PHP/standard/math/abs.php: SUCCEEDED
    @PHP/standard/math/bug24142.php: SUCCEEDED
    @PHP/standard/math/bug25694.php: SUCCEEDED
    @PHP/standard/math/bug27646.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    double(INF-INF)
    'd:-INF;'
    double(INF-INF)
    double(INF-INF)
    'd:INF;'
    double(INF-INF)
    double(NaNInfini)
    'd:NAN;'
    double(NaNInfini)
    double(-Infinity)
    'd:-INF;'
    double(-Infinity)
    double(Infinity)
    'd:INF;'
    double(Infinity)
    double(NaN)
    'd:NAN;'
    double(NaN)
    @PHP/standard/math/bug30069.php: SUCCEEDED
    @PHP/standard/math/bug30695.php: SUCCEEDED
    @PHP/standard/math/floorceil.php: SUCCEEDED
    @PHP/standard/math/hexdec.php: SUCCEEDED
    @PHP/standard/math/log.php: SUCCEEDED
    @PHP/standard/math/pow.php: SUCCEEDED
    @PHP/standard/math/round.php: SUCCEEDED
    @PHP/standard/reg/001.php: SUCCEEDED
    @PHP/standard/reg/002.php: SUCCEEDED
    @PHP/standard/reg/003.php: SUCCEEDED
    @PHP/standard/reg/004.php: SUCCEEDED
    @PHP/standard/reg/005.php: SUCCEEDED
    @PHP/standard/reg/006.php: SUCCEEDED
    @PHP/standard/reg/007.php: SUCCEEDED
    @PHP/standard/reg/008.php: SUCCEEDED
    @PHP/standard/reg/009.php: SUCCEEDED
    @PHP/standard/reg/010.php: SUCCEEDED
    @PHP/standard/reg/011.php: SUCCEEDED
    @PHP/standard/reg/012.php: SUCCEEDED
    @PHP/standard/reg/013.php: SUCCEEDED
    @PHP/standard/reg/014.php: SUCCEEDED
    @PHP/standard/reg/015.php: SUCCEEDED
    @PHP/standard/reg/016.php: SUCCEEDED
    @PHP/standard/serialize/001.php: SUCCEEDED
    @PHP/standard/serialize/002.php: SUCCEEDED
    @PHP/standard/serialize/003.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    d:100;
    double(100.0000000000)
    
    d:51999999999999996980101120;
    double(51999999999999996980101120.0000000000)
    
    d:8.9999999999999995265585574287341141808127531476202420890331268310546875E-9;
    double(0.0000000090)
    d:100;
    double(100.0000000000)
    
    d:5.2000000000000006E+25;
    double(52000000000000000000000000.0000000000)
    
    d:9.0000000000000045E-09;
    double(0.0000000090)
    @PHP/standard/serialize/004.php: SUCCEEDED
    @PHP/standard/serialize/005.php: SUCCEEDED
    @PHP/standard/serialize/006.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    'O:3:"´┐Ż":1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    object
    {
      '´┐Ż' => '´┐Ż'
    }
    'a:1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    array
    {
      '´┐Ż' => '´┐Ż'
    }
    'O:3:"´┐Ż":1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    object
    {
      '─Ć┼╝╦Ł' => '─Ć┼╝╦Ł'
    }
    'a:1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    array
    {
      '─Ć┼╝╦Ł' => '─Ć┼╝╦Ł'
    }
    @PHP/standard/serialize/bug14293.php: SUCCEEDED
    @PHP/standard/serialize/bug21957.php: SUCCEEDED
    @PHP/standard/serialize/bug23298.php: SUCCEEDED
    @PHP/standard/serialize/bug24063.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0.1 0.1
    0.01 0.01
    0.001 0.001
    0.0001 0.0001
    1.0E-5 1.0E-5
    1.0E-6 1.0E-6
    1.0E-7 1.0E-7
    1.0E-8 1.0E-8
    1.0E-9 1.0E-9
    0.1 0.1
    0.01 0.01
    0.001 0.001
    0.0001 0.0001
    1E-05 1E-05
    1E-06 1E-06
    1E-07 1E-07
    1E-08 1E-08
    1E-09 1E-09
    @PHP/standard/serialize/bug25378.php: SUCCEEDED
    @PHP/standard/serialize/bug26762.php: SUCCEEDED
    @PHP/standard/serialize/bug27469.php: SUCCEEDED
    @PHP/standard/serialize/bug28325.php: SUCCEEDED
    @PHP/standard/serialize/bug30234.php: SUCCEEDED
    @PHP/standard/serialize/bug31402.php: SUCCEEDED
    @PHP/standard/serialize/bug31442.php: SUCCEEDED
    @PHP/standard/strings/add-and-stripcslashes.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    kaboemkara!
    foo\b\a\r\b\az
    \f\o\o\[ \]
    \zoo['\.']
    \abcd\e\f\g\h\i\j\k\l\m\n\o\pqrstuvwxy\z
    1
    5d
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\standard\strings\__input.txt at expression on line 3, column 1.
    
    kaboemkara!
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\standard\strings\__input.txt at expression on line 5, column 1.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\standard\strings\__input.txt at expression on line 6, column 1.
    
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\standard\strings\__input.txt at expression on line 8, column 1.
    
    1
    5d
    @PHP/standard/strings/add-and-stripslashes.php: SUCCEEDED
    @PHP/standard/strings/basename.php: SUCCEEDED
    @PHP/standard/strings/bin2hex.php: SUCCEEDED
    @PHP/standard/strings/bug20108.php: SUCCEEDED
    @PHP/standard/strings/bug20169.php: SUCCEEDED
    @PHP/standard/strings/bug20261.php: SUCCEEDED
    @PHP/standard/strings/bug20927.php: SUCCEEDED
    @PHP/standard/strings/bug21338.php: SUCCEEDED
    @PHP/standard/strings/bug21453.php: SUCCEEDED
    @PHP/standard/strings/bug21730.php: SUCCEEDED
    @PHP/standard/strings/bug21744.php: SUCCEEDED
    @PHP/standard/strings/bug22008.php: SUCCEEDED
    @PHP/standard/strings/bug22187.php: SUCCEEDED
    @PHP/standard/strings/bug22224.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      0 => 
      object
      {
      }
      1 => 
      object
      {
      }
    }
    @PHP/standard/strings/bug22227.php: SUCCEEDED
    @PHP/standard/strings/bug22904.php: SUCCEEDED
    @PHP/standard/strings/bug23650.php: SUCCEEDED
    @PHP/standard/strings/bug23894.php: SUCCEEDED
    @PHP/standard/strings/bug24098.php: SUCCEEDED
    @PHP/standard/strings/bug24208.php: SUCCEEDED
    @PHP/standard/strings/bug24281.php: SUCCEEDED
    @PHP/standard/strings/bug25671.php: SUCCEEDED
    @PHP/standard/strings/bug25707.php: SUCCEEDED
    @PHP/standard/strings/bug26878.php: SUCCEEDED
    @PHP/standard/strings/bug26973.php: SUCCEEDED
    @PHP/standard/strings/bug27276.php: SUCCEEDED
    @PHP/standard/strings/bug27278.php: SUCCEEDED
    @PHP/standard/strings/bug27295.php: SUCCEEDED
    @PHP/standard/strings/bug27457.php: SUCCEEDED
    @PHP/standard/strings/bug27675.php: SUCCEEDED
    @PHP/standard/strings/bug28386.php: SUCCEEDED
    @PHP/standard/strings/bug33076.php: SUCCEEDED
    @PHP/standard/strings/chr_ord.php: SUCCEEDED
    @PHP/standard/strings/chunk_split.php: SUCCEEDED
    @PHP/standard/strings/count_chars.php: SUCCEEDED
    @PHP/standard/strings/crc32.php: SUCCEEDED
    @PHP/standard/strings/explode.php: SUCCEEDED
    @PHP/standard/strings/implode.php: SUCCEEDED
    @PHP/standard/strings/md5.php: SUCCEEDED
    @PHP/standard/strings/md5raw.php: SUCCEEDED
    @PHP/standard/strings/nl2br.php: SUCCEEDED
    @PHP/standard/strings/sha1.php: SUCCEEDED
    @PHP/standard/strings/sha1raw.php: SUCCEEDED
    @PHP/standard/strings/sprintf_f.php: SUCCEEDED
    @PHP/standard/strings/strcspn.php: SUCCEEDED
    @PHP/standard/strings/strings001.php: SUCCEEDED
    @PHP/standard/strings/strpos.php: SUCCEEDED
    @PHP/standard/strings/strrev.php: SUCCEEDED
    @PHP/standard/strings/strripos.php: SUCCEEDED
    @PHP/standard/strings/strrpos.php: SUCCEEDED
    @PHP/standard/strings/strspn.php: SUCCEEDED
    @PHP/standard/strings/strstr.php: SUCCEEDED
    @PHP/standard/strings/strtoupper.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    cfbfbdcfbfbdcfbfbd
    cfafbdcfafbdcfafbd
    @PHP/standard/strings/strtr.php: SUCCEEDED
    @PHP/standard/strings/strval.php: SUCCEEDED
    @PHP/standard/strings/str_repeat.php: SUCCEEDED
    @PHP/standard/strings/str_shuffle.php: SUCCEEDED
    @PHP/standard/strings/str_word_count.php: SUCCEEDED
    @PHP/standard/strings/substr_count.php: SUCCEEDED
    @PHP/standard/strings/substr_replace.php: SUCCEEDED
    @PHP/standard/strings/wordwrap.php: SUCCEEDED
    @PHP/standard/time/001.php: SUCCEEDED
    @PHP/standard/time/idate.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    U: 1043324459
    Y: 2003
    z: 22
    y: 3
    m: 1
    n: 1
    d: 23
    j: 23
    H: 13
    G: 13
    h: 1
    g: 1
    i: 20
    s: 59
    t: 31
    w: 4
    L: 0
    B: 556
    I: 0
    W: 4
    U: 1043324459
    Y: 2003
    z: 22
    y: 3
    m: 1
    n: 1
    d: 23
    j: 23
    H: 12
    G: 12
    h: 12
    g: 12
    i: 20
    s: 59
    t: 31
    w: 4
    L: 0
    B: 556
    I: 0
    W: 4
    @PHP/strings/001.php: SUCCEEDED
    @PHP/strings/002.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    fprintf test 1:abcde
    20
    printf test 1:simple string
    printf test 2:42
    printf test 3:3.333333
    printf test 4:3.3333333333
    printf test 5:2.50      
    printf test 6:2.50000000
    printf test 7:0000002.50
    printf test 8:<                 foo>
    printf test 9:<bar                 >
    printf test 10: 123456789012345
    printf test 10:<h´┐Żyesterettsjustitiarius>
    printf test 11: 123456789012345678901234567890
    printf test 11:<    h´┐Żyesterettsjustitiarius>
    printf test 12:-12.34
    printf test 13:  -12
    printf test 14:@
    printf test 15:10101010
    printf test 16:aa
    printf test 17:AA
    printf test 18:        10101010
    printf test 19:              aa
    printf test 20:              AA
    printf test 21:0000000010101010
    printf test 22:00000000000000aa
    printf test 23:00000000000000AA
    printf test 24:abcde
    printf test 25:gazonk
    printf test 26:2 1
    printf test 27:3 1 2
    printf test 28:02  1
    printf test 29:2   1
    printf test 30:x
    vprintf test 1:2   1
    fprintf test 1:abcde
    20
    printf test 1:simple string
    printf test 2:42
    printf test 3:3.333333
    printf test 4:3.3333333333
    printf test 5:2.50      
    printf test 6:2.50000000
    printf test 7:0000002.50
    printf test 8:<                 foo>
    printf test 9:<bar                 >
    printf test 10: 123456789012345
    printf test 10:<h─Ć┼╝╦Łyesterettsjustitiarius>
    printf test 11: 123456789012345678901234567890
    printf test 11:<    h─Ć┼╝╦Łyesterettsjustitiarius>
    printf test 12:-12.34
    printf test 13:  -12
    printf test 14:@
    printf test 15:10101010
    printf test 16:aa
    printf test 17:AA
    printf test 18:        10101010
    printf test 19:              aa
    printf test 20:              AA
    printf test 21:0000000010101010
    printf test 22:00000000000000aa
    printf test 23:00000000000000AA
    printf test 24:abcde
    printf test 25:gazonk
    printf test 26:2 1
    printf test 27:3 1 2
    printf test 28:02  1
    printf test 29:2   1
    printf test 30:x
    vprintf test 1:2   1
    @PHP/strings/bug22592.php: SUCCEEDED
    Arrays/array1.php: SUCCEEDED
    Arrays/array_diff_intersect.php: SUCCEEDED
    Arrays/array_diff_intersect2.php: SUCCEEDED
    Arrays/array_diff_intersect3.php: SUCCEEDED
    Arrays/array_map.php: SUCCEEDED
    Arrays/array_merge_recursive.php: SUCCEEDED
    Arrays/array_reduce1.php: SUCCEEDED
    Arrays/array_reduce2.php: SUCCEEDED
    Arrays/array_slice.php: SUCCEEDED
    Arrays/array_sumprod.php: SUCCEEDED
    Arrays/array_unshift.php: SUCCEEDED
    Arrays/array_walk.php: SUCCEEDED
    Arrays/array_walk_recursive.php: SUCCEEDED
    Arrays/multisort.php: SUCCEEDED
    Arrays/optimizations.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    3
    4
    5
    a
    b
    c
    
    Warning: strtolower() expects parameter 1 to be string, array given in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Arrays\__input.txt on line 15
    
    cablo
    3
    4
    5
    a
    b
    c
    array
    cablo
    Arrays/recursion.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    f1:
    array(2) {
      ["a"]=>
      array(5) {
        ["a"]=>
        &array(3) {
          ["a"]=>
          &array(3) {
            ["a"]=>
            *RECURSION*
            [0]=>
            string(1) "y"
            [1]=>
            string(1) "z"
          }
          [0]=>
          string(1) "y"
          [1]=>
          string(1) "z"
        }
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        string(1) "x"
      }
      [0]=>
      string(1) "w"
    }
    f2:
    array(1) {
      ["A"]=>
      &array(2) {
        ["a"]=>
        &array(2) {
          ["a"]=>
          *RECURSION*
          [0]=>
          string(1) "z"
        }
        [0]=>
        string(1) "z"
      }
    }
    f3:
    array(2) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) {
          [0]=>
          *RECURSION*
          [1]=>
          string(1) "z"
        }
        [1]=>
        string(1) "z"
      }
      [1]=>
      string(1) "z"
    }
    f4:
    
    Warning: array_merge_recursive(): recursion detected in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Arrays\__input.txt on line 37
    array(1) {
      ["a"]=>
      &array(3) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
      }
    }
    f5:
    array(1) {
      ["a"]=>
      array(6) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        int(1)
        [4]=>
        int(2)
        [5]=>
        int(3)
      }
    }
    f6:
    array(1) {
      ["a"]=>
      array(2) {
        [0]=>
        string(2) "xx"
        [1]=>
        int(2)
      }
    }
    f7:
    array(1) {
      ["a"]=>
      array(1) {
        ["a"]=>
        array(1) {
          ["a"]=>
          &array(1) {
            ["a"]=>
            &array(1) {
              ["a"]=>
              *RECURSION*
            }
          }
        }
      }
    }
    f1:
    array(2)
    {
      ['a'] => array(5)
      {
        ['a'] => &array(3)
        {
          ['a'] => &array(3) [recursion]
          [0] => string(1) "y"
          [1] => string(1) "z"
        }
        [0] => integer(1)
        [1] => integer(2)
        [2] => integer(3)
        [3] => string(1) "x"
      }
      [0] => string(1) "w"
    }
    f2:
    array(1)
    {
      ['A'] => &array(2)
      {
        ['a'] => &array(2) [recursion]
        [0] => string(1) "z"
      }
    }
    f3:
    array(2)
    {
      [0] => &array(2) [recursion]
      [1] => string(1) "z"
    }
    f4:
    array(1)
    {
      ['a'] => array(6)
      {
        [0] => integer(1)
        [1] => integer(2)
        [2] => integer(3)
        [3] => integer(1)
        [4] => integer(2)
        [5] => integer(3)
      }
    }
    f5:
    array(1)
    {
      ['a'] => array(6)
      {
        [0] => integer(1)
        [1] => integer(2)
        [2] => integer(3)
        [3] => integer(1)
        [4] => integer(2)
        [5] => integer(3)
      }
    }
    f6:
    array(1)
    {
      ['a'] => array(2)
      {
        [0] => string(2) "xx"
        [1] => integer(2)
      }
    }
    f7:
    array(1)
    {
      ['a'] => &array(1)
      {
        ['a'] => &array(1) [recursion]
      }
    }
    Arrays/sort.php: SUCCEEDED
    Arrays/usort.php: SUCCEEDED
    Bugs/class_incompletepart.php: SUCCEEDED
    Bugs/division-by-zero.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    DIVISION
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt on line 6
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt on line 8
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt on line 10
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt on line 12
    bool(false)
    MODULO
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt on line 16
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt on line 18
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt on line 20
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt on line 22
    bool(false)
    DIVISION
    bool(false)
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt at expression on line 10, column 2.
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt at expression on line 12, column 2.
    bool(false)
    MODULO
    bool(false)
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt at expression on line 20, column 2.
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt at expression on line 22, column 2.
    bool(false)
    D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt(6,10): warning PHP0150: Division by zero
    D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt(8,9): warning PHP0150: Division by zero
    D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt(16,10): warning PHP0150: Division by zero
    D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt(18,9): warning PHP0150: Division by zero
    
    Bugs/function-in-unknown-class.php: SUCCEEDED
    Bugs/is_a_null_value.php: SUCCEEDED
    Bugs/preg-named-groups.php: SUCCEEDED
    Bugs/preg-replace-advanced.php: SUCCEEDED
    Bugs/preg-replace-range.php: SUCCEEDED
    Bugs/preg-replace.php: SUCCEEDED
    Bugs/preg-this-dynamic.php: FAILED
    Script hung upNo errorsSuccess
    Expected test outputReal script output
    Unhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---> PHP.Core.Debug+AssertException: Assertion failed: 
       at PHP.Core.Debug.Fail(String message)
       at PHP.Core.Debug.Assert(Boolean condition)
       at PHP.Core.RelativePath.ParseCanonical(String relativePath)
       at PHP.Core.Emit.TransientAssemblyBuilder.Build(String sourceCode, SourceCodeDescriptor descriptor, EvalKinds kind, CompilationContext context, ScriptContext scriptContext, DTypeDesc referringType, NamingContext namingContext, Boolean completeSource)
       at PHP.Core.DynamicCode.EvalInternal(String prefix, String code, String suffix, EvalKinds kind, ScriptContext scriptContext, Dictionary`2 localVariables, DObject self, DTypeDesc referringType, SourceCodeDescriptor descriptor, Boolean entireFile, NamingContext namingContext)
       at PHP.Core.DynamicCode.Eval(String code, Boolean synthetic, ScriptContext context, Dictionary`2 definedVariables, DObject self, DTypeDesc referringType, String callerRelativeSourcePath, Int32 line, Int32 column, Int32 containerId, NamingContext namingContext)
       at PHP.Library.PerlRegExp.Evaluator.ReplaceCodeExecute(Match m)
       at System.Text.RegularExpressions.RegexReplacement.Replace(MatchEvaluator evaluator, Regex regex, String input, Int32 count, Int32 startat)
       at System.Text.RegularExpressions.Regex.Replace(String input, MatchEvaluator evaluator, Int32 count)
       at PHP.Library.PerlRegExp.ReplaceInternal(DObject self, Dictionary`2 definedVariables, PerlRegExpConverter converter, PhpCallback callback, String str, Int32 limit, SourceCodeDescriptor sourceCodeDesc, Int32& count)
       at PHP.Library.PerlRegExp.SimpleReplace(DObject self, Dictionary`2 definedVariables, Object pattern, String replacement, PhpCallback callback, Object data, Int32 limit, SourceCodeDescriptor descriptor, Int32& count)
       at PHP.Library.PerlRegExp.Replace(DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, PhpCallback callback, Object data, Int32 limit, Int32& count)
       at PHP.Library.PerlRegExp.Replace(DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, Object data)
       at PHP.Dynamic.PhpNetClassLibrary.preg_replace(Object , PhpStack )
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <__input.txt>.a.a(ScriptContext ) in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt:line 16
       at <__input.txt>.a.<Mediator>(ScriptContext )
       at <__input.txt>.a.a(Object instance, PhpStack stack)
       at <__input.txt>.<Script>.<Main>(ScriptContext <context>, Dictionary`2 <locals>, DObject , DTypeDesc , Boolean ) in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt:line 19
       at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)
       at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)
       --- End of inner exception stack trace ---
       at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)
       at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot, Stream outputStream)
       at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)
       at <Global>.Run(String[] )
    
    Bugs/preg-this-dynamic2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    foo: ahoj
    foo: lidi
    foo: rozkladame
    foo: ahoj
    foo: lidi
    foo: rozkladame
    foo: ahoj
    foo: lidi
    foo: rozkladame
    
    Notice: Undefined variable: this.
    
    Error: Call to a member function foo() on a non-object.
    Bugs/preg-this.php: SUCCEEDED
    Bugs/preg-ungreedy-bugs.php: SUCCEEDED
    Bugs/preg-unkn.php: SUCCEEDED
    Compiler/abstracts.php: SUCCEEDED
    Compiler/assignments.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ---1---1float(-1.5)
    float(2.5)
    float(0.83333333333333)
    int(6)
    int(8)
    ---2---2float(8.8333333333333)
    float(8.8333333333333)
    float(8.8333333333333)
    int(8)
    int(8)
    ---3---3---4---4---5---5array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [1]=>
      array(1) {
        [2]=>
        array(1) {
          [3]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    ---6---6array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "u"
    }
    array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "v"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    ---7---7array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    ---8---8
    ---1---1double(-1.5)
    double(2.5)
    double(0.833333333333333)
    integer(6)
    integer(8)
    ---2---2double(8.83333333333333)
    double(8.83333333333333)
    double(8.83333333333333)
    integer(8)
    integer(8)
    ---3---3---4---4---5---5array(1)
    {
      [0] => array(1)
      {
        [0] => array(1)
        {
          [0] => array(3)
          {
            [0] => integer(1)
            [1] => integer(2)
            [2] => integer(3)
          }
        }
      }
    }
    array(1)
    {
      [0] => array(1)
      {
        [0] => array(1)
        {
          [0] => array(3)
          {
            [0] => integer(1)
            [1] => integer(2)
            [2] => integer(3)
          }
        }
      }
    }
    array(1)
    {
      [1] => array(1)
      {
        [2] => array(1)
        {
          [3] => array(3)
          {
            [0] => integer(1)
            [1] => integer(2)
            [2] => integer(3)
          }
        }
      }
    }
    ---6---6array(4)
    {
      [0] => integer(1)
      [1] => integer(2)
      [2] => integer(3)
      [3] => string(1) "u"
    }
    array(4)
    {
      [0] => integer(1)
      [1] => integer(2)
      [2] => integer(3)
      [3] => string(1) "v"
    }
    array(5)
    {
      [0] => integer(1)
      [1] => integer(2)
      [2] => integer(3)
      [3] => string(1) "w"
      [4] => string(1) "z"
    }
    array(5)
    {
      [0] => integer(1)
      [1] => integer(2)
      [2] => integer(3)
      [3] => string(1) "w"
      [4] => string(1) "z"
    }
    ---7---7array(1)
    {
      [0] => array(1)
      {
        [0] => array(1)
        {
          [0] => array(1)
          {
            [0] => &integer(10)
          }
        }
      }
    }
    array(1)
    {
      [0] => array(1)
      {
        [0] => array(1)
        {
          [0] => array(1)
          {
            [0] => &integer(10)
          }
        }
      }
    }
    ---8---8
    Compiler/assign_in_call.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    g1:
    f(x)
    u(x)
    'x'
    
    g2:
    f(x)
    u(x)
    'b'
    
    g3:
    f(x)
    u(x)
    'b'
    
    g4:
    f(x)
    u(x)
    'b'
    
    g5:
    f()
    u()
    integer(1)
    
    g6:
    f(3)
    u(3)
    integer(3)
    
    g7:
    f(2)
    u(10)
    integer(10)
    
    g8:
    f(1)
    f(1)
    f(1)
    u(1)
    u()
    u(1)
    
    g9:
    known:
    __get(p) = 0
    __set(p,1)
    f(1)
    unknown:
    __get(p) = 1
    __set(p,3)
    u(3)
    
    g10:
    Done.
    g1:
    f(x)
    u(x)
    'x'
    
    g2:
    f(x)
    u(x)
    'b'
    
    g3:
    f(x)
    u(x)
    'b'
    
    g4:
    f(x)
    u(x)
    'b'
    
    g5:
    f()
    u()
    integer(1)
    
    g6:
    f(3)
    u(3)
    integer(3)
    
    g7:
    f(2)
    u(10)
    integer(10)
    
    g8:
    f(1)
    f(1)
    f(1)
    u(1)
    u()
    u(1)
    
    g9:
    known:
    __get(p) = 0
    __set(p,1)
    __get(p) = 1
    f(1)
    unknown:
    __get(p) = 1
    __set(p,3)
    __get(p) = 3
    u(3)
    
    g10:
    Done.
    Compiler/auto_globals_001.php: SUCCEEDED
    Compiler/auto_globals_002.php: SUCCEEDED
    Compiler/auto_globals_003.php: SUCCEEDED
    Compiler/break_in_global_code.php: SUCCEEDED
    Compiler/chaining_test.php: SUCCEEDED
    Compiler/chain_ending_by_string_index.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        string(1) "f"
      }
    }
    array(1) {
      [0]=>
      string(4) "xubu"
    }
    object(C)#1 (1) {
      ["f"]=>
      string(4) "kuxu"
    }
    string(5) "helxo"
    string(5) "helxo"
    array(1)
    {
      [0] => array(1)
      {
        [0] => string(1) "f"
      }
    }
    array(1)
    {
      [0] => string(4) "bubu"
    }
    
    Warning: A string item used as a reference in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt at expression on line 19, column 1.
    object(C)(1)
    {
      ["f"] => string(4) "kuku"
    }
    
    Warning: A string item used as a reference in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt at expression on line 25, column 1.
    string(5) "hello"
    
    Warning: A string item used as a reference in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt at expression on line 31, column 1.
    string(5) "hello"
    Compiler/continue_in_global_code.php: SUCCEEDED
    Compiler/deep_copy.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array(1) {
      [0]=>
      &array(1) {
        [0]=>
        &array(1) {
          [0]=>
          *RECURSION*
        }
      }
    }
    array(1) {
      [0]=>
      &array(1) {
        [0]=>
        &array(1) {
          [0]=>
          *RECURSION*
        }
      }
    }
    array(2) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) {
          [0]=>
          *RECURSION*
          [1]=>
          int(1)
        }
        [1]=>
        int(1)
      }
      [1]=>
      int(1)
    }
    array(1) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) {
          [0]=>
          *RECURSION*
          [1]=>
          int(1)
        }
        [1]=>
        int(1)
      }
    }
    array(1)
    {
      [0] => &array(1) [recursion]
    }
    array(1)
    {
      [0] => &array(1) [recursion]
    }
    array(2)
    {
      [0] => &array(2) [recursion]
      [1] => integer(1)
    }
    array(1)
    {
      [0] => &array(1) [recursion]
    }
    Compiler/deep_copy_refbox.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Strict Standards: Only variables should be passed by reference in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt on line 42
    array
    {
      0 => integer(1)
    }
    
    Strict Standards: Only variables should be passed by reference in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt on line 45
    array
    {
      0 => integer(1)
    }
    
    Strict Standards: Only variables should be passed by reference in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt on line 49
    array
    {
      0 => integer(1)
    }
    
    Strict Standards: Only variables should be passed by reference in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt on line 52
    array
    {
      0 => integer(1)
    }
    array
    {
      0 => integer(1)
      1 => integer(1)
    }
    array
    {
      0 => integer(1)
      1 => integer(1)
    }
    array
    {
      0 => integer(1)
      1 => integer(1)
    }
    array
    {
      0 => integer(1)
      1 => integer(1)
    }
    Compiler/expr_init.php: SUCCEEDED
    Compiler/foreach1.php: SUCCEEDED
    Compiler/foreach_arrays.php: SUCCEEDED
    Compiler/for_loop.php: SUCCEEDED
    Compiler/function_002.php: SUCCEEDED
    Compiler/function_003.php: SUCCEEDED
    Compiler/function_004.php: SUCCEEDED
    Compiler/function_call.php: SUCCEEDED
    Compiler/if_statement.php: SUCCEEDED
    Compiler/indirect_001.php: SUCCEEDED
    Compiler/indirect_002.php: SUCCEEDED
    Compiler/indirect_003.php: SUCCEEDED
    Compiler/indirect_004.php: SUCCEEDED
    Compiler/indirect_005.php: SUCCEEDED
    Compiler/indirect_007.php: SUCCEEDED
    Compiler/indirect_global.php: SUCCEEDED
    Compiler/inheritance.php: SUCCEEDED
    Compiler/inheritance2.php: SUCCEEDED
    Compiler/isset_unset_001.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Testing x in global code:  <br>
    1 <br>
     <br>
    Testing x (object) in optimized function:  <br>
    1 <br>
     <br>
    Testing x (PhpReference) in optimized function:  <br>
    1 <br>
     <br>
    
    Notice: Undefined variable: y in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt on line 29
    Testing $$x (created at runtime) in optimized function:  <br>
    1 <br>
    Testing x in global code:  <br>
    1 <br>
     <br>
    Testing x (object) in optimized function:  <br>
    1 <br>
     <br>
    Testing x (PhpReference) in optimized function:  <br>
    1 <br>
     <br>
    Testing $$x (created at runtime) in optimized function:  <br>
    1 <br>
    Compiler/null_hints.php: SUCCEEDED
    Compiler/switch.php: SUCCEEDED
    Compiler/ternary_ex.php: SUCCEEDED
    Compiler/typehint_check.php: SUCCEEDED
    Compiler/Inclusions/include2.php: SUCCEEDED
    Compiler/Inclusions/include3.php: SUCCEEDED
    Compiler/Inclusions/include6.php: SUCCEEDED
    Compiler/Inclusions/include_test.php: SUCCEEDED
    Compiler/Inclusions/script.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t01.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t02.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t03.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t04.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t05.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t08.php: SUCCEEDED
    Compiler/PseudoConst/parent.php: SUCCEEDED
    Compiler/PseudoConst/parent2.php: SUCCEEDED
    Compiler/PseudoConst/self.php: SUCCEEDED
    Compiler/PseudoConst/t01.php: SUCCEEDED
    Compiler/PseudoConst/t02.php: SUCCEEDED
    Compiler/PseudoConst/t03.php: SUCCEEDED
    Compiler/PseudoConst/t04.php: SUCCEEDED
    Compiler/PseudoConst/t05.php: SUCCEEDED
    Compiler/PseudoConst/t06.php: SUCCEEDED
    Compiler/PseudoConst/t07.php: SUCCEEDED
    Compiler/PseudoConst/t08.php: SUCCEEDED
    Compiler/PseudoConst/t09.php: SUCCEEDED
    Compiler/PseudoConst/t10.php: SUCCEEDED
    Compiler/PseudoConst/t11.php: SUCCEEDED
    Compiler/PseudoConst/_class_.php: SUCCEEDED
    Compiler/PseudoConst/_function_.php: SUCCEEDED
    Compiler/Unreachable/t13.php: SUCCEEDED
    DateTime/strftime.php: SUCCEEDED
    DateTime/strtotime1.php: SUCCEEDED
    DateTime/strtotime2.php: SUCCEEDED
    DateTime/strtotime3.php: SUCCEEDED
    DateTime/strtotime4.php: SUCCEEDED
    DateTime/strtotime5.php: SUCCEEDED
    DateTime/time.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    -189388800:-189475200 - 86400
    1964-01-01T00:00:00+0000
    1963-12-31T00:00:00+0000
    1964-06-06
    1963-06-06
    1964-01-06
    1133305200
    -189388800:-189475200 - 86400
    1964-01-01T00:00:00+0000
    1963-12-31T00:00:00+0000
    1964-06-06
    1963-06-06
    1964-01-06
    DateTime/timezones1.php: SUCCEEDED
    FileSystem/basename.php: SUCCEEDED
    FileSystem/basename2.php: SUCCEEDED
    FileSystem/chdir.php: SUCCEEDED
    FileSystem/csv.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    --- write ---
    72
    24
    44
    2
    6
    
    --- read ---
    "hello\n
    world";"aaa""bbb""ccc";"blah blah;";none;"tab\ttab";"space space"\n
    hh'ee;"ss\nsadasdasd s"\n
    """""""""""""""""""""";"""";;"""""";"xxx"""\n
    x\n
    "x\y"\n
    --- write ---
    72
    24
    44
    2
    6
    
    --- read ---
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    FileSystem/date.php: SUCCEEDED
    FileSystem/date2.php: SUCCEEDED
    FileSystem/date3.php: SUCCEEDED
    FileSystem/date_unix.php: SUCCEEDED
    FileSystem/dirname.php: SUCCEEDED
    FileSystem/dirname2.php: SUCCEEDED
    FileSystem/disk_free_space.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    102 GB
    Drive C: 214 GB
    Drive D: 102 GB
    Drive E: 178 GB
    Drive F: 
    Warning: disk_free_space(): The device is not ready.
     in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt on line 14
    false
    102 GB
    Drive C: 214 GB
    Drive D: 102 GB
    Drive E: 178 GB
    Drive F: false
    FileSystem/disk_total_space.php: SUCCEEDED
    FileSystem/fgets.php: SUCCEEDED
    FileSystem/file.php: SUCCEEDED
    FileSystem/filesize.php: SUCCEEDED
    FileSystem/file_exists.php: SUCCEEDED
    FileSystem/file_get_contents.php: SUCCEEDED
    FileSystem/fpassthru.php: SUCCEEDED
    FileSystem/fread.php: SUCCEEDED
    FileSystem/fread1.php: SUCCEEDED
    FileSystem/fread2.php: SUCCEEDED
    FileSystem/fseek.php: SUCCEEDED
    FileSystem/fsockopen.php: SUCCEEDED
    FileSystem/ftell.php: SUCCEEDED
    FileSystem/is_dir.php: SUCCEEDED
    FileSystem/is_executable.php: SUCCEEDED
    FileSystem/pathinfo.php: SUCCEEDED
    FileSystem/popen.php: SUCCEEDED
    FileSystem/readdir.php: SUCCEEDED
    FileSystem/readfile.php: SUCCEEDED
    FileSystem/readline.php: SUCCEEDED
    FileSystem/realpath.php: SUCCEEDED
    FileSystem/scandir.php: SUCCEEDED
    FileSystem/stat.php: SUCCEEDED
    FileSystem/stream_context_set_option.php: SUCCEEDED
    FileSystem/stream_copy_to_stream.php: SUCCEEDED
    FileSystem/stream_copy_to_stream2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <p>Read <b>rb</b>, Write <b>wb</b>
    
    
    COPIED: <b>10484</b>
    <p>Read <b>rb</b>, Write <b>wt</b>
    
    
    COPIED: <b>10466</b>
    <p>Read <b>rb</b>, Write <b>wb</b>
    
    
    COPIED: <b>10502</b>
    <p>Read <b>rb</b>, Write <b>wt</b>
    
    
    COPIED: <b>10520</b>
    FileSystem/testinc.php: SUCCEEDED
    FileSystem/touch.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Warning: touch(): Utime failed: No such file or directory in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt on line 8
    Sorry Could Not change modification time of touch.txt
    Warning: touch(): Utime failed: No such file or directory in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt on line 14
    
    Warning: touch(): Utime failed: No such file or directory in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt on line 16
    
    Warning: touch(): Utime failed: No such file or directory in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt on line 17
    <pre>[ARRAY
      [INT (0)] => [STRING: "January 24, 2010; [12:09:12] (12h) ctime test.txt (1264331352)"]
      [INT (1)] => [STRING: "January 24, 2010; [12:09:12] (12h) mtime test.txt (1264331352)"]
      [INT (2)] => [STRING: "January 24, 2010; [12:09:12] (12h) ctime touch.txt (1264331352)"]
      [INT (3)] => [STRING: "January 24, 2010; [12:09:12] (12h) mtime touch.txt (1264331352)"]
      [INT (4)] => [STRING: "January 24, 2010; [12:09:12] (12h) atime touch.txt (1264331352)"]
      [INT (5)] => [STRING: "January 24, 2010; [12:09:12] (12h) mtime summer.txt (1264331352)"]
      [INT (6)] => [STRING: "January 24, 2010; [12:09:12] (12h) mtime winter.txt (1264331352)"]
    ]</pre>
    Warning: touch(): Unable to access (D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\touch.txt): Permission denied in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 8, column 5.
    Sorry Could Not change modification time of touch.txt
    Warning: touch(): Unable to access (D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\touch.txt): Permission denied in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 14, column 1.
    
    Warning: touch(): Unable to access (D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\winter.txt): Permission denied in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 16, column 1.
    
    Warning: touch(): Unable to access (D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\summer.txt): Permission denied in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 17, column 1.
    <pre>[ARRAY
      [INT (0)] => [STRING: "January 24, 2010; [13:09:12] (13h) ctime test.txt (1264334952)"]
      [INT (1)] => [STRING: "January 24, 2010; [13:09:12] (13h) mtime test.txt (1264334952)"]
      [INT (2)] => [STRING: "January 24, 2010; [13:09:12] (13h) ctime touch.txt (1264334952)"]
      [INT (3)] => [STRING: "January 24, 2010; [13:09:12] (13h) mtime touch.txt (1264334952)"]
      [INT (4)] => [STRING: "January 24, 2010; [13:09:12] (13h) atime touch.txt (1264334952)"]
      [INT (5)] => [STRING: "January 24, 2010; [13:09:12] (13h) mtime summer.txt (1264334952)"]
      [INT (6)] => [STRING: "January 24, 2010; [13:09:12] (13h) mtime winter.txt (1264334952)"]
    ]</pre>
    Math/abs.php: SUCCEEDED
    Math/atan2.php: SUCCEEDED
    Math/base_convert.php: SUCCEEDED
    Math/bindec.php: SUCCEEDED
    Math/ceil.php: SUCCEEDED
    Math/cos.php: SUCCEEDED
    Math/decbin.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <pre>
    [double: 2294967295]
    10001000110010100110101111111111
    [double: 4294967296]
    0
    [double: 8589934590]
    11111111111111111111111111111110
    [double: 8589934590]
    11111111111111111111111111111110
    [double: 8589934591]
    11111111111111111111111111111111
    [Int: 1000.000.000.000]
    11010100101001010001000000000000
    <hr>(-1, -5435, 2.14, 0, 26)
    11111111111111111111111111111111
    11111111111111111110101011000101
    10
    0
    11010 
    </pre>
    <pre>
    [???: 2294967295]
    10001000110010100110101111111111
    [???: 4294967296]
    0
    [???: 8589934590]
    11111111111111111111111111111110
    [???: 8589934590]
    11111111111111111111111111111110
    [???: 8589934591]
    11111111111111111111111111111111
    [Int: 1000.000.000.000]
    11010100101001010001000000000000
    <hr>(-1, -5435, 2.14, 0, 26)
    11111111111111111111111111111111
    11111111111111111110101011000101
    10
    0
    11010 
    </pre>
    Math/dechex.php: SUCCEEDED
    Math/decoct.php: SUCCEEDED
    Math/deg2rad.php: SUCCEEDED
    Math/exp.php: SUCCEEDED
    Math/floor.php: SUCCEEDED
    Math/fmod.php: SUCCEEDED
    Math/hexdec.php: SUCCEEDED
    Math/max.php: SUCCEEDED
    Math/min.php: SUCCEEDED
    Math/modulo_warn.php: SUCCEEDED
    Math/octdec.php: SUCCEEDED
    Math/pow.php: SUCCEEDED
    Math/rad2deg.php: SUCCEEDED
    Math/round.php: SUCCEEDED
    Math/sin.php: SUCCEEDED
    Math/sqrt.php: SUCCEEDED
    Math/tan.php: SUCCEEDED
    Math/uniqid.php: SUCCEEDED
    Misc/calendar_extension.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0
    0
    2375840
    0
    14
    32
    2
    There are 31 days in August 2003
    There are 28 days in February 2003
    There are 29 days in February 2004
    There are 31 days in December 2034
    1748326
    1748324
    374867
    0
    322f32322f35373633
    ebe120e7f9e5ef20e4faf9f1e2
    ebe120e7f9e5ef20e427faf9f1e2
    ebe120e7f9e5ef20e420e0ecf4e9ed20faf9f1e2
    ebe120e7f9e5ef20e42720e0ecf4e9ed20faf9f1e2
    eb22e120e7f9e5ef20e4faf9f122e2
    e12720e7f9e5ef20e4faf9f122e2
    e12720e7f9e5ef20e427faf9f122e2
    e12720e7f9e5ef20e420e0ecf4e9ed20faf9f122e2
    e12720e7f9e5ef20e42720e0ecf4e9ed20faf9f122e2
    Error: Call to undefined function: 'frenchtojd' in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\__input.txt at expression on line 2, column 1.
    Misc/ini_parse.php: SUCCEEDED
    Misc/lexer.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    T_INLINE_HTML
    311 '\r\n'
    T_OPEN_TAG
    368 '&lt;?'
    T_WHITESPACE
    371 ' \r\n\r\n'
    T_FINAL
    345 'final'
    T_WHITESPACE
    371 ' '
    T_CLASS
    353 'class'
    T_WHITESPACE
    371 ' '
    T_STRING
    307 'A'
    T_WHITESPACE
    371 ' \r\n'
        '{'
    T_WHITESPACE
    371 ' \r\n  '
    T_FUNCTION
    334 'function'
    T_WHITESPACE
    371 ' '
    T_STRING
    307 '__get'
        '('
    T_VARIABLE
    309 '$x'
        ')'
    T_WHITESPACE
    371 ' \r\n  '
        '{'
    T_WHITESPACE
    371 ' \r\n    '
    T_VARIABLE
    309 '$x'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_START_HEREDOC
    372 '&lt;&lt;&lt;EOOOOOOOOOOOOOOT\r\n'
    T_ENCAPSED_AND_WHITESPACE
    314 '         &lt;&lt;&lt;hello\r\nEOOOOOOOOOOOOOOt;\r\nEOOOOOOOOOOOOOT;\r\n'
    T_END_HEREDOC
    373 'EOOOOOOOOOOOOOOT'
        ';'
    T_WHITESPACE
    371 '\r\n\r\n    '
        '$'
    T_VARIABLE
    309 '$y'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_ARRAY
    360 'array'
    T_WHITESPACE
    371 ' '
        '('
    T_LNUMBER
    305 '1'
        ','
    T_DNUMBER
    306 '100000000000000'
        ','
    T_DNUMBER
    306 '999999999999999999999999999999999'
        ','
    T_STRING
    307 'true'
        ','
    T_STRING
    307 'false'
        ')'
        ';'
    T_WHITESPACE
    371 '\r\n    '
        '$'
        '{'
        '&quot;'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
    T_DOLLAR_OPEN_CURLY_BRACES
    374 '${'
        '$'
        '{'
    T_CONSTANT_ENCAPSED_STRING
    315 '&quot;xxx&quot;'
        '}'
        '}'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
        '&quot;'
        '}'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_LNUMBER
    305 '1'
        ';'
    T_WHITESPACE
    371 '\r\n    '
        '$'
        '{'
        '&quot;'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
    T_DOLLAR_OPEN_CURLY_BRACES
    374 '${'
        '$'
        '{'
        '&quot;'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
    T_VARIABLE
    309 '$x'
    T_ENCAPSED_AND_WHITESPACE
    314 '-&gt;$$'
    T_VARIABLE
    309 '$x0xx'
        '&quot;'
        '}'
        '}'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
        '&quot;'
        '}'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_LNUMBER
    305 '1'
        ';'
    T_WHITESPACE
    371 '\r\n  '
        '}'
    T_WHITESPACE
    371 ' \r\n'
        '}'
    T_WHITESPACE
    371 '\r\n\r\n'
    T_CLOSE_TAG
    370 '?&gt;'
    '
    '
        '&lt;?'
        ' 
    
    '
        'final'
        ' '
        'class'
        ' '
        'A'
        ' 
    '
        '{'
        ' 
      '
        'function'
        ' '
    258
    258 '
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\__input.txt at expression on line 10, column 7.
    '
        '('
        '$x'
        ')'
        ' 
      '
        '{'
        ' 
        '
        '$x'
        ' '
        '='
        ' '
        '&lt;&lt;&lt;EOOOOOOOOOOOOOOT
    '
        '         &lt;&lt;&lt;'
        'hello'
        '
    '
        'EOOOOOOOOOOOOOOt;
    '
        'EOOOOOOOOOOOOOT;
    '
        'EOOOOOOOOOOOOOOT'
        ';'
        '
    
        '
        '$'
        '$y'
        ' '
        '='
        ' '
        'array'
        ' '
        '('
        '1'
        ','
        '100000000000000'
        ','
        '999999999999999999999999999999999'
        ','
        'true'
        ','
    256
    256 '
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\__input.txt at expression on line 10, column 7.
    '
        ')'
        ';'
        '
        '
        '$'
        '{'
        '&quot;'
        'x'
        '${'
        '$'
        '{'
    -29
    -29 '
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\__input.txt at expression on line 10, column 7.
    '
        '}'
        '}'
        'x'
        '&quot;'
        '}'
        ' '
        '='
        ' '
        '1'
        ';'
        '
        '
        '$'
        '{'
        '&quot;'
        'x'
        '${'
        '$'
        '{'
        '&quot;'
        'x'
        '$x'
        '-&gt;'
        '$'
        '$'
        '$x0xx'
        '&quot;'
        '}'
        '}'
        'x'
        '&quot;'
        '}'
        ' '
        '='
        ' '
        '1'
        ';'
        '
      '
        '}'
        ' 
    '
        '}'
        '
    
    '
        '?&gt;'
    Misc/locale.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string(1) "C"
    double(1.54)
    double(Infinity)
    654564.145400
    Sat Saturday Apr April
    --------------
    string(19) "Danish_Denmark.1252"
    double(1.54)
    double(Infinity)
    654564,145400
    lo lordag apr april
    --------------
    string(25) "Czech_Czech Republic.1250"
    double(1.54)
    double(Infinity)
    654564,145400
    so sobota IV duben
    --------------
    string(1) "C"
    double(1.54)
    double(Infinity)
    654564.145400
    Sat Saturday Apr April
    --------------
    string(19) "Danish_Denmark.1252"
    double(1.54)
    double(Infinity)
    654564,145400
    l├Ş l├Şrdag apr april
    --------------
    string(25) "Czech_Czech Republic.1250"
    double(1.54)
    double(Infinity)
    654564,145400
    so sobota IV duben
    --------------
    Misc/output2.php: SUCCEEDED
    Misc/stack_trace.php: FAILED
    Script hung upNo errorsSuccess
    Expected test outputReal script output
    Unhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---> System.IndexOutOfRangeException: Index was outside the bounds of the array.
       at PHP.Core.PhpStackFrame..ctor(ScriptContext context, StackFrame frame, FrameKinds kind)
       at PHP.Core.PhpStackTrace..ctor(ScriptContext context, StackTrace clrTrace)
       at PHP.Core.PhpStackTrace..ctor(ScriptContext context, Int32 skipFrames)
       at PHP.Library.Errors.Backtrace()
       at <stack_trace.inc>.<Script>.j(ScriptContext <context>) in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\stack_trace.inc:line 11
       at <stack_trace.inc>.<Script>.j(Object instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <stack_trace.inc>.<Script>.i(ScriptContext <context>) in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\stack_trace.inc:line 6
       at <stack_trace.inc>.<Script>.i(Object instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <^0>.<Global>.<?0>.h(ScriptContext <context>) in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\__input.txt:line 4
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack, DTypeDesc caller)
       at PHP.Core.PhpCallback.InvokeInternal(Object[] args)
       at PHP.Core.PhpCallback.Invoke(Object[] args)
       at PHP.Library.PhpArrays.Map(PhpCallback map, PhpArray[] arrays)
       at <^1>.<Global>.<?1>.Lambda_1(ScriptContext <context>) in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\__input.txt:line 1
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <__input.txt>.<Script>.f(ScriptContext <context>) in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\__input.txt:line 6
       at <__input.txt>.<Script>.f(Object instance, PhpStack stack)
       at <__input.txt>.<Script>.<Main>(ScriptContext <context>, Dictionary`2 <locals>, DObject , DTypeDesc , Boolean ) in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\__input.txt:line 18
       at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)
       at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)
       --- End of inner exception stack trace ---
       at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)
       at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot, Stream outputStream)
       at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)
       at <Global>.Run(String[] )
    
    Misc/tokens.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    T_REQUIRE_ONCE = 258,
    T_REQUIRE = 259,
    T_EVAL = 260,
    T_INCLUDE_ONCE = 261,
    T_INCLUDE = 262,
    T_LOGICAL_OR = 263,
    T_LOGICAL_XOR = 264,
    T_LOGICAL_AND = 265,
    T_PRINT = 266,
    T_SR_EQUAL = 267,
    T_SL_EQUAL = 268,
    T_XOR_EQUAL = 269,
    T_OR_EQUAL = 270,
    T_AND_EQUAL = 271,
    T_MOD_EQUAL = 272,
    T_CONCAT_EQUAL = 273,
    T_DIV_EQUAL = 274,
    T_MUL_EQUAL = 275,
    T_MINUS_EQUAL = 276,
    T_PLUS_EQUAL = 277,
    T_BOOLEAN_OR = 278,
    T_BOOLEAN_AND = 279,
    T_IS_NOT_IDENTICAL = 280,
    T_IS_IDENTICAL = 281,
    T_IS_NOT_EQUAL = 282,
    T_IS_EQUAL = 283,
    T_IS_GREATER_OR_EQUAL = 284,
    T_IS_SMALLER_OR_EQUAL = 285,
    T_SR = 286,
    T_SL = 287,
    T_INSTANCEOF = 288,
    T_UNSET_CAST = 289,
    T_BOOL_CAST = 290,
    T_OBJECT_CAST = 291,
    T_ARRAY_CAST = 292,
    T_STRING_CAST = 293,
    T_DOUBLE_CAST = 294,
    T_INT_CAST = 295,
    T_DEC = 296,
    T_INC = 297,
    T_CLONE = 298,
    T_NEW = 299,
    T_EXIT = 300,
    T_IF = 301,
    T_ELSEIF = 302,
    T_ELSE = 303,
    T_ENDIF = 304,
    T_LNUMBER = 305,
    T_DNUMBER = 306,
    T_STRING = 307,
    T_STRING_VARNAME = 308,
    T_VARIABLE = 309,
    T_NUM_STRING = 310,
    T_INLINE_HTML = 311,
    T_CHARACTER = 312,
    T_BAD_CHARACTER = 313,
    T_ENCAPSED_AND_WHITESPACE = 314,
    T_CONSTANT_ENCAPSED_STRING = 315,
    T_ECHO = 316,
    T_DO = 317,
    T_WHILE = 318,
    T_ENDWHILE = 319,
    T_FOR = 320,
    T_ENDFOR = 321,
    T_FOREACH = 322,
    T_ENDFOREACH = 323,
    T_DECLARE = 324,
    T_ENDDECLARE = 325,
    T_AS = 326,
    T_SWITCH = 327,
    T_ENDSWITCH = 328,
    T_CASE = 329,
    T_DEFAULT = 330,
    T_BREAK = 331,
    T_CONTINUE = 332,
    T_GOTO = 333,
    T_FUNCTION = 334,
    T_CONST = 335,
    T_RETURN = 336,
    T_TRY = 337,
    T_CATCH = 338,
    T_THROW = 339,
    T_USE = 340,
    T_GLOBAL = 341,
    T_PUBLIC = 342,
    T_PROTECTED = 343,
    T_PRIVATE = 344,
    T_FINAL = 345,
    T_ABSTRACT = 346,
    T_STATIC = 347,
    T_VAR = 348,
    T_UNSET = 349,
    T_ISSET = 350,
    T_EMPTY = 351,
    T_HALT_COMPILER = 352,
    T_CLASS = 353,
    T_INTERFACE = 354,
    T_EXTENDS = 355,
    T_IMPLEMENTS = 356,
    T_OBJECT_OPERATOR = 357,
    T_DOUBLE_ARROW = 358,
    T_LIST = 359,
    T_ARRAY = 360,
    T_CLASS_C = 361,
    T_METHOD_C = 362,
    T_FUNC_C = 363,
    T_LINE = 364,
    T_FILE = 365,
    T_COMMENT = 366,
    T_DOC_COMMENT = 367,
    T_OPEN_TAG = 368,
    T_OPEN_TAG_WITH_ECHO = 369,
    T_CLOSE_TAG = 370,
    T_WHITESPACE = 371,
    T_START_HEREDOC = 372,
    T_END_HEREDOC = 373,
    T_DOLLAR_OPEN_CURLY_BRACES = 374,
    T_CURLY_OPEN = 375,
    T_PAAMAYIM_NEKUDOTAYIM = 376,
    T_DOUBLE_COLON = 376,
    T_NAMESPACE = 377,
    T_NS_C = 378,
    T_DIR = 379,
    T_NS_SEPARATOR = 380,
    T_INCLUDE = 129,
    T_INCLUDE_ONCE = 130,
    T_EVAL = 131,
    T_REQUIRE = 132,
    T_REQUIRE_ONCE = 133,
    T_LOGICAL_OR = 136,
    T_LOGICAL_XOR = 137,
    T_LOGICAL_AND = 138,
    T_PRINT = 139,
    T_PLUS_EQUAL = 140,
    T_MINUS_EQUAL = 141,
    T_MUL_EQUAL = 142,
    T_DIV_EQUAL = 143,
    T_CONCAT_EQUAL = 144,
    T_MOD_EQUAL = 145,
    T_AND_EQUAL = 146,
    T_OR_EQUAL = 147,
    T_XOR_EQUAL = 148,
    T_SL_EQUAL = 149,
    T_SR_EQUAL = 150,
    T_BOOLEAN_OR = 151,
    T_BOOLEAN_AND = 152,
    T_IS_EQUAL = 153,
    T_IS_NOT_EQUAL = 154,
    T_IS_IDENTICAL = 155,
    T_IS_NOT_IDENTICAL = 156,
    T_IS_SMALLER_OR_EQUAL = 157,
    T_IS_GREATER_OR_EQUAL = 158,
    T_SL = 159,
    T_SR = 160,
    T_INC = 161,
    T_DEC = 162,
    T_NEW = 164,
    T_INSTANCEOF = 165,
    T_CLONE = 167,
    T_LNUMBER = 168,
    T_DNUMBER = 170,
    T_STRING = 171,
    T_STRING_VARNAME = 172,
    T_VARIABLE = 173,
    T_NUM_STRING = 174,
    T_INLINE_HTML = 175,
    T_CHARACTER = 176,
    T_BAD_CHARACTER = 177,
    T_ENCAPSED_AND_WHITESPACE = 178,
    T_CONSTANT_ENCAPSED_STRING = 179,
    T_EXIT = 180,
    T_IF = 181,
    T_ELSEIF = 182,
    T_ELSE = 183,
    T_ENDIF = 184,
    T_ECHO = 185,
    T_DO = 186,
    T_WHILE = 187,
    T_ENDWHILE = 188,
    T_FOR = 189,
    T_ENDFOR = 190,
    T_FOREACH = 191,
    T_ENDFOREACH = 192,
    T_AS = 193,
    T_SWITCH = 194,
    T_ENDSWITCH = 195,
    T_CASE = 196,
    T_DEFAULT = 197,
    T_BREAK = 198,
    T_CONTINUE = 199,
    T_FUNCTION = 200,
    T_CONST = 201,
    T_RETURN = 202,
    T_GLOBAL = 203,
    T_STATIC = 204,
    T_VAR = 205,
    T_UNSET = 206,
    T_ISSET = 207,
    T_EMPTY = 208,
    T_CLASS = 209,
    T_EXTENDS = 210,
    T_OBJECT_OPERATOR = 211,
    T_DOUBLE_ARROW = 212,
    T_LIST = 213,
    T_ARRAY = 214,
    T_CLASS_C = 215,
    T_METHOD_C = 216,
    T_FUNC_C = 217,
    T_LINE = 218,
    T_FILE = 219,
    T_COMMENT = 220,
    T_DOC_COMMENT = 221,
    T_OPEN_TAG = 226,
    T_OPEN_TAG_WITH_ECHO = 227,
    T_CLOSE_TAG = 228,
    T_WHITESPACE = 229,
    T_START_HEREDOC = 230,
    T_END_HEREDOC = 231,
    T_DOLLAR_OPEN_CURLY_BRACES = 232,
    T_CURLY_OPEN = 233,
    T_DOUBLE_COLON = 234,
    T_PAAMAYIM_NEKUDOTAYIM = 234,
    T_TRY = 236,
    T_CATCH = 237,
    T_THROW = 238,
    T_INTERFACE = 239,
    T_IMPLEMENTS = 240,
    T_ABSTRACT = 241,
    T_FINAL = 242,
    T_PRIVATE = 243,
    T_PROTECTED = 244,
    T_PUBLIC = 245,
    T_BOOL_CAST = 285,
    T_INT_CAST = 288,
    T_DOUBLE_CAST = 294,
    T_STRING_CAST = 297,
    T_ARRAY_CAST = 299,
    T_OBJECT_CAST = 300,
    T_UNSET_CAST = 301,
    T_HALT_COMPILER = 351,
    Misc/user_error_handlers.php: SUCCEEDED
    Objects/conditional1.php: SUCCEEDED
    Objects/conditional2.php: SUCCEEDED
    Objects/conditional_base_class.php: SUCCEEDED
    Objects/constant_test.php: SUCCEEDED
    Objects/evaled_parent.php: SUCCEEDED
    Objects/getter_setter_bug28444.php: SUCCEEDED
    Objects/instanceof.php: SUCCEEDED
    Objects/new_via_unknown_ctor.php: SUCCEEDED
    Objects/object_creation_test.php: SUCCEEDED
    Objects/static_field_test.php: SUCCEEDED
    Objects/static_method_test.php: SUCCEEDED
    Objects/sys_class_const.php: SUCCEEDED
    Objects/this2.php: SUCCEEDED
    RegEx/ereg.php: SUCCEEDED
    RegEx/preg_match_unmatched_groups.php: SUCCEEDED
    RegEx/preg_replace_eval.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ab"01300 as"00da sd"0asdsa das asd 11asd a1sd a
    ab"01300 as"00da sd"0(aasdasdkjask,$a,\,\l,a,s,d,a,s,d,k,j,a,s,${120})(ldjaklsdjalk,$l,\,\l,d,j,a,k,l,s,d,j,a,l,${120})djdsa das asd 11asd a1sd a
    ab"01300 as"00da sd"0asdsa das asd 11asd a1sd a
    ab"01300 as"00da sd"0(aasdasdkjask,$a,\,\l,a,s,d,a,s,d,k,j,,,${120})(ldjaklsdjalk,$l,\,\l,d,j,a,k,l,s,d,j,,,${120})djdsa das asd 11asd a1sd a
    RegEx/regexp-sql.php: SUCCEEDED
    RegEx/Perl/cache.php: SUCCEEDED
    RegEx/Perl/grep1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      [3] => string(3) "1.5"
      [6] => string(5) "58.54"
    }
    Notice: preg_grep(): Array to string conversion in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\RegEx\Perl\__input.txt at expression on line 5, column 1.
    array(2)
    {
      [3] => string(3) "1.5"
      [6] => string(5) "58.54"
    }
    RegEx/Perl/grep2.php: SUCCEEDED
    RegEx/Perl/match1.php: SUCCEEDED
    RegEx/Perl/match10.php: SUCCEEDED
    RegEx/Perl/match2.php: SUCCEEDED
    RegEx/Perl/match3.php: SUCCEEDED
    RegEx/Perl/match4.php: SUCCEEDED
    RegEx/Perl/match5.php: SUCCEEDED
    RegEx/Perl/match6.php: SUCCEEDED
    RegEx/Perl/match7.php: SUCCEEDED
    RegEx/Perl/match8.php: SUCCEEDED
    RegEx/Perl/match9.php: SUCCEEDED
    RegEx/Perl/match_all1.php: SUCCEEDED
    RegEx/Perl/match_all2.php: SUCCEEDED
    RegEx/Perl/match_all3.php: SUCCEEDED
    RegEx/Perl/match_all4.php: SUCCEEDED
    RegEx/Perl/match_dollar.php: SUCCEEDED
    RegEx/Perl/overflow.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string("kfkaj +j k45´┐Ż´┐Ż´┐Ż´┐Ż´┐Ż3#$%^&kjakfjkaj|kfj")
    string("kfkaj +j k45─Ć┼╝╦Ł─Ć┼╝╦Ł─Ć┼╝╦Ł─Ć┼╝╦Ł─Ć┼╝╦Ł3#$%^&kjakfjkaj|kfj")
    RegEx/Perl/quote1.php: SUCCEEDED
    RegEx/Perl/quote2.php: SUCCEEDED
    RegEx/Perl/quote3.php: SUCCEEDED
    RegEx/Perl/replace1.php: SUCCEEDED
    RegEx/Perl/replace2.php: SUCCEEDED
    RegEx/Perl/replace3.php: SUCCEEDED
    RegEx/Perl/replace4.php: SUCCEEDED
    RegEx/Perl/replace5.php: SUCCEEDED
    RegEx/Perl/replace6.php: SUCCEEDED
    RegEx/Perl/replace7.php: SUCCEEDED
    RegEx/Perl/replace8.php: SUCCEEDED
    RegEx/Perl/replace9.php: SUCCEEDED
    RegEx/Perl/replace_callback1.php: SUCCEEDED
    RegEx/Perl/replace_callback2.php: SUCCEEDED
    RegEx/Perl/split1.php: SUCCEEDED
    RegEx/Perl/split2.php: SUCCEEDED
    RegEx/Perl/split3.php: SUCCEEDED
    RegEx/Perl/split4.php: SUCCEEDED
    RegEx/Perl/split5.php: SUCCEEDED
    RegEx/Perl/ungreedy.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    aaa
    a
    aaa
    
    a
    aa
    aaa
    aa
    aaa
    aaa
    a
    aaa
    a
    a
    aa
    aaa
    aa
    aaa
    RegEx/Perl/unsuccessful-preg_match_all.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0
    4
    1
    4
    0
    4
    1
    7
    SPL/ArrayAccess_offsetExists.php: SUCCEEDED
    SPL/exceptions.php: SUCCEEDED
    Strings/addcslashes.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    \f\o\o\[ \]
    Issues a Warning:
    // echo addcslashes("zoo['.']", 'z..A');
    // output:  \zoo['\.']
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt at expression on line 4, column 1.
    
    Issues a Warning:
    // echo addcslashes("zoo['.']", 'z..A');
    // output:  \zoo['\.']
    Strings/addslashes.php: SUCCEEDED
    Strings/chunk_split.php: SUCCEEDED
    Strings/concat.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string(2) "ab"
    string(2) "ab"
    string(2) "ab"
    string(2) "ab"
    string(2) "ab"
    string(2) "aB"
    string(2) "Ab"
    string(2) "AB"
    string(2) "ab"
    string(2) "a1"
    string(2) "1b"
    string(2) "11"
    string(2) "ab"
    string(2) "aB"
    string(2) "Ab"
    string[binary](2) "\x41\x42"
    string(2) "ab"
    string(2) "ab"
    string(2) "ab"
    string(2) "ab"
    string(2) "ab"
    string(2) "aB"
    string(2) "Ab"
    string(2) "AB"
    string(2) "ab"
    string(2) "a1"
    string(2) "1b"
    string(2) "11"
    string(2) "ab"
    string(2) "aB"
    string[binary](2) "\x41\x62"
    string[binary](2) "\x41\x42"
    Strings/count_chars.php: SUCCEEDED
    Strings/crc32.php: SUCCEEDED
    Strings/crypt.php: SUCCEEDED
    Strings/crypt2.php: SUCCEEDED
    Strings/echo.php: SUCCEEDED
    Strings/explode.php: SUCCEEDED
    Strings/get_html_translation_table.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <hr>[&] => &amp;
    [>] => &gt;
    [<] => &lt;
    ["] => &quot;
    <hr>Hallo &amp; &lt;Frau&gt; &amp; Kr&iuml;&iquest;&frac12;mer
    <hr>[&] => &amp;
    [>] => &gt;
    [<] => &lt;
    ["] => &quot;
    <hr>Hallo &amp; &lt;Frau&gt; &amp; Kr─Ć┼╝╦Łmer
    Strings/nl2br.php: SUCCEEDED
    Strings/pack.php: SUCCEEDED
    Strings/pos.php: SUCCEEDED
    Strings/runtime-quotes.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    fread = (x''y"z)
    fgets = (x''y"z)
    file[0] = (x''y"z)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    
    Warning: fopen(runtime-quotes2.txt): failed to open stream: Permission denied in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt on line 33
    
    Warning: fwrite() expects parameter 1 to be resource, boolean given in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt on line 35
    fwrite = ()
    
    Warning: fputs() expects parameter 1 to be resource, boolean given in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt on line 38
    fputs = ()
    
    Warning: fclose() expects parameter 1 to be resource, boolean given in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt on line 41
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (x'y"z)
    fgets = (x'y"z)
    file[0] = (x'y"z)
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (a\'b"\\ca\)
    fgets = (a\'b"\\ca\'b"\\c)
    file[0] = (a\'b"\\ca\'b"\\c)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    e'e
    e''e
    e'e
    e'e
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    e'e
    e'e
    e'e
    e'e
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    fread = (x''y"z)
    fgets = (x''y"z)
    file[0] = (x''y"z)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    
    Warning: fopen(): Unable to access (D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\runtime-quotes2.txt): Permission denied in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt at expression on line 33, column 3.
    
    Warning: Cannot convert bool to resource implicitly in a call to function fwrite() in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt at expression on line 35, column 3.
    fwrite = ()
    
    Warning: Cannot convert bool to resource implicitly in a call to function fputs() in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt at expression on line 38, column 3.
    fputs = ()
    
    Warning: Cannot convert bool to resource implicitly in a call to function fclose() in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt at expression on line 41, column 3.
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (x'y"z)
    fgets = (x'y"z)
    file[0] = (x'y"z)
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (a\'b"\\ca\)
    fgets = (a\'b"\\ca\'b"\\c)
    file[0] = (a\'b"\\ca\'b"\\c)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    e'e
    e''e
    e'e
    e'e
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    e'e
    e'e
    e'e
    e'e
    Strings/sprintf.php: SUCCEEDED
    Strings/sprintf2.php: SUCCEEDED
    Strings/strtr.php: SUCCEEDED
    Strings/str_ireplace.php: SUCCEEDED
    Strings/str_word_count.php: SUCCEEDED
    Strings/substr_operations.php: SUCCEEDED
    Strings/wordwrap.php: SUCCEEDED
    Variables/advanced_serialize.php: SUCCEEDED
    Variables/arguments.php: SUCCEEDED
    Variables/bitwise.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "00"
    string(2) "31"
    string(2) "31"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    0
    0
    0
    5
    0
    5
    40
    5
    45
    string(48) "000000000000000000000000000000000000000000000000"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(14) "31323331323331"
    string(2) "30"
    string(14) "31323331323331"
    string(16) "3635343635343536"
    string(2) "30"
    string(16) "3635343635343536"
    string(14) "337a5e8be43d7a"
    string(14) "00002130120201"
    string(48) "337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42"
    string(16) "347d598ce33a7e77"
    string(16) "0200243214040100"
    string(48) "367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42"
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "00"
    string(2) "31"
    string(2) "31"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    0
    -9223372036854775808
    -9223372036854775808
    -9223372036854775803
    0
    -9223372036854775803
    40
    5
    45
    string(48) "000000000000000000000000000000000000000000000000"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(14) "31323331323331"
    string(2) "30"
    string(14) "31323331323331"
    string(16) "3635343635343536"
    string(2) "30"
    string(16) "3635343635343536"
    string(14) "337a5e8be43d7a"
    string(14) "00002130120201"
    string(48) "337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42"
    string(16) "347d598ce33a7e77"
    string(16) "0200243214040100"
    string(48) "367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42"
    Variables/comparisons.php: SUCCEEDED
    Variables/constant.php: SUCCEEDED
    Variables/extract.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    EXTR_PREFIX_ALL
    integer(4)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
      'prefix_non_existent' => integer(1)
    }
    <hr>EXTR_PREFIX_INVALID
    integer(5)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => integer(2)
      'non_existent' => integer(1)
      'prefix_' => integer(1)
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => 'hello'
    }
    <hr>EXTR_PREFIX_SAME
    integer(3)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'non_existent' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>EXTR_PREFIX_IF_EXISTS
    integer(3)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>
    EXTR_PREFIX_ALL
    integer(4)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
      'prefix_non_existent' => integer(1)
    }
    <hr>EXTR_PREFIX_INVALID
    integer(2)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_ad' => integer(2)
      'prefix_non_existent' => integer(1)
    }
    <hr>EXTR_PREFIX_SAME
    integer(4)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'non_existent' => integer(1)
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>EXTR_PREFIX_IF_EXISTS
    integer(3)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>
    Variables/func_get_args.php: SUCCEEDED
    Variables/is_number.php: SUCCEEDED
    Variables/serialize.php: SUCCEEDED
    Variables/unserialize_objects.php: SUCCEEDED
    Variables/var_dumping.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Array
    (
        [0] => 1
        [1] => 
        [2] => 1
        [3] => 1.2
        [4] => 
        [5] => asdas
        [6] => Array
            (
                [0] => 1
            )
    
        [7] => stdClass Object
            (
            )
    
        [8] => Resource id #1
    )
    array(9) {
      [0]=>
      bool(true)
      [1]=>
      bool(false)
      [2]=>
      int(1)
      [3]=>
      float(1.2)
      [4]=>
      NULL
      [5]=>
      string(5) "asdas"
      [6]=>
      array(1) {
        [0]=>
        int(1)
      }
      [7]=>
      object(stdClass)#1 (0) {
      }
      [8]=>
      resource(1) of type (stream)
    }
    array (
      0 => true,
      1 => false,
      2 => 1,
      3 => 1.2,
      4 => NULL,
      5 => 'asdas',
      6 => 
      array (
        0 => 1,
      ),
      7 => 
      stdClass::__set_state(array(
      )),
      8 => NULL,
    )
    array
    (
      [0] => 1
      [1] => 
      [2] => 1
      [3] => 1.2
      [4] => 
      [5] => asdas
      [6] => array
      (
        [0] => 1
      )
      [7] => stdClass object
      (
      )
      [8] => resource id #4
    )
    array(9)
    {
      [0] => bool(true)
      [1] => bool(false)
      [2] => integer(1)
      [3] => double(1.2)
      [4] => NULL
      [5] => string(5) "asdas"
      [6] => array(1)
      {
        [0] => integer(1)
      }
      [7] => object(stdClass)(0)
      {
      }
      [8] => resource(4) of type (stream)
    }
    array
    (
      '0' => true,
      '1' => false,
      '2' => 1,
      '3' => 1.2,
      '4' => NULL,
      '5' => 'asdas',
      '6' => array
      (
        '0' => 1
      ),
      '7' => class stdClass
      {
    
      },
      '8' => NULL
    )
    WorkItems/1285%20overrides.php: SUCCEEDED
    WorkItems/22016.php: SUCCEEDED
    WorkItems/22019.php: SUCCEEDED
    WorkItems/26052.php: SUCCEEDED
    WorkItems/26667%20hash.php: SUCCEEDED
    WorkItems/26681.php: SUCCEEDED
    WorkItems/26691.php: SUCCEEDED
    WorkItems/27377.php: SUCCEEDED
    WorkItems/27492.php: SUCCEEDED
    WorkItems/27838%20json.php: SUCCEEDED
    WorkItems/2787.php: SUCCEEDED
    WorkItems/29026%20echo%20concat.php: SUCCEEDED
    Xml/005.php: SUCCEEDED
    Xml/006.php: SUCCEEDED
    Xml/007.php: SUCCEEDED
    Xml/008.php: SUCCEEDED
    Xml/009.php: SUCCEEDED
    Xml/011.php: SUCCEEDED
    Xml/013.php: SUCCEEDED
    Xml/017.php: SUCCEEDED
    Xml/018.php: SUCCEEDED
    Xml/019.php: SUCCEEDED
    Xml/020.php: SUCCEEDED
    Xml/021.php: SUCCEEDED
    Xml/025.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
      'foo' => 'foobar'
    }
    array
    {
      'html' => 'http://www.w3.org/1999/xhtml'
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
    }
    array
    {
      'html' => 'http://www.w3.org/1999/xhtml'
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'foo' => 'foobar'
      'baz' => 'foobarbaz'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
    }
    array
    {
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
      'baz' => 'foobarbaz'
      'foo' => 'foobar'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
      'baz' => 'foobarbaz'
      'foo' => 'foobar'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
    }
    array
    {
    }
    Xml/026.php: SUCCEEDED
    Xml/027.php: SUCCEEDED
    Xml/028.php: SUCCEEDED
    Xml/029.php: SUCCEEDED
    Xml/030.php: SUCCEEDED
    Xml/032.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    FALSE
    FALSE
    FALSE
    TRUE
    TRUE
    TRUE
    Xml/033.php: SUCCEEDED
    Xml/bug26384.php: SUCCEEDED
    Xml/bug28721.php: SUCCEEDED
    Xml/bug28817.php: SUCCEEDED
    Xml/bug32615.php: SUCCEEDED
    Xml/bug33853.php: SUCCEEDED
    Xml/bug34276.php: SUCCEEDED
    Xml/bug35342.php: SUCCEEDED
    Xml/bug36756.php: SUCCEEDED
    Xml/bug37277.php: SUCCEEDED
    Xml/dom002.php: SUCCEEDED
    Xml/dom003.php: SUCCEEDED
    Xml/dom006.php: SUCCEEDED
    Xml/dom007.php: SUCCEEDED
    Xml/dom_set_attr_node.php: SUCCEEDED
    Xml/xslt001.php: SUCCEEDED
    Xml/xslt002.php: SUCCEEDED
    Xml/xslt003.php: SUCCEEDED
    Xml/xslt004.php: SUCCEEDED
    Xml/xslt005.php: SUCCEEDED
    Xml/xslt006.php: SUCCEEDED
    Xml/xslt007.php: SUCCEEDED
    Xml/xslt010.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test 10: EXSLT Support
      
      
      Test Date : 0001-12-31Z
        year                 : 1
        leap-year            : false
        month-in-year        : 12
        month-name           : December
        month-abbreviation   : Dec
        week-in-year         : 1
        day-in-year          : 365
        day-in-month         : 31
        day-of-week-in-month : 5
        day-in-week          : 2
        day-name             : Monday
        day-abbreviation     : Mon
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : 3000-01-31
        year                 : 3000
        leap-year            : false
        month-in-year        : 1
        month-name           : January
        month-abbreviation   : Jan
        week-in-year         : 5
        day-in-year          : 31
        day-in-month         : 31
        day-of-week-in-month : 5
        day-in-week          : 6
        day-name             : Friday
        day-abbreviation     : Fri
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : 2000-02-29
        year                 : 2000
        leap-year            : true
        month-in-year        : 2
        month-name           : February
        month-abbreviation   : Feb
        week-in-year         : 9
        day-in-year          : 60
        day-in-month         : 29
        day-of-week-in-month : 5
        day-in-week          : 3
        day-name             : Tuesday
        day-abbreviation     : Tue
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : 9990001-12-31Z
        year                 : 9990001
        leap-year            : false
        month-in-year        : 12
        month-name           : December
        month-abbreviation   : Dec
        week-in-year         : 1
        day-in-year          : 365
        day-in-month         : 31
        day-of-week-in-month : 5
        day-in-week          : 2
        day-name             : Monday
        day-abbreviation     : Mon
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : -0004-02-29
        year                 : -4
        leap-year            : true
        month-in-year        : 2
        month-name           : February
        month-abbreviation   : Feb
        week-in-year         : 9
        day-in-year          : 60
        day-in-month         : 29
        day-of-week-in-month : 5
        day-in-week          : 1
        day-name             : Sunday
        day-abbreviation     : Sun
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
    Test 10: EXSLT Support
    Warning: Cannot find the script or external object that implements prefix 'http://exslt.org/dates-and-times'. in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Xml\__input.txt at expression on line 14, column 3.
    
    Warning: Illegal string offset '-1' in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Phalanger.inc at expression on line 7, column 6.
    Xml/xslt011.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test 11: php:function Support
    
    Warning: XSLTProcessor::transformToXml(): A PHP Object cannot be converted to a XPath-string in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Xml\__input.txt on line 18
    <?xml version="1.0"?>
    foobar - secondArg
    foobar - 
    this is from an external DomDocument
    from the Input Document
    static
    Test 11: php:function Support
    <?xml version="1.0" encoding="utf-8"?>foobar - secondArg
    foobar - 
    this is from an external DomDocument
    from the Input Document
    static
    not a DomNode object
    Xml/xslt012.php: SUCCEEDED
    ================================================ FILE: Testing/Tests/TestLogs/TestLog 2010-02-27.htm ================================================ PHP.NET Compiler test log

    PHP.NET Compiler test log

    (90%) 778 succeeded, 83 failed
    Test ResultCompiler error outputExpected test result
    @PHP/classes/array_access_001.php: SUCCEEDED
    @PHP/classes/array_access_002.php: SUCCEEDED
    @PHP/classes/array_access_003.php: SUCCEEDED
    @PHP/classes/array_access_004.php: SUCCEEDED
    @PHP/classes/array_access_005.php: SUCCEEDED
    @PHP/classes/array_access_006.php: SUCCEEDED
    @PHP/classes/array_access_007.php: SUCCEEDED
    @PHP/classes/array_access_008.php: SUCCEEDED
    @PHP/classes/array_access_009.php: SUCCEEDED
    @PHP/classes/array_access_010.php: SUCCEEDED
    @PHP/classes/array_access_011.php: SUCCEEDED
    @PHP/classes/array_access_013.php: SUCCEEDED
    @PHP/classes/assign_op_property_001.php: SUCCEEDED
    @PHP/classes/autoload_001.php: SUCCEEDED
    @PHP/classes/autoload_002.php: SUCCEEDED
    @PHP/classes/autoload_003.php: SUCCEEDED
    @PHP/classes/autoload_005.php: SUCCEEDED
    @PHP/classes/autoload_006.php: SUCCEEDED
    @PHP/classes/bug23951.php: SUCCEEDED
    @PHP/classes/bug24399.php: SUCCEEDED
    @PHP/classes/bug24445.php: SUCCEEDED
    @PHP/classes/bug26737.php: SUCCEEDED
    @PHP/classes/bug27468.php: SUCCEEDED
    @PHP/classes/bug27504.php: SUCCEEDED
    @PHP/classes/class_example.php: SUCCEEDED
    @PHP/classes/class_stdclass.php: SUCCEEDED
    @PHP/classes/clone_001.php: SUCCEEDED
    @PHP/classes/clone_002.php: SUCCEEDED
    @PHP/classes/clone_003.php: SUCCEEDED
    @PHP/classes/clone_004.php: SUCCEEDED
    @PHP/classes/clone_006.php: SUCCEEDED
    @PHP/classes/constants_scope_001.php: SUCCEEDED
    @PHP/classes/ctor_dtor.php: SUCCEEDED
    @PHP/classes/ctor_dtor_inheritance.php: SUCCEEDED
    @PHP/classes/ctor_name_clash.php: SUCCEEDED
    @PHP/classes/dereferencing_001.php: SUCCEEDED
    @PHP/classes/destructor_and_echo.php: SUCCEEDED
    @PHP/classes/destructor_and_references.php: SUCCEEDED
    @PHP/classes/destructor_inheritance.php: SUCCEEDED
    @PHP/classes/destructor_visibility_003.php: SUCCEEDED
    @PHP/classes/factory_001.php: SUCCEEDED
    @PHP/classes/factory_and_singleton_001.php: SUCCEEDED
    @PHP/classes/factory_and_singleton_002.php: SUCCEEDED
    @PHP/classes/final.php: SUCCEEDED
    @PHP/classes/incdec_property_001.php: SUCCEEDED
    @PHP/classes/incdec_property_002.php: SUCCEEDED
    @PHP/classes/incdec_property_003.php: SUCCEEDED
    @PHP/classes/incdec_property_004.php: SUCCEEDED
    @PHP/classes/inheritance.php: SUCCEEDED
    @PHP/classes/inheritance_002.php: SUCCEEDED
    @PHP/classes/interfaces_001.php: SUCCEEDED
    @PHP/classes/interface_construct.php: SUCCEEDED
    @PHP/classes/interface_doubled.php: SUCCEEDED
    @PHP/classes/interface_implemented.php: SUCCEEDED
    @PHP/classes/iterators_001.php: SUCCEEDED
    @PHP/classes/iterators_002.php: SUCCEEDED
    @PHP/classes/iterators_003.php: SUCCEEDED
    @PHP/classes/iterators_004.php: SUCCEEDED
    @PHP/classes/iterators_006.php: SUCCEEDED
    @PHP/classes/iterators_007.php: SUCCEEDED
    @PHP/classes/object_reference_001.php: SUCCEEDED
    @PHP/classes/private_001.php: SUCCEEDED
    @PHP/classes/private_002.php: SUCCEEDED
    @PHP/classes/private_003.php: SUCCEEDED
    @PHP/classes/private_003b.php: SUCCEEDED
    @PHP/classes/private_004.php: SUCCEEDED
    @PHP/classes/private_004b.php: SUCCEEDED
    @PHP/classes/private_005.php: SUCCEEDED
    @PHP/classes/private_005b.php: SUCCEEDED
    @PHP/classes/private_006.php: SUCCEEDED
    @PHP/classes/private_006b.php: SUCCEEDED
    @PHP/classes/private_007.php: SUCCEEDED
    @PHP/classes/private_007b.php: SUCCEEDED
    @PHP/classes/private_members.php: SUCCEEDED
    @PHP/classes/private_redeclare.php: SUCCEEDED
    @PHP/classes/protected_001.php: SUCCEEDED
    @PHP/classes/protected_001b.php: SUCCEEDED
    @PHP/classes/protected_002.php: SUCCEEDED
    @PHP/classes/serialize_001.php: SUCCEEDED
    @PHP/classes/singleton_001.php: SUCCEEDED
    @PHP/classes/static_properties_001.php: SUCCEEDED
    @PHP/classes/type_hinting_001.php: SUCCEEDED
    @PHP/classes/type_hinting_003.php: SUCCEEDED
    @PHP/classes/visibility_000c.php: SUCCEEDED
    @PHP/classes/visibility_001c.php: SUCCEEDED
    @PHP/classes/visibility_002c.php: SUCCEEDED
    @PHP/classes/visibility_003a.php: SUCCEEDED
    @PHP/classes/visibility_003c.php: SUCCEEDED
    @PHP/classes/visibility_004a.php: SUCCEEDED
    @PHP/classes/visibility_004b.php: SUCCEEDED
    @PHP/classes/visibility_004c.php: SUCCEEDED
    @PHP/classes/visibility_005.php: SUCCEEDED
    @PHP/classes/__call_001.php: SUCCEEDED
    @PHP/classes/__set_data_corrupt.php: SUCCEEDED
    @PHP/classes/__set__get_001.php: SUCCEEDED
    @PHP/classes/__set__get_004.php: SUCCEEDED
    @PHP/classes/__set__get_005.php: SUCCEEDED
    @PHP/date/bug17988.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2002-06-25 12:18:48
    2002-06-25 14:18:48
    2002-06-25 13:18:48
    2002-06-25 12:18:48
    2002-06-25 18:18:48
    2002-06-25 14:18:48
    2002-06-25 14:18:48
    2002-06-25 18:18:48
    2002-06-25 10:18:48
    2002-06-25 17:18:48
    2002-06-25 11:18:48
    2002-06-25 17:48:48
    2002-06-25 10:48:48
    2002-06-25 14:18:48
    2002-06-25 14:18:48
    2002-06-25 13:18:48
    2002-06-25 12:18:48
    2002-06-25 18:18:48
    2002-06-25 14:18:48
    2002-06-25 14:18:48
    2002-06-25 18:18:48
    2002-06-25 10:18:48
    2002-06-25 17:18:48
    2002-06-25 11:18:48
    2002-06-25 17:48:48
    2002-06-25 10:48:48
    @PHP/date/bug26317.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2003-11-19 17:20:42
    2003-11-19 17:20:42
    2003-11-19 17:20:42
    2003-11-19 16:20:42
    2003-11-19 16:20:42
    2003-11-19 16:20:42
    @PHP/date/bug26320.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2003-11-19 12:30:42
    2003-11-19 13:30:42
    2003-11-19 12:30:42
    2003-11-19 12:30:42
    @PHP/date/bug28088.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    The following line rightly shows the correct date time:
    04/04/04 2145
    But the following line fails to show the correct date time:
    04/03/04 2245
    The following line rightly shows the correct date time:
    04/04/04 2345
    But the following line fails to show the correct date time:
    04/04/04 0045
    @PHP/date/bug28599.php: SUCCEEDED
    @PHP/date/bug29150.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2005-06-19 22:00:00
    2005-06-20 00:00:00
    @PHP/date/bug29585.php: SUCCEEDED
    @PHP/date/bug29595.php: SUCCEEDED
    @PHP/date/bug33056.php: SUCCEEDED
    @PHP/date/bug33452.php: SUCCEEDED
    @PHP/date/bug33562.php: SUCCEEDED
    @PHP/date/bug33563.php: SUCCEEDED
    @PHP/date/bug33578.php: SUCCEEDED
    @PHP/date/bug33869.php: SUCCEEDED
    @PHP/date/bug34676.php: SUCCEEDED
    @PHP/date/bug34771.php: SUCCEEDED
    @PHP/date/bug35143.php: SUCCEEDED
    @PHP/date/bug35414.php: SUCCEEDED
    @PHP/date/bug35422.php: SUCCEEDED
    @PHP/date/bug35425.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    integer(42)
    integer(1)
    integer(1)
    integer(1)
    integer(1)
    integer(0)
    integer(0)
    integer(1)
    integer(1)
    integer(31)
    integer(1104537661)
    integer(6)
    integer(53)
    integer(5)
    integer(2005)
    integer(0)
    integer(3600)
    integer(292)
    integer(1)
    integer(1)
    integer(1)
    integer(1)
    integer(0)
    integer(0)
    integer(1)
    integer(1)
    integer(31)
    integer(1104559261)
    integer(6)
    integer(53)
    integer(5)
    integer(2005)
    integer(0)
    integer(-18000)
    @PHP/date/bug35456.php: SUCCEEDED
    @PHP/date/bug35624.php: SUCCEEDED
    @PHP/date/bug35630.php: SUCCEEDED
    @PHP/date/bug35699.php: SUCCEEDED
    @PHP/date/bug35705.php: SUCCEEDED
    @PHP/date/bug35885.php: SUCCEEDED
    @PHP/date/bug35887.php: SUCCEEDED
    @PHP/date/date.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    c: 2003-01-23T13:20:59+01:00
    r: Thu, 23 Jan 2003 13:20:59 +0100
    c: 2003-01-23T13:20:59+01:00
    r: Thu, 23 Jan 2003 13:20:59 +0100
    c: 2003-01-23T12:20:59+00:00
    r: Thu, 23 Jan 2003 12:20:59 +0000
    c: 2003-01-23T13:20:59+01:00
    r: Thu, 23 Jan 2003 13:20:59 +0100
    @PHP/date/date_create-1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\date\__input.txt on line 28
    SKIP
    @PHP/date/date_create-2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\date\__input.txt on line 6
    SKIP
    @PHP/date/date_default_timezone_get-3.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Europe/Prague
    America/Chicago
    Europe/Rome
    America/Chicago
    @PHP/date/date_modify-1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\date\__input.txt on line 6
    SKIP
    @PHP/date/date_modify-2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\date\__input.txt on line 6
    SKIP
    @PHP/date/default-timezone-1.php: SUCCEEDED
    @PHP/date/default-timezone-2.php: SUCCEEDED
    @PHP/date/format-negative-timestamp.php: SUCCEEDED
    @PHP/date/strtotime.php: SUCCEEDED
    @PHP/date/timezone-configuration.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    1119125744
    1119125744
    1119125744
    1119125744
    1119129344
    1119125744
    @PHP/doc_examples/test001.php: SUCCEEDED
    @PHP/doc_examples/test002.php: SUCCEEDED
    @PHP/doc_examples/test003.php: SUCCEEDED
    @PHP/doc_examples/test004.php: SUCCEEDED
    @PHP/doc_examples/test005.php: SUCCEEDED
    @PHP/doc_examples/test006.php: SUCCEEDED
    @PHP/doc_examples/test007.php: SUCCEEDED
    @PHP/doc_examples/test008.php: SUCCEEDED
    @PHP/doc_examples/test009.php: SUCCEEDED
    @PHP/doc_examples/test010.php: SUCCEEDED
    @PHP/doc_examples/test011.php: SUCCEEDED
    @PHP/doc_examples/test013.php: SUCCEEDED
    @PHP/doc_examples/test014.php: SUCCEEDED
    @PHP/doc_examples/test015.php: SUCCEEDED
    @PHP/doc_examples/test016.php: SUCCEEDED
    @PHP/doc_examples/test017.php: SUCCEEDED
    @PHP/doc_examples/test018.php: SUCCEEDED
    @PHP/doc_examples/test019.php: SUCCEEDED
    @PHP/doc_examples/test020.php: SUCCEEDED
    @PHP/doc_examples/test021.php: SUCCEEDED
    @PHP/doc_examples/test022.php: SUCCEEDED
    @PHP/doc_examples/test023.php: SUCCEEDED
    @PHP/doc_examples/test024.php: SUCCEEDED
    @PHP/doc_examples/test025.php: SUCCEEDED
    @PHP/doc_examples/test026.php: SUCCEEDED
    @PHP/doc_examples/test027.php: SUCCEEDED
    @PHP/doc_examples/test028.php: SUCCEEDED
    @PHP/doc_examples/test029.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ´┐Żauky
    �auky
    @PHP/doc_examples/test030.php: SUCCEEDED
    @PHP/doc_examples/test031.php: SUCCEEDED
    @PHP/doc_examples/test032.php: SUCCEEDED
    @PHP/doc_examples/test033.php: SUCCEEDED
    @PHP/doc_examples/test034.php: SUCCEEDED
    @PHP/doc_examples/test035.php: SUCCEEDED
    @PHP/doc_examples/test036.php: SUCCEEDED
    @PHP/doc_examples/test037.php: SUCCEEDED
    @PHP/doc_examples/test038.php: SUCCEEDED
    @PHP/doc_examples/test039.php: SUCCEEDED
    @PHP/doc_examples/test040.php: SUCCEEDED
    @PHP/doc_examples/test041.php: SUCCEEDED
    @PHP/doc_examples/test042.php: SUCCEEDED
    @PHP/doc_examples/test043.php: SUCCEEDED
    @PHP/doc_examples/test044.php: SUCCEEDED
    @PHP/doc_examples/test045.php: SUCCEEDED
    @PHP/doc_examples/test046.php: SUCCEEDED
    @PHP/doc_examples/test047.php: SUCCEEDED
    @PHP/doc_examples/test048.php: SUCCEEDED
    @PHP/doc_examples/test049.php: SUCCEEDED
    @PHP/doc_examples/test050.php: SUCCEEDED
    @PHP/doc_examples/test051.php: SUCCEEDED
    @PHP/doc_examples/test052.php: SUCCEEDED
    @PHP/doc_examples/test053.php: SUCCEEDED
    @PHP/doc_examples/test054.php: SUCCEEDED
    @PHP/doc_examples/test055.php: SUCCEEDED
    @PHP/doc_examples/test056.php: SUCCEEDED
    @PHP/doc_examples/test057.php: SUCCEEDED
    @PHP/doc_examples/test058.php: SUCCEEDED
    @PHP/doc_examples/test059.php: SUCCEEDED
    @PHP/doc_examples/test060.php: SUCCEEDED
    @PHP/doc_examples/test061.php: SUCCEEDED
    @PHP/doc_examples/test062.php: SUCCEEDED
    @PHP/doc_examples/test063.php: SUCCEEDED
    @PHP/doc_examples/test064.php: SUCCEEDED
    @PHP/doc_examples/test065.php: SUCCEEDED
    @PHP/doc_examples/test066.php: SUCCEEDED
    @PHP/doc_examples/test067.php: SUCCEEDED
    @PHP/doc_examples/test068.php: SUCCEEDED
    @PHP/doc_examples/test069.php: SUCCEEDED
    @PHP/doc_examples/test070.php: SUCCEEDED
    @PHP/doc_examples/test071.php: SUCCEEDED
    @PHP/doc_examples/test072.php: SUCCEEDED
    @PHP/doc_examples/test073.php: SUCCEEDED
    @PHP/doc_examples/test074.php: SUCCEEDED
    @PHP/doc_examples/test075.php: SUCCEEDED
    @PHP/doc_examples/test076.php: SUCCEEDED
    @PHP/doc_examples/test077.php: SUCCEEDED
    @PHP/doc_examples/test078.php: SUCCEEDED
    @PHP/doc_examples/test079.php: SUCCEEDED
    @PHP/doc_examples/test080.php: SUCCEEDED
    @PHP/doc_examples/test081.php: SUCCEEDED
    @PHP/doc_examples/test082.php: SUCCEEDED
    @PHP/doc_examples/test083.php: SUCCEEDED
    @PHP/doc_examples/test084.php: SUCCEEDED
    @PHP/doc_examples/test085.php: SUCCEEDED
    @PHP/doc_examples/test086.php: SUCCEEDED
    @PHP/doc_examples/test087.php: SUCCEEDED
    @PHP/doc_examples/test088.php: SUCCEEDED
    @PHP/doc_examples/test089.php: SUCCEEDED
    @PHP/doc_examples/test090.php: SUCCEEDED
    @PHP/doc_examples/test091.php: SUCCEEDED
    @PHP/doc_examples/test092.php: SUCCEEDED
    @PHP/doc_examples/test093.php: SUCCEEDED
    @PHP/doc_examples/test094.php: SUCCEEDED
    @PHP/doc_examples/test095.php: SUCCEEDED
    @PHP/doc_examples/test096.php: SUCCEEDED
    @PHP/doc_examples/test097.php: SUCCEEDED
    @PHP/doc_examples/test098.php: SUCCEEDED
    @PHP/doc_examples/test099.php: SUCCEEDED
    @PHP/doc_examples/test100.php: SUCCEEDED
    @PHP/doc_examples/test102.php: SUCCEEDED
    @PHP/doc_examples/test103.php: SUCCEEDED
    @PHP/doc_examples/test104.php: SUCCEEDED
    @PHP/doc_examples/test105.php: SUCCEEDED
    @PHP/doc_examples/test107.php: SUCCEEDED
    @PHP/doc_examples/test108.php: SUCCEEDED
    @PHP/doc_examples/test109.php: SUCCEEDED
    @PHP/doc_examples/test110.php: SUCCEEDED
    @PHP/doc_examples/test111.php: SUCCEEDED
    @PHP/doc_examples/test112.php: SUCCEEDED
    @PHP/doc_examples/test113.php: SUCCEEDED
    @PHP/doc_examples/test114.php: SUCCEEDED
    @PHP/doc_examples/test115.php: SUCCEEDED
    @PHP/doc_examples/test116.php: SUCCEEDED
    @PHP/doc_examples/test117.php: SUCCEEDED
    @PHP/doc_examples/test118.php: SUCCEEDED
    @PHP/doc_examples/test119.php: SUCCEEDED
    @PHP/doc_examples/test120.php: SUCCEEDED
    @PHP/doc_examples/test121.php: SUCCEEDED
    @PHP/doc_examples/test122.php: SUCCEEDED
    @PHP/doc_examples/test123.php: SUCCEEDED
    @PHP/doc_examples/test124.php: SUCCEEDED
    @PHP/doc_examples/test125.php: SUCCEEDED
    @PHP/doc_examples/test126.php: SUCCEEDED
    @PHP/doc_examples/test127.php: SUCCEEDED
    @PHP/doc_examples/test128.php: SUCCEEDED
    @PHP/doc_examples/test129.php: SUCCEEDED
    @PHP/doc_examples/test130.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    Deprecated: Assigning the return value of new by reference is deprecated in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\doc_examples\__input.txt on line 32
    <br />set in constructor<br />set in constructor<br />set in constructor<br />set in constructor<br />set in constructor<br />set in constructor<br />set from outside<br />set from outside<br />set from outside<br />set from outside
    <br />set in constructor<br />set in constructor<br />set in constructor<br />set in constructor<br />set in constructor<br />set in constructor<br />set from outside<br />set from outside<br />set from outside<br />set from outside
    D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\doc_examples\__input.txt(32,1): warning PHP0181: Assigning the return value of new by reference is deprecated
    
    @PHP/doc_examples/test131.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    Deprecated: Assigning the return value of new by reference is deprecated in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\doc_examples\__input.txt on line 31
    <br />class A: 10<br />class B: 10<br />class B: 10<br />class A: 11<br />class B: 11<br />class B: 11
    <br />class A: 10<br />class B: 10<br />class B: 10<br />class A: 11<br />class B: 11<br />class B: 11
    D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\doc_examples\__input.txt(31,1): warning PHP0181: Assigning the return value of new by reference is deprecated
    
    @PHP/doc_examples/test132.php: SUCCEEDED
    @PHP/doc_examples/test133.php: SUCCEEDED
    @PHP/doc_examples/test134.php: SUCCEEDED
    @PHP/doc_examples/test136.php: SUCCEEDED
    @PHP/doc_examples/test137.php: SUCCEEDED
    @PHP/doc_examples/test138.php: SUCCEEDED
    @PHP/doc_examples/test139.php: SUCCEEDED
    @PHP/doc_examples/test148.php: SUCCEEDED
    @PHP/doc_examples/test149.php: SUCCEEDED
    @PHP/doc_examples/test150.php: SUCCEEDED
    @PHP/doc_examples/test151.php: SUCCEEDED
    @PHP/doc_examples/test152.php: SUCCEEDED
    @PHP/doc_examples/test153.php: SUCCEEDED
    @PHP/doc_examples/test154.php: SUCCEEDED
    @PHP/doc_examples/test155.php: SUCCEEDED
    @PHP/doc_examples/test156.php: SUCCEEDED
    @PHP/doc_examples/test158.php: SUCCEEDED
    @PHP/lang/001.php: SUCCEEDED
    @PHP/lang/002.php: SUCCEEDED
    @PHP/lang/003.php: SUCCEEDED
    @PHP/lang/004.php: SUCCEEDED
    @PHP/lang/005.php: SUCCEEDED
    @PHP/lang/006.php: SUCCEEDED
    @PHP/lang/007.php: SUCCEEDED
    @PHP/lang/008.php: SUCCEEDED
    @PHP/lang/009.php: SUCCEEDED
    @PHP/lang/010.php: SUCCEEDED
    @PHP/lang/011.php: SUCCEEDED
    @PHP/lang/012.php: SUCCEEDED
    @PHP/lang/013.php: SUCCEEDED
    @PHP/lang/014.php: SUCCEEDED
    @PHP/lang/015.php: SUCCEEDED
    @PHP/lang/016.php: SUCCEEDED
    @PHP/lang/017.php: SUCCEEDED
    @PHP/lang/018.php: SUCCEEDED
    @PHP/lang/019.php: SUCCEEDED
    @PHP/lang/020.php: SUCCEEDED
    @PHP/lang/021.php: SUCCEEDED
    @PHP/lang/022.php: SUCCEEDED
    @PHP/lang/023.php: SUCCEEDED
    @PHP/lang/024.php: SUCCEEDED
    @PHP/lang/025.php: SUCCEEDED
    @PHP/lang/026.php: SUCCEEDED
    @PHP/lang/027.php: SUCCEEDED
    @PHP/lang/028.php: SUCCEEDED
    @PHP/lang/030.php: SUCCEEDED
    @PHP/lang/032.php: SUCCEEDED
    @PHP/lang/036.php: SUCCEEDED
    @PHP/lang/037.php: SUCCEEDED
    @PHP/lang/038.php: SUCCEEDED
    @PHP/lang/039.php: SUCCEEDED
    @PHP/lang/040.php: SUCCEEDED
    @PHP/lang/bison1.php: SUCCEEDED
    @PHP/lang/bug17115.php: SUCCEEDED
    @PHP/lang/bug18872.php: SUCCEEDED
    @PHP/lang/bug19943.php: SUCCEEDED
    @PHP/lang/bug20175.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    Deprecated: Assigning the return value of new by reference is deprecated in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\lang\__input.txt on line 110
    foo_static()
    foo_global()
    foo:1
    foo_static()
    foo:1
    bar_static()
    bar_global()
    bar:1
    bar_static()
    bar:1
    wow_static()
    wow_global()
    wow:1
    wow_static()
    wow:1
    oop_test()
    oop_static()
    oop_class()
    oop:1
    oop_static()
    oop:1
    oop_test()
    oop_static()
    oop:1
    foo_static()
    foo_global()
    foo:1
    foo_static()
    foo:1
    bar_static()
    bar_global()
    bar:1
    bar_static()
    bar_global()
    bar:2
    wow_static()
    wow_global()
    wow:1
    wow_static()
    wow:1
    oop_test()
    oop_static()
    oop_class()
    oop:1
    oop_static()
    oop:1
    oop_test()
    oop_static()
    oop:1
    D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\lang\__input.txt(110,4): warning PHP0181: Assigning the return value of new by reference is deprecated
    
    @PHP/lang/bug21094.php: SUCCEEDED
    @PHP/lang/bug21600.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Strict Standards: Only variables should be assigned by reference in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\lang\__input.txt on line 5
    array
    {
      'foo' => 'test'
    }
    
    Strict Standards: Only variables should be assigned by reference in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\lang\__input.txt on line 12
    array
    {
      'foo' => 'test'
    }
    array
    {
      'foo' => 'test'
    }
    array
    {
      'foo' => 'test'
    }
    @PHP/lang/bug21669.php: SUCCEEDED
    @PHP/lang/bug21849.php: SUCCEEDED
    @PHP/lang/bug21961.php: SUCCEEDED
    @PHP/lang/bug22231.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    Deprecated: Assigning the return value of new by reference is deprecated in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\lang\__input.txt on line 10
    object
    {
      'fubar' => 'fubar'
    }
    'fubar'
    'fubar'
    object
    {
      'fubar' => 'fubar'
    }
    'fubar'
    'fubar'
    object
    {
      'fubar' => 'fubar'
    }
    'fubar'
    'fubar'
    object
    {
      'fubar' => 'fubar'
    }
    'fubar'
    'fubar'
    D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\lang\__input.txt(10,5): warning PHP0181: Assigning the return value of new by reference is deprecated
    
    @PHP/lang/bug22367.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    Strict Standards: Declaration of bar::a() should be compatible with that of foo::a() in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\lang\__input.txt on line 47
    integer(5)
    FALSE
    FALSE
    array
    {
      0 => integer(0)
      1 => integer(1)
      2 => integer(2)
      3 => integer(3)
      4 => integer(4)
    }
    array
    {
      0 => integer(0)
      1 => integer(1)
      2 => integer(2)
      3 => integer(3)
      4 => integer(4)
    }
    integer(2)
    TRUE
    TRUE
    array
    {
      0 => integer(0)
      1 => integer(1)
      2 => integer(2)
      3 => integer(3)
      4 => integer(4)
    }
    array
    {
      0 => integer(0)
      1 => integer(1)
      2 => integer(2)
      3 => integer(3)
      4 => integer(4)
    }
    integer(5)
    FALSE
    FALSE
    array
    {
      0 => integer(0)
      1 => integer(1)
      2 => integer(2)
      3 => integer(3)
      4 => integer(4)
    }
    array
    {
      0 => integer(0)
      1 => integer(1)
      2 => integer(2)
      3 => integer(3)
      4 => integer(4)
    }
    integer(2)
    TRUE
    TRUE
    array
    {
      0 => integer(0)
      1 => integer(1)
      2 => integer(2)
      3 => integer(3)
      4 => integer(4)
    }
    array
    {
      0 => integer(0)
      1 => integer(1)
      2 => integer(2)
      3 => integer(3)
      4 => integer(4)
    }
    D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\lang\__input.txt(41,12): warning PHP0180: Declaration of bar::a() should be compatible with that of foo::a()
    
    @PHP/lang/bug22510.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    Deprecated: Assigning the return value of new by reference is deprecated in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\lang\__input.txt on line 77
    ok1
    bar::run1
    foo::method1
    foo::method1
    foo::finalize
    done!
    ok2
    bar::run2
    foo::method2
    foo::method2
    foo::finalize
    done!
    ok3
    bar::run3
    foo::method3
    foo::method3
    foo::finalize
    done!
    ouch
    bar::run1
    foo::method1
    foo::method1
    foo::finalize
    I'm alive!
    ok1
    bar::run1
    foo::method1
    foo::method1
    foo::finalize
    done!
    ok2
    bar::run2
    foo::method2
    foo::method2
    foo::finalize
    done!
    ok3
    bar::run3
    foo::method3
    foo::method3
    foo::finalize
    done!
    ouch
    bar::run1
    foo::method1
    foo::method1
    foo::finalize
    I'm alive!
    D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\lang\__input.txt(77,1): warning PHP0181: Assigning the return value of new by reference is deprecated
    
    @PHP/lang/bug22592.php: SUCCEEDED
    @PHP/lang/bug22690.php: SUCCEEDED
    @PHP/lang/bug23279.php: SUCCEEDED
    @PHP/lang/bug23384.php: SUCCEEDED
    @PHP/lang/bug23489.php: SUCCEEDED
    @PHP/lang/bug23524.php: SUCCEEDED
    @PHP/lang/bug23922.php: SUCCEEDED
    @PHP/lang/bug24054.php: SUCCEEDED
    @PHP/lang/bug24396.php: SUCCEEDED
    @PHP/lang/bug24403.php: SUCCEEDED
    @PHP/lang/bug24436.php: SUCCEEDED
    @PHP/lang/bug24499.php: SUCCEEDED
    @PHP/lang/bug24640.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    double(1700000000000000089258092433847514422797596587883870563356951996370064178581143932836831337636761368874297554515902592900802289500112731978596146714137401870842258241575178866354311397451139753100927220499450359906637902366244989496126909662726242240784739940994096632824796638102733857671280980918272.0000000000)
    1.7E+300
    
    ------
    double(0.0000000000)
    1.7E-300
    
    ------
    double(17000000000000001584208052028780237480128823455860622330108867175329927830437888.0000000000)
    1.7E+79
    
    ------
    double(0.0000000000)
    1.7E-79
    
    ------
    double(169999999999999996096025832433329868941658043870400163508258284150340918121070592.0000000000)
    1.7E+80
    
    ------
    double(0.0000000000)
    1.7E-80
    
    ------
    double(1700000000000000013616404158611892038375594280539217794530130541777964808366194688.0000000000)
    1.7E+81
    
    ------
    double(0.0000000000)
    1.7E-81
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    1.6999810742106E-319
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    1.7000798873397E-320
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    1.6995858216939E-321
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    0
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    0
    
    ------
    double(1700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+300
    
    ------
    double(0.0000000000)
    1.70000000000003E-300
    
    ------
    double(17000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+79
    
    ------
    double(0.0000000000)
    1.70000000000001E-79
    
    ------
    double(170000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+80
    
    ------
    double(0.0000000000)
    1.70000000000001E-80
    
    ------
    double(1700000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+81
    
    ------
    double(0.0000000000)
    1.70000000000001E-81
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    1.69998107421056E-319
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    1.70007988733973E-320
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    1.69464516523548E-321
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    0
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    0
    
    ------
    @PHP/lang/bug24652.php: SUCCEEDED
    @PHP/lang/bug24658.php: SUCCEEDED
    @PHP/lang/bug24783.php: SUCCEEDED
    @PHP/lang/bug24926.php: SUCCEEDED
    @PHP/lang/bug25547.php: SUCCEEDED
    @PHP/lang/bug25652.php: SUCCEEDED
    @PHP/lang/bug25922.php: SUCCEEDED
    @PHP/lang/bug26182.php: SUCCEEDED
    @PHP/lang/bug26696.php: SUCCEEDED
    @PHP/lang/bug26866.php: SUCCEEDED
    @PHP/lang/bug26869.php: SUCCEEDED
    @PHP/lang/bug27354.php: SUCCEEDED
    @PHP/lang/bug27439.php: SUCCEEDED
    @PHP/lang/bug27535.php: SUCCEEDED
    @PHP/lang/bug28213.php: SUCCEEDED
    @PHP/lang/bug28800.php: SUCCEEDED
    @PHP/lang/bug29566.php: SUCCEEDED
    @PHP/lang/bug29893.php: SUCCEEDED
    @PHP/lang/bug29944.php: SUCCEEDED
    @PHP/lang/bug30638.php: SUCCEEDED
    @PHP/lang/bug30726.php: SUCCEEDED
    @PHP/lang/bug30862.php: SUCCEEDED
    @PHP/lang/bug32924.php: SUCCEEDED
    @PHP/lang/bug35382.php: SUCCEEDED
    @PHP/lang/bug7515.php: SUCCEEDED
    @PHP/lang/each_binary_safety.php: SUCCEEDED
    @PHP/lang/error_2_exception_001.php: SUCCEEDED
    @PHP/lang/foreach_with_object_001.php: SUCCEEDED
    @PHP/lang/foreach_with_references_001.php: SUCCEEDED
    @PHP/lang/type_hints_001.php: SUCCEEDED
    @PHP/standard/array/001.php: SUCCEEDED
    @PHP/standard/array/003.php: SUCCEEDED
    @PHP/standard/array/004.php: SUCCEEDED
    @PHP/standard/array/005.php: SUCCEEDED
    @PHP/standard/array/008.php: SUCCEEDED
    @PHP/standard/array/array_change_key_case.php: SUCCEEDED
    @PHP/standard/array/array_chunk.php: SUCCEEDED
    @PHP/standard/array/array_count_values.php: SUCCEEDED
    @PHP/standard/array/array_diff_1.php: SUCCEEDED
    @PHP/standard/array/array_diff_key.php: SUCCEEDED
    @PHP/standard/array/array_intersect_key.php: SUCCEEDED
    @PHP/standard/array/array_sum.php: SUCCEEDED
    @PHP/standard/array/array_walk_recursive.php: SUCCEEDED
    @PHP/standard/array/bug12776.php: SUCCEEDED
    @PHP/standard/array/bug14580.php: SUCCEEDED
    @PHP/standard/array/bug20381.php: SUCCEEDED
    @PHP/standard/array/bug20865.php: SUCCEEDED
    @PHP/standard/array/bug21182.php: SUCCEEDED
    @PHP/standard/array/bug21918.php: SUCCEEDED
    @PHP/standard/array/bug21998.php: SUCCEEDED
    @PHP/standard/array/bug22088.php: SUCCEEDED
    @PHP/standard/array/bug22463.php: SUCCEEDED
    @PHP/standard/array/bug23581.php: SUCCEEDED
    @PHP/standard/array/bug23788.php: SUCCEEDED
    @PHP/standard/array/bug24198.php: SUCCEEDED
    @PHP/standard/array/bug24220.php: SUCCEEDED
    @PHP/standard/array/bug24766.php: SUCCEEDED
    @PHP/standard/array/bug24897.php: SUCCEEDED
    @PHP/standard/array/bug24980.php: SUCCEEDED
    @PHP/standard/array/bug25359.php: SUCCEEDED
    @PHP/standard/array/bug25708.php: SUCCEEDED
    @PHP/standard/array/bug25758.php: SUCCEEDED
    @PHP/standard/array/bug26458.php: SUCCEEDED
    @PHP/standard/array/bug28974.php: SUCCEEDED
    @PHP/standard/array/bug29493.php: SUCCEEDED
    @PHP/standard/array/bug30266.php: SUCCEEDED
    @PHP/standard/array/bug30833.php: SUCCEEDED
    @PHP/standard/array/bug31158.php: SUCCEEDED
    @PHP/standard/array/bug31213.php: SUCCEEDED
    @PHP/standard/array/bug32021.php: SUCCEEDED
    @PHP/standard/array/bug33382.php: SUCCEEDED
    @PHP/standard/array/bug33989.php: SUCCEEDED
    @PHP/standard/array/bug34227.php: SUCCEEDED
    @PHP/standard/array/bug34982.php: SUCCEEDED
    @PHP/standard/array/bug35014.php: SUCCEEDED
    @PHP/standard/array/bug35022.php: SUCCEEDED
    @PHP/standard/array/bug35821.php: SUCCEEDED
    @PHP/standard/array/count_recursive.php: SUCCEEDED
    @PHP/standard/array/locale_sort.php: SUCCEEDED
    @PHP/standard/array/range.php: SUCCEEDED
    @PHP/standard/assert/assert.php: SUCCEEDED
    @PHP/standard/general_functions/001.php: SUCCEEDED
    @PHP/standard/general_functions/002.php: SUCCEEDED
    @PHP/standard/general_functions/003.php: SUCCEEDED
    @PHP/standard/general_functions/004.php: SUCCEEDED
    @PHP/standard/general_functions/005.php: SUCCEEDED
    @PHP/standard/general_functions/006.php: SUCCEEDED
    @PHP/standard/general_functions/007.php: SUCCEEDED
    @PHP/standard/general_functions/009.php: SUCCEEDED
    @PHP/standard/general_functions/bug25038.php: SUCCEEDED
    @PHP/standard/general_functions/bug27678.php: SUCCEEDED
    @PHP/standard/general_functions/bug29038.php: SUCCEEDED
    @PHP/standard/general_functions/bug31190.php: SUCCEEDED
    @PHP/standard/general_functions/bug32647.php: SUCCEEDED
    @PHP/standard/general_functions/bug35229.php: SUCCEEDED
    @PHP/standard/general_functions/is_resource.php: SUCCEEDED
    @PHP/standard/math/abs.php: SUCCEEDED
    @PHP/standard/math/bug24142.php: SUCCEEDED
    @PHP/standard/math/bug25694.php: SUCCEEDED
    @PHP/standard/math/bug27646.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    double(INF-INF)
    'd:-INF;'
    double(INF-INF)
    double(INF-INF)
    'd:INF;'
    double(INF-INF)
    double(NaNInfini)
    'd:NAN;'
    double(NaNInfini)
    double(-Infinity)
    'd:-INF;'
    double(-Infinity)
    double(Infinity)
    'd:INF;'
    double(Infinity)
    double(NaN)
    'd:NAN;'
    double(NaN)
    @PHP/standard/math/bug30069.php: SUCCEEDED
    @PHP/standard/math/bug30695.php: SUCCEEDED
    @PHP/standard/math/floorceil.php: SUCCEEDED
    @PHP/standard/math/hexdec.php: SUCCEEDED
    @PHP/standard/math/log.php: SUCCEEDED
    @PHP/standard/math/pow.php: SUCCEEDED
    @PHP/standard/math/round.php: SUCCEEDED
    @PHP/standard/reg/001.php: SUCCEEDED
    @PHP/standard/reg/002.php: SUCCEEDED
    @PHP/standard/reg/003.php: SUCCEEDED
    @PHP/standard/reg/004.php: SUCCEEDED
    @PHP/standard/reg/005.php: SUCCEEDED
    @PHP/standard/reg/006.php: SUCCEEDED
    @PHP/standard/reg/007.php: SUCCEEDED
    @PHP/standard/reg/008.php: SUCCEEDED
    @PHP/standard/reg/009.php: SUCCEEDED
    @PHP/standard/reg/010.php: SUCCEEDED
    @PHP/standard/reg/011.php: SUCCEEDED
    @PHP/standard/reg/012.php: SUCCEEDED
    @PHP/standard/reg/013.php: SUCCEEDED
    @PHP/standard/reg/014.php: SUCCEEDED
    @PHP/standard/reg/015.php: SUCCEEDED
    @PHP/standard/reg/016.php: SUCCEEDED
    @PHP/standard/serialize/001.php: SUCCEEDED
    @PHP/standard/serialize/002.php: SUCCEEDED
    @PHP/standard/serialize/003.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    d:100;
    double(100.0000000000)
    
    d:51999999999999996980101120;
    double(51999999999999996980101120.0000000000)
    
    d:8.9999999999999995265585574287341141808127531476202420890331268310546875E-9;
    double(0.0000000090)
    d:100;
    double(100.0000000000)
    
    d:5.2000000000000006E+25;
    double(52000000000000000000000000.0000000000)
    
    d:9.0000000000000045E-09;
    double(0.0000000090)
    @PHP/standard/serialize/004.php: SUCCEEDED
    @PHP/standard/serialize/005.php: SUCCEEDED
    @PHP/standard/serialize/006.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    'O:3:"´┐Ż":1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    object
    {
      '´┐Ż' => '´┐Ż'
    }
    'a:1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    array
    {
      '´┐Ż' => '´┐Ż'
    }
    'O:3:"´┐Ż":1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    object
    {
      'ďż˝' => 'ďż˝'
    }
    'a:1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    array
    {
      'ďż˝' => 'ďż˝'
    }
    @PHP/standard/serialize/bug14293.php: SUCCEEDED
    @PHP/standard/serialize/bug21957.php: SUCCEEDED
    @PHP/standard/serialize/bug23298.php: SUCCEEDED
    @PHP/standard/serialize/bug24063.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0.1 0.1
    0.01 0.01
    0.001 0.001
    0.0001 0.0001
    1.0E-5 1.0E-5
    1.0E-6 1.0E-6
    1.0E-7 1.0E-7
    1.0E-8 1.0E-8
    1.0E-9 1.0E-9
    0.1 0.1
    0.01 0.01
    0.001 0.001
    0.0001 0.0001
    1E-05 1E-05
    1E-06 1E-06
    1E-07 1E-07
    1E-08 1E-08
    1E-09 1E-09
    @PHP/standard/serialize/bug25378.php: SUCCEEDED
    @PHP/standard/serialize/bug26762.php: SUCCEEDED
    @PHP/standard/serialize/bug27469.php: SUCCEEDED
    @PHP/standard/serialize/bug28325.php: SUCCEEDED
    @PHP/standard/serialize/bug30234.php: SUCCEEDED
    @PHP/standard/serialize/bug31402.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    Deprecated: Assigning the return value of new by reference is deprecated in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\standard\serialize\__input.txt on line 19
    object
    {
      'A' => 
      array
      {
        1 => 
        object
        {
          'i' => integer(1)
        }
        2 => 
        object
        {
          'i' => integer(2)
        }
        3 => 
        object
        {
          'i' => integer(2)
        }
      }
      'B' => 
      object
      {
        'i' => integer(1)
      }
    }
    object
    {
      'A' => 
      array
      {
        1 => 
        object
        {
          'i' => integer(1)
        }
        2 => 
        object
        {
          'i' => integer(2)
        }
        3 => 
        object
        {
          'i' => integer(2)
        }
      }
      'B' => 
      object
      {
        'i' => integer(1)
      }
    }
    D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\standard\serialize\__input.txt(19,5): warning PHP0181: Assigning the return value of new by reference is deprecated
    
    @PHP/standard/serialize/bug31442.php: SUCCEEDED
    @PHP/standard/strings/add-and-stripcslashes.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    kaboemkara!
    foo\b\a\r\b\az
    \f\o\o\[ \]
    \zoo['\.']
    \abcd\e\f\g\h\i\j\k\l\m\n\o\pqrstuvwxy\z
    1
    5d
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\standard\strings\__input.txt at expression on line 3, column 1.
    
    kaboemkara!
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\standard\strings\__input.txt at expression on line 5, column 1.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\standard\strings\__input.txt at expression on line 6, column 1.
    
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\standard\strings\__input.txt at expression on line 8, column 1.
    
    1
    5d
    @PHP/standard/strings/add-and-stripslashes.php: SUCCEEDED
    @PHP/standard/strings/basename.php: SUCCEEDED
    @PHP/standard/strings/bin2hex.php: SUCCEEDED
    @PHP/standard/strings/bug20108.php: SUCCEEDED
    @PHP/standard/strings/bug20169.php: SUCCEEDED
    @PHP/standard/strings/bug20261.php: SUCCEEDED
    @PHP/standard/strings/bug20927.php: SUCCEEDED
    @PHP/standard/strings/bug21338.php: SUCCEEDED
    @PHP/standard/strings/bug21453.php: SUCCEEDED
    @PHP/standard/strings/bug21730.php: SUCCEEDED
    @PHP/standard/strings/bug21744.php: SUCCEEDED
    @PHP/standard/strings/bug22008.php: SUCCEEDED
    @PHP/standard/strings/bug22187.php: SUCCEEDED
    @PHP/standard/strings/bug22224.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      0 => 
      object
      {
      }
      1 => 
      object
      {
      }
    }
    @PHP/standard/strings/bug22227.php: SUCCEEDED
    @PHP/standard/strings/bug22904.php: SUCCEEDED
    @PHP/standard/strings/bug23650.php: SUCCEEDED
    @PHP/standard/strings/bug23894.php: SUCCEEDED
    @PHP/standard/strings/bug24098.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      'dirname' => '\'
      'basename' => 'dsds.asa'
      'extension' => 'asa'
      'filename' => 'dsds'
    }
    array
    {
      'dirname' => '\'
      'basename' => 'dsds.asa'
      'extension' => 'asa'
    }
    @PHP/standard/strings/bug24208.php: SUCCEEDED
    @PHP/standard/strings/bug24281.php: SUCCEEDED
    @PHP/standard/strings/bug25671.php: SUCCEEDED
    @PHP/standard/strings/bug25707.php: SUCCEEDED
    @PHP/standard/strings/bug26878.php: SUCCEEDED
    @PHP/standard/strings/bug26973.php: SUCCEEDED
    @PHP/standard/strings/bug27276.php: SUCCEEDED
    @PHP/standard/strings/bug27278.php: SUCCEEDED
    @PHP/standard/strings/bug27295.php: SUCCEEDED
    @PHP/standard/strings/bug27457.php: SUCCEEDED
    @PHP/standard/strings/bug27675.php: SUCCEEDED
    @PHP/standard/strings/bug28386.php: SUCCEEDED
    @PHP/standard/strings/bug33076.php: SUCCEEDED
    @PHP/standard/strings/chr_ord.php: SUCCEEDED
    @PHP/standard/strings/chunk_split.php: SUCCEEDED
    @PHP/standard/strings/count_chars.php: SUCCEEDED
    @PHP/standard/strings/crc32.php: SUCCEEDED
    @PHP/standard/strings/explode.php: SUCCEEDED
    @PHP/standard/strings/implode.php: SUCCEEDED
    @PHP/standard/strings/md5.php: SUCCEEDED
    @PHP/standard/strings/md5raw.php: SUCCEEDED
    @PHP/standard/strings/nl2br.php: SUCCEEDED
    @PHP/standard/strings/sha1.php: SUCCEEDED
    @PHP/standard/strings/sha1raw.php: SUCCEEDED
    @PHP/standard/strings/sprintf_f.php: SUCCEEDED
    @PHP/standard/strings/strcspn.php: SUCCEEDED
    @PHP/standard/strings/strings001.php: SUCCEEDED
    @PHP/standard/strings/strpos.php: SUCCEEDED
    @PHP/standard/strings/strrev.php: SUCCEEDED
    @PHP/standard/strings/strripos.php: SUCCEEDED
    @PHP/standard/strings/strrpos.php: SUCCEEDED
    @PHP/standard/strings/strspn.php: SUCCEEDED
    @PHP/standard/strings/strstr.php: SUCCEEDED
    @PHP/standard/strings/strtoupper.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    cfbfbdcfbfbdcfbfbd
    cfafbdcfafbdcfafbd
    @PHP/standard/strings/strtr.php: SUCCEEDED
    @PHP/standard/strings/strval.php: SUCCEEDED
    @PHP/standard/strings/str_repeat.php: SUCCEEDED
    @PHP/standard/strings/str_shuffle.php: SUCCEEDED
    @PHP/standard/strings/str_word_count.php: SUCCEEDED
    @PHP/standard/strings/substr_count.php: SUCCEEDED
    @PHP/standard/strings/substr_replace.php: SUCCEEDED
    @PHP/standard/strings/wordwrap.php: SUCCEEDED
    @PHP/standard/time/001.php: SUCCEEDED
    @PHP/standard/time/idate.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    U: 1043324459
    Y: 2003
    z: 22
    y: 3
    m: 1
    n: 1
    d: 23
    j: 23
    H: 13
    G: 13
    h: 1
    g: 1
    i: 20
    s: 59
    t: 31
    w: 4
    L: 0
    B: 556
    I: 0
    W: 4
    U: 1043324459
    Y: 2003
    z: 22
    y: 3
    m: 1
    n: 1
    d: 23
    j: 23
    H: 12
    G: 12
    h: 12
    g: 12
    i: 20
    s: 59
    t: 31
    w: 4
    L: 0
    B: 556
    I: 0
    W: 4
    @PHP/strings/001.php: SUCCEEDED
    @PHP/strings/002.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    fprintf test 1:abcde
    20
    printf test 1:simple string
    printf test 2:42
    printf test 3:3.333333
    printf test 4:3.3333333333
    printf test 5:2.50      
    printf test 6:2.50000000
    printf test 7:0000002.50
    printf test 8:<                 foo>
    printf test 9:<bar                 >
    printf test 10: 123456789012345
    printf test 10:<h´┐Żyesterettsjustitiarius>
    printf test 11: 123456789012345678901234567890
    printf test 11:<    h´┐Żyesterettsjustitiarius>
    printf test 12:-12.34
    printf test 13:  -12
    printf test 14:@
    printf test 15:10101010
    printf test 16:aa
    printf test 17:AA
    printf test 18:        10101010
    printf test 19:              aa
    printf test 20:              AA
    printf test 21:0000000010101010
    printf test 22:00000000000000aa
    printf test 23:00000000000000AA
    printf test 24:abcde
    printf test 25:gazonk
    printf test 26:2 1
    printf test 27:3 1 2
    printf test 28:02  1
    printf test 29:2   1
    printf test 30:x
    vprintf test 1:2   1
    fprintf test 1:abcde
    20
    printf test 1:simple string
    printf test 2:42
    printf test 3:3.333333
    printf test 4:3.3333333333
    printf test 5:2.50      
    printf test 6:2.50000000
    printf test 7:0000002.50
    printf test 8:<                 foo>
    printf test 9:<bar                 >
    printf test 10: 123456789012345
    printf test 10:<h�yesterettsjustitiarius>
    printf test 11: 123456789012345678901234567890
    printf test 11:<    h�yesterettsjustitiarius>
    printf test 12:-12.34
    printf test 13:  -12
    printf test 14:@
    printf test 15:10101010
    printf test 16:aa
    printf test 17:AA
    printf test 18:        10101010
    printf test 19:              aa
    printf test 20:              AA
    printf test 21:0000000010101010
    printf test 22:00000000000000aa
    printf test 23:00000000000000AA
    printf test 24:abcde
    printf test 25:gazonk
    printf test 26:2 1
    printf test 27:3 1 2
    printf test 28:02  1
    printf test 29:2   1
    printf test 30:x
    vprintf test 1:2   1
    @PHP/strings/bug22592.php: SUCCEEDED
    Arrays/array1.php: SUCCEEDED
    Arrays/array_diff_intersect.php: SUCCEEDED
    Arrays/array_diff_intersect2.php: SUCCEEDED
    Arrays/array_diff_intersect3.php: SUCCEEDED
    Arrays/array_map.php: SUCCEEDED
    Arrays/array_merge_recursive.php: SUCCEEDED
    Arrays/array_reduce1.php: SUCCEEDED
    Arrays/array_reduce2.php: SUCCEEDED
    Arrays/array_slice.php: SUCCEEDED
    Arrays/array_sumprod.php: SUCCEEDED
    Arrays/array_unshift.php: SUCCEEDED
    Arrays/array_walk.php: SUCCEEDED
    Arrays/array_walk_recursive.php: SUCCEEDED
    Arrays/multisort.php: SUCCEEDED
    Arrays/optimizations.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    3
    4
    5
    a
    b
    c
    
    Warning: strtolower() expects parameter 1 to be string, array given in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Arrays\__input.txt on line 15
    
    cablo
    3
    4
    5
    a
    b
    c
    array
    cablo
    Arrays/recursion.php: SUCCEEDED
    Arrays/sort.php: SUCCEEDED
    Arrays/usort.php: SUCCEEDED
    Bugs/class_incompletepart.php: SUCCEEDED
    Bugs/division-by-zero.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    DIVISION
    bool(false)
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests2\__input.txt at expression on line 10, column 2.
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests2\__input.txt at expression on line 12, column 2.
    bool(false)
    MODULO
    bool(false)
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests2\__input.txt at expression on line 20, column 2.
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests2\__input.txt at expression on line 22, column 2.
    bool(false)
    DIVISION
    bool(false)
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt at expression on line 10, column 2.
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt at expression on line 12, column 2.
    bool(false)
    MODULO
    bool(false)
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt at expression on line 20, column 2.
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt at expression on line 22, column 2.
    bool(false)
    D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt(6,10): warning PHP0150: Division by zero
    D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt(8,9): warning PHP0150: Division by zero
    D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt(16,10): warning PHP0150: Division by zero
    D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt(18,9): warning PHP0150: Division by zero
    
    Bugs/function-in-unknown-class.php: SUCCEEDED
    Bugs/is_a_null_value.php: SUCCEEDED
    Bugs/preg-named-groups.php: SUCCEEDED
    Bugs/preg-replace-advanced.php: SUCCEEDED
    Bugs/preg-replace-range.php: SUCCEEDED
    Bugs/preg-replace.php: SUCCEEDED
    Bugs/preg-this-dynamic.php: FAILED
    Script hung upNo errorsSuccess
    Expected test outputReal script output
    Bugs/preg-this-dynamic2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    foo: ahoj
    foo: lidi
    foo: rozkladame
    foo: ahoj
    foo: lidi
    foo: rozkladame
    foo: ahoj
    foo: lidi
    foo: rozkladame
    
    Notice: Undefined variable: this.
    
    Error: Call to a member function foo() on a non-object.
    Bugs/preg-this.php: SUCCEEDED
    Bugs/preg-ungreedy-bugs.php: SUCCEEDED
    Bugs/preg-unkn.php: SUCCEEDED
    Compiler/abstracts.php: SUCCEEDED
    Compiler/assignments.php: SUCCEEDED
    Compiler/assign_in_call.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    g1:
    f(x)
    u(x)
    'x'
    
    g2:
    f(x)
    u(x)
    'b'
    
    g3:
    f(x)
    u(x)
    'b'
    
    g4:
    f(x)
    u(x)
    'b'
    
    g5:
    f()
    u()
    integer(1)
    
    g6:
    f(3)
    u(3)
    integer(3)
    
    g7:
    f(2)
    u(10)
    integer(10)
    
    g8:
    f(1)
    f(1)
    f(1)
    u(1)
    u()
    u(1)
    
    g9:
    known:
    __get(p) = 0
    __set(p,1)
    f(1)
    unknown:
    __get(p) = 1
    __set(p,3)
    u(3)
    
    g10:
    Done.
    g1:
    f(x)
    u(x)
    'x'
    
    g2:
    f(x)
    u(x)
    'b'
    
    g3:
    f(x)
    u(x)
    'b'
    
    g4:
    f(x)
    u(x)
    'b'
    
    g5:
    f()
    u()
    integer(1)
    
    g6:
    f(3)
    u(3)
    integer(3)
    
    g7:
    f(2)
    u(10)
    integer(10)
    
    g8:
    f(1)
    f(1)
    f(1)
    u(1)
    u()
    u(1)
    
    g9:
    known:
    __get(p) = 0
    __set(p,1)
    __get(p) = 1
    f(1)
    unknown:
    __get(p) = 1
    __set(p,3)
    __get(p) = 3
    u(3)
    
    g10:
    Done.
    Compiler/auto_globals_001.php: SUCCEEDED
    Compiler/auto_globals_002.php: SUCCEEDED
    Compiler/auto_globals_003.php: SUCCEEDED
    Compiler/break_in_global_code.php: SUCCEEDED
    Compiler/chaining_test.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Hujer
    Strict Standards: Creating default object from empty value in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt at expression on line 8, column 2.
    
    Strict Standards: Creating default object from empty value in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt at expression on line 8, column 2.
    
    Strict Standards: Creating default object from empty value in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt at expression on line 8, column 2.
    
    Strict Standards: Creating default object from empty value in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt at expression on line 8, column 2.
    
    Strict Standards: Creating default object from empty value in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt at expression on line 8, column 2.
    
    Strict Standards: Creating default object from empty value in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt at expression on line 8, column 2.
    
    Strict Standards: Creating default object from empty value in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt at expression on line 9, column 2.
    
    Strict Standards: Creating default object from empty value in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt at expression on line 9, column 2.
    
    Strict Standards: Creating default object from empty value in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt at expression on line 9, column 2.
    
    Strict Standards: Creating default object from empty value in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt at expression on line 9, column 2.
    
    Strict Standards: Creating default object from empty value in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt at expression on line 9, column 2.
    
    Strict Standards: Creating default object from empty value in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt at expression on line 9, column 2.
    Hujer
    Compiler/chain_ending_by_string_index.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        string(1) "f"
      }
    }
    array(1) {
      [0]=>
      string(4) "xubu"
    }
    object(C)#1 (1) {
      ["f"]=>
      string(4) "kuxu"
    }
    string(5) "helxo"
    string(5) "helxo"
    array(1)
    {
      [0] => array(1)
      {
        [0] => string(1) "f"
      }
    }
    array(1)
    {
      [0] => string(4) "bubu"
    }
    
    Warning: A string item used as a reference in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt at expression on line 19, column 1.
    object(C)(1)
    {
      ["f"] => string(4) "kuku"
    }
    
    Warning: A string item used as a reference in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt at expression on line 25, column 1.
    string(5) "hello"
    
    Warning: A string item used as a reference in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt at expression on line 31, column 1.
    string(5) "hello"
    Compiler/continue_in_global_code.php: SUCCEEDED
    Compiler/deep_copy.php: SUCCEEDED
    Compiler/deep_copy_refbox.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Strict Standards: Only variables should be passed by reference in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt on line 42
    array
    {
      0 => integer(1)
    }
    
    Strict Standards: Only variables should be passed by reference in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt on line 45
    array
    {
      0 => integer(1)
    }
    
    Strict Standards: Only variables should be passed by reference in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt on line 49
    array
    {
      0 => integer(1)
    }
    
    Strict Standards: Only variables should be passed by reference in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt on line 52
    array
    {
      0 => integer(1)
    }
    array
    {
      0 => integer(1)
      1 => integer(1)
    }
    array
    {
      0 => integer(1)
      1 => integer(1)
    }
    array
    {
      0 => integer(1)
      1 => integer(1)
    }
    array
    {
      0 => integer(1)
      1 => integer(1)
    }
    Compiler/expr_init.php: SUCCEEDED
    Compiler/foreach1.php: SUCCEEDED
    Compiler/foreach_arrays.php: SUCCEEDED
    Compiler/for_loop.php: SUCCEEDED
    Compiler/function_002.php: SUCCEEDED
    Compiler/function_003.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string(19) "Set in f() function"
    
    Strict Standards: Only variables should be assigned by reference in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt on line 26
    object
    {
      'a' => 
      object
      {
      }
    }
    string(19) "Set in f() function"
    object
    {
      'a' => 
      object
      {
      }
    }
    Compiler/function_004.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string(19) "Set in f() function"
    
    Strict Standards: Only variables should be assigned by reference in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt on line 36
    object
    {
      'a' => 
      object
      {
      }
    }
    Method C->f() return what it gets.
    object
    {
      'a' => 
      object
      {
      }
    }
    object
    {
      'a' => 
      object
      {
      }
    }
    string(19) "Set in f() function"
    object
    {
      'a' => 
      object
      {
      }
    }
    Method C->f() return what it gets.
    object
    {
      'a' => 
      object
      {
      }
    }
    object
    {
      'a' => 
      object
      {
      }
    }
    Compiler/function_call.php: SUCCEEDED
    Compiler/if_statement.php: SUCCEEDED
    Compiler/indirect_001.php: SUCCEEDED
    Compiler/indirect_002.php: SUCCEEDED
    Compiler/indirect_003.php: SUCCEEDED
    Compiler/indirect_004.php: SUCCEEDED
    Compiler/indirect_005.php: SUCCEEDED
    Compiler/indirect_007.php: SUCCEEDED
    Compiler/indirect_global.php: SUCCEEDED
    Compiler/inheritance.php: SUCCEEDED
    Compiler/inheritance2.php: SUCCEEDED
    Compiler/isset_unset_001.php: SUCCEEDED
    Compiler/null_hints.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    NULL
    NULL
    NULL
    NULL
    NULL
    
    Strict Standards: Only variables should be passed by reference in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt on line 36
    NULL
    NULL
    NULL
    NULL
    
    Strict Standards: Only variables should be passed by reference in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt on line 42
    NULL
    NULL
    NULL
    NULL
    NULL
    NULL
    NULL
    NULL
    NULL
    NULL
    NULL
    Compiler/switch.php: SUCCEEDED
    Compiler/ternary_ex.php: SUCCEEDED
    Compiler/typehint_check.php: SUCCEEDED
    Compiler/Inclusions/include2.php: SUCCEEDED
    Compiler/Inclusions/include3.php: SUCCEEDED
    Compiler/Inclusions/include6.php: SUCCEEDED
    Compiler/Inclusions/include_test.php: SUCCEEDED
    Compiler/Inclusions/script.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t01.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t02.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t03.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t04.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t05.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t08.php: SUCCEEDED
    Compiler/PseudoConst/parent.php: SUCCEEDED
    Compiler/PseudoConst/parent2.php: SUCCEEDED
    Compiler/PseudoConst/self.php: SUCCEEDED
    Compiler/PseudoConst/t01.php: SUCCEEDED
    Compiler/PseudoConst/t02.php: SUCCEEDED
    Compiler/PseudoConst/t03.php: SUCCEEDED
    Compiler/PseudoConst/t04.php: SUCCEEDED
    Compiler/PseudoConst/t05.php: SUCCEEDED
    Compiler/PseudoConst/t06.php: SUCCEEDED
    Compiler/PseudoConst/t07.php: SUCCEEDED
    Compiler/PseudoConst/t08.php: SUCCEEDED
    Compiler/PseudoConst/t09.php: SUCCEEDED
    Compiler/PseudoConst/t10.php: SUCCEEDED
    Compiler/PseudoConst/t11.php: SUCCEEDED
    Compiler/PseudoConst/_class_.php: SUCCEEDED
    Compiler/PseudoConst/_function_.php: SUCCEEDED
    Compiler/Unreachable/t13.php: SUCCEEDED
    DateTime/strftime.php: SUCCEEDED
    DateTime/strtotime1.php: SUCCEEDED
    DateTime/strtotime2.php: SUCCEEDED
    DateTime/strtotime3.php: SUCCEEDED
    DateTime/strtotime4.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0: 00:00:00 01/01/2005
    1: 01:00:00 01/01/2005
    2: 02:00:00 01/01/2005
    3: 03:00:00 01/01/2005
    4: 04:00:00 01/01/2005
    5: 05:00:00 01/01/2005
    6: 06:00:00 01/01/2005
    7: 07:00:00 01/01/2005
    8: 08:00:00 01/01/2005
    9: 09:00:00 01/01/2005
    10: 10:00:00 01/01/2005
    11: 11:00:00 01/01/2005
    12: 12:00:00 01/01/2005
    13: 13:00:00 01/01/2005
    14: 14:00:00 01/01/2005
    15: 15:00:00 01/01/2005
    16: 16:00:00 01/01/2005
    17: 17:00:00 01/01/2005
    18: 18:00:00 01/01/2005
    19: 19:00:00 01/01/2005
    20: 20:00:00 01/01/2005
    21: 21:00:00 01/01/2005
    22: 22:00:00 01/01/2005
    23: 23:00:00 01/01/2005
    24: 00:00:00 01/02/2005
    0am: error
    1am: 01:00:00 01/01/2005
    2am: 02:00:00 01/01/2005
    3am: 03:00:00 01/01/2005
    4am: 04:00:00 01/01/2005
    5am: 05:00:00 01/01/2005
    6am: 06:00:00 01/01/2005
    7am: 07:00:00 01/01/2005
    8am: 08:00:00 01/01/2005
    9am: 09:00:00 01/01/2005
    10am: 10:00:00 01/01/2005
    11am: 11:00:00 01/01/2005
    12am: 00:00:00 01/01/2005
    13am: error
    14am: error
    15am: error
    16am: error
    17am: error
    18am: error
    19am: error
    20am: error
    21am: error
    22am: error
    23am: error
    24am: error
    0pm: error
    1pm: 13:00:00 01/01/2005
    2pm: 14:00:00 01/01/2005
    3pm: 15:00:00 01/01/2005
    4pm: 16:00:00 01/01/2005
    5pm: 17:00:00 01/01/2005
    6pm: 18:00:00 01/01/2005
    7pm: 19:00:00 01/01/2005
    8pm: 20:00:00 01/01/2005
    9pm: 21:00:00 01/01/2005
    10pm: 22:00:00 01/01/2005
    11pm: 23:00:00 01/01/2005
    12pm: 12:00:00 01/01/2005
    13pm: error
    14pm: error
    15pm: error
    16pm: error
    17pm: error
    18pm: error
    19pm: error
    20pm: error
    21pm: error
    22pm: error
    23pm: error
    24pm: error
    0: 00:00:00 01/01/2005
    1: 01:00:00 01/01/2005
    2: 02:00:00 01/01/2005
    3: 03:00:00 01/01/2005
    4: 04:00:00 01/01/2005
    5: 05:00:00 01/01/2005
    6: 06:00:00 01/01/2005
    7: 07:00:00 01/01/2005
    8: 08:00:00 01/01/2005
    9: 09:00:00 01/01/2005
    10: 10:00:00 01/01/2005
    11: 11:00:00 01/01/2005
    12: 12:00:00 01/01/2005
    13: 13:00:00 01/01/2005
    14: 14:00:00 01/01/2005
    15: 15:00:00 01/01/2005
    16: 16:00:00 01/01/2005
    17: 17:00:00 01/01/2005
    18: 18:00:00 01/01/2005
    19: 19:00:00 01/01/2005
    20: 20:00:00 01/01/2005
    21: 21:00:00 01/01/2005
    22: 22:00:00 01/01/2005
    23: 23:00:00 01/01/2005
    24: error
    0am: error
    1am: 01:00:00 01/01/2005
    2am: 02:00:00 01/01/2005
    3am: 03:00:00 01/01/2005
    4am: 04:00:00 01/01/2005
    5am: 05:00:00 01/01/2005
    6am: 06:00:00 01/01/2005
    7am: 07:00:00 01/01/2005
    8am: 08:00:00 01/01/2005
    9am: 09:00:00 01/01/2005
    10am: 10:00:00 01/01/2005
    11am: 11:00:00 01/01/2005
    12am: 00:00:00 01/01/2005
    13am: error
    14am: error
    15am: error
    16am: error
    17am: error
    18am: error
    19am: error
    20am: error
    21am: error
    22am: error
    23am: error
    24am: error
    0pm: error
    1pm: 13:00:00 01/01/2005
    2pm: 14:00:00 01/01/2005
    3pm: 15:00:00 01/01/2005
    4pm: 16:00:00 01/01/2005
    5pm: 17:00:00 01/01/2005
    6pm: 18:00:00 01/01/2005
    7pm: 19:00:00 01/01/2005
    8pm: 20:00:00 01/01/2005
    9pm: 21:00:00 01/01/2005
    10pm: 22:00:00 01/01/2005
    11pm: 23:00:00 01/01/2005
    12pm: 12:00:00 01/01/2005
    13pm: error
    14pm: error
    15pm: error
    16pm: error
    17pm: error
    18pm: error
    19pm: error
    20pm: error
    21pm: error
    22pm: error
    23pm: error
    24pm: error
    DateTime/strtotime5.php: SUCCEEDED
    DateTime/time.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    -189388800:-189475200 - 86400
    1964-01-01T00:00:00+0000
    1963-12-31T00:00:00+0000
    1964-06-06
    1963-06-06
    1964-01-06
    1133305200
    -189388800:-189475200 - 86400
    1964-01-01T00:00:00+0000
    1963-12-31T00:00:00+0000
    1964-06-06
    1963-06-06
    1964-01-06
    DateTime/timezones1.php: SUCCEEDED
    FileSystem/basename.php: SUCCEEDED
    FileSystem/basename2.php: SUCCEEDED
    FileSystem/chdir.php: SUCCEEDED
    FileSystem/csv.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    --- write ---
    72
    24
    44
    2
    6
    
    --- read ---
    "hello\n
    world";"aaa""bbb""ccc";"blah blah;";none;"tab\ttab";"space space"\n
    hh'ee;"ss\nsadasdasd s"\n
    """""""""""""""""""""";"""";;"""""";"xxx"""\n
    x\n
    "x\y"\n
    --- write ---
    72
    24
    44
    2
    6
    
    --- read ---
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    FileSystem/date.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <pre>[ARRAY
      [INT (0)] => [STRING: "A --> {PM}"]
      [INT (1)] => [STRING: "B --> {719}"]
      [INT (2)] => [STRING: "C --> {C}"]
      [INT (3)] => [STRING: "D --> {Sat}"]
      [INT (4)] => [STRING: "E --> {E}"]
      [INT (5)] => [STRING: "F --> {March}"]
      [INT (6)] => [STRING: "G --> {17}"]
      [INT (7)] => [STRING: "H --> {17}"]
      [INT (8)] => [STRING: "I --> {0}"]
      [INT (9)] => [STRING: "J --> {J}"]
      [INT (10)] => [STRING: "K --> {K}"]
      [INT (11)] => [STRING: "L --> {0}"]
      [INT (12)] => [STRING: "M --> {Mar}"]
      [INT (13)] => [STRING: "N --> {6}"]
      [INT (14)] => [STRING: "O --> {+0100}"]
      [INT (15)] => [STRING: "P --> {+01:00}"]
      [INT (16)] => [STRING: "Q --> {Q}"]
      [INT (17)] => [STRING: "R --> {R}"]
      [INT (18)] => [STRING: "S --> {th}"]
      [INT (19)] => [STRING: "U --> {984240978}"]
      [INT (20)] => [STRING: "V --> {V}"]
      [INT (21)] => [STRING: "W --> {10}"]
      [INT (22)] => [STRING: "X --> {X}"]
      [INT (23)] => [STRING: "Y --> {2001}"]
      [INT (24)] => [STRING: "Z --> {3600}"]
      [INT (25)] => [STRING: "a --> {pm}"]
      [INT (26)] => [STRING: "b --> {b}"]
      [INT (27)] => [STRING: "c --> {2001-03-10T17:16:18+01:00}"]
      [INT (28)] => [STRING: "d --> {10}"]
      [INT (29)] => [STRING: "e --> {Europe/Prague}"]
      [INT (30)] => [STRING: "f --> {f}"]
      [INT (31)] => [STRING: "g --> {5}"]
      [INT (32)] => [STRING: "h --> {05}"]
      [INT (33)] => [STRING: "i --> {16}"]
      [INT (34)] => [STRING: "j --> {10}"]
      [INT (35)] => [STRING: "k --> {k}"]
      [INT (36)] => [STRING: "l --> {Saturday}"]
      [INT (37)] => [STRING: "m --> {03}"]
      [INT (38)] => [STRING: "n --> {3}"]
      [INT (39)] => [STRING: "o --> {2001}"]
      [INT (40)] => [STRING: "p --> {p}"]
      [INT (41)] => [STRING: "q --> {q}"]
      [INT (42)] => [STRING: "r --> {Sat, 10 Mar 2001 17:16:18 +0100}"]
      [INT (43)] => [STRING: "s --> {18}"]
      [INT (44)] => [STRING: "t --> {31}"]
      [INT (45)] => [STRING: "u --> {000000}"]
      [INT (46)] => [STRING: "v --> {v}"]
      [INT (47)] => [STRING: "w --> {6}"]
      [INT (48)] => [STRING: "x --> {x}"]
      [INT (49)] => [STRING: "y --> {01}"]
      [INT (50)] => [STRING: "z --> {68}"]
    ]</pre>
    <pre>[ARRAY
      [INT (0)] => [STRING: "A --> {PM}"]
      [INT (1)] => [STRING: "B --> {719}"]
      [INT (2)] => [STRING: "C --> {C}"]
      [INT (3)] => [STRING: "D --> {Sat}"]
      [INT (4)] => [STRING: "E --> {E}"]
      [INT (5)] => [STRING: "F --> {March}"]
      [INT (6)] => [STRING: "G --> {17}"]
      [INT (7)] => [STRING: "H --> {17}"]
      [INT (8)] => [STRING: "I --> {0}"]
      [INT (9)] => [STRING: "J --> {J}"]
      [INT (10)] => [STRING: "K --> {K}"]
      [INT (11)] => [STRING: "L --> {0}"]
      [INT (12)] => [STRING: "M --> {Mar}"]
      [INT (13)] => [STRING: "N --> {6}"]
      [INT (14)] => [STRING: "O --> {+0100}"]
      [INT (15)] => [STRING: "P --> {+01:00}"]
      [INT (16)] => [STRING: "Q --> {Q}"]
      [INT (17)] => [STRING: "R --> {R}"]
      [INT (18)] => [STRING: "S --> {th}"]
      [INT (19)] => [STRING: "U --> {984240978}"]
      [INT (20)] => [STRING: "V --> {V}"]
      [INT (21)] => [STRING: "W --> {10}"]
      [INT (22)] => [STRING: "X --> {X}"]
      [INT (23)] => [STRING: "Y --> {2001}"]
      [INT (24)] => [STRING: "Z --> {3600}"]
      [INT (25)] => [STRING: "a --> {pm}"]
      [INT (26)] => [STRING: "b --> {b}"]
      [INT (27)] => [STRING: "c --> {2001-03-10T17:16:18+01:00}"]
      [INT (28)] => [STRING: "d --> {10}"]
      [INT (29)] => [STRING: "e --> {Europe/Prague}"]
      [INT (30)] => [STRING: "f --> {f}"]
      [INT (31)] => [STRING: "g --> {5}"]
      [INT (32)] => [STRING: "h --> {05}"]
      [INT (33)] => [STRING: "i --> {16}"]
      [INT (34)] => [STRING: "j --> {10}"]
      [INT (35)] => [STRING: "k --> {k}"]
      [INT (36)] => [STRING: "l --> {Saturday}"]
      [INT (37)] => [STRING: "m --> {03}"]
      [INT (38)] => [STRING: "n --> {3}"]
      [INT (39)] => [STRING: "o --> {2001}"]
      [INT (40)] => [STRING: "p --> {p}"]
      [INT (41)] => [STRING: "q --> {q}"]
      [INT (42)] => [STRING: "r --> {Sat, 10 Mar 2001 17:16:18 +0100}"]
      [INT (43)] => [STRING: "s --> {18}"]
      [INT (44)] => [STRING: "t --> {31}"]
      [INT (45)] => [STRING: "u --> {u}"]
      [INT (46)] => [STRING: "v --> {v}"]
      [INT (47)] => [STRING: "w --> {6}"]
      [INT (48)] => [STRING: "x --> {x}"]
      [INT (49)] => [STRING: "y --> {01}"]
      [INT (50)] => [STRING: "z --> {68}"]
    ]</pre>
    FileSystem/date2.php: SUCCEEDED
    FileSystem/date3.php: SUCCEEDED
    FileSystem/date_unix.php: SUCCEEDED
    FileSystem/dirname.php: SUCCEEDED
    FileSystem/dirname2.php: SUCCEEDED
    FileSystem/disk_free_space.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    129 GB
    Drive C: 211 GB
    Drive D: 129 GB
    Drive E: 379 GB
    Drive F: 
    Warning: disk_free_space(): The device is not ready.
     in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt on line 14
    false
    129 GB
    Drive C: 211 GB
    Drive D: 129 GB
    Drive E: 379 GB
    Drive F: false
    FileSystem/disk_total_space.php: SUCCEEDED
    FileSystem/fgets.php: SUCCEEDED
    FileSystem/file.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <pre>[ARRAY
      [INT (0)] => [STRING: "this is a file with one EOLN
    "]
    ]</pre>
    <pre>[ARRAY
      [INT (0)] => [STRING: ""]
      [INT (1)] => [STRING: "This is a file with two EOLNs. First line is empty."]
    ]</pre>
    <pre>[ARRAY
      [INT (0)] => [STRING: "
    "]
      [INT (1)] => [STRING: "This is a file with two EOLNs. First line is empty.
    "]
    ]</pre>
    <pre>[ARRAY
      [INT (0)] => [STRING: "This is a file with two EOLNs. First line is empty."]
    ]</pre>
    <pre>[ARRAY
      [INT (0)] => [STRING: "this is a file WITHOUT an "end-of-line""]
    ]</pre>
    Line #<b>130</b> : &lt;/html&gt;
    <br />
    [this is a file with one EOLN{\n}
    ]
    <pre>[ARRAY
      [INT (0)] => [STRING: "this is a file with one EOLN
    "]
    ]</pre>
    <pre>[ARRAY
      [INT (0)] => [STRING: ""]
      [INT (1)] => [STRING: "This is a file with two EOLNs. First line is empty."]
    ]</pre>
    <pre>[ARRAY
      [INT (0)] => [STRING: "
    "]
      [INT (1)] => [STRING: "This is a file with two EOLNs. First line is empty.
    "]
    ]</pre>
    <pre>[ARRAY
      [INT (0)] => [STRING: ""]
      [INT (1)] => [STRING: "This is a file with two EOLNs. First line is empty."]
    ]</pre>
    <pre>[ARRAY
      [INT (0)] => [STRING: "this is a file WITHOUT an "end-of-line""]
    ]</pre>
    Line #<b>130</b> : &lt;/html&gt;
    <br />
    [this is a file with one EOLN{\n}
    ]
    FileSystem/filesize.php: SUCCEEDED
    FileSystem/file_exists.php: SUCCEEDED
    FileSystem/file_get_contents.php: SUCCEEDED
    FileSystem/fpassthru.php: SUCCEEDED
    FileSystem/fread.php: SUCCEEDED
    FileSystem/fread1.php: SUCCEEDED
    FileSystem/fread2.php: SUCCEEDED
    FileSystem/fseek.php: SUCCEEDED
    FileSystem/fsockopen.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    TCP
    
    READ: 8468
    
    UDP
    TCP
    
    READ: 8413
    
    UDP
    FileSystem/ftell.php: SUCCEEDED
    FileSystem/is_dir.php: SUCCEEDED
    FileSystem/is_executable.php: SUCCEEDED
    FileSystem/pathinfo.php: SUCCEEDED
    FileSystem/popen.php: SUCCEEDED
    FileSystem/readdir.php: SUCCEEDED
    FileSystem/readfile.php: SUCCEEDED
    FileSystem/readline.php: SUCCEEDED
    FileSystem/realpath.php: SUCCEEDED
    FileSystem/scandir.php: SUCCEEDED
    FileSystem/stat.php: SUCCEEDED
    FileSystem/stream_context_set_option.php: SUCCEEDED
    FileSystem/stream_copy_to_stream.php: SUCCEEDED
    FileSystem/stream_copy_to_stream2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <p>Read <b>rb</b>, Write <b>wb</b>
    
    
    COPIED: <b>8325</b>
    <p>Read <b>rb</b>, Write <b>wt</b>
    
    
    COPIED: <b>8299</b>
    <p>Read <b>rb</b>, Write <b>wb</b>
    
    
    COPIED: <b>8325</b>
    <p>Read <b>rb</b>, Write <b>wt</b>
    
    
    COPIED: <b>8317</b>
    FileSystem/testinc.php: SUCCEEDED
    FileSystem/touch.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Warning: touch(): Utime failed: No such file or directory in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt on line 8
    Sorry Could Not change modification time of touch.txt
    Warning: touch(): Utime failed: No such file or directory in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt on line 14
    
    Warning: touch(): Utime failed: No such file or directory in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt on line 16
    
    Warning: touch(): Utime failed: No such file or directory in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt on line 17
    <pre>[ARRAY
      [INT (0)] => [STRING: "January 24, 2010; [12:09:12] (12h) ctime test.txt (1264331352)"]
      [INT (1)] => [STRING: "January 24, 2010; [12:09:12] (12h) mtime test.txt (1264331352)"]
      [INT (2)] => [STRING: "January 24, 2010; [12:09:12] (12h) ctime touch.txt (1264331352)"]
      [INT (3)] => [STRING: "January 24, 2010; [12:09:12] (12h) mtime touch.txt (1264331352)"]
      [INT (4)] => [STRING: "January 24, 2010; [12:09:12] (12h) atime touch.txt (1264331352)"]
      [INT (5)] => [STRING: "January 24, 2010; [12:09:12] (12h) mtime summer.txt (1264331352)"]
      [INT (6)] => [STRING: "January 24, 2010; [12:09:12] (12h) mtime winter.txt (1264331352)"]
    ]</pre>
    Warning: touch(): Unable to access (D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\touch.txt): Permission denied in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 8, column 5.
    Sorry Could Not change modification time of touch.txt
    Warning: touch(): Unable to access (D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\touch.txt): Permission denied in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 14, column 1.
    
    Warning: touch(): Unable to access (D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\winter.txt): Permission denied in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 16, column 1.
    
    Warning: touch(): Unable to access (D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\summer.txt): Permission denied in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 17, column 1.
    <pre>[ARRAY
      [INT (0)] => [STRING: "January 24, 2010; [12:09:12] (12h) ctime test.txt (1264331352)"]
      [INT (1)] => [STRING: "January 24, 2010; [12:09:12] (12h) mtime test.txt (1264331352)"]
      [INT (2)] => [STRING: "January 24, 2010; [12:09:12] (12h) ctime touch.txt (1264331352)"]
      [INT (3)] => [STRING: "January 24, 2010; [12:09:12] (12h) mtime touch.txt (1264331352)"]
      [INT (4)] => [STRING: "January 24, 2010; [12:09:12] (12h) atime touch.txt (1264331352)"]
      [INT (5)] => [STRING: "January 24, 2010; [12:09:12] (12h) mtime summer.txt (1264331352)"]
      [INT (6)] => [STRING: "January 24, 2010; [12:09:12] (12h) mtime winter.txt (1264331352)"]
    ]</pre>
    Math/abs.php: SUCCEEDED
    Math/atan2.php: SUCCEEDED
    Math/base_convert.php: SUCCEEDED
    Math/bindec.php: SUCCEEDED
    Math/ceil.php: SUCCEEDED
    Math/cos.php: SUCCEEDED
    Math/decbin.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <pre>
    [double: 2294967295]
    10001000110010100110101111111111
    [double: 4294967296]
    0
    [double: 8589934590]
    11111111111111111111111111111110
    [double: 8589934590]
    11111111111111111111111111111110
    [double: 8589934591]
    11111111111111111111111111111111
    [Int: 1000.000.000.000]
    11010100101001010001000000000000
    <hr>(-1, -5435, 2.14, 0, 26)
    11111111111111111111111111111111
    11111111111111111110101011000101
    10
    0
    11010 
    </pre>
    <pre>
    [???: 2294967295]
    10001000110010100110101111111111
    [???: 4294967296]
    0
    [???: 8589934590]
    11111111111111111111111111111110
    [???: 8589934590]
    11111111111111111111111111111110
    [???: 8589934591]
    11111111111111111111111111111111
    [Int: 1000.000.000.000]
    11010100101001010001000000000000
    <hr>(-1, -5435, 2.14, 0, 26)
    11111111111111111111111111111111
    11111111111111111110101011000101
    10
    0
    11010 
    </pre>
    Math/dechex.php: SUCCEEDED
    Math/decoct.php: SUCCEEDED
    Math/deg2rad.php: SUCCEEDED
    Math/exp.php: SUCCEEDED
    Math/floor.php: SUCCEEDED
    Math/fmod.php: SUCCEEDED
    Math/hexdec.php: SUCCEEDED
    Math/max.php: SUCCEEDED
    Math/min.php: SUCCEEDED
    Math/modulo_warn.php: SUCCEEDED
    Math/octdec.php: SUCCEEDED
    Math/pow.php: SUCCEEDED
    Math/rad2deg.php: SUCCEEDED
    Math/round.php: SUCCEEDED
    Math/sin.php: SUCCEEDED
    Math/sqrt.php: SUCCEEDED
    Math/tan.php: SUCCEEDED
    Math/uniqid.php: SUCCEEDED
    Misc/calendar_extension.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0
    0
    2375840
    0
    14
    32
    2
    There are 31 days in August 2003
    There are 28 days in February 2003
    There are 29 days in February 2004
    There are 31 days in December 2034
    1748326
    1748324
    374867
    0
    322f32322f35373633
    ebe120e7f9e5ef20e4faf9f1e2
    ebe120e7f9e5ef20e427faf9f1e2
    ebe120e7f9e5ef20e420e0ecf4e9ed20faf9f1e2
    ebe120e7f9e5ef20e42720e0ecf4e9ed20faf9f1e2
    eb22e120e7f9e5ef20e4faf9f122e2
    e12720e7f9e5ef20e4faf9f122e2
    e12720e7f9e5ef20e427faf9f122e2
    e12720e7f9e5ef20e420e0ecf4e9ed20faf9f122e2
    e12720e7f9e5ef20e42720e0ecf4e9ed20faf9f122e2
    Error: Call to undefined function: 'frenchtojd' in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\__input.txt at expression on line 2, column 1.
    Misc/ini_parse.php: SUCCEEDED
    Misc/lexer.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    T_INLINE_HTML
    311 '\r\n'
    T_OPEN_TAG
    368 '&lt;?'
    T_WHITESPACE
    371 ' \r\n\r\n'
    T_FINAL
    345 'final'
    T_WHITESPACE
    371 ' '
    T_CLASS
    353 'class'
    T_WHITESPACE
    371 ' '
    T_STRING
    307 'A'
    T_WHITESPACE
    371 ' \r\n'
        '{'
    T_WHITESPACE
    371 ' \r\n  '
    T_FUNCTION
    334 'function'
    T_WHITESPACE
    371 ' '
    T_STRING
    307 '__get'
        '('
    T_VARIABLE
    309 '$x'
        ')'
    T_WHITESPACE
    371 ' \r\n  '
        '{'
    T_WHITESPACE
    371 ' \r\n    '
    T_VARIABLE
    309 '$x'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_START_HEREDOC
    372 '&lt;&lt;&lt;EOOOOOOOOOOOOOOT\r\n'
    T_ENCAPSED_AND_WHITESPACE
    314 '         &lt;&lt;&lt;hello\r\nEOOOOOOOOOOOOOOt;\r\nEOOOOOOOOOOOOOT;\r\n'
    T_END_HEREDOC
    373 'EOOOOOOOOOOOOOOT'
        ';'
    T_WHITESPACE
    371 '\r\n\r\n    '
        '$'
    T_VARIABLE
    309 '$y'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_ARRAY
    360 'array'
    T_WHITESPACE
    371 ' '
        '('
    T_LNUMBER
    305 '1'
        ','
    T_DNUMBER
    306 '100000000000000'
        ','
    T_DNUMBER
    306 '999999999999999999999999999999999'
        ','
    T_STRING
    307 'true'
        ','
    T_STRING
    307 'false'
        ')'
        ';'
    T_WHITESPACE
    371 '\r\n    '
        '$'
        '{'
        '&quot;'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
    T_DOLLAR_OPEN_CURLY_BRACES
    374 '${'
        '$'
        '{'
    T_CONSTANT_ENCAPSED_STRING
    315 '&quot;xxx&quot;'
        '}'
        '}'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
        '&quot;'
        '}'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_LNUMBER
    305 '1'
        ';'
    T_WHITESPACE
    371 '\r\n    '
        '$'
        '{'
        '&quot;'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
    T_DOLLAR_OPEN_CURLY_BRACES
    374 '${'
        '$'
        '{'
        '&quot;'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
    T_VARIABLE
    309 '$x'
    T_ENCAPSED_AND_WHITESPACE
    314 '-&gt;$$'
    T_VARIABLE
    309 '$x0xx'
        '&quot;'
        '}'
        '}'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
        '&quot;'
        '}'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_LNUMBER
    305 '1'
        ';'
    T_WHITESPACE
    371 '\r\n  '
        '}'
    T_WHITESPACE
    371 ' \r\n'
        '}'
    T_WHITESPACE
    371 '\r\n\r\n'
    T_CLOSE_TAG
    370 '?&gt;'
    '
    '
        '&lt;?'
        ' 
    
    '
        'final'
        ' '
        'class'
        ' '
        'A'
        ' 
    '
        '{'
        ' 
      '
        'function'
        ' '
    258
    258 '
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\__input.txt at expression on line 10, column 7.
    '
        '('
        '$x'
        ')'
        ' 
      '
        '{'
        ' 
        '
        '$x'
        ' '
        '='
        ' '
        '&lt;&lt;&lt;EOOOOOOOOOOOOOOT
    '
        '         &lt;&lt;&lt;'
        'hello'
        '
    '
        'EOOOOOOOOOOOOOOt;
    '
        'EOOOOOOOOOOOOOT;
    '
        'EOOOOOOOOOOOOOOT'
        ';'
        '
    
        '
        '$'
        '$y'
        ' '
        '='
        ' '
        'array'
        ' '
        '('
        '1'
        ','
        '100000000000000'
        ','
        '999999999999999999999999999999999'
        ','
        'true'
        ','
    256
    256 '
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\__input.txt at expression on line 10, column 7.
    '
        ')'
        ';'
        '
        '
        '$'
        '{'
        '&quot;'
        'x'
        '${'
        '$'
        '{'
    -29
    -29 '
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\__input.txt at expression on line 10, column 7.
    '
        '}'
        '}'
        'x'
        '&quot;'
        '}'
        ' '
        '='
        ' '
        '1'
        ';'
        '
        '
        '$'
        '{'
        '&quot;'
        'x'
        '${'
        '$'
        '{'
        '&quot;'
        'x'
        '$x'
        '-&gt;'
        '$'
        '$'
        '$x0xx'
        '&quot;'
        '}'
        '}'
        'x'
        '&quot;'
        '}'
        ' '
        '='
        ' '
        '1'
        ';'
        '
      '
        '}'
        ' 
    '
        '}'
        '
    
    '
        '?&gt;'
    Misc/locale.php: SUCCEEDED
    Misc/output2.php: SUCCEEDED
    Misc/stack_trace.php: FAILED
    Script hung upNo errorsSuccess
    Expected test outputReal script output
    Misc/tokens.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    T_REQUIRE_ONCE = 258,
    T_REQUIRE = 259,
    T_EVAL = 260,
    T_INCLUDE_ONCE = 261,
    T_INCLUDE = 262,
    T_LOGICAL_OR = 263,
    T_LOGICAL_XOR = 264,
    T_LOGICAL_AND = 265,
    T_PRINT = 266,
    T_SR_EQUAL = 267,
    T_SL_EQUAL = 268,
    T_XOR_EQUAL = 269,
    T_OR_EQUAL = 270,
    T_AND_EQUAL = 271,
    T_MOD_EQUAL = 272,
    T_CONCAT_EQUAL = 273,
    T_DIV_EQUAL = 274,
    T_MUL_EQUAL = 275,
    T_MINUS_EQUAL = 276,
    T_PLUS_EQUAL = 277,
    T_BOOLEAN_OR = 278,
    T_BOOLEAN_AND = 279,
    T_IS_NOT_IDENTICAL = 280,
    T_IS_IDENTICAL = 281,
    T_IS_NOT_EQUAL = 282,
    T_IS_EQUAL = 283,
    T_IS_GREATER_OR_EQUAL = 284,
    T_IS_SMALLER_OR_EQUAL = 285,
    T_SR = 286,
    T_SL = 287,
    T_INSTANCEOF = 288,
    T_UNSET_CAST = 289,
    T_BOOL_CAST = 290,
    T_OBJECT_CAST = 291,
    T_ARRAY_CAST = 292,
    T_STRING_CAST = 293,
    T_DOUBLE_CAST = 294,
    T_INT_CAST = 295,
    T_DEC = 296,
    T_INC = 297,
    T_CLONE = 298,
    T_NEW = 299,
    T_EXIT = 300,
    T_IF = 301,
    T_ELSEIF = 302,
    T_ELSE = 303,
    T_ENDIF = 304,
    T_LNUMBER = 305,
    T_DNUMBER = 306,
    T_STRING = 307,
    T_STRING_VARNAME = 308,
    T_VARIABLE = 309,
    T_NUM_STRING = 310,
    T_INLINE_HTML = 311,
    T_CHARACTER = 312,
    T_BAD_CHARACTER = 313,
    T_ENCAPSED_AND_WHITESPACE = 314,
    T_CONSTANT_ENCAPSED_STRING = 315,
    T_ECHO = 316,
    T_DO = 317,
    T_WHILE = 318,
    T_ENDWHILE = 319,
    T_FOR = 320,
    T_ENDFOR = 321,
    T_FOREACH = 322,
    T_ENDFOREACH = 323,
    T_DECLARE = 324,
    T_ENDDECLARE = 325,
    T_AS = 326,
    T_SWITCH = 327,
    T_ENDSWITCH = 328,
    T_CASE = 329,
    T_DEFAULT = 330,
    T_BREAK = 331,
    T_CONTINUE = 332,
    T_GOTO = 333,
    T_FUNCTION = 334,
    T_CONST = 335,
    T_RETURN = 336,
    T_TRY = 337,
    T_CATCH = 338,
    T_THROW = 339,
    T_USE = 340,
    T_GLOBAL = 341,
    T_PUBLIC = 342,
    T_PROTECTED = 343,
    T_PRIVATE = 344,
    T_FINAL = 345,
    T_ABSTRACT = 346,
    T_STATIC = 347,
    T_VAR = 348,
    T_UNSET = 349,
    T_ISSET = 350,
    T_EMPTY = 351,
    T_HALT_COMPILER = 352,
    T_CLASS = 353,
    T_INTERFACE = 354,
    T_EXTENDS = 355,
    T_IMPLEMENTS = 356,
    T_OBJECT_OPERATOR = 357,
    T_DOUBLE_ARROW = 358,
    T_LIST = 359,
    T_ARRAY = 360,
    T_CLASS_C = 361,
    T_METHOD_C = 362,
    T_FUNC_C = 363,
    T_LINE = 364,
    T_FILE = 365,
    T_COMMENT = 366,
    T_DOC_COMMENT = 367,
    T_OPEN_TAG = 368,
    T_OPEN_TAG_WITH_ECHO = 369,
    T_CLOSE_TAG = 370,
    T_WHITESPACE = 371,
    T_START_HEREDOC = 372,
    T_END_HEREDOC = 373,
    T_DOLLAR_OPEN_CURLY_BRACES = 374,
    T_CURLY_OPEN = 375,
    T_PAAMAYIM_NEKUDOTAYIM = 376,
    T_DOUBLE_COLON = 376,
    T_NAMESPACE = 377,
    T_NS_C = 378,
    T_DIR = 379,
    T_NS_SEPARATOR = 380,
    T_INCLUDE = 129,
    T_INCLUDE_ONCE = 130,
    T_EVAL = 131,
    T_REQUIRE = 132,
    T_REQUIRE_ONCE = 133,
    T_LOGICAL_OR = 136,
    T_LOGICAL_XOR = 137,
    T_LOGICAL_AND = 138,
    T_PRINT = 139,
    T_PLUS_EQUAL = 140,
    T_MINUS_EQUAL = 141,
    T_MUL_EQUAL = 142,
    T_DIV_EQUAL = 143,
    T_CONCAT_EQUAL = 144,
    T_MOD_EQUAL = 145,
    T_AND_EQUAL = 146,
    T_OR_EQUAL = 147,
    T_XOR_EQUAL = 148,
    T_SL_EQUAL = 149,
    T_SR_EQUAL = 150,
    T_BOOLEAN_OR = 151,
    T_BOOLEAN_AND = 152,
    T_IS_EQUAL = 153,
    T_IS_NOT_EQUAL = 154,
    T_IS_IDENTICAL = 155,
    T_IS_NOT_IDENTICAL = 156,
    T_IS_SMALLER_OR_EQUAL = 157,
    T_IS_GREATER_OR_EQUAL = 158,
    T_SL = 159,
    T_SR = 160,
    T_INC = 161,
    T_DEC = 162,
    T_NEW = 164,
    T_INSTANCEOF = 165,
    T_CLONE = 167,
    T_LNUMBER = 168,
    T_DNUMBER = 170,
    T_STRING = 171,
    T_STRING_VARNAME = 172,
    T_VARIABLE = 173,
    T_NUM_STRING = 174,
    T_INLINE_HTML = 175,
    T_CHARACTER = 176,
    T_BAD_CHARACTER = 177,
    T_ENCAPSED_AND_WHITESPACE = 178,
    T_CONSTANT_ENCAPSED_STRING = 179,
    T_EXIT = 180,
    T_IF = 181,
    T_ELSEIF = 182,
    T_ELSE = 183,
    T_ENDIF = 184,
    T_ECHO = 185,
    T_DO = 186,
    T_WHILE = 187,
    T_ENDWHILE = 188,
    T_FOR = 189,
    T_ENDFOR = 190,
    T_FOREACH = 191,
    T_ENDFOREACH = 192,
    T_AS = 193,
    T_SWITCH = 194,
    T_ENDSWITCH = 195,
    T_CASE = 196,
    T_DEFAULT = 197,
    T_BREAK = 198,
    T_CONTINUE = 199,
    T_FUNCTION = 200,
    T_CONST = 201,
    T_RETURN = 202,
    T_GLOBAL = 203,
    T_STATIC = 204,
    T_VAR = 205,
    T_UNSET = 206,
    T_ISSET = 207,
    T_EMPTY = 208,
    T_CLASS = 209,
    T_EXTENDS = 210,
    T_OBJECT_OPERATOR = 211,
    T_DOUBLE_ARROW = 212,
    T_LIST = 213,
    T_ARRAY = 214,
    T_CLASS_C = 215,
    T_METHOD_C = 216,
    T_FUNC_C = 217,
    T_LINE = 218,
    T_FILE = 219,
    T_COMMENT = 220,
    T_DOC_COMMENT = 221,
    T_OPEN_TAG = 226,
    T_OPEN_TAG_WITH_ECHO = 227,
    T_CLOSE_TAG = 228,
    T_WHITESPACE = 229,
    T_START_HEREDOC = 230,
    T_END_HEREDOC = 231,
    T_DOLLAR_OPEN_CURLY_BRACES = 232,
    T_CURLY_OPEN = 233,
    T_DOUBLE_COLON = 234,
    T_PAAMAYIM_NEKUDOTAYIM = 234,
    T_TRY = 236,
    T_CATCH = 237,
    T_THROW = 238,
    T_INTERFACE = 239,
    T_IMPLEMENTS = 240,
    T_ABSTRACT = 241,
    T_FINAL = 242,
    T_PRIVATE = 243,
    T_PROTECTED = 244,
    T_PUBLIC = 245,
    T_BOOL_CAST = 285,
    T_INT_CAST = 288,
    T_DOUBLE_CAST = 294,
    T_STRING_CAST = 297,
    T_ARRAY_CAST = 299,
    T_OBJECT_CAST = 300,
    T_UNSET_CAST = 301,
    T_HALT_COMPILER = 351,
    Misc/user_error_handlers.php: SUCCEEDED
    Objects/conditional1.php: SUCCEEDED
    Objects/conditional2.php: SUCCEEDED
    Objects/conditional_base_class.php: SUCCEEDED
    Objects/constant_test.php: SUCCEEDED
    Objects/evaled_parent.php: SUCCEEDED
    Objects/getter_setter_bug28444.php: SUCCEEDED
    Objects/instanceof.php: SUCCEEDED
    Objects/new_via_unknown_ctor.php: SUCCEEDED
    Objects/object_creation_test.php: SUCCEEDED
    Objects/static_field_test.php: SUCCEEDED
    Objects/static_method_test.php: SUCCEEDED
    Objects/sys_class_const.php: SUCCEEDED
    Objects/this2.php: SUCCEEDED
    RegEx/ereg.php: SUCCEEDED
    RegEx/preg_match_unmatched_groups.php: SUCCEEDED
    RegEx/preg_replace_eval.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ab"01300 as"00da sd"0asdsa das asd 11asd a1sd a
    ab"01300 as"00da sd"0(aasdasdkjask,$a,\,\l,a,s,d,a,s,d,k,j,a,s,${120})(ldjaklsdjalk,$l,\,\l,d,j,a,k,l,s,d,j,a,l,${120})djdsa das asd 11asd a1sd a
    ab"01300 as"00da sd"0asdsa das asd 11asd a1sd a
    ab"01300 as"00da sd"0(aasdasdkjask,$a,\,\l,a,s,d,a,s,d,k,j,,,${120})(ldjaklsdjalk,$l,\,\l,d,j,a,k,l,s,d,j,,,${120})djdsa das asd 11asd a1sd a
    RegEx/regexp-sql.php: SUCCEEDED
    RegEx/Perl/cache.php: SUCCEEDED
    RegEx/Perl/grep1.php: SUCCEEDED
    RegEx/Perl/grep2.php: SUCCEEDED
    RegEx/Perl/match1.php: SUCCEEDED
    RegEx/Perl/match10.php: SUCCEEDED
    RegEx/Perl/match2.php: SUCCEEDED
    RegEx/Perl/match3.php: SUCCEEDED
    RegEx/Perl/match4.php: SUCCEEDED
    RegEx/Perl/match5.php: SUCCEEDED
    RegEx/Perl/match6.php: SUCCEEDED
    RegEx/Perl/match7.php: SUCCEEDED
    RegEx/Perl/match8.php: SUCCEEDED
    RegEx/Perl/match9.php: SUCCEEDED
    RegEx/Perl/match_all1.php: SUCCEEDED
    RegEx/Perl/match_all2.php: SUCCEEDED
    RegEx/Perl/match_all3.php: SUCCEEDED
    RegEx/Perl/match_all4.php: SUCCEEDED
    RegEx/Perl/match_dollar.php: SUCCEEDED
    RegEx/Perl/overflow.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string("kfkaj +j k45´┐Ż´┐Ż´┐Ż´┐Ż´┐Ż3#$%^&kjakfjkaj|kfj")
    string("kfkaj +j k45�����3#$%^&kjakfjkaj|kfj")
    RegEx/Perl/quote1.php: SUCCEEDED
    RegEx/Perl/quote2.php: SUCCEEDED
    RegEx/Perl/quote3.php: SUCCEEDED
    RegEx/Perl/replace1.php: SUCCEEDED
    RegEx/Perl/replace2.php: SUCCEEDED
    RegEx/Perl/replace3.php: SUCCEEDED
    RegEx/Perl/replace4.php: SUCCEEDED
    RegEx/Perl/replace5.php: SUCCEEDED
    RegEx/Perl/replace6.php: SUCCEEDED
    RegEx/Perl/replace7.php: SUCCEEDED
    RegEx/Perl/replace8.php: SUCCEEDED
    RegEx/Perl/replace9.php: SUCCEEDED
    RegEx/Perl/replace_callback1.php: SUCCEEDED
    RegEx/Perl/replace_callback2.php: SUCCEEDED
    RegEx/Perl/split1.php: SUCCEEDED
    RegEx/Perl/split2.php: SUCCEEDED
    RegEx/Perl/split3.php: SUCCEEDED
    RegEx/Perl/split4.php: SUCCEEDED
    RegEx/Perl/split5.php: SUCCEEDED
    RegEx/Perl/ungreedy.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    aaa
    a
    aaa
    
    a
    aa
    aaa
    aa
    aaa
    aaa
    a
    aaa
    a
    a
    aa
    aaa
    aa
    aaa
    RegEx/Perl/unsuccessful-preg_match_all.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0
    4
    1
    4
    0
    4
    1
    7
    SPL/ArrayAccess_offsetExists.php: SUCCEEDED
    SPL/exceptions.php: SUCCEEDED
    Strings/addcslashes.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    \f\o\o\[ \]
    Issues a Warning:
    // echo addcslashes("zoo['.']", 'z..A');
    // output:  \zoo['\.']
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt at expression on line 4, column 1.
    
    Issues a Warning:
    // echo addcslashes("zoo['.']", 'z..A');
    // output:  \zoo['\.']
    Strings/addslashes.php: SUCCEEDED
    Strings/chunk_split.php: SUCCEEDED
    Strings/concat.php: SUCCEEDED
    Strings/count_chars.php: SUCCEEDED
    Strings/crc32.php: SUCCEEDED
    Strings/crypt.php: SUCCEEDED
    Strings/crypt2.php: SUCCEEDED
    Strings/echo.php: SUCCEEDED
    Strings/explode.php: SUCCEEDED
    Strings/get_html_translation_table.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <hr>[&] => &amp;
    [>] => &gt;
    [<] => &lt;
    ["] => &quot;
    <hr>Hallo &amp; &lt;Frau&gt; &amp; Kr&iuml;&iquest;&frac12;mer
    <hr>[&] => &amp;
    [>] => &gt;
    [<] => &lt;
    ["] => &quot;
    <hr>Hallo &amp; &lt;Frau&gt; &amp; Kr�mer
    Strings/nl2br.php: SUCCEEDED
    Strings/pack.php: SUCCEEDED
    Strings/pos.php: SUCCEEDED
    Strings/runtime-quotes.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    fread = (x''y"z)
    fgets = (x''y"z)
    file[0] = (x''y"z)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    
    Warning: fopen(runtime-quotes2.txt): failed to open stream: Permission denied in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt on line 33
    
    Warning: fwrite() expects parameter 1 to be resource, boolean given in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt on line 35
    fwrite = ()
    
    Warning: fputs() expects parameter 1 to be resource, boolean given in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt on line 38
    fputs = ()
    
    Warning: fclose() expects parameter 1 to be resource, boolean given in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt on line 41
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (x'y"z)
    fgets = (x'y"z)
    file[0] = (x'y"z)
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (a\'b"\\ca\)
    fgets = (a\'b"\\ca\'b"\\c)
    file[0] = (a\'b"\\ca\'b"\\c)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    e'e
    e''e
    e'e
    e'e
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    e'e
    e'e
    e'e
    e'e
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    fread = (x''y"z)
    fgets = (x''y"z)
    file[0] = (x''y"z)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    
    Warning: fopen(): Unable to access (D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\runtime-quotes2.txt): Permission denied in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt at expression on line 33, column 3.
    
    Warning: Cannot convert bool to resource implicitly in a call to function fwrite() in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt at expression on line 35, column 3.
    fwrite = ()
    
    Warning: Cannot convert bool to resource implicitly in a call to function fputs() in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt at expression on line 38, column 3.
    fputs = ()
    
    Warning: Cannot convert bool to resource implicitly in a call to function fclose() in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt at expression on line 41, column 3.
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (x'y"z)
    fgets = (x'y"z)
    file[0] = (x'y"z)
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (a\'b"\\ca\)
    fgets = (a\'b"\\ca\'b"\\c)
    file[0] = (a\'b"\\ca\'b"\\c)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    e'e
    e''e
    e'e
    e'e
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    e'e
    e'e
    e'e
    e'e
    Strings/sprintf.php: SUCCEEDED
    Strings/sprintf2.php: SUCCEEDED
    Strings/strtr.php: SUCCEEDED
    Strings/str_ireplace.php: SUCCEEDED
    Strings/str_word_count.php: SUCCEEDED
    Strings/substr_operations.php: SUCCEEDED
    Strings/wordwrap.php: SUCCEEDED
    Variables/advanced_serialize.php: SUCCEEDED
    Variables/arguments.php: SUCCEEDED
    Variables/bitwise.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "00"
    string(2) "31"
    string(2) "31"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    0
    0
    0
    5
    0
    5
    40
    5
    45
    string(48) "000000000000000000000000000000000000000000000000"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(14) "31323331323331"
    string(2) "30"
    string(14) "31323331323331"
    string(16) "3635343635343536"
    string(2) "30"
    string(16) "3635343635343536"
    string(14) "337a5e8be43d7a"
    string(14) "00002130120201"
    string(48) "337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42"
    string(16) "347d598ce33a7e77"
    string(16) "0200243214040100"
    string(48) "367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42"
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "00"
    string(2) "31"
    string(2) "31"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    0
    -9223372036854775808
    -9223372036854775808
    -9223372036854775803
    0
    -9223372036854775803
    40
    5
    45
    string(48) "000000000000000000000000000000000000000000000000"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(14) "31323331323331"
    string(2) "30"
    string(14) "31323331323331"
    string(16) "3635343635343536"
    string(2) "30"
    string(16) "3635343635343536"
    string(14) "337a5e8be43d7a"
    string(14) "00002130120201"
    string(48) "337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42"
    string(16) "347d598ce33a7e77"
    string(16) "0200243214040100"
    string(48) "367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42"
    Variables/comparisons.php: SUCCEEDED
    Variables/constant.php: SUCCEEDED
    Variables/extract.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    EXTR_PREFIX_ALL
    integer(4)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
      'prefix_non_existent' => integer(1)
    }
    <hr>EXTR_PREFIX_INVALID
    integer(5)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => integer(2)
      'non_existent' => integer(1)
      'prefix_' => integer(1)
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => 'hello'
    }
    <hr>EXTR_PREFIX_SAME
    integer(3)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'non_existent' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>EXTR_PREFIX_IF_EXISTS
    integer(3)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>
    EXTR_PREFIX_ALL
    integer(4)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
      'prefix_non_existent' => integer(1)
    }
    <hr>EXTR_PREFIX_INVALID
    integer(2)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_ad' => integer(2)
      'prefix_non_existent' => integer(1)
    }
    <hr>EXTR_PREFIX_SAME
    integer(4)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'non_existent' => integer(1)
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>EXTR_PREFIX_IF_EXISTS
    integer(3)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>
    Variables/func_get_args.php: SUCCEEDED
    Variables/is_number.php: SUCCEEDED
    Variables/serialize.php: SUCCEEDED
    Variables/var_dumping.php: SUCCEEDED
    WorkItems/22016.php: SUCCEEDED
    WorkItems/22019.php: SUCCEEDED
    WorkItems/26052.php: SUCCEEDED
    WorkItems/2787.php: SUCCEEDED
    Xml/005.php: SUCCEEDED
    Xml/006.php: SUCCEEDED
    Xml/007.php: SUCCEEDED
    Xml/008.php: SUCCEEDED
    Xml/009.php: SUCCEEDED
    Xml/011.php: SUCCEEDED
    Xml/013.php: SUCCEEDED
    Xml/017.php: SUCCEEDED
    Xml/018.php: SUCCEEDED
    Xml/019.php: SUCCEEDED
    Xml/020.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    foo
    Works
    Works
    foo
    Works
    Error
    Xml/021.php: SUCCEEDED
    Xml/025.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
      'foo' => 'foobar'
    }
    array
    {
      'html' => 'http://www.w3.org/1999/xhtml'
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
    }
    array
    {
      'html' => 'http://www.w3.org/1999/xhtml'
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'foo' => 'foobar'
      'baz' => 'foobarbaz'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
    }
    array
    {
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
      'baz' => 'foobarbaz'
      'foo' => 'foobar'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
      'baz' => 'foobarbaz'
      'foo' => 'foobar'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
    }
    array
    {
    }
    Xml/026.php: SUCCEEDED
    Xml/027.php: SUCCEEDED
    Xml/028.php: SUCCEEDED
    Xml/029.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    'Joe'
    integer(3)
    integer(0)
    'John'
    integer(3)
    integer(1)
    'Jane'
    integer(3)
    integer(0)
    'Joe'
    integer(1)
    integer(1)
    'John'
    integer(1)
    integer(1)
    'Jane'
    integer(1)
    integer(1)
    Xml/030.php: SUCCEEDED
    Xml/032.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    FALSE
    FALSE
    FALSE
    TRUE
    TRUE
    TRUE
    Xml/033.php: SUCCEEDED
    Xml/bug26384.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'xsltprocessor' not found in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Xml\__input.txt on line 14
    HERE
    Xml/bug28721.php: SUCCEEDED
    Xml/bug28817.php: SUCCEEDED
    Xml/bug32615.php: SUCCEEDED
    Xml/bug33853.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string(13) "XsltProcessor"
    string(4) "TeSt"
    Xml/bug34276.php: SUCCEEDED
    Xml/bug35342.php: SUCCEEDED
    Xml/bug36756.php: SUCCEEDED
    Xml/bug37277.php: SUCCEEDED
    Xml/dom002.php: SUCCEEDED
    Xml/dom003.php: SUCCEEDED
    Xml/dom006.php: SUCCEEDED
    Xml/dom007.php: SUCCEEDED
    Xml/dom_set_attr_node.php: SUCCEEDED
    Xml/xslt001.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test 1: Transform To XML String
    Fatal error: Class 'xsltprocessor' not found in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Xml\prepare.inc on line 14
    Test 1: Transform To XML String
    <?xml version="1.0" encoding="iso-8859-1"?>
    <html><body>bar
    a1 b1 c1 <br/> 
    a2 c2 <br/> 
    ń3 b3 c3 <br/> 
    </body></html>
    Xml/xslt002.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test 2: Transform To HTML String
    Fatal error: Class 'xsltprocessor' not found in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Xml\prepare.inc on line 14
    Test 2: Transform To HTML String
    <html><body>bar
    a1 b1 c1 <br> 
    a2 c2 <br> 
    ń3 b3 c3 <br> 
    </body></html>
    Xml/xslt003.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test 3: Using Parameters
    Fatal error: Class 'xsltprocessor' not found in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Xml\prepare.inc on line 14
    Test 3: Using Parameters
    <?xml version="1.0" encoding="iso-8859-1"?>
    <html><body>hello world
    a1 b1 c1 <br/> 
    a2 c2 <br/> 
    ń3 b3 c3 <br/> 
    </body></html>
    Xml/xslt004.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test 4: Checking UTF8 Output
    Fatal error: Class 'xsltprocessor' not found in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Xml\prepare.inc on line 14
    Test 4: Checking UTF8 Output
    <?xml version="1.0" encoding="utf-8"?>
    <html><body>bar
    a1 b1 c1 <br/> 
    a2 c2 <br/> 
    ├Ą3 b3 c3 <br/> 
    </body></html>
    Xml/xslt005.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test 5: Checking Indent
    Fatal error: Class 'xsltprocessor' not found in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Xml\prepare.inc on line 14
    Test 5: Checking Indent
    <?xml version="1.0" encoding="iso-8859-1"?>
    <html>
      <body>bar
    a1 b1 c1 <br/> 
    a2 c2 <br/> 
    ń3 b3 c3 <br/> 
    </body>
    </html>
    Xml/xslt006.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test 6: Transform To Doc
    Fatal error: Class 'xsltprocessor' not found in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Xml\prepare.inc on line 14
    Test 6: Transform To Doc
    <?xml version="1.0" encoding="iso-8859-1"?>
    <html><body>bar
    a1 b1 c1 <br/> 
    a2 c2 <br/> 
    ń3 b3 c3 <br/> 
    </body></html>
    Xml/xslt007.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test 7: Transform To Uri
    Fatal error: Class 'xsltprocessor' not found in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Xml\prepare.inc on line 14
    Test 7: Transform To Uri
    <?xml version="1.0" encoding="iso-8859-1"?>
    <html><body>bar
    a1 b1 c1 <br/> 
    a2 c2 <br/> 
    ń3 b3 c3 <br/> 
    </body></html>
    Xml/xslt010.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test 10: EXSLT Support
    Fatal error: Class 'xsltprocessor' not found in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Xml\__input.txt on line 8
    Test 10: EXSLT Support
    Warning: Cannot find the script or external object that implements prefix 'http://exslt.org/dates-and-times'. in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Xml\__input.txt at expression on line 14, column 3.
    
    Warning: Illegal string offset '-1' in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Phalanger.inc at expression on line 7, column 6.
    Xml/xslt011.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test 11: php:function Support
    
    Fatal error: Class 'xsltprocessor' not found in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Xml\__input.txt on line 12
    Test 11: php:function Support
    <?xml version="1.0" encoding="utf-8"?>foobar - secondArg
    foobar - 
    this is from an external DomDocument
    from the Input Document
    static
    not a DomNode object
    Xml/xslt012.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test 12: Using Associative Array of Parameters
    Fatal error: Class 'xsltprocessor' not found in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Xml\__input.txt on line 20
    Test 12: Using Associative Array of Parameters
    <?xml version="1.0" encoding="iso-8859-1"?>
    <html><body>barbar
    test
    a1 b1 c1 <br/> 
    a2 c2 <br/> 
    ń3 b3 c3 <br/> 
    </body></html>
    ================================================ FILE: Testing/Tests/TestLogs/TestLog 2010-05-01.htm ================================================ PHP.NET Compiler test log

    PHP.NET Compiler test log

    (88%) 761 succeeded, 101 failed
    Test ResultCompiler error outputExpected test result
    @PHP/classes/array_access_001.php: SUCCEEDED
    @PHP/classes/array_access_002.php: SUCCEEDED
    @PHP/classes/array_access_003.php: SUCCEEDED
    @PHP/classes/array_access_004.php: SUCCEEDED
    @PHP/classes/array_access_005.php: SUCCEEDED
    @PHP/classes/array_access_006.php: SUCCEEDED
    @PHP/classes/array_access_007.php: SUCCEEDED
    @PHP/classes/array_access_008.php: SUCCEEDED
    @PHP/classes/array_access_009.php: SUCCEEDED
    @PHP/classes/array_access_010.php: SUCCEEDED
    @PHP/classes/array_access_011.php: SUCCEEDED
    @PHP/classes/array_access_013.php: SUCCEEDED
    @PHP/classes/assign_op_property_001.php: SUCCEEDED
    @PHP/classes/autoload_001.php: SUCCEEDED
    @PHP/classes/autoload_002.php: SUCCEEDED
    @PHP/classes/autoload_003.php: SUCCEEDED
    @PHP/classes/autoload_005.php: SUCCEEDED
    @PHP/classes/autoload_006.php: SUCCEEDED
    @PHP/classes/bug23951.php: SUCCEEDED
    @PHP/classes/bug24399.php: SUCCEEDED
    @PHP/classes/bug24445.php: SUCCEEDED
    @PHP/classes/bug26737.php: SUCCEEDED
    @PHP/classes/bug27468.php: SUCCEEDED
    @PHP/classes/bug27504.php: SUCCEEDED
    @PHP/classes/class_example.php: SUCCEEDED
    @PHP/classes/class_stdclass.php: SUCCEEDED
    @PHP/classes/clone_001.php: SUCCEEDED
    @PHP/classes/clone_002.php: SUCCEEDED
    @PHP/classes/clone_003.php: SUCCEEDED
    @PHP/classes/clone_004.php: SUCCEEDED
    @PHP/classes/clone_006.php: SUCCEEDED
    @PHP/classes/constants_scope_001.php: SUCCEEDED
    @PHP/classes/ctor_dtor.php: SUCCEEDED
    @PHP/classes/ctor_dtor_inheritance.php: SUCCEEDED
    @PHP/classes/ctor_name_clash.php: SUCCEEDED
    @PHP/classes/dereferencing_001.php: SUCCEEDED
    @PHP/classes/destructor_and_echo.php: SUCCEEDED
    @PHP/classes/destructor_and_references.php: SUCCEEDED
    @PHP/classes/destructor_inheritance.php: SUCCEEDED
    @PHP/classes/destructor_visibility_003.php: SUCCEEDED
    @PHP/classes/factory_001.php: SUCCEEDED
    @PHP/classes/factory_and_singleton_001.php: SUCCEEDED
    @PHP/classes/factory_and_singleton_002.php: SUCCEEDED
    @PHP/classes/final.php: SUCCEEDED
    @PHP/classes/incdec_property_001.php: SUCCEEDED
    @PHP/classes/incdec_property_002.php: SUCCEEDED
    @PHP/classes/incdec_property_003.php: SUCCEEDED
    @PHP/classes/incdec_property_004.php: SUCCEEDED
    @PHP/classes/inheritance.php: SUCCEEDED
    @PHP/classes/inheritance_002.php: SUCCEEDED
    @PHP/classes/interfaces_001.php: SUCCEEDED
    @PHP/classes/interface_construct.php: SUCCEEDED
    @PHP/classes/interface_doubled.php: SUCCEEDED
    @PHP/classes/interface_implemented.php: SUCCEEDED
    @PHP/classes/iterators_001.php: SUCCEEDED
    @PHP/classes/iterators_002.php: SUCCEEDED
    @PHP/classes/iterators_003.php: SUCCEEDED
    @PHP/classes/iterators_004.php: SUCCEEDED
    @PHP/classes/iterators_006.php: SUCCEEDED
    @PHP/classes/iterators_007.php: SUCCEEDED
    @PHP/classes/object_reference_001.php: SUCCEEDED
    @PHP/classes/private_001.php: SUCCEEDED
    @PHP/classes/private_002.php: SUCCEEDED
    @PHP/classes/private_003.php: SUCCEEDED
    @PHP/classes/private_003b.php: SUCCEEDED
    @PHP/classes/private_004.php: SUCCEEDED
    @PHP/classes/private_004b.php: SUCCEEDED
    @PHP/classes/private_005.php: SUCCEEDED
    @PHP/classes/private_005b.php: SUCCEEDED
    @PHP/classes/private_006.php: SUCCEEDED
    @PHP/classes/private_006b.php: SUCCEEDED
    @PHP/classes/private_007.php: SUCCEEDED
    @PHP/classes/private_007b.php: SUCCEEDED
    @PHP/classes/private_members.php: SUCCEEDED
    @PHP/classes/private_redeclare.php: SUCCEEDED
    @PHP/classes/protected_001.php: SUCCEEDED
    @PHP/classes/protected_001b.php: SUCCEEDED
    @PHP/classes/protected_002.php: SUCCEEDED
    @PHP/classes/serialize_001.php: SUCCEEDED
    @PHP/classes/singleton_001.php: SUCCEEDED
    @PHP/classes/static_properties_001.php: SUCCEEDED
    @PHP/classes/type_hinting_001.php: SUCCEEDED
    @PHP/classes/type_hinting_003.php: SUCCEEDED
    @PHP/classes/visibility_000c.php: SUCCEEDED
    @PHP/classes/visibility_001c.php: SUCCEEDED
    @PHP/classes/visibility_002c.php: SUCCEEDED
    @PHP/classes/visibility_003a.php: SUCCEEDED
    @PHP/classes/visibility_003c.php: SUCCEEDED
    @PHP/classes/visibility_004a.php: SUCCEEDED
    @PHP/classes/visibility_004b.php: SUCCEEDED
    @PHP/classes/visibility_004c.php: SUCCEEDED
    @PHP/classes/visibility_005.php: SUCCEEDED
    @PHP/classes/__call_001.php: SUCCEEDED
    @PHP/classes/__set_data_corrupt.php: FAILED
    Script hung upNo errorsSuccess
    Expected test outputReal script output
    Unhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---> System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> PHP.Core.Debug+AssertException: Assertion failed: Add      public static readonly object foobar = (int)1; instead of AddConstant usage.
       at PHP.Core.Debug.Fail(String message)
       at PHP.Core.Reflection.PhpTypeDesc.AddConstant(String name, Object value)
       at <__input.txt>.foo.__PopulateTypeDesc(PhpTypeDesc )
       --- End of inner exception stack trace ---
       at System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
       at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)
       at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
       at System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters)
       at PHP.Core.Reflection.PhpTypeDesc.AutoPopulate()
       at PHP.Core.Reflection.PhpTypeDesc.ReflectMethods()
       at PHP.Core.Reflection.DTypeDesc.get_Methods()
       at PHP.Core.Reflection.DTypeDesc.GetMember[N,T](GetMemberDictionary`2 dictionary, N name, DTypeDesc context, LookupFlags flags, T& member)
       at PHP.Core.Reflection.DTypeDesc.GetMethod(Name methodName, DTypeDesc context, DRoutineDesc& method)
       at PHP.Core.Reflection.DObject.InvokeMethod(String name, DTypeDesc caller, ScriptContext context)
       at PHP.Core.Operators.InvokeMethod(Object x, String methodName, DTypeDesc caller, ScriptContext context)
       at <__input.txt>.<Script>.<Main>(ScriptContext <context>, Dictionary`2 <locals>, DObject , DTypeDesc , Boolean ) in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\classes\__input.txt:line 21
       at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)
       at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)
       --- End of inner exception stack trace ---
       at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)
       at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)
       at <Global>.Run(String[] )
    
    @PHP/classes/__set__get_001.php: SUCCEEDED
    @PHP/classes/__set__get_004.php: SUCCEEDED
    @PHP/classes/__set__get_005.php: SUCCEEDED
    @PHP/date/bug17988.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2002-06-25 12:18:48
    2002-06-25 14:18:48
    2002-06-25 13:18:48
    2002-06-25 12:18:48
    2002-06-25 18:18:48
    2002-06-25 14:18:48
    2002-06-25 14:18:48
    2002-06-25 18:18:48
    2002-06-25 10:18:48
    2002-06-25 17:18:48
    2002-06-25 11:18:48
    2002-06-25 17:48:48
    2002-06-25 10:48:48
    2002-06-25 14:18:48
    2002-06-25 14:18:48
    2002-06-25 13:18:48
    2002-06-25 12:18:48
    2002-06-25 18:18:48
    2002-06-25 14:18:48
    2002-06-25 14:18:48
    2002-06-25 18:18:48
    2002-06-25 10:18:48
    2002-06-25 17:18:48
    2002-06-25 11:18:48
    2002-06-25 17:48:48
    2002-06-25 10:48:48
    @PHP/date/bug26317.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2003-11-19 17:20:42
    2003-11-19 17:20:42
    2003-11-19 17:20:42
    2003-11-19 16:20:42
    2003-11-19 16:20:42
    2003-11-19 16:20:42
    @PHP/date/bug26320.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2003-11-19 12:30:42
    2003-11-19 13:30:42
    2003-11-19 12:30:42
    2003-11-19 12:30:42
    @PHP/date/bug28088.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    The following line rightly shows the correct date time:
    04/04/04 2145
    But the following line fails to show the correct date time:
    04/03/04 2245
    The following line rightly shows the correct date time:
    04/04/04 2345
    But the following line fails to show the correct date time:
    04/04/04 0045
    @PHP/date/bug28599.php: SUCCEEDED
    @PHP/date/bug29150.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2005-06-19 22:00:00
    2005-06-20 00:00:00
    @PHP/date/bug29585.php: SUCCEEDED
    @PHP/date/bug29595.php: SUCCEEDED
    @PHP/date/bug33056.php: SUCCEEDED
    @PHP/date/bug33452.php: SUCCEEDED
    @PHP/date/bug33562.php: SUCCEEDED
    @PHP/date/bug33563.php: SUCCEEDED
    @PHP/date/bug33578.php: SUCCEEDED
    @PHP/date/bug33869.php: SUCCEEDED
    @PHP/date/bug34676.php: SUCCEEDED
    @PHP/date/bug34771.php: SUCCEEDED
    @PHP/date/bug35143.php: SUCCEEDED
    @PHP/date/bug35414.php: SUCCEEDED
    @PHP/date/bug35422.php: SUCCEEDED
    @PHP/date/bug35425.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    integer(42)
    integer(1)
    integer(1)
    integer(1)
    integer(1)
    integer(0)
    integer(0)
    integer(1)
    integer(1)
    integer(31)
    integer(1104537661)
    integer(6)
    integer(53)
    integer(5)
    integer(2005)
    integer(0)
    integer(3600)
    integer(292)
    integer(1)
    integer(1)
    integer(1)
    integer(1)
    integer(0)
    integer(0)
    integer(1)
    integer(1)
    integer(31)
    integer(1104559261)
    integer(6)
    integer(53)
    integer(5)
    integer(2005)
    integer(0)
    integer(-18000)
    @PHP/date/bug35456.php: SUCCEEDED
    @PHP/date/bug35624.php: SUCCEEDED
    @PHP/date/bug35630.php: SUCCEEDED
    @PHP/date/bug35699.php: SUCCEEDED
    @PHP/date/bug35705.php: SUCCEEDED
    @PHP/date/bug35885.php: SUCCEEDED
    @PHP/date/bug35887.php: SUCCEEDED
    @PHP/date/date.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    c: 2003-01-23T13:20:59+01:00
    r: Thu, 23 Jan 2003 13:20:59 +0100
    c: 2003-01-23T13:20:59+01:00
    r: Thu, 23 Jan 2003 13:20:59 +0100
    c: 2003-01-23T12:20:59+00:00
    r: Thu, 23 Jan 2003 12:20:59 +0000
    c: 2003-01-23T13:20:59+01:00
    r: Thu, 23 Jan 2003 13:20:59 +0100
    @PHP/date/date_create-1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\date\__input.txt on line 28
    SKIP
    @PHP/date/date_create-2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\date\__input.txt on line 6
    SKIP
    @PHP/date/date_default_timezone_get-3.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Europe/Prague
    America/Chicago
    Europe/Rome
    America/Chicago
    @PHP/date/date_modify-1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\date\__input.txt on line 6
    SKIP
    @PHP/date/date_modify-2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\date\__input.txt on line 6
    SKIP
    @PHP/date/default-timezone-1.php: SUCCEEDED
    @PHP/date/default-timezone-2.php: SUCCEEDED
    @PHP/date/format-negative-timestamp.php: SUCCEEDED
    @PHP/date/strtotime.php: SUCCEEDED
    @PHP/date/timezone-configuration.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    1119125744
    1119125744
    1119125744
    1119125744
    1119129344
    1119125744
    @PHP/doc_examples/test001.php: SUCCEEDED
    @PHP/doc_examples/test002.php: SUCCEEDED
    @PHP/doc_examples/test003.php: SUCCEEDED
    @PHP/doc_examples/test004.php: SUCCEEDED
    @PHP/doc_examples/test005.php: SUCCEEDED
    @PHP/doc_examples/test006.php: SUCCEEDED
    @PHP/doc_examples/test007.php: SUCCEEDED
    @PHP/doc_examples/test008.php: SUCCEEDED
    @PHP/doc_examples/test009.php: SUCCEEDED
    @PHP/doc_examples/test010.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    integer(2147483647)
    int64(2147483648)
    int64(2147483648)
    int64(50000000000)
    integer(2147483647)
    int64(2147483648)
    int64(2147483648)
    int64(50000000000)
    @PHP/doc_examples/test011.php: SUCCEEDED
    @PHP/doc_examples/test013.php: SUCCEEDED
    @PHP/doc_examples/test014.php: SUCCEEDED
    @PHP/doc_examples/test015.php: SUCCEEDED
    @PHP/doc_examples/test016.php: SUCCEEDED
    @PHP/doc_examples/test017.php: SUCCEEDED
    @PHP/doc_examples/test018.php: SUCCEEDED
    @PHP/doc_examples/test019.php: SUCCEEDED
    @PHP/doc_examples/test020.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    double(11.5)
    double(-1299)
    integer(1)
    integer(1)
    integer(11)
    double(14.2)
    double(11)
    double(11)
    double(11.5)
    double(-1299)
    integer(1)
    integer(1)
    integer(11)
    double(14.2)
    double(11)
    double(11)
    @PHP/doc_examples/test021.php: SUCCEEDED
    @PHP/doc_examples/test022.php: SUCCEEDED
    @PHP/doc_examples/test023.php: SUCCEEDED
    @PHP/doc_examples/test024.php: SUCCEEDED
    @PHP/doc_examples/test025.php: SUCCEEDED
    @PHP/doc_examples/test026.php: SUCCEEDED
    @PHP/doc_examples/test027.php: SUCCEEDED
    @PHP/doc_examples/test028.php: SUCCEEDED
    @PHP/doc_examples/test029.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ´┐Żauky
    �auky
    @PHP/doc_examples/test030.php: SUCCEEDED
    @PHP/doc_examples/test031.php: SUCCEEDED
    @PHP/doc_examples/test032.php: SUCCEEDED
    @PHP/doc_examples/test033.php: SUCCEEDED
    @PHP/doc_examples/test034.php: SUCCEEDED
    @PHP/doc_examples/test035.php: SUCCEEDED
    @PHP/doc_examples/test036.php: SUCCEEDED
    @PHP/doc_examples/test037.php: SUCCEEDED
    @PHP/doc_examples/test038.php: SUCCEEDED
    @PHP/doc_examples/test039.php: SUCCEEDED
    @PHP/doc_examples/test040.php: SUCCEEDED
    @PHP/doc_examples/test041.php: SUCCEEDED
    @PHP/doc_examples/test042.php: SUCCEEDED
    @PHP/doc_examples/test043.php: SUCCEEDED
    @PHP/doc_examples/test044.php: SUCCEEDED
    @PHP/doc_examples/test045.php: SUCCEEDED
    @PHP/doc_examples/test046.php: SUCCEEDED
    @PHP/doc_examples/test047.php: SUCCEEDED
    @PHP/doc_examples/test048.php: SUCCEEDED
    @PHP/doc_examples/test049.php: SUCCEEDED
    @PHP/doc_examples/test050.php: SUCCEEDED
    @PHP/doc_examples/test051.php: SUCCEEDED
    @PHP/doc_examples/test052.php: SUCCEEDED
    @PHP/doc_examples/test053.php: SUCCEEDED
    @PHP/doc_examples/test054.php: SUCCEEDED
    @PHP/doc_examples/test055.php: SUCCEEDED
    @PHP/doc_examples/test056.php: SUCCEEDED
    @PHP/doc_examples/test057.php: SUCCEEDED
    @PHP/doc_examples/test058.php: SUCCEEDED
    @PHP/doc_examples/test059.php: SUCCEEDED
    @PHP/doc_examples/test060.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    Static object: object(stdClass)(1)
    {
      ["property"] => integer(1)
    }
    Static object: NULL
    Static object: NULL
    
    Static object: NULL
    Static object: object(stdClass)(1)
    {
      ["property"] => integer(1)
    }
    D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\doc_examples\__input.txt(9,9): warning PHP0181: Assigning the return value of new by reference is deprecated
    
    @PHP/doc_examples/test061.php: SUCCEEDED
    @PHP/doc_examples/test062.php: SUCCEEDED
    @PHP/doc_examples/test063.php: SUCCEEDED
    @PHP/doc_examples/test064.php: SUCCEEDED
    @PHP/doc_examples/test065.php: SUCCEEDED
    @PHP/doc_examples/test066.php: SUCCEEDED
    @PHP/doc_examples/test067.php: SUCCEEDED
    @PHP/doc_examples/test068.php: SUCCEEDED
    @PHP/doc_examples/test069.php: SUCCEEDED
    @PHP/doc_examples/test070.php: SUCCEEDED
    @PHP/doc_examples/test071.php: SUCCEEDED
    @PHP/doc_examples/test072.php: SUCCEEDED
    @PHP/doc_examples/test073.php: SUCCEEDED
    @PHP/doc_examples/test074.php: SUCCEEDED
    @PHP/doc_examples/test075.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Union of $a and $b: 
    array
    {
      ['a'] => string(5) "apple"
      ['b'] => string(6) "banana"
      ['c'] => string(6) "cherry"
    }
    Union of $b and $a: 
    array
    {
      ['a'] => string(4) "pear"
      ['b'] => string(10) "strawberry"
      ['c'] => string(6) "cherry"
    }
    Union of $a and $b: 
    array(3)
    {
      ['a'] => string(5) "apple"
      ['b'] => string(6) "banana"
      ['c'] => string(6) "cherry"
    }
    Union of $b and $a: 
    array(3)
    {
      ['a'] => string(4) "pear"
      ['b'] => string(10) "strawberry"
      ['c'] => string(6) "cherry"
    }
    @PHP/doc_examples/test076.php: SUCCEEDED
    @PHP/doc_examples/test077.php: SUCCEEDED
    @PHP/doc_examples/test078.php: SUCCEEDED
    @PHP/doc_examples/test079.php: SUCCEEDED
    @PHP/doc_examples/test080.php: SUCCEEDED
    @PHP/doc_examples/test081.php: SUCCEEDED
    @PHP/doc_examples/test082.php: SUCCEEDED
    @PHP/doc_examples/test083.php: SUCCEEDED
    @PHP/doc_examples/test084.php: SUCCEEDED
    @PHP/doc_examples/test085.php: SUCCEEDED
    @PHP/doc_examples/test086.php: SUCCEEDED
    @PHP/doc_examples/test087.php: SUCCEEDED
    @PHP/doc_examples/test088.php: SUCCEEDED
    @PHP/doc_examples/test089.php: SUCCEEDED
    @PHP/doc_examples/test090.php: SUCCEEDED
    @PHP/doc_examples/test091.php: SUCCEEDED
    @PHP/doc_examples/test092.php: SUCCEEDED
    @PHP/doc_examples/test093.php: SUCCEEDED
    @PHP/doc_examples/test094.php: SUCCEEDED
    @PHP/doc_examples/test095.php: SUCCEEDED
    @PHP/doc_examples/test096.php: SUCCEEDED
    @PHP/doc_examples/test097.php: SUCCEEDED
    @PHP/doc_examples/test098.php: SUCCEEDED
    @PHP/doc_examples/test099.php: SUCCEEDED
    @PHP/doc_examples/test100.php: SUCCEEDED
    @PHP/doc_examples/test102.php: SUCCEEDED
    @PHP/doc_examples/test103.php: SUCCEEDED
    @PHP/doc_examples/test104.php: SUCCEEDED
    @PHP/doc_examples/test105.php: SUCCEEDED
    @PHP/doc_examples/test107.php: SUCCEEDED
    @PHP/doc_examples/test108.php: SUCCEEDED
    @PHP/doc_examples/test109.php: SUCCEEDED
    @PHP/doc_examples/test110.php: SUCCEEDED
    @PHP/doc_examples/test111.php: SUCCEEDED
    @PHP/doc_examples/test112.php: SUCCEEDED
    @PHP/doc_examples/test113.php: SUCCEEDED
    @PHP/doc_examples/test114.php: SUCCEEDED
    @PHP/doc_examples/test115.php: SUCCEEDED
    @PHP/doc_examples/test116.php: SUCCEEDED
    @PHP/doc_examples/test117.php: SUCCEEDED
    @PHP/doc_examples/test118.php: SUCCEEDED
    @PHP/doc_examples/test119.php: SUCCEEDED
    @PHP/doc_examples/test120.php: SUCCEEDED
    @PHP/doc_examples/test121.php: SUCCEEDED
    @PHP/doc_examples/test122.php: SUCCEEDED
    @PHP/doc_examples/test123.php: SUCCEEDED
    @PHP/doc_examples/test124.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      [10] => integer(2)
    }
    array
    {
      [10] => integer(1)
    }
    array(1)
    {
      [10] => integer(2)
    }
    array(1)
    {
      [10] => integer(1)
    }
    @PHP/doc_examples/test125.php: SUCCEEDED
    @PHP/doc_examples/test126.php: SUCCEEDED
    @PHP/doc_examples/test127.php: SUCCEEDED
    @PHP/doc_examples/test128.php: SUCCEEDED
    @PHP/doc_examples/test129.php: SUCCEEDED
    @PHP/doc_examples/test130.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    Deprecated: Assigning the return value of new by reference is deprecated in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\doc_examples\__input.txt on line 32
    <br />set in constructor<br />set in constructor<br />set in constructor<br />set in constructor<br />set in constructor<br />set in constructor<br />set from outside<br />set from outside<br />set from outside<br />set from outside
    <br />set in constructor<br />set in constructor<br />set in constructor<br />set in constructor<br />set in constructor<br />set in constructor<br />set from outside<br />set from outside<br />set from outside<br />set from outside
    D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\doc_examples\__input.txt(32,1): warning PHP0181: Assigning the return value of new by reference is deprecated
    
    @PHP/doc_examples/test131.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    Deprecated: Assigning the return value of new by reference is deprecated in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\doc_examples\__input.txt on line 31
    <br />class A: 10<br />class B: 10<br />class B: 10<br />class A: 11<br />class B: 11<br />class B: 11
    <br />class A: 10<br />class B: 10<br />class B: 10<br />class A: 11<br />class B: 11<br />class B: 11
    D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\doc_examples\__input.txt(31,1): warning PHP0181: Assigning the return value of new by reference is deprecated
    
    @PHP/doc_examples/test132.php: SUCCEEDED
    @PHP/doc_examples/test133.php: SUCCEEDED
    @PHP/doc_examples/test134.php: SUCCEEDED
    @PHP/doc_examples/test136.php: SUCCEEDED
    @PHP/doc_examples/test137.php: SUCCEEDED
    @PHP/doc_examples/test138.php: SUCCEEDED
    @PHP/doc_examples/test139.php: SUCCEEDED
    @PHP/doc_examples/test148.php: SUCCEEDED
    @PHP/doc_examples/test149.php: SUCCEEDED
    @PHP/doc_examples/test150.php: SUCCEEDED
    @PHP/doc_examples/test151.php: SUCCEEDED
    @PHP/doc_examples/test152.php: SUCCEEDED
    @PHP/doc_examples/test153.php: SUCCEEDED
    @PHP/doc_examples/test154.php: SUCCEEDED
    @PHP/doc_examples/test155.php: SUCCEEDED
    @PHP/doc_examples/test156.php: SUCCEEDED
    @PHP/doc_examples/test158.php: SUCCEEDED
    @PHP/lang/001.php: SUCCEEDED
    @PHP/lang/002.php: SUCCEEDED
    @PHP/lang/003.php: SUCCEEDED
    @PHP/lang/004.php: SUCCEEDED
    @PHP/lang/005.php: SUCCEEDED
    @PHP/lang/006.php: SUCCEEDED
    @PHP/lang/007.php: SUCCEEDED
    @PHP/lang/008.php: SUCCEEDED
    @PHP/lang/009.php: SUCCEEDED
    @PHP/lang/010.php: SUCCEEDED
    @PHP/lang/011.php: SUCCEEDED
    @PHP/lang/012.php: SUCCEEDED
    @PHP/lang/013.php: SUCCEEDED
    @PHP/lang/014.php: SUCCEEDED
    @PHP/lang/015.php: SUCCEEDED
    @PHP/lang/016.php: SUCCEEDED
    @PHP/lang/017.php: SUCCEEDED
    @PHP/lang/018.php: SUCCEEDED
    @PHP/lang/019.php: SUCCEEDED
    @PHP/lang/020.php: SUCCEEDED
    @PHP/lang/021.php: SUCCEEDED
    @PHP/lang/022.php: SUCCEEDED
    @PHP/lang/023.php: SUCCEEDED
    @PHP/lang/024.php: SUCCEEDED
    @PHP/lang/025.php: SUCCEEDED
    @PHP/lang/026.php: SUCCEEDED
    @PHP/lang/027.php: SUCCEEDED
    @PHP/lang/028.php: SUCCEEDED
    @PHP/lang/030.php: SUCCEEDED
    @PHP/lang/032.php: SUCCEEDED
    @PHP/lang/036.php: SUCCEEDED
    @PHP/lang/037.php: SUCCEEDED
    @PHP/lang/038.php: SUCCEEDED
    @PHP/lang/039.php: SUCCEEDED
    @PHP/lang/040.php: SUCCEEDED
    @PHP/lang/bison1.php: SUCCEEDED
    @PHP/lang/bug17115.php: SUCCEEDED
    @PHP/lang/bug18872.php: SUCCEEDED
    @PHP/lang/bug19943.php: SUCCEEDED
    @PHP/lang/bug20175.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    Deprecated: Assigning the return value of new by reference is deprecated in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\lang\__input.txt on line 110
    foo_static()
    foo_global()
    foo:1
    foo_static()
    foo:1
    bar_static()
    bar_global()
    bar:1
    bar_static()
    bar:1
    wow_static()
    wow_global()
    wow:1
    wow_static()
    wow:1
    oop_test()
    oop_static()
    oop_class()
    oop:1
    oop_static()
    oop:1
    oop_test()
    oop_static()
    oop:1
    foo_static()
    foo_global()
    foo:1
    foo_static()
    foo:1
    bar_static()
    bar_global()
    bar:1
    bar_static()
    bar_global()
    bar:2
    wow_static()
    wow_global()
    wow:1
    wow_static()
    wow:1
    oop_test()
    oop_static()
    oop_class()
    oop:1
    oop_static()
    oop:1
    oop_test()
    oop_static()
    oop:1
    D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\lang\__input.txt(110,4): warning PHP0181: Assigning the return value of new by reference is deprecated
    
    @PHP/lang/bug21094.php: SUCCEEDED
    @PHP/lang/bug21600.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Strict Standards: Only variables should be assigned by reference in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\lang\__input.txt on line 5
    array
    {
      'foo' => 'test'
    }
    
    Strict Standards: Only variables should be assigned by reference in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\lang\__input.txt on line 12
    array
    {
      'foo' => 'test'
    }
    array
    {
      'foo' => 'test'
    }
    array
    {
      'foo' => 'test'
    }
    @PHP/lang/bug21669.php: SUCCEEDED
    @PHP/lang/bug21849.php: SUCCEEDED
    @PHP/lang/bug21961.php: SUCCEEDED
    @PHP/lang/bug22231.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    Deprecated: Assigning the return value of new by reference is deprecated in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\lang\__input.txt on line 10
    object
    {
      'fubar' => 'fubar'
    }
    'fubar'
    'fubar'
    object
    {
      'fubar' => 'fubar'
    }
    'fubar'
    'fubar'
    object
    {
      'fubar' => 'fubar'
    }
    'fubar'
    'fubar'
    object
    {
      'fubar' => 'fubar'
    }
    'fubar'
    'fubar'
    D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\lang\__input.txt(10,5): warning PHP0181: Assigning the return value of new by reference is deprecated
    
    @PHP/lang/bug22367.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    Strict Standards: Declaration of bar::a() should be compatible with that of foo::a() in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\lang\__input.txt on line 47
    integer(5)
    FALSE
    FALSE
    array
    {
      0 => integer(0)
      1 => integer(1)
      2 => integer(2)
      3 => integer(3)
      4 => integer(4)
    }
    array
    {
      0 => integer(0)
      1 => integer(1)
      2 => integer(2)
      3 => integer(3)
      4 => integer(4)
    }
    integer(2)
    TRUE
    TRUE
    array
    {
      0 => integer(0)
      1 => integer(1)
      2 => integer(2)
      3 => integer(3)
      4 => integer(4)
    }
    array
    {
      0 => integer(0)
      1 => integer(1)
      2 => integer(2)
      3 => integer(3)
      4 => integer(4)
    }
    integer(5)
    FALSE
    FALSE
    array
    {
      0 => integer(0)
      1 => integer(1)
      2 => integer(2)
      3 => integer(3)
      4 => integer(4)
    }
    array
    {
      0 => integer(0)
      1 => integer(1)
      2 => integer(2)
      3 => integer(3)
      4 => integer(4)
    }
    integer(2)
    TRUE
    TRUE
    array
    {
      0 => integer(0)
      1 => integer(1)
      2 => integer(2)
      3 => integer(3)
      4 => integer(4)
    }
    array
    {
      0 => integer(0)
      1 => integer(1)
      2 => integer(2)
      3 => integer(3)
      4 => integer(4)
    }
    D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\lang\__input.txt(41,12): warning PHP0180: Declaration of bar::a() should be compatible with that of foo::a()
    
    @PHP/lang/bug22510.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    Deprecated: Assigning the return value of new by reference is deprecated in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\lang\__input.txt on line 77
    ok1
    bar::run1
    foo::method1
    foo::method1
    foo::finalize
    done!
    ok2
    bar::run2
    foo::method2
    foo::method2
    foo::finalize
    done!
    ok3
    bar::run3
    foo::method3
    foo::method3
    foo::finalize
    done!
    ouch
    bar::run1
    foo::method1
    foo::method1
    foo::finalize
    I'm alive!
    ok1
    bar::run1
    foo::method1
    foo::method1
    foo::finalize
    done!
    ok2
    bar::run2
    foo::method2
    foo::method2
    foo::finalize
    done!
    ok3
    bar::run3
    foo::method3
    foo::method3
    foo::finalize
    done!
    ouch
    bar::run1
    foo::method1
    foo::method1
    foo::finalize
    I'm alive!
    D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\lang\__input.txt(77,1): warning PHP0181: Assigning the return value of new by reference is deprecated
    
    @PHP/lang/bug22592.php: SUCCEEDED
    @PHP/lang/bug22690.php: SUCCEEDED
    @PHP/lang/bug23279.php: SUCCEEDED
    @PHP/lang/bug23384.php: FAILED
    Script hung upNo errorsSuccess
    Expected test outputReal script output
    Unhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---> System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> PHP.Core.Debug+AssertException: Assertion failed: Add      public static readonly object HUN = (int)100; instead of AddConstant usage.
       at PHP.Core.Debug.Fail(String message)
       at PHP.Core.Reflection.PhpTypeDesc.AddConstant(String name, Object value)
       at <__input.txt>.Foo.__PopulateTypeDesc(PhpTypeDesc )
       --- End of inner exception stack trace ---
       at System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
       at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)
       at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
       at System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters)
       at PHP.Core.Reflection.PhpTypeDesc.AutoPopulate()
       at PHP.Core.Reflection.PhpTypeDesc.ReflectMethods()
       at PHP.Core.Reflection.DTypeDesc.get_Methods()
       at PHP.Core.Reflection.DTypeDesc.GetMember[N,T](GetMemberDictionary`2 dictionary, N name, DTypeDesc context, LookupFlags flags, T& member)
       at PHP.Core.Reflection.DTypeDesc.GetMethod(Name methodName, DTypeDesc context, DRoutineDesc& method)
       at PHP.Core.Operators.GetStaticMethodDesc(DTypeDesc requestedType, String methodName, DObject& self, DTypeDesc caller, ScriptContext context, Boolean quiet, Boolean removeFrame)
       at PHP.Core.Operators.InvokeStaticMethod(DTypeDesc type, Object methodName, DObject self, DTypeDesc caller, ScriptContext context)
       at <__input.txt>.<Script>.<Main>(ScriptContext <context>, Dictionary`2 <locals>, DObject , DTypeDesc , Boolean ) in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\lang\__input.txt:line 16
       at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)
       at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)
       --- End of inner exception stack trace ---
       at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)
       at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)
       at <Global>.Run(String[] )
    
    @PHP/lang/bug23489.php: SUCCEEDED
    @PHP/lang/bug23524.php: SUCCEEDED
    @PHP/lang/bug23922.php: SUCCEEDED
    @PHP/lang/bug24054.php: SUCCEEDED
    @PHP/lang/bug24396.php: SUCCEEDED
    @PHP/lang/bug24403.php: SUCCEEDED
    @PHP/lang/bug24436.php: SUCCEEDED
    @PHP/lang/bug24499.php: SUCCEEDED
    @PHP/lang/bug24640.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    double(1700000000000000089258092433847514422797596587883870563356951996370064178581143932836831337636761368874297554515902592900802289500112731978596146714137401870842258241575178866354311397451139753100927220499450359906637902366244989496126909662726242240784739940994096632824796638102733857671280980918272.0000000000)
    1.7E+300
    
    ------
    double(0.0000000000)
    1.7E-300
    
    ------
    double(17000000000000001584208052028780237480128823455860622330108867175329927830437888.0000000000)
    1.7E+79
    
    ------
    double(0.0000000000)
    1.7E-79
    
    ------
    double(169999999999999996096025832433329868941658043870400163508258284150340918121070592.0000000000)
    1.7E+80
    
    ------
    double(0.0000000000)
    1.7E-80
    
    ------
    double(1700000000000000013616404158611892038375594280539217794530130541777964808366194688.0000000000)
    1.7E+81
    
    ------
    double(0.0000000000)
    1.7E-81
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    1.6999810742106E-319
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    1.7000798873397E-320
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    1.6995858216939E-321
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    0
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    0
    
    ------
    double(1700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+300
    
    ------
    double(0.0000000000)
    1.70000000000003E-300
    
    ------
    double(17000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+79
    
    ------
    double(0.0000000000)
    1.70000000000001E-79
    
    ------
    double(170000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+80
    
    ------
    double(0.0000000000)
    1.70000000000001E-80
    
    ------
    double(1700000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+81
    
    ------
    double(0.0000000000)
    1.70000000000001E-81
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    1.69998107421056E-319
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    1.70007988733973E-320
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    1.69464516523548E-321
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    0
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    0
    
    ------
    @PHP/lang/bug24652.php: SUCCEEDED
    @PHP/lang/bug24658.php: SUCCEEDED
    @PHP/lang/bug24783.php: SUCCEEDED
    @PHP/lang/bug24926.php: SUCCEEDED
    @PHP/lang/bug25547.php: SUCCEEDED
    @PHP/lang/bug25652.php: SUCCEEDED
    @PHP/lang/bug25922.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Undefined index here: 'error'
    Undefined index here: ''
    @PHP/lang/bug26182.php: SUCCEEDED
    @PHP/lang/bug26696.php: SUCCEEDED
    @PHP/lang/bug26866.php: SUCCEEDED
    @PHP/lang/bug26869.php: SUCCEEDED
    @PHP/lang/bug27354.php: SUCCEEDED
    @PHP/lang/bug27439.php: SUCCEEDED
    @PHP/lang/bug27535.php: SUCCEEDED
    @PHP/lang/bug28213.php: SUCCEEDED
    @PHP/lang/bug28800.php: SUCCEEDED
    @PHP/lang/bug29566.php: SUCCEEDED
    @PHP/lang/bug29893.php: SUCCEEDED
    @PHP/lang/bug29944.php: SUCCEEDED
    @PHP/lang/bug30638.php: SUCCEEDED
    @PHP/lang/bug30726.php: SUCCEEDED
    @PHP/lang/bug30862.php: SUCCEEDED
    @PHP/lang/bug32924.php: SUCCEEDED
    @PHP/lang/bug35382.php: SUCCEEDED
    @PHP/lang/bug7515.php: SUCCEEDED
    @PHP/lang/each_binary_safety.php: SUCCEEDED
    @PHP/lang/error_2_exception_001.php: SUCCEEDED
    @PHP/lang/foreach_with_object_001.php: SUCCEEDED
    @PHP/lang/foreach_with_references_001.php: SUCCEEDED
    @PHP/lang/type_hints_001.php: SUCCEEDED
    @PHP/standard/array/001.php: SUCCEEDED
    @PHP/standard/array/003.php: SUCCEEDED
    @PHP/standard/array/004.php: SUCCEEDED
    @PHP/standard/array/005.php: SUCCEEDED
    @PHP/standard/array/008.php: SUCCEEDED
    @PHP/standard/array/array_change_key_case.php: SUCCEEDED
    @PHP/standard/array/array_chunk.php: SUCCEEDED
    @PHP/standard/array/array_count_values.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array(0) [empty]
    
    array
    {
      [0] => integer(1)
    }
    
    array
    {
      [1] => integer(1)
    }
    
    array
    {
      [-1] => integer(1)
    }
    
    array
    {
      [0] => integer(2)
    }
    
    array
    {
      [0] => integer(1)
      [1] => integer(1)
    }
    
    array
    {
      [1] => integer(2)
    }
    
    array
    {
      [1] => integer(2)
      ['hello'] => integer(2)
      ['world'] => integer(1)
    }
    
    array
    {
      ['hello'] => integer(2)
      ['world'] => integer(1)
    }
    
    array
    {
      [''] => integer(2)
      ['world'] => integer(3)
      ['hello'] => integer(4)
    }
    
    array
    {
      [0] => integer(1)
    }
    
    array
    {
      [1] => integer(1)
    }
    array(0) [empty]
    
    array(1)
    {
      [0] => integer(1)
    }
    
    array(1)
    {
      [1] => integer(1)
    }
    
    array(1)
    {
      [-1] => integer(1)
    }
    
    array(1)
    {
      [0] => integer(2)
    }
    
    array(2)
    {
      [0] => integer(1)
      [1] => integer(1)
    }
    
    array(1)
    {
      [1] => integer(2)
    }
    
    array(3)
    {
      [1] => integer(2)
      ['hello'] => integer(2)
      ['world'] => integer(1)
    }
    
    array(2)
    {
      ['hello'] => integer(2)
      ['world'] => integer(1)
    }
    
    array(3)
    {
      [''] => integer(2)
      ['world'] => integer(3)
      ['hello'] => integer(4)
    }
    
    array(1)
    {
      [0] => integer(1)
    }
    
    array(1)
    {
      [1] => integer(1)
    }
    @PHP/standard/array/array_diff_1.php: SUCCEEDED
    @PHP/standard/array/array_diff_key.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ------ Test 1 --------
    array
    {
      [1] => &integer(2)
      [6] => &integer(12)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    array
    {
      [1] => &integer(2)
      [6] => &integer(12)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    ------ Test 2 --------
    array
    {
      [1] => &integer(2)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    array
    {
      [1] => &integer(2)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    ------ Test 3 --------
    array
    {
      [1] => &integer(2)
      [6] => &integer(12)
      [2] => &integer(4)
      [15] => &integer(30)
      [1200] => &integer(2400)
      [-2500] => &integer(-5000)
    }
    array
    {
      [1] => &integer(2)
      [6] => &integer(12)
      [2] => &integer(4)
      [15] => &integer(30)
      [1200] => &integer(2400)
      [-2500] => &integer(-5000)
    }
    ------ Test 4 --------
    array
    {
      [1] => &integer(2)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    array
    {
      [1] => &integer(2)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    ------ Test 5 --------
    array
    {
      [1] => &integer(2)
      [6] => &integer(12)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    array
    {
      [1] => &integer(2)
      [6] => &integer(12)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    ------ Test 6 --------
    array
    {
      [1] => &integer(2)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    array
    {
      [1] => &integer(2)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    ------ Test 7 --------
    array
    {
      [7] => &integer(14)
      [11] => &integer(22)
      [1100] => &integer(2200)
    }
    array
    {
      [7] => &integer(14)
      [11] => &integer(22)
      [1100] => &integer(2200)
    }
    ------ Test 8 --------
    array
    {
      [0] => &integer(0)
      [7] => &integer(14)
      [2] => &integer(4)
      [11] => &integer(22)
      [1100] => &integer(2200)
      [-2500] => &integer(-5000)
    }
    array
    {
      [0] => &integer(0)
      [7] => &integer(14)
      [2] => &integer(4)
      [11] => &integer(22)
      [1100] => &integer(2200)
      [-2500] => &integer(-5000)
    }
    ------ Test 9 --------
    array
    {
      [7] => &integer(14)
      [11] => &integer(22)
      [1100] => &integer(2200)
    }
    array
    {
      [7] => &integer(14)
      [11] => &integer(22)
      [1100] => &integer(2200)
    }
    ------ Test 1 --------
    array(4)
    {
      [1] => &integer(2)
      [6] => &integer(12)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    array(4)
    {
      [1] => &integer(2)
      [6] => &integer(12)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    ------ Test 2 --------
    array(3)
    {
      [1] => &integer(2)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    array(3)
    {
      [1] => &integer(2)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    ------ Test 3 --------
    array(6)
    {
      [1] => &integer(2)
      [6] => &integer(12)
      [2] => &integer(4)
      [15] => &integer(30)
      [1200] => &integer(2400)
      [-2500] => &integer(-5000)
    }
    array(6)
    {
      [1] => &integer(2)
      [6] => &integer(12)
      [2] => &integer(4)
      [15] => &integer(30)
      [1200] => &integer(2400)
      [-2500] => &integer(-5000)
    }
    ------ Test 4 --------
    array(3)
    {
      [1] => &integer(2)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    array(3)
    {
      [1] => &integer(2)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    ------ Test 5 --------
    array(4)
    {
      [1] => &integer(2)
      [6] => &integer(12)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    array(4)
    {
      [1] => &integer(2)
      [6] => &integer(12)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    ------ Test 6 --------
    array(3)
    {
      [1] => &integer(2)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    array(3)
    {
      [1] => &integer(2)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    ------ Test 7 --------
    array(3)
    {
      [7] => &integer(14)
      [11] => &integer(22)
      [1100] => &integer(2200)
    }
    array(3)
    {
      [7] => &integer(14)
      [11] => &integer(22)
      [1100] => &integer(2200)
    }
    ------ Test 8 --------
    array(6)
    {
      [0] => &integer(0)
      [7] => &integer(14)
      [2] => &integer(4)
      [11] => &integer(22)
      [1100] => &integer(2200)
      [-2500] => &integer(-5000)
    }
    array(6)
    {
      [0] => &integer(0)
      [7] => &integer(14)
      [2] => &integer(4)
      [11] => &integer(22)
      [1100] => &integer(2200)
      [-2500] => &integer(-5000)
    }
    ------ Test 9 --------
    array(3)
    {
      [7] => &integer(14)
      [11] => &integer(22)
      [1100] => &integer(2200)
    }
    array(3)
    {
      [7] => &integer(14)
      [11] => &integer(22)
      [1100] => &integer(2200)
    }
    @PHP/standard/array/array_intersect_key.php: SUCCEEDED
    @PHP/standard/array/array_sum.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    integer(500500)
    int64(5000050000)
    integer(500500)
    int64(5000050000)
    @PHP/standard/array/array_walk_recursive.php: SUCCEEDED
    @PHP/standard/array/bug12776.php: SUCCEEDED
    @PHP/standard/array/bug14580.php: SUCCEEDED
    @PHP/standard/array/bug20381.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      ['a1'] => integer(1)
      ['a2'] => array
      {
        [0] => integer(1)
        [1] => integer(2)
        [2] => integer(3)
      }
      ['a3'] => array
      {
        ['a'] => array
        {
          [0] => integer(10)
          [1] => integer(20)
          [2] => integer(30)
        }
        ['b'] => string(1) "b"
      }
    }
    array
    {
      ['a1'] => integer(1)
      ['a2'] => array
      {
        [0] => integer(1)
        [1] => integer(2)
        [2] => integer(3)
      }
      ['a3'] => array
      {
        ['a'] => array
        {
          [0] => integer(10)
          [1] => integer(20)
          [2] => integer(30)
        }
        ['b'] => string(1) "b"
      }
    }
    array
    {
      ['a1'] => integer(2)
      ['a2'] => array
      {
        [0] => integer(3)
        [1] => integer(4)
        [2] => integer(5)
      }
      ['a3'] => array
      {
        ['c'] => string(2) "cc"
        ['a'] => array
        {
          [0] => integer(10)
          [1] => integer(40)
        }
      }
    }
    array
    {
      ['a1'] => array
      {
        [0] => integer(1)
        [1] => integer(2)
      }
      ['a2'] => array
      {
        [0] => integer(1)
        [1] => integer(2)
        [2] => integer(3)
        [3] => integer(3)
        [4] => integer(4)
        [5] => integer(5)
      }
      ['a3'] => array
      {
        ['a'] => array
        {
          [0] => integer(10)
          [1] => integer(20)
          [2] => integer(30)
          [3] => integer(10)
          [4] => integer(40)
        }
        ['b'] => string(1) "b"
        ['c'] => string(2) "cc"
      }
    }
    array(3)
    {
      ['a1'] => integer(1)
      ['a2'] => array(3)
      {
        [0] => integer(1)
        [1] => integer(2)
        [2] => integer(3)
      }
      ['a3'] => array(2)
      {
        ['a'] => array(3)
        {
          [0] => integer(10)
          [1] => integer(20)
          [2] => integer(30)
        }
        ['b'] => string(1) "b"
      }
    }
    array(3)
    {
      ['a1'] => integer(1)
      ['a2'] => array(3)
      {
        [0] => integer(1)
        [1] => integer(2)
        [2] => integer(3)
      }
      ['a3'] => array(2)
      {
        ['a'] => array(3)
        {
          [0] => integer(10)
          [1] => integer(20)
          [2] => integer(30)
        }
        ['b'] => string(1) "b"
      }
    }
    array(3)
    {
      ['a1'] => integer(2)
      ['a2'] => array(3)
      {
        [0] => integer(3)
        [1] => integer(4)
        [2] => integer(5)
      }
      ['a3'] => array(2)
      {
        ['c'] => string(2) "cc"
        ['a'] => array(2)
        {
          [0] => integer(10)
          [1] => integer(40)
        }
      }
    }
    array(3)
    {
      ['a1'] => array(2)
      {
        [0] => integer(1)
        [1] => integer(2)
      }
      ['a2'] => array(6)
      {
        [0] => integer(1)
        [1] => integer(2)
        [2] => integer(3)
        [3] => integer(3)
        [4] => integer(4)
        [5] => integer(5)
      }
      ['a3'] => array(3)
      {
        ['a'] => array(5)
        {
          [0] => integer(10)
          [1] => integer(20)
          [2] => integer(30)
          [3] => integer(10)
          [4] => integer(40)
        }
        ['b'] => string(1) "b"
        ['c'] => string(2) "cc"
      }
    }
    @PHP/standard/array/bug20865.php: SUCCEEDED
    @PHP/standard/array/bug21182.php: SUCCEEDED
    @PHP/standard/array/bug21918.php: SUCCEEDED
    @PHP/standard/array/bug21998.php: SUCCEEDED
    @PHP/standard/array/bug22088.php: SUCCEEDED
    @PHP/standard/array/bug22463.php: SUCCEEDED
    @PHP/standard/array/bug23581.php: SUCCEEDED
    @PHP/standard/array/bug23788.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      [0] => &integer(123)
      [1] => &bool(true)
    }
    array
    {
      [0] => &integer(123)
      [1] => &bool(true)
    }
    array(2)
    {
      [0] => &integer(123)
      [1] => &bool(true)
    }
    array(2)
    {
      [0] => &integer(123)
      [1] => &bool(true)
    }
    @PHP/standard/array/bug24198.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      ['a'] => array
      {
        [0] => string(2) "aa"
        [1] => string(2) "aa"
      }
      ['b'] => array
      {
        [0] => string(2) "bb"
        [1] => string(2) "bb"
      }
    }
    array(2)
    {
      ['a'] => array(2)
      {
        [0] => string(2) "aa"
        [1] => string(2) "aa"
      }
      ['b'] => array(2)
      {
        [0] => string(2) "bb"
        [1] => string(2) "bb"
      }
    }
    @PHP/standard/array/bug24220.php: SUCCEEDED
    @PHP/standard/array/bug24766.php: SUCCEEDED
    @PHP/standard/array/bug24897.php: SUCCEEDED
    @PHP/standard/array/bug24980.php: SUCCEEDED
    @PHP/standard/array/bug25359.php: SUCCEEDED
    @PHP/standard/array/bug25708.php: SUCCEEDED
    @PHP/standard/array/bug25758.php: SUCCEEDED
    @PHP/standard/array/bug26458.php: SUCCEEDED
    @PHP/standard/array/bug28974.php: SUCCEEDED
    @PHP/standard/array/bug29493.php: SUCCEEDED
    @PHP/standard/array/bug30266.php: SUCCEEDED
    @PHP/standard/array/bug30833.php: SUCCEEDED
    @PHP/standard/array/bug31158.php: SUCCEEDED
    @PHP/standard/array/bug31213.php: SUCCEEDED
    @PHP/standard/array/bug32021.php: SUCCEEDED
    @PHP/standard/array/bug33382.php: SUCCEEDED
    @PHP/standard/array/bug33989.php: SUCCEEDED
    @PHP/standard/array/bug34227.php: SUCCEEDED
    @PHP/standard/array/bug34982.php: SUCCEEDED
    @PHP/standard/array/bug35014.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    integer(0)
    integer(0)
    integer(3)
    integer(9)
    double(1.0000000000)
    int64(9999999800000001)
    int64(8589934590)
    integer(0)
    integer(0)
    integer(3)
    integer(9)
    double(1.0000000000)
    int64(9999999800000001)
    int64(8589934590)
    @PHP/standard/array/bug35022.php: SUCCEEDED
    @PHP/standard/array/bug35821.php: SUCCEEDED
    @PHP/standard/array/count_recursive.php: SUCCEEDED
    @PHP/standard/array/locale_sort.php: SUCCEEDED
    @PHP/standard/array/range.php: SUCCEEDED
    @PHP/standard/assert/assert.php: SUCCEEDED
    @PHP/standard/general_functions/001.php: SUCCEEDED
    @PHP/standard/general_functions/002.php: SUCCEEDED
    @PHP/standard/general_functions/003.php: SUCCEEDED
    @PHP/standard/general_functions/004.php: SUCCEEDED
    @PHP/standard/general_functions/005.php: SUCCEEDED
    @PHP/standard/general_functions/006.php: SUCCEEDED
    @PHP/standard/general_functions/007.php: SUCCEEDED
    @PHP/standard/general_functions/009.php: SUCCEEDED
    @PHP/standard/general_functions/bug25038.php: SUCCEEDED
    @PHP/standard/general_functions/bug27678.php: SUCCEEDED
    @PHP/standard/general_functions/bug29038.php: SUCCEEDED
    @PHP/standard/general_functions/bug31190.php: SUCCEEDED
    @PHP/standard/general_functions/bug32647.php: SUCCEEDED
    @PHP/standard/general_functions/bug35229.php: SUCCEEDED
    @PHP/standard/general_functions/is_resource.php: SUCCEEDED
    @PHP/standard/math/abs.php: SUCCEEDED
    @PHP/standard/math/bug24142.php: SUCCEEDED
    @PHP/standard/math/bug25694.php: SUCCEEDED
    @PHP/standard/math/bug27646.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    double(INF-INF)
    'd:-INF;'
    double(INF-INF)
    double(INF-INF)
    'd:INF;'
    double(INF-INF)
    double(NaNInfini)
    'd:NAN;'
    double(NaNInfini)
    double(-Infinity)
    'd:-INF;'
    double(-Infinity)
    double(Infinity)
    'd:INF;'
    double(Infinity)
    double(NaN)
    'd:NAN;'
    double(NaN)
    @PHP/standard/math/bug30069.php: SUCCEEDED
    @PHP/standard/math/bug30695.php: SUCCEEDED
    @PHP/standard/math/floorceil.php: SUCCEEDED
    @PHP/standard/math/hexdec.php: SUCCEEDED
    @PHP/standard/math/log.php: SUCCEEDED
    @PHP/standard/math/pow.php: SUCCEEDED
    @PHP/standard/math/round.php: SUCCEEDED
    @PHP/standard/reg/001.php: SUCCEEDED
    @PHP/standard/reg/002.php: SUCCEEDED
    @PHP/standard/reg/003.php: SUCCEEDED
    @PHP/standard/reg/004.php: SUCCEEDED
    @PHP/standard/reg/005.php: SUCCEEDED
    @PHP/standard/reg/006.php: SUCCEEDED
    @PHP/standard/reg/007.php: SUCCEEDED
    @PHP/standard/reg/008.php: SUCCEEDED
    @PHP/standard/reg/009.php: SUCCEEDED
    @PHP/standard/reg/010.php: SUCCEEDED
    @PHP/standard/reg/011.php: SUCCEEDED
    @PHP/standard/reg/012.php: SUCCEEDED
    @PHP/standard/reg/013.php: SUCCEEDED
    @PHP/standard/reg/014.php: SUCCEEDED
    @PHP/standard/reg/015.php: SUCCEEDED
    @PHP/standard/reg/016.php: SUCCEEDED
    @PHP/standard/serialize/001.php: SUCCEEDED
    @PHP/standard/serialize/002.php: SUCCEEDED
    @PHP/standard/serialize/003.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    d:100;
    double(100.0000000000)
    
    d:51999999999999996980101120;
    double(51999999999999996980101120.0000000000)
    
    d:8.9999999999999995265585574287341141808127531476202420890331268310546875E-9;
    double(0.0000000090)
    d:100;
    double(100.0000000000)
    
    d:5.2000000000000006E+25;
    double(52000000000000000000000000.0000000000)
    
    d:9.0000000000000045E-09;
    double(0.0000000090)
    @PHP/standard/serialize/004.php: SUCCEEDED
    @PHP/standard/serialize/005.php: SUCCEEDED
    @PHP/standard/serialize/006.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    'O:3:"´┐Ż":1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    object
    {
      '´┐Ż' => '´┐Ż'
    }
    'a:1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    array
    {
      '´┐Ż' => '´┐Ż'
    }
    'O:3:"´┐Ż":1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    object
    {
      'ďż˝' => 'ďż˝'
    }
    'a:1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    array
    {
      'ďż˝' => 'ďż˝'
    }
    @PHP/standard/serialize/bug14293.php: SUCCEEDED
    @PHP/standard/serialize/bug21957.php: SUCCEEDED
    @PHP/standard/serialize/bug23298.php: SUCCEEDED
    @PHP/standard/serialize/bug24063.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0.1 0.1
    0.01 0.01
    0.001 0.001
    0.0001 0.0001
    1.0E-5 1.0E-5
    1.0E-6 1.0E-6
    1.0E-7 1.0E-7
    1.0E-8 1.0E-8
    1.0E-9 1.0E-9
    0.1 0.1
    0.01 0.01
    0.001 0.001
    0.0001 0.0001
    1E-05 1E-05
    1E-06 1E-06
    1E-07 1E-07
    1E-08 1E-08
    1E-09 1E-09
    @PHP/standard/serialize/bug25378.php: SUCCEEDED
    @PHP/standard/serialize/bug26762.php: SUCCEEDED
    @PHP/standard/serialize/bug27469.php: SUCCEEDED
    @PHP/standard/serialize/bug28325.php: SUCCEEDED
    @PHP/standard/serialize/bug30234.php: SUCCEEDED
    @PHP/standard/serialize/bug31402.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    Deprecated: Assigning the return value of new by reference is deprecated in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\standard\serialize\__input.txt on line 19
    object
    {
      'A' => 
      array
      {
        1 => 
        object
        {
          'i' => integer(1)
        }
        2 => 
        object
        {
          'i' => integer(2)
        }
        3 => 
        object
        {
          'i' => integer(2)
        }
      }
      'B' => 
      object
      {
        'i' => integer(1)
      }
    }
    object
    {
      'A' => 
      array
      {
        1 => 
        object
        {
          'i' => integer(1)
        }
        2 => 
        object
        {
          'i' => integer(2)
        }
        3 => 
        object
        {
          'i' => integer(2)
        }
      }
      'B' => 
      object
      {
        'i' => integer(1)
      }
    }
    D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\standard\serialize\__input.txt(19,5): warning PHP0181: Assigning the return value of new by reference is deprecated
    
    @PHP/standard/serialize/bug31442.php: SUCCEEDED
    @PHP/standard/strings/add-and-stripcslashes.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    kaboemkara!
    foo\b\a\r\b\az
    \f\o\o\[ \]
    \zoo['\.']
    \abcd\e\f\g\h\i\j\k\l\m\n\o\pqrstuvwxy\z
    1
    5d
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\standard\strings\__input.txt at expression on line 3, column 1.
    
    kaboemkara!
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\standard\strings\__input.txt at expression on line 5, column 1.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\standard\strings\__input.txt at expression on line 6, column 1.
    
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\standard\strings\__input.txt at expression on line 8, column 1.
    
    1
    5d
    @PHP/standard/strings/add-and-stripslashes.php: SUCCEEDED
    @PHP/standard/strings/basename.php: SUCCEEDED
    @PHP/standard/strings/bin2hex.php: SUCCEEDED
    @PHP/standard/strings/bug20108.php: SUCCEEDED
    @PHP/standard/strings/bug20169.php: SUCCEEDED
    @PHP/standard/strings/bug20261.php: SUCCEEDED
    @PHP/standard/strings/bug20927.php: SUCCEEDED
    @PHP/standard/strings/bug21338.php: SUCCEEDED
    @PHP/standard/strings/bug21453.php: SUCCEEDED
    @PHP/standard/strings/bug21730.php: SUCCEEDED
    @PHP/standard/strings/bug21744.php: SUCCEEDED
    @PHP/standard/strings/bug22008.php: SUCCEEDED
    @PHP/standard/strings/bug22187.php: SUCCEEDED
    @PHP/standard/strings/bug22224.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      0 => 
      object
      {
      }
      1 => 
      object
      {
      }
    }
    @PHP/standard/strings/bug22227.php: SUCCEEDED
    @PHP/standard/strings/bug22904.php: SUCCEEDED
    @PHP/standard/strings/bug23650.php: SUCCEEDED
    @PHP/standard/strings/bug23894.php: SUCCEEDED
    @PHP/standard/strings/bug24098.php: SUCCEEDED
    @PHP/standard/strings/bug24208.php: SUCCEEDED
    @PHP/standard/strings/bug24281.php: SUCCEEDED
    @PHP/standard/strings/bug25671.php: SUCCEEDED
    @PHP/standard/strings/bug25707.php: SUCCEEDED
    @PHP/standard/strings/bug26878.php: SUCCEEDED
    @PHP/standard/strings/bug26973.php: SUCCEEDED
    @PHP/standard/strings/bug27276.php: SUCCEEDED
    @PHP/standard/strings/bug27278.php: SUCCEEDED
    @PHP/standard/strings/bug27295.php: SUCCEEDED
    @PHP/standard/strings/bug27457.php: SUCCEEDED
    @PHP/standard/strings/bug27675.php: SUCCEEDED
    @PHP/standard/strings/bug28386.php: SUCCEEDED
    @PHP/standard/strings/bug33076.php: SUCCEEDED
    @PHP/standard/strings/chr_ord.php: SUCCEEDED
    @PHP/standard/strings/chunk_split.php: SUCCEEDED
    @PHP/standard/strings/count_chars.php: SUCCEEDED
    @PHP/standard/strings/crc32.php: SUCCEEDED
    @PHP/standard/strings/explode.php: SUCCEEDED
    @PHP/standard/strings/implode.php: SUCCEEDED
    @PHP/standard/strings/md5.php: SUCCEEDED
    @PHP/standard/strings/md5raw.php: SUCCEEDED
    @PHP/standard/strings/nl2br.php: SUCCEEDED
    @PHP/standard/strings/sha1.php: SUCCEEDED
    @PHP/standard/strings/sha1raw.php: SUCCEEDED
    @PHP/standard/strings/sprintf_f.php: SUCCEEDED
    @PHP/standard/strings/strcspn.php: SUCCEEDED
    @PHP/standard/strings/strings001.php: SUCCEEDED
    @PHP/standard/strings/strpos.php: SUCCEEDED
    @PHP/standard/strings/strrev.php: SUCCEEDED
    @PHP/standard/strings/strripos.php: SUCCEEDED
    @PHP/standard/strings/strrpos.php: SUCCEEDED
    @PHP/standard/strings/strspn.php: SUCCEEDED
    @PHP/standard/strings/strstr.php: SUCCEEDED
    @PHP/standard/strings/strtoupper.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    cfbfbdcfbfbdcfbfbd
    cfafbdcfafbdcfafbd
    @PHP/standard/strings/strtr.php: SUCCEEDED
    @PHP/standard/strings/strval.php: SUCCEEDED
    @PHP/standard/strings/str_repeat.php: SUCCEEDED
    @PHP/standard/strings/str_shuffle.php: SUCCEEDED
    @PHP/standard/strings/str_word_count.php: SUCCEEDED
    @PHP/standard/strings/substr_count.php: SUCCEEDED
    @PHP/standard/strings/substr_replace.php: SUCCEEDED
    @PHP/standard/strings/wordwrap.php: SUCCEEDED
    @PHP/standard/time/001.php: SUCCEEDED
    @PHP/standard/time/idate.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    U: 1043324459
    Y: 2003
    z: 22
    y: 3
    m: 1
    n: 1
    d: 23
    j: 23
    H: 13
    G: 13
    h: 1
    g: 1
    i: 20
    s: 59
    t: 31
    w: 4
    L: 0
    B: 556
    I: 0
    W: 4
    U: 1043324459
    Y: 2003
    z: 22
    y: 3
    m: 1
    n: 1
    d: 23
    j: 23
    H: 12
    G: 12
    h: 12
    g: 12
    i: 20
    s: 59
    t: 31
    w: 4
    L: 0
    B: 556
    I: 0
    W: 4
    @PHP/strings/001.php: SUCCEEDED
    @PHP/strings/002.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    fprintf test 1:abcde
    20
    printf test 1:simple string
    printf test 2:42
    printf test 3:3.333333
    printf test 4:3.3333333333
    printf test 5:2.50      
    printf test 6:2.50000000
    printf test 7:0000002.50
    printf test 8:<                 foo>
    printf test 9:<bar                 >
    printf test 10: 123456789012345
    printf test 10:<h´┐Żyesterettsjustitiarius>
    printf test 11: 123456789012345678901234567890
    printf test 11:<    h´┐Żyesterettsjustitiarius>
    printf test 12:-12.34
    printf test 13:  -12
    printf test 14:@
    printf test 15:10101010
    printf test 16:aa
    printf test 17:AA
    printf test 18:        10101010
    printf test 19:              aa
    printf test 20:              AA
    printf test 21:0000000010101010
    printf test 22:00000000000000aa
    printf test 23:00000000000000AA
    printf test 24:abcde
    printf test 25:gazonk
    printf test 26:2 1
    printf test 27:3 1 2
    printf test 28:02  1
    printf test 29:2   1
    printf test 30:x
    vprintf test 1:2   1
    fprintf test 1:abcde
    20
    printf test 1:simple string
    printf test 2:42
    printf test 3:3.333333
    printf test 4:3.3333333333
    printf test 5:2.50      
    printf test 6:2.50000000
    printf test 7:0000002.50
    printf test 8:<                 foo>
    printf test 9:<bar                 >
    printf test 10: 123456789012345
    printf test 10:<h�yesterettsjustitiarius>
    printf test 11: 123456789012345678901234567890
    printf test 11:<    h�yesterettsjustitiarius>
    printf test 12:-12.34
    printf test 13:  -12
    printf test 14:@
    printf test 15:10101010
    printf test 16:aa
    printf test 17:AA
    printf test 18:        10101010
    printf test 19:              aa
    printf test 20:              AA
    printf test 21:0000000010101010
    printf test 22:00000000000000aa
    printf test 23:00000000000000AA
    printf test 24:abcde
    printf test 25:gazonk
    printf test 26:2 1
    printf test 27:3 1 2
    printf test 28:02  1
    printf test 29:2   1
    printf test 30:x
    vprintf test 1:2   1
    @PHP/strings/bug22592.php: SUCCEEDED
    Arrays/array1.php: SUCCEEDED
    Arrays/array_diff_intersect.php: SUCCEEDED
    Arrays/array_diff_intersect2.php: SUCCEEDED
    Arrays/array_diff_intersect3.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      ['red'] => integer(2)
      ['purple'] => integer(4)
    }
    array
    {
      [1] => integer(2)
      [2] => integer(3)
    }
    array
    {
      ['red'] => integer(2)
      ['purple'] => integer(4)
    }
    array
    {
      ['blue'] => integer(1)
      ['green'] => integer(3)
    }
    array
    {
      ['blue'] => integer(1)
      ['green'] => integer(3)
    }
    array(2)
    {
      ['red'] => integer(2)
      ['purple'] => integer(4)
    }
    array(2)
    {
      [1] => integer(2)
      [2] => integer(3)
    }
    array(2)
    {
      ['red'] => integer(2)
      ['purple'] => integer(4)
    }
    array(2)
    {
      ['blue'] => integer(1)
      ['green'] => integer(3)
    }
    array(2)
    {
      ['blue'] => integer(1)
      ['green'] => integer(3)
    }
    Arrays/array_map.php: SUCCEEDED
    Arrays/array_merge_recursive.php: SUCCEEDED
    Arrays/array_reduce1.php: SUCCEEDED
    Arrays/array_reduce2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      [0] => integer(1)
      [1] => integer(2)
      [2] => integer(3)
      [3] => integer(4)
      [4] => integer(5)
    }
    integer(15)
    integer(1200)
    integer(1)
    array(5)
    {
      [0] => integer(1)
      [1] => integer(2)
      [2] => integer(3)
      [3] => integer(4)
      [4] => integer(5)
    }
    integer(15)
    integer(1200)
    integer(1)
    Arrays/array_slice.php: SUCCEEDED
    Arrays/array_sumprod.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    double(-7.7)
    double(-38.4)
    integer(6)
    integer(6)
    int64(4294967297)
    int64(9223372028264841218)
    bool(true)
    bool(true)
    double(-7.7)
    double(-38.4)
    integer(6)
    integer(6)
    int64(4294967297)
    int64(9223372028264841218)
    bool(true)
    bool(true)
    Arrays/array_unshift.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      [0] => string(5) "apple"
      [1] => string(9) "raspberry"
      [2] => string(6) "orange"
      [3] => string(6) "banana"
    }
    array
    {
      [0] => string(5) "apple"
      [1] => integer(1)
      [2] => string(9) "raspberry"
      ['a'] => integer(1)
      [3] => integer(2)
      ['b'] => integer(4)
      [4] => integer(1)
    }
    array(4)
    {
      [0] => string(5) "apple"
      [1] => string(9) "raspberry"
      [2] => string(6) "orange"
      [3] => string(6) "banana"
    }
    array(7)
    {
      [0] => string(5) "apple"
      [1] => integer(1)
      [2] => string(9) "raspberry"
      ['a'] => integer(1)
      [3] => integer(2)
      ['b'] => integer(4)
      [4] => integer(1)
    }
    Arrays/array_walk.php: SUCCEEDED
    Arrays/array_walk_recursive.php: SUCCEEDED
    Arrays/multisort.php: SUCCEEDED
    Arrays/optimizations.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    3
    4
    5
    a
    b
    c
    
    Warning: strtolower() expects parameter 1 to be string, array given in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Arrays\__input.txt on line 15
    
    cablo
    3
    4
    5
    a
    b
    c
    array
    cablo
    Arrays/recursion.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    f1:
    array
    {
      ['a'] => array
      {
        ['a'] => &array
        {
          ['a'] => &array(3) [recursion]
          [0] => string(1) "y"
          [1] => string(1) "z"
        }
        [0] => integer(1)
        [1] => integer(2)
        [2] => integer(3)
        [3] => string(1) "x"
      }
      [0] => string(1) "w"
    }
    f2:
    array
    {
      ['A'] => &array
      {
        ['a'] => &array(2) [recursion]
        [0] => string(1) "z"
      }
    }
    f3:
    array
    {
      [0] => &array(2) [recursion]
      [1] => string(1) "z"
    }
    f4:
    array
    {
      ['a'] => array
      {
        [0] => integer(1)
        [1] => integer(2)
        [2] => integer(3)
        [3] => integer(1)
        [4] => integer(2)
        [5] => integer(3)
      }
    }
    f5:
    array
    {
      ['a'] => array
      {
        [0] => integer(1)
        [1] => integer(2)
        [2] => integer(3)
        [3] => integer(1)
        [4] => integer(2)
        [5] => integer(3)
      }
    }
    f6:
    array
    {
      ['a'] => array
      {
        [0] => string(2) "xx"
        [1] => integer(2)
      }
    }
    f7:
    array
    {
      ['a'] => &array
      {
        ['a'] => &array(1) [recursion]
      }
    }
    f1:
    array(2)
    {
      ['a'] => array(5)
      {
        ['a'] => &array(3)
        {
          ['a'] => &array(3) [recursion]
          [0] => string(1) "y"
          [1] => string(1) "z"
        }
        [0] => integer(1)
        [1] => integer(2)
        [2] => integer(3)
        [3] => string(1) "x"
      }
      [0] => string(1) "w"
    }
    f2:
    array(1)
    {
      ['A'] => &array(2)
      {
        ['a'] => &array(2) [recursion]
        [0] => string(1) "z"
      }
    }
    f3:
    array(2)
    {
      [0] => &array(2) [recursion]
      [1] => string(1) "z"
    }
    f4:
    array(1)
    {
      ['a'] => array(6)
      {
        [0] => integer(1)
        [1] => integer(2)
        [2] => integer(3)
        [3] => integer(1)
        [4] => integer(2)
        [5] => integer(3)
      }
    }
    f5:
    array(1)
    {
      ['a'] => array(6)
      {
        [0] => integer(1)
        [1] => integer(2)
        [2] => integer(3)
        [3] => integer(1)
        [4] => integer(2)
        [5] => integer(3)
      }
    }
    f6:
    array(1)
    {
      ['a'] => array(2)
      {
        [0] => string(2) "xx"
        [1] => integer(2)
      }
    }
    f7:
    array(1)
    {
      ['a'] => &array(1)
      {
        ['a'] => &array(1) [recursion]
      }
    }
    Arrays/sort.php: SUCCEEDED
    Arrays/usort.php: SUCCEEDED
    Bugs/class_incompletepart.php: SUCCEEDED
    Bugs/division-by-zero.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    DIVISION
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt on line 6
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt on line 8
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt on line 10
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt on line 12
    bool(false)
    MODULO
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt on line 16
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt on line 18
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt on line 20
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt on line 22
    bool(false)
    DIVISION
    bool(false)
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt at expression on line 10, column 2.
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt at expression on line 12, column 2.
    bool(false)
    MODULO
    bool(false)
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt at expression on line 20, column 2.
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt at expression on line 22, column 2.
    bool(false)
    D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt(6,10): warning PHP0150: Division by zero
    D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt(8,9): warning PHP0150: Division by zero
    D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt(16,10): warning PHP0150: Division by zero
    D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt(18,9): warning PHP0150: Division by zero
    
    Bugs/function-in-unknown-class.php: SUCCEEDED
    Bugs/is_a_null_value.php: SUCCEEDED
    Bugs/preg-named-groups.php: SUCCEEDED
    Bugs/preg-replace-advanced.php: SUCCEEDED
    Bugs/preg-replace-range.php: SUCCEEDED
    Bugs/preg-replace.php: SUCCEEDED
    Bugs/preg-this-dynamic.php: FAILED
    Script hung upNo errorsSuccess
    Expected test outputReal script output
    Unhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---> PHP.Core.Debug+AssertException: Assertion failed: 
       at PHP.Core.Debug.Fail(String message)
       at PHP.Core.Debug.Assert(Boolean condition)
       at PHP.Core.RelativePath.ParseCanonical(String relativePath)
       at PHP.Core.Emit.TransientAssemblyBuilder.Build(String sourceCode, SourceCodeDescriptor descriptor, EvalKinds kind, CompilationContext context, ScriptContext scriptContext, DTypeDesc referringType, NamingContext namingContext, Boolean completeSource)
       at PHP.Core.DynamicCode.EvalInternal(String prefix, String code, String suffix, EvalKinds kind, ScriptContext scriptContext, Dictionary`2 localVariables, DObject self, DTypeDesc referringType, SourceCodeDescriptor descriptor, Boolean entireFile, NamingContext namingContext)
       at PHP.Core.DynamicCode.Eval(String code, Boolean synthetic, ScriptContext context, Dictionary`2 definedVariables, DObject self, DTypeDesc referringType, String callerRelativeSourcePath, Int32 line, Int32 column, Int32 containerId, NamingContext namingContext)
       at PHP.Library.PerlRegExp.Evaluator.ReplaceCodeExecute(Match m)
       at System.Text.RegularExpressions.RegexReplacement.Replace(MatchEvaluator evaluator, Regex regex, String input, Int32 count, Int32 startat)
       at System.Text.RegularExpressions.Regex.Replace(String input, MatchEvaluator evaluator, Int32 count)
       at PHP.Library.PerlRegExp.ReplaceInternal(DObject self, Dictionary`2 definedVariables, PerlRegExpConverter converter, PhpCallback callback, String str, Int32 limit, SourceCodeDescriptor sourceCodeDesc, Int32& count)
       at PHP.Library.PerlRegExp.SimpleReplace(DObject self, Dictionary`2 definedVariables, Object pattern, String replacement, PhpCallback callback, Object data, Int32 limit, SourceCodeDescriptor descriptor, Int32& count)
       at PHP.Library.PerlRegExp.Replace(DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, PhpCallback callback, Object data, Int32 limit, Int32& count)
       at PHP.Library.PerlRegExp.Replace(DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, Object data)
       at PHP.Dynamic.PhpNetClassLibrary.preg_replace(Object , PhpStack )
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <__input.txt>.a.a(ScriptContext ) in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt:line 16
       at <__input.txt>.a.<Mediator>(ScriptContext )
       at <__input.txt>.a.a(Object instance, PhpStack stack)
       at <__input.txt>.<Script>.<Main>(ScriptContext <context>, Dictionary`2 <locals>, DObject , DTypeDesc , Boolean ) in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt:line 19
       at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)
       at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)
       --- End of inner exception stack trace ---
       at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)
       at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)
       at <Global>.Run(String[] )
    
    Bugs/preg-this-dynamic2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    foo: ahoj
    foo: lidi
    foo: rozkladame
    foo: ahoj
    foo: lidi
    foo: rozkladame
    foo: ahoj
    foo: lidi
    foo: rozkladame
    
    Notice: Undefined variable: this.
    
    Error: Call to a member function foo() on a non-object.
    Bugs/preg-this.php: SUCCEEDED
    Bugs/preg-ungreedy-bugs.php: SUCCEEDED
    Bugs/preg-unkn.php: SUCCEEDED
    Compiler/abstracts.php: SUCCEEDED
    Compiler/assignments.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ---1---1double(-1.5)
    double(2.5)
    double(0.833333333333333)
    integer(6)
    integer(8)
    ---2---2double(8.83333333333333)
    double(8.83333333333333)
    double(8.83333333333333)
    integer(8)
    integer(8)
    ---3---3---4---4---5---5array
    {
      [0] => array
      {
        [0] => array
        {
          [0] => array
          {
            [0] => integer(1)
            [1] => integer(2)
            [2] => integer(3)
          }
        }
      }
    }
    array
    {
      [0] => array
      {
        [0] => array
        {
          [0] => array
          {
            [0] => integer(1)
            [1] => integer(2)
            [2] => integer(3)
          }
        }
      }
    }
    array
    {
      [1] => array
      {
        [2] => array
        {
          [3] => array
          {
            [0] => integer(1)
            [1] => integer(2)
            [2] => integer(3)
          }
        }
      }
    }
    ---6---6array
    {
      [0] => integer(1)
      [1] => integer(2)
      [2] => integer(3)
      [3] => string(1) "u"
    }
    array
    {
      [0] => integer(1)
      [1] => integer(2)
      [2] => integer(3)
      [3] => string(1) "v"
    }
    array
    {
      [0] => integer(1)
      [1] => integer(2)
      [2] => integer(3)
      [3] => string(1) "w"
      [4] => string(1) "z"
    }
    array
    {
      [0] => integer(1)
      [1] => integer(2)
      [2] => integer(3)
      [3] => string(1) "w"
      [4] => string(1) "z"
    }
    ---7---7array
    {
      [0] => array
      {
        [0] => array
        {
          [0] => array
          {
            [0] => &integer(10)
          }
        }
      }
    }
    array
    {
      [0] => array
      {
        [0] => array
        {
          [0] => array
          {
            [0] => &integer(10)
          }
        }
      }
    }
    ---8---8
    ---1---1double(-1.5)
    double(2.5)
    double(0.833333333333333)
    integer(6)
    integer(8)
    ---2---2double(8.83333333333333)
    double(8.83333333333333)
    double(8.83333333333333)
    integer(8)
    integer(8)
    ---3---3---4---4---5---5array(1)
    {
      [0] => array(1)
      {
        [0] => array(1)
        {
          [0] => array(3)
          {
            [0] => integer(1)
            [1] => integer(2)
            [2] => integer(3)
          }
        }
      }
    }
    array(1)
    {
      [0] => array(1)
      {
        [0] => array(1)
        {
          [0] => array(3)
          {
            [0] => integer(1)
            [1] => integer(2)
            [2] => integer(3)
          }
        }
      }
    }
    array(1)
    {
      [1] => array(1)
      {
        [2] => array(1)
        {
          [3] => array(3)
          {
            [0] => integer(1)
            [1] => integer(2)
            [2] => integer(3)
          }
        }
      }
    }
    ---6---6array(4)
    {
      [0] => integer(1)
      [1] => integer(2)
      [2] => integer(3)
      [3] => string(1) "u"
    }
    array(4)
    {
      [0] => integer(1)
      [1] => integer(2)
      [2] => integer(3)
      [3] => string(1) "v"
    }
    array(5)
    {
      [0] => integer(1)
      [1] => integer(2)
      [2] => integer(3)
      [3] => string(1) "w"
      [4] => string(1) "z"
    }
    array(5)
    {
      [0] => integer(1)
      [1] => integer(2)
      [2] => integer(3)
      [3] => string(1) "w"
      [4] => string(1) "z"
    }
    ---7---7array(1)
    {
      [0] => array(1)
      {
        [0] => array(1)
        {
          [0] => array(1)
          {
            [0] => &integer(10)
          }
        }
      }
    }
    array(1)
    {
      [0] => array(1)
      {
        [0] => array(1)
        {
          [0] => array(1)
          {
            [0] => &integer(10)
          }
        }
      }
    }
    ---8---8
    Compiler/assign_in_call.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    g1:
    f(x)
    u(x)
    'x'
    
    g2:
    f(x)
    u(x)
    'b'
    
    g3:
    f(x)
    u(x)
    'b'
    
    g4:
    f(x)
    u(x)
    'b'
    
    g5:
    f()
    u()
    integer(1)
    
    g6:
    f(3)
    u(3)
    integer(3)
    
    g7:
    f(2)
    u(10)
    integer(10)
    
    g8:
    f(1)
    f(1)
    f(1)
    u(1)
    u()
    u(1)
    
    g9:
    known:
    __get(p) = 0
    __set(p,1)
    f(1)
    unknown:
    __get(p) = 1
    __set(p,3)
    u(3)
    
    g10:
    Done.
    g1:
    f(x)
    u(x)
    'x'
    
    g2:
    f(x)
    u(x)
    'b'
    
    g3:
    f(x)
    u(x)
    'b'
    
    g4:
    f(x)
    u(x)
    'b'
    
    g5:
    f()
    u()
    integer(1)
    
    g6:
    f(3)
    u(3)
    integer(3)
    
    g7:
    f(2)
    u(10)
    integer(10)
    
    g8:
    f(1)
    f(1)
    f(1)
    u(1)
    u()
    u(1)
    
    g9:
    known:
    __get(p) = 0
    __set(p,1)
    __get(p) = 1
    f(1)
    unknown:
    __get(p) = 1
    __set(p,3)
    __get(p) = 3
    u(3)
    
    g10:
    Done.
    Compiler/auto_globals_001.php: SUCCEEDED
    Compiler/auto_globals_002.php: SUCCEEDED
    Compiler/auto_globals_003.php: SUCCEEDED
    Compiler/break_in_global_code.php: SUCCEEDED
    Compiler/chaining_test.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Hujer
    Strict Standards: Creating default object from empty value in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt at expression on line 8, column 2.
    
    Strict Standards: Creating default object from empty value in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt at expression on line 8, column 2.
    
    Strict Standards: Creating default object from empty value in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt at expression on line 8, column 2.
    
    Strict Standards: Creating default object from empty value in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt at expression on line 8, column 2.
    
    Strict Standards: Creating default object from empty value in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt at expression on line 8, column 2.
    
    Strict Standards: Creating default object from empty value in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt at expression on line 8, column 2.
    
    Strict Standards: Creating default object from empty value in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt at expression on line 9, column 2.
    
    Strict Standards: Creating default object from empty value in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt at expression on line 9, column 2.
    
    Strict Standards: Creating default object from empty value in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt at expression on line 9, column 2.
    
    Strict Standards: Creating default object from empty value in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt at expression on line 9, column 2.
    
    Strict Standards: Creating default object from empty value in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt at expression on line 9, column 2.
    
    Strict Standards: Creating default object from empty value in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt at expression on line 9, column 2.
    Hujer
    Compiler/chain_ending_by_string_index.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        string(1) "f"
      }
    }
    array(1) {
      [0]=>
      string(4) "xubu"
    }
    object(C)#1 (1) {
      ["f"]=>
      string(4) "kuxu"
    }
    string(5) "helxo"
    string(5) "helxo"
    array(1)
    {
      [0] => array(1)
      {
        [0] => string(1) "f"
      }
    }
    array(1)
    {
      [0] => string(4) "bubu"
    }
    
    Warning: A string item used as a reference in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt at expression on line 19, column 1.
    object(C)(1)
    {
      ["f"] => string(4) "kuku"
    }
    
    Warning: A string item used as a reference in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt at expression on line 25, column 1.
    string(5) "hello"
    
    Warning: A string item used as a reference in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt at expression on line 31, column 1.
    string(5) "hello"
    Compiler/continue_in_global_code.php: SUCCEEDED
    Compiler/deep_copy.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      [0] => &array(1) [recursion]
    }
    array
    {
      [0] => &array(1) [recursion]
    }
    array
    {
      [0] => &array(2) [recursion]
      [1] => integer(1)
    }
    array
    {
      [0] => &array(1) [recursion]
    }
    array(1)
    {
      [0] => &array(1) [recursion]
    }
    array(1)
    {
      [0] => &array(1) [recursion]
    }
    array(2)
    {
      [0] => &array(2) [recursion]
      [1] => integer(1)
    }
    array(1)
    {
      [0] => &array(1) [recursion]
    }
    Compiler/deep_copy_refbox.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Strict Standards: Only variables should be passed by reference in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt on line 42
    array
    {
      0 => integer(1)
    }
    
    Strict Standards: Only variables should be passed by reference in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt on line 45
    array
    {
      0 => integer(1)
    }
    
    Strict Standards: Only variables should be passed by reference in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt on line 49
    array
    {
      0 => integer(1)
    }
    
    Strict Standards: Only variables should be passed by reference in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt on line 52
    array
    {
      0 => integer(1)
    }
    array
    {
      0 => integer(1)
      1 => integer(1)
    }
    array
    {
      0 => integer(1)
      1 => integer(1)
    }
    array
    {
      0 => integer(1)
      1 => integer(1)
    }
    array
    {
      0 => integer(1)
      1 => integer(1)
    }
    Compiler/expr_init.php: SUCCEEDED
    Compiler/foreach1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x => array
    {
      [0] => integer(1)
      [1] => integer(2)
      [2] => integer(3)
    }
    x => array(3)
    {
      [0] => integer(1)
      [1] => integer(2)
      [2] => integer(3)
    }
    Compiler/foreach_arrays.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    1
    2
    3
    0-1
    1-2
    2-3
    0-1
    1-2
    2-3
    array
    {
      [0] => &integer(10)
      [1] => &integer(11)
      [2] => &integer(12)
    }
    array
    {
      [0] => &integer(100)
      [1] => &integer(101)
      [2] => &integer(102)
      [4] => &integer(104)
      [5] => &integer(105)
      [6] => integer(4)
      [3] => &integer(100)
    }
    1
    2
    3
    0-1
    1-2
    2-3
    0-1
    1-2
    2-3
    array(3)
    {
      [0] => &integer(10)
      [1] => &integer(11)
      [2] => &integer(12)
    }
    array(7)
    {
      [0] => &integer(100)
      [1] => &integer(101)
      [2] => &integer(102)
      [4] => &integer(104)
      [5] => &integer(105)
      [6] => integer(4)
      [3] => &integer(100)
    }
    Compiler/for_loop.php: SUCCEEDED
    Compiler/function_002.php: SUCCEEDED
    Compiler/function_003.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string(19) "Set in f() function"
    
    Strict Standards: Only variables should be assigned by reference in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt on line 26
    object
    {
      'a' => 
      object
      {
      }
    }
    string(19) "Set in f() function"
    object
    {
      'a' => 
      object
      {
      }
    }
    Compiler/function_004.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string(19) "Set in f() function"
    
    Strict Standards: Only variables should be assigned by reference in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt on line 36
    object
    {
      'a' => 
      object
      {
      }
    }
    Method C->f() return what it gets.
    object
    {
      'a' => 
      object
      {
      }
    }
    object
    {
      'a' => 
      object
      {
      }
    }
    string(19) "Set in f() function"
    object
    {
      'a' => 
      object
      {
      }
    }
    Method C->f() return what it gets.
    object
    {
      'a' => 
      object
      {
      }
    }
    object
    {
      'a' => 
      object
      {
      }
    }
    Compiler/function_call.php: SUCCEEDED
    Compiler/if_statement.php: SUCCEEDED
    Compiler/indirect_001.php: SUCCEEDED
    Compiler/indirect_002.php: SUCCEEDED
    Compiler/indirect_003.php: SUCCEEDED
    Compiler/indirect_004.php: SUCCEEDED
    Compiler/indirect_005.php: SUCCEEDED
    Compiler/indirect_007.php: SUCCEEDED
    Compiler/indirect_global.php: SUCCEEDED
    Compiler/inheritance.php: SUCCEEDED
    Compiler/inheritance2.php: SUCCEEDED
    Compiler/isset_unset_001.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Testing x in global code:  <br>
    1 <br>
     <br>
    Testing x (object) in optimized function:  <br>
    1 <br>
     <br>
    Testing x (PhpReference) in optimized function:  <br>
    1 <br>
     <br>
    
    Notice: Undefined variable: y in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt on line 29
    Testing $$x (created at runtime) in optimized function:  <br>
    1 <br>
    Testing x in global code:  <br>
    1 <br>
     <br>
    Testing x (object) in optimized function:  <br>
    1 <br>
     <br>
    Testing x (PhpReference) in optimized function:  <br>
    1 <br>
     <br>
    Testing $$x (created at runtime) in optimized function:  <br>
    1 <br>
    Compiler/null_hints.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    NULL
    NULL
    NULL
    NULL
    NULL
    
    Strict Standards: Only variables should be passed by reference in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt on line 36
    NULL
    NULL
    NULL
    NULL
    
    Strict Standards: Only variables should be passed by reference in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt on line 42
    NULL
    NULL
    NULL
    NULL
    NULL
    NULL
    NULL
    NULL
    NULL
    NULL
    NULL
    Compiler/switch.php: SUCCEEDED
    Compiler/ternary_ex.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      [1] => integer(1)
      [0] => integer(0)
    }
    array
    {
      [0] => integer(1)
      [1] => integer(2)
      [2] => integer(3)
      [3] => integer(4)
    }
    array
    {
      [1] => integer(1)
      [2] => integer(2)
    }
    integer(1)
    array(2)
    {
      [1] => integer(1)
      [0] => integer(0)
    }
    array(4)
    {
      [0] => integer(1)
      [1] => integer(2)
      [2] => integer(3)
      [3] => integer(4)
    }
    array(2)
    {
      [1] => integer(1)
      [2] => integer(2)
    }
    integer(1)
    Compiler/typehint_check.php: SUCCEEDED
    Compiler/Inclusions/include2.php: SUCCEEDED
    Compiler/Inclusions/include3.php: SUCCEEDED
    Compiler/Inclusions/include6.php: SUCCEEDED
    Compiler/Inclusions/include_test.php: SUCCEEDED
    Compiler/Inclusions/script.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t01.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t02.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t03.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t04.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t05.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t08.php: SUCCEEDED
    Compiler/PseudoConst/parent.php: SUCCEEDED
    Compiler/PseudoConst/parent2.php: SUCCEEDED
    Compiler/PseudoConst/self.php: SUCCEEDED
    Compiler/PseudoConst/t01.php: SUCCEEDED
    Compiler/PseudoConst/t02.php: SUCCEEDED
    Compiler/PseudoConst/t03.php: SUCCEEDED
    Compiler/PseudoConst/t04.php: SUCCEEDED
    Compiler/PseudoConst/t05.php: SUCCEEDED
    Compiler/PseudoConst/t06.php: SUCCEEDED
    Compiler/PseudoConst/t07.php: SUCCEEDED
    Compiler/PseudoConst/t08.php: SUCCEEDED
    Compiler/PseudoConst/t09.php: SUCCEEDED
    Compiler/PseudoConst/t10.php: SUCCEEDED
    Compiler/PseudoConst/t11.php: SUCCEEDED
    Compiler/PseudoConst/_class_.php: SUCCEEDED
    Compiler/PseudoConst/_function_.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Notice: Undefined variable: a in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\PseudoConst\__input.txt on line 11
    g
    g
    Compiler/Unreachable/t13.php: SUCCEEDED
    DateTime/strftime.php: SUCCEEDED
    DateTime/strtotime1.php: SUCCEEDED
    DateTime/strtotime2.php: SUCCEEDED
    DateTime/strtotime3.php: SUCCEEDED
    DateTime/strtotime4.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0: 00:00:00 01/01/2005
    1: 01:00:00 01/01/2005
    2: 02:00:00 01/01/2005
    3: 03:00:00 01/01/2005
    4: 04:00:00 01/01/2005
    5: 05:00:00 01/01/2005
    6: 06:00:00 01/01/2005
    7: 07:00:00 01/01/2005
    8: 08:00:00 01/01/2005
    9: 09:00:00 01/01/2005
    10: 10:00:00 01/01/2005
    11: 11:00:00 01/01/2005
    12: 12:00:00 01/01/2005
    13: 13:00:00 01/01/2005
    14: 14:00:00 01/01/2005
    15: 15:00:00 01/01/2005
    16: 16:00:00 01/01/2005
    17: 17:00:00 01/01/2005
    18: 18:00:00 01/01/2005
    19: 19:00:00 01/01/2005
    20: 20:00:00 01/01/2005
    21: 21:00:00 01/01/2005
    22: 22:00:00 01/01/2005
    23: 23:00:00 01/01/2005
    24: 00:00:00 01/02/2005
    0am: error
    1am: 01:00:00 01/01/2005
    2am: 02:00:00 01/01/2005
    3am: 03:00:00 01/01/2005
    4am: 04:00:00 01/01/2005
    5am: 05:00:00 01/01/2005
    6am: 06:00:00 01/01/2005
    7am: 07:00:00 01/01/2005
    8am: 08:00:00 01/01/2005
    9am: 09:00:00 01/01/2005
    10am: 10:00:00 01/01/2005
    11am: 11:00:00 01/01/2005
    12am: 00:00:00 01/01/2005
    13am: error
    14am: error
    15am: error
    16am: error
    17am: error
    18am: error
    19am: error
    20am: error
    21am: error
    22am: error
    23am: error
    24am: error
    0pm: error
    1pm: 13:00:00 01/01/2005
    2pm: 14:00:00 01/01/2005
    3pm: 15:00:00 01/01/2005
    4pm: 16:00:00 01/01/2005
    5pm: 17:00:00 01/01/2005
    6pm: 18:00:00 01/01/2005
    7pm: 19:00:00 01/01/2005
    8pm: 20:00:00 01/01/2005
    9pm: 21:00:00 01/01/2005
    10pm: 22:00:00 01/01/2005
    11pm: 23:00:00 01/01/2005
    12pm: 12:00:00 01/01/2005
    13pm: error
    14pm: error
    15pm: error
    16pm: error
    17pm: error
    18pm: error
    19pm: error
    20pm: error
    21pm: error
    22pm: error
    23pm: error
    24pm: error
    0: 00:00:00 01/01/2005
    1: 01:00:00 01/01/2005
    2: 02:00:00 01/01/2005
    3: 03:00:00 01/01/2005
    4: 04:00:00 01/01/2005
    5: 05:00:00 01/01/2005
    6: 06:00:00 01/01/2005
    7: 07:00:00 01/01/2005
    8: 08:00:00 01/01/2005
    9: 09:00:00 01/01/2005
    10: 10:00:00 01/01/2005
    11: 11:00:00 01/01/2005
    12: 12:00:00 01/01/2005
    13: 13:00:00 01/01/2005
    14: 14:00:00 01/01/2005
    15: 15:00:00 01/01/2005
    16: 16:00:00 01/01/2005
    17: 17:00:00 01/01/2005
    18: 18:00:00 01/01/2005
    19: 19:00:00 01/01/2005
    20: 20:00:00 01/01/2005
    21: 21:00:00 01/01/2005
    22: 22:00:00 01/01/2005
    23: 23:00:00 01/01/2005
    24: error
    0am: error
    1am: 01:00:00 01/01/2005
    2am: 02:00:00 01/01/2005
    3am: 03:00:00 01/01/2005
    4am: 04:00:00 01/01/2005
    5am: 05:00:00 01/01/2005
    6am: 06:00:00 01/01/2005
    7am: 07:00:00 01/01/2005
    8am: 08:00:00 01/01/2005
    9am: 09:00:00 01/01/2005
    10am: 10:00:00 01/01/2005
    11am: 11:00:00 01/01/2005
    12am: 00:00:00 01/01/2005
    13am: error
    14am: error
    15am: error
    16am: error
    17am: error
    18am: error
    19am: error
    20am: error
    21am: error
    22am: error
    23am: error
    24am: error
    0pm: error
    1pm: 13:00:00 01/01/2005
    2pm: 14:00:00 01/01/2005
    3pm: 15:00:00 01/01/2005
    4pm: 16:00:00 01/01/2005
    5pm: 17:00:00 01/01/2005
    6pm: 18:00:00 01/01/2005
    7pm: 19:00:00 01/01/2005
    8pm: 20:00:00 01/01/2005
    9pm: 21:00:00 01/01/2005
    10pm: 22:00:00 01/01/2005
    11pm: 23:00:00 01/01/2005
    12pm: 12:00:00 01/01/2005
    13pm: error
    14pm: error
    15pm: error
    16pm: error
    17pm: error
    18pm: error
    19pm: error
    20pm: error
    21pm: error
    22pm: error
    23pm: error
    24pm: error
    DateTime/strtotime5.php: SUCCEEDED
    DateTime/time.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    -189388800:-189475200 - 86400
    1964-01-01T00:00:00+0000
    1963-12-31T00:00:00+0000
    1964-06-06
    1963-06-06
    1964-01-06
    1133305200
    -189388800:-189475200 - 86400
    1964-01-01T00:00:00+0000
    1963-12-31T00:00:00+0000
    1964-06-06
    1963-06-06
    1964-01-06
    DateTime/timezones1.php: SUCCEEDED
    FileSystem/basename.php: SUCCEEDED
    FileSystem/basename2.php: SUCCEEDED
    FileSystem/chdir.php: SUCCEEDED
    FileSystem/csv.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    --- write ---
    72
    24
    44
    2
    6
    
    --- read ---
    "hello\n
    world";"aaa""bbb""ccc";"blah blah;";none;"tab\ttab";"space space"\n
    hh'ee;"ss\nsadasdasd s"\n
    """""""""""""""""""""";"""";;"""""";"xxx"""\n
    x\n
    "x\y"\n
    --- write ---
    72
    24
    44
    2
    6
    
    --- read ---
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    FileSystem/date.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <pre>[ARRAY
      [INT (0)] => [STRING: "A --> {PM}"]
      [INT (1)] => [STRING: "B --> {719}"]
      [INT (2)] => [STRING: "C --> {C}"]
      [INT (3)] => [STRING: "D --> {Sat}"]
      [INT (4)] => [STRING: "E --> {E}"]
      [INT (5)] => [STRING: "F --> {March}"]
      [INT (6)] => [STRING: "G --> {17}"]
      [INT (7)] => [STRING: "H --> {17}"]
      [INT (8)] => [STRING: "I --> {0}"]
      [INT (9)] => [STRING: "J --> {J}"]
      [INT (10)] => [STRING: "K --> {K}"]
      [INT (11)] => [STRING: "L --> {0}"]
      [INT (12)] => [STRING: "M --> {Mar}"]
      [INT (13)] => [STRING: "N --> {6}"]
      [INT (14)] => [STRING: "O --> {+0100}"]
      [INT (15)] => [STRING: "P --> {+01:00}"]
      [INT (16)] => [STRING: "Q --> {Q}"]
      [INT (17)] => [STRING: "R --> {R}"]
      [INT (18)] => [STRING: "S --> {th}"]
      [INT (19)] => [STRING: "U --> {984240978}"]
      [INT (20)] => [STRING: "V --> {V}"]
      [INT (21)] => [STRING: "W --> {10}"]
      [INT (22)] => [STRING: "X --> {X}"]
      [INT (23)] => [STRING: "Y --> {2001}"]
      [INT (24)] => [STRING: "Z --> {3600}"]
      [INT (25)] => [STRING: "a --> {pm}"]
      [INT (26)] => [STRING: "b --> {b}"]
      [INT (27)] => [STRING: "c --> {2001-03-10T17:16:18+01:00}"]
      [INT (28)] => [STRING: "d --> {10}"]
      [INT (29)] => [STRING: "e --> {Europe/Prague}"]
      [INT (30)] => [STRING: "f --> {f}"]
      [INT (31)] => [STRING: "g --> {5}"]
      [INT (32)] => [STRING: "h --> {05}"]
      [INT (33)] => [STRING: "i --> {16}"]
      [INT (34)] => [STRING: "j --> {10}"]
      [INT (35)] => [STRING: "k --> {k}"]
      [INT (36)] => [STRING: "l --> {Saturday}"]
      [INT (37)] => [STRING: "m --> {03}"]
      [INT (38)] => [STRING: "n --> {3}"]
      [INT (39)] => [STRING: "o --> {2001}"]
      [INT (40)] => [STRING: "p --> {p}"]
      [INT (41)] => [STRING: "q --> {q}"]
      [INT (42)] => [STRING: "r --> {Sat, 10 Mar 2001 17:16:18 +0100}"]
      [INT (43)] => [STRING: "s --> {18}"]
      [INT (44)] => [STRING: "t --> {31}"]
      [INT (45)] => [STRING: "u --> {000000}"]
      [INT (46)] => [STRING: "v --> {v}"]
      [INT (47)] => [STRING: "w --> {6}"]
      [INT (48)] => [STRING: "x --> {x}"]
      [INT (49)] => [STRING: "y --> {01}"]
      [INT (50)] => [STRING: "z --> {68}"]
    ]</pre>
    <pre>[ARRAY
      [INT (0)] => [STRING: "A --> {PM}"]
      [INT (1)] => [STRING: "B --> {719}"]
      [INT (2)] => [STRING: "C --> {C}"]
      [INT (3)] => [STRING: "D --> {Sat}"]
      [INT (4)] => [STRING: "E --> {E}"]
      [INT (5)] => [STRING: "F --> {March}"]
      [INT (6)] => [STRING: "G --> {17}"]
      [INT (7)] => [STRING: "H --> {17}"]
      [INT (8)] => [STRING: "I --> {0}"]
      [INT (9)] => [STRING: "J --> {J}"]
      [INT (10)] => [STRING: "K --> {K}"]
      [INT (11)] => [STRING: "L --> {0}"]
      [INT (12)] => [STRING: "M --> {Mar}"]
      [INT (13)] => [STRING: "N --> {6}"]
      [INT (14)] => [STRING: "O --> {+0100}"]
      [INT (15)] => [STRING: "P --> {+01:00}"]
      [INT (16)] => [STRING: "Q --> {Q}"]
      [INT (17)] => [STRING: "R --> {R}"]
      [INT (18)] => [STRING: "S --> {th}"]
      [INT (19)] => [STRING: "U --> {984240978}"]
      [INT (20)] => [STRING: "V --> {V}"]
      [INT (21)] => [STRING: "W --> {10}"]
      [INT (22)] => [STRING: "X --> {X}"]
      [INT (23)] => [STRING: "Y --> {2001}"]
      [INT (24)] => [STRING: "Z --> {3600}"]
      [INT (25)] => [STRING: "a --> {pm}"]
      [INT (26)] => [STRING: "b --> {b}"]
      [INT (27)] => [STRING: "c --> {2001-03-10T17:16:18+01:00}"]
      [INT (28)] => [STRING: "d --> {10}"]
      [INT (29)] => [STRING: "e --> {Europe/Prague}"]
      [INT (30)] => [STRING: "f --> {f}"]
      [INT (31)] => [STRING: "g --> {5}"]
      [INT (32)] => [STRING: "h --> {05}"]
      [INT (33)] => [STRING: "i --> {16}"]
      [INT (34)] => [STRING: "j --> {10}"]
      [INT (35)] => [STRING: "k --> {k}"]
      [INT (36)] => [STRING: "l --> {Saturday}"]
      [INT (37)] => [STRING: "m --> {03}"]
      [INT (38)] => [STRING: "n --> {3}"]
      [INT (39)] => [STRING: "o --> {2001}"]
      [INT (40)] => [STRING: "p --> {p}"]
      [INT (41)] => [STRING: "q --> {q}"]
      [INT (42)] => [STRING: "r --> {Sat, 10 Mar 2001 17:16:18 +0100}"]
      [INT (43)] => [STRING: "s --> {18}"]
      [INT (44)] => [STRING: "t --> {31}"]
      [INT (45)] => [STRING: "u --> {u}"]
      [INT (46)] => [STRING: "v --> {v}"]
      [INT (47)] => [STRING: "w --> {6}"]
      [INT (48)] => [STRING: "x --> {x}"]
      [INT (49)] => [STRING: "y --> {01}"]
      [INT (50)] => [STRING: "z --> {68}"]
    ]</pre>
    FileSystem/date2.php: SUCCEEDED
    FileSystem/date3.php: SUCCEEDED
    FileSystem/date_unix.php: SUCCEEDED
    FileSystem/dirname.php: SUCCEEDED
    FileSystem/dirname2.php: SUCCEEDED
    FileSystem/disk_free_space.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    121 GB
    Drive C: 218 GB
    Drive D: 121 GB
    Drive E: 184 GB
    Drive F: 
    Warning: disk_free_space(): The device is not ready.
     in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt on line 14
    false
    121 GB
    Drive C: 218 GB
    Drive D: 121 GB
    Drive E: 184 GB
    Drive F: false
    FileSystem/disk_total_space.php: SUCCEEDED
    FileSystem/fgets.php: SUCCEEDED
    FileSystem/file.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <pre>[ARRAY
      [INT (0)] => [STRING: "this is a file with one EOLN
    "]
    ]</pre>
    <pre>[ARRAY
      [INT (0)] => [STRING: ""]
      [INT (1)] => [STRING: "This is a file with two EOLNs. First line is empty."]
    ]</pre>
    <pre>[ARRAY
      [INT (0)] => [STRING: "
    "]
      [INT (1)] => [STRING: "This is a file with two EOLNs. First line is empty.
    "]
    ]</pre>
    <pre>[ARRAY
      [INT (0)] => [STRING: "This is a file with two EOLNs. First line is empty."]
    ]</pre>
    <pre>[ARRAY
      [INT (0)] => [STRING: "this is a file WITHOUT an "end-of-line""]
    ]</pre>
    Line #<b>130</b> : &lt;/html&gt;
    <br />
    [this is a file with one EOLN{\n}
    ]
    <pre>[ARRAY
      [INT (0)] => [STRING: "this is a file with one EOLN
    "]
    ]</pre>
    <pre>[ARRAY
      [INT (0)] => [STRING: ""]
      [INT (1)] => [STRING: "This is a file with two EOLNs. First line is empty."]
    ]</pre>
    <pre>[ARRAY
      [INT (0)] => [STRING: "
    "]
      [INT (1)] => [STRING: "This is a file with two EOLNs. First line is empty.
    "]
    ]</pre>
    <pre>[ARRAY
      [INT (0)] => [STRING: ""]
      [INT (1)] => [STRING: "This is a file with two EOLNs. First line is empty."]
    ]</pre>
    <pre>[ARRAY
      [INT (0)] => [STRING: "this is a file WITHOUT an "end-of-line""]
    ]</pre>
    Line #<b>130</b> : &lt;/html&gt;
    <br />
    [this is a file with one EOLN{\n}
    ]
    FileSystem/filesize.php: SUCCEEDED
    FileSystem/file_exists.php: SUCCEEDED
    FileSystem/file_get_contents.php: SUCCEEDED
    FileSystem/fpassthru.php: SUCCEEDED
    FileSystem/fread.php: SUCCEEDED
    FileSystem/fread1.php: SUCCEEDED
    FileSystem/fread2.php: SUCCEEDED
    FileSystem/fseek.php: SUCCEEDED
    FileSystem/fsockopen.php: SUCCEEDED
    FileSystem/ftell.php: SUCCEEDED
    FileSystem/is_dir.php: SUCCEEDED
    FileSystem/is_executable.php: SUCCEEDED
    FileSystem/pathinfo.php: SUCCEEDED
    FileSystem/popen.php: SUCCEEDED
    FileSystem/readdir.php: SUCCEEDED
    FileSystem/readfile.php: SUCCEEDED
    FileSystem/readline.php: SUCCEEDED
    FileSystem/realpath.php: SUCCEEDED
    FileSystem/scandir.php: SUCCEEDED
    FileSystem/stat.php: SUCCEEDED
    FileSystem/stream_context_set_option.php: SUCCEEDED
    FileSystem/stream_copy_to_stream.php: SUCCEEDED
    FileSystem/stream_copy_to_stream2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <p>Read <b>rb</b>, Write <b>wb</b>
    
    
    COPIED: <b>8775</b>
    <p>Read <b>rb</b>, Write <b>wt</b>
    
    
    COPIED: <b>8763</b>
    <p>Read <b>rb</b>, Write <b>wb</b>
    
    
    COPIED: <b>8775</b>
    <p>Read <b>rb</b>, Write <b>wt</b>
    
    
    COPIED: <b>8775</b>
    FileSystem/testinc.php: SUCCEEDED
    FileSystem/touch.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Warning: touch(): Utime failed: No such file or directory in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt on line 8
    Sorry Could Not change modification time of touch.txt
    Warning: touch(): Utime failed: No such file or directory in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt on line 14
    
    Warning: touch(): Utime failed: No such file or directory in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt on line 16
    
    Warning: touch(): Utime failed: No such file or directory in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt on line 17
    <pre>[ARRAY
      [INT (0)] => [STRING: "January 24, 2010; [12:09:12] (12h) ctime test.txt (1264331352)"]
      [INT (1)] => [STRING: "January 24, 2010; [12:09:12] (12h) mtime test.txt (1264331352)"]
      [INT (2)] => [STRING: "January 24, 2010; [12:09:12] (12h) ctime touch.txt (1264331352)"]
      [INT (3)] => [STRING: "January 24, 2010; [12:09:12] (12h) mtime touch.txt (1264331352)"]
      [INT (4)] => [STRING: "January 24, 2010; [12:09:12] (12h) atime touch.txt (1264331352)"]
      [INT (5)] => [STRING: "January 24, 2010; [12:09:12] (12h) mtime summer.txt (1264331352)"]
      [INT (6)] => [STRING: "January 24, 2010; [12:09:12] (12h) mtime winter.txt (1264331352)"]
    ]</pre>
    Warning: touch(): Unable to access (D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\touch.txt): Permission denied in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 8, column 5.
    Sorry Could Not change modification time of touch.txt
    Warning: touch(): Unable to access (D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\touch.txt): Permission denied in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 14, column 1.
    
    Warning: touch(): Unable to access (D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\winter.txt): Permission denied in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 16, column 1.
    
    Warning: touch(): Unable to access (D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\summer.txt): Permission denied in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 17, column 1.
    <pre>[ARRAY
      [INT (0)] => [STRING: "January 24, 2010; [13:09:12] (13h) ctime test.txt (1264334952)"]
      [INT (1)] => [STRING: "January 24, 2010; [13:09:12] (13h) mtime test.txt (1264334952)"]
      [INT (2)] => [STRING: "January 24, 2010; [13:09:12] (13h) ctime touch.txt (1264334952)"]
      [INT (3)] => [STRING: "January 24, 2010; [13:09:12] (13h) mtime touch.txt (1264334952)"]
      [INT (4)] => [STRING: "January 24, 2010; [13:09:12] (13h) atime touch.txt (1264334952)"]
      [INT (5)] => [STRING: "January 24, 2010; [13:09:12] (13h) mtime summer.txt (1264334952)"]
      [INT (6)] => [STRING: "January 24, 2010; [13:09:12] (13h) mtime winter.txt (1264334952)"]
    ]</pre>
    Math/abs.php: SUCCEEDED
    Math/atan2.php: SUCCEEDED
    Math/base_convert.php: SUCCEEDED
    Math/bindec.php: SUCCEEDED
    Math/ceil.php: SUCCEEDED
    Math/cos.php: SUCCEEDED
    Math/decbin.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <pre>
    [double: 2294967295]
    10001000110010100110101111111111
    [double: 4294967296]
    0
    [double: 8589934590]
    11111111111111111111111111111110
    [double: 8589934590]
    11111111111111111111111111111110
    [double: 8589934591]
    11111111111111111111111111111111
    [Int: 1000.000.000.000]
    11010100101001010001000000000000
    <hr>(-1, -5435, 2.14, 0, 26)
    11111111111111111111111111111111
    11111111111111111110101011000101
    10
    0
    11010 
    </pre>
    <pre>
    [???: 2294967295]
    10001000110010100110101111111111
    [???: 4294967296]
    0
    [???: 8589934590]
    11111111111111111111111111111110
    [???: 8589934590]
    11111111111111111111111111111110
    [???: 8589934591]
    11111111111111111111111111111111
    [Int: 1000.000.000.000]
    11010100101001010001000000000000
    <hr>(-1, -5435, 2.14, 0, 26)
    11111111111111111111111111111111
    11111111111111111110101011000101
    10
    0
    11010 
    </pre>
    Math/dechex.php: SUCCEEDED
    Math/decoct.php: SUCCEEDED
    Math/deg2rad.php: SUCCEEDED
    Math/exp.php: SUCCEEDED
    Math/floor.php: SUCCEEDED
    Math/fmod.php: SUCCEEDED
    Math/hexdec.php: SUCCEEDED
    Math/max.php: SUCCEEDED
    Math/min.php: SUCCEEDED
    Math/modulo_warn.php: SUCCEEDED
    Math/octdec.php: SUCCEEDED
    Math/pow.php: SUCCEEDED
    Math/rad2deg.php: SUCCEEDED
    Math/round.php: SUCCEEDED
    Math/sin.php: SUCCEEDED
    Math/sqrt.php: SUCCEEDED
    Math/tan.php: SUCCEEDED
    Math/uniqid.php: SUCCEEDED
    Misc/calendar_extension.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0
    0
    2375840
    0
    14
    32
    2
    There are 31 days in August 2003
    There are 28 days in February 2003
    There are 29 days in February 2004
    There are 31 days in December 2034
    1748326
    1748324
    374867
    0
    322f32322f35373633
    ebe120e7f9e5ef20e4faf9f1e2
    ebe120e7f9e5ef20e427faf9f1e2
    ebe120e7f9e5ef20e420e0ecf4e9ed20faf9f1e2
    ebe120e7f9e5ef20e42720e0ecf4e9ed20faf9f1e2
    eb22e120e7f9e5ef20e4faf9f122e2
    e12720e7f9e5ef20e4faf9f122e2
    e12720e7f9e5ef20e427faf9f122e2
    e12720e7f9e5ef20e420e0ecf4e9ed20faf9f122e2
    e12720e7f9e5ef20e42720e0ecf4e9ed20faf9f122e2
    Error: Call to undefined function: 'frenchtojd' in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\__input.txt at expression on line 2, column 1.
    Misc/ini_parse.php: SUCCEEDED
    Misc/lexer.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    T_INLINE_HTML
    311 '\r\n'
    T_OPEN_TAG
    368 '&lt;?'
    T_WHITESPACE
    371 ' \r\n\r\n'
    T_FINAL
    345 'final'
    T_WHITESPACE
    371 ' '
    T_CLASS
    353 'class'
    T_WHITESPACE
    371 ' '
    T_STRING
    307 'A'
    T_WHITESPACE
    371 ' \r\n'
        '{'
    T_WHITESPACE
    371 ' \r\n  '
    T_FUNCTION
    334 'function'
    T_WHITESPACE
    371 ' '
    T_STRING
    307 '__get'
        '('
    T_VARIABLE
    309 '$x'
        ')'
    T_WHITESPACE
    371 ' \r\n  '
        '{'
    T_WHITESPACE
    371 ' \r\n    '
    T_VARIABLE
    309 '$x'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_START_HEREDOC
    372 '&lt;&lt;&lt;EOOOOOOOOOOOOOOT\r\n'
    T_ENCAPSED_AND_WHITESPACE
    314 '         &lt;&lt;&lt;hello\r\nEOOOOOOOOOOOOOOt;\r\nEOOOOOOOOOOOOOT;\r\n'
    T_END_HEREDOC
    373 'EOOOOOOOOOOOOOOT'
        ';'
    T_WHITESPACE
    371 '\r\n\r\n    '
        '$'
    T_VARIABLE
    309 '$y'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_ARRAY
    360 'array'
    T_WHITESPACE
    371 ' '
        '('
    T_LNUMBER
    305 '1'
        ','
    T_DNUMBER
    306 '100000000000000'
        ','
    T_DNUMBER
    306 '999999999999999999999999999999999'
        ','
    T_STRING
    307 'true'
        ','
    T_STRING
    307 'false'
        ')'
        ';'
    T_WHITESPACE
    371 '\r\n    '
        '$'
        '{'
        '&quot;'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
    T_DOLLAR_OPEN_CURLY_BRACES
    374 '${'
        '$'
        '{'
    T_CONSTANT_ENCAPSED_STRING
    315 '&quot;xxx&quot;'
        '}'
        '}'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
        '&quot;'
        '}'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_LNUMBER
    305 '1'
        ';'
    T_WHITESPACE
    371 '\r\n    '
        '$'
        '{'
        '&quot;'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
    T_DOLLAR_OPEN_CURLY_BRACES
    374 '${'
        '$'
        '{'
        '&quot;'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
    T_VARIABLE
    309 '$x'
    T_ENCAPSED_AND_WHITESPACE
    314 '-&gt;$$'
    T_VARIABLE
    309 '$x0xx'
        '&quot;'
        '}'
        '}'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
        '&quot;'
        '}'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_LNUMBER
    305 '1'
        ';'
    T_WHITESPACE
    371 '\r\n  '
        '}'
    T_WHITESPACE
    371 ' \r\n'
        '}'
    T_WHITESPACE
    371 '\r\n\r\n'
    T_CLOSE_TAG
    370 '?&gt;'
    '
    '
        '&lt;?'
        ' 
    
    '
        'final'
        ' '
        'class'
        ' '
        'A'
        ' 
    '
        '{'
        ' 
      '
        'function'
        ' '
    258
    258 '
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\__input.txt at expression on line 10, column 7.
    '
        '('
        '$x'
        ')'
        ' 
      '
        '{'
        ' 
        '
        '$x'
        ' '
        '='
        ' '
        '&lt;&lt;&lt;EOOOOOOOOOOOOOOT
    '
        '         &lt;&lt;&lt;'
        'hello'
        '
    '
        'EOOOOOOOOOOOOOOt;
    '
        'EOOOOOOOOOOOOOT;
    '
        'EOOOOOOOOOOOOOOT'
        ';'
        '
    
        '
        '$'
        '$y'
        ' '
        '='
        ' '
        'array'
        ' '
        '('
        '1'
        ','
        '100000000000000'
        ','
        '999999999999999999999999999999999'
        ','
        'true'
        ','
    256
    256 '
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\__input.txt at expression on line 10, column 7.
    '
        ')'
        ';'
        '
        '
        '$'
        '{'
        '&quot;'
        'x'
        '${'
        '$'
        '{'
    -29
    -29 '
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\__input.txt at expression on line 10, column 7.
    '
        '}'
        '}'
        'x'
        '&quot;'
        '}'
        ' '
        '='
        ' '
        '1'
        ';'
        '
        '
        '$'
        '{'
        '&quot;'
        'x'
        '${'
        '$'
        '{'
        '&quot;'
        'x'
        '$x'
        '-&gt;'
        '$'
        '$'
        '$x0xx'
        '&quot;'
        '}'
        '}'
        'x'
        '&quot;'
        '}'
        ' '
        '='
        ' '
        '1'
        ';'
        '
      '
        '}'
        ' 
    '
        '}'
        '
    
    '
        '?&gt;'
    Misc/locale.php: SUCCEEDED
    Misc/output2.php: SUCCEEDED
    Misc/stack_trace.php: FAILED
    Script hung upNo errorsSuccess
    Expected test outputReal script output
    Unhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---> System.IndexOutOfRangeException: Index was outside the bounds of the array.
       at PHP.Core.PhpStackFrame..ctor(ScriptContext context, StackFrame frame, FrameKinds kind)
       at PHP.Core.PhpStackTrace..ctor(ScriptContext context, StackTrace clrTrace)
       at PHP.Core.PhpStackTrace..ctor(ScriptContext context, Int32 skipFrames)
       at PHP.Library.Errors.Backtrace()
       at <stack_trace.inc>.<Script>.j(ScriptContext <context>) in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\stack_trace.inc:line 11
       at <stack_trace.inc>.<Script>.j(Object instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <stack_trace.inc>.<Script>.i(ScriptContext <context>) in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\stack_trace.inc:line 6
       at <stack_trace.inc>.<Script>.i(Object instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <^0>.<Global>.<?0>.h(ScriptContext <context>) in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\__input.txt:line 4
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack, DTypeDesc caller)
       at PHP.Core.PhpCallback.InvokeInternal(Object[] args)
       at PHP.Core.PhpCallback.Invoke(Object[] args)
       at PHP.Library.PhpArrays.Map(PhpCallback map, PhpArray[] arrays)
       at <^1>.<Global>.<?1>.Lambda_1(ScriptContext <context>) in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\__input.txt:line 1
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <__input.txt>.<Script>.f(ScriptContext <context>) in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\__input.txt:line 6
       at <__input.txt>.<Script>.f(Object instance, PhpStack stack)
       at <__input.txt>.<Script>.<Main>(ScriptContext <context>, Dictionary`2 <locals>, DObject , DTypeDesc , Boolean ) in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\__input.txt:line 18
       at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)
       at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)
       --- End of inner exception stack trace ---
       at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)
       at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)
       at <Global>.Run(String[] )
    
    Misc/tokens.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    T_REQUIRE_ONCE = 258,
    T_REQUIRE = 259,
    T_EVAL = 260,
    T_INCLUDE_ONCE = 261,
    T_INCLUDE = 262,
    T_LOGICAL_OR = 263,
    T_LOGICAL_XOR = 264,
    T_LOGICAL_AND = 265,
    T_PRINT = 266,
    T_SR_EQUAL = 267,
    T_SL_EQUAL = 268,
    T_XOR_EQUAL = 269,
    T_OR_EQUAL = 270,
    T_AND_EQUAL = 271,
    T_MOD_EQUAL = 272,
    T_CONCAT_EQUAL = 273,
    T_DIV_EQUAL = 274,
    T_MUL_EQUAL = 275,
    T_MINUS_EQUAL = 276,
    T_PLUS_EQUAL = 277,
    T_BOOLEAN_OR = 278,
    T_BOOLEAN_AND = 279,
    T_IS_NOT_IDENTICAL = 280,
    T_IS_IDENTICAL = 281,
    T_IS_NOT_EQUAL = 282,
    T_IS_EQUAL = 283,
    T_IS_GREATER_OR_EQUAL = 284,
    T_IS_SMALLER_OR_EQUAL = 285,
    T_SR = 286,
    T_SL = 287,
    T_INSTANCEOF = 288,
    T_UNSET_CAST = 289,
    T_BOOL_CAST = 290,
    T_OBJECT_CAST = 291,
    T_ARRAY_CAST = 292,
    T_STRING_CAST = 293,
    T_DOUBLE_CAST = 294,
    T_INT_CAST = 295,
    T_DEC = 296,
    T_INC = 297,
    T_CLONE = 298,
    T_NEW = 299,
    T_EXIT = 300,
    T_IF = 301,
    T_ELSEIF = 302,
    T_ELSE = 303,
    T_ENDIF = 304,
    T_LNUMBER = 305,
    T_DNUMBER = 306,
    T_STRING = 307,
    T_STRING_VARNAME = 308,
    T_VARIABLE = 309,
    T_NUM_STRING = 310,
    T_INLINE_HTML = 311,
    T_CHARACTER = 312,
    T_BAD_CHARACTER = 313,
    T_ENCAPSED_AND_WHITESPACE = 314,
    T_CONSTANT_ENCAPSED_STRING = 315,
    T_ECHO = 316,
    T_DO = 317,
    T_WHILE = 318,
    T_ENDWHILE = 319,
    T_FOR = 320,
    T_ENDFOR = 321,
    T_FOREACH = 322,
    T_ENDFOREACH = 323,
    T_DECLARE = 324,
    T_ENDDECLARE = 325,
    T_AS = 326,
    T_SWITCH = 327,
    T_ENDSWITCH = 328,
    T_CASE = 329,
    T_DEFAULT = 330,
    T_BREAK = 331,
    T_CONTINUE = 332,
    T_GOTO = 333,
    T_FUNCTION = 334,
    T_CONST = 335,
    T_RETURN = 336,
    T_TRY = 337,
    T_CATCH = 338,
    T_THROW = 339,
    T_USE = 340,
    T_GLOBAL = 341,
    T_PUBLIC = 342,
    T_PROTECTED = 343,
    T_PRIVATE = 344,
    T_FINAL = 345,
    T_ABSTRACT = 346,
    T_STATIC = 347,
    T_VAR = 348,
    T_UNSET = 349,
    T_ISSET = 350,
    T_EMPTY = 351,
    T_HALT_COMPILER = 352,
    T_CLASS = 353,
    T_INTERFACE = 354,
    T_EXTENDS = 355,
    T_IMPLEMENTS = 356,
    T_OBJECT_OPERATOR = 357,
    T_DOUBLE_ARROW = 358,
    T_LIST = 359,
    T_ARRAY = 360,
    T_CLASS_C = 361,
    T_METHOD_C = 362,
    T_FUNC_C = 363,
    T_LINE = 364,
    T_FILE = 365,
    T_COMMENT = 366,
    T_DOC_COMMENT = 367,
    T_OPEN_TAG = 368,
    T_OPEN_TAG_WITH_ECHO = 369,
    T_CLOSE_TAG = 370,
    T_WHITESPACE = 371,
    T_START_HEREDOC = 372,
    T_END_HEREDOC = 373,
    T_DOLLAR_OPEN_CURLY_BRACES = 374,
    T_CURLY_OPEN = 375,
    T_PAAMAYIM_NEKUDOTAYIM = 376,
    T_DOUBLE_COLON = 376,
    T_NAMESPACE = 377,
    T_NS_C = 378,
    T_DIR = 379,
    T_NS_SEPARATOR = 380,
    T_INCLUDE = 129,
    T_INCLUDE_ONCE = 130,
    T_EVAL = 131,
    T_REQUIRE = 132,
    T_REQUIRE_ONCE = 133,
    T_LOGICAL_OR = 136,
    T_LOGICAL_XOR = 137,
    T_LOGICAL_AND = 138,
    T_PRINT = 139,
    T_PLUS_EQUAL = 140,
    T_MINUS_EQUAL = 141,
    T_MUL_EQUAL = 142,
    T_DIV_EQUAL = 143,
    T_CONCAT_EQUAL = 144,
    T_MOD_EQUAL = 145,
    T_AND_EQUAL = 146,
    T_OR_EQUAL = 147,
    T_XOR_EQUAL = 148,
    T_SL_EQUAL = 149,
    T_SR_EQUAL = 150,
    T_BOOLEAN_OR = 151,
    T_BOOLEAN_AND = 152,
    T_IS_EQUAL = 153,
    T_IS_NOT_EQUAL = 154,
    T_IS_IDENTICAL = 155,
    T_IS_NOT_IDENTICAL = 156,
    T_IS_SMALLER_OR_EQUAL = 157,
    T_IS_GREATER_OR_EQUAL = 158,
    T_SL = 159,
    T_SR = 160,
    T_INC = 161,
    T_DEC = 162,
    T_NEW = 164,
    T_INSTANCEOF = 165,
    T_CLONE = 167,
    T_LNUMBER = 168,
    T_DNUMBER = 170,
    T_STRING = 171,
    T_STRING_VARNAME = 172,
    T_VARIABLE = 173,
    T_NUM_STRING = 174,
    T_INLINE_HTML = 175,
    T_CHARACTER = 176,
    T_BAD_CHARACTER = 177,
    T_ENCAPSED_AND_WHITESPACE = 178,
    T_CONSTANT_ENCAPSED_STRING = 179,
    T_EXIT = 180,
    T_IF = 181,
    T_ELSEIF = 182,
    T_ELSE = 183,
    T_ENDIF = 184,
    T_ECHO = 185,
    T_DO = 186,
    T_WHILE = 187,
    T_ENDWHILE = 188,
    T_FOR = 189,
    T_ENDFOR = 190,
    T_FOREACH = 191,
    T_ENDFOREACH = 192,
    T_AS = 193,
    T_SWITCH = 194,
    T_ENDSWITCH = 195,
    T_CASE = 196,
    T_DEFAULT = 197,
    T_BREAK = 198,
    T_CONTINUE = 199,
    T_FUNCTION = 200,
    T_CONST = 201,
    T_RETURN = 202,
    T_GLOBAL = 203,
    T_STATIC = 204,
    T_VAR = 205,
    T_UNSET = 206,
    T_ISSET = 207,
    T_EMPTY = 208,
    T_CLASS = 209,
    T_EXTENDS = 210,
    T_OBJECT_OPERATOR = 211,
    T_DOUBLE_ARROW = 212,
    T_LIST = 213,
    T_ARRAY = 214,
    T_CLASS_C = 215,
    T_METHOD_C = 216,
    T_FUNC_C = 217,
    T_LINE = 218,
    T_FILE = 219,
    T_COMMENT = 220,
    T_DOC_COMMENT = 221,
    T_OPEN_TAG = 226,
    T_OPEN_TAG_WITH_ECHO = 227,
    T_CLOSE_TAG = 228,
    T_WHITESPACE = 229,
    T_START_HEREDOC = 230,
    T_END_HEREDOC = 231,
    T_DOLLAR_OPEN_CURLY_BRACES = 232,
    T_CURLY_OPEN = 233,
    T_DOUBLE_COLON = 234,
    T_PAAMAYIM_NEKUDOTAYIM = 234,
    T_TRY = 236,
    T_CATCH = 237,
    T_THROW = 238,
    T_INTERFACE = 239,
    T_IMPLEMENTS = 240,
    T_ABSTRACT = 241,
    T_FINAL = 242,
    T_PRIVATE = 243,
    T_PROTECTED = 244,
    T_PUBLIC = 245,
    T_BOOL_CAST = 285,
    T_INT_CAST = 288,
    T_DOUBLE_CAST = 294,
    T_STRING_CAST = 297,
    T_ARRAY_CAST = 299,
    T_OBJECT_CAST = 300,
    T_UNSET_CAST = 301,
    T_HALT_COMPILER = 351,
    Misc/user_error_handlers.php: SUCCEEDED
    Objects/conditional1.php: SUCCEEDED
    Objects/conditional2.php: SUCCEEDED
    Objects/conditional_base_class.php: SUCCEEDED
    Objects/constant_test.php: SUCCEEDED
    Objects/evaled_parent.php: SUCCEEDED
    Objects/getter_setter_bug28444.php: SUCCEEDED
    Objects/instanceof.php: SUCCEEDED
    Objects/new_via_unknown_ctor.php: SUCCEEDED
    Objects/object_creation_test.php: SUCCEEDED
    Objects/static_field_test.php: SUCCEEDED
    Objects/static_method_test.php: SUCCEEDED
    Objects/sys_class_const.php: SUCCEEDED
    Objects/this2.php: SUCCEEDED
    RegEx/ereg.php: SUCCEEDED
    RegEx/preg_match_unmatched_groups.php: SUCCEEDED
    RegEx/preg_replace_eval.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ab"01300 as"00da sd"0asdsa das asd 11asd a1sd a
    ab"01300 as"00da sd"0(aasdasdkjask,$a,\,\l,a,s,d,a,s,d,k,j,a,s,${120})(ldjaklsdjalk,$l,\,\l,d,j,a,k,l,s,d,j,a,l,${120})djdsa das asd 11asd a1sd a
    ab"01300 as"00da sd"0asdsa das asd 11asd a1sd a
    ab"01300 as"00da sd"0(aasdasdkjask,$a,\,\l,a,s,d,a,s,d,k,j,,,${120})(ldjaklsdjalk,$l,\,\l,d,j,a,k,l,s,d,j,,,${120})djdsa das asd 11asd a1sd a
    RegEx/regexp-sql.php: SUCCEEDED
    RegEx/Perl/cache.php: SUCCEEDED
    RegEx/Perl/grep1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      [3] => string(3) "1.5"
      [6] => string(5) "58.54"
    }
    Notice: preg_grep(): Array to string conversion in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\RegEx\Perl\__input.txt at expression on line 5, column 1.
    array(2)
    {
      [3] => string(3) "1.5"
      [6] => string(5) "58.54"
    }
    RegEx/Perl/grep2.php: SUCCEEDED
    RegEx/Perl/match1.php: SUCCEEDED
    RegEx/Perl/match10.php: SUCCEEDED
    RegEx/Perl/match2.php: SUCCEEDED
    RegEx/Perl/match3.php: SUCCEEDED
    RegEx/Perl/match4.php: SUCCEEDED
    RegEx/Perl/match5.php: SUCCEEDED
    RegEx/Perl/match6.php: SUCCEEDED
    RegEx/Perl/match7.php: SUCCEEDED
    RegEx/Perl/match8.php: SUCCEEDED
    RegEx/Perl/match9.php: SUCCEEDED
    RegEx/Perl/match_all1.php: SUCCEEDED
    RegEx/Perl/match_all2.php: SUCCEEDED
    RegEx/Perl/match_all3.php: SUCCEEDED
    RegEx/Perl/match_all4.php: SUCCEEDED
    RegEx/Perl/match_dollar.php: SUCCEEDED
    RegEx/Perl/overflow.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string("kfkaj +j k45´┐Ż´┐Ż´┐Ż´┐Ż´┐Ż3#$%^&kjakfjkaj|kfj")
    string("kfkaj +j k45�����3#$%^&kjakfjkaj|kfj")
    RegEx/Perl/quote1.php: SUCCEEDED
    RegEx/Perl/quote2.php: SUCCEEDED
    RegEx/Perl/quote3.php: SUCCEEDED
    RegEx/Perl/replace1.php: SUCCEEDED
    RegEx/Perl/replace2.php: SUCCEEDED
    RegEx/Perl/replace3.php: SUCCEEDED
    RegEx/Perl/replace4.php: SUCCEEDED
    RegEx/Perl/replace5.php: SUCCEEDED
    RegEx/Perl/replace6.php: SUCCEEDED
    RegEx/Perl/replace7.php: SUCCEEDED
    RegEx/Perl/replace8.php: SUCCEEDED
    RegEx/Perl/replace9.php: SUCCEEDED
    RegEx/Perl/replace_callback1.php: SUCCEEDED
    RegEx/Perl/replace_callback2.php: SUCCEEDED
    RegEx/Perl/split1.php: SUCCEEDED
    RegEx/Perl/split2.php: SUCCEEDED
    RegEx/Perl/split3.php: SUCCEEDED
    RegEx/Perl/split4.php: SUCCEEDED
    RegEx/Perl/split5.php: SUCCEEDED
    RegEx/Perl/ungreedy.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    aaa
    a
    aaa
    
    a
    aa
    aaa
    aa
    aaa
    aaa
    a
    aaa
    a
    a
    aa
    aaa
    aa
    aaa
    RegEx/Perl/unsuccessful-preg_match_all.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0
    4
    1
    4
    0
    4
    1
    7
    SPL/ArrayAccess_offsetExists.php: SUCCEEDED
    SPL/exceptions.php: SUCCEEDED
    Strings/addcslashes.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    \f\o\o\[ \]
    Issues a Warning:
    // echo addcslashes("zoo['.']", 'z..A');
    // output:  \zoo['\.']
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt at expression on line 4, column 1.
    
    Issues a Warning:
    // echo addcslashes("zoo['.']", 'z..A');
    // output:  \zoo['\.']
    Strings/addslashes.php: SUCCEEDED
    Strings/chunk_split.php: SUCCEEDED
    Strings/concat.php: SUCCEEDED
    Strings/count_chars.php: SUCCEEDED
    Strings/crc32.php: SUCCEEDED
    Strings/crypt.php: SUCCEEDED
    Strings/crypt2.php: SUCCEEDED
    Strings/echo.php: SUCCEEDED
    Strings/explode.php: SUCCEEDED
    Strings/get_html_translation_table.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <hr>[&] => &amp;
    [>] => &gt;
    [<] => &lt;
    ["] => &quot;
    <hr>Hallo &amp; &lt;Frau&gt; &amp; Kr&iuml;&iquest;&frac12;mer
    <hr>[&] => &amp;
    [>] => &gt;
    [<] => &lt;
    ["] => &quot;
    <hr>Hallo &amp; &lt;Frau&gt; &amp; Kr�mer
    Strings/nl2br.php: SUCCEEDED
    Strings/pack.php: SUCCEEDED
    Strings/pos.php: SUCCEEDED
    Strings/runtime-quotes.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    fread = (x''y"z)
    fgets = (x''y"z)
    file[0] = (x''y"z)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    
    Warning: fopen(runtime-quotes2.txt): failed to open stream: Permission denied in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt on line 33
    
    Warning: fwrite() expects parameter 1 to be resource, boolean given in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt on line 35
    fwrite = ()
    
    Warning: fputs() expects parameter 1 to be resource, boolean given in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt on line 38
    fputs = ()
    
    Warning: fclose() expects parameter 1 to be resource, boolean given in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt on line 41
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (x'y"z)
    fgets = (x'y"z)
    file[0] = (x'y"z)
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (a\'b"\\ca\)
    fgets = (a\'b"\\ca\'b"\\c)
    file[0] = (a\'b"\\ca\'b"\\c)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    e'e
    e''e
    e'e
    e'e
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    e'e
    e'e
    e'e
    e'e
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    fread = (x''y"z)
    fgets = (x''y"z)
    file[0] = (x''y"z)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    
    Warning: fopen(): Unable to access (D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\runtime-quotes2.txt): Permission denied in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt at expression on line 33, column 3.
    
    Warning: Cannot convert bool to resource implicitly in a call to function fwrite() in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt at expression on line 35, column 3.
    fwrite = ()
    
    Warning: Cannot convert bool to resource implicitly in a call to function fputs() in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt at expression on line 38, column 3.
    fputs = ()
    
    Warning: Cannot convert bool to resource implicitly in a call to function fclose() in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt at expression on line 41, column 3.
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (x'y"z)
    fgets = (x'y"z)
    file[0] = (x'y"z)
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (a\'b"\\ca\)
    fgets = (a\'b"\\ca\'b"\\c)
    file[0] = (a\'b"\\ca\'b"\\c)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    e'e
    e''e
    e'e
    e'e
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    e'e
    e'e
    e'e
    e'e
    Strings/sprintf.php: SUCCEEDED
    Strings/sprintf2.php: SUCCEEDED
    Strings/strtr.php: SUCCEEDED
    Strings/str_ireplace.php: SUCCEEDED
    Strings/str_word_count.php: SUCCEEDED
    Strings/substr_operations.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string(1) "b"
    string(1) "b"
    string(9) "baaaaaaaa"
    string(9) "aaaaaaaab"
    string(3) "aba"
    string(9) "aaaaaaaab"
    
    integer(8)
    integer(8)
    integer(0)
    integer(0)
    integer(0)
    
    array
    {
      [0] => string(4) "baaa"
      [1] => string(4) "baaa"
      [2] => string(1) "b"
      [3] => string(1) "b"
      [4] => string(1) "b"
    }
    
    integer(0)
    integer(0)
    integer(0)
    integer(1)
    integer(-1)
    string(1) "b"
    string(1) "b"
    string(9) "baaaaaaaa"
    string(9) "aaaaaaaab"
    string(3) "aba"
    string(9) "aaaaaaaab"
    
    integer(8)
    integer(8)
    integer(0)
    integer(0)
    integer(0)
    
    array(5)
    {
      [0] => string(4) "baaa"
      [1] => string(4) "baaa"
      [2] => string(1) "b"
      [3] => string(1) "b"
      [4] => string(1) "b"
    }
    
    integer(0)
    integer(0)
    integer(0)
    integer(1)
    integer(-1)
    Strings/wordwrap.php: SUCCEEDED
    Variables/advanced_serialize.php: SUCCEEDED
    Variables/arguments.php: SUCCEEDED
    Variables/bitwise.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "00"
    string(2) "31"
    string(2) "31"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    0
    0
    0
    5
    0
    5
    40
    5
    45
    string(48) "000000000000000000000000000000000000000000000000"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(14) "31323331323331"
    string(2) "30"
    string(14) "31323331323331"
    string(16) "3635343635343536"
    string(2) "30"
    string(16) "3635343635343536"
    string(14) "337a5e8be43d7a"
    string(14) "00002130120201"
    string(48) "337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42"
    string(16) "347d598ce33a7e77"
    string(16) "0200243214040100"
    string(48) "367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42"
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "00"
    string(2) "31"
    string(2) "31"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    0
    -9223372036854775808
    -9223372036854775808
    -9223372036854775803
    0
    -9223372036854775803
    40
    5
    45
    string(48) "000000000000000000000000000000000000000000000000"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(14) "31323331323331"
    string(2) "30"
    string(14) "31323331323331"
    string(16) "3635343635343536"
    string(2) "30"
    string(16) "3635343635343536"
    string(14) "337a5e8be43d7a"
    string(14) "00002130120201"
    string(48) "337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42"
    string(16) "347d598ce33a7e77"
    string(16) "0200243214040100"
    string(48) "367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42"
    Variables/comparisons.php: SUCCEEDED
    Variables/constant.php: SUCCEEDED
    Variables/extract.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    EXTR_PREFIX_ALL
    integer(4)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
      'prefix_non_existent' => integer(1)
    }
    <hr>EXTR_PREFIX_INVALID
    integer(5)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => integer(2)
      'non_existent' => integer(1)
      'prefix_' => integer(1)
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => 'hello'
    }
    <hr>EXTR_PREFIX_SAME
    integer(3)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'non_existent' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>EXTR_PREFIX_IF_EXISTS
    integer(3)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>
    EXTR_PREFIX_ALL
    integer(4)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
      'prefix_non_existent' => integer(1)
    }
    <hr>EXTR_PREFIX_INVALID
    integer(2)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_ad' => integer(2)
      'prefix_non_existent' => integer(1)
    }
    <hr>EXTR_PREFIX_SAME
    integer(4)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'non_existent' => integer(1)
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>EXTR_PREFIX_IF_EXISTS
    integer(3)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>
    Variables/func_get_args.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      [0] => integer(1)
    }
    integer(1)
    array(1)
    {
      [0] => integer(1)
    }
    integer(1)
    Variables/is_number.php: SUCCEEDED
    Variables/serialize.php: SUCCEEDED
    Variables/var_dumping.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    (
      [0] => 1
      [1] => 
      [2] => 1
      [3] => 1.2
      [4] => 
      [5] => asdas
      [6] => array
      (
        [0] => 1
      )
      [7] => stdClass object
      (
      )
      [8] => resource id #4
    )
    array
    {
      [0] => bool(true)
      [1] => bool(false)
      [2] => integer(1)
      [3] => double(1.2)
      [4] => NULL
      [5] => string(5) "asdas"
      [6] => array
      {
        [0] => integer(1)
      }
      [7] => object(stdClass)(0)
      {
      }
      [8] => resource(4) of type (stream)
    }
    array
    (
      '0' => true,
      '1' => false,
      '2' => 1,
      '3' => 1.2,
      '4' => NULL,
      '5' => 'asdas',
      '6' => array
      (
        '0' => 1
      ),
      '7' => class stdClass
      {
    
      },
      '8' => NULL
    )
    array
    (
      [0] => 1
      [1] => 
      [2] => 1
      [3] => 1.2
      [4] => 
      [5] => asdas
      [6] => array
      (
        [0] => 1
      )
      [7] => stdClass object
      (
      )
      [8] => resource id #4
    )
    array(9)
    {
      [0] => bool(true)
      [1] => bool(false)
      [2] => integer(1)
      [3] => double(1.2)
      [4] => NULL
      [5] => string(5) "asdas"
      [6] => array(1)
      {
        [0] => integer(1)
      }
      [7] => object(stdClass)(0)
      {
      }
      [8] => resource(4) of type (stream)
    }
    array
    (
      '0' => true,
      '1' => false,
      '2' => 1,
      '3' => 1.2,
      '4' => NULL,
      '5' => 'asdas',
      '6' => array
      (
        '0' => 1
      ),
      '7' => class stdClass
      {
    
      },
      '8' => NULL
    )
    WorkItems/22016.php: SUCCEEDED
    WorkItems/22019.php: SUCCEEDED
    WorkItems/26052.php: SUCCEEDED
    WorkItems/26681.php: SUCCEEDED
    WorkItems/2787.php: SUCCEEDED
    Xml/005.php: SUCCEEDED
    Xml/006.php: SUCCEEDED
    Xml/007.php: SUCCEEDED
    Xml/008.php: SUCCEEDED
    Xml/009.php: SUCCEEDED
    Xml/011.php: SUCCEEDED
    Xml/013.php: SUCCEEDED
    Xml/017.php: SUCCEEDED
    Xml/018.php: SUCCEEDED
    Xml/019.php: SUCCEEDED
    Xml/020.php: SUCCEEDED
    Xml/021.php: SUCCEEDED
    Xml/025.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
      'foo' => 'foobar'
    }
    array
    {
      'html' => 'http://www.w3.org/1999/xhtml'
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
    }
    array
    {
      'html' => 'http://www.w3.org/1999/xhtml'
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'foo' => 'foobar'
      'baz' => 'foobarbaz'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
    }
    array
    {
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
      'baz' => 'foobarbaz'
      'foo' => 'foobar'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
      'baz' => 'foobarbaz'
      'foo' => 'foobar'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
    }
    array
    {
    }
    Xml/026.php: SUCCEEDED
    Xml/027.php: SUCCEEDED
    Xml/028.php: SUCCEEDED
    Xml/029.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    'Joe'
    integer(3)
    integer(0)
    'John'
    integer(3)
    integer(1)
    'Jane'
    integer(3)
    integer(0)
    'Joe'
    integer(1)
    integer(1)
    'John'
    integer(1)
    integer(1)
    'Jane'
    integer(1)
    integer(1)
    Xml/030.php: SUCCEEDED
    Xml/032.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    FALSE
    FALSE
    FALSE
    TRUE
    TRUE
    TRUE
    Xml/033.php: SUCCEEDED
    Xml/bug26384.php: SUCCEEDED
    Xml/bug28721.php: SUCCEEDED
    Xml/bug28817.php: SUCCEEDED
    Xml/bug32615.php: SUCCEEDED
    Xml/bug33853.php: SUCCEEDED
    Xml/bug34276.php: SUCCEEDED
    Xml/bug35342.php: SUCCEEDED
    Xml/bug36756.php: SUCCEEDED
    Xml/bug37277.php: SUCCEEDED
    Xml/dom002.php: SUCCEEDED
    Xml/dom003.php: SUCCEEDED
    Xml/dom006.php: SUCCEEDED
    Xml/dom007.php: SUCCEEDED
    Xml/dom_set_attr_node.php: SUCCEEDED
    Xml/xslt001.php: SUCCEEDED
    Xml/xslt002.php: SUCCEEDED
    Xml/xslt003.php: SUCCEEDED
    Xml/xslt004.php: SUCCEEDED
    Xml/xslt005.php: SUCCEEDED
    Xml/xslt006.php: SUCCEEDED
    Xml/xslt007.php: SUCCEEDED
    Xml/xslt010.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test 10: EXSLT Support
      
      
      Test Date : 0001-12-31Z
        year                 : 1
        leap-year            : false
        month-in-year        : 12
        month-name           : December
        month-abbreviation   : Dec
        week-in-year         : 1
        day-in-year          : 365
        day-in-month         : 31
        day-of-week-in-month : 5
        day-in-week          : 2
        day-name             : Monday
        day-abbreviation     : Mon
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : 3000-01-31
        year                 : 3000
        leap-year            : false
        month-in-year        : 1
        month-name           : January
        month-abbreviation   : Jan
        week-in-year         : 5
        day-in-year          : 31
        day-in-month         : 31
        day-of-week-in-month : 5
        day-in-week          : 6
        day-name             : Friday
        day-abbreviation     : Fri
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : 2000-02-29
        year                 : 2000
        leap-year            : true
        month-in-year        : 2
        month-name           : February
        month-abbreviation   : Feb
        week-in-year         : 9
        day-in-year          : 60
        day-in-month         : 29
        day-of-week-in-month : 5
        day-in-week          : 3
        day-name             : Tuesday
        day-abbreviation     : Tue
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : 9990001-12-31Z
        year                 : 9990001
        leap-year            : false
        month-in-year        : 12
        month-name           : December
        month-abbreviation   : Dec
        week-in-year         : 1
        day-in-year          : 365
        day-in-month         : 31
        day-of-week-in-month : 5
        day-in-week          : 2
        day-name             : Monday
        day-abbreviation     : Mon
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : -0004-02-29
        year                 : -4
        leap-year            : true
        month-in-year        : 2
        month-name           : February
        month-abbreviation   : Feb
        week-in-year         : 9
        day-in-year          : 60
        day-in-month         : 29
        day-of-week-in-month : 5
        day-in-week          : 1
        day-name             : Sunday
        day-abbreviation     : Sun
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
    Test 10: EXSLT Support
    Warning: Cannot find the script or external object that implements prefix 'http://exslt.org/dates-and-times'. in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Xml\__input.txt at expression on line 14, column 3.
    
    Warning: Illegal string offset '-1' in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Phalanger.inc at expression on line 7, column 6.
    Xml/xslt011.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test 11: php:function Support
    
    Warning: XSLTProcessor::transformToXml(): A PHP Object cannot be converted to a XPath-string in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Xml\__input.txt on line 18
    <?xml version="1.0"?>
    foobar - secondArg
    foobar - 
    this is from an external DomDocument
    from the Input Document
    static
    Test 11: php:function Support
    <?xml version="1.0" encoding="utf-8"?>foobar - secondArg
    foobar - 
    this is from an external DomDocument
    from the Input Document
    static
    not a DomNode object
    Xml/xslt012.php: SUCCEEDED
    ================================================ FILE: Testing/Tests/TestLogs/TestLog 2010-05-08.htm ================================================ PHP.NET Compiler test log

    PHP.NET Compiler test log

    (92%) 789 succeeded, 73 failed
    Test ResultCompiler error outputExpected test result
    @PHP/classes/array_access_001.php: SUCCEEDED
    @PHP/classes/array_access_002.php: SUCCEEDED
    @PHP/classes/array_access_003.php: SUCCEEDED
    @PHP/classes/array_access_004.php: SUCCEEDED
    @PHP/classes/array_access_005.php: SUCCEEDED
    @PHP/classes/array_access_006.php: SUCCEEDED
    @PHP/classes/array_access_007.php: SUCCEEDED
    @PHP/classes/array_access_008.php: SUCCEEDED
    @PHP/classes/array_access_009.php: SUCCEEDED
    @PHP/classes/array_access_010.php: SUCCEEDED
    @PHP/classes/array_access_011.php: SUCCEEDED
    @PHP/classes/array_access_013.php: SUCCEEDED
    @PHP/classes/assign_op_property_001.php: SUCCEEDED
    @PHP/classes/autoload_001.php: SUCCEEDED
    @PHP/classes/autoload_002.php: SUCCEEDED
    @PHP/classes/autoload_003.php: SUCCEEDED
    @PHP/classes/autoload_005.php: SUCCEEDED
    @PHP/classes/autoload_006.php: SUCCEEDED
    @PHP/classes/bug23951.php: SUCCEEDED
    @PHP/classes/bug24399.php: SUCCEEDED
    @PHP/classes/bug24445.php: SUCCEEDED
    @PHP/classes/bug26737.php: SUCCEEDED
    @PHP/classes/bug27468.php: SUCCEEDED
    @PHP/classes/bug27504.php: SUCCEEDED
    @PHP/classes/class_example.php: SUCCEEDED
    @PHP/classes/class_stdclass.php: SUCCEEDED
    @PHP/classes/clone_001.php: SUCCEEDED
    @PHP/classes/clone_002.php: SUCCEEDED
    @PHP/classes/clone_003.php: SUCCEEDED
    @PHP/classes/clone_004.php: SUCCEEDED
    @PHP/classes/clone_006.php: SUCCEEDED
    @PHP/classes/constants_scope_001.php: SUCCEEDED
    @PHP/classes/ctor_dtor.php: SUCCEEDED
    @PHP/classes/ctor_dtor_inheritance.php: SUCCEEDED
    @PHP/classes/ctor_name_clash.php: SUCCEEDED
    @PHP/classes/dereferencing_001.php: SUCCEEDED
    @PHP/classes/destructor_and_echo.php: SUCCEEDED
    @PHP/classes/destructor_and_references.php: SUCCEEDED
    @PHP/classes/destructor_inheritance.php: SUCCEEDED
    @PHP/classes/destructor_visibility_003.php: SUCCEEDED
    @PHP/classes/factory_001.php: SUCCEEDED
    @PHP/classes/factory_and_singleton_001.php: SUCCEEDED
    @PHP/classes/factory_and_singleton_002.php: SUCCEEDED
    @PHP/classes/final.php: SUCCEEDED
    @PHP/classes/incdec_property_001.php: SUCCEEDED
    @PHP/classes/incdec_property_002.php: SUCCEEDED
    @PHP/classes/incdec_property_003.php: SUCCEEDED
    @PHP/classes/incdec_property_004.php: SUCCEEDED
    @PHP/classes/inheritance.php: SUCCEEDED
    @PHP/classes/inheritance_002.php: SUCCEEDED
    @PHP/classes/interfaces_001.php: SUCCEEDED
    @PHP/classes/interface_construct.php: SUCCEEDED
    @PHP/classes/interface_doubled.php: SUCCEEDED
    @PHP/classes/interface_implemented.php: SUCCEEDED
    @PHP/classes/iterators_001.php: SUCCEEDED
    @PHP/classes/iterators_002.php: SUCCEEDED
    @PHP/classes/iterators_003.php: SUCCEEDED
    @PHP/classes/iterators_004.php: SUCCEEDED
    @PHP/classes/iterators_006.php: SUCCEEDED
    @PHP/classes/iterators_007.php: SUCCEEDED
    @PHP/classes/object_reference_001.php: SUCCEEDED
    @PHP/classes/private_001.php: SUCCEEDED
    @PHP/classes/private_002.php: SUCCEEDED
    @PHP/classes/private_003.php: SUCCEEDED
    @PHP/classes/private_003b.php: SUCCEEDED
    @PHP/classes/private_004.php: SUCCEEDED
    @PHP/classes/private_004b.php: SUCCEEDED
    @PHP/classes/private_005.php: SUCCEEDED
    @PHP/classes/private_005b.php: SUCCEEDED
    @PHP/classes/private_006.php: SUCCEEDED
    @PHP/classes/private_006b.php: SUCCEEDED
    @PHP/classes/private_007.php: SUCCEEDED
    @PHP/classes/private_007b.php: SUCCEEDED
    @PHP/classes/private_members.php: SUCCEEDED
    @PHP/classes/private_redeclare.php: SUCCEEDED
    @PHP/classes/protected_001.php: SUCCEEDED
    @PHP/classes/protected_001b.php: SUCCEEDED
    @PHP/classes/protected_002.php: SUCCEEDED
    @PHP/classes/serialize_001.php: SUCCEEDED
    @PHP/classes/singleton_001.php: SUCCEEDED
    @PHP/classes/static_properties_001.php: SUCCEEDED
    @PHP/classes/type_hinting_001.php: SUCCEEDED
    @PHP/classes/type_hinting_003.php: SUCCEEDED
    @PHP/classes/visibility_000c.php: SUCCEEDED
    @PHP/classes/visibility_001c.php: SUCCEEDED
    @PHP/classes/visibility_002c.php: SUCCEEDED
    @PHP/classes/visibility_003a.php: SUCCEEDED
    @PHP/classes/visibility_003c.php: SUCCEEDED
    @PHP/classes/visibility_004a.php: SUCCEEDED
    @PHP/classes/visibility_004b.php: SUCCEEDED
    @PHP/classes/visibility_004c.php: SUCCEEDED
    @PHP/classes/visibility_005.php: SUCCEEDED
    @PHP/classes/__call_001.php: SUCCEEDED
    @PHP/classes/__set_data_corrupt.php: FAILED
    Script hung upNo errorsSuccess
    Expected test outputReal script output
    Unhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---> System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> PHP.Core.Debug+AssertException: Assertion failed: Add      public static readonly object foobar = (int)1; instead of AddConstant usage.
       at PHP.Core.Debug.Fail(String message)
       at PHP.Core.Reflection.PhpTypeDesc.AddConstant(String name, Object value)
       at <__input.txt>.foo.__PopulateTypeDesc(PhpTypeDesc )
       --- End of inner exception stack trace ---
       at System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
       at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)
       at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
       at System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters)
       at PHP.Core.Reflection.PhpTypeDesc.AutoPopulate()
       at PHP.Core.Reflection.PhpTypeDesc.ReflectMethods()
       at PHP.Core.Reflection.DTypeDesc.get_Methods()
       at PHP.Core.Reflection.DTypeDesc.GetMember[N,T](GetMemberDictionary`2 dictionary, N name, DTypeDesc context, LookupFlags flags, T& member)
       at PHP.Core.Reflection.DTypeDesc.GetMethod(Name methodName, DTypeDesc context, DRoutineDesc& method)
       at PHP.Core.Reflection.DObject.InvokeMethod(String name, DTypeDesc caller, ScriptContext context)
       at PHP.Core.Operators.InvokeMethod(Object x, String methodName, DTypeDesc caller, ScriptContext context)
       at <__input.txt>.<Script>.<Main>(ScriptContext <context>, Dictionary`2 <locals>, DObject , DTypeDesc , Boolean ) in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\classes\__input.txt:line 21
       at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)
       at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)
       --- End of inner exception stack trace ---
       at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)
       at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)
       at <Global>.Run(String[] )
    
    @PHP/classes/__set__get_001.php: SUCCEEDED
    @PHP/classes/__set__get_004.php: SUCCEEDED
    @PHP/classes/__set__get_005.php: SUCCEEDED
    @PHP/date/bug17988.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2002-06-25 12:18:48
    2002-06-25 14:18:48
    2002-06-25 13:18:48
    2002-06-25 12:18:48
    2002-06-25 18:18:48
    2002-06-25 14:18:48
    2002-06-25 14:18:48
    2002-06-25 18:18:48
    2002-06-25 10:18:48
    2002-06-25 17:18:48
    2002-06-25 11:18:48
    2002-06-25 17:48:48
    2002-06-25 10:48:48
    2002-06-25 14:18:48
    2002-06-25 14:18:48
    2002-06-25 13:18:48
    2002-06-25 12:18:48
    2002-06-25 18:18:48
    2002-06-25 14:18:48
    2002-06-25 14:18:48
    2002-06-25 18:18:48
    2002-06-25 10:18:48
    2002-06-25 17:18:48
    2002-06-25 11:18:48
    2002-06-25 17:48:48
    2002-06-25 10:48:48
    @PHP/date/bug26317.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2003-11-19 17:20:42
    2003-11-19 17:20:42
    2003-11-19 17:20:42
    2003-11-19 16:20:42
    2003-11-19 16:20:42
    2003-11-19 16:20:42
    @PHP/date/bug26320.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2003-11-19 12:30:42
    2003-11-19 13:30:42
    2003-11-19 12:30:42
    2003-11-19 12:30:42
    @PHP/date/bug28088.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    The following line rightly shows the correct date time:
    04/04/04 2145
    But the following line fails to show the correct date time:
    04/03/04 2245
    The following line rightly shows the correct date time:
    04/04/04 2345
    But the following line fails to show the correct date time:
    04/04/04 0045
    @PHP/date/bug28599.php: SUCCEEDED
    @PHP/date/bug29150.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2005-06-19 22:00:00
    2005-06-20 00:00:00
    @PHP/date/bug29585.php: SUCCEEDED
    @PHP/date/bug29595.php: SUCCEEDED
    @PHP/date/bug33056.php: SUCCEEDED
    @PHP/date/bug33452.php: SUCCEEDED
    @PHP/date/bug33562.php: SUCCEEDED
    @PHP/date/bug33563.php: SUCCEEDED
    @PHP/date/bug33578.php: SUCCEEDED
    @PHP/date/bug33869.php: SUCCEEDED
    @PHP/date/bug34676.php: SUCCEEDED
    @PHP/date/bug34771.php: SUCCEEDED
    @PHP/date/bug35143.php: SUCCEEDED
    @PHP/date/bug35414.php: SUCCEEDED
    @PHP/date/bug35422.php: SUCCEEDED
    @PHP/date/bug35425.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    integer(42)
    integer(1)
    integer(1)
    integer(1)
    integer(1)
    integer(0)
    integer(0)
    integer(1)
    integer(1)
    integer(31)
    integer(1104537661)
    integer(6)
    integer(53)
    integer(5)
    integer(2005)
    integer(0)
    integer(3600)
    integer(292)
    integer(1)
    integer(1)
    integer(1)
    integer(1)
    integer(0)
    integer(0)
    integer(1)
    integer(1)
    integer(31)
    integer(1104559261)
    integer(6)
    integer(53)
    integer(5)
    integer(2005)
    integer(0)
    integer(-18000)
    @PHP/date/bug35456.php: SUCCEEDED
    @PHP/date/bug35624.php: SUCCEEDED
    @PHP/date/bug35630.php: SUCCEEDED
    @PHP/date/bug35699.php: SUCCEEDED
    @PHP/date/bug35705.php: SUCCEEDED
    @PHP/date/bug35885.php: SUCCEEDED
    @PHP/date/bug35887.php: SUCCEEDED
    @PHP/date/date.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    c: 2003-01-23T13:20:59+01:00
    r: Thu, 23 Jan 2003 13:20:59 +0100
    c: 2003-01-23T13:20:59+01:00
    r: Thu, 23 Jan 2003 13:20:59 +0100
    c: 2003-01-23T12:20:59+00:00
    r: Thu, 23 Jan 2003 12:20:59 +0000
    c: 2003-01-23T13:20:59+01:00
    r: Thu, 23 Jan 2003 13:20:59 +0100
    @PHP/date/date_create-1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\date\__input.txt on line 28
    SKIP
    @PHP/date/date_create-2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\date\__input.txt on line 6
    SKIP
    @PHP/date/date_default_timezone_get-3.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Europe/Prague
    America/Chicago
    Europe/Rome
    America/Chicago
    @PHP/date/date_modify-1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\date\__input.txt on line 6
    SKIP
    @PHP/date/date_modify-2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\date\__input.txt on line 6
    SKIP
    @PHP/date/default-timezone-1.php: SUCCEEDED
    @PHP/date/default-timezone-2.php: SUCCEEDED
    @PHP/date/format-negative-timestamp.php: SUCCEEDED
    @PHP/date/strtotime.php: SUCCEEDED
    @PHP/date/timezone-configuration.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    1119125744
    1119125744
    1119125744
    1119125744
    1119129344
    1119125744
    @PHP/doc_examples/test001.php: SUCCEEDED
    @PHP/doc_examples/test002.php: SUCCEEDED
    @PHP/doc_examples/test003.php: SUCCEEDED
    @PHP/doc_examples/test004.php: SUCCEEDED
    @PHP/doc_examples/test005.php: SUCCEEDED
    @PHP/doc_examples/test006.php: SUCCEEDED
    @PHP/doc_examples/test007.php: SUCCEEDED
    @PHP/doc_examples/test008.php: SUCCEEDED
    @PHP/doc_examples/test009.php: SUCCEEDED
    @PHP/doc_examples/test010.php: SUCCEEDED
    @PHP/doc_examples/test011.php: SUCCEEDED
    @PHP/doc_examples/test013.php: SUCCEEDED
    @PHP/doc_examples/test014.php: SUCCEEDED
    @PHP/doc_examples/test015.php: SUCCEEDED
    @PHP/doc_examples/test016.php: SUCCEEDED
    @PHP/doc_examples/test017.php: SUCCEEDED
    @PHP/doc_examples/test018.php: SUCCEEDED
    @PHP/doc_examples/test019.php: SUCCEEDED
    @PHP/doc_examples/test020.php: SUCCEEDED
    @PHP/doc_examples/test021.php: SUCCEEDED
    @PHP/doc_examples/test022.php: SUCCEEDED
    @PHP/doc_examples/test023.php: SUCCEEDED
    @PHP/doc_examples/test024.php: SUCCEEDED
    @PHP/doc_examples/test025.php: SUCCEEDED
    @PHP/doc_examples/test026.php: SUCCEEDED
    @PHP/doc_examples/test027.php: SUCCEEDED
    @PHP/doc_examples/test028.php: SUCCEEDED
    @PHP/doc_examples/test029.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ´┐Żauky
    �auky
    @PHP/doc_examples/test030.php: SUCCEEDED
    @PHP/doc_examples/test031.php: SUCCEEDED
    @PHP/doc_examples/test032.php: SUCCEEDED
    @PHP/doc_examples/test033.php: SUCCEEDED
    @PHP/doc_examples/test034.php: SUCCEEDED
    @PHP/doc_examples/test035.php: SUCCEEDED
    @PHP/doc_examples/test036.php: SUCCEEDED
    @PHP/doc_examples/test037.php: SUCCEEDED
    @PHP/doc_examples/test038.php: SUCCEEDED
    @PHP/doc_examples/test039.php: SUCCEEDED
    @PHP/doc_examples/test040.php: SUCCEEDED
    @PHP/doc_examples/test041.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    call_user_func():
    hello world!
    Strict Standards: call_user_func(): Non-static method MyClass::myCallbackMethod() should not be called statically in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\doc_examples\__input.txt at expression on line 17, column 1.
    Hello World!Hello World!
    @PHP/doc_examples/test042.php: SUCCEEDED
    @PHP/doc_examples/test043.php: SUCCEEDED
    @PHP/doc_examples/test044.php: SUCCEEDED
    @PHP/doc_examples/test045.php: SUCCEEDED
    @PHP/doc_examples/test046.php: SUCCEEDED
    @PHP/doc_examples/test047.php: SUCCEEDED
    @PHP/doc_examples/test048.php: SUCCEEDED
    @PHP/doc_examples/test049.php: SUCCEEDED
    @PHP/doc_examples/test050.php: SUCCEEDED
    @PHP/doc_examples/test051.php: SUCCEEDED
    @PHP/doc_examples/test052.php: SUCCEEDED
    @PHP/doc_examples/test053.php: SUCCEEDED
    @PHP/doc_examples/test054.php: SUCCEEDED
    @PHP/doc_examples/test055.php: SUCCEEDED
    @PHP/doc_examples/test056.php: SUCCEEDED
    @PHP/doc_examples/test057.php: SUCCEEDED
    @PHP/doc_examples/test058.php: SUCCEEDED
    @PHP/doc_examples/test059.php: SUCCEEDED
    @PHP/doc_examples/test060.php: SUCCEEDED
    @PHP/doc_examples/test061.php: SUCCEEDED
    @PHP/doc_examples/test062.php: SUCCEEDED
    @PHP/doc_examples/test063.php: SUCCEEDED
    @PHP/doc_examples/test064.php: SUCCEEDED
    @PHP/doc_examples/test065.php: SUCCEEDED
    @PHP/doc_examples/test066.php: SUCCEEDED
    @PHP/doc_examples/test067.php: SUCCEEDED
    @PHP/doc_examples/test068.php: SUCCEEDED
    @PHP/doc_examples/test069.php: SUCCEEDED
    @PHP/doc_examples/test070.php: SUCCEEDED
    @PHP/doc_examples/test071.php: SUCCEEDED
    @PHP/doc_examples/test072.php: SUCCEEDED
    @PHP/doc_examples/test073.php: SUCCEEDED
    @PHP/doc_examples/test074.php: SUCCEEDED
    @PHP/doc_examples/test075.php: SUCCEEDED
    @PHP/doc_examples/test076.php: SUCCEEDED
    @PHP/doc_examples/test077.php: SUCCEEDED
    @PHP/doc_examples/test078.php: SUCCEEDED
    @PHP/doc_examples/test079.php: SUCCEEDED
    @PHP/doc_examples/test080.php: SUCCEEDED
    @PHP/doc_examples/test081.php: SUCCEEDED
    @PHP/doc_examples/test082.php: SUCCEEDED
    @PHP/doc_examples/test083.php: SUCCEEDED
    @PHP/doc_examples/test084.php: SUCCEEDED
    @PHP/doc_examples/test085.php: SUCCEEDED
    @PHP/doc_examples/test086.php: SUCCEEDED
    @PHP/doc_examples/test087.php: SUCCEEDED
    @PHP/doc_examples/test088.php: SUCCEEDED
    @PHP/doc_examples/test089.php: SUCCEEDED
    @PHP/doc_examples/test090.php: SUCCEEDED
    @PHP/doc_examples/test091.php: SUCCEEDED
    @PHP/doc_examples/test092.php: SUCCEEDED
    @PHP/doc_examples/test093.php: SUCCEEDED
    @PHP/doc_examples/test094.php: SUCCEEDED
    @PHP/doc_examples/test095.php: SUCCEEDED
    @PHP/doc_examples/test096.php: SUCCEEDED
    @PHP/doc_examples/test097.php: SUCCEEDED
    @PHP/doc_examples/test098.php: SUCCEEDED
    @PHP/doc_examples/test099.php: SUCCEEDED
    @PHP/doc_examples/test100.php: SUCCEEDED
    @PHP/doc_examples/test102.php: SUCCEEDED
    @PHP/doc_examples/test103.php: SUCCEEDED
    @PHP/doc_examples/test104.php: SUCCEEDED
    @PHP/doc_examples/test105.php: SUCCEEDED
    @PHP/doc_examples/test107.php: SUCCEEDED
    @PHP/doc_examples/test108.php: SUCCEEDED
    @PHP/doc_examples/test109.php: SUCCEEDED
    @PHP/doc_examples/test110.php: SUCCEEDED
    @PHP/doc_examples/test111.php: SUCCEEDED
    @PHP/doc_examples/test112.php: SUCCEEDED
    @PHP/doc_examples/test113.php: SUCCEEDED
    @PHP/doc_examples/test114.php: SUCCEEDED
    @PHP/doc_examples/test115.php: SUCCEEDED
    @PHP/doc_examples/test116.php: SUCCEEDED
    @PHP/doc_examples/test117.php: SUCCEEDED
    @PHP/doc_examples/test118.php: SUCCEEDED
    @PHP/doc_examples/test119.php: SUCCEEDED
    @PHP/doc_examples/test120.php: SUCCEEDED
    @PHP/doc_examples/test121.php: SUCCEEDED
    @PHP/doc_examples/test122.php: SUCCEEDED
    @PHP/doc_examples/test123.php: SUCCEEDED
    @PHP/doc_examples/test124.php: SUCCEEDED
    @PHP/doc_examples/test125.php: SUCCEEDED
    @PHP/doc_examples/test126.php: SUCCEEDED
    @PHP/doc_examples/test127.php: SUCCEEDED
    @PHP/doc_examples/test128.php: SUCCEEDED
    @PHP/doc_examples/test129.php: SUCCEEDED
    @PHP/doc_examples/test130.php: SUCCEEDED
    @PHP/doc_examples/test131.php: SUCCEEDED
    @PHP/doc_examples/test132.php: SUCCEEDED
    @PHP/doc_examples/test133.php: SUCCEEDED
    @PHP/doc_examples/test134.php: SUCCEEDED
    @PHP/doc_examples/test136.php: SUCCEEDED
    @PHP/doc_examples/test137.php: SUCCEEDED
    @PHP/doc_examples/test138.php: SUCCEEDED
    @PHP/doc_examples/test139.php: SUCCEEDED
    @PHP/doc_examples/test148.php: SUCCEEDED
    @PHP/doc_examples/test149.php: SUCCEEDED
    @PHP/doc_examples/test150.php: SUCCEEDED
    @PHP/doc_examples/test151.php: SUCCEEDED
    @PHP/doc_examples/test152.php: SUCCEEDED
    @PHP/doc_examples/test153.php: SUCCEEDED
    @PHP/doc_examples/test154.php: SUCCEEDED
    @PHP/doc_examples/test155.php: SUCCEEDED
    @PHP/doc_examples/test156.php: SUCCEEDED
    @PHP/doc_examples/test158.php: SUCCEEDED
    @PHP/lang/001.php: SUCCEEDED
    @PHP/lang/002.php: SUCCEEDED
    @PHP/lang/003.php: SUCCEEDED
    @PHP/lang/004.php: SUCCEEDED
    @PHP/lang/005.php: SUCCEEDED
    @PHP/lang/006.php: SUCCEEDED
    @PHP/lang/007.php: SUCCEEDED
    @PHP/lang/008.php: SUCCEEDED
    @PHP/lang/009.php: SUCCEEDED
    @PHP/lang/010.php: SUCCEEDED
    @PHP/lang/011.php: SUCCEEDED
    @PHP/lang/012.php: SUCCEEDED
    @PHP/lang/013.php: SUCCEEDED
    @PHP/lang/014.php: SUCCEEDED
    @PHP/lang/015.php: SUCCEEDED
    @PHP/lang/016.php: SUCCEEDED
    @PHP/lang/017.php: SUCCEEDED
    @PHP/lang/018.php: SUCCEEDED
    @PHP/lang/019.php: SUCCEEDED
    @PHP/lang/020.php: SUCCEEDED
    @PHP/lang/021.php: SUCCEEDED
    @PHP/lang/022.php: SUCCEEDED
    @PHP/lang/023.php: SUCCEEDED
    @PHP/lang/024.php: SUCCEEDED
    @PHP/lang/025.php: SUCCEEDED
    @PHP/lang/026.php: SUCCEEDED
    @PHP/lang/027.php: SUCCEEDED
    @PHP/lang/028.php: SUCCEEDED
    @PHP/lang/030.php: SUCCEEDED
    @PHP/lang/032.php: SUCCEEDED
    @PHP/lang/036.php: SUCCEEDED
    @PHP/lang/037.php: SUCCEEDED
    @PHP/lang/038.php: SUCCEEDED
    @PHP/lang/039.php: SUCCEEDED
    @PHP/lang/040.php: SUCCEEDED
    @PHP/lang/bison1.php: SUCCEEDED
    @PHP/lang/bug17115.php: SUCCEEDED
    @PHP/lang/bug18872.php: SUCCEEDED
    @PHP/lang/bug19943.php: SUCCEEDED
    @PHP/lang/bug20175.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    Deprecated: Assigning the return value of new by reference is deprecated in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\lang\__input.txt on line 110
    foo_static()
    foo_global()
    foo:1
    foo_static()
    foo:1
    bar_static()
    bar_global()
    bar:1
    bar_static()
    bar:1
    wow_static()
    wow_global()
    wow:1
    wow_static()
    wow:1
    oop_test()
    oop_static()
    oop_class()
    oop:1
    oop_static()
    oop:1
    oop_test()
    oop_static()
    oop:1
    foo_static()
    foo_global()
    foo:1
    foo_static()
    foo:1
    bar_static()
    bar_global()
    bar:1
    bar_static()
    bar_global()
    bar:2
    wow_static()
    wow_global()
    wow:1
    wow_static()
    wow:1
    oop_test()
    oop_static()
    oop_class()
    oop:1
    oop_static()
    oop:1
    oop_test()
    oop_static()
    oop:1
    D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\lang\__input.txt(110,4): warning PHP0181: Assigning the return value of new by reference is deprecated
    
    @PHP/lang/bug21094.php: SUCCEEDED
    @PHP/lang/bug21600.php: SUCCEEDED
    @PHP/lang/bug21669.php: SUCCEEDED
    @PHP/lang/bug21849.php: SUCCEEDED
    @PHP/lang/bug21961.php: SUCCEEDED
    @PHP/lang/bug22231.php: SUCCEEDED
    @PHP/lang/bug22367.php: SUCCEEDED
    @PHP/lang/bug22510.php: SUCCEEDED
    @PHP/lang/bug22592.php: SUCCEEDED
    @PHP/lang/bug22690.php: SUCCEEDED
    @PHP/lang/bug23279.php: SUCCEEDED
    @PHP/lang/bug23384.php: FAILED
    Script hung upNo errorsSuccess
    Expected test outputReal script output
    Unhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---> System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> PHP.Core.Debug+AssertException: Assertion failed: Add      public static readonly object HUN = (int)100; instead of AddConstant usage.
       at PHP.Core.Debug.Fail(String message)
       at PHP.Core.Reflection.PhpTypeDesc.AddConstant(String name, Object value)
       at <__input.txt>.Foo.__PopulateTypeDesc(PhpTypeDesc )
       --- End of inner exception stack trace ---
       at System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
       at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)
       at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
       at System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters)
       at PHP.Core.Reflection.PhpTypeDesc.AutoPopulate()
       at PHP.Core.Reflection.PhpTypeDesc.ReflectMethods()
       at PHP.Core.Reflection.DTypeDesc.get_Methods()
       at PHP.Core.Reflection.DTypeDesc.GetMember[N,T](GetMemberDictionary`2 dictionary, N name, DTypeDesc context, LookupFlags flags, T& member)
       at PHP.Core.Reflection.DTypeDesc.GetMethod(Name methodName, DTypeDesc context, DRoutineDesc& method)
       at PHP.Core.Operators.GetStaticMethodDesc(DTypeDesc requestedType, String methodName, DObject& self, DTypeDesc caller, ScriptContext context, Boolean quiet, Boolean removeFrame)
       at PHP.Core.Operators.InvokeStaticMethod(DTypeDesc type, Object methodName, DObject self, DTypeDesc caller, ScriptContext context)
       at <__input.txt>.<Script>.<Main>(ScriptContext <context>, Dictionary`2 <locals>, DObject , DTypeDesc , Boolean ) in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\lang\__input.txt:line 16
       at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)
       at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)
       --- End of inner exception stack trace ---
       at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)
       at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)
       at <Global>.Run(String[] )
    
    @PHP/lang/bug23489.php: SUCCEEDED
    @PHP/lang/bug23524.php: SUCCEEDED
    @PHP/lang/bug23922.php: SUCCEEDED
    @PHP/lang/bug24054.php: SUCCEEDED
    @PHP/lang/bug24396.php: SUCCEEDED
    @PHP/lang/bug24403.php: SUCCEEDED
    @PHP/lang/bug24436.php: SUCCEEDED
    @PHP/lang/bug24499.php: SUCCEEDED
    @PHP/lang/bug24640.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    double(1700000000000000089258092433847514422797596587883870563356951996370064178581143932836831337636761368874297554515902592900802289500112731978596146714137401870842258241575178866354311397451139753100927220499450359906637902366244989496126909662726242240784739940994096632824796638102733857671280980918272.0000000000)
    1.7E+300
    
    ------
    double(0.0000000000)
    1.7E-300
    
    ------
    double(17000000000000001584208052028780237480128823455860622330108867175329927830437888.0000000000)
    1.7E+79
    
    ------
    double(0.0000000000)
    1.7E-79
    
    ------
    double(169999999999999996096025832433329868941658043870400163508258284150340918121070592.0000000000)
    1.7E+80
    
    ------
    double(0.0000000000)
    1.7E-80
    
    ------
    double(1700000000000000013616404158611892038375594280539217794530130541777964808366194688.0000000000)
    1.7E+81
    
    ------
    double(0.0000000000)
    1.7E-81
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    1.6999810742106E-319
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    1.7000798873397E-320
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    1.6995858216939E-321
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    0
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    0
    
    ------
    double(1700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+300
    
    ------
    double(0.0000000000)
    1.70000000000003E-300
    
    ------
    double(17000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+79
    
    ------
    double(0.0000000000)
    1.70000000000001E-79
    
    ------
    double(170000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+80
    
    ------
    double(0.0000000000)
    1.70000000000001E-80
    
    ------
    double(1700000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+81
    
    ------
    double(0.0000000000)
    1.70000000000001E-81
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    1.69998107421056E-319
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    1.70007988733973E-320
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    1.69464516523548E-321
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    0
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    0
    
    ------
    @PHP/lang/bug24652.php: SUCCEEDED
    @PHP/lang/bug24658.php: SUCCEEDED
    @PHP/lang/bug24783.php: SUCCEEDED
    @PHP/lang/bug24926.php: SUCCEEDED
    @PHP/lang/bug25547.php: SUCCEEDED
    @PHP/lang/bug25652.php: SUCCEEDED
    @PHP/lang/bug25922.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Undefined index here: 'error'
    Undefined index here: ''
    @PHP/lang/bug26182.php: SUCCEEDED
    @PHP/lang/bug26696.php: SUCCEEDED
    @PHP/lang/bug26866.php: SUCCEEDED
    @PHP/lang/bug26869.php: SUCCEEDED
    @PHP/lang/bug27354.php: SUCCEEDED
    @PHP/lang/bug27439.php: SUCCEEDED
    @PHP/lang/bug27535.php: SUCCEEDED
    @PHP/lang/bug28213.php: SUCCEEDED
    @PHP/lang/bug28800.php: SUCCEEDED
    @PHP/lang/bug29566.php: SUCCEEDED
    @PHP/lang/bug29893.php: SUCCEEDED
    @PHP/lang/bug29944.php: SUCCEEDED
    @PHP/lang/bug30638.php: SUCCEEDED
    @PHP/lang/bug30726.php: SUCCEEDED
    @PHP/lang/bug30862.php: SUCCEEDED
    @PHP/lang/bug32924.php: SUCCEEDED
    @PHP/lang/bug35382.php: SUCCEEDED
    @PHP/lang/bug7515.php: SUCCEEDED
    @PHP/lang/each_binary_safety.php: SUCCEEDED
    @PHP/lang/error_2_exception_001.php: SUCCEEDED
    @PHP/lang/foreach_with_object_001.php: SUCCEEDED
    @PHP/lang/foreach_with_references_001.php: SUCCEEDED
    @PHP/lang/type_hints_001.php: SUCCEEDED
    @PHP/standard/array/001.php: SUCCEEDED
    @PHP/standard/array/003.php: SUCCEEDED
    @PHP/standard/array/004.php: SUCCEEDED
    @PHP/standard/array/005.php: SUCCEEDED
    @PHP/standard/array/008.php: SUCCEEDED
    @PHP/standard/array/array_change_key_case.php: SUCCEEDED
    @PHP/standard/array/array_chunk.php: SUCCEEDED
    @PHP/standard/array/array_count_values.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array(0) {
    }
    
    array(1) {
      [0]=>
      int(1)
    }
    
    array(1) {
      [1]=>
      int(1)
    }
    
    array(1) {
      [-1]=>
      int(1)
    }
    
    array(1) {
      [0]=>
      int(2)
    }
    
    array(2) {
      [0]=>
      int(1)
      [1]=>
      int(1)
    }
    
    array(1) {
      [1]=>
      int(2)
    }
    
    array(3) {
      [1]=>
      int(2)
      ["hello"]=>
      int(2)
      ["world"]=>
      int(1)
    }
    
    array(2) {
      ["hello"]=>
      int(2)
      ["world"]=>
      int(1)
    }
    
    array(3) {
      [""]=>
      int(2)
      ["world"]=>
      int(3)
      ["hello"]=>
      int(4)
    }
    
    array(1) {
      [0]=>
      int(1)
    }
    
    array(1) {
      [1]=>
      int(1)
    }
    array(0) [empty]
    
    array(1)
    {
      [0] => integer(1)
    }
    
    array(1)
    {
      [1] => integer(1)
    }
    
    array(1)
    {
      [-1] => integer(1)
    }
    
    array(1)
    {
      [0] => integer(2)
    }
    
    array(2)
    {
      [0] => integer(1)
      [1] => integer(1)
    }
    
    array(1)
    {
      [1] => integer(2)
    }
    
    array(3)
    {
      [1] => integer(2)
      ['hello'] => integer(2)
      ['world'] => integer(1)
    }
    
    array(2)
    {
      ['hello'] => integer(2)
      ['world'] => integer(1)
    }
    
    array(3)
    {
      [''] => integer(2)
      ['world'] => integer(3)
      ['hello'] => integer(4)
    }
    
    array(1)
    {
      [0] => integer(1)
    }
    
    array(1)
    {
      [1] => integer(1)
    }
    @PHP/standard/array/array_diff_1.php: SUCCEEDED
    @PHP/standard/array/array_diff_key.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ------ Test 1 --------
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 2 --------
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 3 --------
    array(6) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [2]=>
      int(4)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [2]=>
      int(4)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 4 --------
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 5 --------
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 6 --------
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 7 --------
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    ------ Test 8 --------
    array(6) {
      [0]=>
      int(0)
      [7]=>
      int(14)
      [2]=>
      int(4)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [0]=>
      int(0)
      [7]=>
      int(14)
      [2]=>
      int(4)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 9 --------
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    ------ Test 1 --------
    array(4)
    {
      [1] => &integer(2)
      [6] => &integer(12)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    array(4)
    {
      [1] => &integer(2)
      [6] => &integer(12)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    ------ Test 2 --------
    array(3)
    {
      [1] => &integer(2)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    array(3)
    {
      [1] => &integer(2)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    ------ Test 3 --------
    array(6)
    {
      [1] => &integer(2)
      [6] => &integer(12)
      [2] => &integer(4)
      [15] => &integer(30)
      [1200] => &integer(2400)
      [-2500] => &integer(-5000)
    }
    array(6)
    {
      [1] => &integer(2)
      [6] => &integer(12)
      [2] => &integer(4)
      [15] => &integer(30)
      [1200] => &integer(2400)
      [-2500] => &integer(-5000)
    }
    ------ Test 4 --------
    array(3)
    {
      [1] => &integer(2)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    array(3)
    {
      [1] => &integer(2)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    ------ Test 5 --------
    array(4)
    {
      [1] => &integer(2)
      [6] => &integer(12)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    array(4)
    {
      [1] => &integer(2)
      [6] => &integer(12)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    ------ Test 6 --------
    array(3)
    {
      [1] => &integer(2)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    array(3)
    {
      [1] => &integer(2)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    ------ Test 7 --------
    array(3)
    {
      [7] => &integer(14)
      [11] => &integer(22)
      [1100] => &integer(2200)
    }
    array(3)
    {
      [7] => &integer(14)
      [11] => &integer(22)
      [1100] => &integer(2200)
    }
    ------ Test 8 --------
    array(6)
    {
      [0] => &integer(0)
      [7] => &integer(14)
      [2] => &integer(4)
      [11] => &integer(22)
      [1100] => &integer(2200)
      [-2500] => &integer(-5000)
    }
    array(6)
    {
      [0] => &integer(0)
      [7] => &integer(14)
      [2] => &integer(4)
      [11] => &integer(22)
      [1100] => &integer(2200)
      [-2500] => &integer(-5000)
    }
    ------ Test 9 --------
    array(3)
    {
      [7] => &integer(14)
      [11] => &integer(22)
      [1100] => &integer(2200)
    }
    array(3)
    {
      [7] => &integer(14)
      [11] => &integer(22)
      [1100] => &integer(2200)
    }
    @PHP/standard/array/array_intersect_key.php: SUCCEEDED
    @PHP/standard/array/array_sum.php: SUCCEEDED
    @PHP/standard/array/array_walk_recursive.php: SUCCEEDED
    @PHP/standard/array/bug12776.php: SUCCEEDED
    @PHP/standard/array/bug14580.php: SUCCEEDED
    @PHP/standard/array/bug20381.php: SUCCEEDED
    @PHP/standard/array/bug20865.php: SUCCEEDED
    @PHP/standard/array/bug21182.php: SUCCEEDED
    @PHP/standard/array/bug21918.php: SUCCEEDED
    @PHP/standard/array/bug21998.php: SUCCEEDED
    @PHP/standard/array/bug22088.php: SUCCEEDED
    @PHP/standard/array/bug22463.php: SUCCEEDED
    @PHP/standard/array/bug23581.php: SUCCEEDED
    @PHP/standard/array/bug23788.php: SUCCEEDED
    @PHP/standard/array/bug24198.php: SUCCEEDED
    @PHP/standard/array/bug24220.php: SUCCEEDED
    @PHP/standard/array/bug24766.php: SUCCEEDED
    @PHP/standard/array/bug24897.php: SUCCEEDED
    @PHP/standard/array/bug24980.php: SUCCEEDED
    @PHP/standard/array/bug25359.php: SUCCEEDED
    @PHP/standard/array/bug25708.php: SUCCEEDED
    @PHP/standard/array/bug25758.php: SUCCEEDED
    @PHP/standard/array/bug26458.php: SUCCEEDED
    @PHP/standard/array/bug28974.php: SUCCEEDED
    @PHP/standard/array/bug29493.php: SUCCEEDED
    @PHP/standard/array/bug30266.php: SUCCEEDED
    @PHP/standard/array/bug30833.php: SUCCEEDED
    @PHP/standard/array/bug31158.php: SUCCEEDED
    @PHP/standard/array/bug31213.php: SUCCEEDED
    @PHP/standard/array/bug32021.php: SUCCEEDED
    @PHP/standard/array/bug33382.php: SUCCEEDED
    @PHP/standard/array/bug33989.php: SUCCEEDED
    @PHP/standard/array/bug34227.php: SUCCEEDED
    @PHP/standard/array/bug34982.php: SUCCEEDED
    @PHP/standard/array/bug35014.php: SUCCEEDED
    @PHP/standard/array/bug35022.php: SUCCEEDED
    @PHP/standard/array/bug35821.php: SUCCEEDED
    @PHP/standard/array/count_recursive.php: SUCCEEDED
    @PHP/standard/array/locale_sort.php: SUCCEEDED
    @PHP/standard/array/range.php: SUCCEEDED
    @PHP/standard/assert/assert.php: SUCCEEDED
    @PHP/standard/general_functions/001.php: SUCCEEDED
    @PHP/standard/general_functions/002.php: SUCCEEDED
    @PHP/standard/general_functions/003.php: SUCCEEDED
    @PHP/standard/general_functions/004.php: SUCCEEDED
    @PHP/standard/general_functions/005.php: SUCCEEDED
    @PHP/standard/general_functions/006.php: SUCCEEDED
    @PHP/standard/general_functions/007.php: SUCCEEDED
    @PHP/standard/general_functions/009.php: SUCCEEDED
    @PHP/standard/general_functions/bug25038.php: SUCCEEDED
    @PHP/standard/general_functions/bug27678.php: SUCCEEDED
    @PHP/standard/general_functions/bug29038.php: SUCCEEDED
    @PHP/standard/general_functions/bug31190.php: SUCCEEDED
    @PHP/standard/general_functions/bug32647.php: SUCCEEDED
    @PHP/standard/general_functions/bug35229.php: SUCCEEDED
    @PHP/standard/general_functions/is_resource.php: SUCCEEDED
    @PHP/standard/math/abs.php: SUCCEEDED
    @PHP/standard/math/bug24142.php: SUCCEEDED
    @PHP/standard/math/bug25694.php: SUCCEEDED
    @PHP/standard/math/bug27646.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    double(INF-INF)
    'd:-INF;'
    double(INF-INF)
    double(INF-INF)
    'd:INF;'
    double(INF-INF)
    double(NaNInfini)
    'd:NAN;'
    double(NaNInfini)
    double(-Infinity)
    'd:-INF;'
    double(-Infinity)
    double(Infinity)
    'd:INF;'
    double(Infinity)
    double(NaN)
    'd:NAN;'
    double(NaN)
    @PHP/standard/math/bug30069.php: SUCCEEDED
    @PHP/standard/math/bug30695.php: SUCCEEDED
    @PHP/standard/math/floorceil.php: SUCCEEDED
    @PHP/standard/math/hexdec.php: SUCCEEDED
    @PHP/standard/math/log.php: SUCCEEDED
    @PHP/standard/math/pow.php: SUCCEEDED
    @PHP/standard/math/round.php: SUCCEEDED
    @PHP/standard/reg/001.php: SUCCEEDED
    @PHP/standard/reg/002.php: SUCCEEDED
    @PHP/standard/reg/003.php: SUCCEEDED
    @PHP/standard/reg/004.php: SUCCEEDED
    @PHP/standard/reg/005.php: SUCCEEDED
    @PHP/standard/reg/006.php: SUCCEEDED
    @PHP/standard/reg/007.php: SUCCEEDED
    @PHP/standard/reg/008.php: SUCCEEDED
    @PHP/standard/reg/009.php: SUCCEEDED
    @PHP/standard/reg/010.php: SUCCEEDED
    @PHP/standard/reg/011.php: SUCCEEDED
    @PHP/standard/reg/012.php: SUCCEEDED
    @PHP/standard/reg/013.php: SUCCEEDED
    @PHP/standard/reg/014.php: SUCCEEDED
    @PHP/standard/reg/015.php: SUCCEEDED
    @PHP/standard/reg/016.php: SUCCEEDED
    @PHP/standard/serialize/001.php: SUCCEEDED
    @PHP/standard/serialize/002.php: SUCCEEDED
    @PHP/standard/serialize/003.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    d:100;
    double(100.0000000000)
    
    d:51999999999999996980101120;
    double(51999999999999996980101120.0000000000)
    
    d:8.9999999999999995265585574287341141808127531476202420890331268310546875E-9;
    double(0.0000000090)
    d:100;
    double(100.0000000000)
    
    d:5.2000000000000006E+25;
    double(52000000000000000000000000.0000000000)
    
    d:9.0000000000000045E-09;
    double(0.0000000090)
    @PHP/standard/serialize/004.php: SUCCEEDED
    @PHP/standard/serialize/005.php: SUCCEEDED
    @PHP/standard/serialize/006.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    'O:3:"´┐Ż":1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    object
    {
      '´┐Ż' => '´┐Ż'
    }
    'a:1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    array
    {
      '´┐Ż' => '´┐Ż'
    }
    'O:3:"´┐Ż":1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    object
    {
      'ďż˝' => 'ďż˝'
    }
    'a:1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    array
    {
      'ďż˝' => 'ďż˝'
    }
    @PHP/standard/serialize/bug14293.php: SUCCEEDED
    @PHP/standard/serialize/bug21957.php: SUCCEEDED
    @PHP/standard/serialize/bug23298.php: SUCCEEDED
    @PHP/standard/serialize/bug24063.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0.1 0.1
    0.01 0.01
    0.001 0.001
    0.0001 0.0001
    1.0E-5 1.0E-5
    1.0E-6 1.0E-6
    1.0E-7 1.0E-7
    1.0E-8 1.0E-8
    1.0E-9 1.0E-9
    0.1 0.1
    0.01 0.01
    0.001 0.001
    0.0001 0.0001
    1E-05 1E-05
    1E-06 1E-06
    1E-07 1E-07
    1E-08 1E-08
    1E-09 1E-09
    @PHP/standard/serialize/bug25378.php: SUCCEEDED
    @PHP/standard/serialize/bug26762.php: SUCCEEDED
    @PHP/standard/serialize/bug27469.php: SUCCEEDED
    @PHP/standard/serialize/bug28325.php: SUCCEEDED
    @PHP/standard/serialize/bug30234.php: SUCCEEDED
    @PHP/standard/serialize/bug31402.php: SUCCEEDED
    @PHP/standard/serialize/bug31442.php: SUCCEEDED
    @PHP/standard/strings/add-and-stripcslashes.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    kaboemkara!
    foo\b\a\r\b\az
    \f\o\o\[ \]
    \zoo['\.']
    \abcd\e\f\g\h\i\j\k\l\m\n\o\pqrstuvwxy\z
    1
    5d
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\standard\strings\__input.txt at expression on line 3, column 1.
    
    kaboemkara!
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\standard\strings\__input.txt at expression on line 5, column 1.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\standard\strings\__input.txt at expression on line 6, column 1.
    
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\standard\strings\__input.txt at expression on line 8, column 1.
    
    1
    5d
    @PHP/standard/strings/add-and-stripslashes.php: SUCCEEDED
    @PHP/standard/strings/basename.php: SUCCEEDED
    @PHP/standard/strings/bin2hex.php: SUCCEEDED
    @PHP/standard/strings/bug20108.php: SUCCEEDED
    @PHP/standard/strings/bug20169.php: SUCCEEDED
    @PHP/standard/strings/bug20261.php: SUCCEEDED
    @PHP/standard/strings/bug20927.php: SUCCEEDED
    @PHP/standard/strings/bug21338.php: SUCCEEDED
    @PHP/standard/strings/bug21453.php: SUCCEEDED
    @PHP/standard/strings/bug21730.php: SUCCEEDED
    @PHP/standard/strings/bug21744.php: SUCCEEDED
    @PHP/standard/strings/bug22008.php: SUCCEEDED
    @PHP/standard/strings/bug22187.php: SUCCEEDED
    @PHP/standard/strings/bug22224.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      0 => 
      object
      {
      }
      1 => 
      object
      {
      }
    }
    @PHP/standard/strings/bug22227.php: SUCCEEDED
    @PHP/standard/strings/bug22904.php: SUCCEEDED
    @PHP/standard/strings/bug23650.php: SUCCEEDED
    @PHP/standard/strings/bug23894.php: SUCCEEDED
    @PHP/standard/strings/bug24098.php: SUCCEEDED
    @PHP/standard/strings/bug24208.php: SUCCEEDED
    @PHP/standard/strings/bug24281.php: SUCCEEDED
    @PHP/standard/strings/bug25671.php: SUCCEEDED
    @PHP/standard/strings/bug25707.php: SUCCEEDED
    @PHP/standard/strings/bug26878.php: SUCCEEDED
    @PHP/standard/strings/bug26973.php: SUCCEEDED
    @PHP/standard/strings/bug27276.php: SUCCEEDED
    @PHP/standard/strings/bug27278.php: SUCCEEDED
    @PHP/standard/strings/bug27295.php: SUCCEEDED
    @PHP/standard/strings/bug27457.php: SUCCEEDED
    @PHP/standard/strings/bug27675.php: SUCCEEDED
    @PHP/standard/strings/bug28386.php: SUCCEEDED
    @PHP/standard/strings/bug33076.php: SUCCEEDED
    @PHP/standard/strings/chr_ord.php: SUCCEEDED
    @PHP/standard/strings/chunk_split.php: SUCCEEDED
    @PHP/standard/strings/count_chars.php: SUCCEEDED
    @PHP/standard/strings/crc32.php: SUCCEEDED
    @PHP/standard/strings/explode.php: SUCCEEDED
    @PHP/standard/strings/implode.php: SUCCEEDED
    @PHP/standard/strings/md5.php: SUCCEEDED
    @PHP/standard/strings/md5raw.php: SUCCEEDED
    @PHP/standard/strings/nl2br.php: SUCCEEDED
    @PHP/standard/strings/sha1.php: SUCCEEDED
    @PHP/standard/strings/sha1raw.php: SUCCEEDED
    @PHP/standard/strings/sprintf_f.php: SUCCEEDED
    @PHP/standard/strings/strcspn.php: SUCCEEDED
    @PHP/standard/strings/strings001.php: SUCCEEDED
    @PHP/standard/strings/strpos.php: SUCCEEDED
    @PHP/standard/strings/strrev.php: SUCCEEDED
    @PHP/standard/strings/strripos.php: SUCCEEDED
    @PHP/standard/strings/strrpos.php: SUCCEEDED
    @PHP/standard/strings/strspn.php: SUCCEEDED
    @PHP/standard/strings/strstr.php: SUCCEEDED
    @PHP/standard/strings/strtoupper.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    cfbfbdcfbfbdcfbfbd
    cfafbdcfafbdcfafbd
    @PHP/standard/strings/strtr.php: SUCCEEDED
    @PHP/standard/strings/strval.php: SUCCEEDED
    @PHP/standard/strings/str_repeat.php: SUCCEEDED
    @PHP/standard/strings/str_shuffle.php: SUCCEEDED
    @PHP/standard/strings/str_word_count.php: SUCCEEDED
    @PHP/standard/strings/substr_count.php: SUCCEEDED
    @PHP/standard/strings/substr_replace.php: SUCCEEDED
    @PHP/standard/strings/wordwrap.php: SUCCEEDED
    @PHP/standard/time/001.php: SUCCEEDED
    @PHP/standard/time/idate.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    U: 1043324459
    Y: 2003
    z: 22
    y: 3
    m: 1
    n: 1
    d: 23
    j: 23
    H: 13
    G: 13
    h: 1
    g: 1
    i: 20
    s: 59
    t: 31
    w: 4
    L: 0
    B: 556
    I: 0
    W: 4
    U: 1043324459
    Y: 2003
    z: 22
    y: 3
    m: 1
    n: 1
    d: 23
    j: 23
    H: 12
    G: 12
    h: 12
    g: 12
    i: 20
    s: 59
    t: 31
    w: 4
    L: 0
    B: 556
    I: 0
    W: 4
    @PHP/strings/001.php: SUCCEEDED
    @PHP/strings/002.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    fprintf test 1:abcde
    20
    printf test 1:simple string
    printf test 2:42
    printf test 3:3.333333
    printf test 4:3.3333333333
    printf test 5:2.50      
    printf test 6:2.50000000
    printf test 7:0000002.50
    printf test 8:<                 foo>
    printf test 9:<bar                 >
    printf test 10: 123456789012345
    printf test 10:<h´┐Żyesterettsjustitiarius>
    printf test 11: 123456789012345678901234567890
    printf test 11:<    h´┐Żyesterettsjustitiarius>
    printf test 12:-12.34
    printf test 13:  -12
    printf test 14:@
    printf test 15:10101010
    printf test 16:aa
    printf test 17:AA
    printf test 18:        10101010
    printf test 19:              aa
    printf test 20:              AA
    printf test 21:0000000010101010
    printf test 22:00000000000000aa
    printf test 23:00000000000000AA
    printf test 24:abcde
    printf test 25:gazonk
    printf test 26:2 1
    printf test 27:3 1 2
    printf test 28:02  1
    printf test 29:2   1
    printf test 30:x
    vprintf test 1:2   1
    fprintf test 1:abcde
    20
    printf test 1:simple string
    printf test 2:42
    printf test 3:3.333333
    printf test 4:3.3333333333
    printf test 5:2.50      
    printf test 6:2.50000000
    printf test 7:0000002.50
    printf test 8:<                 foo>
    printf test 9:<bar                 >
    printf test 10: 123456789012345
    printf test 10:<h�yesterettsjustitiarius>
    printf test 11: 123456789012345678901234567890
    printf test 11:<    h�yesterettsjustitiarius>
    printf test 12:-12.34
    printf test 13:  -12
    printf test 14:@
    printf test 15:10101010
    printf test 16:aa
    printf test 17:AA
    printf test 18:        10101010
    printf test 19:              aa
    printf test 20:              AA
    printf test 21:0000000010101010
    printf test 22:00000000000000aa
    printf test 23:00000000000000AA
    printf test 24:abcde
    printf test 25:gazonk
    printf test 26:2 1
    printf test 27:3 1 2
    printf test 28:02  1
    printf test 29:2   1
    printf test 30:x
    vprintf test 1:2   1
    @PHP/strings/bug22592.php: SUCCEEDED
    Arrays/array1.php: SUCCEEDED
    Arrays/array_diff_intersect.php: SUCCEEDED
    Arrays/array_diff_intersect2.php: SUCCEEDED
    Arrays/array_diff_intersect3.php: SUCCEEDED
    Arrays/array_map.php: SUCCEEDED
    Arrays/array_merge_recursive.php: SUCCEEDED
    Arrays/array_reduce1.php: SUCCEEDED
    Arrays/array_reduce2.php: SUCCEEDED
    Arrays/array_slice.php: SUCCEEDED
    Arrays/array_sumprod.php: SUCCEEDED
    Arrays/array_unshift.php: SUCCEEDED
    Arrays/array_walk.php: SUCCEEDED
    Arrays/array_walk_recursive.php: SUCCEEDED
    Arrays/multisort.php: SUCCEEDED
    Arrays/optimizations.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    3
    4
    5
    a
    b
    c
    
    Warning: strtolower() expects parameter 1 to be string, array given in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Arrays\__input.txt on line 15
    
    cablo
    3
    4
    5
    a
    b
    c
    array
    cablo
    Arrays/recursion.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    f1:
    array(2) {
      ["a"]=>
      array(5) {
        ["a"]=>
        &array(3) {
          ["a"]=>
          &array(3) {
            ["a"]=>
            *RECURSION*
            [0]=>
            string(1) "y"
            [1]=>
            string(1) "z"
          }
          [0]=>
          string(1) "y"
          [1]=>
          string(1) "z"
        }
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        string(1) "x"
      }
      [0]=>
      string(1) "w"
    }
    f2:
    array(1) {
      ["A"]=>
      &array(2) {
        ["a"]=>
        &array(2) {
          ["a"]=>
          *RECURSION*
          [0]=>
          string(1) "z"
        }
        [0]=>
        string(1) "z"
      }
    }
    f3:
    array(2) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) {
          [0]=>
          *RECURSION*
          [1]=>
          string(1) "z"
        }
        [1]=>
        string(1) "z"
      }
      [1]=>
      string(1) "z"
    }
    f4:
    
    Warning: array_merge_recursive(): recursion detected in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Arrays\__input.txt on line 37
    array(1) {
      ["a"]=>
      &array(3) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
      }
    }
    f5:
    array(1) {
      ["a"]=>
      array(6) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        int(1)
        [4]=>
        int(2)
        [5]=>
        int(3)
      }
    }
    f6:
    array(1) {
      ["a"]=>
      array(2) {
        [0]=>
        string(2) "xx"
        [1]=>
        int(2)
      }
    }
    f7:
    array(1) {
      ["a"]=>
      array(1) {
        ["a"]=>
        array(1) {
          ["a"]=>
          &array(1) {
            ["a"]=>
            &array(1) {
              ["a"]=>
              *RECURSION*
            }
          }
        }
      }
    }
    f1:
    array(2)
    {
      ['a'] => array(5)
      {
        ['a'] => &array(3)
        {
          ['a'] => &array(3) [recursion]
          [0] => string(1) "y"
          [1] => string(1) "z"
        }
        [0] => integer(1)
        [1] => integer(2)
        [2] => integer(3)
        [3] => string(1) "x"
      }
      [0] => string(1) "w"
    }
    f2:
    array(1)
    {
      ['A'] => &array(2)
      {
        ['a'] => &array(2) [recursion]
        [0] => string(1) "z"
      }
    }
    f3:
    array(2)
    {
      [0] => &array(2) [recursion]
      [1] => string(1) "z"
    }
    f4:
    array(1)
    {
      ['a'] => array(6)
      {
        [0] => integer(1)
        [1] => integer(2)
        [2] => integer(3)
        [3] => integer(1)
        [4] => integer(2)
        [5] => integer(3)
      }
    }
    f5:
    array(1)
    {
      ['a'] => array(6)
      {
        [0] => integer(1)
        [1] => integer(2)
        [2] => integer(3)
        [3] => integer(1)
        [4] => integer(2)
        [5] => integer(3)
      }
    }
    f6:
    array(1)
    {
      ['a'] => array(2)
      {
        [0] => string(2) "xx"
        [1] => integer(2)
      }
    }
    f7:
    array(1)
    {
      ['a'] => &array(1)
      {
        ['a'] => &array(1) [recursion]
      }
    }
    Arrays/sort.php: SUCCEEDED
    Arrays/usort.php: SUCCEEDED
    Bugs/class_incompletepart.php: SUCCEEDED
    Bugs/division-by-zero.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    DIVISION
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt on line 6
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt on line 8
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt on line 10
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt on line 12
    bool(false)
    MODULO
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt on line 16
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt on line 18
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt on line 20
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt on line 22
    bool(false)
    DIVISION
    bool(false)
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt at expression on line 10, column 2.
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt at expression on line 12, column 2.
    bool(false)
    MODULO
    bool(false)
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt at expression on line 20, column 2.
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt at expression on line 22, column 2.
    bool(false)
    D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt(6,10): warning PHP0150: Division by zero
    D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt(8,9): warning PHP0150: Division by zero
    D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt(16,10): warning PHP0150: Division by zero
    D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt(18,9): warning PHP0150: Division by zero
    
    Bugs/function-in-unknown-class.php: SUCCEEDED
    Bugs/is_a_null_value.php: SUCCEEDED
    Bugs/preg-named-groups.php: SUCCEEDED
    Bugs/preg-replace-advanced.php: SUCCEEDED
    Bugs/preg-replace-range.php: SUCCEEDED
    Bugs/preg-replace.php: SUCCEEDED
    Bugs/preg-this-dynamic.php: FAILED
    Script hung upNo errorsSuccess
    Expected test outputReal script output
    Unhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---> PHP.Core.Debug+AssertException: Assertion failed: 
       at PHP.Core.Debug.Fail(String message)
       at PHP.Core.Debug.Assert(Boolean condition)
       at PHP.Core.RelativePath.ParseCanonical(String relativePath)
       at PHP.Core.Emit.TransientAssemblyBuilder.Build(String sourceCode, SourceCodeDescriptor descriptor, EvalKinds kind, CompilationContext context, ScriptContext scriptContext, DTypeDesc referringType, NamingContext namingContext, Boolean completeSource)
       at PHP.Core.DynamicCode.EvalInternal(String prefix, String code, String suffix, EvalKinds kind, ScriptContext scriptContext, Dictionary`2 localVariables, DObject self, DTypeDesc referringType, SourceCodeDescriptor descriptor, Boolean entireFile, NamingContext namingContext)
       at PHP.Core.DynamicCode.Eval(String code, Boolean synthetic, ScriptContext context, Dictionary`2 definedVariables, DObject self, DTypeDesc referringType, String callerRelativeSourcePath, Int32 line, Int32 column, Int32 containerId, NamingContext namingContext)
       at PHP.Library.PerlRegExp.Evaluator.ReplaceCodeExecute(Match m)
       at System.Text.RegularExpressions.RegexReplacement.Replace(MatchEvaluator evaluator, Regex regex, String input, Int32 count, Int32 startat)
       at System.Text.RegularExpressions.Regex.Replace(String input, MatchEvaluator evaluator, Int32 count)
       at PHP.Library.PerlRegExp.ReplaceInternal(DObject self, Dictionary`2 definedVariables, PerlRegExpConverter converter, PhpCallback callback, String str, Int32 limit, SourceCodeDescriptor sourceCodeDesc, Int32& count)
       at PHP.Library.PerlRegExp.SimpleReplace(DObject self, Dictionary`2 definedVariables, Object pattern, String replacement, PhpCallback callback, Object data, Int32 limit, SourceCodeDescriptor descriptor, Int32& count)
       at PHP.Library.PerlRegExp.Replace(DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, PhpCallback callback, Object data, Int32 limit, Int32& count)
       at PHP.Library.PerlRegExp.Replace(DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, Object data)
       at PHP.Dynamic.PhpNetClassLibrary.preg_replace(Object , PhpStack )
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <__input.txt>.a.a(ScriptContext ) in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt:line 16
       at <__input.txt>.a.<Mediator>(ScriptContext )
       at <__input.txt>.a.a(Object instance, PhpStack stack)
       at <__input.txt>.<Script>.<Main>(ScriptContext <context>, Dictionary`2 <locals>, DObject , DTypeDesc , Boolean ) in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt:line 19
       at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)
       at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)
       --- End of inner exception stack trace ---
       at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)
       at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)
       at <Global>.Run(String[] )
    
    Bugs/preg-this-dynamic2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    foo: ahoj
    foo: lidi
    foo: rozkladame
    foo: ahoj
    foo: lidi
    foo: rozkladame
    foo: ahoj
    foo: lidi
    foo: rozkladame
    
    Notice: Undefined variable: this.
    
    Error: Call to a member function foo() on a non-object.
    Bugs/preg-this.php: SUCCEEDED
    Bugs/preg-ungreedy-bugs.php: SUCCEEDED
    Bugs/preg-unkn.php: SUCCEEDED
    Compiler/abstracts.php: SUCCEEDED
    Compiler/assignments.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ---1---1float(-1.5)
    float(2.5)
    float(0.83333333333333)
    int(6)
    int(8)
    ---2---2float(8.8333333333333)
    float(8.8333333333333)
    float(8.8333333333333)
    int(8)
    int(8)
    ---3---3---4---4---5---5array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [1]=>
      array(1) {
        [2]=>
        array(1) {
          [3]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    ---6---6array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "u"
    }
    array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "v"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    ---7---7array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    ---8---8
    ---1---1double(-1.5)
    double(2.5)
    double(0.833333333333333)
    integer(6)
    integer(8)
    ---2---2double(8.83333333333333)
    double(8.83333333333333)
    double(8.83333333333333)
    integer(8)
    integer(8)
    ---3---3---4---4---5---5array(1)
    {
      [0] => array(1)
      {
        [0] => array(1)
        {
          [0] => array(3)
          {
            [0] => integer(1)
            [1] => integer(2)
            [2] => integer(3)
          }
        }
      }
    }
    array(1)
    {
      [0] => array(1)
      {
        [0] => array(1)
        {
          [0] => array(3)
          {
            [0] => integer(1)
            [1] => integer(2)
            [2] => integer(3)
          }
        }
      }
    }
    array(1)
    {
      [1] => array(1)
      {
        [2] => array(1)
        {
          [3] => array(3)
          {
            [0] => integer(1)
            [1] => integer(2)
            [2] => integer(3)
          }
        }
      }
    }
    ---6---6array(4)
    {
      [0] => integer(1)
      [1] => integer(2)
      [2] => integer(3)
      [3] => string(1) "u"
    }
    array(4)
    {
      [0] => integer(1)
      [1] => integer(2)
      [2] => integer(3)
      [3] => string(1) "v"
    }
    array(5)
    {
      [0] => integer(1)
      [1] => integer(2)
      [2] => integer(3)
      [3] => string(1) "w"
      [4] => string(1) "z"
    }
    array(5)
    {
      [0] => integer(1)
      [1] => integer(2)
      [2] => integer(3)
      [3] => string(1) "w"
      [4] => string(1) "z"
    }
    ---7---7array(1)
    {
      [0] => array(1)
      {
        [0] => array(1)
        {
          [0] => array(1)
          {
            [0] => &integer(10)
          }
        }
      }
    }
    array(1)
    {
      [0] => array(1)
      {
        [0] => array(1)
        {
          [0] => array(1)
          {
            [0] => &integer(10)
          }
        }
      }
    }
    ---8---8
    Compiler/assign_in_call.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    g1:
    f(x)
    u(x)
    'x'
    
    g2:
    f(x)
    u(x)
    'b'
    
    g3:
    f(x)
    u(x)
    'b'
    
    g4:
    f(x)
    u(x)
    'b'
    
    g5:
    f()
    u()
    integer(1)
    
    g6:
    f(3)
    u(3)
    integer(3)
    
    g7:
    f(2)
    u(10)
    integer(10)
    
    g8:
    f(1)
    f(1)
    f(1)
    u(1)
    u()
    u(1)
    
    g9:
    known:
    __get(p) = 0
    __set(p,1)
    f(1)
    unknown:
    __get(p) = 1
    __set(p,3)
    u(3)
    
    g10:
    Done.
    g1:
    f(x)
    u(x)
    'x'
    
    g2:
    f(x)
    u(x)
    'b'
    
    g3:
    f(x)
    u(x)
    'b'
    
    g4:
    f(x)
    u(x)
    'b'
    
    g5:
    f()
    u()
    integer(1)
    
    g6:
    f(3)
    u(3)
    integer(3)
    
    g7:
    f(2)
    u(10)
    integer(10)
    
    g8:
    f(1)
    f(1)
    f(1)
    u(1)
    u()
    u(1)
    
    g9:
    known:
    __get(p) = 0
    __set(p,1)
    __get(p) = 1
    f(1)
    unknown:
    __get(p) = 1
    __set(p,3)
    __get(p) = 3
    u(3)
    
    g10:
    Done.
    Compiler/auto_globals_001.php: SUCCEEDED
    Compiler/auto_globals_002.php: SUCCEEDED
    Compiler/auto_globals_003.php: SUCCEEDED
    Compiler/break_in_global_code.php: SUCCEEDED
    Compiler/chaining_test.php: SUCCEEDED
    Compiler/chain_ending_by_string_index.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        string(1) "f"
      }
    }
    array(1) {
      [0]=>
      string(4) "xubu"
    }
    object(C)#1 (1) {
      ["f"]=>
      string(4) "kuxu"
    }
    string(5) "helxo"
    string(5) "helxo"
    array(1)
    {
      [0] => array(1)
      {
        [0] => string(1) "f"
      }
    }
    array(1)
    {
      [0] => string(4) "bubu"
    }
    
    Warning: A string item used as a reference in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt at expression on line 19, column 1.
    object(C)(1)
    {
      ["f"] => string(4) "kuku"
    }
    
    Warning: A string item used as a reference in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt at expression on line 25, column 1.
    string(5) "hello"
    
    Warning: A string item used as a reference in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt at expression on line 31, column 1.
    string(5) "hello"
    Compiler/continue_in_global_code.php: SUCCEEDED
    Compiler/deep_copy.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array(1) {
      [0]=>
      &array(1) {
        [0]=>
        &array(1) {
          [0]=>
          *RECURSION*
        }
      }
    }
    array(1) {
      [0]=>
      &array(1) {
        [0]=>
        &array(1) {
          [0]=>
          *RECURSION*
        }
      }
    }
    array(2) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) {
          [0]=>
          *RECURSION*
          [1]=>
          int(1)
        }
        [1]=>
        int(1)
      }
      [1]=>
      int(1)
    }
    array(1) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) {
          [0]=>
          *RECURSION*
          [1]=>
          int(1)
        }
        [1]=>
        int(1)
      }
    }
    array(1)
    {
      [0] => &array(1) [recursion]
    }
    array(1)
    {
      [0] => &array(1) [recursion]
    }
    array(2)
    {
      [0] => &array(2) [recursion]
      [1] => integer(1)
    }
    array(1)
    {
      [0] => &array(1) [recursion]
    }
    Compiler/deep_copy_refbox.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Strict Standards: Only variables should be passed by reference in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt on line 42
    array
    {
      0 => integer(1)
    }
    
    Strict Standards: Only variables should be passed by reference in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt on line 45
    array
    {
      0 => integer(1)
    }
    
    Strict Standards: Only variables should be passed by reference in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt on line 49
    array
    {
      0 => integer(1)
    }
    
    Strict Standards: Only variables should be passed by reference in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt on line 52
    array
    {
      0 => integer(1)
    }
    array
    {
      0 => integer(1)
      1 => integer(1)
    }
    array
    {
      0 => integer(1)
      1 => integer(1)
    }
    array
    {
      0 => integer(1)
      1 => integer(1)
    }
    array
    {
      0 => integer(1)
      1 => integer(1)
    }
    Compiler/expr_init.php: SUCCEEDED
    Compiler/foreach1.php: SUCCEEDED
    Compiler/foreach_arrays.php: SUCCEEDED
    Compiler/for_loop.php: SUCCEEDED
    Compiler/function_002.php: SUCCEEDED
    Compiler/function_003.php: SUCCEEDED
    Compiler/function_004.php: SUCCEEDED
    Compiler/function_call.php: SUCCEEDED
    Compiler/if_statement.php: SUCCEEDED
    Compiler/indirect_001.php: SUCCEEDED
    Compiler/indirect_002.php: SUCCEEDED
    Compiler/indirect_003.php: SUCCEEDED
    Compiler/indirect_004.php: SUCCEEDED
    Compiler/indirect_005.php: SUCCEEDED
    Compiler/indirect_007.php: SUCCEEDED
    Compiler/indirect_global.php: SUCCEEDED
    Compiler/inheritance.php: SUCCEEDED
    Compiler/inheritance2.php: SUCCEEDED
    Compiler/isset_unset_001.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Testing x in global code:  <br>
    1 <br>
     <br>
    Testing x (object) in optimized function:  <br>
    1 <br>
     <br>
    Testing x (PhpReference) in optimized function:  <br>
    1 <br>
     <br>
    
    Notice: Undefined variable: y in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt on line 29
    Testing $$x (created at runtime) in optimized function:  <br>
    1 <br>
    Testing x in global code:  <br>
    1 <br>
     <br>
    Testing x (object) in optimized function:  <br>
    1 <br>
     <br>
    Testing x (PhpReference) in optimized function:  <br>
    1 <br>
     <br>
    Testing $$x (created at runtime) in optimized function:  <br>
    1 <br>
    Compiler/null_hints.php: SUCCEEDED
    Compiler/switch.php: SUCCEEDED
    Compiler/ternary_ex.php: SUCCEEDED
    Compiler/typehint_check.php: SUCCEEDED
    Compiler/Inclusions/include2.php: SUCCEEDED
    Compiler/Inclusions/include3.php: SUCCEEDED
    Compiler/Inclusions/include6.php: SUCCEEDED
    Compiler/Inclusions/include_test.php: SUCCEEDED
    Compiler/Inclusions/script.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t01.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t02.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t03.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t04.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t05.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t08.php: SUCCEEDED
    Compiler/PseudoConst/parent.php: SUCCEEDED
    Compiler/PseudoConst/parent2.php: SUCCEEDED
    Compiler/PseudoConst/self.php: SUCCEEDED
    Compiler/PseudoConst/t01.php: SUCCEEDED
    Compiler/PseudoConst/t02.php: SUCCEEDED
    Compiler/PseudoConst/t03.php: SUCCEEDED
    Compiler/PseudoConst/t04.php: SUCCEEDED
    Compiler/PseudoConst/t05.php: SUCCEEDED
    Compiler/PseudoConst/t06.php: SUCCEEDED
    Compiler/PseudoConst/t07.php: SUCCEEDED
    Compiler/PseudoConst/t08.php: SUCCEEDED
    Compiler/PseudoConst/t09.php: SUCCEEDED
    Compiler/PseudoConst/t10.php: SUCCEEDED
    Compiler/PseudoConst/t11.php: SUCCEEDED
    Compiler/PseudoConst/_class_.php: SUCCEEDED
    Compiler/PseudoConst/_function_.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Notice: Undefined variable: a in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\PseudoConst\__input.txt on line 11
    g
    g
    Compiler/Unreachable/t13.php: SUCCEEDED
    DateTime/strftime.php: SUCCEEDED
    DateTime/strtotime1.php: SUCCEEDED
    DateTime/strtotime2.php: SUCCEEDED
    DateTime/strtotime3.php: SUCCEEDED
    DateTime/strtotime4.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0: 00:00:00 01/01/2005
    1: 01:00:00 01/01/2005
    2: 02:00:00 01/01/2005
    3: 03:00:00 01/01/2005
    4: 04:00:00 01/01/2005
    5: 05:00:00 01/01/2005
    6: 06:00:00 01/01/2005
    7: 07:00:00 01/01/2005
    8: 08:00:00 01/01/2005
    9: 09:00:00 01/01/2005
    10: 10:00:00 01/01/2005
    11: 11:00:00 01/01/2005
    12: 12:00:00 01/01/2005
    13: 13:00:00 01/01/2005
    14: 14:00:00 01/01/2005
    15: 15:00:00 01/01/2005
    16: 16:00:00 01/01/2005
    17: 17:00:00 01/01/2005
    18: 18:00:00 01/01/2005
    19: 19:00:00 01/01/2005
    20: 20:00:00 01/01/2005
    21: 21:00:00 01/01/2005
    22: 22:00:00 01/01/2005
    23: 23:00:00 01/01/2005
    24: 00:00:00 01/02/2005
    0am: error
    1am: 01:00:00 01/01/2005
    2am: 02:00:00 01/01/2005
    3am: 03:00:00 01/01/2005
    4am: 04:00:00 01/01/2005
    5am: 05:00:00 01/01/2005
    6am: 06:00:00 01/01/2005
    7am: 07:00:00 01/01/2005
    8am: 08:00:00 01/01/2005
    9am: 09:00:00 01/01/2005
    10am: 10:00:00 01/01/2005
    11am: 11:00:00 01/01/2005
    12am: 00:00:00 01/01/2005
    13am: error
    14am: error
    15am: error
    16am: error
    17am: error
    18am: error
    19am: error
    20am: error
    21am: error
    22am: error
    23am: error
    24am: error
    0pm: error
    1pm: 13:00:00 01/01/2005
    2pm: 14:00:00 01/01/2005
    3pm: 15:00:00 01/01/2005
    4pm: 16:00:00 01/01/2005
    5pm: 17:00:00 01/01/2005
    6pm: 18:00:00 01/01/2005
    7pm: 19:00:00 01/01/2005
    8pm: 20:00:00 01/01/2005
    9pm: 21:00:00 01/01/2005
    10pm: 22:00:00 01/01/2005
    11pm: 23:00:00 01/01/2005
    12pm: 12:00:00 01/01/2005
    13pm: error
    14pm: error
    15pm: error
    16pm: error
    17pm: error
    18pm: error
    19pm: error
    20pm: error
    21pm: error
    22pm: error
    23pm: error
    24pm: error
    0: 00:00:00 01/01/2005
    1: 01:00:00 01/01/2005
    2: 02:00:00 01/01/2005
    3: 03:00:00 01/01/2005
    4: 04:00:00 01/01/2005
    5: 05:00:00 01/01/2005
    6: 06:00:00 01/01/2005
    7: 07:00:00 01/01/2005
    8: 08:00:00 01/01/2005
    9: 09:00:00 01/01/2005
    10: 10:00:00 01/01/2005
    11: 11:00:00 01/01/2005
    12: 12:00:00 01/01/2005
    13: 13:00:00 01/01/2005
    14: 14:00:00 01/01/2005
    15: 15:00:00 01/01/2005
    16: 16:00:00 01/01/2005
    17: 17:00:00 01/01/2005
    18: 18:00:00 01/01/2005
    19: 19:00:00 01/01/2005
    20: 20:00:00 01/01/2005
    21: 21:00:00 01/01/2005
    22: 22:00:00 01/01/2005
    23: 23:00:00 01/01/2005
    24: error
    0am: error
    1am: 01:00:00 01/01/2005
    2am: 02:00:00 01/01/2005
    3am: 03:00:00 01/01/2005
    4am: 04:00:00 01/01/2005
    5am: 05:00:00 01/01/2005
    6am: 06:00:00 01/01/2005
    7am: 07:00:00 01/01/2005
    8am: 08:00:00 01/01/2005
    9am: 09:00:00 01/01/2005
    10am: 10:00:00 01/01/2005
    11am: 11:00:00 01/01/2005
    12am: 00:00:00 01/01/2005
    13am: error
    14am: error
    15am: error
    16am: error
    17am: error
    18am: error
    19am: error
    20am: error
    21am: error
    22am: error
    23am: error
    24am: error
    0pm: error
    1pm: 13:00:00 01/01/2005
    2pm: 14:00:00 01/01/2005
    3pm: 15:00:00 01/01/2005
    4pm: 16:00:00 01/01/2005
    5pm: 17:00:00 01/01/2005
    6pm: 18:00:00 01/01/2005
    7pm: 19:00:00 01/01/2005
    8pm: 20:00:00 01/01/2005
    9pm: 21:00:00 01/01/2005
    10pm: 22:00:00 01/01/2005
    11pm: 23:00:00 01/01/2005
    12pm: 12:00:00 01/01/2005
    13pm: error
    14pm: error
    15pm: error
    16pm: error
    17pm: error
    18pm: error
    19pm: error
    20pm: error
    21pm: error
    22pm: error
    23pm: error
    24pm: error
    DateTime/strtotime5.php: SUCCEEDED
    DateTime/time.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    -189388800:-189475200 - 86400
    1964-01-01T00:00:00+0000
    1963-12-31T00:00:00+0000
    1964-06-06
    1963-06-06
    1964-01-06
    1133305200
    -189388800:-189475200 - 86400
    1964-01-01T00:00:00+0000
    1963-12-31T00:00:00+0000
    1964-06-06
    1963-06-06
    1964-01-06
    DateTime/timezones1.php: SUCCEEDED
    FileSystem/basename.php: SUCCEEDED
    FileSystem/basename2.php: SUCCEEDED
    FileSystem/chdir.php: SUCCEEDED
    FileSystem/csv.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    --- write ---
    72
    24
    44
    2
    6
    
    --- read ---
    "hello\n
    world";"aaa""bbb""ccc";"blah blah;";none;"tab\ttab";"space space"\n
    hh'ee;"ss\nsadasdasd s"\n
    """""""""""""""""""""";"""";;"""""";"xxx"""\n
    x\n
    "x\y"\n
    --- write ---
    72
    24
    44
    2
    6
    
    --- read ---
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    FileSystem/date.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <pre>[ARRAY
      [INT (0)] => [STRING: "A --> {PM}"]
      [INT (1)] => [STRING: "B --> {719}"]
      [INT (2)] => [STRING: "C --> {C}"]
      [INT (3)] => [STRING: "D --> {Sat}"]
      [INT (4)] => [STRING: "E --> {E}"]
      [INT (5)] => [STRING: "F --> {March}"]
      [INT (6)] => [STRING: "G --> {17}"]
      [INT (7)] => [STRING: "H --> {17}"]
      [INT (8)] => [STRING: "I --> {0}"]
      [INT (9)] => [STRING: "J --> {J}"]
      [INT (10)] => [STRING: "K --> {K}"]
      [INT (11)] => [STRING: "L --> {0}"]
      [INT (12)] => [STRING: "M --> {Mar}"]
      [INT (13)] => [STRING: "N --> {6}"]
      [INT (14)] => [STRING: "O --> {+0100}"]
      [INT (15)] => [STRING: "P --> {+01:00}"]
      [INT (16)] => [STRING: "Q --> {Q}"]
      [INT (17)] => [STRING: "R --> {R}"]
      [INT (18)] => [STRING: "S --> {th}"]
      [INT (19)] => [STRING: "U --> {984240978}"]
      [INT (20)] => [STRING: "V --> {V}"]
      [INT (21)] => [STRING: "W --> {10}"]
      [INT (22)] => [STRING: "X --> {X}"]
      [INT (23)] => [STRING: "Y --> {2001}"]
      [INT (24)] => [STRING: "Z --> {3600}"]
      [INT (25)] => [STRING: "a --> {pm}"]
      [INT (26)] => [STRING: "b --> {b}"]
      [INT (27)] => [STRING: "c --> {2001-03-10T17:16:18+01:00}"]
      [INT (28)] => [STRING: "d --> {10}"]
      [INT (29)] => [STRING: "e --> {Europe/Prague}"]
      [INT (30)] => [STRING: "f --> {f}"]
      [INT (31)] => [STRING: "g --> {5}"]
      [INT (32)] => [STRING: "h --> {05}"]
      [INT (33)] => [STRING: "i --> {16}"]
      [INT (34)] => [STRING: "j --> {10}"]
      [INT (35)] => [STRING: "k --> {k}"]
      [INT (36)] => [STRING: "l --> {Saturday}"]
      [INT (37)] => [STRING: "m --> {03}"]
      [INT (38)] => [STRING: "n --> {3}"]
      [INT (39)] => [STRING: "o --> {2001}"]
      [INT (40)] => [STRING: "p --> {p}"]
      [INT (41)] => [STRING: "q --> {q}"]
      [INT (42)] => [STRING: "r --> {Sat, 10 Mar 2001 17:16:18 +0100}"]
      [INT (43)] => [STRING: "s --> {18}"]
      [INT (44)] => [STRING: "t --> {31}"]
      [INT (45)] => [STRING: "u --> {000000}"]
      [INT (46)] => [STRING: "v --> {v}"]
      [INT (47)] => [STRING: "w --> {6}"]
      [INT (48)] => [STRING: "x --> {x}"]
      [INT (49)] => [STRING: "y --> {01}"]
      [INT (50)] => [STRING: "z --> {68}"]
    ]</pre>
    <pre>[ARRAY
      [INT (0)] => [STRING: "A --> {PM}"]
      [INT (1)] => [STRING: "B --> {719}"]
      [INT (2)] => [STRING: "C --> {C}"]
      [INT (3)] => [STRING: "D --> {Sat}"]
      [INT (4)] => [STRING: "E --> {E}"]
      [INT (5)] => [STRING: "F --> {March}"]
      [INT (6)] => [STRING: "G --> {17}"]
      [INT (7)] => [STRING: "H --> {17}"]
      [INT (8)] => [STRING: "I --> {0}"]
      [INT (9)] => [STRING: "J --> {J}"]
      [INT (10)] => [STRING: "K --> {K}"]
      [INT (11)] => [STRING: "L --> {0}"]
      [INT (12)] => [STRING: "M --> {Mar}"]
      [INT (13)] => [STRING: "N --> {6}"]
      [INT (14)] => [STRING: "O --> {+0100}"]
      [INT (15)] => [STRING: "P --> {+01:00}"]
      [INT (16)] => [STRING: "Q --> {Q}"]
      [INT (17)] => [STRING: "R --> {R}"]
      [INT (18)] => [STRING: "S --> {th}"]
      [INT (19)] => [STRING: "U --> {984240978}"]
      [INT (20)] => [STRING: "V --> {V}"]
      [INT (21)] => [STRING: "W --> {10}"]
      [INT (22)] => [STRING: "X --> {X}"]
      [INT (23)] => [STRING: "Y --> {2001}"]
      [INT (24)] => [STRING: "Z --> {3600}"]
      [INT (25)] => [STRING: "a --> {pm}"]
      [INT (26)] => [STRING: "b --> {b}"]
      [INT (27)] => [STRING: "c --> {2001-03-10T17:16:18+01:00}"]
      [INT (28)] => [STRING: "d --> {10}"]
      [INT (29)] => [STRING: "e --> {Europe/Prague}"]
      [INT (30)] => [STRING: "f --> {f}"]
      [INT (31)] => [STRING: "g --> {5}"]
      [INT (32)] => [STRING: "h --> {05}"]
      [INT (33)] => [STRING: "i --> {16}"]
      [INT (34)] => [STRING: "j --> {10}"]
      [INT (35)] => [STRING: "k --> {k}"]
      [INT (36)] => [STRING: "l --> {Saturday}"]
      [INT (37)] => [STRING: "m --> {03}"]
      [INT (38)] => [STRING: "n --> {3}"]
      [INT (39)] => [STRING: "o --> {2001}"]
      [INT (40)] => [STRING: "p --> {p}"]
      [INT (41)] => [STRING: "q --> {q}"]
      [INT (42)] => [STRING: "r --> {Sat, 10 Mar 2001 17:16:18 +0100}"]
      [INT (43)] => [STRING: "s --> {18}"]
      [INT (44)] => [STRING: "t --> {31}"]
      [INT (45)] => [STRING: "u --> {u}"]
      [INT (46)] => [STRING: "v --> {v}"]
      [INT (47)] => [STRING: "w --> {6}"]
      [INT (48)] => [STRING: "x --> {x}"]
      [INT (49)] => [STRING: "y --> {01}"]
      [INT (50)] => [STRING: "z --> {68}"]
    ]</pre>
    FileSystem/date2.php: SUCCEEDED
    FileSystem/date3.php: SUCCEEDED
    FileSystem/date_unix.php: SUCCEEDED
    FileSystem/dirname.php: SUCCEEDED
    FileSystem/dirname2.php: SUCCEEDED
    FileSystem/disk_free_space.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    129 GB
    Drive C: 218 GB
    Drive D: 129 GB
    Drive E: 194 GB
    Drive F: 
    Warning: disk_free_space(): The device is not ready.
     in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt on line 14
    false
    129 GB
    Drive C: 218 GB
    Drive D: 129 GB
    Drive E: 194 GB
    Drive F: false
    FileSystem/disk_total_space.php: SUCCEEDED
    FileSystem/fgets.php: SUCCEEDED
    FileSystem/file.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <pre>[ARRAY
      [INT (0)] => [STRING: "this is a file with one EOLN
    "]
    ]</pre>
    <pre>[ARRAY
      [INT (0)] => [STRING: ""]
      [INT (1)] => [STRING: "This is a file with two EOLNs. First line is empty."]
    ]</pre>
    <pre>[ARRAY
      [INT (0)] => [STRING: "
    "]
      [INT (1)] => [STRING: "This is a file with two EOLNs. First line is empty.
    "]
    ]</pre>
    <pre>[ARRAY
      [INT (0)] => [STRING: "This is a file with two EOLNs. First line is empty."]
    ]</pre>
    <pre>[ARRAY
      [INT (0)] => [STRING: "this is a file WITHOUT an "end-of-line""]
    ]</pre>
    Line #<b>130</b> : &lt;/html&gt;
    <br />
    [this is a file with one EOLN{\n}
    ]
    <pre>[ARRAY
      [INT (0)] => [STRING: "this is a file with one EOLN
    "]
    ]</pre>
    <pre>[ARRAY
      [INT (0)] => [STRING: ""]
      [INT (1)] => [STRING: "This is a file with two EOLNs. First line is empty."]
    ]</pre>
    <pre>[ARRAY
      [INT (0)] => [STRING: "
    "]
      [INT (1)] => [STRING: "This is a file with two EOLNs. First line is empty.
    "]
    ]</pre>
    <pre>[ARRAY
      [INT (0)] => [STRING: ""]
      [INT (1)] => [STRING: "This is a file with two EOLNs. First line is empty."]
    ]</pre>
    <pre>[ARRAY
      [INT (0)] => [STRING: "this is a file WITHOUT an "end-of-line""]
    ]</pre>
    Line #<b>130</b> : &lt;/html&gt;
    <br />
    [this is a file with one EOLN{\n}
    ]
    FileSystem/filesize.php: SUCCEEDED
    FileSystem/file_exists.php: SUCCEEDED
    FileSystem/file_get_contents.php: SUCCEEDED
    FileSystem/fpassthru.php: SUCCEEDED
    FileSystem/fread.php: SUCCEEDED
    FileSystem/fread1.php: SUCCEEDED
    FileSystem/fread2.php: SUCCEEDED
    FileSystem/fseek.php: SUCCEEDED
    FileSystem/fsockopen.php: SUCCEEDED
    FileSystem/ftell.php: SUCCEEDED
    FileSystem/is_dir.php: SUCCEEDED
    FileSystem/is_executable.php: SUCCEEDED
    FileSystem/pathinfo.php: SUCCEEDED
    FileSystem/popen.php: SUCCEEDED
    FileSystem/readdir.php: SUCCEEDED
    FileSystem/readfile.php: SUCCEEDED
    FileSystem/readline.php: SUCCEEDED
    FileSystem/realpath.php: SUCCEEDED
    FileSystem/scandir.php: SUCCEEDED
    FileSystem/stat.php: SUCCEEDED
    FileSystem/stream_context_set_option.php: SUCCEEDED
    FileSystem/stream_copy_to_stream.php: SUCCEEDED
    FileSystem/stream_copy_to_stream2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <p>Read <b>rb</b>, Write <b>wb</b>
    
    
    COPIED: <b>9917</b>
    <p>Read <b>rb</b>, Write <b>wt</b>
    
    
    COPIED: <b>9935</b>
    <p>Read <b>rb</b>, Write <b>wb</b>
    
    
    COPIED: <b>9917</b>
    <p>Read <b>rb</b>, Write <b>wt</b>
    
    
    COPIED: <b>9917</b>
    FileSystem/testinc.php: SUCCEEDED
    FileSystem/touch.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Warning: touch(): Utime failed: No such file or directory in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt on line 8
    Sorry Could Not change modification time of touch.txt
    Warning: touch(): Utime failed: No such file or directory in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt on line 14
    
    Warning: touch(): Utime failed: No such file or directory in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt on line 16
    
    Warning: touch(): Utime failed: No such file or directory in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt on line 17
    <pre>[ARRAY
      [INT (0)] => [STRING: "January 24, 2010; [12:09:12] (12h) ctime test.txt (1264331352)"]
      [INT (1)] => [STRING: "January 24, 2010; [12:09:12] (12h) mtime test.txt (1264331352)"]
      [INT (2)] => [STRING: "January 24, 2010; [12:09:12] (12h) ctime touch.txt (1264331352)"]
      [INT (3)] => [STRING: "January 24, 2010; [12:09:12] (12h) mtime touch.txt (1264331352)"]
      [INT (4)] => [STRING: "January 24, 2010; [12:09:12] (12h) atime touch.txt (1264331352)"]
      [INT (5)] => [STRING: "January 24, 2010; [12:09:12] (12h) mtime summer.txt (1264331352)"]
      [INT (6)] => [STRING: "January 24, 2010; [12:09:12] (12h) mtime winter.txt (1264331352)"]
    ]</pre>
    Warning: touch(): Unable to access (D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\touch.txt): Permission denied in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 8, column 5.
    Sorry Could Not change modification time of touch.txt
    Warning: touch(): Unable to access (D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\touch.txt): Permission denied in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 14, column 1.
    
    Warning: touch(): Unable to access (D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\winter.txt): Permission denied in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 16, column 1.
    
    Warning: touch(): Unable to access (D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\summer.txt): Permission denied in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 17, column 1.
    <pre>[ARRAY
      [INT (0)] => [STRING: "January 24, 2010; [13:09:12] (13h) ctime test.txt (1264334952)"]
      [INT (1)] => [STRING: "January 24, 2010; [13:09:12] (13h) mtime test.txt (1264334952)"]
      [INT (2)] => [STRING: "January 24, 2010; [13:09:12] (13h) ctime touch.txt (1264334952)"]
      [INT (3)] => [STRING: "January 24, 2010; [13:09:12] (13h) mtime touch.txt (1264334952)"]
      [INT (4)] => [STRING: "January 24, 2010; [13:09:12] (13h) atime touch.txt (1264334952)"]
      [INT (5)] => [STRING: "January 24, 2010; [13:09:12] (13h) mtime summer.txt (1264334952)"]
      [INT (6)] => [STRING: "January 24, 2010; [13:09:12] (13h) mtime winter.txt (1264334952)"]
    ]</pre>
    Math/abs.php: SUCCEEDED
    Math/atan2.php: SUCCEEDED
    Math/base_convert.php: SUCCEEDED
    Math/bindec.php: SUCCEEDED
    Math/ceil.php: SUCCEEDED
    Math/cos.php: SUCCEEDED
    Math/decbin.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <pre>
    [double: 2294967295]
    10001000110010100110101111111111
    [double: 4294967296]
    0
    [double: 8589934590]
    11111111111111111111111111111110
    [double: 8589934590]
    11111111111111111111111111111110
    [double: 8589934591]
    11111111111111111111111111111111
    [Int: 1000.000.000.000]
    11010100101001010001000000000000
    <hr>(-1, -5435, 2.14, 0, 26)
    11111111111111111111111111111111
    11111111111111111110101011000101
    10
    0
    11010 
    </pre>
    <pre>
    [???: 2294967295]
    10001000110010100110101111111111
    [???: 4294967296]
    0
    [???: 8589934590]
    11111111111111111111111111111110
    [???: 8589934590]
    11111111111111111111111111111110
    [???: 8589934591]
    11111111111111111111111111111111
    [Int: 1000.000.000.000]
    11010100101001010001000000000000
    <hr>(-1, -5435, 2.14, 0, 26)
    11111111111111111111111111111111
    11111111111111111110101011000101
    10
    0
    11010 
    </pre>
    Math/dechex.php: SUCCEEDED
    Math/decoct.php: SUCCEEDED
    Math/deg2rad.php: SUCCEEDED
    Math/exp.php: SUCCEEDED
    Math/floor.php: SUCCEEDED
    Math/fmod.php: SUCCEEDED
    Math/hexdec.php: SUCCEEDED
    Math/max.php: SUCCEEDED
    Math/min.php: SUCCEEDED
    Math/modulo_warn.php: SUCCEEDED
    Math/octdec.php: SUCCEEDED
    Math/pow.php: SUCCEEDED
    Math/rad2deg.php: SUCCEEDED
    Math/round.php: SUCCEEDED
    Math/sin.php: SUCCEEDED
    Math/sqrt.php: SUCCEEDED
    Math/tan.php: SUCCEEDED
    Math/uniqid.php: SUCCEEDED
    Misc/calendar_extension.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0
    0
    2375840
    0
    14
    32
    2
    There are 31 days in August 2003
    There are 28 days in February 2003
    There are 29 days in February 2004
    There are 31 days in December 2034
    1748326
    1748324
    374867
    0
    322f32322f35373633
    ebe120e7f9e5ef20e4faf9f1e2
    ebe120e7f9e5ef20e427faf9f1e2
    ebe120e7f9e5ef20e420e0ecf4e9ed20faf9f1e2
    ebe120e7f9e5ef20e42720e0ecf4e9ed20faf9f1e2
    eb22e120e7f9e5ef20e4faf9f122e2
    e12720e7f9e5ef20e4faf9f122e2
    e12720e7f9e5ef20e427faf9f122e2
    e12720e7f9e5ef20e420e0ecf4e9ed20faf9f122e2
    e12720e7f9e5ef20e42720e0ecf4e9ed20faf9f122e2
    Error: Call to undefined function: 'frenchtojd' in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\__input.txt at expression on line 2, column 1.
    Misc/ini_parse.php: SUCCEEDED
    Misc/lexer.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    T_INLINE_HTML
    311 '\r\n'
    T_OPEN_TAG
    368 '&lt;?'
    T_WHITESPACE
    371 ' \r\n\r\n'
    T_FINAL
    345 'final'
    T_WHITESPACE
    371 ' '
    T_CLASS
    353 'class'
    T_WHITESPACE
    371 ' '
    T_STRING
    307 'A'
    T_WHITESPACE
    371 ' \r\n'
        '{'
    T_WHITESPACE
    371 ' \r\n  '
    T_FUNCTION
    334 'function'
    T_WHITESPACE
    371 ' '
    T_STRING
    307 '__get'
        '('
    T_VARIABLE
    309 '$x'
        ')'
    T_WHITESPACE
    371 ' \r\n  '
        '{'
    T_WHITESPACE
    371 ' \r\n    '
    T_VARIABLE
    309 '$x'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_START_HEREDOC
    372 '&lt;&lt;&lt;EOOOOOOOOOOOOOOT\r\n'
    T_ENCAPSED_AND_WHITESPACE
    314 '         &lt;&lt;&lt;hello\r\nEOOOOOOOOOOOOOOt;\r\nEOOOOOOOOOOOOOT;\r\n'
    T_END_HEREDOC
    373 'EOOOOOOOOOOOOOOT'
        ';'
    T_WHITESPACE
    371 '\r\n\r\n    '
        '$'
    T_VARIABLE
    309 '$y'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_ARRAY
    360 'array'
    T_WHITESPACE
    371 ' '
        '('
    T_LNUMBER
    305 '1'
        ','
    T_DNUMBER
    306 '100000000000000'
        ','
    T_DNUMBER
    306 '999999999999999999999999999999999'
        ','
    T_STRING
    307 'true'
        ','
    T_STRING
    307 'false'
        ')'
        ';'
    T_WHITESPACE
    371 '\r\n    '
        '$'
        '{'
        '&quot;'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
    T_DOLLAR_OPEN_CURLY_BRACES
    374 '${'
        '$'
        '{'
    T_CONSTANT_ENCAPSED_STRING
    315 '&quot;xxx&quot;'
        '}'
        '}'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
        '&quot;'
        '}'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_LNUMBER
    305 '1'
        ';'
    T_WHITESPACE
    371 '\r\n    '
        '$'
        '{'
        '&quot;'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
    T_DOLLAR_OPEN_CURLY_BRACES
    374 '${'
        '$'
        '{'
        '&quot;'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
    T_VARIABLE
    309 '$x'
    T_ENCAPSED_AND_WHITESPACE
    314 '-&gt;$$'
    T_VARIABLE
    309 '$x0xx'
        '&quot;'
        '}'
        '}'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
        '&quot;'
        '}'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_LNUMBER
    305 '1'
        ';'
    T_WHITESPACE
    371 '\r\n  '
        '}'
    T_WHITESPACE
    371 ' \r\n'
        '}'
    T_WHITESPACE
    371 '\r\n\r\n'
    T_CLOSE_TAG
    370 '?&gt;'
    '
    '
        '&lt;?'
        ' 
    
    '
        'final'
        ' '
        'class'
        ' '
        'A'
        ' 
    '
        '{'
        ' 
      '
        'function'
        ' '
    258
    258 '
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\__input.txt at expression on line 10, column 7.
    '
        '('
        '$x'
        ')'
        ' 
      '
        '{'
        ' 
        '
        '$x'
        ' '
        '='
        ' '
        '&lt;&lt;&lt;EOOOOOOOOOOOOOOT
    '
        '         &lt;&lt;&lt;'
        'hello'
        '
    '
        'EOOOOOOOOOOOOOOt;
    '
        'EOOOOOOOOOOOOOT;
    '
        'EOOOOOOOOOOOOOOT'
        ';'
        '
    
        '
        '$'
        '$y'
        ' '
        '='
        ' '
        'array'
        ' '
        '('
        '1'
        ','
        '100000000000000'
        ','
        '999999999999999999999999999999999'
        ','
        'true'
        ','
    256
    256 '
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\__input.txt at expression on line 10, column 7.
    '
        ')'
        ';'
        '
        '
        '$'
        '{'
        '&quot;'
        'x'
        '${'
        '$'
        '{'
    -29
    -29 '
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\__input.txt at expression on line 10, column 7.
    '
        '}'
        '}'
        'x'
        '&quot;'
        '}'
        ' '
        '='
        ' '
        '1'
        ';'
        '
        '
        '$'
        '{'
        '&quot;'
        'x'
        '${'
        '$'
        '{'
        '&quot;'
        'x'
        '$x'
        '-&gt;'
        '$'
        '$'
        '$x0xx'
        '&quot;'
        '}'
        '}'
        'x'
        '&quot;'
        '}'
        ' '
        '='
        ' '
        '1'
        ';'
        '
      '
        '}'
        ' 
    '
        '}'
        '
    
    '
        '?&gt;'
    Misc/locale.php: SUCCEEDED
    Misc/output2.php: SUCCEEDED
    Misc/stack_trace.php: FAILED
    Script hung upNo errorsSuccess
    Expected test outputReal script output
    Unhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---> System.IndexOutOfRangeException: Index was outside the bounds of the array.
       at PHP.Core.PhpStackFrame..ctor(ScriptContext context, StackFrame frame, FrameKinds kind)
       at PHP.Core.PhpStackTrace..ctor(ScriptContext context, StackTrace clrTrace)
       at PHP.Core.PhpStackTrace..ctor(ScriptContext context, Int32 skipFrames)
       at PHP.Library.Errors.Backtrace()
       at <stack_trace.inc>.<Script>.j(ScriptContext <context>) in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\stack_trace.inc:line 11
       at <stack_trace.inc>.<Script>.j(Object instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <stack_trace.inc>.<Script>.i(ScriptContext <context>) in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\stack_trace.inc:line 6
       at <stack_trace.inc>.<Script>.i(Object instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <^0>.<Global>.<?0>.h(ScriptContext <context>) in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\__input.txt:line 4
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack, DTypeDesc caller)
       at PHP.Core.PhpCallback.InvokeInternal(Object[] args)
       at PHP.Core.PhpCallback.Invoke(Object[] args)
       at PHP.Library.PhpArrays.Map(PhpCallback map, PhpArray[] arrays)
       at <^1>.<Global>.<?1>.Lambda_1(ScriptContext <context>) in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\__input.txt:line 1
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <__input.txt>.<Script>.f(ScriptContext <context>) in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\__input.txt:line 6
       at <__input.txt>.<Script>.f(Object instance, PhpStack stack)
       at <__input.txt>.<Script>.<Main>(ScriptContext <context>, Dictionary`2 <locals>, DObject , DTypeDesc , Boolean ) in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\__input.txt:line 18
       at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)
       at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)
       --- End of inner exception stack trace ---
       at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)
       at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)
       at <Global>.Run(String[] )
    
    Misc/tokens.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    T_REQUIRE_ONCE = 258,
    T_REQUIRE = 259,
    T_EVAL = 260,
    T_INCLUDE_ONCE = 261,
    T_INCLUDE = 262,
    T_LOGICAL_OR = 263,
    T_LOGICAL_XOR = 264,
    T_LOGICAL_AND = 265,
    T_PRINT = 266,
    T_SR_EQUAL = 267,
    T_SL_EQUAL = 268,
    T_XOR_EQUAL = 269,
    T_OR_EQUAL = 270,
    T_AND_EQUAL = 271,
    T_MOD_EQUAL = 272,
    T_CONCAT_EQUAL = 273,
    T_DIV_EQUAL = 274,
    T_MUL_EQUAL = 275,
    T_MINUS_EQUAL = 276,
    T_PLUS_EQUAL = 277,
    T_BOOLEAN_OR = 278,
    T_BOOLEAN_AND = 279,
    T_IS_NOT_IDENTICAL = 280,
    T_IS_IDENTICAL = 281,
    T_IS_NOT_EQUAL = 282,
    T_IS_EQUAL = 283,
    T_IS_GREATER_OR_EQUAL = 284,
    T_IS_SMALLER_OR_EQUAL = 285,
    T_SR = 286,
    T_SL = 287,
    T_INSTANCEOF = 288,
    T_UNSET_CAST = 289,
    T_BOOL_CAST = 290,
    T_OBJECT_CAST = 291,
    T_ARRAY_CAST = 292,
    T_STRING_CAST = 293,
    T_DOUBLE_CAST = 294,
    T_INT_CAST = 295,
    T_DEC = 296,
    T_INC = 297,
    T_CLONE = 298,
    T_NEW = 299,
    T_EXIT = 300,
    T_IF = 301,
    T_ELSEIF = 302,
    T_ELSE = 303,
    T_ENDIF = 304,
    T_LNUMBER = 305,
    T_DNUMBER = 306,
    T_STRING = 307,
    T_STRING_VARNAME = 308,
    T_VARIABLE = 309,
    T_NUM_STRING = 310,
    T_INLINE_HTML = 311,
    T_CHARACTER = 312,
    T_BAD_CHARACTER = 313,
    T_ENCAPSED_AND_WHITESPACE = 314,
    T_CONSTANT_ENCAPSED_STRING = 315,
    T_ECHO = 316,
    T_DO = 317,
    T_WHILE = 318,
    T_ENDWHILE = 319,
    T_FOR = 320,
    T_ENDFOR = 321,
    T_FOREACH = 322,
    T_ENDFOREACH = 323,
    T_DECLARE = 324,
    T_ENDDECLARE = 325,
    T_AS = 326,
    T_SWITCH = 327,
    T_ENDSWITCH = 328,
    T_CASE = 329,
    T_DEFAULT = 330,
    T_BREAK = 331,
    T_CONTINUE = 332,
    T_GOTO = 333,
    T_FUNCTION = 334,
    T_CONST = 335,
    T_RETURN = 336,
    T_TRY = 337,
    T_CATCH = 338,
    T_THROW = 339,
    T_USE = 340,
    T_GLOBAL = 341,
    T_PUBLIC = 342,
    T_PROTECTED = 343,
    T_PRIVATE = 344,
    T_FINAL = 345,
    T_ABSTRACT = 346,
    T_STATIC = 347,
    T_VAR = 348,
    T_UNSET = 349,
    T_ISSET = 350,
    T_EMPTY = 351,
    T_HALT_COMPILER = 352,
    T_CLASS = 353,
    T_INTERFACE = 354,
    T_EXTENDS = 355,
    T_IMPLEMENTS = 356,
    T_OBJECT_OPERATOR = 357,
    T_DOUBLE_ARROW = 358,
    T_LIST = 359,
    T_ARRAY = 360,
    T_CLASS_C = 361,
    T_METHOD_C = 362,
    T_FUNC_C = 363,
    T_LINE = 364,
    T_FILE = 365,
    T_COMMENT = 366,
    T_DOC_COMMENT = 367,
    T_OPEN_TAG = 368,
    T_OPEN_TAG_WITH_ECHO = 369,
    T_CLOSE_TAG = 370,
    T_WHITESPACE = 371,
    T_START_HEREDOC = 372,
    T_END_HEREDOC = 373,
    T_DOLLAR_OPEN_CURLY_BRACES = 374,
    T_CURLY_OPEN = 375,
    T_PAAMAYIM_NEKUDOTAYIM = 376,
    T_DOUBLE_COLON = 376,
    T_NAMESPACE = 377,
    T_NS_C = 378,
    T_DIR = 379,
    T_NS_SEPARATOR = 380,
    T_INCLUDE = 129,
    T_INCLUDE_ONCE = 130,
    T_EVAL = 131,
    T_REQUIRE = 132,
    T_REQUIRE_ONCE = 133,
    T_LOGICAL_OR = 136,
    T_LOGICAL_XOR = 137,
    T_LOGICAL_AND = 138,
    T_PRINT = 139,
    T_PLUS_EQUAL = 140,
    T_MINUS_EQUAL = 141,
    T_MUL_EQUAL = 142,
    T_DIV_EQUAL = 143,
    T_CONCAT_EQUAL = 144,
    T_MOD_EQUAL = 145,
    T_AND_EQUAL = 146,
    T_OR_EQUAL = 147,
    T_XOR_EQUAL = 148,
    T_SL_EQUAL = 149,
    T_SR_EQUAL = 150,
    T_BOOLEAN_OR = 151,
    T_BOOLEAN_AND = 152,
    T_IS_EQUAL = 153,
    T_IS_NOT_EQUAL = 154,
    T_IS_IDENTICAL = 155,
    T_IS_NOT_IDENTICAL = 156,
    T_IS_SMALLER_OR_EQUAL = 157,
    T_IS_GREATER_OR_EQUAL = 158,
    T_SL = 159,
    T_SR = 160,
    T_INC = 161,
    T_DEC = 162,
    T_NEW = 164,
    T_INSTANCEOF = 165,
    T_CLONE = 167,
    T_LNUMBER = 168,
    T_DNUMBER = 170,
    T_STRING = 171,
    T_STRING_VARNAME = 172,
    T_VARIABLE = 173,
    T_NUM_STRING = 174,
    T_INLINE_HTML = 175,
    T_CHARACTER = 176,
    T_BAD_CHARACTER = 177,
    T_ENCAPSED_AND_WHITESPACE = 178,
    T_CONSTANT_ENCAPSED_STRING = 179,
    T_EXIT = 180,
    T_IF = 181,
    T_ELSEIF = 182,
    T_ELSE = 183,
    T_ENDIF = 184,
    T_ECHO = 185,
    T_DO = 186,
    T_WHILE = 187,
    T_ENDWHILE = 188,
    T_FOR = 189,
    T_ENDFOR = 190,
    T_FOREACH = 191,
    T_ENDFOREACH = 192,
    T_AS = 193,
    T_SWITCH = 194,
    T_ENDSWITCH = 195,
    T_CASE = 196,
    T_DEFAULT = 197,
    T_BREAK = 198,
    T_CONTINUE = 199,
    T_FUNCTION = 200,
    T_CONST = 201,
    T_RETURN = 202,
    T_GLOBAL = 203,
    T_STATIC = 204,
    T_VAR = 205,
    T_UNSET = 206,
    T_ISSET = 207,
    T_EMPTY = 208,
    T_CLASS = 209,
    T_EXTENDS = 210,
    T_OBJECT_OPERATOR = 211,
    T_DOUBLE_ARROW = 212,
    T_LIST = 213,
    T_ARRAY = 214,
    T_CLASS_C = 215,
    T_METHOD_C = 216,
    T_FUNC_C = 217,
    T_LINE = 218,
    T_FILE = 219,
    T_COMMENT = 220,
    T_DOC_COMMENT = 221,
    T_OPEN_TAG = 226,
    T_OPEN_TAG_WITH_ECHO = 227,
    T_CLOSE_TAG = 228,
    T_WHITESPACE = 229,
    T_START_HEREDOC = 230,
    T_END_HEREDOC = 231,
    T_DOLLAR_OPEN_CURLY_BRACES = 232,
    T_CURLY_OPEN = 233,
    T_DOUBLE_COLON = 234,
    T_PAAMAYIM_NEKUDOTAYIM = 234,
    T_TRY = 236,
    T_CATCH = 237,
    T_THROW = 238,
    T_INTERFACE = 239,
    T_IMPLEMENTS = 240,
    T_ABSTRACT = 241,
    T_FINAL = 242,
    T_PRIVATE = 243,
    T_PROTECTED = 244,
    T_PUBLIC = 245,
    T_BOOL_CAST = 285,
    T_INT_CAST = 288,
    T_DOUBLE_CAST = 294,
    T_STRING_CAST = 297,
    T_ARRAY_CAST = 299,
    T_OBJECT_CAST = 300,
    T_UNSET_CAST = 301,
    T_HALT_COMPILER = 351,
    Misc/user_error_handlers.php: SUCCEEDED
    Objects/conditional1.php: SUCCEEDED
    Objects/conditional2.php: SUCCEEDED
    Objects/conditional_base_class.php: SUCCEEDED
    Objects/constant_test.php: SUCCEEDED
    Objects/evaled_parent.php: SUCCEEDED
    Objects/getter_setter_bug28444.php: SUCCEEDED
    Objects/instanceof.php: SUCCEEDED
    Objects/new_via_unknown_ctor.php: SUCCEEDED
    Objects/object_creation_test.php: SUCCEEDED
    Objects/static_field_test.php: SUCCEEDED
    Objects/static_method_test.php: SUCCEEDED
    Objects/sys_class_const.php: SUCCEEDED
    Objects/this2.php: SUCCEEDED
    RegEx/ereg.php: SUCCEEDED
    RegEx/preg_match_unmatched_groups.php: SUCCEEDED
    RegEx/preg_replace_eval.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ab"01300 as"00da sd"0asdsa das asd 11asd a1sd a
    ab"01300 as"00da sd"0(aasdasdkjask,$a,\,\l,a,s,d,a,s,d,k,j,a,s,${120})(ldjaklsdjalk,$l,\,\l,d,j,a,k,l,s,d,j,a,l,${120})djdsa das asd 11asd a1sd a
    ab"01300 as"00da sd"0asdsa das asd 11asd a1sd a
    ab"01300 as"00da sd"0(aasdasdkjask,$a,\,\l,a,s,d,a,s,d,k,j,,,${120})(ldjaklsdjalk,$l,\,\l,d,j,a,k,l,s,d,j,,,${120})djdsa das asd 11asd a1sd a
    RegEx/regexp-sql.php: SUCCEEDED
    RegEx/Perl/cache.php: SUCCEEDED
    RegEx/Perl/grep1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      [3] => string(3) "1.5"
      [6] => string(5) "58.54"
    }
    Notice: preg_grep(): Array to string conversion in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\RegEx\Perl\__input.txt at expression on line 5, column 1.
    array(2)
    {
      [3] => string(3) "1.5"
      [6] => string(5) "58.54"
    }
    RegEx/Perl/grep2.php: SUCCEEDED
    RegEx/Perl/match1.php: SUCCEEDED
    RegEx/Perl/match10.php: SUCCEEDED
    RegEx/Perl/match2.php: SUCCEEDED
    RegEx/Perl/match3.php: SUCCEEDED
    RegEx/Perl/match4.php: SUCCEEDED
    RegEx/Perl/match5.php: SUCCEEDED
    RegEx/Perl/match6.php: SUCCEEDED
    RegEx/Perl/match7.php: SUCCEEDED
    RegEx/Perl/match8.php: SUCCEEDED
    RegEx/Perl/match9.php: SUCCEEDED
    RegEx/Perl/match_all1.php: SUCCEEDED
    RegEx/Perl/match_all2.php: SUCCEEDED
    RegEx/Perl/match_all3.php: SUCCEEDED
    RegEx/Perl/match_all4.php: SUCCEEDED
    RegEx/Perl/match_dollar.php: SUCCEEDED
    RegEx/Perl/overflow.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string("kfkaj +j k45´┐Ż´┐Ż´┐Ż´┐Ż´┐Ż3#$%^&kjakfjkaj|kfj")
    string("kfkaj +j k45�����3#$%^&kjakfjkaj|kfj")
    RegEx/Perl/quote1.php: SUCCEEDED
    RegEx/Perl/quote2.php: SUCCEEDED
    RegEx/Perl/quote3.php: SUCCEEDED
    RegEx/Perl/replace1.php: SUCCEEDED
    RegEx/Perl/replace2.php: SUCCEEDED
    RegEx/Perl/replace3.php: SUCCEEDED
    RegEx/Perl/replace4.php: SUCCEEDED
    RegEx/Perl/replace5.php: SUCCEEDED
    RegEx/Perl/replace6.php: SUCCEEDED
    RegEx/Perl/replace7.php: SUCCEEDED
    RegEx/Perl/replace8.php: SUCCEEDED
    RegEx/Perl/replace9.php: SUCCEEDED
    RegEx/Perl/replace_callback1.php: SUCCEEDED
    RegEx/Perl/replace_callback2.php: SUCCEEDED
    RegEx/Perl/split1.php: SUCCEEDED
    RegEx/Perl/split2.php: SUCCEEDED
    RegEx/Perl/split3.php: SUCCEEDED
    RegEx/Perl/split4.php: SUCCEEDED
    RegEx/Perl/split5.php: SUCCEEDED
    RegEx/Perl/ungreedy.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    aaa
    a
    aaa
    
    a
    aa
    aaa
    aa
    aaa
    aaa
    a
    aaa
    a
    a
    aa
    aaa
    aa
    aaa
    RegEx/Perl/unsuccessful-preg_match_all.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0
    4
    1
    4
    0
    4
    1
    7
    SPL/ArrayAccess_offsetExists.php: SUCCEEDED
    SPL/exceptions.php: SUCCEEDED
    Strings/addcslashes.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    \f\o\o\[ \]
    Issues a Warning:
    // echo addcslashes("zoo['.']", 'z..A');
    // output:  \zoo['\.']
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt at expression on line 4, column 1.
    
    Issues a Warning:
    // echo addcslashes("zoo['.']", 'z..A');
    // output:  \zoo['\.']
    Strings/addslashes.php: SUCCEEDED
    Strings/chunk_split.php: SUCCEEDED
    Strings/concat.php: SUCCEEDED
    Strings/count_chars.php: SUCCEEDED
    Strings/crc32.php: SUCCEEDED
    Strings/crypt.php: SUCCEEDED
    Strings/crypt2.php: SUCCEEDED
    Strings/echo.php: SUCCEEDED
    Strings/explode.php: SUCCEEDED
    Strings/get_html_translation_table.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <hr>[&] => &amp;
    [>] => &gt;
    [<] => &lt;
    ["] => &quot;
    <hr>Hallo &amp; &lt;Frau&gt; &amp; Kr&iuml;&iquest;&frac12;mer
    <hr>[&] => &amp;
    [>] => &gt;
    [<] => &lt;
    ["] => &quot;
    <hr>Hallo &amp; &lt;Frau&gt; &amp; Kr�mer
    Strings/nl2br.php: SUCCEEDED
    Strings/pack.php: SUCCEEDED
    Strings/pos.php: SUCCEEDED
    Strings/runtime-quotes.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    fread = (x''y"z)
    fgets = (x''y"z)
    file[0] = (x''y"z)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    
    Warning: fopen(runtime-quotes2.txt): failed to open stream: Permission denied in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt on line 33
    
    Warning: fwrite() expects parameter 1 to be resource, boolean given in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt on line 35
    fwrite = ()
    
    Warning: fputs() expects parameter 1 to be resource, boolean given in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt on line 38
    fputs = ()
    
    Warning: fclose() expects parameter 1 to be resource, boolean given in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt on line 41
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (x'y"z)
    fgets = (x'y"z)
    file[0] = (x'y"z)
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (a\'b"\\ca\)
    fgets = (a\'b"\\ca\'b"\\c)
    file[0] = (a\'b"\\ca\'b"\\c)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    e'e
    e''e
    e'e
    e'e
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    e'e
    e'e
    e'e
    e'e
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    fread = (x''y"z)
    fgets = (x''y"z)
    file[0] = (x''y"z)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    
    Warning: fopen(): Unable to access (D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\runtime-quotes2.txt): Permission denied in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt at expression on line 33, column 3.
    
    Warning: Cannot convert bool to resource implicitly in a call to function fwrite() in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt at expression on line 35, column 3.
    fwrite = ()
    
    Warning: Cannot convert bool to resource implicitly in a call to function fputs() in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt at expression on line 38, column 3.
    fputs = ()
    
    Warning: Cannot convert bool to resource implicitly in a call to function fclose() in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt at expression on line 41, column 3.
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (x'y"z)
    fgets = (x'y"z)
    file[0] = (x'y"z)
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (a\'b"\\ca\)
    fgets = (a\'b"\\ca\'b"\\c)
    file[0] = (a\'b"\\ca\'b"\\c)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    e'e
    e''e
    e'e
    e'e
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    e'e
    e'e
    e'e
    e'e
    Strings/sprintf.php: SUCCEEDED
    Strings/sprintf2.php: SUCCEEDED
    Strings/strtr.php: SUCCEEDED
    Strings/str_ireplace.php: SUCCEEDED
    Strings/str_word_count.php: SUCCEEDED
    Strings/substr_operations.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string(1) "b"
    string(1) "b"
    string(9) "baaaaaaaa"
    string(9) "aaaaaaaab"
    string(3) "aba"
    string(9) "aaaaaaaab"
    
    int(8)
    int(8)
    
    Warning: substr_count(): Length should be greater than 0 in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt on line 15
    bool(false)
    
    Warning: substr_count(): Offset value 10 exceeds string length in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt on line 17
    bool(false)
    
    Warning: substr_count(): Offset value 10 exceeds string length in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt on line 18
    bool(false)
    
    array(5) {
      [0]=>
      string(4) "baaa"
      [1]=>
      string(4) "baaa"
      [2]=>
      string(1) "b"
      [3]=>
      string(1) "b"
      [4]=>
      string(1) "b"
    }
    
    int(0)
    int(0)
    int(0)
    int(1)
    int(-1)
    string(1) "b"
    string(1) "b"
    string(9) "baaaaaaaa"
    string(9) "aaaaaaaab"
    string(3) "aba"
    string(9) "aaaaaaaab"
    
    integer(8)
    integer(8)
    integer(0)
    integer(0)
    integer(0)
    
    array(5)
    {
      [0] => string(4) "baaa"
      [1] => string(4) "baaa"
      [2] => string(1) "b"
      [3] => string(1) "b"
      [4] => string(1) "b"
    }
    
    integer(0)
    integer(0)
    integer(0)
    integer(1)
    integer(-1)
    Strings/wordwrap.php: SUCCEEDED
    Variables/advanced_serialize.php: SUCCEEDED
    Variables/arguments.php: SUCCEEDED
    Variables/bitwise.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "00"
    string(2) "31"
    string(2) "31"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    0
    0
    0
    5
    0
    5
    40
    5
    45
    string(48) "000000000000000000000000000000000000000000000000"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(14) "31323331323331"
    string(2) "30"
    string(14) "31323331323331"
    string(16) "3635343635343536"
    string(2) "30"
    string(16) "3635343635343536"
    string(14) "337a5e8be43d7a"
    string(14) "00002130120201"
    string(48) "337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42"
    string(16) "347d598ce33a7e77"
    string(16) "0200243214040100"
    string(48) "367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42"
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "00"
    string(2) "31"
    string(2) "31"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    0
    -9223372036854775808
    -9223372036854775808
    -9223372036854775803
    0
    -9223372036854775803
    40
    5
    45
    string(48) "000000000000000000000000000000000000000000000000"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(14) "31323331323331"
    string(2) "30"
    string(14) "31323331323331"
    string(16) "3635343635343536"
    string(2) "30"
    string(16) "3635343635343536"
    string(14) "337a5e8be43d7a"
    string(14) "00002130120201"
    string(48) "337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42"
    string(16) "347d598ce33a7e77"
    string(16) "0200243214040100"
    string(48) "367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42"
    Variables/comparisons.php: SUCCEEDED
    Variables/constant.php: SUCCEEDED
    Variables/extract.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    EXTR_PREFIX_ALL
    integer(4)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
      'prefix_non_existent' => integer(1)
    }
    <hr>EXTR_PREFIX_INVALID
    integer(5)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => integer(2)
      'non_existent' => integer(1)
      'prefix_' => integer(1)
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => 'hello'
    }
    <hr>EXTR_PREFIX_SAME
    integer(3)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'non_existent' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>EXTR_PREFIX_IF_EXISTS
    integer(3)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>
    EXTR_PREFIX_ALL
    integer(4)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
      'prefix_non_existent' => integer(1)
    }
    <hr>EXTR_PREFIX_INVALID
    integer(2)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_ad' => integer(2)
      'prefix_non_existent' => integer(1)
    }
    <hr>EXTR_PREFIX_SAME
    integer(4)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'non_existent' => integer(1)
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>EXTR_PREFIX_IF_EXISTS
    integer(3)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>
    Variables/func_get_args.php: SUCCEEDED
    Variables/is_number.php: SUCCEEDED
    Variables/serialize.php: SUCCEEDED
    Variables/var_dumping.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Array
    (
        [0] => 1
        [1] => 
        [2] => 1
        [3] => 1.2
        [4] => 
        [5] => asdas
        [6] => Array
            (
                [0] => 1
            )
    
        [7] => stdClass Object
            (
            )
    
        [8] => Resource id #1
    )
    array(9) {
      [0]=>
      bool(true)
      [1]=>
      bool(false)
      [2]=>
      int(1)
      [3]=>
      float(1.2)
      [4]=>
      NULL
      [5]=>
      string(5) "asdas"
      [6]=>
      array(1) {
        [0]=>
        int(1)
      }
      [7]=>
      object(stdClass)#1 (0) {
      }
      [8]=>
      resource(1) of type (stream)
    }
    array (
      0 => true,
      1 => false,
      2 => 1,
      3 => 1.2,
      4 => NULL,
      5 => 'asdas',
      6 => 
      array (
        0 => 1,
      ),
      7 => 
      stdClass::__set_state(array(
      )),
      8 => NULL,
    )
    array
    (
      [0] => 1
      [1] => 
      [2] => 1
      [3] => 1.2
      [4] => 
      [5] => asdas
      [6] => array
      (
        [0] => 1
      )
      [7] => stdClass object
      (
      )
      [8] => resource id #4
    )
    array(9)
    {
      [0] => bool(true)
      [1] => bool(false)
      [2] => integer(1)
      [3] => double(1.2)
      [4] => NULL
      [5] => string(5) "asdas"
      [6] => array(1)
      {
        [0] => integer(1)
      }
      [7] => object(stdClass)(0)
      {
      }
      [8] => resource(4) of type (stream)
    }
    array
    (
      '0' => true,
      '1' => false,
      '2' => 1,
      '3' => 1.2,
      '4' => NULL,
      '5' => 'asdas',
      '6' => array
      (
        '0' => 1
      ),
      '7' => class stdClass
      {
    
      },
      '8' => NULL
    )
    WorkItems/22016.php: SUCCEEDED
    WorkItems/22019.php: SUCCEEDED
    WorkItems/26052.php: SUCCEEDED
    WorkItems/26681.php: SUCCEEDED
    WorkItems/2787.php: SUCCEEDED
    Xml/005.php: SUCCEEDED
    Xml/006.php: SUCCEEDED
    Xml/007.php: SUCCEEDED
    Xml/008.php: SUCCEEDED
    Xml/009.php: SUCCEEDED
    Xml/011.php: SUCCEEDED
    Xml/013.php: SUCCEEDED
    Xml/017.php: SUCCEEDED
    Xml/018.php: SUCCEEDED
    Xml/019.php: SUCCEEDED
    Xml/020.php: SUCCEEDED
    Xml/021.php: SUCCEEDED
    Xml/025.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
      'foo' => 'foobar'
    }
    array
    {
      'html' => 'http://www.w3.org/1999/xhtml'
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
    }
    array
    {
      'html' => 'http://www.w3.org/1999/xhtml'
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'foo' => 'foobar'
      'baz' => 'foobarbaz'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
    }
    array
    {
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
      'baz' => 'foobarbaz'
      'foo' => 'foobar'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
      'baz' => 'foobarbaz'
      'foo' => 'foobar'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
    }
    array
    {
    }
    Xml/026.php: SUCCEEDED
    Xml/027.php: SUCCEEDED
    Xml/028.php: SUCCEEDED
    Xml/029.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    'Joe'
    integer(3)
    integer(0)
    'John'
    integer(3)
    integer(1)
    'Jane'
    integer(3)
    integer(0)
    'Joe'
    integer(1)
    integer(1)
    'John'
    integer(1)
    integer(1)
    'Jane'
    integer(1)
    integer(1)
    Xml/030.php: SUCCEEDED
    Xml/032.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    FALSE
    FALSE
    FALSE
    TRUE
    TRUE
    TRUE
    Xml/033.php: SUCCEEDED
    Xml/bug26384.php: SUCCEEDED
    Xml/bug28721.php: SUCCEEDED
    Xml/bug28817.php: SUCCEEDED
    Xml/bug32615.php: SUCCEEDED
    Xml/bug33853.php: SUCCEEDED
    Xml/bug34276.php: SUCCEEDED
    Xml/bug35342.php: SUCCEEDED
    Xml/bug36756.php: SUCCEEDED
    Xml/bug37277.php: SUCCEEDED
    Xml/dom002.php: SUCCEEDED
    Xml/dom003.php: SUCCEEDED
    Xml/dom006.php: SUCCEEDED
    Xml/dom007.php: SUCCEEDED
    Xml/dom_set_attr_node.php: SUCCEEDED
    Xml/xslt001.php: SUCCEEDED
    Xml/xslt002.php: SUCCEEDED
    Xml/xslt003.php: SUCCEEDED
    Xml/xslt004.php: SUCCEEDED
    Xml/xslt005.php: SUCCEEDED
    Xml/xslt006.php: SUCCEEDED
    Xml/xslt007.php: SUCCEEDED
    Xml/xslt010.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test 10: EXSLT Support
      
      
      Test Date : 0001-12-31Z
        year                 : 1
        leap-year            : false
        month-in-year        : 12
        month-name           : December
        month-abbreviation   : Dec
        week-in-year         : 1
        day-in-year          : 365
        day-in-month         : 31
        day-of-week-in-month : 5
        day-in-week          : 2
        day-name             : Monday
        day-abbreviation     : Mon
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : 3000-01-31
        year                 : 3000
        leap-year            : false
        month-in-year        : 1
        month-name           : January
        month-abbreviation   : Jan
        week-in-year         : 5
        day-in-year          : 31
        day-in-month         : 31
        day-of-week-in-month : 5
        day-in-week          : 6
        day-name             : Friday
        day-abbreviation     : Fri
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : 2000-02-29
        year                 : 2000
        leap-year            : true
        month-in-year        : 2
        month-name           : February
        month-abbreviation   : Feb
        week-in-year         : 9
        day-in-year          : 60
        day-in-month         : 29
        day-of-week-in-month : 5
        day-in-week          : 3
        day-name             : Tuesday
        day-abbreviation     : Tue
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : 9990001-12-31Z
        year                 : 9990001
        leap-year            : false
        month-in-year        : 12
        month-name           : December
        month-abbreviation   : Dec
        week-in-year         : 1
        day-in-year          : 365
        day-in-month         : 31
        day-of-week-in-month : 5
        day-in-week          : 2
        day-name             : Monday
        day-abbreviation     : Mon
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : -0004-02-29
        year                 : -4
        leap-year            : true
        month-in-year        : 2
        month-name           : February
        month-abbreviation   : Feb
        week-in-year         : 9
        day-in-year          : 60
        day-in-month         : 29
        day-of-week-in-month : 5
        day-in-week          : 1
        day-name             : Sunday
        day-abbreviation     : Sun
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
    Test 10: EXSLT Support
    Warning: Cannot find the script or external object that implements prefix 'http://exslt.org/dates-and-times'. in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Xml\__input.txt at expression on line 14, column 3.
    
    Warning: Illegal string offset '-1' in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Phalanger.inc at expression on line 7, column 6.
    Xml/xslt011.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test 11: php:function Support
    
    Warning: XSLTProcessor::transformToXml(): A PHP Object cannot be converted to a XPath-string in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Xml\__input.txt on line 18
    <?xml version="1.0"?>
    foobar - secondArg
    foobar - 
    this is from an external DomDocument
    from the Input Document
    static
    Test 11: php:function Support
    <?xml version="1.0" encoding="utf-8"?>foobar - secondArg
    foobar - 
    this is from an external DomDocument
    from the Input Document
    static
    not a DomNode object
    Xml/xslt012.php: SUCCEEDED
    ================================================ FILE: Testing/Tests/TestLogs/TestLog 2010-06-12.htm ================================================ PHP.NET Compiler test log

    PHP.NET Compiler test log

    (92%) 792 succeeded, 73 failed
    Test ResultCompiler error outputExpected test result
    @PHP/classes/array_access_001.php: SUCCEEDED
    @PHP/classes/array_access_002.php: SUCCEEDED
    @PHP/classes/array_access_003.php: SUCCEEDED
    @PHP/classes/array_access_004.php: SUCCEEDED
    @PHP/classes/array_access_005.php: SUCCEEDED
    @PHP/classes/array_access_006.php: SUCCEEDED
    @PHP/classes/array_access_007.php: SUCCEEDED
    @PHP/classes/array_access_008.php: SUCCEEDED
    @PHP/classes/array_access_009.php: SUCCEEDED
    @PHP/classes/array_access_010.php: SUCCEEDED
    @PHP/classes/array_access_011.php: SUCCEEDED
    @PHP/classes/array_access_013.php: SUCCEEDED
    @PHP/classes/assign_op_property_001.php: SUCCEEDED
    @PHP/classes/autoload_001.php: SUCCEEDED
    @PHP/classes/autoload_002.php: SUCCEEDED
    @PHP/classes/autoload_003.php: SUCCEEDED
    @PHP/classes/autoload_005.php: SUCCEEDED
    @PHP/classes/autoload_006.php: SUCCEEDED
    @PHP/classes/bug23951.php: SUCCEEDED
    @PHP/classes/bug24399.php: SUCCEEDED
    @PHP/classes/bug24445.php: SUCCEEDED
    @PHP/classes/bug26737.php: SUCCEEDED
    @PHP/classes/bug27468.php: SUCCEEDED
    @PHP/classes/bug27504.php: SUCCEEDED
    @PHP/classes/class_example.php: SUCCEEDED
    @PHP/classes/class_stdclass.php: SUCCEEDED
    @PHP/classes/clone_001.php: SUCCEEDED
    @PHP/classes/clone_002.php: SUCCEEDED
    @PHP/classes/clone_003.php: SUCCEEDED
    @PHP/classes/clone_004.php: SUCCEEDED
    @PHP/classes/clone_006.php: SUCCEEDED
    @PHP/classes/constants_scope_001.php: SUCCEEDED
    @PHP/classes/ctor_dtor.php: SUCCEEDED
    @PHP/classes/ctor_dtor_inheritance.php: SUCCEEDED
    @PHP/classes/ctor_name_clash.php: SUCCEEDED
    @PHP/classes/dereferencing_001.php: SUCCEEDED
    @PHP/classes/destructor_and_echo.php: SUCCEEDED
    @PHP/classes/destructor_and_references.php: SUCCEEDED
    @PHP/classes/destructor_inheritance.php: SUCCEEDED
    @PHP/classes/destructor_visibility_003.php: SUCCEEDED
    @PHP/classes/factory_001.php: SUCCEEDED
    @PHP/classes/factory_and_singleton_001.php: SUCCEEDED
    @PHP/classes/factory_and_singleton_002.php: SUCCEEDED
    @PHP/classes/final.php: SUCCEEDED
    @PHP/classes/incdec_property_001.php: SUCCEEDED
    @PHP/classes/incdec_property_002.php: SUCCEEDED
    @PHP/classes/incdec_property_003.php: SUCCEEDED
    @PHP/classes/incdec_property_004.php: SUCCEEDED
    @PHP/classes/inheritance.php: SUCCEEDED
    @PHP/classes/inheritance_002.php: SUCCEEDED
    @PHP/classes/interfaces_001.php: SUCCEEDED
    @PHP/classes/interface_construct.php: SUCCEEDED
    @PHP/classes/interface_doubled.php: SUCCEEDED
    @PHP/classes/interface_implemented.php: SUCCEEDED
    @PHP/classes/iterators_001.php: SUCCEEDED
    @PHP/classes/iterators_002.php: SUCCEEDED
    @PHP/classes/iterators_003.php: SUCCEEDED
    @PHP/classes/iterators_004.php: SUCCEEDED
    @PHP/classes/iterators_006.php: SUCCEEDED
    @PHP/classes/iterators_007.php: SUCCEEDED
    @PHP/classes/object_reference_001.php: SUCCEEDED
    @PHP/classes/private_001.php: SUCCEEDED
    @PHP/classes/private_002.php: SUCCEEDED
    @PHP/classes/private_003.php: SUCCEEDED
    @PHP/classes/private_003b.php: SUCCEEDED
    @PHP/classes/private_004.php: SUCCEEDED
    @PHP/classes/private_004b.php: SUCCEEDED
    @PHP/classes/private_005.php: SUCCEEDED
    @PHP/classes/private_005b.php: SUCCEEDED
    @PHP/classes/private_006.php: SUCCEEDED
    @PHP/classes/private_006b.php: SUCCEEDED
    @PHP/classes/private_007.php: SUCCEEDED
    @PHP/classes/private_007b.php: SUCCEEDED
    @PHP/classes/private_members.php: SUCCEEDED
    @PHP/classes/private_redeclare.php: SUCCEEDED
    @PHP/classes/protected_001.php: SUCCEEDED
    @PHP/classes/protected_001b.php: SUCCEEDED
    @PHP/classes/protected_002.php: SUCCEEDED
    @PHP/classes/serialize_001.php: SUCCEEDED
    @PHP/classes/singleton_001.php: SUCCEEDED
    @PHP/classes/static_properties_001.php: SUCCEEDED
    @PHP/classes/type_hinting_001.php: SUCCEEDED
    @PHP/classes/type_hinting_003.php: SUCCEEDED
    @PHP/classes/visibility_000c.php: SUCCEEDED
    @PHP/classes/visibility_001c.php: SUCCEEDED
    @PHP/classes/visibility_002c.php: SUCCEEDED
    @PHP/classes/visibility_003a.php: SUCCEEDED
    @PHP/classes/visibility_003c.php: SUCCEEDED
    @PHP/classes/visibility_004a.php: SUCCEEDED
    @PHP/classes/visibility_004b.php: SUCCEEDED
    @PHP/classes/visibility_004c.php: SUCCEEDED
    @PHP/classes/visibility_005.php: SUCCEEDED
    @PHP/classes/__call_001.php: SUCCEEDED
    @PHP/classes/__set_data_corrupt.php: FAILED
    Script hung upNo errorsSuccess
    Expected test outputReal script output
    Unhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---> System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> PHP.Core.Debug+AssertException: Assertion failed: Add      public static readonly object foobar = (int)1; instead of AddConstant usage.
       at PHP.Core.Debug.Fail(String message)
       at PHP.Core.Reflection.PhpTypeDesc.AddConstant(String name, Object value)
       at <__input.txt>.foo.__PopulateTypeDesc(PhpTypeDesc )
       --- End of inner exception stack trace ---
       at System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
       at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)
       at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
       at System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters)
       at PHP.Core.Reflection.PhpTypeDesc.AutoPopulate()
       at PHP.Core.Reflection.PhpTypeDesc.ReflectMethods()
       at PHP.Core.Reflection.DTypeDesc.get_Methods()
       at PHP.Core.Reflection.DTypeDesc.GetMember[N,T](GetMemberDictionary`2 dictionary, N name, DTypeDesc context, LookupFlags flags, T& member)
       at PHP.Core.Reflection.DTypeDesc.GetMethod(Name methodName, DTypeDesc context, DRoutineDesc& method)
       at PHP.Core.Reflection.DObject.InvokeMethod(String name, DTypeDesc caller, ScriptContext context)
       at PHP.Core.Operators.InvokeMethod(Object x, String methodName, DTypeDesc caller, ScriptContext context)
       at <__input.txt>.<Script>.<Main>(ScriptContext <context>, Dictionary`2 <locals>, DObject , DTypeDesc , Boolean ) in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\classes\__input.txt:line 21
       at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)
       at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)
       --- End of inner exception stack trace ---
       at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)
       at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)
       at <Global>.Run(String[] )
    
    @PHP/classes/__set__get_001.php: SUCCEEDED
    @PHP/classes/__set__get_004.php: SUCCEEDED
    @PHP/classes/__set__get_005.php: SUCCEEDED
    @PHP/date/bug17988.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2002-06-25 12:18:48
    2002-06-25 14:18:48
    2002-06-25 13:18:48
    2002-06-25 12:18:48
    2002-06-25 18:18:48
    2002-06-25 14:18:48
    2002-06-25 14:18:48
    2002-06-25 18:18:48
    2002-06-25 10:18:48
    2002-06-25 17:18:48
    2002-06-25 11:18:48
    2002-06-25 17:48:48
    2002-06-25 10:48:48
    2002-06-25 14:18:48
    2002-06-25 14:18:48
    2002-06-25 13:18:48
    2002-06-25 12:18:48
    2002-06-25 18:18:48
    2002-06-25 14:18:48
    2002-06-25 14:18:48
    2002-06-25 18:18:48
    2002-06-25 10:18:48
    2002-06-25 17:18:48
    2002-06-25 11:18:48
    2002-06-25 17:48:48
    2002-06-25 10:48:48
    @PHP/date/bug26317.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2003-11-19 17:20:42
    2003-11-19 17:20:42
    2003-11-19 17:20:42
    2003-11-19 16:20:42
    2003-11-19 16:20:42
    2003-11-19 16:20:42
    @PHP/date/bug26320.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2003-11-19 12:30:42
    2003-11-19 13:30:42
    2003-11-19 12:30:42
    2003-11-19 12:30:42
    @PHP/date/bug28088.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    The following line rightly shows the correct date time:
    04/04/04 2145
    But the following line fails to show the correct date time:
    04/03/04 2245
    The following line rightly shows the correct date time:
    04/04/04 2345
    But the following line fails to show the correct date time:
    04/04/04 0045
    @PHP/date/bug28599.php: SUCCEEDED
    @PHP/date/bug29150.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2005-06-19 22:00:00
    2005-06-20 00:00:00
    @PHP/date/bug29585.php: SUCCEEDED
    @PHP/date/bug29595.php: SUCCEEDED
    @PHP/date/bug33056.php: SUCCEEDED
    @PHP/date/bug33452.php: SUCCEEDED
    @PHP/date/bug33562.php: SUCCEEDED
    @PHP/date/bug33563.php: SUCCEEDED
    @PHP/date/bug33578.php: SUCCEEDED
    @PHP/date/bug33869.php: SUCCEEDED
    @PHP/date/bug34676.php: SUCCEEDED
    @PHP/date/bug34771.php: SUCCEEDED
    @PHP/date/bug35143.php: SUCCEEDED
    @PHP/date/bug35414.php: SUCCEEDED
    @PHP/date/bug35422.php: SUCCEEDED
    @PHP/date/bug35425.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    integer(42)
    integer(1)
    integer(1)
    integer(1)
    integer(1)
    integer(0)
    integer(0)
    integer(1)
    integer(1)
    integer(31)
    integer(1104537661)
    integer(6)
    integer(53)
    integer(5)
    integer(2005)
    integer(0)
    integer(3600)
    integer(292)
    integer(1)
    integer(1)
    integer(1)
    integer(1)
    integer(0)
    integer(0)
    integer(1)
    integer(1)
    integer(31)
    integer(1104559261)
    integer(6)
    integer(53)
    integer(5)
    integer(2005)
    integer(0)
    integer(-18000)
    @PHP/date/bug35456.php: SUCCEEDED
    @PHP/date/bug35624.php: SUCCEEDED
    @PHP/date/bug35630.php: SUCCEEDED
    @PHP/date/bug35699.php: SUCCEEDED
    @PHP/date/bug35705.php: SUCCEEDED
    @PHP/date/bug35885.php: SUCCEEDED
    @PHP/date/bug35887.php: SUCCEEDED
    @PHP/date/date.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    c: 2003-01-23T13:20:59+01:00
    r: Thu, 23 Jan 2003 13:20:59 +0100
    c: 2003-01-23T13:20:59+01:00
    r: Thu, 23 Jan 2003 13:20:59 +0100
    c: 2003-01-23T12:20:59+00:00
    r: Thu, 23 Jan 2003 12:20:59 +0000
    c: 2003-01-23T13:20:59+01:00
    r: Thu, 23 Jan 2003 13:20:59 +0100
    @PHP/date/date_create-1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\date\__input.txt on line 28
    SKIP
    @PHP/date/date_create-2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\date\__input.txt on line 6
    SKIP
    @PHP/date/date_default_timezone_get-3.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Europe/Prague
    America/Chicago
    Europe/Rome
    America/Chicago
    @PHP/date/date_modify-1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\date\__input.txt on line 6
    SKIP
    @PHP/date/date_modify-2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\date\__input.txt on line 6
    SKIP
    @PHP/date/default-timezone-1.php: SUCCEEDED
    @PHP/date/default-timezone-2.php: SUCCEEDED
    @PHP/date/format-negative-timestamp.php: SUCCEEDED
    @PHP/date/strtotime.php: SUCCEEDED
    @PHP/date/timezone-configuration.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    1119125744
    1119125744
    1119125744
    1119125744
    1119129344
    1119125744
    @PHP/doc_examples/test001.php: SUCCEEDED
    @PHP/doc_examples/test002.php: SUCCEEDED
    @PHP/doc_examples/test003.php: SUCCEEDED
    @PHP/doc_examples/test004.php: SUCCEEDED
    @PHP/doc_examples/test005.php: SUCCEEDED
    @PHP/doc_examples/test006.php: SUCCEEDED
    @PHP/doc_examples/test007.php: SUCCEEDED
    @PHP/doc_examples/test008.php: SUCCEEDED
    @PHP/doc_examples/test009.php: SUCCEEDED
    @PHP/doc_examples/test010.php: SUCCEEDED
    @PHP/doc_examples/test011.php: SUCCEEDED
    @PHP/doc_examples/test013.php: SUCCEEDED
    @PHP/doc_examples/test014.php: SUCCEEDED
    @PHP/doc_examples/test015.php: SUCCEEDED
    @PHP/doc_examples/test016.php: SUCCEEDED
    @PHP/doc_examples/test017.php: SUCCEEDED
    @PHP/doc_examples/test018.php: SUCCEEDED
    @PHP/doc_examples/test019.php: SUCCEEDED
    @PHP/doc_examples/test020.php: SUCCEEDED
    @PHP/doc_examples/test021.php: SUCCEEDED
    @PHP/doc_examples/test022.php: SUCCEEDED
    @PHP/doc_examples/test023.php: SUCCEEDED
    @PHP/doc_examples/test024.php: SUCCEEDED
    @PHP/doc_examples/test025.php: SUCCEEDED
    @PHP/doc_examples/test026.php: SUCCEEDED
    @PHP/doc_examples/test027.php: SUCCEEDED
    @PHP/doc_examples/test028.php: SUCCEEDED
    @PHP/doc_examples/test029.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ´┐Żauky
    �auky
    @PHP/doc_examples/test030.php: SUCCEEDED
    @PHP/doc_examples/test031.php: SUCCEEDED
    @PHP/doc_examples/test032.php: SUCCEEDED
    @PHP/doc_examples/test033.php: SUCCEEDED
    @PHP/doc_examples/test034.php: SUCCEEDED
    @PHP/doc_examples/test035.php: SUCCEEDED
    @PHP/doc_examples/test036.php: SUCCEEDED
    @PHP/doc_examples/test037.php: SUCCEEDED
    @PHP/doc_examples/test038.php: SUCCEEDED
    @PHP/doc_examples/test039.php: SUCCEEDED
    @PHP/doc_examples/test040.php: SUCCEEDED
    @PHP/doc_examples/test041.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    call_user_func():
    hello world!
    Strict Standards: call_user_func(): Non-static method MyClass::myCallbackMethod() should not be called statically in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\doc_examples\__input.txt at expression on line 17, column 1.
    Hello World!Hello World!
    @PHP/doc_examples/test042.php: SUCCEEDED
    @PHP/doc_examples/test043.php: SUCCEEDED
    @PHP/doc_examples/test044.php: SUCCEEDED
    @PHP/doc_examples/test045.php: SUCCEEDED
    @PHP/doc_examples/test046.php: SUCCEEDED
    @PHP/doc_examples/test047.php: SUCCEEDED
    @PHP/doc_examples/test048.php: SUCCEEDED
    @PHP/doc_examples/test049.php: SUCCEEDED
    @PHP/doc_examples/test050.php: SUCCEEDED
    @PHP/doc_examples/test051.php: SUCCEEDED
    @PHP/doc_examples/test052.php: SUCCEEDED
    @PHP/doc_examples/test053.php: SUCCEEDED
    @PHP/doc_examples/test054.php: SUCCEEDED
    @PHP/doc_examples/test055.php: SUCCEEDED
    @PHP/doc_examples/test056.php: SUCCEEDED
    @PHP/doc_examples/test057.php: SUCCEEDED
    @PHP/doc_examples/test058.php: SUCCEEDED
    @PHP/doc_examples/test059.php: SUCCEEDED
    @PHP/doc_examples/test060.php: SUCCEEDED
    @PHP/doc_examples/test061.php: SUCCEEDED
    @PHP/doc_examples/test062.php: SUCCEEDED
    @PHP/doc_examples/test063.php: SUCCEEDED
    @PHP/doc_examples/test064.php: SUCCEEDED
    @PHP/doc_examples/test065.php: SUCCEEDED
    @PHP/doc_examples/test066.php: SUCCEEDED
    @PHP/doc_examples/test067.php: SUCCEEDED
    @PHP/doc_examples/test068.php: SUCCEEDED
    @PHP/doc_examples/test069.php: SUCCEEDED
    @PHP/doc_examples/test070.php: SUCCEEDED
    @PHP/doc_examples/test071.php: SUCCEEDED
    @PHP/doc_examples/test072.php: SUCCEEDED
    @PHP/doc_examples/test073.php: SUCCEEDED
    @PHP/doc_examples/test074.php: SUCCEEDED
    @PHP/doc_examples/test075.php: SUCCEEDED
    @PHP/doc_examples/test076.php: SUCCEEDED
    @PHP/doc_examples/test077.php: SUCCEEDED
    @PHP/doc_examples/test078.php: SUCCEEDED
    @PHP/doc_examples/test079.php: SUCCEEDED
    @PHP/doc_examples/test080.php: SUCCEEDED
    @PHP/doc_examples/test081.php: SUCCEEDED
    @PHP/doc_examples/test082.php: SUCCEEDED
    @PHP/doc_examples/test083.php: SUCCEEDED
    @PHP/doc_examples/test084.php: SUCCEEDED
    @PHP/doc_examples/test085.php: SUCCEEDED
    @PHP/doc_examples/test086.php: SUCCEEDED
    @PHP/doc_examples/test087.php: SUCCEEDED
    @PHP/doc_examples/test088.php: SUCCEEDED
    @PHP/doc_examples/test089.php: SUCCEEDED
    @PHP/doc_examples/test090.php: SUCCEEDED
    @PHP/doc_examples/test091.php: SUCCEEDED
    @PHP/doc_examples/test092.php: SUCCEEDED
    @PHP/doc_examples/test093.php: SUCCEEDED
    @PHP/doc_examples/test094.php: SUCCEEDED
    @PHP/doc_examples/test095.php: SUCCEEDED
    @PHP/doc_examples/test096.php: SUCCEEDED
    @PHP/doc_examples/test097.php: SUCCEEDED
    @PHP/doc_examples/test098.php: SUCCEEDED
    @PHP/doc_examples/test099.php: SUCCEEDED
    @PHP/doc_examples/test100.php: SUCCEEDED
    @PHP/doc_examples/test102.php: SUCCEEDED
    @PHP/doc_examples/test103.php: SUCCEEDED
    @PHP/doc_examples/test104.php: SUCCEEDED
    @PHP/doc_examples/test105.php: SUCCEEDED
    @PHP/doc_examples/test107.php: SUCCEEDED
    @PHP/doc_examples/test108.php: SUCCEEDED
    @PHP/doc_examples/test109.php: SUCCEEDED
    @PHP/doc_examples/test110.php: SUCCEEDED
    @PHP/doc_examples/test111.php: SUCCEEDED
    @PHP/doc_examples/test112.php: SUCCEEDED
    @PHP/doc_examples/test113.php: SUCCEEDED
    @PHP/doc_examples/test114.php: SUCCEEDED
    @PHP/doc_examples/test115.php: SUCCEEDED
    @PHP/doc_examples/test116.php: SUCCEEDED
    @PHP/doc_examples/test117.php: SUCCEEDED
    @PHP/doc_examples/test118.php: SUCCEEDED
    @PHP/doc_examples/test119.php: SUCCEEDED
    @PHP/doc_examples/test120.php: SUCCEEDED
    @PHP/doc_examples/test121.php: SUCCEEDED
    @PHP/doc_examples/test122.php: SUCCEEDED
    @PHP/doc_examples/test123.php: SUCCEEDED
    @PHP/doc_examples/test124.php: SUCCEEDED
    @PHP/doc_examples/test125.php: SUCCEEDED
    @PHP/doc_examples/test126.php: SUCCEEDED
    @PHP/doc_examples/test127.php: SUCCEEDED
    @PHP/doc_examples/test128.php: SUCCEEDED
    @PHP/doc_examples/test129.php: SUCCEEDED
    @PHP/doc_examples/test130.php: SUCCEEDED
    @PHP/doc_examples/test131.php: SUCCEEDED
    @PHP/doc_examples/test132.php: SUCCEEDED
    @PHP/doc_examples/test133.php: SUCCEEDED
    @PHP/doc_examples/test134.php: SUCCEEDED
    @PHP/doc_examples/test136.php: SUCCEEDED
    @PHP/doc_examples/test137.php: SUCCEEDED
    @PHP/doc_examples/test138.php: SUCCEEDED
    @PHP/doc_examples/test139.php: SUCCEEDED
    @PHP/doc_examples/test148.php: SUCCEEDED
    @PHP/doc_examples/test149.php: SUCCEEDED
    @PHP/doc_examples/test150.php: SUCCEEDED
    @PHP/doc_examples/test151.php: SUCCEEDED
    @PHP/doc_examples/test152.php: SUCCEEDED
    @PHP/doc_examples/test153.php: SUCCEEDED
    @PHP/doc_examples/test154.php: SUCCEEDED
    @PHP/doc_examples/test155.php: SUCCEEDED
    @PHP/doc_examples/test156.php: SUCCEEDED
    @PHP/doc_examples/test158.php: SUCCEEDED
    @PHP/lang/001.php: SUCCEEDED
    @PHP/lang/002.php: SUCCEEDED
    @PHP/lang/003.php: SUCCEEDED
    @PHP/lang/004.php: SUCCEEDED
    @PHP/lang/005.php: SUCCEEDED
    @PHP/lang/006.php: SUCCEEDED
    @PHP/lang/007.php: SUCCEEDED
    @PHP/lang/008.php: SUCCEEDED
    @PHP/lang/009.php: SUCCEEDED
    @PHP/lang/010.php: SUCCEEDED
    @PHP/lang/011.php: SUCCEEDED
    @PHP/lang/012.php: SUCCEEDED
    @PHP/lang/013.php: SUCCEEDED
    @PHP/lang/014.php: SUCCEEDED
    @PHP/lang/015.php: SUCCEEDED
    @PHP/lang/016.php: SUCCEEDED
    @PHP/lang/017.php: SUCCEEDED
    @PHP/lang/018.php: SUCCEEDED
    @PHP/lang/019.php: SUCCEEDED
    @PHP/lang/020.php: SUCCEEDED
    @PHP/lang/021.php: SUCCEEDED
    @PHP/lang/022.php: SUCCEEDED
    @PHP/lang/023.php: SUCCEEDED
    @PHP/lang/024.php: SUCCEEDED
    @PHP/lang/025.php: SUCCEEDED
    @PHP/lang/026.php: SUCCEEDED
    @PHP/lang/027.php: SUCCEEDED
    @PHP/lang/028.php: SUCCEEDED
    @PHP/lang/030.php: SUCCEEDED
    @PHP/lang/032.php: SUCCEEDED
    @PHP/lang/036.php: SUCCEEDED
    @PHP/lang/037.php: SUCCEEDED
    @PHP/lang/038.php: SUCCEEDED
    @PHP/lang/039.php: SUCCEEDED
    @PHP/lang/040.php: SUCCEEDED
    @PHP/lang/bison1.php: SUCCEEDED
    @PHP/lang/bug17115.php: SUCCEEDED
    @PHP/lang/bug18872.php: SUCCEEDED
    @PHP/lang/bug19943.php: SUCCEEDED
    @PHP/lang/bug20175.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    Deprecated: Assigning the return value of new by reference is deprecated in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\lang\__input.txt on line 110
    foo_static()
    foo_global()
    foo:1
    foo_static()
    foo:1
    bar_static()
    bar_global()
    bar:1
    bar_static()
    bar:1
    wow_static()
    wow_global()
    wow:1
    wow_static()
    wow:1
    oop_test()
    oop_static()
    oop_class()
    oop:1
    oop_static()
    oop:1
    oop_test()
    oop_static()
    oop:1
    foo_static()
    foo_global()
    foo:1
    foo_static()
    foo:1
    bar_static()
    bar_global()
    bar:1
    bar_static()
    bar_global()
    bar:2
    wow_static()
    wow_global()
    wow:1
    wow_static()
    wow:1
    oop_test()
    oop_static()
    oop_class()
    oop:1
    oop_static()
    oop:1
    oop_test()
    oop_static()
    oop:1
    D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\lang\__input.txt(110,4): warning PHP0181: Assigning the return value of new by reference is deprecated
    
    @PHP/lang/bug21094.php: SUCCEEDED
    @PHP/lang/bug21600.php: SUCCEEDED
    @PHP/lang/bug21669.php: SUCCEEDED
    @PHP/lang/bug21849.php: SUCCEEDED
    @PHP/lang/bug21961.php: SUCCEEDED
    @PHP/lang/bug22231.php: SUCCEEDED
    @PHP/lang/bug22367.php: SUCCEEDED
    @PHP/lang/bug22510.php: SUCCEEDED
    @PHP/lang/bug22592.php: SUCCEEDED
    @PHP/lang/bug22690.php: SUCCEEDED
    @PHP/lang/bug23279.php: SUCCEEDED
    @PHP/lang/bug23384.php: FAILED
    Script hung upNo errorsSuccess
    Expected test outputReal script output
    Unhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---> System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> PHP.Core.Debug+AssertException: Assertion failed: Add      public static readonly object HUN = (int)100; instead of AddConstant usage.
       at PHP.Core.Debug.Fail(String message)
       at PHP.Core.Reflection.PhpTypeDesc.AddConstant(String name, Object value)
       at <__input.txt>.Foo.__PopulateTypeDesc(PhpTypeDesc )
       --- End of inner exception stack trace ---
       at System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
       at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)
       at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
       at System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters)
       at PHP.Core.Reflection.PhpTypeDesc.AutoPopulate()
       at PHP.Core.Reflection.PhpTypeDesc.ReflectMethods()
       at PHP.Core.Reflection.DTypeDesc.get_Methods()
       at PHP.Core.Reflection.DTypeDesc.GetMember[N,T](GetMemberDictionary`2 dictionary, N name, DTypeDesc context, LookupFlags flags, T& member)
       at PHP.Core.Reflection.DTypeDesc.GetMethod(Name methodName, DTypeDesc context, DRoutineDesc& method)
       at PHP.Core.Operators.GetStaticMethodDesc(DTypeDesc requestedType, String methodName, DObject& self, DTypeDesc caller, ScriptContext context, Boolean quiet, Boolean removeFrame)
       at PHP.Core.Operators.InvokeStaticMethod(DTypeDesc type, Object methodName, DObject self, DTypeDesc caller, ScriptContext context)
       at <__input.txt>.<Script>.<Main>(ScriptContext <context>, Dictionary`2 <locals>, DObject , DTypeDesc , Boolean ) in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\lang\__input.txt:line 16
       at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)
       at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)
       --- End of inner exception stack trace ---
       at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)
       at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)
       at <Global>.Run(String[] )
    
    @PHP/lang/bug23489.php: SUCCEEDED
    @PHP/lang/bug23524.php: SUCCEEDED
    @PHP/lang/bug23922.php: SUCCEEDED
    @PHP/lang/bug24054.php: SUCCEEDED
    @PHP/lang/bug24396.php: SUCCEEDED
    @PHP/lang/bug24403.php: SUCCEEDED
    @PHP/lang/bug24436.php: SUCCEEDED
    @PHP/lang/bug24499.php: SUCCEEDED
    @PHP/lang/bug24640.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    double(1700000000000000089258092433847514422797596587883870563356951996370064178581143932836831337636761368874297554515902592900802289500112731978596146714137401870842258241575178866354311397451139753100927220499450359906637902366244989496126909662726242240784739940994096632824796638102733857671280980918272.0000000000)
    1.7E+300
    
    ------
    double(0.0000000000)
    1.7E-300
    
    ------
    double(17000000000000001584208052028780237480128823455860622330108867175329927830437888.0000000000)
    1.7E+79
    
    ------
    double(0.0000000000)
    1.7E-79
    
    ------
    double(169999999999999996096025832433329868941658043870400163508258284150340918121070592.0000000000)
    1.7E+80
    
    ------
    double(0.0000000000)
    1.7E-80
    
    ------
    double(1700000000000000013616404158611892038375594280539217794530130541777964808366194688.0000000000)
    1.7E+81
    
    ------
    double(0.0000000000)
    1.7E-81
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    1.6999810742106E-319
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    1.7000798873397E-320
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    1.6995858216939E-321
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    0
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    0
    
    ------
    double(1700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+300
    
    ------
    double(0.0000000000)
    1.70000000000003E-300
    
    ------
    double(17000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+79
    
    ------
    double(0.0000000000)
    1.70000000000001E-79
    
    ------
    double(170000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+80
    
    ------
    double(0.0000000000)
    1.70000000000001E-80
    
    ------
    double(1700000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+81
    
    ------
    double(0.0000000000)
    1.70000000000001E-81
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    1.69998107421056E-319
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    1.70007988733973E-320
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    1.69464516523548E-321
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    0
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    0
    
    ------
    @PHP/lang/bug24652.php: SUCCEEDED
    @PHP/lang/bug24658.php: SUCCEEDED
    @PHP/lang/bug24783.php: SUCCEEDED
    @PHP/lang/bug24926.php: SUCCEEDED
    @PHP/lang/bug25547.php: SUCCEEDED
    @PHP/lang/bug25652.php: SUCCEEDED
    @PHP/lang/bug25922.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Undefined index here: 'error'
    Undefined index here: ''
    @PHP/lang/bug26182.php: SUCCEEDED
    @PHP/lang/bug26696.php: SUCCEEDED
    @PHP/lang/bug26866.php: SUCCEEDED
    @PHP/lang/bug26869.php: SUCCEEDED
    @PHP/lang/bug27354.php: SUCCEEDED
    @PHP/lang/bug27439.php: SUCCEEDED
    @PHP/lang/bug27535.php: SUCCEEDED
    @PHP/lang/bug28213.php: SUCCEEDED
    @PHP/lang/bug28800.php: SUCCEEDED
    @PHP/lang/bug29566.php: SUCCEEDED
    @PHP/lang/bug29893.php: SUCCEEDED
    @PHP/lang/bug29944.php: SUCCEEDED
    @PHP/lang/bug30638.php: SUCCEEDED
    @PHP/lang/bug30726.php: SUCCEEDED
    @PHP/lang/bug30862.php: SUCCEEDED
    @PHP/lang/bug32924.php: SUCCEEDED
    @PHP/lang/bug35382.php: SUCCEEDED
    @PHP/lang/bug7515.php: SUCCEEDED
    @PHP/lang/each_binary_safety.php: SUCCEEDED
    @PHP/lang/error_2_exception_001.php: SUCCEEDED
    @PHP/lang/foreach_with_object_001.php: SUCCEEDED
    @PHP/lang/foreach_with_references_001.php: SUCCEEDED
    @PHP/lang/type_hints_001.php: SUCCEEDED
    @PHP/standard/array/001.php: SUCCEEDED
    @PHP/standard/array/003.php: SUCCEEDED
    @PHP/standard/array/004.php: SUCCEEDED
    @PHP/standard/array/005.php: SUCCEEDED
    @PHP/standard/array/008.php: SUCCEEDED
    @PHP/standard/array/array_change_key_case.php: SUCCEEDED
    @PHP/standard/array/array_chunk.php: SUCCEEDED
    @PHP/standard/array/array_count_values.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array(0) {
    }
    
    array(1) {
      [0]=>
      int(1)
    }
    
    array(1) {
      [1]=>
      int(1)
    }
    
    array(1) {
      [-1]=>
      int(1)
    }
    
    array(1) {
      [0]=>
      int(2)
    }
    
    array(2) {
      [0]=>
      int(1)
      [1]=>
      int(1)
    }
    
    array(1) {
      [1]=>
      int(2)
    }
    
    array(3) {
      [1]=>
      int(2)
      ["hello"]=>
      int(2)
      ["world"]=>
      int(1)
    }
    
    array(2) {
      ["hello"]=>
      int(2)
      ["world"]=>
      int(1)
    }
    
    array(3) {
      [""]=>
      int(2)
      ["world"]=>
      int(3)
      ["hello"]=>
      int(4)
    }
    
    array(1) {
      [0]=>
      int(1)
    }
    
    array(1) {
      [1]=>
      int(1)
    }
    array(0) [empty]
    
    array(1)
    {
      [0] => integer(1)
    }
    
    array(1)
    {
      [1] => integer(1)
    }
    
    array(1)
    {
      [-1] => integer(1)
    }
    
    array(1)
    {
      [0] => integer(2)
    }
    
    array(2)
    {
      [0] => integer(1)
      [1] => integer(1)
    }
    
    array(1)
    {
      [1] => integer(2)
    }
    
    array(3)
    {
      [1] => integer(2)
      ['hello'] => integer(2)
      ['world'] => integer(1)
    }
    
    array(2)
    {
      ['hello'] => integer(2)
      ['world'] => integer(1)
    }
    
    array(3)
    {
      [''] => integer(2)
      ['world'] => integer(3)
      ['hello'] => integer(4)
    }
    
    array(1)
    {
      [0] => integer(1)
    }
    
    array(1)
    {
      [1] => integer(1)
    }
    @PHP/standard/array/array_diff_1.php: SUCCEEDED
    @PHP/standard/array/array_diff_key.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ------ Test 1 --------
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 2 --------
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 3 --------
    array(6) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [2]=>
      int(4)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [2]=>
      int(4)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 4 --------
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 5 --------
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 6 --------
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 7 --------
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    ------ Test 8 --------
    array(6) {
      [0]=>
      int(0)
      [7]=>
      int(14)
      [2]=>
      int(4)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [0]=>
      int(0)
      [7]=>
      int(14)
      [2]=>
      int(4)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 9 --------
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    ------ Test 1 --------
    array(4)
    {
      [1] => &integer(2)
      [6] => &integer(12)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    array(4)
    {
      [1] => &integer(2)
      [6] => &integer(12)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    ------ Test 2 --------
    array(3)
    {
      [1] => &integer(2)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    array(3)
    {
      [1] => &integer(2)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    ------ Test 3 --------
    array(6)
    {
      [1] => &integer(2)
      [6] => &integer(12)
      [2] => &integer(4)
      [15] => &integer(30)
      [1200] => &integer(2400)
      [-2500] => &integer(-5000)
    }
    array(6)
    {
      [1] => &integer(2)
      [6] => &integer(12)
      [2] => &integer(4)
      [15] => &integer(30)
      [1200] => &integer(2400)
      [-2500] => &integer(-5000)
    }
    ------ Test 4 --------
    array(3)
    {
      [1] => &integer(2)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    array(3)
    {
      [1] => &integer(2)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    ------ Test 5 --------
    array(4)
    {
      [1] => &integer(2)
      [6] => &integer(12)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    array(4)
    {
      [1] => &integer(2)
      [6] => &integer(12)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    ------ Test 6 --------
    array(3)
    {
      [1] => &integer(2)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    array(3)
    {
      [1] => &integer(2)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    ------ Test 7 --------
    array(3)
    {
      [7] => &integer(14)
      [11] => &integer(22)
      [1100] => &integer(2200)
    }
    array(3)
    {
      [7] => &integer(14)
      [11] => &integer(22)
      [1100] => &integer(2200)
    }
    ------ Test 8 --------
    array(6)
    {
      [0] => &integer(0)
      [7] => &integer(14)
      [2] => &integer(4)
      [11] => &integer(22)
      [1100] => &integer(2200)
      [-2500] => &integer(-5000)
    }
    array(6)
    {
      [0] => &integer(0)
      [7] => &integer(14)
      [2] => &integer(4)
      [11] => &integer(22)
      [1100] => &integer(2200)
      [-2500] => &integer(-5000)
    }
    ------ Test 9 --------
    array(3)
    {
      [7] => &integer(14)
      [11] => &integer(22)
      [1100] => &integer(2200)
    }
    array(3)
    {
      [7] => &integer(14)
      [11] => &integer(22)
      [1100] => &integer(2200)
    }
    @PHP/standard/array/array_intersect_key.php: SUCCEEDED
    @PHP/standard/array/array_sum.php: SUCCEEDED
    @PHP/standard/array/array_walk_recursive.php: SUCCEEDED
    @PHP/standard/array/bug12776.php: SUCCEEDED
    @PHP/standard/array/bug14580.php: SUCCEEDED
    @PHP/standard/array/bug20381.php: SUCCEEDED
    @PHP/standard/array/bug20865.php: SUCCEEDED
    @PHP/standard/array/bug21182.php: SUCCEEDED
    @PHP/standard/array/bug21918.php: SUCCEEDED
    @PHP/standard/array/bug21998.php: SUCCEEDED
    @PHP/standard/array/bug22088.php: SUCCEEDED
    @PHP/standard/array/bug22463.php: SUCCEEDED
    @PHP/standard/array/bug23581.php: SUCCEEDED
    @PHP/standard/array/bug23788.php: SUCCEEDED
    @PHP/standard/array/bug24198.php: SUCCEEDED
    @PHP/standard/array/bug24220.php: SUCCEEDED
    @PHP/standard/array/bug24766.php: SUCCEEDED
    @PHP/standard/array/bug24897.php: SUCCEEDED
    @PHP/standard/array/bug24980.php: SUCCEEDED
    @PHP/standard/array/bug25359.php: SUCCEEDED
    @PHP/standard/array/bug25708.php: SUCCEEDED
    @PHP/standard/array/bug25758.php: SUCCEEDED
    @PHP/standard/array/bug26458.php: SUCCEEDED
    @PHP/standard/array/bug28974.php: SUCCEEDED
    @PHP/standard/array/bug29493.php: SUCCEEDED
    @PHP/standard/array/bug30266.php: SUCCEEDED
    @PHP/standard/array/bug30833.php: SUCCEEDED
    @PHP/standard/array/bug31158.php: SUCCEEDED
    @PHP/standard/array/bug31213.php: SUCCEEDED
    @PHP/standard/array/bug32021.php: SUCCEEDED
    @PHP/standard/array/bug33382.php: SUCCEEDED
    @PHP/standard/array/bug33989.php: SUCCEEDED
    @PHP/standard/array/bug34227.php: SUCCEEDED
    @PHP/standard/array/bug34982.php: SUCCEEDED
    @PHP/standard/array/bug35014.php: SUCCEEDED
    @PHP/standard/array/bug35022.php: SUCCEEDED
    @PHP/standard/array/bug35821.php: SUCCEEDED
    @PHP/standard/array/count_recursive.php: SUCCEEDED
    @PHP/standard/array/locale_sort.php: SUCCEEDED
    @PHP/standard/array/range.php: SUCCEEDED
    @PHP/standard/assert/assert.php: SUCCEEDED
    @PHP/standard/general_functions/001.php: SUCCEEDED
    @PHP/standard/general_functions/002.php: SUCCEEDED
    @PHP/standard/general_functions/003.php: SUCCEEDED
    @PHP/standard/general_functions/004.php: SUCCEEDED
    @PHP/standard/general_functions/005.php: SUCCEEDED
    @PHP/standard/general_functions/006.php: SUCCEEDED
    @PHP/standard/general_functions/007.php: SUCCEEDED
    @PHP/standard/general_functions/009.php: SUCCEEDED
    @PHP/standard/general_functions/bug25038.php: SUCCEEDED
    @PHP/standard/general_functions/bug27678.php: SUCCEEDED
    @PHP/standard/general_functions/bug29038.php: SUCCEEDED
    @PHP/standard/general_functions/bug31190.php: SUCCEEDED
    @PHP/standard/general_functions/bug32647.php: SUCCEEDED
    @PHP/standard/general_functions/bug35229.php: SUCCEEDED
    @PHP/standard/general_functions/is_resource.php: SUCCEEDED
    @PHP/standard/math/abs.php: SUCCEEDED
    @PHP/standard/math/bug24142.php: SUCCEEDED
    @PHP/standard/math/bug25694.php: SUCCEEDED
    @PHP/standard/math/bug27646.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    double(INF-INF)
    'd:-INF;'
    double(INF-INF)
    double(INF-INF)
    'd:INF;'
    double(INF-INF)
    double(NaNInfini)
    'd:NAN;'
    double(NaNInfini)
    double(-Infinity)
    'd:-INF;'
    double(-Infinity)
    double(Infinity)
    'd:INF;'
    double(Infinity)
    double(NaN)
    'd:NAN;'
    double(NaN)
    @PHP/standard/math/bug30069.php: SUCCEEDED
    @PHP/standard/math/bug30695.php: SUCCEEDED
    @PHP/standard/math/floorceil.php: SUCCEEDED
    @PHP/standard/math/hexdec.php: SUCCEEDED
    @PHP/standard/math/log.php: SUCCEEDED
    @PHP/standard/math/pow.php: SUCCEEDED
    @PHP/standard/math/round.php: SUCCEEDED
    @PHP/standard/reg/001.php: SUCCEEDED
    @PHP/standard/reg/002.php: SUCCEEDED
    @PHP/standard/reg/003.php: SUCCEEDED
    @PHP/standard/reg/004.php: SUCCEEDED
    @PHP/standard/reg/005.php: SUCCEEDED
    @PHP/standard/reg/006.php: SUCCEEDED
    @PHP/standard/reg/007.php: SUCCEEDED
    @PHP/standard/reg/008.php: SUCCEEDED
    @PHP/standard/reg/009.php: SUCCEEDED
    @PHP/standard/reg/010.php: SUCCEEDED
    @PHP/standard/reg/011.php: SUCCEEDED
    @PHP/standard/reg/012.php: SUCCEEDED
    @PHP/standard/reg/013.php: SUCCEEDED
    @PHP/standard/reg/014.php: SUCCEEDED
    @PHP/standard/reg/015.php: SUCCEEDED
    @PHP/standard/reg/016.php: SUCCEEDED
    @PHP/standard/serialize/001.php: SUCCEEDED
    @PHP/standard/serialize/002.php: SUCCEEDED
    @PHP/standard/serialize/003.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    d:100;
    double(100.0000000000)
    
    d:51999999999999996980101120;
    double(51999999999999996980101120.0000000000)
    
    d:8.9999999999999995265585574287341141808127531476202420890331268310546875E-9;
    double(0.0000000090)
    d:100;
    double(100.0000000000)
    
    d:5.2000000000000006E+25;
    double(52000000000000000000000000.0000000000)
    
    d:9.0000000000000045E-09;
    double(0.0000000090)
    @PHP/standard/serialize/004.php: SUCCEEDED
    @PHP/standard/serialize/005.php: SUCCEEDED
    @PHP/standard/serialize/006.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    'O:3:"´┐Ż":1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    object
    {
      '´┐Ż' => '´┐Ż'
    }
    'a:1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    array
    {
      '´┐Ż' => '´┐Ż'
    }
    'O:3:"´┐Ż":1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    object
    {
      'ďż˝' => 'ďż˝'
    }
    'a:1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    array
    {
      'ďż˝' => 'ďż˝'
    }
    @PHP/standard/serialize/bug14293.php: SUCCEEDED
    @PHP/standard/serialize/bug21957.php: SUCCEEDED
    @PHP/standard/serialize/bug23298.php: SUCCEEDED
    @PHP/standard/serialize/bug24063.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0.1 0.1
    0.01 0.01
    0.001 0.001
    0.0001 0.0001
    1.0E-5 1.0E-5
    1.0E-6 1.0E-6
    1.0E-7 1.0E-7
    1.0E-8 1.0E-8
    1.0E-9 1.0E-9
    0.1 0.1
    0.01 0.01
    0.001 0.001
    0.0001 0.0001
    1E-05 1E-05
    1E-06 1E-06
    1E-07 1E-07
    1E-08 1E-08
    1E-09 1E-09
    @PHP/standard/serialize/bug25378.php: SUCCEEDED
    @PHP/standard/serialize/bug26762.php: SUCCEEDED
    @PHP/standard/serialize/bug27469.php: SUCCEEDED
    @PHP/standard/serialize/bug28325.php: SUCCEEDED
    @PHP/standard/serialize/bug30234.php: SUCCEEDED
    @PHP/standard/serialize/bug31402.php: SUCCEEDED
    @PHP/standard/serialize/bug31442.php: SUCCEEDED
    @PHP/standard/strings/add-and-stripcslashes.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    kaboemkara!
    foo\b\a\r\b\az
    \f\o\o\[ \]
    \zoo['\.']
    \abcd\e\f\g\h\i\j\k\l\m\n\o\pqrstuvwxy\z
    1
    5d
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\standard\strings\__input.txt at expression on line 3, column 1.
    
    kaboemkara!
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\standard\strings\__input.txt at expression on line 5, column 1.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\standard\strings\__input.txt at expression on line 6, column 1.
    
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\standard\strings\__input.txt at expression on line 8, column 1.
    
    1
    5d
    @PHP/standard/strings/add-and-stripslashes.php: SUCCEEDED
    @PHP/standard/strings/basename.php: SUCCEEDED
    @PHP/standard/strings/bin2hex.php: SUCCEEDED
    @PHP/standard/strings/bug20108.php: SUCCEEDED
    @PHP/standard/strings/bug20169.php: SUCCEEDED
    @PHP/standard/strings/bug20261.php: SUCCEEDED
    @PHP/standard/strings/bug20927.php: SUCCEEDED
    @PHP/standard/strings/bug21338.php: SUCCEEDED
    @PHP/standard/strings/bug21453.php: SUCCEEDED
    @PHP/standard/strings/bug21730.php: SUCCEEDED
    @PHP/standard/strings/bug21744.php: SUCCEEDED
    @PHP/standard/strings/bug22008.php: SUCCEEDED
    @PHP/standard/strings/bug22187.php: SUCCEEDED
    @PHP/standard/strings/bug22224.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      0 => 
      object
      {
      }
      1 => 
      object
      {
      }
    }
    @PHP/standard/strings/bug22227.php: SUCCEEDED
    @PHP/standard/strings/bug22904.php: SUCCEEDED
    @PHP/standard/strings/bug23650.php: SUCCEEDED
    @PHP/standard/strings/bug23894.php: SUCCEEDED
    @PHP/standard/strings/bug24098.php: SUCCEEDED
    @PHP/standard/strings/bug24208.php: SUCCEEDED
    @PHP/standard/strings/bug24281.php: SUCCEEDED
    @PHP/standard/strings/bug25671.php: SUCCEEDED
    @PHP/standard/strings/bug25707.php: SUCCEEDED
    @PHP/standard/strings/bug26878.php: SUCCEEDED
    @PHP/standard/strings/bug26973.php: SUCCEEDED
    @PHP/standard/strings/bug27276.php: SUCCEEDED
    @PHP/standard/strings/bug27278.php: SUCCEEDED
    @PHP/standard/strings/bug27295.php: SUCCEEDED
    @PHP/standard/strings/bug27457.php: SUCCEEDED
    @PHP/standard/strings/bug27675.php: SUCCEEDED
    @PHP/standard/strings/bug28386.php: SUCCEEDED
    @PHP/standard/strings/bug33076.php: SUCCEEDED
    @PHP/standard/strings/chr_ord.php: SUCCEEDED
    @PHP/standard/strings/chunk_split.php: SUCCEEDED
    @PHP/standard/strings/count_chars.php: SUCCEEDED
    @PHP/standard/strings/crc32.php: SUCCEEDED
    @PHP/standard/strings/explode.php: SUCCEEDED
    @PHP/standard/strings/implode.php: SUCCEEDED
    @PHP/standard/strings/md5.php: SUCCEEDED
    @PHP/standard/strings/md5raw.php: SUCCEEDED
    @PHP/standard/strings/nl2br.php: SUCCEEDED
    @PHP/standard/strings/sha1.php: SUCCEEDED
    @PHP/standard/strings/sha1raw.php: SUCCEEDED
    @PHP/standard/strings/sprintf_f.php: SUCCEEDED
    @PHP/standard/strings/strcspn.php: SUCCEEDED
    @PHP/standard/strings/strings001.php: SUCCEEDED
    @PHP/standard/strings/strpos.php: SUCCEEDED
    @PHP/standard/strings/strrev.php: SUCCEEDED
    @PHP/standard/strings/strripos.php: SUCCEEDED
    @PHP/standard/strings/strrpos.php: SUCCEEDED
    @PHP/standard/strings/strspn.php: SUCCEEDED
    @PHP/standard/strings/strstr.php: SUCCEEDED
    @PHP/standard/strings/strtoupper.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    cfbfbdcfbfbdcfbfbd
    cfafbdcfafbdcfafbd
    @PHP/standard/strings/strtr.php: SUCCEEDED
    @PHP/standard/strings/strval.php: SUCCEEDED
    @PHP/standard/strings/str_repeat.php: SUCCEEDED
    @PHP/standard/strings/str_shuffle.php: SUCCEEDED
    @PHP/standard/strings/str_word_count.php: SUCCEEDED
    @PHP/standard/strings/substr_count.php: SUCCEEDED
    @PHP/standard/strings/substr_replace.php: SUCCEEDED
    @PHP/standard/strings/wordwrap.php: SUCCEEDED
    @PHP/standard/time/001.php: SUCCEEDED
    @PHP/standard/time/idate.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    U: 1043324459
    Y: 2003
    z: 22
    y: 3
    m: 1
    n: 1
    d: 23
    j: 23
    H: 13
    G: 13
    h: 1
    g: 1
    i: 20
    s: 59
    t: 31
    w: 4
    L: 0
    B: 556
    I: 0
    W: 4
    U: 1043324459
    Y: 2003
    z: 22
    y: 3
    m: 1
    n: 1
    d: 23
    j: 23
    H: 12
    G: 12
    h: 12
    g: 12
    i: 20
    s: 59
    t: 31
    w: 4
    L: 0
    B: 556
    I: 0
    W: 4
    @PHP/strings/001.php: SUCCEEDED
    @PHP/strings/002.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    fprintf test 1:abcde
    20
    printf test 1:simple string
    printf test 2:42
    printf test 3:3.333333
    printf test 4:3.3333333333
    printf test 5:2.50      
    printf test 6:2.50000000
    printf test 7:0000002.50
    printf test 8:<                 foo>
    printf test 9:<bar                 >
    printf test 10: 123456789012345
    printf test 10:<h´┐Żyesterettsjustitiarius>
    printf test 11: 123456789012345678901234567890
    printf test 11:<    h´┐Żyesterettsjustitiarius>
    printf test 12:-12.34
    printf test 13:  -12
    printf test 14:@
    printf test 15:10101010
    printf test 16:aa
    printf test 17:AA
    printf test 18:        10101010
    printf test 19:              aa
    printf test 20:              AA
    printf test 21:0000000010101010
    printf test 22:00000000000000aa
    printf test 23:00000000000000AA
    printf test 24:abcde
    printf test 25:gazonk
    printf test 26:2 1
    printf test 27:3 1 2
    printf test 28:02  1
    printf test 29:2   1
    printf test 30:x
    vprintf test 1:2   1
    fprintf test 1:abcde
    20
    printf test 1:simple string
    printf test 2:42
    printf test 3:3.333333
    printf test 4:3.3333333333
    printf test 5:2.50      
    printf test 6:2.50000000
    printf test 7:0000002.50
    printf test 8:<                 foo>
    printf test 9:<bar                 >
    printf test 10: 123456789012345
    printf test 10:<h�yesterettsjustitiarius>
    printf test 11: 123456789012345678901234567890
    printf test 11:<    h�yesterettsjustitiarius>
    printf test 12:-12.34
    printf test 13:  -12
    printf test 14:@
    printf test 15:10101010
    printf test 16:aa
    printf test 17:AA
    printf test 18:        10101010
    printf test 19:              aa
    printf test 20:              AA
    printf test 21:0000000010101010
    printf test 22:00000000000000aa
    printf test 23:00000000000000AA
    printf test 24:abcde
    printf test 25:gazonk
    printf test 26:2 1
    printf test 27:3 1 2
    printf test 28:02  1
    printf test 29:2   1
    printf test 30:x
    vprintf test 1:2   1
    @PHP/strings/bug22592.php: SUCCEEDED
    Arrays/array1.php: SUCCEEDED
    Arrays/array_diff_intersect.php: SUCCEEDED
    Arrays/array_diff_intersect2.php: SUCCEEDED
    Arrays/array_diff_intersect3.php: SUCCEEDED
    Arrays/array_map.php: SUCCEEDED
    Arrays/array_merge_recursive.php: SUCCEEDED
    Arrays/array_reduce1.php: SUCCEEDED
    Arrays/array_reduce2.php: SUCCEEDED
    Arrays/array_slice.php: SUCCEEDED
    Arrays/array_sumprod.php: SUCCEEDED
    Arrays/array_unshift.php: SUCCEEDED
    Arrays/array_walk.php: SUCCEEDED
    Arrays/array_walk_recursive.php: SUCCEEDED
    Arrays/multisort.php: SUCCEEDED
    Arrays/optimizations.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    3
    4
    5
    a
    b
    c
    
    Warning: strtolower() expects parameter 1 to be string, array given in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Arrays\__input.txt on line 15
    
    cablo
    3
    4
    5
    a
    b
    c
    array
    cablo
    Arrays/recursion.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    f1:
    array(2) {
      ["a"]=>
      array(5) {
        ["a"]=>
        &array(3) {
          ["a"]=>
          &array(3) {
            ["a"]=>
            *RECURSION*
            [0]=>
            string(1) "y"
            [1]=>
            string(1) "z"
          }
          [0]=>
          string(1) "y"
          [1]=>
          string(1) "z"
        }
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        string(1) "x"
      }
      [0]=>
      string(1) "w"
    }
    f2:
    array(1) {
      ["A"]=>
      &array(2) {
        ["a"]=>
        &array(2) {
          ["a"]=>
          *RECURSION*
          [0]=>
          string(1) "z"
        }
        [0]=>
        string(1) "z"
      }
    }
    f3:
    array(2) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) {
          [0]=>
          *RECURSION*
          [1]=>
          string(1) "z"
        }
        [1]=>
        string(1) "z"
      }
      [1]=>
      string(1) "z"
    }
    f4:
    
    Warning: array_merge_recursive(): recursion detected in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Arrays\__input.txt on line 37
    array(1) {
      ["a"]=>
      &array(3) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
      }
    }
    f5:
    array(1) {
      ["a"]=>
      array(6) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        int(1)
        [4]=>
        int(2)
        [5]=>
        int(3)
      }
    }
    f6:
    array(1) {
      ["a"]=>
      array(2) {
        [0]=>
        string(2) "xx"
        [1]=>
        int(2)
      }
    }
    f7:
    array(1) {
      ["a"]=>
      array(1) {
        ["a"]=>
        array(1) {
          ["a"]=>
          &array(1) {
            ["a"]=>
            &array(1) {
              ["a"]=>
              *RECURSION*
            }
          }
        }
      }
    }
    f1:
    array(2)
    {
      ['a'] => array(5)
      {
        ['a'] => &array(3)
        {
          ['a'] => &array(3) [recursion]
          [0] => string(1) "y"
          [1] => string(1) "z"
        }
        [0] => integer(1)
        [1] => integer(2)
        [2] => integer(3)
        [3] => string(1) "x"
      }
      [0] => string(1) "w"
    }
    f2:
    array(1)
    {
      ['A'] => &array(2)
      {
        ['a'] => &array(2) [recursion]
        [0] => string(1) "z"
      }
    }
    f3:
    array(2)
    {
      [0] => &array(2) [recursion]
      [1] => string(1) "z"
    }
    f4:
    array(1)
    {
      ['a'] => array(6)
      {
        [0] => integer(1)
        [1] => integer(2)
        [2] => integer(3)
        [3] => integer(1)
        [4] => integer(2)
        [5] => integer(3)
      }
    }
    f5:
    array(1)
    {
      ['a'] => array(6)
      {
        [0] => integer(1)
        [1] => integer(2)
        [2] => integer(3)
        [3] => integer(1)
        [4] => integer(2)
        [5] => integer(3)
      }
    }
    f6:
    array(1)
    {
      ['a'] => array(2)
      {
        [0] => string(2) "xx"
        [1] => integer(2)
      }
    }
    f7:
    array(1)
    {
      ['a'] => &array(1)
      {
        ['a'] => &array(1) [recursion]
      }
    }
    Arrays/sort.php: SUCCEEDED
    Arrays/usort.php: SUCCEEDED
    Bugs/class_incompletepart.php: SUCCEEDED
    Bugs/division-by-zero.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    DIVISION
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt on line 6
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt on line 8
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt on line 10
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt on line 12
    bool(false)
    MODULO
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt on line 16
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt on line 18
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt on line 20
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt on line 22
    bool(false)
    DIVISION
    bool(false)
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt at expression on line 10, column 2.
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt at expression on line 12, column 2.
    bool(false)
    MODULO
    bool(false)
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt at expression on line 20, column 2.
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt at expression on line 22, column 2.
    bool(false)
    D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt(6,10): warning PHP0150: Division by zero
    D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt(8,9): warning PHP0150: Division by zero
    D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt(16,10): warning PHP0150: Division by zero
    D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt(18,9): warning PHP0150: Division by zero
    
    Bugs/function-in-unknown-class.php: SUCCEEDED
    Bugs/is_a_null_value.php: SUCCEEDED
    Bugs/preg-named-groups.php: SUCCEEDED
    Bugs/preg-replace-advanced.php: SUCCEEDED
    Bugs/preg-replace-range.php: SUCCEEDED
    Bugs/preg-replace.php: SUCCEEDED
    Bugs/preg-this-dynamic.php: FAILED
    Script hung upNo errorsSuccess
    Expected test outputReal script output
    Unhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---> PHP.Core.Debug+AssertException: Assertion failed: 
       at PHP.Core.Debug.Fail(String message)
       at PHP.Core.Debug.Assert(Boolean condition)
       at PHP.Core.RelativePath.ParseCanonical(String relativePath)
       at PHP.Core.Emit.TransientAssemblyBuilder.Build(String sourceCode, SourceCodeDescriptor descriptor, EvalKinds kind, CompilationContext context, ScriptContext scriptContext, DTypeDesc referringType, NamingContext namingContext, Boolean completeSource)
       at PHP.Core.DynamicCode.EvalInternal(String prefix, String code, String suffix, EvalKinds kind, ScriptContext scriptContext, Dictionary`2 localVariables, DObject self, DTypeDesc referringType, SourceCodeDescriptor descriptor, Boolean entireFile, NamingContext namingContext)
       at PHP.Core.DynamicCode.Eval(String code, Boolean synthetic, ScriptContext context, Dictionary`2 definedVariables, DObject self, DTypeDesc referringType, String callerRelativeSourcePath, Int32 line, Int32 column, Int32 containerId, NamingContext namingContext)
       at PHP.Library.PerlRegExp.Evaluator.ReplaceCodeExecute(Match m)
       at System.Text.RegularExpressions.RegexReplacement.Replace(MatchEvaluator evaluator, Regex regex, String input, Int32 count, Int32 startat)
       at System.Text.RegularExpressions.Regex.Replace(String input, MatchEvaluator evaluator, Int32 count)
       at PHP.Library.PerlRegExp.ReplaceInternal(DObject self, Dictionary`2 definedVariables, PerlRegExpConverter converter, PhpCallback callback, String str, Int32 limit, SourceCodeDescriptor sourceCodeDesc, Int32& count)
       at PHP.Library.PerlRegExp.SimpleReplace(DObject self, Dictionary`2 definedVariables, Object pattern, String replacement, PhpCallback callback, Object data, Int32 limit, SourceCodeDescriptor descriptor, Int32& count)
       at PHP.Library.PerlRegExp.Replace(DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, PhpCallback callback, Object data, Int32 limit, Int32& count)
       at PHP.Library.PerlRegExp.Replace(DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, Object data)
       at PHP.Dynamic.PhpNetClassLibrary.preg_replace(Object , PhpStack )
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <__input.txt>.a.a(ScriptContext ) in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt:line 16
       at <__input.txt>.a.<Mediator>(ScriptContext )
       at <__input.txt>.a.a(Object instance, PhpStack stack)
       at <__input.txt>.<Script>.<Main>(ScriptContext <context>, Dictionary`2 <locals>, DObject , DTypeDesc , Boolean ) in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt:line 19
       at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)
       at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)
       --- End of inner exception stack trace ---
       at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)
       at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)
       at <Global>.Run(String[] )
    
    Bugs/preg-this-dynamic2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    foo: ahoj
    foo: lidi
    foo: rozkladame
    foo: ahoj
    foo: lidi
    foo: rozkladame
    foo: ahoj
    foo: lidi
    foo: rozkladame
    
    Notice: Undefined variable: this.
    
    Error: Call to a member function foo() on a non-object.
    Bugs/preg-this.php: SUCCEEDED
    Bugs/preg-ungreedy-bugs.php: SUCCEEDED
    Bugs/preg-unkn.php: SUCCEEDED
    Compiler/abstracts.php: SUCCEEDED
    Compiler/assignments.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ---1---1float(-1.5)
    float(2.5)
    float(0.83333333333333)
    int(6)
    int(8)
    ---2---2float(8.8333333333333)
    float(8.8333333333333)
    float(8.8333333333333)
    int(8)
    int(8)
    ---3---3---4---4---5---5array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [1]=>
      array(1) {
        [2]=>
        array(1) {
          [3]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    ---6---6array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "u"
    }
    array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "v"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    ---7---7array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    ---8---8
    ---1---1double(-1.5)
    double(2.5)
    double(0.833333333333333)
    integer(6)
    integer(8)
    ---2---2double(8.83333333333333)
    double(8.83333333333333)
    double(8.83333333333333)
    integer(8)
    integer(8)
    ---3---3---4---4---5---5array(1)
    {
      [0] => array(1)
      {
        [0] => array(1)
        {
          [0] => array(3)
          {
            [0] => integer(1)
            [1] => integer(2)
            [2] => integer(3)
          }
        }
      }
    }
    array(1)
    {
      [0] => array(1)
      {
        [0] => array(1)
        {
          [0] => array(3)
          {
            [0] => integer(1)
            [1] => integer(2)
            [2] => integer(3)
          }
        }
      }
    }
    array(1)
    {
      [1] => array(1)
      {
        [2] => array(1)
        {
          [3] => array(3)
          {
            [0] => integer(1)
            [1] => integer(2)
            [2] => integer(3)
          }
        }
      }
    }
    ---6---6array(4)
    {
      [0] => integer(1)
      [1] => integer(2)
      [2] => integer(3)
      [3] => string(1) "u"
    }
    array(4)
    {
      [0] => integer(1)
      [1] => integer(2)
      [2] => integer(3)
      [3] => string(1) "v"
    }
    array(5)
    {
      [0] => integer(1)
      [1] => integer(2)
      [2] => integer(3)
      [3] => string(1) "w"
      [4] => string(1) "z"
    }
    array(5)
    {
      [0] => integer(1)
      [1] => integer(2)
      [2] => integer(3)
      [3] => string(1) "w"
      [4] => string(1) "z"
    }
    ---7---7array(1)
    {
      [0] => array(1)
      {
        [0] => array(1)
        {
          [0] => array(1)
          {
            [0] => &integer(10)
          }
        }
      }
    }
    array(1)
    {
      [0] => array(1)
      {
        [0] => array(1)
        {
          [0] => array(1)
          {
            [0] => &integer(10)
          }
        }
      }
    }
    ---8---8
    Compiler/assign_in_call.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    g1:
    f(x)
    u(x)
    'x'
    
    g2:
    f(x)
    u(x)
    'b'
    
    g3:
    f(x)
    u(x)
    'b'
    
    g4:
    f(x)
    u(x)
    'b'
    
    g5:
    f()
    u()
    integer(1)
    
    g6:
    f(3)
    u(3)
    integer(3)
    
    g7:
    f(2)
    u(10)
    integer(10)
    
    g8:
    f(1)
    f(1)
    f(1)
    u(1)
    u()
    u(1)
    
    g9:
    known:
    __get(p) = 0
    __set(p,1)
    f(1)
    unknown:
    __get(p) = 1
    __set(p,3)
    u(3)
    
    g10:
    Done.
    g1:
    f(x)
    u(x)
    'x'
    
    g2:
    f(x)
    u(x)
    'b'
    
    g3:
    f(x)
    u(x)
    'b'
    
    g4:
    f(x)
    u(x)
    'b'
    
    g5:
    f()
    u()
    integer(1)
    
    g6:
    f(3)
    u(3)
    integer(3)
    
    g7:
    f(2)
    u(10)
    integer(10)
    
    g8:
    f(1)
    f(1)
    f(1)
    u(1)
    u()
    u(1)
    
    g9:
    known:
    __get(p) = 0
    __set(p,1)
    __get(p) = 1
    f(1)
    unknown:
    __get(p) = 1
    __set(p,3)
    __get(p) = 3
    u(3)
    
    g10:
    Done.
    Compiler/auto_globals_001.php: SUCCEEDED
    Compiler/auto_globals_002.php: SUCCEEDED
    Compiler/auto_globals_003.php: SUCCEEDED
    Compiler/break_in_global_code.php: SUCCEEDED
    Compiler/chaining_test.php: SUCCEEDED
    Compiler/chain_ending_by_string_index.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        string(1) "f"
      }
    }
    array(1) {
      [0]=>
      string(4) "xubu"
    }
    object(C)#1 (1) {
      ["f"]=>
      string(4) "kuxu"
    }
    string(5) "helxo"
    string(5) "helxo"
    array(1)
    {
      [0] => array(1)
      {
        [0] => string(1) "f"
      }
    }
    array(1)
    {
      [0] => string(4) "bubu"
    }
    
    Warning: A string item used as a reference in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt at expression on line 19, column 1.
    object(C)(1)
    {
      ["f"] => string(4) "kuku"
    }
    
    Warning: A string item used as a reference in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt at expression on line 25, column 1.
    string(5) "hello"
    
    Warning: A string item used as a reference in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt at expression on line 31, column 1.
    string(5) "hello"
    Compiler/continue_in_global_code.php: SUCCEEDED
    Compiler/deep_copy.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array(1) {
      [0]=>
      &array(1) {
        [0]=>
        &array(1) {
          [0]=>
          *RECURSION*
        }
      }
    }
    array(1) {
      [0]=>
      &array(1) {
        [0]=>
        &array(1) {
          [0]=>
          *RECURSION*
        }
      }
    }
    array(2) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) {
          [0]=>
          *RECURSION*
          [1]=>
          int(1)
        }
        [1]=>
        int(1)
      }
      [1]=>
      int(1)
    }
    array(1) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) {
          [0]=>
          *RECURSION*
          [1]=>
          int(1)
        }
        [1]=>
        int(1)
      }
    }
    array(1)
    {
      [0] => &array(1) [recursion]
    }
    array(1)
    {
      [0] => &array(1) [recursion]
    }
    array(2)
    {
      [0] => &array(2) [recursion]
      [1] => integer(1)
    }
    array(1)
    {
      [0] => &array(1) [recursion]
    }
    Compiler/deep_copy_refbox.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Strict Standards: Only variables should be passed by reference in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt on line 42
    array
    {
      0 => integer(1)
    }
    
    Strict Standards: Only variables should be passed by reference in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt on line 45
    array
    {
      0 => integer(1)
    }
    
    Strict Standards: Only variables should be passed by reference in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt on line 49
    array
    {
      0 => integer(1)
    }
    
    Strict Standards: Only variables should be passed by reference in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt on line 52
    array
    {
      0 => integer(1)
    }
    array
    {
      0 => integer(1)
      1 => integer(1)
    }
    array
    {
      0 => integer(1)
      1 => integer(1)
    }
    array
    {
      0 => integer(1)
      1 => integer(1)
    }
    array
    {
      0 => integer(1)
      1 => integer(1)
    }
    Compiler/expr_init.php: SUCCEEDED
    Compiler/foreach1.php: SUCCEEDED
    Compiler/foreach_arrays.php: SUCCEEDED
    Compiler/for_loop.php: SUCCEEDED
    Compiler/function_002.php: SUCCEEDED
    Compiler/function_003.php: SUCCEEDED
    Compiler/function_004.php: SUCCEEDED
    Compiler/function_call.php: SUCCEEDED
    Compiler/if_statement.php: SUCCEEDED
    Compiler/indirect_001.php: SUCCEEDED
    Compiler/indirect_002.php: SUCCEEDED
    Compiler/indirect_003.php: SUCCEEDED
    Compiler/indirect_004.php: SUCCEEDED
    Compiler/indirect_005.php: SUCCEEDED
    Compiler/indirect_007.php: SUCCEEDED
    Compiler/indirect_global.php: SUCCEEDED
    Compiler/inheritance.php: SUCCEEDED
    Compiler/inheritance2.php: SUCCEEDED
    Compiler/isset_unset_001.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Testing x in global code:  <br>
    1 <br>
     <br>
    Testing x (object) in optimized function:  <br>
    1 <br>
     <br>
    Testing x (PhpReference) in optimized function:  <br>
    1 <br>
     <br>
    
    Notice: Undefined variable: y in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt on line 29
    Testing $$x (created at runtime) in optimized function:  <br>
    1 <br>
    Testing x in global code:  <br>
    1 <br>
     <br>
    Testing x (object) in optimized function:  <br>
    1 <br>
     <br>
    Testing x (PhpReference) in optimized function:  <br>
    1 <br>
     <br>
    Testing $$x (created at runtime) in optimized function:  <br>
    1 <br>
    Compiler/null_hints.php: SUCCEEDED
    Compiler/switch.php: SUCCEEDED
    Compiler/ternary_ex.php: SUCCEEDED
    Compiler/typehint_check.php: SUCCEEDED
    Compiler/Inclusions/include2.php: SUCCEEDED
    Compiler/Inclusions/include3.php: SUCCEEDED
    Compiler/Inclusions/include6.php: SUCCEEDED
    Compiler/Inclusions/include_test.php: SUCCEEDED
    Compiler/Inclusions/script.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t01.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t02.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t03.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t04.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t05.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t08.php: SUCCEEDED
    Compiler/PseudoConst/parent.php: SUCCEEDED
    Compiler/PseudoConst/parent2.php: SUCCEEDED
    Compiler/PseudoConst/self.php: SUCCEEDED
    Compiler/PseudoConst/t01.php: SUCCEEDED
    Compiler/PseudoConst/t02.php: SUCCEEDED
    Compiler/PseudoConst/t03.php: SUCCEEDED
    Compiler/PseudoConst/t04.php: SUCCEEDED
    Compiler/PseudoConst/t05.php: SUCCEEDED
    Compiler/PseudoConst/t06.php: SUCCEEDED
    Compiler/PseudoConst/t07.php: SUCCEEDED
    Compiler/PseudoConst/t08.php: SUCCEEDED
    Compiler/PseudoConst/t09.php: SUCCEEDED
    Compiler/PseudoConst/t10.php: SUCCEEDED
    Compiler/PseudoConst/t11.php: SUCCEEDED
    Compiler/PseudoConst/_class_.php: SUCCEEDED
    Compiler/PseudoConst/_function_.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Notice: Undefined variable: a in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\PseudoConst\__input.txt on line 11
    g
    g
    Compiler/Unreachable/t13.php: SUCCEEDED
    DateTime/strftime.php: SUCCEEDED
    DateTime/strtotime1.php: SUCCEEDED
    DateTime/strtotime2.php: SUCCEEDED
    DateTime/strtotime3.php: SUCCEEDED
    DateTime/strtotime4.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0: 00:00:00 01/01/2005
    1: 01:00:00 01/01/2005
    2: 02:00:00 01/01/2005
    3: 03:00:00 01/01/2005
    4: 04:00:00 01/01/2005
    5: 05:00:00 01/01/2005
    6: 06:00:00 01/01/2005
    7: 07:00:00 01/01/2005
    8: 08:00:00 01/01/2005
    9: 09:00:00 01/01/2005
    10: 10:00:00 01/01/2005
    11: 11:00:00 01/01/2005
    12: 12:00:00 01/01/2005
    13: 13:00:00 01/01/2005
    14: 14:00:00 01/01/2005
    15: 15:00:00 01/01/2005
    16: 16:00:00 01/01/2005
    17: 17:00:00 01/01/2005
    18: 18:00:00 01/01/2005
    19: 19:00:00 01/01/2005
    20: 20:00:00 01/01/2005
    21: 21:00:00 01/01/2005
    22: 22:00:00 01/01/2005
    23: 23:00:00 01/01/2005
    24: 00:00:00 01/02/2005
    0am: error
    1am: 01:00:00 01/01/2005
    2am: 02:00:00 01/01/2005
    3am: 03:00:00 01/01/2005
    4am: 04:00:00 01/01/2005
    5am: 05:00:00 01/01/2005
    6am: 06:00:00 01/01/2005
    7am: 07:00:00 01/01/2005
    8am: 08:00:00 01/01/2005
    9am: 09:00:00 01/01/2005
    10am: 10:00:00 01/01/2005
    11am: 11:00:00 01/01/2005
    12am: 00:00:00 01/01/2005
    13am: error
    14am: error
    15am: error
    16am: error
    17am: error
    18am: error
    19am: error
    20am: error
    21am: error
    22am: error
    23am: error
    24am: error
    0pm: error
    1pm: 13:00:00 01/01/2005
    2pm: 14:00:00 01/01/2005
    3pm: 15:00:00 01/01/2005
    4pm: 16:00:00 01/01/2005
    5pm: 17:00:00 01/01/2005
    6pm: 18:00:00 01/01/2005
    7pm: 19:00:00 01/01/2005
    8pm: 20:00:00 01/01/2005
    9pm: 21:00:00 01/01/2005
    10pm: 22:00:00 01/01/2005
    11pm: 23:00:00 01/01/2005
    12pm: 12:00:00 01/01/2005
    13pm: error
    14pm: error
    15pm: error
    16pm: error
    17pm: error
    18pm: error
    19pm: error
    20pm: error
    21pm: error
    22pm: error
    23pm: error
    24pm: error
    0: 00:00:00 01/01/2005
    1: 01:00:00 01/01/2005
    2: 02:00:00 01/01/2005
    3: 03:00:00 01/01/2005
    4: 04:00:00 01/01/2005
    5: 05:00:00 01/01/2005
    6: 06:00:00 01/01/2005
    7: 07:00:00 01/01/2005
    8: 08:00:00 01/01/2005
    9: 09:00:00 01/01/2005
    10: 10:00:00 01/01/2005
    11: 11:00:00 01/01/2005
    12: 12:00:00 01/01/2005
    13: 13:00:00 01/01/2005
    14: 14:00:00 01/01/2005
    15: 15:00:00 01/01/2005
    16: 16:00:00 01/01/2005
    17: 17:00:00 01/01/2005
    18: 18:00:00 01/01/2005
    19: 19:00:00 01/01/2005
    20: 20:00:00 01/01/2005
    21: 21:00:00 01/01/2005
    22: 22:00:00 01/01/2005
    23: 23:00:00 01/01/2005
    24: error
    0am: error
    1am: 01:00:00 01/01/2005
    2am: 02:00:00 01/01/2005
    3am: 03:00:00 01/01/2005
    4am: 04:00:00 01/01/2005
    5am: 05:00:00 01/01/2005
    6am: 06:00:00 01/01/2005
    7am: 07:00:00 01/01/2005
    8am: 08:00:00 01/01/2005
    9am: 09:00:00 01/01/2005
    10am: 10:00:00 01/01/2005
    11am: 11:00:00 01/01/2005
    12am: 00:00:00 01/01/2005
    13am: error
    14am: error
    15am: error
    16am: error
    17am: error
    18am: error
    19am: error
    20am: error
    21am: error
    22am: error
    23am: error
    24am: error
    0pm: error
    1pm: 13:00:00 01/01/2005
    2pm: 14:00:00 01/01/2005
    3pm: 15:00:00 01/01/2005
    4pm: 16:00:00 01/01/2005
    5pm: 17:00:00 01/01/2005
    6pm: 18:00:00 01/01/2005
    7pm: 19:00:00 01/01/2005
    8pm: 20:00:00 01/01/2005
    9pm: 21:00:00 01/01/2005
    10pm: 22:00:00 01/01/2005
    11pm: 23:00:00 01/01/2005
    12pm: 12:00:00 01/01/2005
    13pm: error
    14pm: error
    15pm: error
    16pm: error
    17pm: error
    18pm: error
    19pm: error
    20pm: error
    21pm: error
    22pm: error
    23pm: error
    24pm: error
    DateTime/strtotime5.php: SUCCEEDED
    DateTime/time.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    -189388800:-189475200 - 86400
    1964-01-01T00:00:00+0000
    1963-12-31T00:00:00+0000
    1964-06-06
    1963-06-06
    1964-01-06
    1133305200
    -189388800:-189475200 - 86400
    1964-01-01T00:00:00+0000
    1963-12-31T00:00:00+0000
    1964-06-06
    1963-06-06
    1964-01-06
    DateTime/timezones1.php: SUCCEEDED
    FileSystem/basename.php: SUCCEEDED
    FileSystem/basename2.php: SUCCEEDED
    FileSystem/chdir.php: SUCCEEDED
    FileSystem/csv.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    --- write ---
    72
    24
    44
    2
    6
    
    --- read ---
    "hello\n
    world";"aaa""bbb""ccc";"blah blah;";none;"tab\ttab";"space space"\n
    hh'ee;"ss\nsadasdasd s"\n
    """""""""""""""""""""";"""";;"""""";"xxx"""\n
    x\n
    "x\y"\n
    --- write ---
    72
    24
    44
    2
    6
    
    --- read ---
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    FileSystem/date.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <pre>[ARRAY
      [INT (0)] => [STRING: "A --> {PM}"]
      [INT (1)] => [STRING: "B --> {719}"]
      [INT (2)] => [STRING: "C --> {C}"]
      [INT (3)] => [STRING: "D --> {Sat}"]
      [INT (4)] => [STRING: "E --> {E}"]
      [INT (5)] => [STRING: "F --> {March}"]
      [INT (6)] => [STRING: "G --> {17}"]
      [INT (7)] => [STRING: "H --> {17}"]
      [INT (8)] => [STRING: "I --> {0}"]
      [INT (9)] => [STRING: "J --> {J}"]
      [INT (10)] => [STRING: "K --> {K}"]
      [INT (11)] => [STRING: "L --> {0}"]
      [INT (12)] => [STRING: "M --> {Mar}"]
      [INT (13)] => [STRING: "N --> {6}"]
      [INT (14)] => [STRING: "O --> {+0100}"]
      [INT (15)] => [STRING: "P --> {+01:00}"]
      [INT (16)] => [STRING: "Q --> {Q}"]
      [INT (17)] => [STRING: "R --> {R}"]
      [INT (18)] => [STRING: "S --> {th}"]
      [INT (19)] => [STRING: "U --> {984240978}"]
      [INT (20)] => [STRING: "V --> {V}"]
      [INT (21)] => [STRING: "W --> {10}"]
      [INT (22)] => [STRING: "X --> {X}"]
      [INT (23)] => [STRING: "Y --> {2001}"]
      [INT (24)] => [STRING: "Z --> {3600}"]
      [INT (25)] => [STRING: "a --> {pm}"]
      [INT (26)] => [STRING: "b --> {b}"]
      [INT (27)] => [STRING: "c --> {2001-03-10T17:16:18+01:00}"]
      [INT (28)] => [STRING: "d --> {10}"]
      [INT (29)] => [STRING: "e --> {Europe/Prague}"]
      [INT (30)] => [STRING: "f --> {f}"]
      [INT (31)] => [STRING: "g --> {5}"]
      [INT (32)] => [STRING: "h --> {05}"]
      [INT (33)] => [STRING: "i --> {16}"]
      [INT (34)] => [STRING: "j --> {10}"]
      [INT (35)] => [STRING: "k --> {k}"]
      [INT (36)] => [STRING: "l --> {Saturday}"]
      [INT (37)] => [STRING: "m --> {03}"]
      [INT (38)] => [STRING: "n --> {3}"]
      [INT (39)] => [STRING: "o --> {2001}"]
      [INT (40)] => [STRING: "p --> {p}"]
      [INT (41)] => [STRING: "q --> {q}"]
      [INT (42)] => [STRING: "r --> {Sat, 10 Mar 2001 17:16:18 +0100}"]
      [INT (43)] => [STRING: "s --> {18}"]
      [INT (44)] => [STRING: "t --> {31}"]
      [INT (45)] => [STRING: "u --> {000000}"]
      [INT (46)] => [STRING: "v --> {v}"]
      [INT (47)] => [STRING: "w --> {6}"]
      [INT (48)] => [STRING: "x --> {x}"]
      [INT (49)] => [STRING: "y --> {01}"]
      [INT (50)] => [STRING: "z --> {68}"]
    ]</pre>
    <pre>[ARRAY
      [INT (0)] => [STRING: "A --> {PM}"]
      [INT (1)] => [STRING: "B --> {719}"]
      [INT (2)] => [STRING: "C --> {C}"]
      [INT (3)] => [STRING: "D --> {Sat}"]
      [INT (4)] => [STRING: "E --> {E}"]
      [INT (5)] => [STRING: "F --> {March}"]
      [INT (6)] => [STRING: "G --> {17}"]
      [INT (7)] => [STRING: "H --> {17}"]
      [INT (8)] => [STRING: "I --> {0}"]
      [INT (9)] => [STRING: "J --> {J}"]
      [INT (10)] => [STRING: "K --> {K}"]
      [INT (11)] => [STRING: "L --> {0}"]
      [INT (12)] => [STRING: "M --> {Mar}"]
      [INT (13)] => [STRING: "N --> {6}"]
      [INT (14)] => [STRING: "O --> {+0100}"]
      [INT (15)] => [STRING: "P --> {+01:00}"]
      [INT (16)] => [STRING: "Q --> {Q}"]
      [INT (17)] => [STRING: "R --> {R}"]
      [INT (18)] => [STRING: "S --> {th}"]
      [INT (19)] => [STRING: "U --> {984240978}"]
      [INT (20)] => [STRING: "V --> {V}"]
      [INT (21)] => [STRING: "W --> {10}"]
      [INT (22)] => [STRING: "X --> {X}"]
      [INT (23)] => [STRING: "Y --> {2001}"]
      [INT (24)] => [STRING: "Z --> {3600}"]
      [INT (25)] => [STRING: "a --> {pm}"]
      [INT (26)] => [STRING: "b --> {b}"]
      [INT (27)] => [STRING: "c --> {2001-03-10T17:16:18+01:00}"]
      [INT (28)] => [STRING: "d --> {10}"]
      [INT (29)] => [STRING: "e --> {Europe/Prague}"]
      [INT (30)] => [STRING: "f --> {f}"]
      [INT (31)] => [STRING: "g --> {5}"]
      [INT (32)] => [STRING: "h --> {05}"]
      [INT (33)] => [STRING: "i --> {16}"]
      [INT (34)] => [STRING: "j --> {10}"]
      [INT (35)] => [STRING: "k --> {k}"]
      [INT (36)] => [STRING: "l --> {Saturday}"]
      [INT (37)] => [STRING: "m --> {03}"]
      [INT (38)] => [STRING: "n --> {3}"]
      [INT (39)] => [STRING: "o --> {2001}"]
      [INT (40)] => [STRING: "p --> {p}"]
      [INT (41)] => [STRING: "q --> {q}"]
      [INT (42)] => [STRING: "r --> {Sat, 10 Mar 2001 17:16:18 +0100}"]
      [INT (43)] => [STRING: "s --> {18}"]
      [INT (44)] => [STRING: "t --> {31}"]
      [INT (45)] => [STRING: "u --> {u}"]
      [INT (46)] => [STRING: "v --> {v}"]
      [INT (47)] => [STRING: "w --> {6}"]
      [INT (48)] => [STRING: "x --> {x}"]
      [INT (49)] => [STRING: "y --> {01}"]
      [INT (50)] => [STRING: "z --> {68}"]
    ]</pre>
    FileSystem/date2.php: SUCCEEDED
    FileSystem/date3.php: SUCCEEDED
    FileSystem/date_unix.php: SUCCEEDED
    FileSystem/dirname.php: SUCCEEDED
    FileSystem/dirname2.php: SUCCEEDED
    FileSystem/disk_free_space.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    127 GB
    Drive C: 217 GB
    Drive D: 127 GB
    Drive E: 155 GB
    Drive F: 
    Warning: disk_free_space(): The device is not ready.
     in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt on line 14
    false
    127 GB
    Drive C: 217 GB
    Drive D: 127 GB
    Drive E: 155 GB
    Drive F: false
    FileSystem/disk_total_space.php: SUCCEEDED
    FileSystem/fgets.php: SUCCEEDED
    FileSystem/file.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <pre>[ARRAY
      [INT (0)] => [STRING: "this is a file with one EOLN
    "]
    ]</pre>
    <pre>[ARRAY
      [INT (0)] => [STRING: ""]
      [INT (1)] => [STRING: "This is a file with two EOLNs. First line is empty."]
    ]</pre>
    <pre>[ARRAY
      [INT (0)] => [STRING: "
    "]
      [INT (1)] => [STRING: "This is a file with two EOLNs. First line is empty.
    "]
    ]</pre>
    <pre>[ARRAY
      [INT (0)] => [STRING: "This is a file with two EOLNs. First line is empty."]
    ]</pre>
    <pre>[ARRAY
      [INT (0)] => [STRING: "this is a file WITHOUT an "end-of-line""]
    ]</pre>
    Line #<b>130</b> : &lt;/html&gt;
    <br />
    [this is a file with one EOLN{\n}
    ]
    <pre>[ARRAY
      [INT (0)] => [STRING: "this is a file with one EOLN
    "]
    ]</pre>
    <pre>[ARRAY
      [INT (0)] => [STRING: ""]
      [INT (1)] => [STRING: "This is a file with two EOLNs. First line is empty."]
    ]</pre>
    <pre>[ARRAY
      [INT (0)] => [STRING: "
    "]
      [INT (1)] => [STRING: "This is a file with two EOLNs. First line is empty.
    "]
    ]</pre>
    <pre>[ARRAY
      [INT (0)] => [STRING: ""]
      [INT (1)] => [STRING: "This is a file with two EOLNs. First line is empty."]
    ]</pre>
    <pre>[ARRAY
      [INT (0)] => [STRING: "this is a file WITHOUT an "end-of-line""]
    ]</pre>
    Line #<b>130</b> : &lt;/html&gt;
    <br />
    [this is a file with one EOLN{\n}
    ]
    FileSystem/filesize.php: SUCCEEDED
    FileSystem/file_exists.php: SUCCEEDED
    FileSystem/file_get_contents.php: SUCCEEDED
    FileSystem/fpassthru.php: SUCCEEDED
    FileSystem/fread.php: SUCCEEDED
    FileSystem/fread1.php: SUCCEEDED
    FileSystem/fread2.php: SUCCEEDED
    FileSystem/fseek.php: SUCCEEDED
    FileSystem/fsockopen.php: SUCCEEDED
    FileSystem/ftell.php: SUCCEEDED
    FileSystem/is_dir.php: SUCCEEDED
    FileSystem/is_executable.php: SUCCEEDED
    FileSystem/pathinfo.php: SUCCEEDED
    FileSystem/popen.php: SUCCEEDED
    FileSystem/readdir.php: SUCCEEDED
    FileSystem/readfile.php: SUCCEEDED
    FileSystem/readline.php: SUCCEEDED
    FileSystem/realpath.php: SUCCEEDED
    FileSystem/scandir.php: SUCCEEDED
    FileSystem/stat.php: SUCCEEDED
    FileSystem/stream_context_set_option.php: SUCCEEDED
    FileSystem/stream_copy_to_stream.php: SUCCEEDED
    FileSystem/stream_copy_to_stream2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <p>Read <b>rb</b>, Write <b>wb</b>
    
    
    COPIED: <b>10513</b>
    <p>Read <b>rb</b>, Write <b>wt</b>
    
    
    COPIED: <b>10499</b>
    <p>Read <b>rb</b>, Write <b>wb</b>
    
    
    COPIED: <b>10504</b>
    <p>Read <b>rb</b>, Write <b>wt</b>
    
    
    COPIED: <b>10512</b>
    FileSystem/testinc.php: SUCCEEDED
    FileSystem/touch.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Warning: touch(): Utime failed: No such file or directory in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt on line 8
    Sorry Could Not change modification time of touch.txt
    Warning: touch(): Utime failed: No such file or directory in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt on line 14
    
    Warning: touch(): Utime failed: No such file or directory in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt on line 16
    
    Warning: touch(): Utime failed: No such file or directory in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt on line 17
    <pre>[ARRAY
      [INT (0)] => [STRING: "January 24, 2010; [12:09:12] (12h) ctime test.txt (1264331352)"]
      [INT (1)] => [STRING: "January 24, 2010; [12:09:12] (12h) mtime test.txt (1264331352)"]
      [INT (2)] => [STRING: "January 24, 2010; [12:09:12] (12h) ctime touch.txt (1264331352)"]
      [INT (3)] => [STRING: "January 24, 2010; [12:09:12] (12h) mtime touch.txt (1264331352)"]
      [INT (4)] => [STRING: "January 24, 2010; [12:09:12] (12h) atime touch.txt (1264331352)"]
      [INT (5)] => [STRING: "January 24, 2010; [12:09:12] (12h) mtime summer.txt (1264331352)"]
      [INT (6)] => [STRING: "January 24, 2010; [12:09:12] (12h) mtime winter.txt (1264331352)"]
    ]</pre>
    Warning: touch(): Unable to access (D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\touch.txt): Permission denied in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 8, column 5.
    Sorry Could Not change modification time of touch.txt
    Warning: touch(): Unable to access (D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\touch.txt): Permission denied in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 14, column 1.
    
    Warning: touch(): Unable to access (D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\winter.txt): Permission denied in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 16, column 1.
    
    Warning: touch(): Unable to access (D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\summer.txt): Permission denied in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 17, column 1.
    <pre>[ARRAY
      [INT (0)] => [STRING: "January 24, 2010; [13:09:12] (13h) ctime test.txt (1264334952)"]
      [INT (1)] => [STRING: "January 24, 2010; [13:09:12] (13h) mtime test.txt (1264334952)"]
      [INT (2)] => [STRING: "January 24, 2010; [13:09:12] (13h) ctime touch.txt (1264334952)"]
      [INT (3)] => [STRING: "January 24, 2010; [13:09:12] (13h) mtime touch.txt (1264334952)"]
      [INT (4)] => [STRING: "January 24, 2010; [13:09:12] (13h) atime touch.txt (1264334952)"]
      [INT (5)] => [STRING: "January 24, 2010; [13:09:12] (13h) mtime summer.txt (1264334952)"]
      [INT (6)] => [STRING: "January 24, 2010; [13:09:12] (13h) mtime winter.txt (1264334952)"]
    ]</pre>
    Math/abs.php: SUCCEEDED
    Math/atan2.php: SUCCEEDED
    Math/base_convert.php: SUCCEEDED
    Math/bindec.php: SUCCEEDED
    Math/ceil.php: SUCCEEDED
    Math/cos.php: SUCCEEDED
    Math/decbin.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <pre>
    [double: 2294967295]
    10001000110010100110101111111111
    [double: 4294967296]
    0
    [double: 8589934590]
    11111111111111111111111111111110
    [double: 8589934590]
    11111111111111111111111111111110
    [double: 8589934591]
    11111111111111111111111111111111
    [Int: 1000.000.000.000]
    11010100101001010001000000000000
    <hr>(-1, -5435, 2.14, 0, 26)
    11111111111111111111111111111111
    11111111111111111110101011000101
    10
    0
    11010 
    </pre>
    <pre>
    [???: 2294967295]
    10001000110010100110101111111111
    [???: 4294967296]
    0
    [???: 8589934590]
    11111111111111111111111111111110
    [???: 8589934590]
    11111111111111111111111111111110
    [???: 8589934591]
    11111111111111111111111111111111
    [Int: 1000.000.000.000]
    11010100101001010001000000000000
    <hr>(-1, -5435, 2.14, 0, 26)
    11111111111111111111111111111111
    11111111111111111110101011000101
    10
    0
    11010 
    </pre>
    Math/dechex.php: SUCCEEDED
    Math/decoct.php: SUCCEEDED
    Math/deg2rad.php: SUCCEEDED
    Math/exp.php: SUCCEEDED
    Math/floor.php: SUCCEEDED
    Math/fmod.php: SUCCEEDED
    Math/hexdec.php: SUCCEEDED
    Math/max.php: SUCCEEDED
    Math/min.php: SUCCEEDED
    Math/modulo_warn.php: SUCCEEDED
    Math/octdec.php: SUCCEEDED
    Math/pow.php: SUCCEEDED
    Math/rad2deg.php: SUCCEEDED
    Math/round.php: SUCCEEDED
    Math/sin.php: SUCCEEDED
    Math/sqrt.php: SUCCEEDED
    Math/tan.php: SUCCEEDED
    Math/uniqid.php: SUCCEEDED
    Misc/calendar_extension.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0
    0
    2375840
    0
    14
    32
    2
    There are 31 days in August 2003
    There are 28 days in February 2003
    There are 29 days in February 2004
    There are 31 days in December 2034
    1748326
    1748324
    374867
    0
    322f32322f35373633
    ebe120e7f9e5ef20e4faf9f1e2
    ebe120e7f9e5ef20e427faf9f1e2
    ebe120e7f9e5ef20e420e0ecf4e9ed20faf9f1e2
    ebe120e7f9e5ef20e42720e0ecf4e9ed20faf9f1e2
    eb22e120e7f9e5ef20e4faf9f122e2
    e12720e7f9e5ef20e4faf9f122e2
    e12720e7f9e5ef20e427faf9f122e2
    e12720e7f9e5ef20e420e0ecf4e9ed20faf9f122e2
    e12720e7f9e5ef20e42720e0ecf4e9ed20faf9f122e2
    Error: Call to undefined function: 'frenchtojd' in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\__input.txt at expression on line 2, column 1.
    Misc/ini_parse.php: SUCCEEDED
    Misc/lexer.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    T_INLINE_HTML
    311 '\r\n'
    T_OPEN_TAG
    368 '&lt;?'
    T_WHITESPACE
    371 ' \r\n\r\n'
    T_FINAL
    345 'final'
    T_WHITESPACE
    371 ' '
    T_CLASS
    353 'class'
    T_WHITESPACE
    371 ' '
    T_STRING
    307 'A'
    T_WHITESPACE
    371 ' \r\n'
        '{'
    T_WHITESPACE
    371 ' \r\n  '
    T_FUNCTION
    334 'function'
    T_WHITESPACE
    371 ' '
    T_STRING
    307 '__get'
        '('
    T_VARIABLE
    309 '$x'
        ')'
    T_WHITESPACE
    371 ' \r\n  '
        '{'
    T_WHITESPACE
    371 ' \r\n    '
    T_VARIABLE
    309 '$x'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_START_HEREDOC
    372 '&lt;&lt;&lt;EOOOOOOOOOOOOOOT\r\n'
    T_ENCAPSED_AND_WHITESPACE
    314 '         &lt;&lt;&lt;hello\r\nEOOOOOOOOOOOOOOt;\r\nEOOOOOOOOOOOOOT;\r\n'
    T_END_HEREDOC
    373 'EOOOOOOOOOOOOOOT'
        ';'
    T_WHITESPACE
    371 '\r\n\r\n    '
        '$'
    T_VARIABLE
    309 '$y'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_ARRAY
    360 'array'
    T_WHITESPACE
    371 ' '
        '('
    T_LNUMBER
    305 '1'
        ','
    T_DNUMBER
    306 '100000000000000'
        ','
    T_DNUMBER
    306 '999999999999999999999999999999999'
        ','
    T_STRING
    307 'true'
        ','
    T_STRING
    307 'false'
        ')'
        ';'
    T_WHITESPACE
    371 '\r\n    '
        '$'
        '{'
        '&quot;'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
    T_DOLLAR_OPEN_CURLY_BRACES
    374 '${'
        '$'
        '{'
    T_CONSTANT_ENCAPSED_STRING
    315 '&quot;xxx&quot;'
        '}'
        '}'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
        '&quot;'
        '}'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_LNUMBER
    305 '1'
        ';'
    T_WHITESPACE
    371 '\r\n    '
        '$'
        '{'
        '&quot;'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
    T_DOLLAR_OPEN_CURLY_BRACES
    374 '${'
        '$'
        '{'
        '&quot;'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
    T_VARIABLE
    309 '$x'
    T_ENCAPSED_AND_WHITESPACE
    314 '-&gt;$$'
    T_VARIABLE
    309 '$x0xx'
        '&quot;'
        '}'
        '}'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
        '&quot;'
        '}'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_LNUMBER
    305 '1'
        ';'
    T_WHITESPACE
    371 '\r\n  '
        '}'
    T_WHITESPACE
    371 ' \r\n'
        '}'
    T_WHITESPACE
    371 '\r\n\r\n'
    T_CLOSE_TAG
    370 '?&gt;'
    '
    '
        '&lt;?'
        ' 
    
    '
        'final'
        ' '
        'class'
        ' '
        'A'
        ' 
    '
        '{'
        ' 
      '
        'function'
        ' '
    258
    258 '
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\__input.txt at expression on line 10, column 7.
    '
        '('
        '$x'
        ')'
        ' 
      '
        '{'
        ' 
        '
        '$x'
        ' '
        '='
        ' '
        '&lt;&lt;&lt;EOOOOOOOOOOOOOOT
    '
        '         &lt;&lt;&lt;'
        'hello'
        '
    '
        'EOOOOOOOOOOOOOOt;
    '
        'EOOOOOOOOOOOOOT;
    '
        'EOOOOOOOOOOOOOOT'
        ';'
        '
    
        '
        '$'
        '$y'
        ' '
        '='
        ' '
        'array'
        ' '
        '('
        '1'
        ','
        '100000000000000'
        ','
        '999999999999999999999999999999999'
        ','
        'true'
        ','
    256
    256 '
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\__input.txt at expression on line 10, column 7.
    '
        ')'
        ';'
        '
        '
        '$'
        '{'
        '&quot;'
        'x'
        '${'
        '$'
        '{'
    -29
    -29 '
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\__input.txt at expression on line 10, column 7.
    '
        '}'
        '}'
        'x'
        '&quot;'
        '}'
        ' '
        '='
        ' '
        '1'
        ';'
        '
        '
        '$'
        '{'
        '&quot;'
        'x'
        '${'
        '$'
        '{'
        '&quot;'
        'x'
        '$x'
        '-&gt;'
        '$'
        '$'
        '$x0xx'
        '&quot;'
        '}'
        '}'
        'x'
        '&quot;'
        '}'
        ' '
        '='
        ' '
        '1'
        ';'
        '
      '
        '}'
        ' 
    '
        '}'
        '
    
    '
        '?&gt;'
    Misc/locale.php: SUCCEEDED
    Misc/output2.php: SUCCEEDED
    Misc/stack_trace.php: FAILED
    Script hung upNo errorsSuccess
    Expected test outputReal script output
    Unhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---> System.IndexOutOfRangeException: Index was outside the bounds of the array.
       at PHP.Core.PhpStackFrame..ctor(ScriptContext context, StackFrame frame, FrameKinds kind)
       at PHP.Core.PhpStackTrace..ctor(ScriptContext context, StackTrace clrTrace)
       at PHP.Core.PhpStackTrace..ctor(ScriptContext context, Int32 skipFrames)
       at PHP.Library.Errors.Backtrace()
       at <stack_trace.inc>.<Script>.j(ScriptContext <context>) in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\stack_trace.inc:line 11
       at <stack_trace.inc>.<Script>.j(Object instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <stack_trace.inc>.<Script>.i(ScriptContext <context>) in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\stack_trace.inc:line 6
       at <stack_trace.inc>.<Script>.i(Object instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <^0>.<Global>.<?0>.h(ScriptContext <context>) in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\__input.txt:line 4
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack, DTypeDesc caller)
       at PHP.Core.PhpCallback.InvokeInternal(Object[] args)
       at PHP.Core.PhpCallback.Invoke(Object[] args)
       at PHP.Library.PhpArrays.Map(PhpCallback map, PhpArray[] arrays)
       at <^1>.<Global>.<?1>.Lambda_1(ScriptContext <context>) in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\__input.txt:line 1
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <__input.txt>.<Script>.f(ScriptContext <context>) in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\__input.txt:line 6
       at <__input.txt>.<Script>.f(Object instance, PhpStack stack)
       at <__input.txt>.<Script>.<Main>(ScriptContext <context>, Dictionary`2 <locals>, DObject , DTypeDesc , Boolean ) in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\__input.txt:line 18
       at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)
       at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)
       --- End of inner exception stack trace ---
       at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)
       at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)
       at <Global>.Run(String[] )
    
    Misc/tokens.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    T_REQUIRE_ONCE = 258,
    T_REQUIRE = 259,
    T_EVAL = 260,
    T_INCLUDE_ONCE = 261,
    T_INCLUDE = 262,
    T_LOGICAL_OR = 263,
    T_LOGICAL_XOR = 264,
    T_LOGICAL_AND = 265,
    T_PRINT = 266,
    T_SR_EQUAL = 267,
    T_SL_EQUAL = 268,
    T_XOR_EQUAL = 269,
    T_OR_EQUAL = 270,
    T_AND_EQUAL = 271,
    T_MOD_EQUAL = 272,
    T_CONCAT_EQUAL = 273,
    T_DIV_EQUAL = 274,
    T_MUL_EQUAL = 275,
    T_MINUS_EQUAL = 276,
    T_PLUS_EQUAL = 277,
    T_BOOLEAN_OR = 278,
    T_BOOLEAN_AND = 279,
    T_IS_NOT_IDENTICAL = 280,
    T_IS_IDENTICAL = 281,
    T_IS_NOT_EQUAL = 282,
    T_IS_EQUAL = 283,
    T_IS_GREATER_OR_EQUAL = 284,
    T_IS_SMALLER_OR_EQUAL = 285,
    T_SR = 286,
    T_SL = 287,
    T_INSTANCEOF = 288,
    T_UNSET_CAST = 289,
    T_BOOL_CAST = 290,
    T_OBJECT_CAST = 291,
    T_ARRAY_CAST = 292,
    T_STRING_CAST = 293,
    T_DOUBLE_CAST = 294,
    T_INT_CAST = 295,
    T_DEC = 296,
    T_INC = 297,
    T_CLONE = 298,
    T_NEW = 299,
    T_EXIT = 300,
    T_IF = 301,
    T_ELSEIF = 302,
    T_ELSE = 303,
    T_ENDIF = 304,
    T_LNUMBER = 305,
    T_DNUMBER = 306,
    T_STRING = 307,
    T_STRING_VARNAME = 308,
    T_VARIABLE = 309,
    T_NUM_STRING = 310,
    T_INLINE_HTML = 311,
    T_CHARACTER = 312,
    T_BAD_CHARACTER = 313,
    T_ENCAPSED_AND_WHITESPACE = 314,
    T_CONSTANT_ENCAPSED_STRING = 315,
    T_ECHO = 316,
    T_DO = 317,
    T_WHILE = 318,
    T_ENDWHILE = 319,
    T_FOR = 320,
    T_ENDFOR = 321,
    T_FOREACH = 322,
    T_ENDFOREACH = 323,
    T_DECLARE = 324,
    T_ENDDECLARE = 325,
    T_AS = 326,
    T_SWITCH = 327,
    T_ENDSWITCH = 328,
    T_CASE = 329,
    T_DEFAULT = 330,
    T_BREAK = 331,
    T_CONTINUE = 332,
    T_GOTO = 333,
    T_FUNCTION = 334,
    T_CONST = 335,
    T_RETURN = 336,
    T_TRY = 337,
    T_CATCH = 338,
    T_THROW = 339,
    T_USE = 340,
    T_GLOBAL = 341,
    T_PUBLIC = 342,
    T_PROTECTED = 343,
    T_PRIVATE = 344,
    T_FINAL = 345,
    T_ABSTRACT = 346,
    T_STATIC = 347,
    T_VAR = 348,
    T_UNSET = 349,
    T_ISSET = 350,
    T_EMPTY = 351,
    T_HALT_COMPILER = 352,
    T_CLASS = 353,
    T_INTERFACE = 354,
    T_EXTENDS = 355,
    T_IMPLEMENTS = 356,
    T_OBJECT_OPERATOR = 357,
    T_DOUBLE_ARROW = 358,
    T_LIST = 359,
    T_ARRAY = 360,
    T_CLASS_C = 361,
    T_METHOD_C = 362,
    T_FUNC_C = 363,
    T_LINE = 364,
    T_FILE = 365,
    T_COMMENT = 366,
    T_DOC_COMMENT = 367,
    T_OPEN_TAG = 368,
    T_OPEN_TAG_WITH_ECHO = 369,
    T_CLOSE_TAG = 370,
    T_WHITESPACE = 371,
    T_START_HEREDOC = 372,
    T_END_HEREDOC = 373,
    T_DOLLAR_OPEN_CURLY_BRACES = 374,
    T_CURLY_OPEN = 375,
    T_PAAMAYIM_NEKUDOTAYIM = 376,
    T_DOUBLE_COLON = 376,
    T_NAMESPACE = 377,
    T_NS_C = 378,
    T_DIR = 379,
    T_NS_SEPARATOR = 380,
    T_INCLUDE = 129,
    T_INCLUDE_ONCE = 130,
    T_EVAL = 131,
    T_REQUIRE = 132,
    T_REQUIRE_ONCE = 133,
    T_LOGICAL_OR = 136,
    T_LOGICAL_XOR = 137,
    T_LOGICAL_AND = 138,
    T_PRINT = 139,
    T_PLUS_EQUAL = 140,
    T_MINUS_EQUAL = 141,
    T_MUL_EQUAL = 142,
    T_DIV_EQUAL = 143,
    T_CONCAT_EQUAL = 144,
    T_MOD_EQUAL = 145,
    T_AND_EQUAL = 146,
    T_OR_EQUAL = 147,
    T_XOR_EQUAL = 148,
    T_SL_EQUAL = 149,
    T_SR_EQUAL = 150,
    T_BOOLEAN_OR = 151,
    T_BOOLEAN_AND = 152,
    T_IS_EQUAL = 153,
    T_IS_NOT_EQUAL = 154,
    T_IS_IDENTICAL = 155,
    T_IS_NOT_IDENTICAL = 156,
    T_IS_SMALLER_OR_EQUAL = 157,
    T_IS_GREATER_OR_EQUAL = 158,
    T_SL = 159,
    T_SR = 160,
    T_INC = 161,
    T_DEC = 162,
    T_NEW = 164,
    T_INSTANCEOF = 165,
    T_CLONE = 167,
    T_LNUMBER = 168,
    T_DNUMBER = 170,
    T_STRING = 171,
    T_STRING_VARNAME = 172,
    T_VARIABLE = 173,
    T_NUM_STRING = 174,
    T_INLINE_HTML = 175,
    T_CHARACTER = 176,
    T_BAD_CHARACTER = 177,
    T_ENCAPSED_AND_WHITESPACE = 178,
    T_CONSTANT_ENCAPSED_STRING = 179,
    T_EXIT = 180,
    T_IF = 181,
    T_ELSEIF = 182,
    T_ELSE = 183,
    T_ENDIF = 184,
    T_ECHO = 185,
    T_DO = 186,
    T_WHILE = 187,
    T_ENDWHILE = 188,
    T_FOR = 189,
    T_ENDFOR = 190,
    T_FOREACH = 191,
    T_ENDFOREACH = 192,
    T_AS = 193,
    T_SWITCH = 194,
    T_ENDSWITCH = 195,
    T_CASE = 196,
    T_DEFAULT = 197,
    T_BREAK = 198,
    T_CONTINUE = 199,
    T_FUNCTION = 200,
    T_CONST = 201,
    T_RETURN = 202,
    T_GLOBAL = 203,
    T_STATIC = 204,
    T_VAR = 205,
    T_UNSET = 206,
    T_ISSET = 207,
    T_EMPTY = 208,
    T_CLASS = 209,
    T_EXTENDS = 210,
    T_OBJECT_OPERATOR = 211,
    T_DOUBLE_ARROW = 212,
    T_LIST = 213,
    T_ARRAY = 214,
    T_CLASS_C = 215,
    T_METHOD_C = 216,
    T_FUNC_C = 217,
    T_LINE = 218,
    T_FILE = 219,
    T_COMMENT = 220,
    T_DOC_COMMENT = 221,
    T_OPEN_TAG = 226,
    T_OPEN_TAG_WITH_ECHO = 227,
    T_CLOSE_TAG = 228,
    T_WHITESPACE = 229,
    T_START_HEREDOC = 230,
    T_END_HEREDOC = 231,
    T_DOLLAR_OPEN_CURLY_BRACES = 232,
    T_CURLY_OPEN = 233,
    T_DOUBLE_COLON = 234,
    T_PAAMAYIM_NEKUDOTAYIM = 234,
    T_TRY = 236,
    T_CATCH = 237,
    T_THROW = 238,
    T_INTERFACE = 239,
    T_IMPLEMENTS = 240,
    T_ABSTRACT = 241,
    T_FINAL = 242,
    T_PRIVATE = 243,
    T_PROTECTED = 244,
    T_PUBLIC = 245,
    T_BOOL_CAST = 285,
    T_INT_CAST = 288,
    T_DOUBLE_CAST = 294,
    T_STRING_CAST = 297,
    T_ARRAY_CAST = 299,
    T_OBJECT_CAST = 300,
    T_UNSET_CAST = 301,
    T_HALT_COMPILER = 351,
    Misc/user_error_handlers.php: SUCCEEDED
    Objects/conditional1.php: SUCCEEDED
    Objects/conditional2.php: SUCCEEDED
    Objects/conditional_base_class.php: SUCCEEDED
    Objects/constant_test.php: SUCCEEDED
    Objects/evaled_parent.php: SUCCEEDED
    Objects/getter_setter_bug28444.php: SUCCEEDED
    Objects/instanceof.php: SUCCEEDED
    Objects/new_via_unknown_ctor.php: SUCCEEDED
    Objects/object_creation_test.php: SUCCEEDED
    Objects/static_field_test.php: SUCCEEDED
    Objects/static_method_test.php: SUCCEEDED
    Objects/sys_class_const.php: SUCCEEDED
    Objects/this2.php: SUCCEEDED
    RegEx/ereg.php: SUCCEEDED
    RegEx/preg_match_unmatched_groups.php: SUCCEEDED
    RegEx/preg_replace_eval.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ab"01300 as"00da sd"0asdsa das asd 11asd a1sd a
    ab"01300 as"00da sd"0(aasdasdkjask,$a,\,\l,a,s,d,a,s,d,k,j,a,s,${120})(ldjaklsdjalk,$l,\,\l,d,j,a,k,l,s,d,j,a,l,${120})djdsa das asd 11asd a1sd a
    ab"01300 as"00da sd"0asdsa das asd 11asd a1sd a
    ab"01300 as"00da sd"0(aasdasdkjask,$a,\,\l,a,s,d,a,s,d,k,j,,,${120})(ldjaklsdjalk,$l,\,\l,d,j,a,k,l,s,d,j,,,${120})djdsa das asd 11asd a1sd a
    RegEx/regexp-sql.php: SUCCEEDED
    RegEx/Perl/cache.php: SUCCEEDED
    RegEx/Perl/grep1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      [3] => string(3) "1.5"
      [6] => string(5) "58.54"
    }
    Notice: preg_grep(): Array to string conversion in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\RegEx\Perl\__input.txt at expression on line 5, column 1.
    array(2)
    {
      [3] => string(3) "1.5"
      [6] => string(5) "58.54"
    }
    RegEx/Perl/grep2.php: SUCCEEDED
    RegEx/Perl/match1.php: SUCCEEDED
    RegEx/Perl/match10.php: SUCCEEDED
    RegEx/Perl/match2.php: SUCCEEDED
    RegEx/Perl/match3.php: SUCCEEDED
    RegEx/Perl/match4.php: SUCCEEDED
    RegEx/Perl/match5.php: SUCCEEDED
    RegEx/Perl/match6.php: SUCCEEDED
    RegEx/Perl/match7.php: SUCCEEDED
    RegEx/Perl/match8.php: SUCCEEDED
    RegEx/Perl/match9.php: SUCCEEDED
    RegEx/Perl/match_all1.php: SUCCEEDED
    RegEx/Perl/match_all2.php: SUCCEEDED
    RegEx/Perl/match_all3.php: SUCCEEDED
    RegEx/Perl/match_all4.php: SUCCEEDED
    RegEx/Perl/match_dollar.php: SUCCEEDED
    RegEx/Perl/overflow.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string("kfkaj +j k45´┐Ż´┐Ż´┐Ż´┐Ż´┐Ż3#$%^&kjakfjkaj|kfj")
    string("kfkaj +j k45�����3#$%^&kjakfjkaj|kfj")
    RegEx/Perl/quote1.php: SUCCEEDED
    RegEx/Perl/quote2.php: SUCCEEDED
    RegEx/Perl/quote3.php: SUCCEEDED
    RegEx/Perl/replace1.php: SUCCEEDED
    RegEx/Perl/replace2.php: SUCCEEDED
    RegEx/Perl/replace3.php: SUCCEEDED
    RegEx/Perl/replace4.php: SUCCEEDED
    RegEx/Perl/replace5.php: SUCCEEDED
    RegEx/Perl/replace6.php: SUCCEEDED
    RegEx/Perl/replace7.php: SUCCEEDED
    RegEx/Perl/replace8.php: SUCCEEDED
    RegEx/Perl/replace9.php: SUCCEEDED
    RegEx/Perl/replace_callback1.php: SUCCEEDED
    RegEx/Perl/replace_callback2.php: SUCCEEDED
    RegEx/Perl/split1.php: SUCCEEDED
    RegEx/Perl/split2.php: SUCCEEDED
    RegEx/Perl/split3.php: SUCCEEDED
    RegEx/Perl/split4.php: SUCCEEDED
    RegEx/Perl/split5.php: SUCCEEDED
    RegEx/Perl/ungreedy.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    aaa
    a
    aaa
    
    a
    aa
    aaa
    aa
    aaa
    aaa
    a
    aaa
    a
    a
    aa
    aaa
    aa
    aaa
    RegEx/Perl/unsuccessful-preg_match_all.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0
    4
    1
    4
    0
    4
    1
    7
    SPL/ArrayAccess_offsetExists.php: SUCCEEDED
    SPL/exceptions.php: SUCCEEDED
    Strings/addcslashes.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    \f\o\o\[ \]
    Issues a Warning:
    // echo addcslashes("zoo['.']", 'z..A');
    // output:  \zoo['\.']
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt at expression on line 4, column 1.
    
    Issues a Warning:
    // echo addcslashes("zoo['.']", 'z..A');
    // output:  \zoo['\.']
    Strings/addslashes.php: SUCCEEDED
    Strings/chunk_split.php: SUCCEEDED
    Strings/concat.php: SUCCEEDED
    Strings/count_chars.php: SUCCEEDED
    Strings/crc32.php: SUCCEEDED
    Strings/crypt.php: SUCCEEDED
    Strings/crypt2.php: SUCCEEDED
    Strings/echo.php: SUCCEEDED
    Strings/explode.php: SUCCEEDED
    Strings/get_html_translation_table.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <hr>[&] => &amp;
    [>] => &gt;
    [<] => &lt;
    ["] => &quot;
    <hr>Hallo &amp; &lt;Frau&gt; &amp; Kr&iuml;&iquest;&frac12;mer
    <hr>[&] => &amp;
    [>] => &gt;
    [<] => &lt;
    ["] => &quot;
    <hr>Hallo &amp; &lt;Frau&gt; &amp; Kr�mer
    Strings/nl2br.php: SUCCEEDED
    Strings/pack.php: SUCCEEDED
    Strings/pos.php: SUCCEEDED
    Strings/runtime-quotes.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    fread = (x''y"z)
    fgets = (x''y"z)
    file[0] = (x''y"z)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    
    Warning: fopen(runtime-quotes2.txt): failed to open stream: Permission denied in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt on line 33
    
    Warning: fwrite() expects parameter 1 to be resource, boolean given in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt on line 35
    fwrite = ()
    
    Warning: fputs() expects parameter 1 to be resource, boolean given in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt on line 38
    fputs = ()
    
    Warning: fclose() expects parameter 1 to be resource, boolean given in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt on line 41
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (x'y"z)
    fgets = (x'y"z)
    file[0] = (x'y"z)
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (a\'b"\\ca\)
    fgets = (a\'b"\\ca\'b"\\c)
    file[0] = (a\'b"\\ca\'b"\\c)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    e'e
    e''e
    e'e
    e'e
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    e'e
    e'e
    e'e
    e'e
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    fread = (x''y"z)
    fgets = (x''y"z)
    file[0] = (x''y"z)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    
    Warning: fopen(): Unable to access (D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\runtime-quotes2.txt): Permission denied in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt at expression on line 33, column 3.
    
    Warning: Cannot convert bool to resource implicitly in a call to function fwrite() in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt at expression on line 35, column 3.
    fwrite = ()
    
    Warning: Cannot convert bool to resource implicitly in a call to function fputs() in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt at expression on line 38, column 3.
    fputs = ()
    
    Warning: Cannot convert bool to resource implicitly in a call to function fclose() in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt at expression on line 41, column 3.
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (x'y"z)
    fgets = (x'y"z)
    file[0] = (x'y"z)
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (a\'b"\\ca\)
    fgets = (a\'b"\\ca\'b"\\c)
    file[0] = (a\'b"\\ca\'b"\\c)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    e'e
    e''e
    e'e
    e'e
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    e'e
    e'e
    e'e
    e'e
    Strings/sprintf.php: SUCCEEDED
    Strings/sprintf2.php: SUCCEEDED
    Strings/strtr.php: SUCCEEDED
    Strings/str_ireplace.php: SUCCEEDED
    Strings/str_word_count.php: SUCCEEDED
    Strings/substr_operations.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string(1) "b"
    string(1) "b"
    string(9) "baaaaaaaa"
    string(9) "aaaaaaaab"
    string(3) "aba"
    string(9) "aaaaaaaab"
    
    int(8)
    int(8)
    
    Warning: substr_count(): Length should be greater than 0 in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt on line 15
    bool(false)
    
    Warning: substr_count(): Offset value 10 exceeds string length in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt on line 17
    bool(false)
    
    Warning: substr_count(): Offset value 10 exceeds string length in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt on line 18
    bool(false)
    
    array(5) {
      [0]=>
      string(4) "baaa"
      [1]=>
      string(4) "baaa"
      [2]=>
      string(1) "b"
      [3]=>
      string(1) "b"
      [4]=>
      string(1) "b"
    }
    
    int(0)
    int(0)
    int(0)
    int(1)
    int(-1)
    string(1) "b"
    string(1) "b"
    string(9) "baaaaaaaa"
    string(9) "aaaaaaaab"
    string(3) "aba"
    string(9) "aaaaaaaab"
    
    integer(8)
    integer(8)
    integer(0)
    integer(0)
    integer(0)
    
    array(5)
    {
      [0] => string(4) "baaa"
      [1] => string(4) "baaa"
      [2] => string(1) "b"
      [3] => string(1) "b"
      [4] => string(1) "b"
    }
    
    integer(0)
    integer(0)
    integer(0)
    integer(1)
    integer(-1)
    Strings/wordwrap.php: SUCCEEDED
    Variables/advanced_serialize.php: SUCCEEDED
    Variables/arguments.php: SUCCEEDED
    Variables/bitwise.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "00"
    string(2) "31"
    string(2) "31"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    0
    0
    0
    5
    0
    5
    40
    5
    45
    string(48) "000000000000000000000000000000000000000000000000"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(14) "31323331323331"
    string(2) "30"
    string(14) "31323331323331"
    string(16) "3635343635343536"
    string(2) "30"
    string(16) "3635343635343536"
    string(14) "337a5e8be43d7a"
    string(14) "00002130120201"
    string(48) "337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42"
    string(16) "347d598ce33a7e77"
    string(16) "0200243214040100"
    string(48) "367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42"
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "00"
    string(2) "31"
    string(2) "31"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    0
    -9223372036854775808
    -9223372036854775808
    -9223372036854775803
    0
    -9223372036854775803
    40
    5
    45
    string(48) "000000000000000000000000000000000000000000000000"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(14) "31323331323331"
    string(2) "30"
    string(14) "31323331323331"
    string(16) "3635343635343536"
    string(2) "30"
    string(16) "3635343635343536"
    string(14) "337a5e8be43d7a"
    string(14) "00002130120201"
    string(48) "337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42"
    string(16) "347d598ce33a7e77"
    string(16) "0200243214040100"
    string(48) "367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42"
    Variables/comparisons.php: SUCCEEDED
    Variables/constant.php: SUCCEEDED
    Variables/extract.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    EXTR_PREFIX_ALL
    integer(4)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
      'prefix_non_existent' => integer(1)
    }
    <hr>EXTR_PREFIX_INVALID
    integer(5)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => integer(2)
      'non_existent' => integer(1)
      'prefix_' => integer(1)
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => 'hello'
    }
    <hr>EXTR_PREFIX_SAME
    integer(3)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'non_existent' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>EXTR_PREFIX_IF_EXISTS
    integer(3)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>
    EXTR_PREFIX_ALL
    integer(4)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
      'prefix_non_existent' => integer(1)
    }
    <hr>EXTR_PREFIX_INVALID
    integer(2)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_ad' => integer(2)
      'prefix_non_existent' => integer(1)
    }
    <hr>EXTR_PREFIX_SAME
    integer(4)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'non_existent' => integer(1)
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>EXTR_PREFIX_IF_EXISTS
    integer(3)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>
    Variables/func_get_args.php: SUCCEEDED
    Variables/is_number.php: SUCCEEDED
    Variables/serialize.php: SUCCEEDED
    Variables/var_dumping.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Array
    (
        [0] => 1
        [1] => 
        [2] => 1
        [3] => 1.2
        [4] => 
        [5] => asdas
        [6] => Array
            (
                [0] => 1
            )
    
        [7] => stdClass Object
            (
            )
    
        [8] => Resource id #1
    )
    array(9) {
      [0]=>
      bool(true)
      [1]=>
      bool(false)
      [2]=>
      int(1)
      [3]=>
      float(1.2)
      [4]=>
      NULL
      [5]=>
      string(5) "asdas"
      [6]=>
      array(1) {
        [0]=>
        int(1)
      }
      [7]=>
      object(stdClass)#1 (0) {
      }
      [8]=>
      resource(1) of type (stream)
    }
    array (
      0 => true,
      1 => false,
      2 => 1,
      3 => 1.2,
      4 => NULL,
      5 => 'asdas',
      6 => 
      array (
        0 => 1,
      ),
      7 => 
      stdClass::__set_state(array(
      )),
      8 => NULL,
    )
    array
    (
      [0] => 1
      [1] => 
      [2] => 1
      [3] => 1.2
      [4] => 
      [5] => asdas
      [6] => array
      (
        [0] => 1
      )
      [7] => stdClass object
      (
      )
      [8] => resource id #4
    )
    array(9)
    {
      [0] => bool(true)
      [1] => bool(false)
      [2] => integer(1)
      [3] => double(1.2)
      [4] => NULL
      [5] => string(5) "asdas"
      [6] => array(1)
      {
        [0] => integer(1)
      }
      [7] => object(stdClass)(0)
      {
      }
      [8] => resource(4) of type (stream)
    }
    array
    (
      '0' => true,
      '1' => false,
      '2' => 1,
      '3' => 1.2,
      '4' => NULL,
      '5' => 'asdas',
      '6' => array
      (
        '0' => 1
      ),
      '7' => class stdClass
      {
    
      },
      '8' => NULL
    )
    WorkItems/22016.php: SUCCEEDED
    WorkItems/22019.php: SUCCEEDED
    WorkItems/26052.php: SUCCEEDED
    WorkItems/26681.php: SUCCEEDED
    WorkItems/27377.php: SUCCEEDED
    WorkItems/27492.php: SUCCEEDED
    WorkItems/2787.php: SUCCEEDED
    Xml/005.php: SUCCEEDED
    Xml/006.php: SUCCEEDED
    Xml/007.php: SUCCEEDED
    Xml/008.php: SUCCEEDED
    Xml/009.php: SUCCEEDED
    Xml/011.php: SUCCEEDED
    Xml/013.php: SUCCEEDED
    Xml/017.php: SUCCEEDED
    Xml/018.php: SUCCEEDED
    Xml/019.php: SUCCEEDED
    Xml/020.php: SUCCEEDED
    Xml/021.php: SUCCEEDED
    Xml/025.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
      'foo' => 'foobar'
    }
    array
    {
      'html' => 'http://www.w3.org/1999/xhtml'
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
    }
    array
    {
      'html' => 'http://www.w3.org/1999/xhtml'
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'foo' => 'foobar'
      'baz' => 'foobarbaz'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
    }
    array
    {
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
      'baz' => 'foobarbaz'
      'foo' => 'foobar'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
      'baz' => 'foobarbaz'
      'foo' => 'foobar'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
    }
    array
    {
    }
    Xml/026.php: SUCCEEDED
    Xml/027.php: SUCCEEDED
    Xml/028.php: SUCCEEDED
    Xml/029.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    'Joe'
    integer(3)
    integer(0)
    'John'
    integer(3)
    integer(1)
    'Jane'
    integer(3)
    integer(0)
    'Joe'
    integer(1)
    integer(1)
    'John'
    integer(1)
    integer(1)
    'Jane'
    integer(1)
    integer(1)
    Xml/030.php: SUCCEEDED
    Xml/032.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    FALSE
    FALSE
    FALSE
    TRUE
    TRUE
    TRUE
    Xml/033.php: SUCCEEDED
    Xml/27377.php: SUCCEEDED
    Xml/bug26384.php: SUCCEEDED
    Xml/bug28721.php: SUCCEEDED
    Xml/bug28817.php: SUCCEEDED
    Xml/bug32615.php: SUCCEEDED
    Xml/bug33853.php: SUCCEEDED
    Xml/bug34276.php: SUCCEEDED
    Xml/bug35342.php: SUCCEEDED
    Xml/bug36756.php: SUCCEEDED
    Xml/bug37277.php: SUCCEEDED
    Xml/dom002.php: SUCCEEDED
    Xml/dom003.php: SUCCEEDED
    Xml/dom006.php: SUCCEEDED
    Xml/dom007.php: SUCCEEDED
    Xml/dom_set_attr_node.php: SUCCEEDED
    Xml/xslt001.php: SUCCEEDED
    Xml/xslt002.php: SUCCEEDED
    Xml/xslt003.php: SUCCEEDED
    Xml/xslt004.php: SUCCEEDED
    Xml/xslt005.php: SUCCEEDED
    Xml/xslt006.php: SUCCEEDED
    Xml/xslt007.php: SUCCEEDED
    Xml/xslt010.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test 10: EXSLT Support
      
      
      Test Date : 0001-12-31Z
        year                 : 1
        leap-year            : false
        month-in-year        : 12
        month-name           : December
        month-abbreviation   : Dec
        week-in-year         : 1
        day-in-year          : 365
        day-in-month         : 31
        day-of-week-in-month : 5
        day-in-week          : 2
        day-name             : Monday
        day-abbreviation     : Mon
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : 3000-01-31
        year                 : 3000
        leap-year            : false
        month-in-year        : 1
        month-name           : January
        month-abbreviation   : Jan
        week-in-year         : 5
        day-in-year          : 31
        day-in-month         : 31
        day-of-week-in-month : 5
        day-in-week          : 6
        day-name             : Friday
        day-abbreviation     : Fri
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : 2000-02-29
        year                 : 2000
        leap-year            : true
        month-in-year        : 2
        month-name           : February
        month-abbreviation   : Feb
        week-in-year         : 9
        day-in-year          : 60
        day-in-month         : 29
        day-of-week-in-month : 5
        day-in-week          : 3
        day-name             : Tuesday
        day-abbreviation     : Tue
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : 9990001-12-31Z
        year                 : 9990001
        leap-year            : false
        month-in-year        : 12
        month-name           : December
        month-abbreviation   : Dec
        week-in-year         : 1
        day-in-year          : 365
        day-in-month         : 31
        day-of-week-in-month : 5
        day-in-week          : 2
        day-name             : Monday
        day-abbreviation     : Mon
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : -0004-02-29
        year                 : -4
        leap-year            : true
        month-in-year        : 2
        month-name           : February
        month-abbreviation   : Feb
        week-in-year         : 9
        day-in-year          : 60
        day-in-month         : 29
        day-of-week-in-month : 5
        day-in-week          : 1
        day-name             : Sunday
        day-abbreviation     : Sun
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
    Test 10: EXSLT Support
    Warning: Cannot find the script or external object that implements prefix 'http://exslt.org/dates-and-times'. in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Xml\__input.txt at expression on line 14, column 3.
    
    Warning: Illegal string offset '-1' in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Phalanger.inc at expression on line 7, column 6.
    Xml/xslt011.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test 11: php:function Support
    
    Warning: XSLTProcessor::transformToXml(): A PHP Object cannot be converted to a XPath-string in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Xml\__input.txt on line 18
    <?xml version="1.0"?>
    foobar - secondArg
    foobar - 
    this is from an external DomDocument
    from the Input Document
    static
    Test 11: php:function Support
    <?xml version="1.0" encoding="utf-8"?>foobar - secondArg
    foobar - 
    this is from an external DomDocument
    from the Input Document
    static
    not a DomNode object
    Xml/xslt012.php: SUCCEEDED
    ================================================ FILE: Testing/Tests/TestLogs/TestLog 2010-06-13.htm ================================================ PHP.NET Compiler test log

    PHP.NET Compiler test log

    (92%) 792 succeeded, 72 failed
    Test ResultCompiler error outputExpected test result
    @PHP/classes/array_access_001.php: SUCCEEDED
    @PHP/classes/array_access_002.php: SUCCEEDED
    @PHP/classes/array_access_003.php: SUCCEEDED
    @PHP/classes/array_access_004.php: SUCCEEDED
    @PHP/classes/array_access_005.php: SUCCEEDED
    @PHP/classes/array_access_006.php: SUCCEEDED
    @PHP/classes/array_access_007.php: SUCCEEDED
    @PHP/classes/array_access_008.php: SUCCEEDED
    @PHP/classes/array_access_009.php: SUCCEEDED
    @PHP/classes/array_access_010.php: SUCCEEDED
    @PHP/classes/array_access_011.php: SUCCEEDED
    @PHP/classes/array_access_013.php: SUCCEEDED
    @PHP/classes/assign_op_property_001.php: SUCCEEDED
    @PHP/classes/autoload_001.php: SUCCEEDED
    @PHP/classes/autoload_002.php: SUCCEEDED
    @PHP/classes/autoload_003.php: SUCCEEDED
    @PHP/classes/autoload_005.php: SUCCEEDED
    @PHP/classes/autoload_006.php: SUCCEEDED
    @PHP/classes/bug23951.php: SUCCEEDED
    @PHP/classes/bug24399.php: SUCCEEDED
    @PHP/classes/bug24445.php: SUCCEEDED
    @PHP/classes/bug26737.php: SUCCEEDED
    @PHP/classes/bug27468.php: SUCCEEDED
    @PHP/classes/bug27504.php: SUCCEEDED
    @PHP/classes/class_example.php: SUCCEEDED
    @PHP/classes/class_stdclass.php: SUCCEEDED
    @PHP/classes/clone_001.php: SUCCEEDED
    @PHP/classes/clone_002.php: SUCCEEDED
    @PHP/classes/clone_003.php: SUCCEEDED
    @PHP/classes/clone_004.php: SUCCEEDED
    @PHP/classes/clone_006.php: SUCCEEDED
    @PHP/classes/constants_scope_001.php: SUCCEEDED
    @PHP/classes/ctor_dtor.php: SUCCEEDED
    @PHP/classes/ctor_dtor_inheritance.php: SUCCEEDED
    @PHP/classes/ctor_name_clash.php: SUCCEEDED
    @PHP/classes/dereferencing_001.php: SUCCEEDED
    @PHP/classes/destructor_and_echo.php: SUCCEEDED
    @PHP/classes/destructor_and_references.php: SUCCEEDED
    @PHP/classes/destructor_inheritance.php: SUCCEEDED
    @PHP/classes/destructor_visibility_003.php: SUCCEEDED
    @PHP/classes/factory_001.php: SUCCEEDED
    @PHP/classes/factory_and_singleton_001.php: SUCCEEDED
    @PHP/classes/factory_and_singleton_002.php: SUCCEEDED
    @PHP/classes/final.php: SUCCEEDED
    @PHP/classes/incdec_property_001.php: SUCCEEDED
    @PHP/classes/incdec_property_002.php: SUCCEEDED
    @PHP/classes/incdec_property_003.php: SUCCEEDED
    @PHP/classes/incdec_property_004.php: SUCCEEDED
    @PHP/classes/inheritance.php: SUCCEEDED
    @PHP/classes/inheritance_002.php: SUCCEEDED
    @PHP/classes/interfaces_001.php: SUCCEEDED
    @PHP/classes/interface_construct.php: SUCCEEDED
    @PHP/classes/interface_doubled.php: SUCCEEDED
    @PHP/classes/interface_implemented.php: SUCCEEDED
    @PHP/classes/iterators_001.php: SUCCEEDED
    @PHP/classes/iterators_002.php: SUCCEEDED
    @PHP/classes/iterators_003.php: SUCCEEDED
    @PHP/classes/iterators_004.php: SUCCEEDED
    @PHP/classes/iterators_006.php: SUCCEEDED
    @PHP/classes/iterators_007.php: SUCCEEDED
    @PHP/classes/object_reference_001.php: SUCCEEDED
    @PHP/classes/private_001.php: SUCCEEDED
    @PHP/classes/private_002.php: SUCCEEDED
    @PHP/classes/private_003.php: SUCCEEDED
    @PHP/classes/private_003b.php: SUCCEEDED
    @PHP/classes/private_004.php: SUCCEEDED
    @PHP/classes/private_004b.php: SUCCEEDED
    @PHP/classes/private_005.php: SUCCEEDED
    @PHP/classes/private_005b.php: SUCCEEDED
    @PHP/classes/private_006.php: SUCCEEDED
    @PHP/classes/private_006b.php: SUCCEEDED
    @PHP/classes/private_007.php: SUCCEEDED
    @PHP/classes/private_007b.php: SUCCEEDED
    @PHP/classes/private_members.php: SUCCEEDED
    @PHP/classes/private_redeclare.php: SUCCEEDED
    @PHP/classes/protected_001.php: SUCCEEDED
    @PHP/classes/protected_001b.php: SUCCEEDED
    @PHP/classes/protected_002.php: SUCCEEDED
    @PHP/classes/serialize_001.php: SUCCEEDED
    @PHP/classes/singleton_001.php: SUCCEEDED
    @PHP/classes/static_properties_001.php: SUCCEEDED
    @PHP/classes/type_hinting_001.php: SUCCEEDED
    @PHP/classes/type_hinting_003.php: SUCCEEDED
    @PHP/classes/visibility_000c.php: SUCCEEDED
    @PHP/classes/visibility_001c.php: SUCCEEDED
    @PHP/classes/visibility_002c.php: SUCCEEDED
    @PHP/classes/visibility_003a.php: SUCCEEDED
    @PHP/classes/visibility_003c.php: SUCCEEDED
    @PHP/classes/visibility_004a.php: SUCCEEDED
    @PHP/classes/visibility_004b.php: SUCCEEDED
    @PHP/classes/visibility_004c.php: SUCCEEDED
    @PHP/classes/visibility_005.php: SUCCEEDED
    @PHP/classes/__call_001.php: SUCCEEDED
    @PHP/classes/__set_data_corrupt.php: FAILED
    Script hung upNo errorsSuccess
    Expected test outputReal script output
    Unhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---> System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> PHP.Core.Debug+AssertException: Assertion failed: Add      public static readonly object foobar = (int)1; instead of AddConstant usage.
       at PHP.Core.Debug.Fail(String message)
       at PHP.Core.Reflection.PhpTypeDesc.AddConstant(String name, Object value)
       at <__input.txt>.foo.__PopulateTypeDesc(PhpTypeDesc )
       --- End of inner exception stack trace ---
       at System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
       at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)
       at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
       at System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters)
       at PHP.Core.Reflection.PhpTypeDesc.AutoPopulate()
       at PHP.Core.Reflection.PhpTypeDesc.ReflectMethods()
       at PHP.Core.Reflection.DTypeDesc.get_Methods()
       at PHP.Core.Reflection.DTypeDesc.GetMember[N,T](GetMemberDictionary`2 dictionary, N name, DTypeDesc context, LookupFlags flags, T& member)
       at PHP.Core.Reflection.DTypeDesc.GetMethod(Name methodName, DTypeDesc context, DRoutineDesc& method)
       at PHP.Core.Reflection.DObject.InvokeMethod(String name, DTypeDesc caller, ScriptContext context)
       at PHP.Core.Operators.InvokeMethod(Object x, String methodName, DTypeDesc caller, ScriptContext context)
       at <__input.txt>.<Script>.<Main>(ScriptContext <context>, Dictionary`2 <locals>, DObject , DTypeDesc , Boolean ) in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\classes\__input.txt:line 21
       at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)
       at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)
       --- End of inner exception stack trace ---
       at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)
       at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)
       at <Global>.Run(String[] )
    
    @PHP/classes/__set__get_001.php: SUCCEEDED
    @PHP/classes/__set__get_004.php: SUCCEEDED
    @PHP/classes/__set__get_005.php: SUCCEEDED
    @PHP/date/bug17988.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2002-06-25 12:18:48
    2002-06-25 14:18:48
    2002-06-25 13:18:48
    2002-06-25 12:18:48
    2002-06-25 18:18:48
    2002-06-25 14:18:48
    2002-06-25 14:18:48
    2002-06-25 18:18:48
    2002-06-25 10:18:48
    2002-06-25 17:18:48
    2002-06-25 11:18:48
    2002-06-25 17:48:48
    2002-06-25 10:48:48
    2002-06-25 14:18:48
    2002-06-25 14:18:48
    2002-06-25 13:18:48
    2002-06-25 12:18:48
    2002-06-25 18:18:48
    2002-06-25 14:18:48
    2002-06-25 14:18:48
    2002-06-25 18:18:48
    2002-06-25 10:18:48
    2002-06-25 17:18:48
    2002-06-25 11:18:48
    2002-06-25 17:48:48
    2002-06-25 10:48:48
    @PHP/date/bug26317.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2003-11-19 17:20:42
    2003-11-19 17:20:42
    2003-11-19 17:20:42
    2003-11-19 16:20:42
    2003-11-19 16:20:42
    2003-11-19 16:20:42
    @PHP/date/bug26320.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2003-11-19 12:30:42
    2003-11-19 13:30:42
    2003-11-19 12:30:42
    2003-11-19 12:30:42
    @PHP/date/bug28088.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    The following line rightly shows the correct date time:
    04/04/04 2145
    But the following line fails to show the correct date time:
    04/03/04 2245
    The following line rightly shows the correct date time:
    04/04/04 2345
    But the following line fails to show the correct date time:
    04/04/04 0045
    @PHP/date/bug28599.php: SUCCEEDED
    @PHP/date/bug29150.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2005-06-19 22:00:00
    2005-06-20 00:00:00
    @PHP/date/bug29585.php: SUCCEEDED
    @PHP/date/bug29595.php: SUCCEEDED
    @PHP/date/bug33056.php: SUCCEEDED
    @PHP/date/bug33452.php: SUCCEEDED
    @PHP/date/bug33562.php: SUCCEEDED
    @PHP/date/bug33563.php: SUCCEEDED
    @PHP/date/bug33578.php: SUCCEEDED
    @PHP/date/bug33869.php: SUCCEEDED
    @PHP/date/bug34676.php: SUCCEEDED
    @PHP/date/bug34771.php: SUCCEEDED
    @PHP/date/bug35143.php: SUCCEEDED
    @PHP/date/bug35414.php: SUCCEEDED
    @PHP/date/bug35422.php: SUCCEEDED
    @PHP/date/bug35425.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    integer(42)
    integer(1)
    integer(1)
    integer(1)
    integer(1)
    integer(0)
    integer(0)
    integer(1)
    integer(1)
    integer(31)
    integer(1104537661)
    integer(6)
    integer(53)
    integer(5)
    integer(2005)
    integer(0)
    integer(3600)
    integer(292)
    integer(1)
    integer(1)
    integer(1)
    integer(1)
    integer(0)
    integer(0)
    integer(1)
    integer(1)
    integer(31)
    integer(1104559261)
    integer(6)
    integer(53)
    integer(5)
    integer(2005)
    integer(0)
    integer(-18000)
    @PHP/date/bug35456.php: SUCCEEDED
    @PHP/date/bug35624.php: SUCCEEDED
    @PHP/date/bug35630.php: SUCCEEDED
    @PHP/date/bug35699.php: SUCCEEDED
    @PHP/date/bug35705.php: SUCCEEDED
    @PHP/date/bug35885.php: SUCCEEDED
    @PHP/date/bug35887.php: SUCCEEDED
    @PHP/date/date.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    c: 2003-01-23T13:20:59+01:00
    r: Thu, 23 Jan 2003 13:20:59 +0100
    c: 2003-01-23T13:20:59+01:00
    r: Thu, 23 Jan 2003 13:20:59 +0100
    c: 2003-01-23T12:20:59+00:00
    r: Thu, 23 Jan 2003 12:20:59 +0000
    c: 2003-01-23T13:20:59+01:00
    r: Thu, 23 Jan 2003 13:20:59 +0100
    @PHP/date/date_create-1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\date\__input.txt on line 28
    SKIP
    @PHP/date/date_create-2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\date\__input.txt on line 6
    SKIP
    @PHP/date/date_default_timezone_get-3.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Europe/Prague
    America/Chicago
    Europe/Rome
    America/Chicago
    @PHP/date/date_modify-1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\date\__input.txt on line 6
    SKIP
    @PHP/date/date_modify-2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\date\__input.txt on line 6
    SKIP
    @PHP/date/default-timezone-1.php: SUCCEEDED
    @PHP/date/default-timezone-2.php: SUCCEEDED
    @PHP/date/format-negative-timestamp.php: SUCCEEDED
    @PHP/date/strtotime.php: SUCCEEDED
    @PHP/date/timezone-configuration.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    1119125744
    1119125744
    1119125744
    1119125744
    1119129344
    1119125744
    @PHP/doc_examples/test001.php: SUCCEEDED
    @PHP/doc_examples/test002.php: SUCCEEDED
    @PHP/doc_examples/test003.php: SUCCEEDED
    @PHP/doc_examples/test004.php: SUCCEEDED
    @PHP/doc_examples/test005.php: SUCCEEDED
    @PHP/doc_examples/test006.php: SUCCEEDED
    @PHP/doc_examples/test007.php: SUCCEEDED
    @PHP/doc_examples/test008.php: SUCCEEDED
    @PHP/doc_examples/test009.php: SUCCEEDED
    @PHP/doc_examples/test010.php: SUCCEEDED
    @PHP/doc_examples/test011.php: SUCCEEDED
    @PHP/doc_examples/test013.php: SUCCEEDED
    @PHP/doc_examples/test014.php: SUCCEEDED
    @PHP/doc_examples/test015.php: SUCCEEDED
    @PHP/doc_examples/test016.php: SUCCEEDED
    @PHP/doc_examples/test017.php: SUCCEEDED
    @PHP/doc_examples/test018.php: SUCCEEDED
    @PHP/doc_examples/test019.php: SUCCEEDED
    @PHP/doc_examples/test020.php: SUCCEEDED
    @PHP/doc_examples/test021.php: SUCCEEDED
    @PHP/doc_examples/test022.php: SUCCEEDED
    @PHP/doc_examples/test023.php: SUCCEEDED
    @PHP/doc_examples/test024.php: SUCCEEDED
    @PHP/doc_examples/test025.php: SUCCEEDED
    @PHP/doc_examples/test026.php: SUCCEEDED
    @PHP/doc_examples/test027.php: SUCCEEDED
    @PHP/doc_examples/test028.php: SUCCEEDED
    @PHP/doc_examples/test029.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ´┐Żauky
    �auky
    @PHP/doc_examples/test030.php: SUCCEEDED
    @PHP/doc_examples/test031.php: SUCCEEDED
    @PHP/doc_examples/test032.php: SUCCEEDED
    @PHP/doc_examples/test033.php: SUCCEEDED
    @PHP/doc_examples/test034.php: SUCCEEDED
    @PHP/doc_examples/test035.php: SUCCEEDED
    @PHP/doc_examples/test036.php: SUCCEEDED
    @PHP/doc_examples/test037.php: SUCCEEDED
    @PHP/doc_examples/test038.php: SUCCEEDED
    @PHP/doc_examples/test039.php: SUCCEEDED
    @PHP/doc_examples/test040.php: SUCCEEDED
    @PHP/doc_examples/test041.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    call_user_func():
    hello world!
    Strict Standards: call_user_func(): Non-static method MyClass::myCallbackMethod() should not be called statically in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\doc_examples\__input.txt at expression on line 17, column 1.
    Hello World!Hello World!
    @PHP/doc_examples/test042.php: SUCCEEDED
    @PHP/doc_examples/test043.php: SUCCEEDED
    @PHP/doc_examples/test044.php: SUCCEEDED
    @PHP/doc_examples/test045.php: SUCCEEDED
    @PHP/doc_examples/test046.php: SUCCEEDED
    @PHP/doc_examples/test047.php: SUCCEEDED
    @PHP/doc_examples/test048.php: SUCCEEDED
    @PHP/doc_examples/test049.php: SUCCEEDED
    @PHP/doc_examples/test050.php: SUCCEEDED
    @PHP/doc_examples/test051.php: SUCCEEDED
    @PHP/doc_examples/test052.php: SUCCEEDED
    @PHP/doc_examples/test053.php: SUCCEEDED
    @PHP/doc_examples/test054.php: SUCCEEDED
    @PHP/doc_examples/test055.php: SUCCEEDED
    @PHP/doc_examples/test056.php: SUCCEEDED
    @PHP/doc_examples/test057.php: SUCCEEDED
    @PHP/doc_examples/test058.php: SUCCEEDED
    @PHP/doc_examples/test059.php: SUCCEEDED
    @PHP/doc_examples/test060.php: SUCCEEDED
    @PHP/doc_examples/test061.php: SUCCEEDED
    @PHP/doc_examples/test062.php: SUCCEEDED
    @PHP/doc_examples/test063.php: SUCCEEDED
    @PHP/doc_examples/test064.php: SUCCEEDED
    @PHP/doc_examples/test065.php: SUCCEEDED
    @PHP/doc_examples/test066.php: SUCCEEDED
    @PHP/doc_examples/test067.php: SUCCEEDED
    @PHP/doc_examples/test068.php: SUCCEEDED
    @PHP/doc_examples/test069.php: SUCCEEDED
    @PHP/doc_examples/test070.php: SUCCEEDED
    @PHP/doc_examples/test071.php: SUCCEEDED
    @PHP/doc_examples/test072.php: SUCCEEDED
    @PHP/doc_examples/test073.php: SUCCEEDED
    @PHP/doc_examples/test074.php: SUCCEEDED
    @PHP/doc_examples/test075.php: SUCCEEDED
    @PHP/doc_examples/test076.php: SUCCEEDED
    @PHP/doc_examples/test077.php: SUCCEEDED
    @PHP/doc_examples/test078.php: SUCCEEDED
    @PHP/doc_examples/test079.php: SUCCEEDED
    @PHP/doc_examples/test080.php: SUCCEEDED
    @PHP/doc_examples/test081.php: SUCCEEDED
    @PHP/doc_examples/test082.php: SUCCEEDED
    @PHP/doc_examples/test083.php: SUCCEEDED
    @PHP/doc_examples/test084.php: SUCCEEDED
    @PHP/doc_examples/test085.php: SUCCEEDED
    @PHP/doc_examples/test086.php: SUCCEEDED
    @PHP/doc_examples/test087.php: SUCCEEDED
    @PHP/doc_examples/test088.php: SUCCEEDED
    @PHP/doc_examples/test089.php: SUCCEEDED
    @PHP/doc_examples/test090.php: SUCCEEDED
    @PHP/doc_examples/test091.php: SUCCEEDED
    @PHP/doc_examples/test092.php: SUCCEEDED
    @PHP/doc_examples/test093.php: SUCCEEDED
    @PHP/doc_examples/test094.php: SUCCEEDED
    @PHP/doc_examples/test095.php: SUCCEEDED
    @PHP/doc_examples/test096.php: SUCCEEDED
    @PHP/doc_examples/test097.php: SUCCEEDED
    @PHP/doc_examples/test098.php: SUCCEEDED
    @PHP/doc_examples/test099.php: SUCCEEDED
    @PHP/doc_examples/test100.php: SUCCEEDED
    @PHP/doc_examples/test102.php: SUCCEEDED
    @PHP/doc_examples/test103.php: SUCCEEDED
    @PHP/doc_examples/test104.php: SUCCEEDED
    @PHP/doc_examples/test105.php: SUCCEEDED
    @PHP/doc_examples/test107.php: SUCCEEDED
    @PHP/doc_examples/test108.php: SUCCEEDED
    @PHP/doc_examples/test109.php: SUCCEEDED
    @PHP/doc_examples/test110.php: SUCCEEDED
    @PHP/doc_examples/test111.php: SUCCEEDED
    @PHP/doc_examples/test112.php: SUCCEEDED
    @PHP/doc_examples/test113.php: SUCCEEDED
    @PHP/doc_examples/test114.php: SUCCEEDED
    @PHP/doc_examples/test115.php: SUCCEEDED
    @PHP/doc_examples/test116.php: SUCCEEDED
    @PHP/doc_examples/test117.php: SUCCEEDED
    @PHP/doc_examples/test118.php: SUCCEEDED
    @PHP/doc_examples/test119.php: SUCCEEDED
    @PHP/doc_examples/test120.php: SUCCEEDED
    @PHP/doc_examples/test121.php: SUCCEEDED
    @PHP/doc_examples/test122.php: SUCCEEDED
    @PHP/doc_examples/test123.php: SUCCEEDED
    @PHP/doc_examples/test124.php: SUCCEEDED
    @PHP/doc_examples/test125.php: SUCCEEDED
    @PHP/doc_examples/test126.php: SUCCEEDED
    @PHP/doc_examples/test127.php: SUCCEEDED
    @PHP/doc_examples/test128.php: SUCCEEDED
    @PHP/doc_examples/test129.php: SUCCEEDED
    @PHP/doc_examples/test130.php: SUCCEEDED
    @PHP/doc_examples/test131.php: SUCCEEDED
    @PHP/doc_examples/test132.php: SUCCEEDED
    @PHP/doc_examples/test133.php: SUCCEEDED
    @PHP/doc_examples/test134.php: SUCCEEDED
    @PHP/doc_examples/test136.php: SUCCEEDED
    @PHP/doc_examples/test137.php: SUCCEEDED
    @PHP/doc_examples/test138.php: SUCCEEDED
    @PHP/doc_examples/test139.php: SUCCEEDED
    @PHP/doc_examples/test148.php: SUCCEEDED
    @PHP/doc_examples/test149.php: SUCCEEDED
    @PHP/doc_examples/test150.php: SUCCEEDED
    @PHP/doc_examples/test151.php: SUCCEEDED
    @PHP/doc_examples/test152.php: SUCCEEDED
    @PHP/doc_examples/test153.php: SUCCEEDED
    @PHP/doc_examples/test154.php: SUCCEEDED
    @PHP/doc_examples/test155.php: SUCCEEDED
    @PHP/doc_examples/test156.php: SUCCEEDED
    @PHP/doc_examples/test158.php: SUCCEEDED
    @PHP/lang/001.php: SUCCEEDED
    @PHP/lang/002.php: SUCCEEDED
    @PHP/lang/003.php: SUCCEEDED
    @PHP/lang/004.php: SUCCEEDED
    @PHP/lang/005.php: SUCCEEDED
    @PHP/lang/006.php: SUCCEEDED
    @PHP/lang/007.php: SUCCEEDED
    @PHP/lang/008.php: SUCCEEDED
    @PHP/lang/009.php: SUCCEEDED
    @PHP/lang/010.php: SUCCEEDED
    @PHP/lang/011.php: SUCCEEDED
    @PHP/lang/012.php: SUCCEEDED
    @PHP/lang/013.php: SUCCEEDED
    @PHP/lang/014.php: SUCCEEDED
    @PHP/lang/015.php: SUCCEEDED
    @PHP/lang/016.php: SUCCEEDED
    @PHP/lang/017.php: SUCCEEDED
    @PHP/lang/018.php: SUCCEEDED
    @PHP/lang/019.php: SUCCEEDED
    @PHP/lang/020.php: SUCCEEDED
    @PHP/lang/021.php: SUCCEEDED
    @PHP/lang/022.php: SUCCEEDED
    @PHP/lang/023.php: SUCCEEDED
    @PHP/lang/024.php: SUCCEEDED
    @PHP/lang/025.php: SUCCEEDED
    @PHP/lang/026.php: SUCCEEDED
    @PHP/lang/027.php: SUCCEEDED
    @PHP/lang/028.php: SUCCEEDED
    @PHP/lang/030.php: SUCCEEDED
    @PHP/lang/032.php: SUCCEEDED
    @PHP/lang/036.php: SUCCEEDED
    @PHP/lang/037.php: SUCCEEDED
    @PHP/lang/038.php: SUCCEEDED
    @PHP/lang/039.php: SUCCEEDED
    @PHP/lang/040.php: SUCCEEDED
    @PHP/lang/bison1.php: SUCCEEDED
    @PHP/lang/bug17115.php: SUCCEEDED
    @PHP/lang/bug18872.php: SUCCEEDED
    @PHP/lang/bug19943.php: SUCCEEDED
    @PHP/lang/bug20175.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    Deprecated: Assigning the return value of new by reference is deprecated in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\lang\__input.txt on line 110
    foo_static()
    foo_global()
    foo:1
    foo_static()
    foo:1
    bar_static()
    bar_global()
    bar:1
    bar_static()
    bar:1
    wow_static()
    wow_global()
    wow:1
    wow_static()
    wow:1
    oop_test()
    oop_static()
    oop_class()
    oop:1
    oop_static()
    oop:1
    oop_test()
    oop_static()
    oop:1
    foo_static()
    foo_global()
    foo:1
    foo_static()
    foo:1
    bar_static()
    bar_global()
    bar:1
    bar_static()
    bar_global()
    bar:2
    wow_static()
    wow_global()
    wow:1
    wow_static()
    wow:1
    oop_test()
    oop_static()
    oop_class()
    oop:1
    oop_static()
    oop:1
    oop_test()
    oop_static()
    oop:1
    D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\lang\__input.txt(110,4): warning PHP0181: Assigning the return value of new by reference is deprecated
    
    @PHP/lang/bug21094.php: SUCCEEDED
    @PHP/lang/bug21600.php: SUCCEEDED
    @PHP/lang/bug21669.php: SUCCEEDED
    @PHP/lang/bug21849.php: SUCCEEDED
    @PHP/lang/bug21961.php: SUCCEEDED
    @PHP/lang/bug22231.php: SUCCEEDED
    @PHP/lang/bug22367.php: SUCCEEDED
    @PHP/lang/bug22510.php: SUCCEEDED
    @PHP/lang/bug22592.php: SUCCEEDED
    @PHP/lang/bug22690.php: SUCCEEDED
    @PHP/lang/bug23279.php: SUCCEEDED
    @PHP/lang/bug23384.php: FAILED
    Script hung upNo errorsSuccess
    Expected test outputReal script output
    Unhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---> System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> PHP.Core.Debug+AssertException: Assertion failed: Add      public static readonly object HUN = (int)100; instead of AddConstant usage.
       at PHP.Core.Debug.Fail(String message)
       at PHP.Core.Reflection.PhpTypeDesc.AddConstant(String name, Object value)
       at <__input.txt>.Foo.__PopulateTypeDesc(PhpTypeDesc )
       --- End of inner exception stack trace ---
       at System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
       at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)
       at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
       at System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters)
       at PHP.Core.Reflection.PhpTypeDesc.AutoPopulate()
       at PHP.Core.Reflection.PhpTypeDesc.ReflectMethods()
       at PHP.Core.Reflection.DTypeDesc.get_Methods()
       at PHP.Core.Reflection.DTypeDesc.GetMember[N,T](GetMemberDictionary`2 dictionary, N name, DTypeDesc context, LookupFlags flags, T& member)
       at PHP.Core.Reflection.DTypeDesc.GetMethod(Name methodName, DTypeDesc context, DRoutineDesc& method)
       at PHP.Core.Operators.GetStaticMethodDesc(DTypeDesc requestedType, String methodName, DObject& self, DTypeDesc caller, ScriptContext context, Boolean quiet, Boolean removeFrame)
       at PHP.Core.Operators.InvokeStaticMethod(DTypeDesc type, Object methodName, DObject self, DTypeDesc caller, ScriptContext context)
       at <__input.txt>.<Script>.<Main>(ScriptContext <context>, Dictionary`2 <locals>, DObject , DTypeDesc , Boolean ) in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\lang\__input.txt:line 16
       at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)
       at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)
       --- End of inner exception stack trace ---
       at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)
       at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)
       at <Global>.Run(String[] )
    
    @PHP/lang/bug23489.php: SUCCEEDED
    @PHP/lang/bug23524.php: SUCCEEDED
    @PHP/lang/bug23922.php: SUCCEEDED
    @PHP/lang/bug24054.php: SUCCEEDED
    @PHP/lang/bug24396.php: SUCCEEDED
    @PHP/lang/bug24403.php: SUCCEEDED
    @PHP/lang/bug24436.php: SUCCEEDED
    @PHP/lang/bug24499.php: SUCCEEDED
    @PHP/lang/bug24640.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    double(1700000000000000089258092433847514422797596587883870563356951996370064178581143932836831337636761368874297554515902592900802289500112731978596146714137401870842258241575178866354311397451139753100927220499450359906637902366244989496126909662726242240784739940994096632824796638102733857671280980918272.0000000000)
    1.7E+300
    
    ------
    double(0.0000000000)
    1.7E-300
    
    ------
    double(17000000000000001584208052028780237480128823455860622330108867175329927830437888.0000000000)
    1.7E+79
    
    ------
    double(0.0000000000)
    1.7E-79
    
    ------
    double(169999999999999996096025832433329868941658043870400163508258284150340918121070592.0000000000)
    1.7E+80
    
    ------
    double(0.0000000000)
    1.7E-80
    
    ------
    double(1700000000000000013616404158611892038375594280539217794530130541777964808366194688.0000000000)
    1.7E+81
    
    ------
    double(0.0000000000)
    1.7E-81
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    1.6999810742106E-319
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    1.7000798873397E-320
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    1.6995858216939E-321
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    0
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    0
    
    ------
    double(1700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+300
    
    ------
    double(0.0000000000)
    1.70000000000003E-300
    
    ------
    double(17000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+79
    
    ------
    double(0.0000000000)
    1.70000000000001E-79
    
    ------
    double(170000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+80
    
    ------
    double(0.0000000000)
    1.70000000000001E-80
    
    ------
    double(1700000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+81
    
    ------
    double(0.0000000000)
    1.70000000000001E-81
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    1.69998107421056E-319
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    1.70007988733973E-320
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    1.69464516523548E-321
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    0
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    0
    
    ------
    @PHP/lang/bug24652.php: SUCCEEDED
    @PHP/lang/bug24658.php: SUCCEEDED
    @PHP/lang/bug24783.php: SUCCEEDED
    @PHP/lang/bug24926.php: SUCCEEDED
    @PHP/lang/bug25547.php: SUCCEEDED
    @PHP/lang/bug25652.php: SUCCEEDED
    @PHP/lang/bug25922.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Undefined index here: 'error'
    Undefined index here: ''
    @PHP/lang/bug26182.php: SUCCEEDED
    @PHP/lang/bug26696.php: SUCCEEDED
    @PHP/lang/bug26866.php: SUCCEEDED
    @PHP/lang/bug26869.php: SUCCEEDED
    @PHP/lang/bug27354.php: SUCCEEDED
    @PHP/lang/bug27439.php: SUCCEEDED
    @PHP/lang/bug27535.php: SUCCEEDED
    @PHP/lang/bug28213.php: SUCCEEDED
    @PHP/lang/bug28800.php: SUCCEEDED
    @PHP/lang/bug29566.php: SUCCEEDED
    @PHP/lang/bug29893.php: SUCCEEDED
    @PHP/lang/bug29944.php: SUCCEEDED
    @PHP/lang/bug30638.php: SUCCEEDED
    @PHP/lang/bug30726.php: SUCCEEDED
    @PHP/lang/bug30862.php: SUCCEEDED
    @PHP/lang/bug32924.php: SUCCEEDED
    @PHP/lang/bug35382.php: SUCCEEDED
    @PHP/lang/bug7515.php: SUCCEEDED
    @PHP/lang/each_binary_safety.php: SUCCEEDED
    @PHP/lang/error_2_exception_001.php: SUCCEEDED
    @PHP/lang/foreach_with_object_001.php: SUCCEEDED
    @PHP/lang/foreach_with_references_001.php: SUCCEEDED
    @PHP/lang/type_hints_001.php: SUCCEEDED
    @PHP/standard/array/001.php: SUCCEEDED
    @PHP/standard/array/003.php: SUCCEEDED
    @PHP/standard/array/004.php: SUCCEEDED
    @PHP/standard/array/005.php: SUCCEEDED
    @PHP/standard/array/008.php: SUCCEEDED
    @PHP/standard/array/array_change_key_case.php: SUCCEEDED
    @PHP/standard/array/array_chunk.php: SUCCEEDED
    @PHP/standard/array/array_count_values.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array(0) {
    }
    
    array(1) {
      [0]=>
      int(1)
    }
    
    array(1) {
      [1]=>
      int(1)
    }
    
    array(1) {
      [-1]=>
      int(1)
    }
    
    array(1) {
      [0]=>
      int(2)
    }
    
    array(2) {
      [0]=>
      int(1)
      [1]=>
      int(1)
    }
    
    array(1) {
      [1]=>
      int(2)
    }
    
    array(3) {
      [1]=>
      int(2)
      ["hello"]=>
      int(2)
      ["world"]=>
      int(1)
    }
    
    array(2) {
      ["hello"]=>
      int(2)
      ["world"]=>
      int(1)
    }
    
    array(3) {
      [""]=>
      int(2)
      ["world"]=>
      int(3)
      ["hello"]=>
      int(4)
    }
    
    array(1) {
      [0]=>
      int(1)
    }
    
    array(1) {
      [1]=>
      int(1)
    }
    array(0) [empty]
    
    array(1)
    {
      [0] => integer(1)
    }
    
    array(1)
    {
      [1] => integer(1)
    }
    
    array(1)
    {
      [-1] => integer(1)
    }
    
    array(1)
    {
      [0] => integer(2)
    }
    
    array(2)
    {
      [0] => integer(1)
      [1] => integer(1)
    }
    
    array(1)
    {
      [1] => integer(2)
    }
    
    array(3)
    {
      [1] => integer(2)
      ['hello'] => integer(2)
      ['world'] => integer(1)
    }
    
    array(2)
    {
      ['hello'] => integer(2)
      ['world'] => integer(1)
    }
    
    array(3)
    {
      [''] => integer(2)
      ['world'] => integer(3)
      ['hello'] => integer(4)
    }
    
    array(1)
    {
      [0] => integer(1)
    }
    
    array(1)
    {
      [1] => integer(1)
    }
    @PHP/standard/array/array_diff_1.php: SUCCEEDED
    @PHP/standard/array/array_diff_key.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ------ Test 1 --------
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 2 --------
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 3 --------
    array(6) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [2]=>
      int(4)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [2]=>
      int(4)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 4 --------
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 5 --------
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 6 --------
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 7 --------
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    ------ Test 8 --------
    array(6) {
      [0]=>
      int(0)
      [7]=>
      int(14)
      [2]=>
      int(4)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [0]=>
      int(0)
      [7]=>
      int(14)
      [2]=>
      int(4)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 9 --------
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    ------ Test 1 --------
    array(4)
    {
      [1] => &integer(2)
      [6] => &integer(12)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    array(4)
    {
      [1] => &integer(2)
      [6] => &integer(12)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    ------ Test 2 --------
    array(3)
    {
      [1] => &integer(2)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    array(3)
    {
      [1] => &integer(2)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    ------ Test 3 --------
    array(6)
    {
      [1] => &integer(2)
      [6] => &integer(12)
      [2] => &integer(4)
      [15] => &integer(30)
      [1200] => &integer(2400)
      [-2500] => &integer(-5000)
    }
    array(6)
    {
      [1] => &integer(2)
      [6] => &integer(12)
      [2] => &integer(4)
      [15] => &integer(30)
      [1200] => &integer(2400)
      [-2500] => &integer(-5000)
    }
    ------ Test 4 --------
    array(3)
    {
      [1] => &integer(2)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    array(3)
    {
      [1] => &integer(2)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    ------ Test 5 --------
    array(4)
    {
      [1] => &integer(2)
      [6] => &integer(12)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    array(4)
    {
      [1] => &integer(2)
      [6] => &integer(12)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    ------ Test 6 --------
    array(3)
    {
      [1] => &integer(2)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    array(3)
    {
      [1] => &integer(2)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    ------ Test 7 --------
    array(3)
    {
      [7] => &integer(14)
      [11] => &integer(22)
      [1100] => &integer(2200)
    }
    array(3)
    {
      [7] => &integer(14)
      [11] => &integer(22)
      [1100] => &integer(2200)
    }
    ------ Test 8 --------
    array(6)
    {
      [0] => &integer(0)
      [7] => &integer(14)
      [2] => &integer(4)
      [11] => &integer(22)
      [1100] => &integer(2200)
      [-2500] => &integer(-5000)
    }
    array(6)
    {
      [0] => &integer(0)
      [7] => &integer(14)
      [2] => &integer(4)
      [11] => &integer(22)
      [1100] => &integer(2200)
      [-2500] => &integer(-5000)
    }
    ------ Test 9 --------
    array(3)
    {
      [7] => &integer(14)
      [11] => &integer(22)
      [1100] => &integer(2200)
    }
    array(3)
    {
      [7] => &integer(14)
      [11] => &integer(22)
      [1100] => &integer(2200)
    }
    @PHP/standard/array/array_intersect_key.php: SUCCEEDED
    @PHP/standard/array/array_sum.php: SUCCEEDED
    @PHP/standard/array/array_walk_recursive.php: SUCCEEDED
    @PHP/standard/array/bug12776.php: SUCCEEDED
    @PHP/standard/array/bug14580.php: SUCCEEDED
    @PHP/standard/array/bug20381.php: SUCCEEDED
    @PHP/standard/array/bug20865.php: SUCCEEDED
    @PHP/standard/array/bug21182.php: SUCCEEDED
    @PHP/standard/array/bug21918.php: SUCCEEDED
    @PHP/standard/array/bug21998.php: SUCCEEDED
    @PHP/standard/array/bug22088.php: SUCCEEDED
    @PHP/standard/array/bug22463.php: SUCCEEDED
    @PHP/standard/array/bug23581.php: SUCCEEDED
    @PHP/standard/array/bug23788.php: SUCCEEDED
    @PHP/standard/array/bug24198.php: SUCCEEDED
    @PHP/standard/array/bug24220.php: SUCCEEDED
    @PHP/standard/array/bug24766.php: SUCCEEDED
    @PHP/standard/array/bug24897.php: SUCCEEDED
    @PHP/standard/array/bug24980.php: SUCCEEDED
    @PHP/standard/array/bug25359.php: SUCCEEDED
    @PHP/standard/array/bug25708.php: SUCCEEDED
    @PHP/standard/array/bug25758.php: SUCCEEDED
    @PHP/standard/array/bug26458.php: SUCCEEDED
    @PHP/standard/array/bug28974.php: SUCCEEDED
    @PHP/standard/array/bug29493.php: SUCCEEDED
    @PHP/standard/array/bug30266.php: SUCCEEDED
    @PHP/standard/array/bug30833.php: SUCCEEDED
    @PHP/standard/array/bug31158.php: SUCCEEDED
    @PHP/standard/array/bug31213.php: SUCCEEDED
    @PHP/standard/array/bug32021.php: SUCCEEDED
    @PHP/standard/array/bug33382.php: SUCCEEDED
    @PHP/standard/array/bug33989.php: SUCCEEDED
    @PHP/standard/array/bug34227.php: SUCCEEDED
    @PHP/standard/array/bug34982.php: SUCCEEDED
    @PHP/standard/array/bug35014.php: SUCCEEDED
    @PHP/standard/array/bug35022.php: SUCCEEDED
    @PHP/standard/array/bug35821.php: SUCCEEDED
    @PHP/standard/array/count_recursive.php: SUCCEEDED
    @PHP/standard/array/locale_sort.php: SUCCEEDED
    @PHP/standard/array/range.php: SUCCEEDED
    @PHP/standard/assert/assert.php: SUCCEEDED
    @PHP/standard/general_functions/001.php: SUCCEEDED
    @PHP/standard/general_functions/002.php: SUCCEEDED
    @PHP/standard/general_functions/003.php: SUCCEEDED
    @PHP/standard/general_functions/004.php: SUCCEEDED
    @PHP/standard/general_functions/005.php: SUCCEEDED
    @PHP/standard/general_functions/006.php: SUCCEEDED
    @PHP/standard/general_functions/007.php: SUCCEEDED
    @PHP/standard/general_functions/009.php: SUCCEEDED
    @PHP/standard/general_functions/bug25038.php: SUCCEEDED
    @PHP/standard/general_functions/bug27678.php: SUCCEEDED
    @PHP/standard/general_functions/bug29038.php: SUCCEEDED
    @PHP/standard/general_functions/bug31190.php: SUCCEEDED
    @PHP/standard/general_functions/bug32647.php: SUCCEEDED
    @PHP/standard/general_functions/bug35229.php: SUCCEEDED
    @PHP/standard/general_functions/is_resource.php: SUCCEEDED
    @PHP/standard/math/abs.php: SUCCEEDED
    @PHP/standard/math/bug24142.php: SUCCEEDED
    @PHP/standard/math/bug25694.php: SUCCEEDED
    @PHP/standard/math/bug27646.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    double(INF-INF)
    'd:-INF;'
    double(INF-INF)
    double(INF-INF)
    'd:INF;'
    double(INF-INF)
    double(NaNInfini)
    'd:NAN;'
    double(NaNInfini)
    double(-Infinity)
    'd:-INF;'
    double(-Infinity)
    double(Infinity)
    'd:INF;'
    double(Infinity)
    double(NaN)
    'd:NAN;'
    double(NaN)
    @PHP/standard/math/bug30069.php: SUCCEEDED
    @PHP/standard/math/bug30695.php: SUCCEEDED
    @PHP/standard/math/floorceil.php: SUCCEEDED
    @PHP/standard/math/hexdec.php: SUCCEEDED
    @PHP/standard/math/log.php: SUCCEEDED
    @PHP/standard/math/pow.php: SUCCEEDED
    @PHP/standard/math/round.php: SUCCEEDED
    @PHP/standard/reg/001.php: SUCCEEDED
    @PHP/standard/reg/002.php: SUCCEEDED
    @PHP/standard/reg/003.php: SUCCEEDED
    @PHP/standard/reg/004.php: SUCCEEDED
    @PHP/standard/reg/005.php: SUCCEEDED
    @PHP/standard/reg/006.php: SUCCEEDED
    @PHP/standard/reg/007.php: SUCCEEDED
    @PHP/standard/reg/008.php: SUCCEEDED
    @PHP/standard/reg/009.php: SUCCEEDED
    @PHP/standard/reg/010.php: SUCCEEDED
    @PHP/standard/reg/011.php: SUCCEEDED
    @PHP/standard/reg/012.php: SUCCEEDED
    @PHP/standard/reg/013.php: SUCCEEDED
    @PHP/standard/reg/014.php: SUCCEEDED
    @PHP/standard/reg/015.php: SUCCEEDED
    @PHP/standard/reg/016.php: SUCCEEDED
    @PHP/standard/serialize/001.php: SUCCEEDED
    @PHP/standard/serialize/002.php: SUCCEEDED
    @PHP/standard/serialize/003.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    d:100;
    double(100.0000000000)
    
    d:51999999999999996980101120;
    double(51999999999999996980101120.0000000000)
    
    d:8.9999999999999995265585574287341141808127531476202420890331268310546875E-9;
    double(0.0000000090)
    d:100;
    double(100.0000000000)
    
    d:5.2000000000000006E+25;
    double(52000000000000000000000000.0000000000)
    
    d:9.0000000000000045E-09;
    double(0.0000000090)
    @PHP/standard/serialize/004.php: SUCCEEDED
    @PHP/standard/serialize/005.php: SUCCEEDED
    @PHP/standard/serialize/006.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    'O:3:"´┐Ż":1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    object
    {
      '´┐Ż' => '´┐Ż'
    }
    'a:1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    array
    {
      '´┐Ż' => '´┐Ż'
    }
    'O:3:"´┐Ż":1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    object
    {
      'ďż˝' => 'ďż˝'
    }
    'a:1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    array
    {
      'ďż˝' => 'ďż˝'
    }
    @PHP/standard/serialize/bug14293.php: SUCCEEDED
    @PHP/standard/serialize/bug21957.php: SUCCEEDED
    @PHP/standard/serialize/bug23298.php: SUCCEEDED
    @PHP/standard/serialize/bug24063.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0.1 0.1
    0.01 0.01
    0.001 0.001
    0.0001 0.0001
    1.0E-5 1.0E-5
    1.0E-6 1.0E-6
    1.0E-7 1.0E-7
    1.0E-8 1.0E-8
    1.0E-9 1.0E-9
    0.1 0.1
    0.01 0.01
    0.001 0.001
    0.0001 0.0001
    1E-05 1E-05
    1E-06 1E-06
    1E-07 1E-07
    1E-08 1E-08
    1E-09 1E-09
    @PHP/standard/serialize/bug25378.php: SUCCEEDED
    @PHP/standard/serialize/bug26762.php: SUCCEEDED
    @PHP/standard/serialize/bug27469.php: SUCCEEDED
    @PHP/standard/serialize/bug28325.php: SUCCEEDED
    @PHP/standard/serialize/bug30234.php: SUCCEEDED
    @PHP/standard/serialize/bug31402.php: SUCCEEDED
    @PHP/standard/serialize/bug31442.php: SUCCEEDED
    @PHP/standard/strings/add-and-stripcslashes.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    kaboemkara!
    foo\b\a\r\b\az
    \f\o\o\[ \]
    \zoo['\.']
    \abcd\e\f\g\h\i\j\k\l\m\n\o\pqrstuvwxy\z
    1
    5d
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\standard\strings\__input.txt at expression on line 3, column 1.
    
    kaboemkara!
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\standard\strings\__input.txt at expression on line 5, column 1.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\standard\strings\__input.txt at expression on line 6, column 1.
    
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\standard\strings\__input.txt at expression on line 8, column 1.
    
    1
    5d
    @PHP/standard/strings/add-and-stripslashes.php: SUCCEEDED
    @PHP/standard/strings/basename.php: SUCCEEDED
    @PHP/standard/strings/bin2hex.php: SUCCEEDED
    @PHP/standard/strings/bug20108.php: SUCCEEDED
    @PHP/standard/strings/bug20169.php: SUCCEEDED
    @PHP/standard/strings/bug20261.php: SUCCEEDED
    @PHP/standard/strings/bug20927.php: SUCCEEDED
    @PHP/standard/strings/bug21338.php: SUCCEEDED
    @PHP/standard/strings/bug21453.php: SUCCEEDED
    @PHP/standard/strings/bug21730.php: SUCCEEDED
    @PHP/standard/strings/bug21744.php: SUCCEEDED
    @PHP/standard/strings/bug22008.php: SUCCEEDED
    @PHP/standard/strings/bug22187.php: SUCCEEDED
    @PHP/standard/strings/bug22224.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      0 => 
      object
      {
      }
      1 => 
      object
      {
      }
    }
    @PHP/standard/strings/bug22227.php: SUCCEEDED
    @PHP/standard/strings/bug22904.php: SUCCEEDED
    @PHP/standard/strings/bug23650.php: SUCCEEDED
    @PHP/standard/strings/bug23894.php: SUCCEEDED
    @PHP/standard/strings/bug24098.php: SUCCEEDED
    @PHP/standard/strings/bug24208.php: SUCCEEDED
    @PHP/standard/strings/bug24281.php: SUCCEEDED
    @PHP/standard/strings/bug25671.php: SUCCEEDED
    @PHP/standard/strings/bug25707.php: SUCCEEDED
    @PHP/standard/strings/bug26878.php: SUCCEEDED
    @PHP/standard/strings/bug26973.php: SUCCEEDED
    @PHP/standard/strings/bug27276.php: SUCCEEDED
    @PHP/standard/strings/bug27278.php: SUCCEEDED
    @PHP/standard/strings/bug27295.php: SUCCEEDED
    @PHP/standard/strings/bug27457.php: SUCCEEDED
    @PHP/standard/strings/bug27675.php: SUCCEEDED
    @PHP/standard/strings/bug28386.php: SUCCEEDED
    @PHP/standard/strings/bug33076.php: SUCCEEDED
    @PHP/standard/strings/chr_ord.php: SUCCEEDED
    @PHP/standard/strings/chunk_split.php: SUCCEEDED
    @PHP/standard/strings/count_chars.php: SUCCEEDED
    @PHP/standard/strings/crc32.php: SUCCEEDED
    @PHP/standard/strings/explode.php: SUCCEEDED
    @PHP/standard/strings/implode.php: SUCCEEDED
    @PHP/standard/strings/md5.php: SUCCEEDED
    @PHP/standard/strings/md5raw.php: SUCCEEDED
    @PHP/standard/strings/nl2br.php: SUCCEEDED
    @PHP/standard/strings/sha1.php: SUCCEEDED
    @PHP/standard/strings/sha1raw.php: SUCCEEDED
    @PHP/standard/strings/sprintf_f.php: SUCCEEDED
    @PHP/standard/strings/strcspn.php: SUCCEEDED
    @PHP/standard/strings/strings001.php: SUCCEEDED
    @PHP/standard/strings/strpos.php: SUCCEEDED
    @PHP/standard/strings/strrev.php: SUCCEEDED
    @PHP/standard/strings/strripos.php: SUCCEEDED
    @PHP/standard/strings/strrpos.php: SUCCEEDED
    @PHP/standard/strings/strspn.php: SUCCEEDED
    @PHP/standard/strings/strstr.php: SUCCEEDED
    @PHP/standard/strings/strtoupper.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    cfbfbdcfbfbdcfbfbd
    cfafbdcfafbdcfafbd
    @PHP/standard/strings/strtr.php: SUCCEEDED
    @PHP/standard/strings/strval.php: SUCCEEDED
    @PHP/standard/strings/str_repeat.php: SUCCEEDED
    @PHP/standard/strings/str_shuffle.php: SUCCEEDED
    @PHP/standard/strings/str_word_count.php: SUCCEEDED
    @PHP/standard/strings/substr_count.php: SUCCEEDED
    @PHP/standard/strings/substr_replace.php: SUCCEEDED
    @PHP/standard/strings/wordwrap.php: SUCCEEDED
    @PHP/standard/time/001.php: SUCCEEDED
    @PHP/standard/time/idate.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    U: 1043324459
    Y: 2003
    z: 22
    y: 3
    m: 1
    n: 1
    d: 23
    j: 23
    H: 13
    G: 13
    h: 1
    g: 1
    i: 20
    s: 59
    t: 31
    w: 4
    L: 0
    B: 556
    I: 0
    W: 4
    U: 1043324459
    Y: 2003
    z: 22
    y: 3
    m: 1
    n: 1
    d: 23
    j: 23
    H: 12
    G: 12
    h: 12
    g: 12
    i: 20
    s: 59
    t: 31
    w: 4
    L: 0
    B: 556
    I: 0
    W: 4
    @PHP/strings/001.php: SUCCEEDED
    @PHP/strings/002.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    fprintf test 1:abcde
    20
    printf test 1:simple string
    printf test 2:42
    printf test 3:3.333333
    printf test 4:3.3333333333
    printf test 5:2.50      
    printf test 6:2.50000000
    printf test 7:0000002.50
    printf test 8:<                 foo>
    printf test 9:<bar                 >
    printf test 10: 123456789012345
    printf test 10:<h´┐Żyesterettsjustitiarius>
    printf test 11: 123456789012345678901234567890
    printf test 11:<    h´┐Żyesterettsjustitiarius>
    printf test 12:-12.34
    printf test 13:  -12
    printf test 14:@
    printf test 15:10101010
    printf test 16:aa
    printf test 17:AA
    printf test 18:        10101010
    printf test 19:              aa
    printf test 20:              AA
    printf test 21:0000000010101010
    printf test 22:00000000000000aa
    printf test 23:00000000000000AA
    printf test 24:abcde
    printf test 25:gazonk
    printf test 26:2 1
    printf test 27:3 1 2
    printf test 28:02  1
    printf test 29:2   1
    printf test 30:x
    vprintf test 1:2   1
    fprintf test 1:abcde
    20
    printf test 1:simple string
    printf test 2:42
    printf test 3:3.333333
    printf test 4:3.3333333333
    printf test 5:2.50      
    printf test 6:2.50000000
    printf test 7:0000002.50
    printf test 8:<                 foo>
    printf test 9:<bar                 >
    printf test 10: 123456789012345
    printf test 10:<h�yesterettsjustitiarius>
    printf test 11: 123456789012345678901234567890
    printf test 11:<    h�yesterettsjustitiarius>
    printf test 12:-12.34
    printf test 13:  -12
    printf test 14:@
    printf test 15:10101010
    printf test 16:aa
    printf test 17:AA
    printf test 18:        10101010
    printf test 19:              aa
    printf test 20:              AA
    printf test 21:0000000010101010
    printf test 22:00000000000000aa
    printf test 23:00000000000000AA
    printf test 24:abcde
    printf test 25:gazonk
    printf test 26:2 1
    printf test 27:3 1 2
    printf test 28:02  1
    printf test 29:2   1
    printf test 30:x
    vprintf test 1:2   1
    @PHP/strings/bug22592.php: SUCCEEDED
    Arrays/array1.php: SUCCEEDED
    Arrays/array_diff_intersect.php: SUCCEEDED
    Arrays/array_diff_intersect2.php: SUCCEEDED
    Arrays/array_diff_intersect3.php: SUCCEEDED
    Arrays/array_map.php: SUCCEEDED
    Arrays/array_merge_recursive.php: SUCCEEDED
    Arrays/array_reduce1.php: SUCCEEDED
    Arrays/array_reduce2.php: SUCCEEDED
    Arrays/array_slice.php: SUCCEEDED
    Arrays/array_sumprod.php: SUCCEEDED
    Arrays/array_unshift.php: SUCCEEDED
    Arrays/array_walk.php: SUCCEEDED
    Arrays/array_walk_recursive.php: SUCCEEDED
    Arrays/multisort.php: SUCCEEDED
    Arrays/optimizations.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    3
    4
    5
    a
    b
    c
    
    Warning: strtolower() expects parameter 1 to be string, array given in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Arrays\__input.txt on line 15
    
    cablo
    3
    4
    5
    a
    b
    c
    array
    cablo
    Arrays/recursion.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    f1:
    array(2) {
      ["a"]=>
      array(5) {
        ["a"]=>
        &array(3) {
          ["a"]=>
          &array(3) {
            ["a"]=>
            *RECURSION*
            [0]=>
            string(1) "y"
            [1]=>
            string(1) "z"
          }
          [0]=>
          string(1) "y"
          [1]=>
          string(1) "z"
        }
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        string(1) "x"
      }
      [0]=>
      string(1) "w"
    }
    f2:
    array(1) {
      ["A"]=>
      &array(2) {
        ["a"]=>
        &array(2) {
          ["a"]=>
          *RECURSION*
          [0]=>
          string(1) "z"
        }
        [0]=>
        string(1) "z"
      }
    }
    f3:
    array(2) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) {
          [0]=>
          *RECURSION*
          [1]=>
          string(1) "z"
        }
        [1]=>
        string(1) "z"
      }
      [1]=>
      string(1) "z"
    }
    f4:
    
    Warning: array_merge_recursive(): recursion detected in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Arrays\__input.txt on line 37
    array(1) {
      ["a"]=>
      &array(3) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
      }
    }
    f5:
    array(1) {
      ["a"]=>
      array(6) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        int(1)
        [4]=>
        int(2)
        [5]=>
        int(3)
      }
    }
    f6:
    array(1) {
      ["a"]=>
      array(2) {
        [0]=>
        string(2) "xx"
        [1]=>
        int(2)
      }
    }
    f7:
    array(1) {
      ["a"]=>
      array(1) {
        ["a"]=>
        array(1) {
          ["a"]=>
          &array(1) {
            ["a"]=>
            &array(1) {
              ["a"]=>
              *RECURSION*
            }
          }
        }
      }
    }
    f1:
    array(2)
    {
      ['a'] => array(5)
      {
        ['a'] => &array(3)
        {
          ['a'] => &array(3) [recursion]
          [0] => string(1) "y"
          [1] => string(1) "z"
        }
        [0] => integer(1)
        [1] => integer(2)
        [2] => integer(3)
        [3] => string(1) "x"
      }
      [0] => string(1) "w"
    }
    f2:
    array(1)
    {
      ['A'] => &array(2)
      {
        ['a'] => &array(2) [recursion]
        [0] => string(1) "z"
      }
    }
    f3:
    array(2)
    {
      [0] => &array(2) [recursion]
      [1] => string(1) "z"
    }
    f4:
    array(1)
    {
      ['a'] => array(6)
      {
        [0] => integer(1)
        [1] => integer(2)
        [2] => integer(3)
        [3] => integer(1)
        [4] => integer(2)
        [5] => integer(3)
      }
    }
    f5:
    array(1)
    {
      ['a'] => array(6)
      {
        [0] => integer(1)
        [1] => integer(2)
        [2] => integer(3)
        [3] => integer(1)
        [4] => integer(2)
        [5] => integer(3)
      }
    }
    f6:
    array(1)
    {
      ['a'] => array(2)
      {
        [0] => string(2) "xx"
        [1] => integer(2)
      }
    }
    f7:
    array(1)
    {
      ['a'] => &array(1)
      {
        ['a'] => &array(1) [recursion]
      }
    }
    Arrays/sort.php: SUCCEEDED
    Arrays/usort.php: SUCCEEDED
    Bugs/class_incompletepart.php: SUCCEEDED
    Bugs/division-by-zero.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    DIVISION
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt on line 6
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt on line 8
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt on line 10
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt on line 12
    bool(false)
    MODULO
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt on line 16
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt on line 18
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt on line 20
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt on line 22
    bool(false)
    DIVISION
    bool(false)
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt at expression on line 10, column 2.
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt at expression on line 12, column 2.
    bool(false)
    MODULO
    bool(false)
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt at expression on line 20, column 2.
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt at expression on line 22, column 2.
    bool(false)
    D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt(6,10): warning PHP0150: Division by zero
    D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt(8,9): warning PHP0150: Division by zero
    D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt(16,10): warning PHP0150: Division by zero
    D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt(18,9): warning PHP0150: Division by zero
    
    Bugs/function-in-unknown-class.php: SUCCEEDED
    Bugs/is_a_null_value.php: SUCCEEDED
    Bugs/preg-named-groups.php: SUCCEEDED
    Bugs/preg-replace-advanced.php: SUCCEEDED
    Bugs/preg-replace-range.php: SUCCEEDED
    Bugs/preg-replace.php: SUCCEEDED
    Bugs/preg-this-dynamic.php: FAILED
    Script hung upNo errorsSuccess
    Expected test outputReal script output
    Unhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---> PHP.Core.Debug+AssertException: Assertion failed: 
       at PHP.Core.Debug.Fail(String message)
       at PHP.Core.Debug.Assert(Boolean condition)
       at PHP.Core.RelativePath.ParseCanonical(String relativePath)
       at PHP.Core.Emit.TransientAssemblyBuilder.Build(String sourceCode, SourceCodeDescriptor descriptor, EvalKinds kind, CompilationContext context, ScriptContext scriptContext, DTypeDesc referringType, NamingContext namingContext, Boolean completeSource)
       at PHP.Core.DynamicCode.EvalInternal(String prefix, String code, String suffix, EvalKinds kind, ScriptContext scriptContext, Dictionary`2 localVariables, DObject self, DTypeDesc referringType, SourceCodeDescriptor descriptor, Boolean entireFile, NamingContext namingContext)
       at PHP.Core.DynamicCode.Eval(String code, Boolean synthetic, ScriptContext context, Dictionary`2 definedVariables, DObject self, DTypeDesc referringType, String callerRelativeSourcePath, Int32 line, Int32 column, Int32 containerId, NamingContext namingContext)
       at PHP.Library.PerlRegExp.Evaluator.ReplaceCodeExecute(Match m)
       at System.Text.RegularExpressions.RegexReplacement.Replace(MatchEvaluator evaluator, Regex regex, String input, Int32 count, Int32 startat)
       at System.Text.RegularExpressions.Regex.Replace(String input, MatchEvaluator evaluator, Int32 count)
       at PHP.Library.PerlRegExp.ReplaceInternal(DObject self, Dictionary`2 definedVariables, PerlRegExpConverter converter, PhpCallback callback, String str, Int32 limit, SourceCodeDescriptor sourceCodeDesc, Int32& count)
       at PHP.Library.PerlRegExp.SimpleReplace(DObject self, Dictionary`2 definedVariables, Object pattern, String replacement, PhpCallback callback, Object data, Int32 limit, SourceCodeDescriptor descriptor, Int32& count)
       at PHP.Library.PerlRegExp.Replace(DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, PhpCallback callback, Object data, Int32 limit, Int32& count)
       at PHP.Library.PerlRegExp.Replace(DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, Object data)
       at PHP.Dynamic.PhpNetClassLibrary.preg_replace(Object , PhpStack )
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <__input.txt>.a.a(ScriptContext ) in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt:line 16
       at <__input.txt>.a.<Mediator>(ScriptContext )
       at <__input.txt>.a.a(Object instance, PhpStack stack)
       at <__input.txt>.<Script>.<Main>(ScriptContext <context>, Dictionary`2 <locals>, DObject , DTypeDesc , Boolean ) in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt:line 19
       at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)
       at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)
       --- End of inner exception stack trace ---
       at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)
       at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)
       at <Global>.Run(String[] )
    
    Bugs/preg-this-dynamic2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    foo: ahoj
    foo: lidi
    foo: rozkladame
    foo: ahoj
    foo: lidi
    foo: rozkladame
    foo: ahoj
    foo: lidi
    foo: rozkladame
    
    Notice: Undefined variable: this.
    
    Error: Call to a member function foo() on a non-object.
    Bugs/preg-this.php: SUCCEEDED
    Bugs/preg-ungreedy-bugs.php: SUCCEEDED
    Bugs/preg-unkn.php: SUCCEEDED
    Compiler/abstracts.php: SUCCEEDED
    Compiler/assignments.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ---1---1float(-1.5)
    float(2.5)
    float(0.83333333333333)
    int(6)
    int(8)
    ---2---2float(8.8333333333333)
    float(8.8333333333333)
    float(8.8333333333333)
    int(8)
    int(8)
    ---3---3---4---4---5---5array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [1]=>
      array(1) {
        [2]=>
        array(1) {
          [3]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    ---6---6array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "u"
    }
    array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "v"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    ---7---7array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    ---8---8
    ---1---1double(-1.5)
    double(2.5)
    double(0.833333333333333)
    integer(6)
    integer(8)
    ---2---2double(8.83333333333333)
    double(8.83333333333333)
    double(8.83333333333333)
    integer(8)
    integer(8)
    ---3---3---4---4---5---5array(1)
    {
      [0] => array(1)
      {
        [0] => array(1)
        {
          [0] => array(3)
          {
            [0] => integer(1)
            [1] => integer(2)
            [2] => integer(3)
          }
        }
      }
    }
    array(1)
    {
      [0] => array(1)
      {
        [0] => array(1)
        {
          [0] => array(3)
          {
            [0] => integer(1)
            [1] => integer(2)
            [2] => integer(3)
          }
        }
      }
    }
    array(1)
    {
      [1] => array(1)
      {
        [2] => array(1)
        {
          [3] => array(3)
          {
            [0] => integer(1)
            [1] => integer(2)
            [2] => integer(3)
          }
        }
      }
    }
    ---6---6array(4)
    {
      [0] => integer(1)
      [1] => integer(2)
      [2] => integer(3)
      [3] => string(1) "u"
    }
    array(4)
    {
      [0] => integer(1)
      [1] => integer(2)
      [2] => integer(3)
      [3] => string(1) "v"
    }
    array(5)
    {
      [0] => integer(1)
      [1] => integer(2)
      [2] => integer(3)
      [3] => string(1) "w"
      [4] => string(1) "z"
    }
    array(5)
    {
      [0] => integer(1)
      [1] => integer(2)
      [2] => integer(3)
      [3] => string(1) "w"
      [4] => string(1) "z"
    }
    ---7---7array(1)
    {
      [0] => array(1)
      {
        [0] => array(1)
        {
          [0] => array(1)
          {
            [0] => &integer(10)
          }
        }
      }
    }
    array(1)
    {
      [0] => array(1)
      {
        [0] => array(1)
        {
          [0] => array(1)
          {
            [0] => &integer(10)
          }
        }
      }
    }
    ---8---8
    Compiler/assign_in_call.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    g1:
    f(x)
    u(x)
    'x'
    
    g2:
    f(x)
    u(x)
    'b'
    
    g3:
    f(x)
    u(x)
    'b'
    
    g4:
    f(x)
    u(x)
    'b'
    
    g5:
    f()
    u()
    integer(1)
    
    g6:
    f(3)
    u(3)
    integer(3)
    
    g7:
    f(2)
    u(10)
    integer(10)
    
    g8:
    f(1)
    f(1)
    f(1)
    u(1)
    u()
    u(1)
    
    g9:
    known:
    __get(p) = 0
    __set(p,1)
    f(1)
    unknown:
    __get(p) = 1
    __set(p,3)
    u(3)
    
    g10:
    Done.
    g1:
    f(x)
    u(x)
    'x'
    
    g2:
    f(x)
    u(x)
    'b'
    
    g3:
    f(x)
    u(x)
    'b'
    
    g4:
    f(x)
    u(x)
    'b'
    
    g5:
    f()
    u()
    integer(1)
    
    g6:
    f(3)
    u(3)
    integer(3)
    
    g7:
    f(2)
    u(10)
    integer(10)
    
    g8:
    f(1)
    f(1)
    f(1)
    u(1)
    u()
    u(1)
    
    g9:
    known:
    __get(p) = 0
    __set(p,1)
    __get(p) = 1
    f(1)
    unknown:
    __get(p) = 1
    __set(p,3)
    __get(p) = 3
    u(3)
    
    g10:
    Done.
    Compiler/auto_globals_001.php: SUCCEEDED
    Compiler/auto_globals_002.php: SUCCEEDED
    Compiler/auto_globals_003.php: SUCCEEDED
    Compiler/break_in_global_code.php: SUCCEEDED
    Compiler/chaining_test.php: SUCCEEDED
    Compiler/chain_ending_by_string_index.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        string(1) "f"
      }
    }
    array(1) {
      [0]=>
      string(4) "xubu"
    }
    object(C)#1 (1) {
      ["f"]=>
      string(4) "kuxu"
    }
    string(5) "helxo"
    string(5) "helxo"
    array(1)
    {
      [0] => array(1)
      {
        [0] => string(1) "f"
      }
    }
    array(1)
    {
      [0] => string(4) "bubu"
    }
    
    Warning: A string item used as a reference in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt at expression on line 19, column 1.
    object(C)(1)
    {
      ["f"] => string(4) "kuku"
    }
    
    Warning: A string item used as a reference in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt at expression on line 25, column 1.
    string(5) "hello"
    
    Warning: A string item used as a reference in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt at expression on line 31, column 1.
    string(5) "hello"
    Compiler/continue_in_global_code.php: SUCCEEDED
    Compiler/deep_copy.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array(1) {
      [0]=>
      &array(1) {
        [0]=>
        &array(1) {
          [0]=>
          *RECURSION*
        }
      }
    }
    array(1) {
      [0]=>
      &array(1) {
        [0]=>
        &array(1) {
          [0]=>
          *RECURSION*
        }
      }
    }
    array(2) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) {
          [0]=>
          *RECURSION*
          [1]=>
          int(1)
        }
        [1]=>
        int(1)
      }
      [1]=>
      int(1)
    }
    array(1) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) {
          [0]=>
          *RECURSION*
          [1]=>
          int(1)
        }
        [1]=>
        int(1)
      }
    }
    array(1)
    {
      [0] => &array(1) [recursion]
    }
    array(1)
    {
      [0] => &array(1) [recursion]
    }
    array(2)
    {
      [0] => &array(2) [recursion]
      [1] => integer(1)
    }
    array(1)
    {
      [0] => &array(1) [recursion]
    }
    Compiler/deep_copy_refbox.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Strict Standards: Only variables should be passed by reference in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt on line 42
    array
    {
      0 => integer(1)
    }
    
    Strict Standards: Only variables should be passed by reference in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt on line 45
    array
    {
      0 => integer(1)
    }
    
    Strict Standards: Only variables should be passed by reference in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt on line 49
    array
    {
      0 => integer(1)
    }
    
    Strict Standards: Only variables should be passed by reference in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt on line 52
    array
    {
      0 => integer(1)
    }
    array
    {
      0 => integer(1)
      1 => integer(1)
    }
    array
    {
      0 => integer(1)
      1 => integer(1)
    }
    array
    {
      0 => integer(1)
      1 => integer(1)
    }
    array
    {
      0 => integer(1)
      1 => integer(1)
    }
    Compiler/expr_init.php: SUCCEEDED
    Compiler/foreach1.php: SUCCEEDED
    Compiler/foreach_arrays.php: SUCCEEDED
    Compiler/for_loop.php: SUCCEEDED
    Compiler/function_002.php: SUCCEEDED
    Compiler/function_003.php: SUCCEEDED
    Compiler/function_004.php: SUCCEEDED
    Compiler/function_call.php: SUCCEEDED
    Compiler/if_statement.php: SUCCEEDED
    Compiler/indirect_001.php: SUCCEEDED
    Compiler/indirect_002.php: SUCCEEDED
    Compiler/indirect_003.php: SUCCEEDED
    Compiler/indirect_004.php: SUCCEEDED
    Compiler/indirect_005.php: SUCCEEDED
    Compiler/indirect_007.php: SUCCEEDED
    Compiler/indirect_global.php: SUCCEEDED
    Compiler/inheritance.php: SUCCEEDED
    Compiler/inheritance2.php: SUCCEEDED
    Compiler/isset_unset_001.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Testing x in global code:  <br>
    1 <br>
     <br>
    Testing x (object) in optimized function:  <br>
    1 <br>
     <br>
    Testing x (PhpReference) in optimized function:  <br>
    1 <br>
     <br>
    
    Notice: Undefined variable: y in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt on line 29
    Testing $$x (created at runtime) in optimized function:  <br>
    1 <br>
    Testing x in global code:  <br>
    1 <br>
     <br>
    Testing x (object) in optimized function:  <br>
    1 <br>
     <br>
    Testing x (PhpReference) in optimized function:  <br>
    1 <br>
     <br>
    Testing $$x (created at runtime) in optimized function:  <br>
    1 <br>
    Compiler/null_hints.php: SUCCEEDED
    Compiler/switch.php: SUCCEEDED
    Compiler/ternary_ex.php: SUCCEEDED
    Compiler/typehint_check.php: SUCCEEDED
    Compiler/Inclusions/include2.php: SUCCEEDED
    Compiler/Inclusions/include3.php: SUCCEEDED
    Compiler/Inclusions/include6.php: SUCCEEDED
    Compiler/Inclusions/include_test.php: SUCCEEDED
    Compiler/Inclusions/script.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t01.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t02.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t03.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t04.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t05.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t08.php: SUCCEEDED
    Compiler/PseudoConst/parent.php: SUCCEEDED
    Compiler/PseudoConst/parent2.php: SUCCEEDED
    Compiler/PseudoConst/self.php: SUCCEEDED
    Compiler/PseudoConst/t01.php: SUCCEEDED
    Compiler/PseudoConst/t02.php: SUCCEEDED
    Compiler/PseudoConst/t03.php: SUCCEEDED
    Compiler/PseudoConst/t04.php: SUCCEEDED
    Compiler/PseudoConst/t05.php: SUCCEEDED
    Compiler/PseudoConst/t06.php: SUCCEEDED
    Compiler/PseudoConst/t07.php: SUCCEEDED
    Compiler/PseudoConst/t08.php: SUCCEEDED
    Compiler/PseudoConst/t09.php: SUCCEEDED
    Compiler/PseudoConst/t10.php: SUCCEEDED
    Compiler/PseudoConst/t11.php: SUCCEEDED
    Compiler/PseudoConst/_class_.php: SUCCEEDED
    Compiler/PseudoConst/_function_.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Notice: Undefined variable: a in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\PseudoConst\__input.txt on line 11
    g
    g
    Compiler/Unreachable/t13.php: SUCCEEDED
    DateTime/strftime.php: SUCCEEDED
    DateTime/strtotime1.php: SUCCEEDED
    DateTime/strtotime2.php: SUCCEEDED
    DateTime/strtotime3.php: SUCCEEDED
    DateTime/strtotime4.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0: 00:00:00 01/01/2005
    1: 01:00:00 01/01/2005
    2: 02:00:00 01/01/2005
    3: 03:00:00 01/01/2005
    4: 04:00:00 01/01/2005
    5: 05:00:00 01/01/2005
    6: 06:00:00 01/01/2005
    7: 07:00:00 01/01/2005
    8: 08:00:00 01/01/2005
    9: 09:00:00 01/01/2005
    10: 10:00:00 01/01/2005
    11: 11:00:00 01/01/2005
    12: 12:00:00 01/01/2005
    13: 13:00:00 01/01/2005
    14: 14:00:00 01/01/2005
    15: 15:00:00 01/01/2005
    16: 16:00:00 01/01/2005
    17: 17:00:00 01/01/2005
    18: 18:00:00 01/01/2005
    19: 19:00:00 01/01/2005
    20: 20:00:00 01/01/2005
    21: 21:00:00 01/01/2005
    22: 22:00:00 01/01/2005
    23: 23:00:00 01/01/2005
    24: 00:00:00 01/02/2005
    0am: error
    1am: 01:00:00 01/01/2005
    2am: 02:00:00 01/01/2005
    3am: 03:00:00 01/01/2005
    4am: 04:00:00 01/01/2005
    5am: 05:00:00 01/01/2005
    6am: 06:00:00 01/01/2005
    7am: 07:00:00 01/01/2005
    8am: 08:00:00 01/01/2005
    9am: 09:00:00 01/01/2005
    10am: 10:00:00 01/01/2005
    11am: 11:00:00 01/01/2005
    12am: 00:00:00 01/01/2005
    13am: error
    14am: error
    15am: error
    16am: error
    17am: error
    18am: error
    19am: error
    20am: error
    21am: error
    22am: error
    23am: error
    24am: error
    0pm: error
    1pm: 13:00:00 01/01/2005
    2pm: 14:00:00 01/01/2005
    3pm: 15:00:00 01/01/2005
    4pm: 16:00:00 01/01/2005
    5pm: 17:00:00 01/01/2005
    6pm: 18:00:00 01/01/2005
    7pm: 19:00:00 01/01/2005
    8pm: 20:00:00 01/01/2005
    9pm: 21:00:00 01/01/2005
    10pm: 22:00:00 01/01/2005
    11pm: 23:00:00 01/01/2005
    12pm: 12:00:00 01/01/2005
    13pm: error
    14pm: error
    15pm: error
    16pm: error
    17pm: error
    18pm: error
    19pm: error
    20pm: error
    21pm: error
    22pm: error
    23pm: error
    24pm: error
    0: 00:00:00 01/01/2005
    1: 01:00:00 01/01/2005
    2: 02:00:00 01/01/2005
    3: 03:00:00 01/01/2005
    4: 04:00:00 01/01/2005
    5: 05:00:00 01/01/2005
    6: 06:00:00 01/01/2005
    7: 07:00:00 01/01/2005
    8: 08:00:00 01/01/2005
    9: 09:00:00 01/01/2005
    10: 10:00:00 01/01/2005
    11: 11:00:00 01/01/2005
    12: 12:00:00 01/01/2005
    13: 13:00:00 01/01/2005
    14: 14:00:00 01/01/2005
    15: 15:00:00 01/01/2005
    16: 16:00:00 01/01/2005
    17: 17:00:00 01/01/2005
    18: 18:00:00 01/01/2005
    19: 19:00:00 01/01/2005
    20: 20:00:00 01/01/2005
    21: 21:00:00 01/01/2005
    22: 22:00:00 01/01/2005
    23: 23:00:00 01/01/2005
    24: error
    0am: error
    1am: 01:00:00 01/01/2005
    2am: 02:00:00 01/01/2005
    3am: 03:00:00 01/01/2005
    4am: 04:00:00 01/01/2005
    5am: 05:00:00 01/01/2005
    6am: 06:00:00 01/01/2005
    7am: 07:00:00 01/01/2005
    8am: 08:00:00 01/01/2005
    9am: 09:00:00 01/01/2005
    10am: 10:00:00 01/01/2005
    11am: 11:00:00 01/01/2005
    12am: 00:00:00 01/01/2005
    13am: error
    14am: error
    15am: error
    16am: error
    17am: error
    18am: error
    19am: error
    20am: error
    21am: error
    22am: error
    23am: error
    24am: error
    0pm: error
    1pm: 13:00:00 01/01/2005
    2pm: 14:00:00 01/01/2005
    3pm: 15:00:00 01/01/2005
    4pm: 16:00:00 01/01/2005
    5pm: 17:00:00 01/01/2005
    6pm: 18:00:00 01/01/2005
    7pm: 19:00:00 01/01/2005
    8pm: 20:00:00 01/01/2005
    9pm: 21:00:00 01/01/2005
    10pm: 22:00:00 01/01/2005
    11pm: 23:00:00 01/01/2005
    12pm: 12:00:00 01/01/2005
    13pm: error
    14pm: error
    15pm: error
    16pm: error
    17pm: error
    18pm: error
    19pm: error
    20pm: error
    21pm: error
    22pm: error
    23pm: error
    24pm: error
    DateTime/strtotime5.php: SUCCEEDED
    DateTime/time.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    -189388800:-189475200 - 86400
    1964-01-01T00:00:00+0000
    1963-12-31T00:00:00+0000
    1964-06-06
    1963-06-06
    1964-01-06
    1133305200
    -189388800:-189475200 - 86400
    1964-01-01T00:00:00+0000
    1963-12-31T00:00:00+0000
    1964-06-06
    1963-06-06
    1964-01-06
    DateTime/timezones1.php: SUCCEEDED
    FileSystem/basename.php: SUCCEEDED
    FileSystem/basename2.php: SUCCEEDED
    FileSystem/chdir.php: SUCCEEDED
    FileSystem/csv.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    --- write ---
    72
    24
    44
    2
    6
    
    --- read ---
    "hello\n
    world";"aaa""bbb""ccc";"blah blah;";none;"tab\ttab";"space space"\n
    hh'ee;"ss\nsadasdasd s"\n
    """""""""""""""""""""";"""";;"""""";"xxx"""\n
    x\n
    "x\y"\n
    --- write ---
    72
    24
    44
    2
    6
    
    --- read ---
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    FileSystem/date.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <pre>[ARRAY
      [INT (0)] => [STRING: "A --> {PM}"]
      [INT (1)] => [STRING: "B --> {719}"]
      [INT (2)] => [STRING: "C --> {C}"]
      [INT (3)] => [STRING: "D --> {Sat}"]
      [INT (4)] => [STRING: "E --> {E}"]
      [INT (5)] => [STRING: "F --> {March}"]
      [INT (6)] => [STRING: "G --> {17}"]
      [INT (7)] => [STRING: "H --> {17}"]
      [INT (8)] => [STRING: "I --> {0}"]
      [INT (9)] => [STRING: "J --> {J}"]
      [INT (10)] => [STRING: "K --> {K}"]
      [INT (11)] => [STRING: "L --> {0}"]
      [INT (12)] => [STRING: "M --> {Mar}"]
      [INT (13)] => [STRING: "N --> {6}"]
      [INT (14)] => [STRING: "O --> {+0100}"]
      [INT (15)] => [STRING: "P --> {+01:00}"]
      [INT (16)] => [STRING: "Q --> {Q}"]
      [INT (17)] => [STRING: "R --> {R}"]
      [INT (18)] => [STRING: "S --> {th}"]
      [INT (19)] => [STRING: "U --> {984240978}"]
      [INT (20)] => [STRING: "V --> {V}"]
      [INT (21)] => [STRING: "W --> {10}"]
      [INT (22)] => [STRING: "X --> {X}"]
      [INT (23)] => [STRING: "Y --> {2001}"]
      [INT (24)] => [STRING: "Z --> {3600}"]
      [INT (25)] => [STRING: "a --> {pm}"]
      [INT (26)] => [STRING: "b --> {b}"]
      [INT (27)] => [STRING: "c --> {2001-03-10T17:16:18+01:00}"]
      [INT (28)] => [STRING: "d --> {10}"]
      [INT (29)] => [STRING: "e --> {Europe/Prague}"]
      [INT (30)] => [STRING: "f --> {f}"]
      [INT (31)] => [STRING: "g --> {5}"]
      [INT (32)] => [STRING: "h --> {05}"]
      [INT (33)] => [STRING: "i --> {16}"]
      [INT (34)] => [STRING: "j --> {10}"]
      [INT (35)] => [STRING: "k --> {k}"]
      [INT (36)] => [STRING: "l --> {Saturday}"]
      [INT (37)] => [STRING: "m --> {03}"]
      [INT (38)] => [STRING: "n --> {3}"]
      [INT (39)] => [STRING: "o --> {2001}"]
      [INT (40)] => [STRING: "p --> {p}"]
      [INT (41)] => [STRING: "q --> {q}"]
      [INT (42)] => [STRING: "r --> {Sat, 10 Mar 2001 17:16:18 +0100}"]
      [INT (43)] => [STRING: "s --> {18}"]
      [INT (44)] => [STRING: "t --> {31}"]
      [INT (45)] => [STRING: "u --> {000000}"]
      [INT (46)] => [STRING: "v --> {v}"]
      [INT (47)] => [STRING: "w --> {6}"]
      [INT (48)] => [STRING: "x --> {x}"]
      [INT (49)] => [STRING: "y --> {01}"]
      [INT (50)] => [STRING: "z --> {68}"]
    ]</pre>
    <pre>[ARRAY
      [INT (0)] => [STRING: "A --> {PM}"]
      [INT (1)] => [STRING: "B --> {719}"]
      [INT (2)] => [STRING: "C --> {C}"]
      [INT (3)] => [STRING: "D --> {Sat}"]
      [INT (4)] => [STRING: "E --> {E}"]
      [INT (5)] => [STRING: "F --> {March}"]
      [INT (6)] => [STRING: "G --> {17}"]
      [INT (7)] => [STRING: "H --> {17}"]
      [INT (8)] => [STRING: "I --> {0}"]
      [INT (9)] => [STRING: "J --> {J}"]
      [INT (10)] => [STRING: "K --> {K}"]
      [INT (11)] => [STRING: "L --> {0}"]
      [INT (12)] => [STRING: "M --> {Mar}"]
      [INT (13)] => [STRING: "N --> {6}"]
      [INT (14)] => [STRING: "O --> {+0100}"]
      [INT (15)] => [STRING: "P --> {+01:00}"]
      [INT (16)] => [STRING: "Q --> {Q}"]
      [INT (17)] => [STRING: "R --> {R}"]
      [INT (18)] => [STRING: "S --> {th}"]
      [INT (19)] => [STRING: "U --> {984240978}"]
      [INT (20)] => [STRING: "V --> {V}"]
      [INT (21)] => [STRING: "W --> {10}"]
      [INT (22)] => [STRING: "X --> {X}"]
      [INT (23)] => [STRING: "Y --> {2001}"]
      [INT (24)] => [STRING: "Z --> {3600}"]
      [INT (25)] => [STRING: "a --> {pm}"]
      [INT (26)] => [STRING: "b --> {b}"]
      [INT (27)] => [STRING: "c --> {2001-03-10T17:16:18+01:00}"]
      [INT (28)] => [STRING: "d --> {10}"]
      [INT (29)] => [STRING: "e --> {Europe/Prague}"]
      [INT (30)] => [STRING: "f --> {f}"]
      [INT (31)] => [STRING: "g --> {5}"]
      [INT (32)] => [STRING: "h --> {05}"]
      [INT (33)] => [STRING: "i --> {16}"]
      [INT (34)] => [STRING: "j --> {10}"]
      [INT (35)] => [STRING: "k --> {k}"]
      [INT (36)] => [STRING: "l --> {Saturday}"]
      [INT (37)] => [STRING: "m --> {03}"]
      [INT (38)] => [STRING: "n --> {3}"]
      [INT (39)] => [STRING: "o --> {2001}"]
      [INT (40)] => [STRING: "p --> {p}"]
      [INT (41)] => [STRING: "q --> {q}"]
      [INT (42)] => [STRING: "r --> {Sat, 10 Mar 2001 17:16:18 +0100}"]
      [INT (43)] => [STRING: "s --> {18}"]
      [INT (44)] => [STRING: "t --> {31}"]
      [INT (45)] => [STRING: "u --> {u}"]
      [INT (46)] => [STRING: "v --> {v}"]
      [INT (47)] => [STRING: "w --> {6}"]
      [INT (48)] => [STRING: "x --> {x}"]
      [INT (49)] => [STRING: "y --> {01}"]
      [INT (50)] => [STRING: "z --> {68}"]
    ]</pre>
    FileSystem/date2.php: SUCCEEDED
    FileSystem/date3.php: SUCCEEDED
    FileSystem/date_unix.php: SUCCEEDED
    FileSystem/dirname.php: SUCCEEDED
    FileSystem/dirname2.php: SUCCEEDED
    FileSystem/disk_free_space.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    128 GB
    Drive C: 217 GB
    Drive D: 128 GB
    Drive E: 155 GB
    Drive F: 
    Warning: disk_free_space(): The device is not ready.
     in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt on line 14
    false
    128 GB
    Drive C: 217 GB
    Drive D: 128 GB
    Drive E: 155 GB
    Drive F: false
    FileSystem/disk_total_space.php: SUCCEEDED
    FileSystem/fgets.php: SUCCEEDED
    FileSystem/file.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <pre>[ARRAY
      [INT (0)] => [STRING: "this is a file with one EOLN
    "]
    ]</pre>
    <pre>[ARRAY
      [INT (0)] => [STRING: ""]
      [INT (1)] => [STRING: "This is a file with two EOLNs. First line is empty."]
    ]</pre>
    <pre>[ARRAY
      [INT (0)] => [STRING: "
    "]
      [INT (1)] => [STRING: "This is a file with two EOLNs. First line is empty.
    "]
    ]</pre>
    <pre>[ARRAY
      [INT (0)] => [STRING: "This is a file with two EOLNs. First line is empty."]
    ]</pre>
    <pre>[ARRAY
      [INT (0)] => [STRING: "this is a file WITHOUT an "end-of-line""]
    ]</pre>
    Line #<b>130</b> : &lt;/html&gt;
    <br />
    [this is a file with one EOLN{\n}
    ]
    <pre>[ARRAY
      [INT (0)] => [STRING: "this is a file with one EOLN
    "]
    ]</pre>
    <pre>[ARRAY
      [INT (0)] => [STRING: ""]
      [INT (1)] => [STRING: "This is a file with two EOLNs. First line is empty."]
    ]</pre>
    <pre>[ARRAY
      [INT (0)] => [STRING: "
    "]
      [INT (1)] => [STRING: "This is a file with two EOLNs. First line is empty.
    "]
    ]</pre>
    <pre>[ARRAY
      [INT (0)] => [STRING: ""]
      [INT (1)] => [STRING: "This is a file with two EOLNs. First line is empty."]
    ]</pre>
    <pre>[ARRAY
      [INT (0)] => [STRING: "this is a file WITHOUT an "end-of-line""]
    ]</pre>
    Line #<b>130</b> : &lt;/html&gt;
    <br />
    [this is a file with one EOLN{\n}
    ]
    FileSystem/filesize.php: SUCCEEDED
    FileSystem/file_exists.php: SUCCEEDED
    FileSystem/file_get_contents.php: SUCCEEDED
    FileSystem/fpassthru.php: SUCCEEDED
    FileSystem/fread.php: SUCCEEDED
    FileSystem/fread1.php: SUCCEEDED
    FileSystem/fread2.php: SUCCEEDED
    FileSystem/fseek.php: SUCCEEDED
    FileSystem/fsockopen.php: SUCCEEDED
    FileSystem/ftell.php: SUCCEEDED
    FileSystem/is_dir.php: SUCCEEDED
    FileSystem/is_executable.php: SUCCEEDED
    FileSystem/pathinfo.php: SUCCEEDED
    FileSystem/popen.php: SUCCEEDED
    FileSystem/readdir.php: SUCCEEDED
    FileSystem/readfile.php: SUCCEEDED
    FileSystem/readline.php: SUCCEEDED
    FileSystem/realpath.php: SUCCEEDED
    FileSystem/scandir.php: SUCCEEDED
    FileSystem/stat.php: SUCCEEDED
    FileSystem/stream_context_set_option.php: SUCCEEDED
    FileSystem/stream_copy_to_stream.php: SUCCEEDED
    FileSystem/stream_copy_to_stream2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <p>Read <b>rb</b>, Write <b>wb</b>
    
    
    COPIED: <b>10530</b>
    <p>Read <b>rb</b>, Write <b>wt</b>
    
    
    COPIED: <b>10492</b>
    <p>Read <b>rb</b>, Write <b>wb</b>
    
    
    COPIED: <b>10504</b>
    <p>Read <b>rb</b>, Write <b>wt</b>
    
    
    COPIED: <b>10504</b>
    FileSystem/testinc.php: SUCCEEDED
    FileSystem/touch.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Warning: touch(): Utime failed: No such file or directory in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt on line 8
    Sorry Could Not change modification time of touch.txt
    Warning: touch(): Utime failed: No such file or directory in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt on line 14
    
    Warning: touch(): Utime failed: No such file or directory in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt on line 16
    
    Warning: touch(): Utime failed: No such file or directory in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt on line 17
    <pre>[ARRAY
      [INT (0)] => [STRING: "January 24, 2010; [12:09:12] (12h) ctime test.txt (1264331352)"]
      [INT (1)] => [STRING: "January 24, 2010; [12:09:12] (12h) mtime test.txt (1264331352)"]
      [INT (2)] => [STRING: "January 24, 2010; [12:09:12] (12h) ctime touch.txt (1264331352)"]
      [INT (3)] => [STRING: "January 24, 2010; [12:09:12] (12h) mtime touch.txt (1264331352)"]
      [INT (4)] => [STRING: "January 24, 2010; [12:09:12] (12h) atime touch.txt (1264331352)"]
      [INT (5)] => [STRING: "January 24, 2010; [12:09:12] (12h) mtime summer.txt (1264331352)"]
      [INT (6)] => [STRING: "January 24, 2010; [12:09:12] (12h) mtime winter.txt (1264331352)"]
    ]</pre>
    Warning: touch(): Unable to access (D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\touch.txt): Permission denied in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 8, column 5.
    Sorry Could Not change modification time of touch.txt
    Warning: touch(): Unable to access (D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\touch.txt): Permission denied in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 14, column 1.
    
    Warning: touch(): Unable to access (D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\winter.txt): Permission denied in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 16, column 1.
    
    Warning: touch(): Unable to access (D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\summer.txt): Permission denied in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 17, column 1.
    <pre>[ARRAY
      [INT (0)] => [STRING: "January 24, 2010; [13:09:12] (13h) ctime test.txt (1264334952)"]
      [INT (1)] => [STRING: "January 24, 2010; [13:09:12] (13h) mtime test.txt (1264334952)"]
      [INT (2)] => [STRING: "January 24, 2010; [13:09:12] (13h) ctime touch.txt (1264334952)"]
      [INT (3)] => [STRING: "January 24, 2010; [13:09:12] (13h) mtime touch.txt (1264334952)"]
      [INT (4)] => [STRING: "January 24, 2010; [13:09:12] (13h) atime touch.txt (1264334952)"]
      [INT (5)] => [STRING: "January 24, 2010; [13:09:12] (13h) mtime summer.txt (1264334952)"]
      [INT (6)] => [STRING: "January 24, 2010; [13:09:12] (13h) mtime winter.txt (1264334952)"]
    ]</pre>
    Math/abs.php: SUCCEEDED
    Math/atan2.php: SUCCEEDED
    Math/base_convert.php: SUCCEEDED
    Math/bindec.php: SUCCEEDED
    Math/ceil.php: SUCCEEDED
    Math/cos.php: SUCCEEDED
    Math/decbin.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <pre>
    [double: 2294967295]
    10001000110010100110101111111111
    [double: 4294967296]
    0
    [double: 8589934590]
    11111111111111111111111111111110
    [double: 8589934590]
    11111111111111111111111111111110
    [double: 8589934591]
    11111111111111111111111111111111
    [Int: 1000.000.000.000]
    11010100101001010001000000000000
    <hr>(-1, -5435, 2.14, 0, 26)
    11111111111111111111111111111111
    11111111111111111110101011000101
    10
    0
    11010 
    </pre>
    <pre>
    [???: 2294967295]
    10001000110010100110101111111111
    [???: 4294967296]
    0
    [???: 8589934590]
    11111111111111111111111111111110
    [???: 8589934590]
    11111111111111111111111111111110
    [???: 8589934591]
    11111111111111111111111111111111
    [Int: 1000.000.000.000]
    11010100101001010001000000000000
    <hr>(-1, -5435, 2.14, 0, 26)
    11111111111111111111111111111111
    11111111111111111110101011000101
    10
    0
    11010 
    </pre>
    Math/dechex.php: SUCCEEDED
    Math/decoct.php: SUCCEEDED
    Math/deg2rad.php: SUCCEEDED
    Math/exp.php: SUCCEEDED
    Math/floor.php: SUCCEEDED
    Math/fmod.php: SUCCEEDED
    Math/hexdec.php: SUCCEEDED
    Math/max.php: SUCCEEDED
    Math/min.php: SUCCEEDED
    Math/modulo_warn.php: SUCCEEDED
    Math/octdec.php: SUCCEEDED
    Math/pow.php: SUCCEEDED
    Math/rad2deg.php: SUCCEEDED
    Math/round.php: SUCCEEDED
    Math/sin.php: SUCCEEDED
    Math/sqrt.php: SUCCEEDED
    Math/tan.php: SUCCEEDED
    Math/uniqid.php: SUCCEEDED
    Misc/calendar_extension.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0
    0
    2375840
    0
    14
    32
    2
    There are 31 days in August 2003
    There are 28 days in February 2003
    There are 29 days in February 2004
    There are 31 days in December 2034
    1748326
    1748324
    374867
    0
    322f32322f35373633
    ebe120e7f9e5ef20e4faf9f1e2
    ebe120e7f9e5ef20e427faf9f1e2
    ebe120e7f9e5ef20e420e0ecf4e9ed20faf9f1e2
    ebe120e7f9e5ef20e42720e0ecf4e9ed20faf9f1e2
    eb22e120e7f9e5ef20e4faf9f122e2
    e12720e7f9e5ef20e4faf9f122e2
    e12720e7f9e5ef20e427faf9f122e2
    e12720e7f9e5ef20e420e0ecf4e9ed20faf9f122e2
    e12720e7f9e5ef20e42720e0ecf4e9ed20faf9f122e2
    Error: Call to undefined function: 'frenchtojd' in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\__input.txt at expression on line 2, column 1.
    Misc/ini_parse.php: SUCCEEDED
    Misc/lexer.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    T_INLINE_HTML
    311 '\r\n'
    T_OPEN_TAG
    368 '&lt;?'
    T_WHITESPACE
    371 ' \r\n\r\n'
    T_FINAL
    345 'final'
    T_WHITESPACE
    371 ' '
    T_CLASS
    353 'class'
    T_WHITESPACE
    371 ' '
    T_STRING
    307 'A'
    T_WHITESPACE
    371 ' \r\n'
        '{'
    T_WHITESPACE
    371 ' \r\n  '
    T_FUNCTION
    334 'function'
    T_WHITESPACE
    371 ' '
    T_STRING
    307 '__get'
        '('
    T_VARIABLE
    309 '$x'
        ')'
    T_WHITESPACE
    371 ' \r\n  '
        '{'
    T_WHITESPACE
    371 ' \r\n    '
    T_VARIABLE
    309 '$x'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_START_HEREDOC
    372 '&lt;&lt;&lt;EOOOOOOOOOOOOOOT\r\n'
    T_ENCAPSED_AND_WHITESPACE
    314 '         &lt;&lt;&lt;hello\r\nEOOOOOOOOOOOOOOt;\r\nEOOOOOOOOOOOOOT;\r\n'
    T_END_HEREDOC
    373 'EOOOOOOOOOOOOOOT'
        ';'
    T_WHITESPACE
    371 '\r\n\r\n    '
        '$'
    T_VARIABLE
    309 '$y'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_ARRAY
    360 'array'
    T_WHITESPACE
    371 ' '
        '('
    T_LNUMBER
    305 '1'
        ','
    T_DNUMBER
    306 '100000000000000'
        ','
    T_DNUMBER
    306 '999999999999999999999999999999999'
        ','
    T_STRING
    307 'true'
        ','
    T_STRING
    307 'false'
        ')'
        ';'
    T_WHITESPACE
    371 '\r\n    '
        '$'
        '{'
        '&quot;'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
    T_DOLLAR_OPEN_CURLY_BRACES
    374 '${'
        '$'
        '{'
    T_CONSTANT_ENCAPSED_STRING
    315 '&quot;xxx&quot;'
        '}'
        '}'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
        '&quot;'
        '}'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_LNUMBER
    305 '1'
        ';'
    T_WHITESPACE
    371 '\r\n    '
        '$'
        '{'
        '&quot;'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
    T_DOLLAR_OPEN_CURLY_BRACES
    374 '${'
        '$'
        '{'
        '&quot;'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
    T_VARIABLE
    309 '$x'
    T_ENCAPSED_AND_WHITESPACE
    314 '-&gt;$$'
    T_VARIABLE
    309 '$x0xx'
        '&quot;'
        '}'
        '}'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
        '&quot;'
        '}'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_LNUMBER
    305 '1'
        ';'
    T_WHITESPACE
    371 '\r\n  '
        '}'
    T_WHITESPACE
    371 ' \r\n'
        '}'
    T_WHITESPACE
    371 '\r\n\r\n'
    T_CLOSE_TAG
    370 '?&gt;'
    '
    '
        '&lt;?'
        ' 
    
    '
        'final'
        ' '
        'class'
        ' '
        'A'
        ' 
    '
        '{'
        ' 
      '
        'function'
        ' '
    258
    258 '
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\__input.txt at expression on line 10, column 7.
    '
        '('
        '$x'
        ')'
        ' 
      '
        '{'
        ' 
        '
        '$x'
        ' '
        '='
        ' '
        '&lt;&lt;&lt;EOOOOOOOOOOOOOOT
    '
        '         &lt;&lt;&lt;'
        'hello'
        '
    '
        'EOOOOOOOOOOOOOOt;
    '
        'EOOOOOOOOOOOOOT;
    '
        'EOOOOOOOOOOOOOOT'
        ';'
        '
    
        '
        '$'
        '$y'
        ' '
        '='
        ' '
        'array'
        ' '
        '('
        '1'
        ','
        '100000000000000'
        ','
        '999999999999999999999999999999999'
        ','
        'true'
        ','
    256
    256 '
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\__input.txt at expression on line 10, column 7.
    '
        ')'
        ';'
        '
        '
        '$'
        '{'
        '&quot;'
        'x'
        '${'
        '$'
        '{'
    -29
    -29 '
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\__input.txt at expression on line 10, column 7.
    '
        '}'
        '}'
        'x'
        '&quot;'
        '}'
        ' '
        '='
        ' '
        '1'
        ';'
        '
        '
        '$'
        '{'
        '&quot;'
        'x'
        '${'
        '$'
        '{'
        '&quot;'
        'x'
        '$x'
        '-&gt;'
        '$'
        '$'
        '$x0xx'
        '&quot;'
        '}'
        '}'
        'x'
        '&quot;'
        '}'
        ' '
        '='
        ' '
        '1'
        ';'
        '
      '
        '}'
        ' 
    '
        '}'
        '
    
    '
        '?&gt;'
    Misc/locale.php: SUCCEEDED
    Misc/output2.php: SUCCEEDED
    Misc/stack_trace.php: FAILED
    Script hung upNo errorsSuccess
    Expected test outputReal script output
    Unhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---> System.IndexOutOfRangeException: Index was outside the bounds of the array.
       at PHP.Core.PhpStackFrame..ctor(ScriptContext context, StackFrame frame, FrameKinds kind)
       at PHP.Core.PhpStackTrace..ctor(ScriptContext context, StackTrace clrTrace)
       at PHP.Core.PhpStackTrace..ctor(ScriptContext context, Int32 skipFrames)
       at PHP.Library.Errors.Backtrace()
       at <stack_trace.inc>.<Script>.j(ScriptContext <context>) in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\stack_trace.inc:line 11
       at <stack_trace.inc>.<Script>.j(Object instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <stack_trace.inc>.<Script>.i(ScriptContext <context>) in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\stack_trace.inc:line 6
       at <stack_trace.inc>.<Script>.i(Object instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <^0>.<Global>.<?0>.h(ScriptContext <context>) in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\__input.txt:line 4
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack, DTypeDesc caller)
       at PHP.Core.PhpCallback.InvokeInternal(Object[] args)
       at PHP.Core.PhpCallback.Invoke(Object[] args)
       at PHP.Library.PhpArrays.Map(PhpCallback map, PhpArray[] arrays)
       at <^1>.<Global>.<?1>.Lambda_1(ScriptContext <context>) in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\__input.txt:line 1
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <__input.txt>.<Script>.f(ScriptContext <context>) in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\__input.txt:line 6
       at <__input.txt>.<Script>.f(Object instance, PhpStack stack)
       at <__input.txt>.<Script>.<Main>(ScriptContext <context>, Dictionary`2 <locals>, DObject , DTypeDesc , Boolean ) in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\__input.txt:line 18
       at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)
       at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)
       --- End of inner exception stack trace ---
       at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)
       at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)
       at <Global>.Run(String[] )
    
    Misc/tokens.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    T_REQUIRE_ONCE = 258,
    T_REQUIRE = 259,
    T_EVAL = 260,
    T_INCLUDE_ONCE = 261,
    T_INCLUDE = 262,
    T_LOGICAL_OR = 263,
    T_LOGICAL_XOR = 264,
    T_LOGICAL_AND = 265,
    T_PRINT = 266,
    T_SR_EQUAL = 267,
    T_SL_EQUAL = 268,
    T_XOR_EQUAL = 269,
    T_OR_EQUAL = 270,
    T_AND_EQUAL = 271,
    T_MOD_EQUAL = 272,
    T_CONCAT_EQUAL = 273,
    T_DIV_EQUAL = 274,
    T_MUL_EQUAL = 275,
    T_MINUS_EQUAL = 276,
    T_PLUS_EQUAL = 277,
    T_BOOLEAN_OR = 278,
    T_BOOLEAN_AND = 279,
    T_IS_NOT_IDENTICAL = 280,
    T_IS_IDENTICAL = 281,
    T_IS_NOT_EQUAL = 282,
    T_IS_EQUAL = 283,
    T_IS_GREATER_OR_EQUAL = 284,
    T_IS_SMALLER_OR_EQUAL = 285,
    T_SR = 286,
    T_SL = 287,
    T_INSTANCEOF = 288,
    T_UNSET_CAST = 289,
    T_BOOL_CAST = 290,
    T_OBJECT_CAST = 291,
    T_ARRAY_CAST = 292,
    T_STRING_CAST = 293,
    T_DOUBLE_CAST = 294,
    T_INT_CAST = 295,
    T_DEC = 296,
    T_INC = 297,
    T_CLONE = 298,
    T_NEW = 299,
    T_EXIT = 300,
    T_IF = 301,
    T_ELSEIF = 302,
    T_ELSE = 303,
    T_ENDIF = 304,
    T_LNUMBER = 305,
    T_DNUMBER = 306,
    T_STRING = 307,
    T_STRING_VARNAME = 308,
    T_VARIABLE = 309,
    T_NUM_STRING = 310,
    T_INLINE_HTML = 311,
    T_CHARACTER = 312,
    T_BAD_CHARACTER = 313,
    T_ENCAPSED_AND_WHITESPACE = 314,
    T_CONSTANT_ENCAPSED_STRING = 315,
    T_ECHO = 316,
    T_DO = 317,
    T_WHILE = 318,
    T_ENDWHILE = 319,
    T_FOR = 320,
    T_ENDFOR = 321,
    T_FOREACH = 322,
    T_ENDFOREACH = 323,
    T_DECLARE = 324,
    T_ENDDECLARE = 325,
    T_AS = 326,
    T_SWITCH = 327,
    T_ENDSWITCH = 328,
    T_CASE = 329,
    T_DEFAULT = 330,
    T_BREAK = 331,
    T_CONTINUE = 332,
    T_GOTO = 333,
    T_FUNCTION = 334,
    T_CONST = 335,
    T_RETURN = 336,
    T_TRY = 337,
    T_CATCH = 338,
    T_THROW = 339,
    T_USE = 340,
    T_GLOBAL = 341,
    T_PUBLIC = 342,
    T_PROTECTED = 343,
    T_PRIVATE = 344,
    T_FINAL = 345,
    T_ABSTRACT = 346,
    T_STATIC = 347,
    T_VAR = 348,
    T_UNSET = 349,
    T_ISSET = 350,
    T_EMPTY = 351,
    T_HALT_COMPILER = 352,
    T_CLASS = 353,
    T_INTERFACE = 354,
    T_EXTENDS = 355,
    T_IMPLEMENTS = 356,
    T_OBJECT_OPERATOR = 357,
    T_DOUBLE_ARROW = 358,
    T_LIST = 359,
    T_ARRAY = 360,
    T_CLASS_C = 361,
    T_METHOD_C = 362,
    T_FUNC_C = 363,
    T_LINE = 364,
    T_FILE = 365,
    T_COMMENT = 366,
    T_DOC_COMMENT = 367,
    T_OPEN_TAG = 368,
    T_OPEN_TAG_WITH_ECHO = 369,
    T_CLOSE_TAG = 370,
    T_WHITESPACE = 371,
    T_START_HEREDOC = 372,
    T_END_HEREDOC = 373,
    T_DOLLAR_OPEN_CURLY_BRACES = 374,
    T_CURLY_OPEN = 375,
    T_PAAMAYIM_NEKUDOTAYIM = 376,
    T_DOUBLE_COLON = 376,
    T_NAMESPACE = 377,
    T_NS_C = 378,
    T_DIR = 379,
    T_NS_SEPARATOR = 380,
    T_INCLUDE = 129,
    T_INCLUDE_ONCE = 130,
    T_EVAL = 131,
    T_REQUIRE = 132,
    T_REQUIRE_ONCE = 133,
    T_LOGICAL_OR = 136,
    T_LOGICAL_XOR = 137,
    T_LOGICAL_AND = 138,
    T_PRINT = 139,
    T_PLUS_EQUAL = 140,
    T_MINUS_EQUAL = 141,
    T_MUL_EQUAL = 142,
    T_DIV_EQUAL = 143,
    T_CONCAT_EQUAL = 144,
    T_MOD_EQUAL = 145,
    T_AND_EQUAL = 146,
    T_OR_EQUAL = 147,
    T_XOR_EQUAL = 148,
    T_SL_EQUAL = 149,
    T_SR_EQUAL = 150,
    T_BOOLEAN_OR = 151,
    T_BOOLEAN_AND = 152,
    T_IS_EQUAL = 153,
    T_IS_NOT_EQUAL = 154,
    T_IS_IDENTICAL = 155,
    T_IS_NOT_IDENTICAL = 156,
    T_IS_SMALLER_OR_EQUAL = 157,
    T_IS_GREATER_OR_EQUAL = 158,
    T_SL = 159,
    T_SR = 160,
    T_INC = 161,
    T_DEC = 162,
    T_NEW = 164,
    T_INSTANCEOF = 165,
    T_CLONE = 167,
    T_LNUMBER = 168,
    T_DNUMBER = 170,
    T_STRING = 171,
    T_STRING_VARNAME = 172,
    T_VARIABLE = 173,
    T_NUM_STRING = 174,
    T_INLINE_HTML = 175,
    T_CHARACTER = 176,
    T_BAD_CHARACTER = 177,
    T_ENCAPSED_AND_WHITESPACE = 178,
    T_CONSTANT_ENCAPSED_STRING = 179,
    T_EXIT = 180,
    T_IF = 181,
    T_ELSEIF = 182,
    T_ELSE = 183,
    T_ENDIF = 184,
    T_ECHO = 185,
    T_DO = 186,
    T_WHILE = 187,
    T_ENDWHILE = 188,
    T_FOR = 189,
    T_ENDFOR = 190,
    T_FOREACH = 191,
    T_ENDFOREACH = 192,
    T_AS = 193,
    T_SWITCH = 194,
    T_ENDSWITCH = 195,
    T_CASE = 196,
    T_DEFAULT = 197,
    T_BREAK = 198,
    T_CONTINUE = 199,
    T_FUNCTION = 200,
    T_CONST = 201,
    T_RETURN = 202,
    T_GLOBAL = 203,
    T_STATIC = 204,
    T_VAR = 205,
    T_UNSET = 206,
    T_ISSET = 207,
    T_EMPTY = 208,
    T_CLASS = 209,
    T_EXTENDS = 210,
    T_OBJECT_OPERATOR = 211,
    T_DOUBLE_ARROW = 212,
    T_LIST = 213,
    T_ARRAY = 214,
    T_CLASS_C = 215,
    T_METHOD_C = 216,
    T_FUNC_C = 217,
    T_LINE = 218,
    T_FILE = 219,
    T_COMMENT = 220,
    T_DOC_COMMENT = 221,
    T_OPEN_TAG = 226,
    T_OPEN_TAG_WITH_ECHO = 227,
    T_CLOSE_TAG = 228,
    T_WHITESPACE = 229,
    T_START_HEREDOC = 230,
    T_END_HEREDOC = 231,
    T_DOLLAR_OPEN_CURLY_BRACES = 232,
    T_CURLY_OPEN = 233,
    T_DOUBLE_COLON = 234,
    T_PAAMAYIM_NEKUDOTAYIM = 234,
    T_TRY = 236,
    T_CATCH = 237,
    T_THROW = 238,
    T_INTERFACE = 239,
    T_IMPLEMENTS = 240,
    T_ABSTRACT = 241,
    T_FINAL = 242,
    T_PRIVATE = 243,
    T_PROTECTED = 244,
    T_PUBLIC = 245,
    T_BOOL_CAST = 285,
    T_INT_CAST = 288,
    T_DOUBLE_CAST = 294,
    T_STRING_CAST = 297,
    T_ARRAY_CAST = 299,
    T_OBJECT_CAST = 300,
    T_UNSET_CAST = 301,
    T_HALT_COMPILER = 351,
    Misc/user_error_handlers.php: SUCCEEDED
    Objects/conditional1.php: SUCCEEDED
    Objects/conditional2.php: SUCCEEDED
    Objects/conditional_base_class.php: SUCCEEDED
    Objects/constant_test.php: SUCCEEDED
    Objects/evaled_parent.php: SUCCEEDED
    Objects/getter_setter_bug28444.php: SUCCEEDED
    Objects/instanceof.php: SUCCEEDED
    Objects/new_via_unknown_ctor.php: SUCCEEDED
    Objects/object_creation_test.php: SUCCEEDED
    Objects/static_field_test.php: SUCCEEDED
    Objects/static_method_test.php: SUCCEEDED
    Objects/sys_class_const.php: SUCCEEDED
    Objects/this2.php: SUCCEEDED
    RegEx/ereg.php: SUCCEEDED
    RegEx/preg_match_unmatched_groups.php: SUCCEEDED
    RegEx/preg_replace_eval.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ab"01300 as"00da sd"0asdsa das asd 11asd a1sd a
    ab"01300 as"00da sd"0(aasdasdkjask,$a,\,\l,a,s,d,a,s,d,k,j,a,s,${120})(ldjaklsdjalk,$l,\,\l,d,j,a,k,l,s,d,j,a,l,${120})djdsa das asd 11asd a1sd a
    ab"01300 as"00da sd"0asdsa das asd 11asd a1sd a
    ab"01300 as"00da sd"0(aasdasdkjask,$a,\,\l,a,s,d,a,s,d,k,j,,,${120})(ldjaklsdjalk,$l,\,\l,d,j,a,k,l,s,d,j,,,${120})djdsa das asd 11asd a1sd a
    RegEx/regexp-sql.php: SUCCEEDED
    RegEx/Perl/cache.php: SUCCEEDED
    RegEx/Perl/grep1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      [3] => string(3) "1.5"
      [6] => string(5) "58.54"
    }
    Notice: preg_grep(): Array to string conversion in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\RegEx\Perl\__input.txt at expression on line 5, column 1.
    array(2)
    {
      [3] => string(3) "1.5"
      [6] => string(5) "58.54"
    }
    RegEx/Perl/grep2.php: SUCCEEDED
    RegEx/Perl/match1.php: SUCCEEDED
    RegEx/Perl/match10.php: SUCCEEDED
    RegEx/Perl/match2.php: SUCCEEDED
    RegEx/Perl/match3.php: SUCCEEDED
    RegEx/Perl/match4.php: SUCCEEDED
    RegEx/Perl/match5.php: SUCCEEDED
    RegEx/Perl/match6.php: SUCCEEDED
    RegEx/Perl/match7.php: SUCCEEDED
    RegEx/Perl/match8.php: SUCCEEDED
    RegEx/Perl/match9.php: SUCCEEDED
    RegEx/Perl/match_all1.php: SUCCEEDED
    RegEx/Perl/match_all2.php: SUCCEEDED
    RegEx/Perl/match_all3.php: SUCCEEDED
    RegEx/Perl/match_all4.php: SUCCEEDED
    RegEx/Perl/match_dollar.php: SUCCEEDED
    RegEx/Perl/overflow.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string("kfkaj +j k45´┐Ż´┐Ż´┐Ż´┐Ż´┐Ż3#$%^&kjakfjkaj|kfj")
    string("kfkaj +j k45�����3#$%^&kjakfjkaj|kfj")
    RegEx/Perl/quote1.php: SUCCEEDED
    RegEx/Perl/quote2.php: SUCCEEDED
    RegEx/Perl/quote3.php: SUCCEEDED
    RegEx/Perl/replace1.php: SUCCEEDED
    RegEx/Perl/replace2.php: SUCCEEDED
    RegEx/Perl/replace3.php: SUCCEEDED
    RegEx/Perl/replace4.php: SUCCEEDED
    RegEx/Perl/replace5.php: SUCCEEDED
    RegEx/Perl/replace6.php: SUCCEEDED
    RegEx/Perl/replace7.php: SUCCEEDED
    RegEx/Perl/replace8.php: SUCCEEDED
    RegEx/Perl/replace9.php: SUCCEEDED
    RegEx/Perl/replace_callback1.php: SUCCEEDED
    RegEx/Perl/replace_callback2.php: SUCCEEDED
    RegEx/Perl/split1.php: SUCCEEDED
    RegEx/Perl/split2.php: SUCCEEDED
    RegEx/Perl/split3.php: SUCCEEDED
    RegEx/Perl/split4.php: SUCCEEDED
    RegEx/Perl/split5.php: SUCCEEDED
    RegEx/Perl/ungreedy.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    aaa
    a
    aaa
    
    a
    aa
    aaa
    aa
    aaa
    aaa
    a
    aaa
    a
    a
    aa
    aaa
    aa
    aaa
    RegEx/Perl/unsuccessful-preg_match_all.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0
    4
    1
    4
    0
    4
    1
    7
    SPL/ArrayAccess_offsetExists.php: SUCCEEDED
    SPL/exceptions.php: SUCCEEDED
    Strings/addcslashes.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    \f\o\o\[ \]
    Issues a Warning:
    // echo addcslashes("zoo['.']", 'z..A');
    // output:  \zoo['\.']
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt at expression on line 4, column 1.
    
    Issues a Warning:
    // echo addcslashes("zoo['.']", 'z..A');
    // output:  \zoo['\.']
    Strings/addslashes.php: SUCCEEDED
    Strings/chunk_split.php: SUCCEEDED
    Strings/concat.php: SUCCEEDED
    Strings/count_chars.php: SUCCEEDED
    Strings/crc32.php: SUCCEEDED
    Strings/crypt.php: SUCCEEDED
    Strings/crypt2.php: SUCCEEDED
    Strings/echo.php: SUCCEEDED
    Strings/explode.php: SUCCEEDED
    Strings/get_html_translation_table.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <hr>[&] => &amp;
    [>] => &gt;
    [<] => &lt;
    ["] => &quot;
    <hr>Hallo &amp; &lt;Frau&gt; &amp; Kr&iuml;&iquest;&frac12;mer
    <hr>[&] => &amp;
    [>] => &gt;
    [<] => &lt;
    ["] => &quot;
    <hr>Hallo &amp; &lt;Frau&gt; &amp; Kr�mer
    Strings/nl2br.php: SUCCEEDED
    Strings/pack.php: SUCCEEDED
    Strings/pos.php: SUCCEEDED
    Strings/runtime-quotes.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    fread = (x''y"z)
    fgets = (x''y"z)
    file[0] = (x''y"z)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    
    Warning: fopen(runtime-quotes2.txt): failed to open stream: Permission denied in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt on line 33
    
    Warning: fwrite() expects parameter 1 to be resource, boolean given in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt on line 35
    fwrite = ()
    
    Warning: fputs() expects parameter 1 to be resource, boolean given in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt on line 38
    fputs = ()
    
    Warning: fclose() expects parameter 1 to be resource, boolean given in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt on line 41
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (x'y"z)
    fgets = (x'y"z)
    file[0] = (x'y"z)
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (a\'b"\\ca\)
    fgets = (a\'b"\\ca\'b"\\c)
    file[0] = (a\'b"\\ca\'b"\\c)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    e'e
    e''e
    e'e
    e'e
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    e'e
    e'e
    e'e
    e'e
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    fread = (x''y"z)
    fgets = (x''y"z)
    file[0] = (x''y"z)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    
    Warning: fopen(): Unable to access (D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\runtime-quotes2.txt): Permission denied in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt at expression on line 33, column 3.
    
    Warning: Cannot convert bool to resource implicitly in a call to function fwrite() in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt at expression on line 35, column 3.
    fwrite = ()
    
    Warning: Cannot convert bool to resource implicitly in a call to function fputs() in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt at expression on line 38, column 3.
    fputs = ()
    
    Warning: Cannot convert bool to resource implicitly in a call to function fclose() in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt at expression on line 41, column 3.
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (x'y"z)
    fgets = (x'y"z)
    file[0] = (x'y"z)
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (a\'b"\\ca\)
    fgets = (a\'b"\\ca\'b"\\c)
    file[0] = (a\'b"\\ca\'b"\\c)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    e'e
    e''e
    e'e
    e'e
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    e'e
    e'e
    e'e
    e'e
    Strings/sprintf.php: SUCCEEDED
    Strings/sprintf2.php: SUCCEEDED
    Strings/strtr.php: SUCCEEDED
    Strings/str_ireplace.php: SUCCEEDED
    Strings/str_word_count.php: SUCCEEDED
    Strings/substr_operations.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string(1) "b"
    string(1) "b"
    string(9) "baaaaaaaa"
    string(9) "aaaaaaaab"
    string(3) "aba"
    string(9) "aaaaaaaab"
    
    int(8)
    int(8)
    
    Warning: substr_count(): Length should be greater than 0 in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt on line 15
    bool(false)
    
    Warning: substr_count(): Offset value 10 exceeds string length in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt on line 17
    bool(false)
    
    Warning: substr_count(): Offset value 10 exceeds string length in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt on line 18
    bool(false)
    
    array(5) {
      [0]=>
      string(4) "baaa"
      [1]=>
      string(4) "baaa"
      [2]=>
      string(1) "b"
      [3]=>
      string(1) "b"
      [4]=>
      string(1) "b"
    }
    
    int(0)
    int(0)
    int(0)
    int(1)
    int(-1)
    string(1) "b"
    string(1) "b"
    string(9) "baaaaaaaa"
    string(9) "aaaaaaaab"
    string(3) "aba"
    string(9) "aaaaaaaab"
    
    integer(8)
    integer(8)
    integer(0)
    integer(0)
    integer(0)
    
    array(5)
    {
      [0] => string(4) "baaa"
      [1] => string(4) "baaa"
      [2] => string(1) "b"
      [3] => string(1) "b"
      [4] => string(1) "b"
    }
    
    integer(0)
    integer(0)
    integer(0)
    integer(1)
    integer(-1)
    Strings/wordwrap.php: SUCCEEDED
    Variables/advanced_serialize.php: SUCCEEDED
    Variables/arguments.php: SUCCEEDED
    Variables/bitwise.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "00"
    string(2) "31"
    string(2) "31"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    0
    0
    0
    5
    0
    5
    40
    5
    45
    string(48) "000000000000000000000000000000000000000000000000"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(14) "31323331323331"
    string(2) "30"
    string(14) "31323331323331"
    string(16) "3635343635343536"
    string(2) "30"
    string(16) "3635343635343536"
    string(14) "337a5e8be43d7a"
    string(14) "00002130120201"
    string(48) "337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42"
    string(16) "347d598ce33a7e77"
    string(16) "0200243214040100"
    string(48) "367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42"
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "00"
    string(2) "31"
    string(2) "31"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    0
    -9223372036854775808
    -9223372036854775808
    -9223372036854775803
    0
    -9223372036854775803
    40
    5
    45
    string(48) "000000000000000000000000000000000000000000000000"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(14) "31323331323331"
    string(2) "30"
    string(14) "31323331323331"
    string(16) "3635343635343536"
    string(2) "30"
    string(16) "3635343635343536"
    string(14) "337a5e8be43d7a"
    string(14) "00002130120201"
    string(48) "337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42"
    string(16) "347d598ce33a7e77"
    string(16) "0200243214040100"
    string(48) "367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42"
    Variables/comparisons.php: SUCCEEDED
    Variables/constant.php: SUCCEEDED
    Variables/extract.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    EXTR_PREFIX_ALL
    integer(4)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
      'prefix_non_existent' => integer(1)
    }
    <hr>EXTR_PREFIX_INVALID
    integer(5)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => integer(2)
      'non_existent' => integer(1)
      'prefix_' => integer(1)
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => 'hello'
    }
    <hr>EXTR_PREFIX_SAME
    integer(3)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'non_existent' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>EXTR_PREFIX_IF_EXISTS
    integer(3)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>
    EXTR_PREFIX_ALL
    integer(4)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
      'prefix_non_existent' => integer(1)
    }
    <hr>EXTR_PREFIX_INVALID
    integer(2)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_ad' => integer(2)
      'prefix_non_existent' => integer(1)
    }
    <hr>EXTR_PREFIX_SAME
    integer(4)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'non_existent' => integer(1)
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>EXTR_PREFIX_IF_EXISTS
    integer(3)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>
    Variables/func_get_args.php: SUCCEEDED
    Variables/is_number.php: SUCCEEDED
    Variables/serialize.php: SUCCEEDED
    Variables/var_dumping.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Array
    (
        [0] => 1
        [1] => 
        [2] => 1
        [3] => 1.2
        [4] => 
        [5] => asdas
        [6] => Array
            (
                [0] => 1
            )
    
        [7] => stdClass Object
            (
            )
    
        [8] => Resource id #1
    )
    array(9) {
      [0]=>
      bool(true)
      [1]=>
      bool(false)
      [2]=>
      int(1)
      [3]=>
      float(1.2)
      [4]=>
      NULL
      [5]=>
      string(5) "asdas"
      [6]=>
      array(1) {
        [0]=>
        int(1)
      }
      [7]=>
      object(stdClass)#1 (0) {
      }
      [8]=>
      resource(1) of type (stream)
    }
    array (
      0 => true,
      1 => false,
      2 => 1,
      3 => 1.2,
      4 => NULL,
      5 => 'asdas',
      6 => 
      array (
        0 => 1,
      ),
      7 => 
      stdClass::__set_state(array(
      )),
      8 => NULL,
    )
    array
    (
      [0] => 1
      [1] => 
      [2] => 1
      [3] => 1.2
      [4] => 
      [5] => asdas
      [6] => array
      (
        [0] => 1
      )
      [7] => stdClass object
      (
      )
      [8] => resource id #4
    )
    array(9)
    {
      [0] => bool(true)
      [1] => bool(false)
      [2] => integer(1)
      [3] => double(1.2)
      [4] => NULL
      [5] => string(5) "asdas"
      [6] => array(1)
      {
        [0] => integer(1)
      }
      [7] => object(stdClass)(0)
      {
      }
      [8] => resource(4) of type (stream)
    }
    array
    (
      '0' => true,
      '1' => false,
      '2' => 1,
      '3' => 1.2,
      '4' => NULL,
      '5' => 'asdas',
      '6' => array
      (
        '0' => 1
      ),
      '7' => class stdClass
      {
    
      },
      '8' => NULL
    )
    WorkItems/22016.php: SUCCEEDED
    WorkItems/22019.php: SUCCEEDED
    WorkItems/26052.php: SUCCEEDED
    WorkItems/26681.php: SUCCEEDED
    WorkItems/27377.php: SUCCEEDED
    WorkItems/27492.php: SUCCEEDED
    WorkItems/2787.php: SUCCEEDED
    Xml/005.php: SUCCEEDED
    Xml/006.php: SUCCEEDED
    Xml/007.php: SUCCEEDED
    Xml/008.php: SUCCEEDED
    Xml/009.php: SUCCEEDED
    Xml/011.php: SUCCEEDED
    Xml/013.php: SUCCEEDED
    Xml/017.php: SUCCEEDED
    Xml/018.php: SUCCEEDED
    Xml/019.php: SUCCEEDED
    Xml/020.php: SUCCEEDED
    Xml/021.php: SUCCEEDED
    Xml/025.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
      'foo' => 'foobar'
    }
    array
    {
      'html' => 'http://www.w3.org/1999/xhtml'
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
    }
    array
    {
      'html' => 'http://www.w3.org/1999/xhtml'
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'foo' => 'foobar'
      'baz' => 'foobarbaz'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
    }
    array
    {
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
      'baz' => 'foobarbaz'
      'foo' => 'foobar'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
      'baz' => 'foobarbaz'
      'foo' => 'foobar'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
    }
    array
    {
    }
    Xml/026.php: SUCCEEDED
    Xml/027.php: SUCCEEDED
    Xml/028.php: SUCCEEDED
    Xml/029.php: SUCCEEDED
    Xml/030.php: SUCCEEDED
    Xml/032.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    FALSE
    FALSE
    FALSE
    TRUE
    TRUE
    TRUE
    Xml/033.php: SUCCEEDED
    Xml/bug26384.php: SUCCEEDED
    Xml/bug28721.php: SUCCEEDED
    Xml/bug28817.php: SUCCEEDED
    Xml/bug32615.php: SUCCEEDED
    Xml/bug33853.php: SUCCEEDED
    Xml/bug34276.php: SUCCEEDED
    Xml/bug35342.php: SUCCEEDED
    Xml/bug36756.php: SUCCEEDED
    Xml/bug37277.php: SUCCEEDED
    Xml/dom002.php: SUCCEEDED
    Xml/dom003.php: SUCCEEDED
    Xml/dom006.php: SUCCEEDED
    Xml/dom007.php: SUCCEEDED
    Xml/dom_set_attr_node.php: SUCCEEDED
    Xml/xslt001.php: SUCCEEDED
    Xml/xslt002.php: SUCCEEDED
    Xml/xslt003.php: SUCCEEDED
    Xml/xslt004.php: SUCCEEDED
    Xml/xslt005.php: SUCCEEDED
    Xml/xslt006.php: SUCCEEDED
    Xml/xslt007.php: SUCCEEDED
    Xml/xslt010.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test 10: EXSLT Support
      
      
      Test Date : 0001-12-31Z
        year                 : 1
        leap-year            : false
        month-in-year        : 12
        month-name           : December
        month-abbreviation   : Dec
        week-in-year         : 1
        day-in-year          : 365
        day-in-month         : 31
        day-of-week-in-month : 5
        day-in-week          : 2
        day-name             : Monday
        day-abbreviation     : Mon
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : 3000-01-31
        year                 : 3000
        leap-year            : false
        month-in-year        : 1
        month-name           : January
        month-abbreviation   : Jan
        week-in-year         : 5
        day-in-year          : 31
        day-in-month         : 31
        day-of-week-in-month : 5
        day-in-week          : 6
        day-name             : Friday
        day-abbreviation     : Fri
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : 2000-02-29
        year                 : 2000
        leap-year            : true
        month-in-year        : 2
        month-name           : February
        month-abbreviation   : Feb
        week-in-year         : 9
        day-in-year          : 60
        day-in-month         : 29
        day-of-week-in-month : 5
        day-in-week          : 3
        day-name             : Tuesday
        day-abbreviation     : Tue
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : 9990001-12-31Z
        year                 : 9990001
        leap-year            : false
        month-in-year        : 12
        month-name           : December
        month-abbreviation   : Dec
        week-in-year         : 1
        day-in-year          : 365
        day-in-month         : 31
        day-of-week-in-month : 5
        day-in-week          : 2
        day-name             : Monday
        day-abbreviation     : Mon
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : -0004-02-29
        year                 : -4
        leap-year            : true
        month-in-year        : 2
        month-name           : February
        month-abbreviation   : Feb
        week-in-year         : 9
        day-in-year          : 60
        day-in-month         : 29
        day-of-week-in-month : 5
        day-in-week          : 1
        day-name             : Sunday
        day-abbreviation     : Sun
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
    Test 10: EXSLT Support
    Warning: Cannot find the script or external object that implements prefix 'http://exslt.org/dates-and-times'. in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Xml\__input.txt at expression on line 14, column 3.
    
    Warning: Illegal string offset '-1' in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Phalanger.inc at expression on line 7, column 6.
    Xml/xslt011.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test 11: php:function Support
    
    Warning: XSLTProcessor::transformToXml(): A PHP Object cannot be converted to a XPath-string in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Xml\__input.txt on line 18
    <?xml version="1.0"?>
    foobar - secondArg
    foobar - 
    this is from an external DomDocument
    from the Input Document
    static
    Test 11: php:function Support
    <?xml version="1.0" encoding="utf-8"?>foobar - secondArg
    foobar - 
    this is from an external DomDocument
    from the Input Document
    static
    not a DomNode object
    Xml/xslt012.php: SUCCEEDED
    ================================================ FILE: Testing/Tests/TestLogs/TestLog 2010-06-25.htm ================================================ PHP.NET Compiler test log

    PHP.NET Compiler test log

    (92%) 796 succeeded, 70 failed
    Test ResultCompiler error outputExpected test result
    @PHP/classes/array_access_001.php: SUCCEEDED
    @PHP/classes/array_access_002.php: SUCCEEDED
    @PHP/classes/array_access_003.php: SUCCEEDED
    @PHP/classes/array_access_004.php: SUCCEEDED
    @PHP/classes/array_access_005.php: SUCCEEDED
    @PHP/classes/array_access_006.php: SUCCEEDED
    @PHP/classes/array_access_007.php: SUCCEEDED
    @PHP/classes/array_access_008.php: SUCCEEDED
    @PHP/classes/array_access_009.php: SUCCEEDED
    @PHP/classes/array_access_010.php: SUCCEEDED
    @PHP/classes/array_access_011.php: SUCCEEDED
    @PHP/classes/array_access_013.php: SUCCEEDED
    @PHP/classes/assign_op_property_001.php: SUCCEEDED
    @PHP/classes/autoload_001.php: SUCCEEDED
    @PHP/classes/autoload_002.php: SUCCEEDED
    @PHP/classes/autoload_003.php: SUCCEEDED
    @PHP/classes/autoload_005.php: SUCCEEDED
    @PHP/classes/autoload_006.php: SUCCEEDED
    @PHP/classes/bug23951.php: SUCCEEDED
    @PHP/classes/bug24399.php: SUCCEEDED
    @PHP/classes/bug24445.php: SUCCEEDED
    @PHP/classes/bug26737.php: SUCCEEDED
    @PHP/classes/bug27468.php: SUCCEEDED
    @PHP/classes/bug27504.php: SUCCEEDED
    @PHP/classes/class_example.php: SUCCEEDED
    @PHP/classes/class_stdclass.php: SUCCEEDED
    @PHP/classes/clone_001.php: SUCCEEDED
    @PHP/classes/clone_002.php: SUCCEEDED
    @PHP/classes/clone_003.php: SUCCEEDED
    @PHP/classes/clone_004.php: SUCCEEDED
    @PHP/classes/clone_006.php: SUCCEEDED
    @PHP/classes/constants_scope_001.php: SUCCEEDED
    @PHP/classes/ctor_dtor.php: SUCCEEDED
    @PHP/classes/ctor_dtor_inheritance.php: SUCCEEDED
    @PHP/classes/ctor_name_clash.php: SUCCEEDED
    @PHP/classes/dereferencing_001.php: SUCCEEDED
    @PHP/classes/destructor_and_echo.php: SUCCEEDED
    @PHP/classes/destructor_and_references.php: SUCCEEDED
    @PHP/classes/destructor_inheritance.php: SUCCEEDED
    @PHP/classes/destructor_visibility_003.php: SUCCEEDED
    @PHP/classes/factory_001.php: SUCCEEDED
    @PHP/classes/factory_and_singleton_001.php: SUCCEEDED
    @PHP/classes/factory_and_singleton_002.php: SUCCEEDED
    @PHP/classes/final.php: SUCCEEDED
    @PHP/classes/incdec_property_001.php: SUCCEEDED
    @PHP/classes/incdec_property_002.php: SUCCEEDED
    @PHP/classes/incdec_property_003.php: SUCCEEDED
    @PHP/classes/incdec_property_004.php: SUCCEEDED
    @PHP/classes/inheritance.php: SUCCEEDED
    @PHP/classes/inheritance_002.php: SUCCEEDED
    @PHP/classes/interfaces_001.php: SUCCEEDED
    @PHP/classes/interface_construct.php: SUCCEEDED
    @PHP/classes/interface_doubled.php: SUCCEEDED
    @PHP/classes/interface_implemented.php: SUCCEEDED
    @PHP/classes/iterators_001.php: SUCCEEDED
    @PHP/classes/iterators_002.php: SUCCEEDED
    @PHP/classes/iterators_003.php: SUCCEEDED
    @PHP/classes/iterators_004.php: SUCCEEDED
    @PHP/classes/iterators_006.php: SUCCEEDED
    @PHP/classes/iterators_007.php: SUCCEEDED
    @PHP/classes/object_reference_001.php: SUCCEEDED
    @PHP/classes/private_001.php: SUCCEEDED
    @PHP/classes/private_002.php: SUCCEEDED
    @PHP/classes/private_003.php: SUCCEEDED
    @PHP/classes/private_003b.php: SUCCEEDED
    @PHP/classes/private_004.php: SUCCEEDED
    @PHP/classes/private_004b.php: SUCCEEDED
    @PHP/classes/private_005.php: SUCCEEDED
    @PHP/classes/private_005b.php: SUCCEEDED
    @PHP/classes/private_006.php: SUCCEEDED
    @PHP/classes/private_006b.php: SUCCEEDED
    @PHP/classes/private_007.php: SUCCEEDED
    @PHP/classes/private_007b.php: SUCCEEDED
    @PHP/classes/private_members.php: SUCCEEDED
    @PHP/classes/private_redeclare.php: SUCCEEDED
    @PHP/classes/protected_001.php: SUCCEEDED
    @PHP/classes/protected_001b.php: SUCCEEDED
    @PHP/classes/protected_002.php: SUCCEEDED
    @PHP/classes/serialize_001.php: SUCCEEDED
    @PHP/classes/singleton_001.php: SUCCEEDED
    @PHP/classes/static_properties_001.php: SUCCEEDED
    @PHP/classes/type_hinting_001.php: SUCCEEDED
    @PHP/classes/type_hinting_003.php: SUCCEEDED
    @PHP/classes/visibility_000c.php: SUCCEEDED
    @PHP/classes/visibility_001c.php: SUCCEEDED
    @PHP/classes/visibility_002c.php: SUCCEEDED
    @PHP/classes/visibility_003a.php: SUCCEEDED
    @PHP/classes/visibility_003c.php: SUCCEEDED
    @PHP/classes/visibility_004a.php: SUCCEEDED
    @PHP/classes/visibility_004b.php: SUCCEEDED
    @PHP/classes/visibility_004c.php: SUCCEEDED
    @PHP/classes/visibility_005.php: SUCCEEDED
    @PHP/classes/__call_001.php: SUCCEEDED
    @PHP/classes/__set_data_corrupt.php: SUCCEEDED
    @PHP/classes/__set__get_001.php: SUCCEEDED
    @PHP/classes/__set__get_004.php: SUCCEEDED
    @PHP/classes/__set__get_005.php: SUCCEEDED
    @PHP/date/bug17988.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2002-06-25 12:18:48
    2002-06-25 14:18:48
    2002-06-25 13:18:48
    2002-06-25 12:18:48
    2002-06-25 18:18:48
    2002-06-25 14:18:48
    2002-06-25 14:18:48
    2002-06-25 18:18:48
    2002-06-25 10:18:48
    2002-06-25 17:18:48
    2002-06-25 11:18:48
    2002-06-25 17:48:48
    2002-06-25 10:48:48
    2002-06-25 14:18:48
    2002-06-25 14:18:48
    2002-06-25 13:18:48
    2002-06-25 12:18:48
    2002-06-25 18:18:48
    2002-06-25 14:18:48
    2002-06-25 14:18:48
    2002-06-25 18:18:48
    2002-06-25 10:18:48
    2002-06-25 17:18:48
    2002-06-25 11:18:48
    2002-06-25 17:48:48
    2002-06-25 10:48:48
    @PHP/date/bug26317.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2003-11-19 17:20:42
    2003-11-19 17:20:42
    2003-11-19 17:20:42
    2003-11-19 16:20:42
    2003-11-19 16:20:42
    2003-11-19 16:20:42
    @PHP/date/bug26320.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2003-11-19 12:30:42
    2003-11-19 13:30:42
    2003-11-19 12:30:42
    2003-11-19 12:30:42
    @PHP/date/bug28088.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    The following line rightly shows the correct date time:
    04/04/04 2145
    But the following line fails to show the correct date time:
    04/03/04 2245
    The following line rightly shows the correct date time:
    04/04/04 2345
    But the following line fails to show the correct date time:
    04/04/04 0045
    @PHP/date/bug28599.php: SUCCEEDED
    @PHP/date/bug29150.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2005-06-19 22:00:00
    2005-06-20 00:00:00
    @PHP/date/bug29585.php: SUCCEEDED
    @PHP/date/bug29595.php: SUCCEEDED
    @PHP/date/bug33056.php: SUCCEEDED
    @PHP/date/bug33452.php: SUCCEEDED
    @PHP/date/bug33562.php: SUCCEEDED
    @PHP/date/bug33563.php: SUCCEEDED
    @PHP/date/bug33578.php: SUCCEEDED
    @PHP/date/bug33869.php: SUCCEEDED
    @PHP/date/bug34676.php: SUCCEEDED
    @PHP/date/bug34771.php: SUCCEEDED
    @PHP/date/bug35143.php: SUCCEEDED
    @PHP/date/bug35414.php: SUCCEEDED
    @PHP/date/bug35422.php: SUCCEEDED
    @PHP/date/bug35425.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    integer(42)
    integer(1)
    integer(1)
    integer(1)
    integer(1)
    integer(0)
    integer(0)
    integer(1)
    integer(1)
    integer(31)
    integer(1104537661)
    integer(6)
    integer(53)
    integer(5)
    integer(2005)
    integer(0)
    integer(3600)
    integer(292)
    integer(1)
    integer(1)
    integer(1)
    integer(1)
    integer(0)
    integer(0)
    integer(1)
    integer(1)
    integer(31)
    integer(1104559261)
    integer(6)
    integer(53)
    integer(5)
    integer(2005)
    integer(0)
    integer(-18000)
    @PHP/date/bug35456.php: SUCCEEDED
    @PHP/date/bug35624.php: SUCCEEDED
    @PHP/date/bug35630.php: SUCCEEDED
    @PHP/date/bug35699.php: SUCCEEDED
    @PHP/date/bug35705.php: SUCCEEDED
    @PHP/date/bug35885.php: SUCCEEDED
    @PHP/date/bug35887.php: SUCCEEDED
    @PHP/date/date.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    c: 2003-01-23T13:20:59+01:00
    r: Thu, 23 Jan 2003 13:20:59 +0100
    c: 2003-01-23T13:20:59+01:00
    r: Thu, 23 Jan 2003 13:20:59 +0100
    c: 2003-01-23T12:20:59+00:00
    r: Thu, 23 Jan 2003 12:20:59 +0000
    c: 2003-01-23T13:20:59+01:00
    r: Thu, 23 Jan 2003 13:20:59 +0100
    @PHP/date/date_create-1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\date\__input.txt on line 28
    SKIP
    @PHP/date/date_create-2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\date\__input.txt on line 6
    SKIP
    @PHP/date/date_default_timezone_get-3.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Europe/Prague
    America/Chicago
    Europe/Rome
    America/Chicago
    @PHP/date/date_modify-1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\date\__input.txt on line 6
    SKIP
    @PHP/date/date_modify-2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\date\__input.txt on line 6
    SKIP
    @PHP/date/default-timezone-1.php: SUCCEEDED
    @PHP/date/default-timezone-2.php: SUCCEEDED
    @PHP/date/format-negative-timestamp.php: SUCCEEDED
    @PHP/date/strtotime.php: SUCCEEDED
    @PHP/date/timezone-configuration.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    1119125744
    1119125744
    1119125744
    1119125744
    1119129344
    1119125744
    @PHP/doc_examples/test001.php: SUCCEEDED
    @PHP/doc_examples/test002.php: SUCCEEDED
    @PHP/doc_examples/test003.php: SUCCEEDED
    @PHP/doc_examples/test004.php: SUCCEEDED
    @PHP/doc_examples/test005.php: SUCCEEDED
    @PHP/doc_examples/test006.php: SUCCEEDED
    @PHP/doc_examples/test007.php: SUCCEEDED
    @PHP/doc_examples/test008.php: SUCCEEDED
    @PHP/doc_examples/test009.php: SUCCEEDED
    @PHP/doc_examples/test010.php: SUCCEEDED
    @PHP/doc_examples/test011.php: SUCCEEDED
    @PHP/doc_examples/test013.php: SUCCEEDED
    @PHP/doc_examples/test014.php: SUCCEEDED
    @PHP/doc_examples/test015.php: SUCCEEDED
    @PHP/doc_examples/test016.php: SUCCEEDED
    @PHP/doc_examples/test017.php: SUCCEEDED
    @PHP/doc_examples/test018.php: SUCCEEDED
    @PHP/doc_examples/test019.php: SUCCEEDED
    @PHP/doc_examples/test020.php: SUCCEEDED
    @PHP/doc_examples/test021.php: SUCCEEDED
    @PHP/doc_examples/test022.php: SUCCEEDED
    @PHP/doc_examples/test023.php: SUCCEEDED
    @PHP/doc_examples/test024.php: SUCCEEDED
    @PHP/doc_examples/test025.php: SUCCEEDED
    @PHP/doc_examples/test026.php: SUCCEEDED
    @PHP/doc_examples/test027.php: SUCCEEDED
    @PHP/doc_examples/test028.php: SUCCEEDED
    @PHP/doc_examples/test029.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ´┐Żauky
    �auky
    @PHP/doc_examples/test030.php: SUCCEEDED
    @PHP/doc_examples/test031.php: SUCCEEDED
    @PHP/doc_examples/test032.php: SUCCEEDED
    @PHP/doc_examples/test033.php: SUCCEEDED
    @PHP/doc_examples/test034.php: SUCCEEDED
    @PHP/doc_examples/test035.php: SUCCEEDED
    @PHP/doc_examples/test036.php: SUCCEEDED
    @PHP/doc_examples/test037.php: SUCCEEDED
    @PHP/doc_examples/test038.php: SUCCEEDED
    @PHP/doc_examples/test039.php: SUCCEEDED
    @PHP/doc_examples/test040.php: SUCCEEDED
    @PHP/doc_examples/test041.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    call_user_func():
    hello world!
    Strict Standards: call_user_func(): Non-static method MyClass::myCallbackMethod() should not be called statically in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\doc_examples\__input.txt at expression on line 17, column 1.
    Hello World!Hello World!
    @PHP/doc_examples/test042.php: SUCCEEDED
    @PHP/doc_examples/test043.php: SUCCEEDED
    @PHP/doc_examples/test044.php: SUCCEEDED
    @PHP/doc_examples/test045.php: SUCCEEDED
    @PHP/doc_examples/test046.php: SUCCEEDED
    @PHP/doc_examples/test047.php: SUCCEEDED
    @PHP/doc_examples/test048.php: SUCCEEDED
    @PHP/doc_examples/test049.php: SUCCEEDED
    @PHP/doc_examples/test050.php: SUCCEEDED
    @PHP/doc_examples/test051.php: SUCCEEDED
    @PHP/doc_examples/test052.php: SUCCEEDED
    @PHP/doc_examples/test053.php: SUCCEEDED
    @PHP/doc_examples/test054.php: SUCCEEDED
    @PHP/doc_examples/test055.php: SUCCEEDED
    @PHP/doc_examples/test056.php: SUCCEEDED
    @PHP/doc_examples/test057.php: SUCCEEDED
    @PHP/doc_examples/test058.php: SUCCEEDED
    @PHP/doc_examples/test059.php: SUCCEEDED
    @PHP/doc_examples/test060.php: SUCCEEDED
    @PHP/doc_examples/test061.php: SUCCEEDED
    @PHP/doc_examples/test062.php: SUCCEEDED
    @PHP/doc_examples/test063.php: SUCCEEDED
    @PHP/doc_examples/test064.php: SUCCEEDED
    @PHP/doc_examples/test065.php: SUCCEEDED
    @PHP/doc_examples/test066.php: SUCCEEDED
    @PHP/doc_examples/test067.php: SUCCEEDED
    @PHP/doc_examples/test068.php: SUCCEEDED
    @PHP/doc_examples/test069.php: SUCCEEDED
    @PHP/doc_examples/test070.php: SUCCEEDED
    @PHP/doc_examples/test071.php: SUCCEEDED
    @PHP/doc_examples/test072.php: SUCCEEDED
    @PHP/doc_examples/test073.php: SUCCEEDED
    @PHP/doc_examples/test074.php: SUCCEEDED
    @PHP/doc_examples/test075.php: SUCCEEDED
    @PHP/doc_examples/test076.php: SUCCEEDED
    @PHP/doc_examples/test077.php: SUCCEEDED
    @PHP/doc_examples/test078.php: SUCCEEDED
    @PHP/doc_examples/test079.php: SUCCEEDED
    @PHP/doc_examples/test080.php: SUCCEEDED
    @PHP/doc_examples/test081.php: SUCCEEDED
    @PHP/doc_examples/test082.php: SUCCEEDED
    @PHP/doc_examples/test083.php: SUCCEEDED
    @PHP/doc_examples/test084.php: SUCCEEDED
    @PHP/doc_examples/test085.php: SUCCEEDED
    @PHP/doc_examples/test086.php: SUCCEEDED
    @PHP/doc_examples/test087.php: SUCCEEDED
    @PHP/doc_examples/test088.php: SUCCEEDED
    @PHP/doc_examples/test089.php: SUCCEEDED
    @PHP/doc_examples/test090.php: SUCCEEDED
    @PHP/doc_examples/test091.php: SUCCEEDED
    @PHP/doc_examples/test092.php: SUCCEEDED
    @PHP/doc_examples/test093.php: SUCCEEDED
    @PHP/doc_examples/test094.php: SUCCEEDED
    @PHP/doc_examples/test095.php: SUCCEEDED
    @PHP/doc_examples/test096.php: SUCCEEDED
    @PHP/doc_examples/test097.php: SUCCEEDED
    @PHP/doc_examples/test098.php: SUCCEEDED
    @PHP/doc_examples/test099.php: SUCCEEDED
    @PHP/doc_examples/test100.php: SUCCEEDED
    @PHP/doc_examples/test102.php: SUCCEEDED
    @PHP/doc_examples/test103.php: SUCCEEDED
    @PHP/doc_examples/test104.php: SUCCEEDED
    @PHP/doc_examples/test105.php: SUCCEEDED
    @PHP/doc_examples/test107.php: SUCCEEDED
    @PHP/doc_examples/test108.php: SUCCEEDED
    @PHP/doc_examples/test109.php: SUCCEEDED
    @PHP/doc_examples/test110.php: SUCCEEDED
    @PHP/doc_examples/test111.php: SUCCEEDED
    @PHP/doc_examples/test112.php: SUCCEEDED
    @PHP/doc_examples/test113.php: SUCCEEDED
    @PHP/doc_examples/test114.php: SUCCEEDED
    @PHP/doc_examples/test115.php: SUCCEEDED
    @PHP/doc_examples/test116.php: SUCCEEDED
    @PHP/doc_examples/test117.php: SUCCEEDED
    @PHP/doc_examples/test118.php: SUCCEEDED
    @PHP/doc_examples/test119.php: SUCCEEDED
    @PHP/doc_examples/test120.php: SUCCEEDED
    @PHP/doc_examples/test121.php: SUCCEEDED
    @PHP/doc_examples/test122.php: SUCCEEDED
    @PHP/doc_examples/test123.php: SUCCEEDED
    @PHP/doc_examples/test124.php: SUCCEEDED
    @PHP/doc_examples/test125.php: SUCCEEDED
    @PHP/doc_examples/test126.php: SUCCEEDED
    @PHP/doc_examples/test127.php: SUCCEEDED
    @PHP/doc_examples/test128.php: SUCCEEDED
    @PHP/doc_examples/test129.php: SUCCEEDED
    @PHP/doc_examples/test130.php: SUCCEEDED
    @PHP/doc_examples/test131.php: SUCCEEDED
    @PHP/doc_examples/test132.php: SUCCEEDED
    @PHP/doc_examples/test133.php: SUCCEEDED
    @PHP/doc_examples/test134.php: SUCCEEDED
    @PHP/doc_examples/test136.php: SUCCEEDED
    @PHP/doc_examples/test137.php: SUCCEEDED
    @PHP/doc_examples/test138.php: SUCCEEDED
    @PHP/doc_examples/test139.php: SUCCEEDED
    @PHP/doc_examples/test148.php: SUCCEEDED
    @PHP/doc_examples/test149.php: SUCCEEDED
    @PHP/doc_examples/test150.php: SUCCEEDED
    @PHP/doc_examples/test151.php: SUCCEEDED
    @PHP/doc_examples/test152.php: SUCCEEDED
    @PHP/doc_examples/test153.php: SUCCEEDED
    @PHP/doc_examples/test154.php: SUCCEEDED
    @PHP/doc_examples/test155.php: SUCCEEDED
    @PHP/doc_examples/test156.php: SUCCEEDED
    @PHP/doc_examples/test158.php: SUCCEEDED
    @PHP/lang/001.php: SUCCEEDED
    @PHP/lang/002.php: SUCCEEDED
    @PHP/lang/003.php: SUCCEEDED
    @PHP/lang/004.php: SUCCEEDED
    @PHP/lang/005.php: SUCCEEDED
    @PHP/lang/006.php: SUCCEEDED
    @PHP/lang/007.php: SUCCEEDED
    @PHP/lang/008.php: SUCCEEDED
    @PHP/lang/009.php: SUCCEEDED
    @PHP/lang/010.php: SUCCEEDED
    @PHP/lang/011.php: SUCCEEDED
    @PHP/lang/012.php: SUCCEEDED
    @PHP/lang/013.php: SUCCEEDED
    @PHP/lang/014.php: SUCCEEDED
    @PHP/lang/015.php: SUCCEEDED
    @PHP/lang/016.php: SUCCEEDED
    @PHP/lang/017.php: SUCCEEDED
    @PHP/lang/018.php: SUCCEEDED
    @PHP/lang/019.php: SUCCEEDED
    @PHP/lang/020.php: SUCCEEDED
    @PHP/lang/021.php: SUCCEEDED
    @PHP/lang/022.php: SUCCEEDED
    @PHP/lang/023.php: SUCCEEDED
    @PHP/lang/024.php: SUCCEEDED
    @PHP/lang/025.php: SUCCEEDED
    @PHP/lang/026.php: SUCCEEDED
    @PHP/lang/027.php: SUCCEEDED
    @PHP/lang/028.php: SUCCEEDED
    @PHP/lang/030.php: SUCCEEDED
    @PHP/lang/032.php: SUCCEEDED
    @PHP/lang/036.php: SUCCEEDED
    @PHP/lang/037.php: SUCCEEDED
    @PHP/lang/038.php: SUCCEEDED
    @PHP/lang/039.php: SUCCEEDED
    @PHP/lang/040.php: SUCCEEDED
    @PHP/lang/bison1.php: SUCCEEDED
    @PHP/lang/bug17115.php: SUCCEEDED
    @PHP/lang/bug18872.php: SUCCEEDED
    @PHP/lang/bug19943.php: SUCCEEDED
    @PHP/lang/bug20175.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    Deprecated: Assigning the return value of new by reference is deprecated in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\lang\__input.txt on line 110
    foo_static()
    foo_global()
    foo:1
    foo_static()
    foo:1
    bar_static()
    bar_global()
    bar:1
    bar_static()
    bar:1
    wow_static()
    wow_global()
    wow:1
    wow_static()
    wow:1
    oop_test()
    oop_static()
    oop_class()
    oop:1
    oop_static()
    oop:1
    oop_test()
    oop_static()
    oop:1
    foo_static()
    foo_global()
    foo:1
    foo_static()
    foo:1
    bar_static()
    bar_global()
    bar:1
    bar_static()
    bar_global()
    bar:2
    wow_static()
    wow_global()
    wow:1
    wow_static()
    wow:1
    oop_test()
    oop_static()
    oop_class()
    oop:1
    oop_static()
    oop:1
    oop_test()
    oop_static()
    oop:1
    D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\lang\__input.txt(110,4): warning PHP0181: Assigning the return value of new by reference is deprecated
    
    @PHP/lang/bug21094.php: SUCCEEDED
    @PHP/lang/bug21600.php: SUCCEEDED
    @PHP/lang/bug21669.php: SUCCEEDED
    @PHP/lang/bug21849.php: SUCCEEDED
    @PHP/lang/bug21961.php: SUCCEEDED
    @PHP/lang/bug22231.php: SUCCEEDED
    @PHP/lang/bug22367.php: SUCCEEDED
    @PHP/lang/bug22510.php: SUCCEEDED
    @PHP/lang/bug22592.php: SUCCEEDED
    @PHP/lang/bug22690.php: SUCCEEDED
    @PHP/lang/bug23279.php: SUCCEEDED
    @PHP/lang/bug23384.php: SUCCEEDED
    @PHP/lang/bug23489.php: SUCCEEDED
    @PHP/lang/bug23524.php: SUCCEEDED
    @PHP/lang/bug23922.php: SUCCEEDED
    @PHP/lang/bug24054.php: SUCCEEDED
    @PHP/lang/bug24396.php: SUCCEEDED
    @PHP/lang/bug24403.php: SUCCEEDED
    @PHP/lang/bug24436.php: SUCCEEDED
    @PHP/lang/bug24499.php: SUCCEEDED
    @PHP/lang/bug24640.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    double(1700000000000000089258092433847514422797596587883870563356951996370064178581143932836831337636761368874297554515902592900802289500112731978596146714137401870842258241575178866354311397451139753100927220499450359906637902366244989496126909662726242240784739940994096632824796638102733857671280980918272.0000000000)
    1.7E+300
    
    ------
    double(0.0000000000)
    1.7E-300
    
    ------
    double(17000000000000001584208052028780237480128823455860622330108867175329927830437888.0000000000)
    1.7E+79
    
    ------
    double(0.0000000000)
    1.7E-79
    
    ------
    double(169999999999999996096025832433329868941658043870400163508258284150340918121070592.0000000000)
    1.7E+80
    
    ------
    double(0.0000000000)
    1.7E-80
    
    ------
    double(1700000000000000013616404158611892038375594280539217794530130541777964808366194688.0000000000)
    1.7E+81
    
    ------
    double(0.0000000000)
    1.7E-81
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    1.6999810742106E-319
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    1.7000798873397E-320
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    1.6995858216939E-321
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    0
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    0
    
    ------
    double(1700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+300
    
    ------
    double(0.0000000000)
    1.70000000000003E-300
    
    ------
    double(17000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+79
    
    ------
    double(0.0000000000)
    1.70000000000001E-79
    
    ------
    double(170000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+80
    
    ------
    double(0.0000000000)
    1.70000000000001E-80
    
    ------
    double(1700000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+81
    
    ------
    double(0.0000000000)
    1.70000000000001E-81
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    1.69998107421056E-319
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    1.70007988733973E-320
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    1.69464516523548E-321
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    0
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    0
    
    ------
    @PHP/lang/bug24652.php: SUCCEEDED
    @PHP/lang/bug24658.php: SUCCEEDED
    @PHP/lang/bug24783.php: SUCCEEDED
    @PHP/lang/bug24926.php: SUCCEEDED
    @PHP/lang/bug25547.php: SUCCEEDED
    @PHP/lang/bug25652.php: SUCCEEDED
    @PHP/lang/bug25922.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Undefined index here: 'error'
    Undefined index here: ''
    @PHP/lang/bug26182.php: SUCCEEDED
    @PHP/lang/bug26696.php: SUCCEEDED
    @PHP/lang/bug26866.php: SUCCEEDED
    @PHP/lang/bug26869.php: SUCCEEDED
    @PHP/lang/bug27354.php: SUCCEEDED
    @PHP/lang/bug27439.php: SUCCEEDED
    @PHP/lang/bug27535.php: SUCCEEDED
    @PHP/lang/bug28213.php: SUCCEEDED
    @PHP/lang/bug28800.php: SUCCEEDED
    @PHP/lang/bug29566.php: SUCCEEDED
    @PHP/lang/bug29893.php: SUCCEEDED
    @PHP/lang/bug29944.php: SUCCEEDED
    @PHP/lang/bug30638.php: SUCCEEDED
    @PHP/lang/bug30726.php: SUCCEEDED
    @PHP/lang/bug30862.php: SUCCEEDED
    @PHP/lang/bug32924.php: SUCCEEDED
    @PHP/lang/bug35382.php: SUCCEEDED
    @PHP/lang/bug7515.php: SUCCEEDED
    @PHP/lang/each_binary_safety.php: SUCCEEDED
    @PHP/lang/error_2_exception_001.php: SUCCEEDED
    @PHP/lang/foreach_with_object_001.php: SUCCEEDED
    @PHP/lang/foreach_with_references_001.php: SUCCEEDED
    @PHP/lang/type_hints_001.php: SUCCEEDED
    @PHP/standard/array/001.php: SUCCEEDED
    @PHP/standard/array/003.php: SUCCEEDED
    @PHP/standard/array/004.php: SUCCEEDED
    @PHP/standard/array/005.php: SUCCEEDED
    @PHP/standard/array/008.php: SUCCEEDED
    @PHP/standard/array/array_change_key_case.php: SUCCEEDED
    @PHP/standard/array/array_chunk.php: SUCCEEDED
    @PHP/standard/array/array_count_values.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array(0) {
    }
    
    array(1) {
      [0]=>
      int(1)
    }
    
    array(1) {
      [1]=>
      int(1)
    }
    
    array(1) {
      [-1]=>
      int(1)
    }
    
    array(1) {
      [0]=>
      int(2)
    }
    
    array(2) {
      [0]=>
      int(1)
      [1]=>
      int(1)
    }
    
    array(1) {
      [1]=>
      int(2)
    }
    
    array(3) {
      [1]=>
      int(2)
      ["hello"]=>
      int(2)
      ["world"]=>
      int(1)
    }
    
    array(2) {
      ["hello"]=>
      int(2)
      ["world"]=>
      int(1)
    }
    
    array(3) {
      [""]=>
      int(2)
      ["world"]=>
      int(3)
      ["hello"]=>
      int(4)
    }
    
    array(1) {
      [0]=>
      int(1)
    }
    
    array(1) {
      [1]=>
      int(1)
    }
    array(0) [empty]
    
    array(1)
    {
      [0] => integer(1)
    }
    
    array(1)
    {
      [1] => integer(1)
    }
    
    array(1)
    {
      [-1] => integer(1)
    }
    
    array(1)
    {
      [0] => integer(2)
    }
    
    array(2)
    {
      [0] => integer(1)
      [1] => integer(1)
    }
    
    array(1)
    {
      [1] => integer(2)
    }
    
    array(3)
    {
      [1] => integer(2)
      ['hello'] => integer(2)
      ['world'] => integer(1)
    }
    
    array(2)
    {
      ['hello'] => integer(2)
      ['world'] => integer(1)
    }
    
    array(3)
    {
      [''] => integer(2)
      ['world'] => integer(3)
      ['hello'] => integer(4)
    }
    
    array(1)
    {
      [0] => integer(1)
    }
    
    array(1)
    {
      [1] => integer(1)
    }
    @PHP/standard/array/array_diff_1.php: SUCCEEDED
    @PHP/standard/array/array_diff_key.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ------ Test 1 --------
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 2 --------
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 3 --------
    array(6) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [2]=>
      int(4)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [2]=>
      int(4)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 4 --------
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 5 --------
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 6 --------
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 7 --------
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    ------ Test 8 --------
    array(6) {
      [0]=>
      int(0)
      [7]=>
      int(14)
      [2]=>
      int(4)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [0]=>
      int(0)
      [7]=>
      int(14)
      [2]=>
      int(4)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 9 --------
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    ------ Test 1 --------
    array(4)
    {
      [1] => &integer(2)
      [6] => &integer(12)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    array(4)
    {
      [1] => &integer(2)
      [6] => &integer(12)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    ------ Test 2 --------
    array(3)
    {
      [1] => &integer(2)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    array(3)
    {
      [1] => &integer(2)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    ------ Test 3 --------
    array(6)
    {
      [1] => &integer(2)
      [6] => &integer(12)
      [2] => &integer(4)
      [15] => &integer(30)
      [1200] => &integer(2400)
      [-2500] => &integer(-5000)
    }
    array(6)
    {
      [1] => &integer(2)
      [6] => &integer(12)
      [2] => &integer(4)
      [15] => &integer(30)
      [1200] => &integer(2400)
      [-2500] => &integer(-5000)
    }
    ------ Test 4 --------
    array(3)
    {
      [1] => &integer(2)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    array(3)
    {
      [1] => &integer(2)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    ------ Test 5 --------
    array(4)
    {
      [1] => &integer(2)
      [6] => &integer(12)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    array(4)
    {
      [1] => &integer(2)
      [6] => &integer(12)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    ------ Test 6 --------
    array(3)
    {
      [1] => &integer(2)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    array(3)
    {
      [1] => &integer(2)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    ------ Test 7 --------
    array(3)
    {
      [7] => &integer(14)
      [11] => &integer(22)
      [1100] => &integer(2200)
    }
    array(3)
    {
      [7] => &integer(14)
      [11] => &integer(22)
      [1100] => &integer(2200)
    }
    ------ Test 8 --------
    array(6)
    {
      [0] => &integer(0)
      [7] => &integer(14)
      [2] => &integer(4)
      [11] => &integer(22)
      [1100] => &integer(2200)
      [-2500] => &integer(-5000)
    }
    array(6)
    {
      [0] => &integer(0)
      [7] => &integer(14)
      [2] => &integer(4)
      [11] => &integer(22)
      [1100] => &integer(2200)
      [-2500] => &integer(-5000)
    }
    ------ Test 9 --------
    array(3)
    {
      [7] => &integer(14)
      [11] => &integer(22)
      [1100] => &integer(2200)
    }
    array(3)
    {
      [7] => &integer(14)
      [11] => &integer(22)
      [1100] => &integer(2200)
    }
    @PHP/standard/array/array_intersect_key.php: SUCCEEDED
    @PHP/standard/array/array_sum.php: SUCCEEDED
    @PHP/standard/array/array_walk_recursive.php: SUCCEEDED
    @PHP/standard/array/bug12776.php: SUCCEEDED
    @PHP/standard/array/bug14580.php: SUCCEEDED
    @PHP/standard/array/bug20381.php: SUCCEEDED
    @PHP/standard/array/bug20865.php: SUCCEEDED
    @PHP/standard/array/bug21182.php: SUCCEEDED
    @PHP/standard/array/bug21918.php: SUCCEEDED
    @PHP/standard/array/bug21998.php: SUCCEEDED
    @PHP/standard/array/bug22088.php: SUCCEEDED
    @PHP/standard/array/bug22463.php: SUCCEEDED
    @PHP/standard/array/bug23581.php: SUCCEEDED
    @PHP/standard/array/bug23788.php: SUCCEEDED
    @PHP/standard/array/bug24198.php: SUCCEEDED
    @PHP/standard/array/bug24220.php: SUCCEEDED
    @PHP/standard/array/bug24766.php: SUCCEEDED
    @PHP/standard/array/bug24897.php: SUCCEEDED
    @PHP/standard/array/bug24980.php: SUCCEEDED
    @PHP/standard/array/bug25359.php: SUCCEEDED
    @PHP/standard/array/bug25708.php: SUCCEEDED
    @PHP/standard/array/bug25758.php: SUCCEEDED
    @PHP/standard/array/bug26458.php: SUCCEEDED
    @PHP/standard/array/bug28974.php: SUCCEEDED
    @PHP/standard/array/bug29493.php: SUCCEEDED
    @PHP/standard/array/bug30266.php: SUCCEEDED
    @PHP/standard/array/bug30833.php: SUCCEEDED
    @PHP/standard/array/bug31158.php: SUCCEEDED
    @PHP/standard/array/bug31213.php: SUCCEEDED
    @PHP/standard/array/bug32021.php: SUCCEEDED
    @PHP/standard/array/bug33382.php: SUCCEEDED
    @PHP/standard/array/bug33989.php: SUCCEEDED
    @PHP/standard/array/bug34227.php: SUCCEEDED
    @PHP/standard/array/bug34982.php: SUCCEEDED
    @PHP/standard/array/bug35014.php: SUCCEEDED
    @PHP/standard/array/bug35022.php: SUCCEEDED
    @PHP/standard/array/bug35821.php: SUCCEEDED
    @PHP/standard/array/count_recursive.php: SUCCEEDED
    @PHP/standard/array/locale_sort.php: SUCCEEDED
    @PHP/standard/array/range.php: SUCCEEDED
    @PHP/standard/assert/assert.php: SUCCEEDED
    @PHP/standard/general_functions/001.php: SUCCEEDED
    @PHP/standard/general_functions/002.php: SUCCEEDED
    @PHP/standard/general_functions/003.php: SUCCEEDED
    @PHP/standard/general_functions/004.php: SUCCEEDED
    @PHP/standard/general_functions/005.php: SUCCEEDED
    @PHP/standard/general_functions/006.php: SUCCEEDED
    @PHP/standard/general_functions/007.php: SUCCEEDED
    @PHP/standard/general_functions/009.php: SUCCEEDED
    @PHP/standard/general_functions/bug25038.php: SUCCEEDED
    @PHP/standard/general_functions/bug27678.php: SUCCEEDED
    @PHP/standard/general_functions/bug29038.php: SUCCEEDED
    @PHP/standard/general_functions/bug31190.php: SUCCEEDED
    @PHP/standard/general_functions/bug32647.php: SUCCEEDED
    @PHP/standard/general_functions/bug35229.php: SUCCEEDED
    @PHP/standard/general_functions/is_resource.php: SUCCEEDED
    @PHP/standard/math/abs.php: SUCCEEDED
    @PHP/standard/math/bug24142.php: SUCCEEDED
    @PHP/standard/math/bug25694.php: SUCCEEDED
    @PHP/standard/math/bug27646.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    double(INF-INF)
    'd:-INF;'
    double(INF-INF)
    double(INF-INF)
    'd:INF;'
    double(INF-INF)
    double(NaNInfini)
    'd:NAN;'
    double(NaNInfini)
    double(-Infinity)
    'd:-INF;'
    double(-Infinity)
    double(Infinity)
    'd:INF;'
    double(Infinity)
    double(NaN)
    'd:NAN;'
    double(NaN)
    @PHP/standard/math/bug30069.php: SUCCEEDED
    @PHP/standard/math/bug30695.php: SUCCEEDED
    @PHP/standard/math/floorceil.php: SUCCEEDED
    @PHP/standard/math/hexdec.php: SUCCEEDED
    @PHP/standard/math/log.php: SUCCEEDED
    @PHP/standard/math/pow.php: SUCCEEDED
    @PHP/standard/math/round.php: SUCCEEDED
    @PHP/standard/reg/001.php: SUCCEEDED
    @PHP/standard/reg/002.php: SUCCEEDED
    @PHP/standard/reg/003.php: SUCCEEDED
    @PHP/standard/reg/004.php: SUCCEEDED
    @PHP/standard/reg/005.php: SUCCEEDED
    @PHP/standard/reg/006.php: SUCCEEDED
    @PHP/standard/reg/007.php: SUCCEEDED
    @PHP/standard/reg/008.php: SUCCEEDED
    @PHP/standard/reg/009.php: SUCCEEDED
    @PHP/standard/reg/010.php: SUCCEEDED
    @PHP/standard/reg/011.php: SUCCEEDED
    @PHP/standard/reg/012.php: SUCCEEDED
    @PHP/standard/reg/013.php: SUCCEEDED
    @PHP/standard/reg/014.php: SUCCEEDED
    @PHP/standard/reg/015.php: SUCCEEDED
    @PHP/standard/reg/016.php: SUCCEEDED
    @PHP/standard/serialize/001.php: SUCCEEDED
    @PHP/standard/serialize/002.php: SUCCEEDED
    @PHP/standard/serialize/003.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    d:100;
    double(100.0000000000)
    
    d:51999999999999996980101120;
    double(51999999999999996980101120.0000000000)
    
    d:8.9999999999999995265585574287341141808127531476202420890331268310546875E-9;
    double(0.0000000090)
    d:100;
    double(100.0000000000)
    
    d:5.2000000000000006E+25;
    double(52000000000000000000000000.0000000000)
    
    d:9.0000000000000045E-09;
    double(0.0000000090)
    @PHP/standard/serialize/004.php: SUCCEEDED
    @PHP/standard/serialize/005.php: SUCCEEDED
    @PHP/standard/serialize/006.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    'O:3:"´┐Ż":1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    object
    {
      '´┐Ż' => '´┐Ż'
    }
    'a:1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    array
    {
      '´┐Ż' => '´┐Ż'
    }
    'O:3:"´┐Ż":1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    object
    {
      'ďż˝' => 'ďż˝'
    }
    'a:1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    array
    {
      'ďż˝' => 'ďż˝'
    }
    @PHP/standard/serialize/bug14293.php: SUCCEEDED
    @PHP/standard/serialize/bug21957.php: SUCCEEDED
    @PHP/standard/serialize/bug23298.php: SUCCEEDED
    @PHP/standard/serialize/bug24063.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0.1 0.1
    0.01 0.01
    0.001 0.001
    0.0001 0.0001
    1.0E-5 1.0E-5
    1.0E-6 1.0E-6
    1.0E-7 1.0E-7
    1.0E-8 1.0E-8
    1.0E-9 1.0E-9
    0.1 0.1
    0.01 0.01
    0.001 0.001
    0.0001 0.0001
    1E-05 1E-05
    1E-06 1E-06
    1E-07 1E-07
    1E-08 1E-08
    1E-09 1E-09
    @PHP/standard/serialize/bug25378.php: SUCCEEDED
    @PHP/standard/serialize/bug26762.php: SUCCEEDED
    @PHP/standard/serialize/bug27469.php: SUCCEEDED
    @PHP/standard/serialize/bug28325.php: SUCCEEDED
    @PHP/standard/serialize/bug30234.php: SUCCEEDED
    @PHP/standard/serialize/bug31402.php: SUCCEEDED
    @PHP/standard/serialize/bug31442.php: SUCCEEDED
    @PHP/standard/strings/add-and-stripcslashes.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    kaboemkara!
    foo\b\a\r\b\az
    \f\o\o\[ \]
    \zoo['\.']
    \abcd\e\f\g\h\i\j\k\l\m\n\o\pqrstuvwxy\z
    1
    5d
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\standard\strings\__input.txt at expression on line 3, column 1.
    
    kaboemkara!
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\standard\strings\__input.txt at expression on line 5, column 1.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\standard\strings\__input.txt at expression on line 6, column 1.
    
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\standard\strings\__input.txt at expression on line 8, column 1.
    
    1
    5d
    @PHP/standard/strings/add-and-stripslashes.php: SUCCEEDED
    @PHP/standard/strings/basename.php: SUCCEEDED
    @PHP/standard/strings/bin2hex.php: SUCCEEDED
    @PHP/standard/strings/bug20108.php: SUCCEEDED
    @PHP/standard/strings/bug20169.php: SUCCEEDED
    @PHP/standard/strings/bug20261.php: SUCCEEDED
    @PHP/standard/strings/bug20927.php: SUCCEEDED
    @PHP/standard/strings/bug21338.php: SUCCEEDED
    @PHP/standard/strings/bug21453.php: SUCCEEDED
    @PHP/standard/strings/bug21730.php: SUCCEEDED
    @PHP/standard/strings/bug21744.php: SUCCEEDED
    @PHP/standard/strings/bug22008.php: SUCCEEDED
    @PHP/standard/strings/bug22187.php: SUCCEEDED
    @PHP/standard/strings/bug22224.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      0 => 
      object
      {
      }
      1 => 
      object
      {
      }
    }
    @PHP/standard/strings/bug22227.php: SUCCEEDED
    @PHP/standard/strings/bug22904.php: SUCCEEDED
    @PHP/standard/strings/bug23650.php: SUCCEEDED
    @PHP/standard/strings/bug23894.php: SUCCEEDED
    @PHP/standard/strings/bug24098.php: SUCCEEDED
    @PHP/standard/strings/bug24208.php: SUCCEEDED
    @PHP/standard/strings/bug24281.php: SUCCEEDED
    @PHP/standard/strings/bug25671.php: SUCCEEDED
    @PHP/standard/strings/bug25707.php: SUCCEEDED
    @PHP/standard/strings/bug26878.php: SUCCEEDED
    @PHP/standard/strings/bug26973.php: SUCCEEDED
    @PHP/standard/strings/bug27276.php: SUCCEEDED
    @PHP/standard/strings/bug27278.php: SUCCEEDED
    @PHP/standard/strings/bug27295.php: SUCCEEDED
    @PHP/standard/strings/bug27457.php: SUCCEEDED
    @PHP/standard/strings/bug27675.php: SUCCEEDED
    @PHP/standard/strings/bug28386.php: SUCCEEDED
    @PHP/standard/strings/bug33076.php: SUCCEEDED
    @PHP/standard/strings/chr_ord.php: SUCCEEDED
    @PHP/standard/strings/chunk_split.php: SUCCEEDED
    @PHP/standard/strings/count_chars.php: SUCCEEDED
    @PHP/standard/strings/crc32.php: SUCCEEDED
    @PHP/standard/strings/explode.php: SUCCEEDED
    @PHP/standard/strings/implode.php: SUCCEEDED
    @PHP/standard/strings/md5.php: SUCCEEDED
    @PHP/standard/strings/md5raw.php: SUCCEEDED
    @PHP/standard/strings/nl2br.php: SUCCEEDED
    @PHP/standard/strings/sha1.php: SUCCEEDED
    @PHP/standard/strings/sha1raw.php: SUCCEEDED
    @PHP/standard/strings/sprintf_f.php: SUCCEEDED
    @PHP/standard/strings/strcspn.php: SUCCEEDED
    @PHP/standard/strings/strings001.php: SUCCEEDED
    @PHP/standard/strings/strpos.php: SUCCEEDED
    @PHP/standard/strings/strrev.php: SUCCEEDED
    @PHP/standard/strings/strripos.php: SUCCEEDED
    @PHP/standard/strings/strrpos.php: SUCCEEDED
    @PHP/standard/strings/strspn.php: SUCCEEDED
    @PHP/standard/strings/strstr.php: SUCCEEDED
    @PHP/standard/strings/strtoupper.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    cfbfbdcfbfbdcfbfbd
    cfafbdcfafbdcfafbd
    @PHP/standard/strings/strtr.php: SUCCEEDED
    @PHP/standard/strings/strval.php: SUCCEEDED
    @PHP/standard/strings/str_repeat.php: SUCCEEDED
    @PHP/standard/strings/str_shuffle.php: SUCCEEDED
    @PHP/standard/strings/str_word_count.php: SUCCEEDED
    @PHP/standard/strings/substr_count.php: SUCCEEDED
    @PHP/standard/strings/substr_replace.php: SUCCEEDED
    @PHP/standard/strings/wordwrap.php: SUCCEEDED
    @PHP/standard/time/001.php: SUCCEEDED
    @PHP/standard/time/idate.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    U: 1043324459
    Y: 2003
    z: 22
    y: 3
    m: 1
    n: 1
    d: 23
    j: 23
    H: 13
    G: 13
    h: 1
    g: 1
    i: 20
    s: 59
    t: 31
    w: 4
    L: 0
    B: 556
    I: 0
    W: 4
    U: 1043324459
    Y: 2003
    z: 22
    y: 3
    m: 1
    n: 1
    d: 23
    j: 23
    H: 12
    G: 12
    h: 12
    g: 12
    i: 20
    s: 59
    t: 31
    w: 4
    L: 0
    B: 556
    I: 0
    W: 4
    @PHP/strings/001.php: SUCCEEDED
    @PHP/strings/002.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    fprintf test 1:abcde
    20
    printf test 1:simple string
    printf test 2:42
    printf test 3:3.333333
    printf test 4:3.3333333333
    printf test 5:2.50      
    printf test 6:2.50000000
    printf test 7:0000002.50
    printf test 8:<                 foo>
    printf test 9:<bar                 >
    printf test 10: 123456789012345
    printf test 10:<h´┐Żyesterettsjustitiarius>
    printf test 11: 123456789012345678901234567890
    printf test 11:<    h´┐Żyesterettsjustitiarius>
    printf test 12:-12.34
    printf test 13:  -12
    printf test 14:@
    printf test 15:10101010
    printf test 16:aa
    printf test 17:AA
    printf test 18:        10101010
    printf test 19:              aa
    printf test 20:              AA
    printf test 21:0000000010101010
    printf test 22:00000000000000aa
    printf test 23:00000000000000AA
    printf test 24:abcde
    printf test 25:gazonk
    printf test 26:2 1
    printf test 27:3 1 2
    printf test 28:02  1
    printf test 29:2   1
    printf test 30:x
    vprintf test 1:2   1
    fprintf test 1:abcde
    20
    printf test 1:simple string
    printf test 2:42
    printf test 3:3.333333
    printf test 4:3.3333333333
    printf test 5:2.50      
    printf test 6:2.50000000
    printf test 7:0000002.50
    printf test 8:<                 foo>
    printf test 9:<bar                 >
    printf test 10: 123456789012345
    printf test 10:<h�yesterettsjustitiarius>
    printf test 11: 123456789012345678901234567890
    printf test 11:<    h�yesterettsjustitiarius>
    printf test 12:-12.34
    printf test 13:  -12
    printf test 14:@
    printf test 15:10101010
    printf test 16:aa
    printf test 17:AA
    printf test 18:        10101010
    printf test 19:              aa
    printf test 20:              AA
    printf test 21:0000000010101010
    printf test 22:00000000000000aa
    printf test 23:00000000000000AA
    printf test 24:abcde
    printf test 25:gazonk
    printf test 26:2 1
    printf test 27:3 1 2
    printf test 28:02  1
    printf test 29:2   1
    printf test 30:x
    vprintf test 1:2   1
    @PHP/strings/bug22592.php: SUCCEEDED
    Arrays/array1.php: SUCCEEDED
    Arrays/array_diff_intersect.php: SUCCEEDED
    Arrays/array_diff_intersect2.php: SUCCEEDED
    Arrays/array_diff_intersect3.php: SUCCEEDED
    Arrays/array_map.php: SUCCEEDED
    Arrays/array_merge_recursive.php: SUCCEEDED
    Arrays/array_reduce1.php: SUCCEEDED
    Arrays/array_reduce2.php: SUCCEEDED
    Arrays/array_slice.php: SUCCEEDED
    Arrays/array_sumprod.php: SUCCEEDED
    Arrays/array_unshift.php: SUCCEEDED
    Arrays/array_walk.php: SUCCEEDED
    Arrays/array_walk_recursive.php: SUCCEEDED
    Arrays/multisort.php: SUCCEEDED
    Arrays/optimizations.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    3
    4
    5
    a
    b
    c
    
    Warning: strtolower() expects parameter 1 to be string, array given in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Arrays\__input.txt on line 15
    
    cablo
    3
    4
    5
    a
    b
    c
    array
    cablo
    Arrays/recursion.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    f1:
    array(2) {
      ["a"]=>
      array(5) {
        ["a"]=>
        &array(3) {
          ["a"]=>
          &array(3) {
            ["a"]=>
            *RECURSION*
            [0]=>
            string(1) "y"
            [1]=>
            string(1) "z"
          }
          [0]=>
          string(1) "y"
          [1]=>
          string(1) "z"
        }
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        string(1) "x"
      }
      [0]=>
      string(1) "w"
    }
    f2:
    array(1) {
      ["A"]=>
      &array(2) {
        ["a"]=>
        &array(2) {
          ["a"]=>
          *RECURSION*
          [0]=>
          string(1) "z"
        }
        [0]=>
        string(1) "z"
      }
    }
    f3:
    array(2) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) {
          [0]=>
          *RECURSION*
          [1]=>
          string(1) "z"
        }
        [1]=>
        string(1) "z"
      }
      [1]=>
      string(1) "z"
    }
    f4:
    
    Warning: array_merge_recursive(): recursion detected in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Arrays\__input.txt on line 37
    array(1) {
      ["a"]=>
      &array(3) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
      }
    }
    f5:
    array(1) {
      ["a"]=>
      array(6) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        int(1)
        [4]=>
        int(2)
        [5]=>
        int(3)
      }
    }
    f6:
    array(1) {
      ["a"]=>
      array(2) {
        [0]=>
        string(2) "xx"
        [1]=>
        int(2)
      }
    }
    f7:
    array(1) {
      ["a"]=>
      array(1) {
        ["a"]=>
        array(1) {
          ["a"]=>
          &array(1) {
            ["a"]=>
            &array(1) {
              ["a"]=>
              *RECURSION*
            }
          }
        }
      }
    }
    f1:
    array(2)
    {
      ['a'] => array(5)
      {
        ['a'] => &array(3)
        {
          ['a'] => &array(3) [recursion]
          [0] => string(1) "y"
          [1] => string(1) "z"
        }
        [0] => integer(1)
        [1] => integer(2)
        [2] => integer(3)
        [3] => string(1) "x"
      }
      [0] => string(1) "w"
    }
    f2:
    array(1)
    {
      ['A'] => &array(2)
      {
        ['a'] => &array(2) [recursion]
        [0] => string(1) "z"
      }
    }
    f3:
    array(2)
    {
      [0] => &array(2) [recursion]
      [1] => string(1) "z"
    }
    f4:
    array(1)
    {
      ['a'] => array(6)
      {
        [0] => integer(1)
        [1] => integer(2)
        [2] => integer(3)
        [3] => integer(1)
        [4] => integer(2)
        [5] => integer(3)
      }
    }
    f5:
    array(1)
    {
      ['a'] => array(6)
      {
        [0] => integer(1)
        [1] => integer(2)
        [2] => integer(3)
        [3] => integer(1)
        [4] => integer(2)
        [5] => integer(3)
      }
    }
    f6:
    array(1)
    {
      ['a'] => array(2)
      {
        [0] => string(2) "xx"
        [1] => integer(2)
      }
    }
    f7:
    array(1)
    {
      ['a'] => &array(1)
      {
        ['a'] => &array(1) [recursion]
      }
    }
    Arrays/sort.php: SUCCEEDED
    Arrays/usort.php: SUCCEEDED
    Bugs/class_incompletepart.php: SUCCEEDED
    Bugs/division-by-zero.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    DIVISION
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt on line 6
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt on line 8
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt on line 10
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt on line 12
    bool(false)
    MODULO
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt on line 16
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt on line 18
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt on line 20
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt on line 22
    bool(false)
    DIVISION
    bool(false)
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt at expression on line 10, column 2.
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt at expression on line 12, column 2.
    bool(false)
    MODULO
    bool(false)
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt at expression on line 20, column 2.
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt at expression on line 22, column 2.
    bool(false)
    D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt(6,10): warning PHP0150: Division by zero
    D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt(8,9): warning PHP0150: Division by zero
    D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt(16,10): warning PHP0150: Division by zero
    D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt(18,9): warning PHP0150: Division by zero
    
    Bugs/function-in-unknown-class.php: SUCCEEDED
    Bugs/is_a_null_value.php: SUCCEEDED
    Bugs/preg-named-groups.php: SUCCEEDED
    Bugs/preg-replace-advanced.php: SUCCEEDED
    Bugs/preg-replace-range.php: SUCCEEDED
    Bugs/preg-replace.php: SUCCEEDED
    Bugs/preg-this-dynamic.php: FAILED
    Script hung upNo errorsSuccess
    Expected test outputReal script output
    Unhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---> System.NullReferenceException: Object reference not set to an instance of an object.
       at PHP.Core.RelativePath.ParseCanonical(String relativePath)
       at PHP.Core.Emit.TransientAssemblyBuilder.Build(String sourceCode, SourceCodeDescriptor descriptor, EvalKinds kind, CompilationContext context, ScriptContext scriptContext, DTypeDesc referringType, NamingContext namingContext, Boolean completeSource)
       at PHP.Core.DynamicCode.EvalInternal(String prefix, String code, String suffix, EvalKinds kind, ScriptContext scriptContext, Dictionary`2 localVariables, DObject self, DTypeDesc referringType, SourceCodeDescriptor descriptor, Boolean entireFile, NamingContext namingContext)
       at PHP.Core.DynamicCode.Eval(String code, Boolean synthetic, ScriptContext context, Dictionary`2 definedVariables, DObject self, DTypeDesc referringType, String callerRelativeSourcePath, Int32 line, Int32 column, Int32 containerId, NamingContext namingContext)
       at PHP.Library.PerlRegExp.Evaluator.ReplaceCodeExecute(Match m)
       at System.Text.RegularExpressions.RegexReplacement.Replace(MatchEvaluator evaluator, Regex regex, String input, Int32 count, Int32 startat)
       at System.Text.RegularExpressions.Regex.Replace(String input, MatchEvaluator evaluator, Int32 count)
       at PHP.Library.PerlRegExp.ReplaceInternal(DObject self, Dictionary`2 definedVariables, PerlRegExpConverter converter, PhpCallback callback, String str, Int32 limit, SourceCodeDescriptor sourceCodeDesc, Int32& count)
       at PHP.Library.PerlRegExp.SimpleReplace(DObject self, Dictionary`2 definedVariables, Object pattern, String replacement, PhpCallback callback, Object data, Int32 limit, SourceCodeDescriptor descriptor, Int32& count)
       at PHP.Library.PerlRegExp.Replace(DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, PhpCallback callback, Object data, Int32 limit, Int32& count)
       at PHP.Library.PerlRegExp.Replace(DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, Object data)
       at PHP.Dynamic.PhpNetClassLibrary.preg_replace(Object , PhpStack )
       at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <__input.txt>.a.a(ScriptContext ) in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt:line 16
       at <__input.txt>.a.<Mediator>(ScriptContext )
       at <__input.txt>.a.a(Object instance, PhpStack stack)
       at <__input.txt>.<Script>.<Main>(ScriptContext <context>, Dictionary`2 <locals>, DObject , DTypeDesc , Boolean ) in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt:line 19
       at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)
       at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)
       --- End of inner exception stack trace ---
       at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)
       at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)
       at <Global>.Run(String[] )
    
    Bugs/preg-this-dynamic2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    foo: ahoj
    foo: lidi
    foo: rozkladame
    foo: ahoj
    foo: lidi
    foo: rozkladame
    foo: ahoj
    foo: lidi
    foo: rozkladame
    
    Notice: Undefined variable: this.
    
    Error: Call to a member function foo() on a non-object.
    Bugs/preg-this.php: SUCCEEDED
    Bugs/preg-ungreedy-bugs.php: SUCCEEDED
    Bugs/preg-unkn.php: SUCCEEDED
    Compiler/abstracts.php: SUCCEEDED
    Compiler/assignments.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ---1---1float(-1.5)
    float(2.5)
    float(0.83333333333333)
    int(6)
    int(8)
    ---2---2float(8.8333333333333)
    float(8.8333333333333)
    float(8.8333333333333)
    int(8)
    int(8)
    ---3---3---4---4---5---5array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [1]=>
      array(1) {
        [2]=>
        array(1) {
          [3]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    ---6---6array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "u"
    }
    array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "v"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    ---7---7array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    ---8---8
    ---1---1double(-1.5)
    double(2.5)
    double(0.833333333333333)
    integer(6)
    integer(8)
    ---2---2double(8.83333333333333)
    double(8.83333333333333)
    double(8.83333333333333)
    integer(8)
    integer(8)
    ---3---3---4---4---5---5array(1)
    {
      [0] => array(1)
      {
        [0] => array(1)
        {
          [0] => array(3)
          {
            [0] => integer(1)
            [1] => integer(2)
            [2] => integer(3)
          }
        }
      }
    }
    array(1)
    {
      [0] => array(1)
      {
        [0] => array(1)
        {
          [0] => array(3)
          {
            [0] => integer(1)
            [1] => integer(2)
            [2] => integer(3)
          }
        }
      }
    }
    array(1)
    {
      [1] => array(1)
      {
        [2] => array(1)
        {
          [3] => array(3)
          {
            [0] => integer(1)
            [1] => integer(2)
            [2] => integer(3)
          }
        }
      }
    }
    ---6---6array(4)
    {
      [0] => integer(1)
      [1] => integer(2)
      [2] => integer(3)
      [3] => string(1) "u"
    }
    array(4)
    {
      [0] => integer(1)
      [1] => integer(2)
      [2] => integer(3)
      [3] => string(1) "v"
    }
    array(5)
    {
      [0] => integer(1)
      [1] => integer(2)
      [2] => integer(3)
      [3] => string(1) "w"
      [4] => string(1) "z"
    }
    array(5)
    {
      [0] => integer(1)
      [1] => integer(2)
      [2] => integer(3)
      [3] => string(1) "w"
      [4] => string(1) "z"
    }
    ---7---7array(1)
    {
      [0] => array(1)
      {
        [0] => array(1)
        {
          [0] => array(1)
          {
            [0] => &integer(10)
          }
        }
      }
    }
    array(1)
    {
      [0] => array(1)
      {
        [0] => array(1)
        {
          [0] => array(1)
          {
            [0] => &integer(10)
          }
        }
      }
    }
    ---8---8
    Compiler/assign_in_call.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    g1:
    f(x)
    u(x)
    'x'
    
    g2:
    f(x)
    u(x)
    'b'
    
    g3:
    f(x)
    u(x)
    'b'
    
    g4:
    f(x)
    u(x)
    'b'
    
    g5:
    f()
    u()
    integer(1)
    
    g6:
    f(3)
    u(3)
    integer(3)
    
    g7:
    f(2)
    u(10)
    integer(10)
    
    g8:
    f(1)
    f(1)
    f(1)
    u(1)
    u()
    u(1)
    
    g9:
    known:
    __get(p) = 0
    __set(p,1)
    f(1)
    unknown:
    __get(p) = 1
    __set(p,3)
    u(3)
    
    g10:
    Done.
    g1:
    f(x)
    u(x)
    'x'
    
    g2:
    f(x)
    u(x)
    'b'
    
    g3:
    f(x)
    u(x)
    'b'
    
    g4:
    f(x)
    u(x)
    'b'
    
    g5:
    f()
    u()
    integer(1)
    
    g6:
    f(3)
    u(3)
    integer(3)
    
    g7:
    f(2)
    u(10)
    integer(10)
    
    g8:
    f(1)
    f(1)
    f(1)
    u(1)
    u()
    u(1)
    
    g9:
    known:
    __get(p) = 0
    __set(p,1)
    __get(p) = 1
    f(1)
    unknown:
    __get(p) = 1
    __set(p,3)
    __get(p) = 3
    u(3)
    
    g10:
    Done.
    Compiler/auto_globals_001.php: SUCCEEDED
    Compiler/auto_globals_002.php: SUCCEEDED
    Compiler/auto_globals_003.php: SUCCEEDED
    Compiler/break_in_global_code.php: SUCCEEDED
    Compiler/chaining_test.php: SUCCEEDED
    Compiler/chain_ending_by_string_index.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        string(1) "f"
      }
    }
    array(1) {
      [0]=>
      string(4) "xubu"
    }
    object(C)#1 (1) {
      ["f"]=>
      string(4) "kuxu"
    }
    string(5) "helxo"
    string(5) "helxo"
    array(1)
    {
      [0] => array(1)
      {
        [0] => string(1) "f"
      }
    }
    array(1)
    {
      [0] => string(4) "bubu"
    }
    
    Warning: A string item used as a reference in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt at expression on line 19, column 1.
    object(C)(1)
    {
      ["f"] => string(4) "kuku"
    }
    
    Warning: A string item used as a reference in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt at expression on line 25, column 1.
    string(5) "hello"
    
    Warning: A string item used as a reference in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt at expression on line 31, column 1.
    string(5) "hello"
    Compiler/continue_in_global_code.php: SUCCEEDED
    Compiler/deep_copy.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array(1) {
      [0]=>
      &array(1) {
        [0]=>
        &array(1) {
          [0]=>
          *RECURSION*
        }
      }
    }
    array(1) {
      [0]=>
      &array(1) {
        [0]=>
        &array(1) {
          [0]=>
          *RECURSION*
        }
      }
    }
    array(2) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) {
          [0]=>
          *RECURSION*
          [1]=>
          int(1)
        }
        [1]=>
        int(1)
      }
      [1]=>
      int(1)
    }
    array(1) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) {
          [0]=>
          *RECURSION*
          [1]=>
          int(1)
        }
        [1]=>
        int(1)
      }
    }
    array(1)
    {
      [0] => &array(1) [recursion]
    }
    array(1)
    {
      [0] => &array(1) [recursion]
    }
    array(2)
    {
      [0] => &array(2) [recursion]
      [1] => integer(1)
    }
    array(1)
    {
      [0] => &array(1) [recursion]
    }
    Compiler/deep_copy_refbox.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Strict Standards: Only variables should be passed by reference in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt on line 42
    array
    {
      0 => integer(1)
    }
    
    Strict Standards: Only variables should be passed by reference in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt on line 45
    array
    {
      0 => integer(1)
    }
    
    Strict Standards: Only variables should be passed by reference in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt on line 49
    array
    {
      0 => integer(1)
    }
    
    Strict Standards: Only variables should be passed by reference in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt on line 52
    array
    {
      0 => integer(1)
    }
    array
    {
      0 => integer(1)
      1 => integer(1)
    }
    array
    {
      0 => integer(1)
      1 => integer(1)
    }
    array
    {
      0 => integer(1)
      1 => integer(1)
    }
    array
    {
      0 => integer(1)
      1 => integer(1)
    }
    Compiler/expr_init.php: SUCCEEDED
    Compiler/foreach1.php: SUCCEEDED
    Compiler/foreach_arrays.php: SUCCEEDED
    Compiler/for_loop.php: SUCCEEDED
    Compiler/function_002.php: SUCCEEDED
    Compiler/function_003.php: SUCCEEDED
    Compiler/function_004.php: SUCCEEDED
    Compiler/function_call.php: SUCCEEDED
    Compiler/if_statement.php: SUCCEEDED
    Compiler/indirect_001.php: SUCCEEDED
    Compiler/indirect_002.php: SUCCEEDED
    Compiler/indirect_003.php: SUCCEEDED
    Compiler/indirect_004.php: SUCCEEDED
    Compiler/indirect_005.php: SUCCEEDED
    Compiler/indirect_007.php: SUCCEEDED
    Compiler/indirect_global.php: SUCCEEDED
    Compiler/inheritance.php: SUCCEEDED
    Compiler/inheritance2.php: SUCCEEDED
    Compiler/isset_unset_001.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Testing x in global code:  <br>
    1 <br>
     <br>
    Testing x (object) in optimized function:  <br>
    1 <br>
     <br>
    Testing x (PhpReference) in optimized function:  <br>
    1 <br>
     <br>
    
    Notice: Undefined variable: y in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt on line 29
    Testing $$x (created at runtime) in optimized function:  <br>
    1 <br>
    Testing x in global code:  <br>
    1 <br>
     <br>
    Testing x (object) in optimized function:  <br>
    1 <br>
     <br>
    Testing x (PhpReference) in optimized function:  <br>
    1 <br>
     <br>
    Testing $$x (created at runtime) in optimized function:  <br>
    1 <br>
    Compiler/null_hints.php: SUCCEEDED
    Compiler/switch.php: SUCCEEDED
    Compiler/ternary_ex.php: SUCCEEDED
    Compiler/typehint_check.php: SUCCEEDED
    Compiler/Inclusions/include2.php: SUCCEEDED
    Compiler/Inclusions/include3.php: SUCCEEDED
    Compiler/Inclusions/include6.php: SUCCEEDED
    Compiler/Inclusions/include_test.php: SUCCEEDED
    Compiler/Inclusions/script.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t01.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t02.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t03.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t04.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t05.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t08.php: SUCCEEDED
    Compiler/PseudoConst/parent.php: SUCCEEDED
    Compiler/PseudoConst/parent2.php: SUCCEEDED
    Compiler/PseudoConst/self.php: SUCCEEDED
    Compiler/PseudoConst/t01.php: SUCCEEDED
    Compiler/PseudoConst/t02.php: SUCCEEDED
    Compiler/PseudoConst/t03.php: SUCCEEDED
    Compiler/PseudoConst/t04.php: SUCCEEDED
    Compiler/PseudoConst/t05.php: SUCCEEDED
    Compiler/PseudoConst/t06.php: SUCCEEDED
    Compiler/PseudoConst/t07.php: SUCCEEDED
    Compiler/PseudoConst/t08.php: SUCCEEDED
    Compiler/PseudoConst/t09.php: SUCCEEDED
    Compiler/PseudoConst/t10.php: SUCCEEDED
    Compiler/PseudoConst/t11.php: SUCCEEDED
    Compiler/PseudoConst/_class_.php: SUCCEEDED
    Compiler/PseudoConst/_function_.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Notice: Undefined variable: a in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\PseudoConst\__input.txt on line 11
    g
    g
    Compiler/Unreachable/t13.php: SUCCEEDED
    DateTime/strftime.php: SUCCEEDED
    DateTime/strtotime1.php: SUCCEEDED
    DateTime/strtotime2.php: SUCCEEDED
    DateTime/strtotime3.php: SUCCEEDED
    DateTime/strtotime4.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0: 00:00:00 01/01/2005
    1: 01:00:00 01/01/2005
    2: 02:00:00 01/01/2005
    3: 03:00:00 01/01/2005
    4: 04:00:00 01/01/2005
    5: 05:00:00 01/01/2005
    6: 06:00:00 01/01/2005
    7: 07:00:00 01/01/2005
    8: 08:00:00 01/01/2005
    9: 09:00:00 01/01/2005
    10: 10:00:00 01/01/2005
    11: 11:00:00 01/01/2005
    12: 12:00:00 01/01/2005
    13: 13:00:00 01/01/2005
    14: 14:00:00 01/01/2005
    15: 15:00:00 01/01/2005
    16: 16:00:00 01/01/2005
    17: 17:00:00 01/01/2005
    18: 18:00:00 01/01/2005
    19: 19:00:00 01/01/2005
    20: 20:00:00 01/01/2005
    21: 21:00:00 01/01/2005
    22: 22:00:00 01/01/2005
    23: 23:00:00 01/01/2005
    24: 00:00:00 01/02/2005
    0am: error
    1am: 01:00:00 01/01/2005
    2am: 02:00:00 01/01/2005
    3am: 03:00:00 01/01/2005
    4am: 04:00:00 01/01/2005
    5am: 05:00:00 01/01/2005
    6am: 06:00:00 01/01/2005
    7am: 07:00:00 01/01/2005
    8am: 08:00:00 01/01/2005
    9am: 09:00:00 01/01/2005
    10am: 10:00:00 01/01/2005
    11am: 11:00:00 01/01/2005
    12am: 00:00:00 01/01/2005
    13am: error
    14am: error
    15am: error
    16am: error
    17am: error
    18am: error
    19am: error
    20am: error
    21am: error
    22am: error
    23am: error
    24am: error
    0pm: error
    1pm: 13:00:00 01/01/2005
    2pm: 14:00:00 01/01/2005
    3pm: 15:00:00 01/01/2005
    4pm: 16:00:00 01/01/2005
    5pm: 17:00:00 01/01/2005
    6pm: 18:00:00 01/01/2005
    7pm: 19:00:00 01/01/2005
    8pm: 20:00:00 01/01/2005
    9pm: 21:00:00 01/01/2005
    10pm: 22:00:00 01/01/2005
    11pm: 23:00:00 01/01/2005
    12pm: 12:00:00 01/01/2005
    13pm: error
    14pm: error
    15pm: error
    16pm: error
    17pm: error
    18pm: error
    19pm: error
    20pm: error
    21pm: error
    22pm: error
    23pm: error
    24pm: error
    0: 00:00:00 01/01/2005
    1: 01:00:00 01/01/2005
    2: 02:00:00 01/01/2005
    3: 03:00:00 01/01/2005
    4: 04:00:00 01/01/2005
    5: 05:00:00 01/01/2005
    6: 06:00:00 01/01/2005
    7: 07:00:00 01/01/2005
    8: 08:00:00 01/01/2005
    9: 09:00:00 01/01/2005
    10: 10:00:00 01/01/2005
    11: 11:00:00 01/01/2005
    12: 12:00:00 01/01/2005
    13: 13:00:00 01/01/2005
    14: 14:00:00 01/01/2005
    15: 15:00:00 01/01/2005
    16: 16:00:00 01/01/2005
    17: 17:00:00 01/01/2005
    18: 18:00:00 01/01/2005
    19: 19:00:00 01/01/2005
    20: 20:00:00 01/01/2005
    21: 21:00:00 01/01/2005
    22: 22:00:00 01/01/2005
    23: 23:00:00 01/01/2005
    24: error
    0am: error
    1am: 01:00:00 01/01/2005
    2am: 02:00:00 01/01/2005
    3am: 03:00:00 01/01/2005
    4am: 04:00:00 01/01/2005
    5am: 05:00:00 01/01/2005
    6am: 06:00:00 01/01/2005
    7am: 07:00:00 01/01/2005
    8am: 08:00:00 01/01/2005
    9am: 09:00:00 01/01/2005
    10am: 10:00:00 01/01/2005
    11am: 11:00:00 01/01/2005
    12am: 00:00:00 01/01/2005
    13am: error
    14am: error
    15am: error
    16am: error
    17am: error
    18am: error
    19am: error
    20am: error
    21am: error
    22am: error
    23am: error
    24am: error
    0pm: error
    1pm: 13:00:00 01/01/2005
    2pm: 14:00:00 01/01/2005
    3pm: 15:00:00 01/01/2005
    4pm: 16:00:00 01/01/2005
    5pm: 17:00:00 01/01/2005
    6pm: 18:00:00 01/01/2005
    7pm: 19:00:00 01/01/2005
    8pm: 20:00:00 01/01/2005
    9pm: 21:00:00 01/01/2005
    10pm: 22:00:00 01/01/2005
    11pm: 23:00:00 01/01/2005
    12pm: 12:00:00 01/01/2005
    13pm: error
    14pm: error
    15pm: error
    16pm: error
    17pm: error
    18pm: error
    19pm: error
    20pm: error
    21pm: error
    22pm: error
    23pm: error
    24pm: error
    DateTime/strtotime5.php: SUCCEEDED
    DateTime/time.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    -189388800:-189475200 - 86400
    1964-01-01T00:00:00+0000
    1963-12-31T00:00:00+0000
    1964-06-06
    1963-06-06
    1964-01-06
    1133305200
    -189388800:-189475200 - 86400
    1964-01-01T00:00:00+0000
    1963-12-31T00:00:00+0000
    1964-06-06
    1963-06-06
    1964-01-06
    DateTime/timezones1.php: SUCCEEDED
    FileSystem/basename.php: SUCCEEDED
    FileSystem/basename2.php: SUCCEEDED
    FileSystem/chdir.php: SUCCEEDED
    FileSystem/csv.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    --- write ---
    72
    24
    44
    2
    6
    
    --- read ---
    "hello\n
    world";"aaa""bbb""ccc";"blah blah;";none;"tab\ttab";"space space"\n
    hh'ee;"ss\nsadasdasd s"\n
    """""""""""""""""""""";"""";;"""""";"xxx"""\n
    x\n
    "x\y"\n
    --- write ---
    72
    24
    44
    2
    6
    
    --- read ---
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    FileSystem/date.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <pre>[ARRAY
      [INT (0)] => [STRING: "A --> {PM}"]
      [INT (1)] => [STRING: "B --> {719}"]
      [INT (2)] => [STRING: "C --> {C}"]
      [INT (3)] => [STRING: "D --> {Sat}"]
      [INT (4)] => [STRING: "E --> {E}"]
      [INT (5)] => [STRING: "F --> {March}"]
      [INT (6)] => [STRING: "G --> {17}"]
      [INT (7)] => [STRING: "H --> {17}"]
      [INT (8)] => [STRING: "I --> {0}"]
      [INT (9)] => [STRING: "J --> {J}"]
      [INT (10)] => [STRING: "K --> {K}"]
      [INT (11)] => [STRING: "L --> {0}"]
      [INT (12)] => [STRING: "M --> {Mar}"]
      [INT (13)] => [STRING: "N --> {6}"]
      [INT (14)] => [STRING: "O --> {+0100}"]
      [INT (15)] => [STRING: "P --> {+01:00}"]
      [INT (16)] => [STRING: "Q --> {Q}"]
      [INT (17)] => [STRING: "R --> {R}"]
      [INT (18)] => [STRING: "S --> {th}"]
      [INT (19)] => [STRING: "U --> {984240978}"]
      [INT (20)] => [STRING: "V --> {V}"]
      [INT (21)] => [STRING: "W --> {10}"]
      [INT (22)] => [STRING: "X --> {X}"]
      [INT (23)] => [STRING: "Y --> {2001}"]
      [INT (24)] => [STRING: "Z --> {3600}"]
      [INT (25)] => [STRING: "a --> {pm}"]
      [INT (26)] => [STRING: "b --> {b}"]
      [INT (27)] => [STRING: "c --> {2001-03-10T17:16:18+01:00}"]
      [INT (28)] => [STRING: "d --> {10}"]
      [INT (29)] => [STRING: "e --> {Europe/Prague}"]
      [INT (30)] => [STRING: "f --> {f}"]
      [INT (31)] => [STRING: "g --> {5}"]
      [INT (32)] => [STRING: "h --> {05}"]
      [INT (33)] => [STRING: "i --> {16}"]
      [INT (34)] => [STRING: "j --> {10}"]
      [INT (35)] => [STRING: "k --> {k}"]
      [INT (36)] => [STRING: "l --> {Saturday}"]
      [INT (37)] => [STRING: "m --> {03}"]
      [INT (38)] => [STRING: "n --> {3}"]
      [INT (39)] => [STRING: "o --> {2001}"]
      [INT (40)] => [STRING: "p --> {p}"]
      [INT (41)] => [STRING: "q --> {q}"]
      [INT (42)] => [STRING: "r --> {Sat, 10 Mar 2001 17:16:18 +0100}"]
      [INT (43)] => [STRING: "s --> {18}"]
      [INT (44)] => [STRING: "t --> {31}"]
      [INT (45)] => [STRING: "u --> {000000}"]
      [INT (46)] => [STRING: "v --> {v}"]
      [INT (47)] => [STRING: "w --> {6}"]
      [INT (48)] => [STRING: "x --> {x}"]
      [INT (49)] => [STRING: "y --> {01}"]
      [INT (50)] => [STRING: "z --> {68}"]
    ]</pre>
    <pre>[ARRAY
      [INT (0)] => [STRING: "A --> {PM}"]
      [INT (1)] => [STRING: "B --> {719}"]
      [INT (2)] => [STRING: "C --> {C}"]
      [INT (3)] => [STRING: "D --> {Sat}"]
      [INT (4)] => [STRING: "E --> {E}"]
      [INT (5)] => [STRING: "F --> {March}"]
      [INT (6)] => [STRING: "G --> {17}"]
      [INT (7)] => [STRING: "H --> {17}"]
      [INT (8)] => [STRING: "I --> {0}"]
      [INT (9)] => [STRING: "J --> {J}"]
      [INT (10)] => [STRING: "K --> {K}"]
      [INT (11)] => [STRING: "L --> {0}"]
      [INT (12)] => [STRING: "M --> {Mar}"]
      [INT (13)] => [STRING: "N --> {6}"]
      [INT (14)] => [STRING: "O --> {+0100}"]
      [INT (15)] => [STRING: "P --> {+01:00}"]
      [INT (16)] => [STRING: "Q --> {Q}"]
      [INT (17)] => [STRING: "R --> {R}"]
      [INT (18)] => [STRING: "S --> {th}"]
      [INT (19)] => [STRING: "U --> {984240978}"]
      [INT (20)] => [STRING: "V --> {V}"]
      [INT (21)] => [STRING: "W --> {10}"]
      [INT (22)] => [STRING: "X --> {X}"]
      [INT (23)] => [STRING: "Y --> {2001}"]
      [INT (24)] => [STRING: "Z --> {3600}"]
      [INT (25)] => [STRING: "a --> {pm}"]
      [INT (26)] => [STRING: "b --> {b}"]
      [INT (27)] => [STRING: "c --> {2001-03-10T17:16:18+01:00}"]
      [INT (28)] => [STRING: "d --> {10}"]
      [INT (29)] => [STRING: "e --> {Europe/Prague}"]
      [INT (30)] => [STRING: "f --> {f}"]
      [INT (31)] => [STRING: "g --> {5}"]
      [INT (32)] => [STRING: "h --> {05}"]
      [INT (33)] => [STRING: "i --> {16}"]
      [INT (34)] => [STRING: "j --> {10}"]
      [INT (35)] => [STRING: "k --> {k}"]
      [INT (36)] => [STRING: "l --> {Saturday}"]
      [INT (37)] => [STRING: "m --> {03}"]
      [INT (38)] => [STRING: "n --> {3}"]
      [INT (39)] => [STRING: "o --> {2001}"]
      [INT (40)] => [STRING: "p --> {p}"]
      [INT (41)] => [STRING: "q --> {q}"]
      [INT (42)] => [STRING: "r --> {Sat, 10 Mar 2001 17:16:18 +0100}"]
      [INT (43)] => [STRING: "s --> {18}"]
      [INT (44)] => [STRING: "t --> {31}"]
      [INT (45)] => [STRING: "u --> {u}"]
      [INT (46)] => [STRING: "v --> {v}"]
      [INT (47)] => [STRING: "w --> {6}"]
      [INT (48)] => [STRING: "x --> {x}"]
      [INT (49)] => [STRING: "y --> {01}"]
      [INT (50)] => [STRING: "z --> {68}"]
    ]</pre>
    FileSystem/date2.php: SUCCEEDED
    FileSystem/date3.php: SUCCEEDED
    FileSystem/date_unix.php: SUCCEEDED
    FileSystem/dirname.php: SUCCEEDED
    FileSystem/dirname2.php: SUCCEEDED
    FileSystem/disk_free_space.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    121 GB
    Drive C: 209 GB
    Drive D: 121 GB
    Drive E: 96 GB
    Drive F: 
    Warning: disk_free_space(): The device is not ready.
     in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt on line 14
    false
    121 GB
    Drive C: 209 GB
    Drive D: 121 GB
    Drive E: 96 GB
    Drive F: false
    FileSystem/disk_total_space.php: SUCCEEDED
    FileSystem/fgets.php: SUCCEEDED
    FileSystem/file.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <pre>[ARRAY
      [INT (0)] => [STRING: "this is a file with one EOLN
    "]
    ]</pre>
    <pre>[ARRAY
      [INT (0)] => [STRING: ""]
      [INT (1)] => [STRING: "This is a file with two EOLNs. First line is empty."]
    ]</pre>
    <pre>[ARRAY
      [INT (0)] => [STRING: "
    "]
      [INT (1)] => [STRING: "This is a file with two EOLNs. First line is empty.
    "]
    ]</pre>
    <pre>[ARRAY
      [INT (0)] => [STRING: "This is a file with two EOLNs. First line is empty."]
    ]</pre>
    <pre>[ARRAY
      [INT (0)] => [STRING: "this is a file WITHOUT an "end-of-line""]
    ]</pre>
    Line #<b>130</b> : &lt;/html&gt;
    <br />
    [this is a file with one EOLN{\n}
    ]
    <pre>[ARRAY
      [INT (0)] => [STRING: "this is a file with one EOLN
    "]
    ]</pre>
    <pre>[ARRAY
      [INT (0)] => [STRING: ""]
      [INT (1)] => [STRING: "This is a file with two EOLNs. First line is empty."]
    ]</pre>
    <pre>[ARRAY
      [INT (0)] => [STRING: "
    "]
      [INT (1)] => [STRING: "This is a file with two EOLNs. First line is empty.
    "]
    ]</pre>
    <pre>[ARRAY
      [INT (0)] => [STRING: ""]
      [INT (1)] => [STRING: "This is a file with two EOLNs. First line is empty."]
    ]</pre>
    <pre>[ARRAY
      [INT (0)] => [STRING: "this is a file WITHOUT an "end-of-line""]
    ]</pre>
    Line #<b>130</b> : &lt;/html&gt;
    <br />
    [this is a file with one EOLN{\n}
    ]
    FileSystem/filesize.php: SUCCEEDED
    FileSystem/file_exists.php: SUCCEEDED
    FileSystem/file_get_contents.php: SUCCEEDED
    FileSystem/fpassthru.php: SUCCEEDED
    FileSystem/fread.php: SUCCEEDED
    FileSystem/fread1.php: SUCCEEDED
    FileSystem/fread2.php: SUCCEEDED
    FileSystem/fseek.php: SUCCEEDED
    FileSystem/fsockopen.php: SUCCEEDED
    FileSystem/ftell.php: SUCCEEDED
    FileSystem/is_dir.php: SUCCEEDED
    FileSystem/is_executable.php: SUCCEEDED
    FileSystem/pathinfo.php: SUCCEEDED
    FileSystem/popen.php: SUCCEEDED
    FileSystem/readdir.php: SUCCEEDED
    FileSystem/readfile.php: SUCCEEDED
    FileSystem/readline.php: SUCCEEDED
    FileSystem/realpath.php: SUCCEEDED
    FileSystem/scandir.php: SUCCEEDED
    FileSystem/stat.php: SUCCEEDED
    FileSystem/stream_context_set_option.php: SUCCEEDED
    FileSystem/stream_copy_to_stream.php: SUCCEEDED
    FileSystem/stream_copy_to_stream2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <p>Read <b>rb</b>, Write <b>wb</b>
    
    
    COPIED: <b>10175</b>
    <p>Read <b>rb</b>, Write <b>wt</b>
    
    
    COPIED: <b>10193</b>
    <p>Read <b>rb</b>, Write <b>wb</b>
    
    
    COPIED: <b>10211</b>
    <p>Read <b>rb</b>, Write <b>wt</b>
    
    
    COPIED: <b>10193</b>
    FileSystem/testinc.php: SUCCEEDED
    FileSystem/touch.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Warning: touch(): Utime failed: No such file or directory in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt on line 8
    Sorry Could Not change modification time of touch.txt
    Warning: touch(): Utime failed: No such file or directory in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt on line 14
    
    Warning: touch(): Utime failed: No such file or directory in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt on line 16
    
    Warning: touch(): Utime failed: No such file or directory in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt on line 17
    <pre>[ARRAY
      [INT (0)] => [STRING: "January 24, 2010; [12:09:12] (12h) ctime test.txt (1264331352)"]
      [INT (1)] => [STRING: "January 24, 2010; [12:09:12] (12h) mtime test.txt (1264331352)"]
      [INT (2)] => [STRING: "January 24, 2010; [12:09:12] (12h) ctime touch.txt (1264331352)"]
      [INT (3)] => [STRING: "January 24, 2010; [12:09:12] (12h) mtime touch.txt (1264331352)"]
      [INT (4)] => [STRING: "January 24, 2010; [12:09:12] (12h) atime touch.txt (1264331352)"]
      [INT (5)] => [STRING: "January 24, 2010; [12:09:12] (12h) mtime summer.txt (1264331352)"]
      [INT (6)] => [STRING: "January 24, 2010; [12:09:12] (12h) mtime winter.txt (1264331352)"]
    ]</pre>
    Warning: touch(): Unable to access (D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\touch.txt): Permission denied in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 8, column 5.
    Sorry Could Not change modification time of touch.txt
    Warning: touch(): Unable to access (D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\touch.txt): Permission denied in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 14, column 1.
    
    Warning: touch(): Unable to access (D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\winter.txt): Permission denied in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 16, column 1.
    
    Warning: touch(): Unable to access (D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\summer.txt): Permission denied in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 17, column 1.
    <pre>[ARRAY
      [INT (0)] => [STRING: "January 24, 2010; [13:09:12] (13h) ctime test.txt (1264334952)"]
      [INT (1)] => [STRING: "January 24, 2010; [13:09:12] (13h) mtime test.txt (1264334952)"]
      [INT (2)] => [STRING: "January 24, 2010; [13:09:12] (13h) ctime touch.txt (1264334952)"]
      [INT (3)] => [STRING: "January 24, 2010; [13:09:12] (13h) mtime touch.txt (1264334952)"]
      [INT (4)] => [STRING: "January 24, 2010; [13:09:12] (13h) atime touch.txt (1264334952)"]
      [INT (5)] => [STRING: "January 24, 2010; [13:09:12] (13h) mtime summer.txt (1264334952)"]
      [INT (6)] => [STRING: "January 24, 2010; [13:09:12] (13h) mtime winter.txt (1264334952)"]
    ]</pre>
    Math/abs.php: SUCCEEDED
    Math/atan2.php: SUCCEEDED
    Math/base_convert.php: SUCCEEDED
    Math/bindec.php: SUCCEEDED
    Math/ceil.php: SUCCEEDED
    Math/cos.php: SUCCEEDED
    Math/decbin.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <pre>
    [double: 2294967295]
    10001000110010100110101111111111
    [double: 4294967296]
    0
    [double: 8589934590]
    11111111111111111111111111111110
    [double: 8589934590]
    11111111111111111111111111111110
    [double: 8589934591]
    11111111111111111111111111111111
    [Int: 1000.000.000.000]
    11010100101001010001000000000000
    <hr>(-1, -5435, 2.14, 0, 26)
    11111111111111111111111111111111
    11111111111111111110101011000101
    10
    0
    11010 
    </pre>
    <pre>
    [???: 2294967295]
    10001000110010100110101111111111
    [???: 4294967296]
    0
    [???: 8589934590]
    11111111111111111111111111111110
    [???: 8589934590]
    11111111111111111111111111111110
    [???: 8589934591]
    11111111111111111111111111111111
    [Int: 1000.000.000.000]
    11010100101001010001000000000000
    <hr>(-1, -5435, 2.14, 0, 26)
    11111111111111111111111111111111
    11111111111111111110101011000101
    10
    0
    11010 
    </pre>
    Math/dechex.php: SUCCEEDED
    Math/decoct.php: SUCCEEDED
    Math/deg2rad.php: SUCCEEDED
    Math/exp.php: SUCCEEDED
    Math/floor.php: SUCCEEDED
    Math/fmod.php: SUCCEEDED
    Math/hexdec.php: SUCCEEDED
    Math/max.php: SUCCEEDED
    Math/min.php: SUCCEEDED
    Math/modulo_warn.php: SUCCEEDED
    Math/octdec.php: SUCCEEDED
    Math/pow.php: SUCCEEDED
    Math/rad2deg.php: SUCCEEDED
    Math/round.php: SUCCEEDED
    Math/sin.php: SUCCEEDED
    Math/sqrt.php: SUCCEEDED
    Math/tan.php: SUCCEEDED
    Math/uniqid.php: SUCCEEDED
    Misc/calendar_extension.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0
    0
    2375840
    0
    14
    32
    2
    There are 31 days in August 2003
    There are 28 days in February 2003
    There are 29 days in February 2004
    There are 31 days in December 2034
    1748326
    1748324
    374867
    0
    322f32322f35373633
    ebe120e7f9e5ef20e4faf9f1e2
    ebe120e7f9e5ef20e427faf9f1e2
    ebe120e7f9e5ef20e420e0ecf4e9ed20faf9f1e2
    ebe120e7f9e5ef20e42720e0ecf4e9ed20faf9f1e2
    eb22e120e7f9e5ef20e4faf9f122e2
    e12720e7f9e5ef20e4faf9f122e2
    e12720e7f9e5ef20e427faf9f122e2
    e12720e7f9e5ef20e420e0ecf4e9ed20faf9f122e2
    e12720e7f9e5ef20e42720e0ecf4e9ed20faf9f122e2
    Error: Call to undefined function: 'frenchtojd' in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\__input.txt at expression on line 2, column 1.
    Misc/ini_parse.php: SUCCEEDED
    Misc/lexer.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    T_INLINE_HTML
    311 '\r\n'
    T_OPEN_TAG
    368 '&lt;?'
    T_WHITESPACE
    371 ' \r\n\r\n'
    T_FINAL
    345 'final'
    T_WHITESPACE
    371 ' '
    T_CLASS
    353 'class'
    T_WHITESPACE
    371 ' '
    T_STRING
    307 'A'
    T_WHITESPACE
    371 ' \r\n'
        '{'
    T_WHITESPACE
    371 ' \r\n  '
    T_FUNCTION
    334 'function'
    T_WHITESPACE
    371 ' '
    T_STRING
    307 '__get'
        '('
    T_VARIABLE
    309 '$x'
        ')'
    T_WHITESPACE
    371 ' \r\n  '
        '{'
    T_WHITESPACE
    371 ' \r\n    '
    T_VARIABLE
    309 '$x'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_START_HEREDOC
    372 '&lt;&lt;&lt;EOOOOOOOOOOOOOOT\r\n'
    T_ENCAPSED_AND_WHITESPACE
    314 '         &lt;&lt;&lt;hello\r\nEOOOOOOOOOOOOOOt;\r\nEOOOOOOOOOOOOOT;\r\n'
    T_END_HEREDOC
    373 'EOOOOOOOOOOOOOOT'
        ';'
    T_WHITESPACE
    371 '\r\n\r\n    '
        '$'
    T_VARIABLE
    309 '$y'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_ARRAY
    360 'array'
    T_WHITESPACE
    371 ' '
        '('
    T_LNUMBER
    305 '1'
        ','
    T_DNUMBER
    306 '100000000000000'
        ','
    T_DNUMBER
    306 '999999999999999999999999999999999'
        ','
    T_STRING
    307 'true'
        ','
    T_STRING
    307 'false'
        ')'
        ';'
    T_WHITESPACE
    371 '\r\n    '
        '$'
        '{'
        '&quot;'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
    T_DOLLAR_OPEN_CURLY_BRACES
    374 '${'
        '$'
        '{'
    T_CONSTANT_ENCAPSED_STRING
    315 '&quot;xxx&quot;'
        '}'
        '}'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
        '&quot;'
        '}'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_LNUMBER
    305 '1'
        ';'
    T_WHITESPACE
    371 '\r\n    '
        '$'
        '{'
        '&quot;'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
    T_DOLLAR_OPEN_CURLY_BRACES
    374 '${'
        '$'
        '{'
        '&quot;'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
    T_VARIABLE
    309 '$x'
    T_ENCAPSED_AND_WHITESPACE
    314 '-&gt;$$'
    T_VARIABLE
    309 '$x0xx'
        '&quot;'
        '}'
        '}'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
        '&quot;'
        '}'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_LNUMBER
    305 '1'
        ';'
    T_WHITESPACE
    371 '\r\n  '
        '}'
    T_WHITESPACE
    371 ' \r\n'
        '}'
    T_WHITESPACE
    371 '\r\n\r\n'
    T_CLOSE_TAG
    370 '?&gt;'
    '
    '
        '&lt;?'
        ' 
    
    '
        'final'
        ' '
        'class'
        ' '
        'A'
        ' 
    '
        '{'
        ' 
      '
        'function'
        ' '
    258
    258 '
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\__input.txt at expression on line 10, column 7.
    '
        '('
        '$x'
        ')'
        ' 
      '
        '{'
        ' 
        '
        '$x'
        ' '
        '='
        ' '
        '&lt;&lt;&lt;EOOOOOOOOOOOOOOT
    '
        '         &lt;&lt;&lt;'
        'hello'
        '
    '
        'EOOOOOOOOOOOOOOt;
    '
        'EOOOOOOOOOOOOOT;
    '
        'EOOOOOOOOOOOOOOT'
        ';'
        '
    
        '
        '$'
        '$y'
        ' '
        '='
        ' '
        'array'
        ' '
        '('
        '1'
        ','
        '100000000000000'
        ','
        '999999999999999999999999999999999'
        ','
        'true'
        ','
    256
    256 '
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\__input.txt at expression on line 10, column 7.
    '
        ')'
        ';'
        '
        '
        '$'
        '{'
        '&quot;'
        'x'
        '${'
        '$'
        '{'
    -29
    -29 '
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\__input.txt at expression on line 10, column 7.
    '
        '}'
        '}'
        'x'
        '&quot;'
        '}'
        ' '
        '='
        ' '
        '1'
        ';'
        '
        '
        '$'
        '{'
        '&quot;'
        'x'
        '${'
        '$'
        '{'
        '&quot;'
        'x'
        '$x'
        '-&gt;'
        '$'
        '$'
        '$x0xx'
        '&quot;'
        '}'
        '}'
        'x'
        '&quot;'
        '}'
        ' '
        '='
        ' '
        '1'
        ';'
        '
      '
        '}'
        ' 
    '
        '}'
        '
    
    '
        '?&gt;'
    Misc/locale.php: SUCCEEDED
    Misc/output2.php: SUCCEEDED
    Misc/stack_trace.php: FAILED
    Script hung upNo errorsSuccess
    Expected test outputReal script output
    Unhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---> System.IndexOutOfRangeException: Index was outside the bounds of the array.
       at PHP.Core.PhpStackFrame..ctor(ScriptContext context, StackFrame frame, FrameKinds kind)
       at PHP.Core.PhpStackTrace..ctor(ScriptContext context, StackTrace clrTrace)
       at PHP.Library.Errors.Backtrace()
       at <stack_trace.inc>.<Script>.j(ScriptContext <context>) in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\stack_trace.inc:line 11
       at <stack_trace.inc>.<Script>.j(Object instance, PhpStack stack)
       at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <stack_trace.inc>.<Script>.i(ScriptContext <context>) in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\stack_trace.inc:line 6
       at <stack_trace.inc>.<Script>.i(Object instance, PhpStack stack)
       at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <^0>.<Global>.<?0>.h(ScriptContext <context>) in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\__input.txt:line 4
       at PHP.Core.PhpCallback.InvokeInternal(Object[] args)
       at PHP.Library.PhpArrays.Map(PhpCallback map, PhpArray[] arrays)
       at <^1>.<Global>.<?1>.Lambda_1(ScriptContext <context>) in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\__input.txt:line 1
       at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <__input.txt>.<Script>.f(ScriptContext <context>) in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\__input.txt:line 6
       at <__input.txt>.<Script>.f(Object instance, PhpStack stack)
       at <__input.txt>.<Script>.<Main>(ScriptContext <context>, Dictionary`2 <locals>, DObject , DTypeDesc , Boolean ) in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\__input.txt:line 18
       at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)
       at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)
       --- End of inner exception stack trace ---
       at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)
       at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)
       at <Global>.Run(String[] )
    
    Misc/tokens.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    T_REQUIRE_ONCE = 258,
    T_REQUIRE = 259,
    T_EVAL = 260,
    T_INCLUDE_ONCE = 261,
    T_INCLUDE = 262,
    T_LOGICAL_OR = 263,
    T_LOGICAL_XOR = 264,
    T_LOGICAL_AND = 265,
    T_PRINT = 266,
    T_SR_EQUAL = 267,
    T_SL_EQUAL = 268,
    T_XOR_EQUAL = 269,
    T_OR_EQUAL = 270,
    T_AND_EQUAL = 271,
    T_MOD_EQUAL = 272,
    T_CONCAT_EQUAL = 273,
    T_DIV_EQUAL = 274,
    T_MUL_EQUAL = 275,
    T_MINUS_EQUAL = 276,
    T_PLUS_EQUAL = 277,
    T_BOOLEAN_OR = 278,
    T_BOOLEAN_AND = 279,
    T_IS_NOT_IDENTICAL = 280,
    T_IS_IDENTICAL = 281,
    T_IS_NOT_EQUAL = 282,
    T_IS_EQUAL = 283,
    T_IS_GREATER_OR_EQUAL = 284,
    T_IS_SMALLER_OR_EQUAL = 285,
    T_SR = 286,
    T_SL = 287,
    T_INSTANCEOF = 288,
    T_UNSET_CAST = 289,
    T_BOOL_CAST = 290,
    T_OBJECT_CAST = 291,
    T_ARRAY_CAST = 292,
    T_STRING_CAST = 293,
    T_DOUBLE_CAST = 294,
    T_INT_CAST = 295,
    T_DEC = 296,
    T_INC = 297,
    T_CLONE = 298,
    T_NEW = 299,
    T_EXIT = 300,
    T_IF = 301,
    T_ELSEIF = 302,
    T_ELSE = 303,
    T_ENDIF = 304,
    T_LNUMBER = 305,
    T_DNUMBER = 306,
    T_STRING = 307,
    T_STRING_VARNAME = 308,
    T_VARIABLE = 309,
    T_NUM_STRING = 310,
    T_INLINE_HTML = 311,
    T_CHARACTER = 312,
    T_BAD_CHARACTER = 313,
    T_ENCAPSED_AND_WHITESPACE = 314,
    T_CONSTANT_ENCAPSED_STRING = 315,
    T_ECHO = 316,
    T_DO = 317,
    T_WHILE = 318,
    T_ENDWHILE = 319,
    T_FOR = 320,
    T_ENDFOR = 321,
    T_FOREACH = 322,
    T_ENDFOREACH = 323,
    T_DECLARE = 324,
    T_ENDDECLARE = 325,
    T_AS = 326,
    T_SWITCH = 327,
    T_ENDSWITCH = 328,
    T_CASE = 329,
    T_DEFAULT = 330,
    T_BREAK = 331,
    T_CONTINUE = 332,
    T_GOTO = 333,
    T_FUNCTION = 334,
    T_CONST = 335,
    T_RETURN = 336,
    T_TRY = 337,
    T_CATCH = 338,
    T_THROW = 339,
    T_USE = 340,
    T_GLOBAL = 341,
    T_PUBLIC = 342,
    T_PROTECTED = 343,
    T_PRIVATE = 344,
    T_FINAL = 345,
    T_ABSTRACT = 346,
    T_STATIC = 347,
    T_VAR = 348,
    T_UNSET = 349,
    T_ISSET = 350,
    T_EMPTY = 351,
    T_HALT_COMPILER = 352,
    T_CLASS = 353,
    T_INTERFACE = 354,
    T_EXTENDS = 355,
    T_IMPLEMENTS = 356,
    T_OBJECT_OPERATOR = 357,
    T_DOUBLE_ARROW = 358,
    T_LIST = 359,
    T_ARRAY = 360,
    T_CLASS_C = 361,
    T_METHOD_C = 362,
    T_FUNC_C = 363,
    T_LINE = 364,
    T_FILE = 365,
    T_COMMENT = 366,
    T_DOC_COMMENT = 367,
    T_OPEN_TAG = 368,
    T_OPEN_TAG_WITH_ECHO = 369,
    T_CLOSE_TAG = 370,
    T_WHITESPACE = 371,
    T_START_HEREDOC = 372,
    T_END_HEREDOC = 373,
    T_DOLLAR_OPEN_CURLY_BRACES = 374,
    T_CURLY_OPEN = 375,
    T_PAAMAYIM_NEKUDOTAYIM = 376,
    T_DOUBLE_COLON = 376,
    T_NAMESPACE = 377,
    T_NS_C = 378,
    T_DIR = 379,
    T_NS_SEPARATOR = 380,
    T_INCLUDE = 129,
    T_INCLUDE_ONCE = 130,
    T_EVAL = 131,
    T_REQUIRE = 132,
    T_REQUIRE_ONCE = 133,
    T_LOGICAL_OR = 136,
    T_LOGICAL_XOR = 137,
    T_LOGICAL_AND = 138,
    T_PRINT = 139,
    T_PLUS_EQUAL = 140,
    T_MINUS_EQUAL = 141,
    T_MUL_EQUAL = 142,
    T_DIV_EQUAL = 143,
    T_CONCAT_EQUAL = 144,
    T_MOD_EQUAL = 145,
    T_AND_EQUAL = 146,
    T_OR_EQUAL = 147,
    T_XOR_EQUAL = 148,
    T_SL_EQUAL = 149,
    T_SR_EQUAL = 150,
    T_BOOLEAN_OR = 151,
    T_BOOLEAN_AND = 152,
    T_IS_EQUAL = 153,
    T_IS_NOT_EQUAL = 154,
    T_IS_IDENTICAL = 155,
    T_IS_NOT_IDENTICAL = 156,
    T_IS_SMALLER_OR_EQUAL = 157,
    T_IS_GREATER_OR_EQUAL = 158,
    T_SL = 159,
    T_SR = 160,
    T_INC = 161,
    T_DEC = 162,
    T_NEW = 164,
    T_INSTANCEOF = 165,
    T_CLONE = 167,
    T_LNUMBER = 168,
    T_DNUMBER = 170,
    T_STRING = 171,
    T_STRING_VARNAME = 172,
    T_VARIABLE = 173,
    T_NUM_STRING = 174,
    T_INLINE_HTML = 175,
    T_CHARACTER = 176,
    T_BAD_CHARACTER = 177,
    T_ENCAPSED_AND_WHITESPACE = 178,
    T_CONSTANT_ENCAPSED_STRING = 179,
    T_EXIT = 180,
    T_IF = 181,
    T_ELSEIF = 182,
    T_ELSE = 183,
    T_ENDIF = 184,
    T_ECHO = 185,
    T_DO = 186,
    T_WHILE = 187,
    T_ENDWHILE = 188,
    T_FOR = 189,
    T_ENDFOR = 190,
    T_FOREACH = 191,
    T_ENDFOREACH = 192,
    T_AS = 193,
    T_SWITCH = 194,
    T_ENDSWITCH = 195,
    T_CASE = 196,
    T_DEFAULT = 197,
    T_BREAK = 198,
    T_CONTINUE = 199,
    T_FUNCTION = 200,
    T_CONST = 201,
    T_RETURN = 202,
    T_GLOBAL = 203,
    T_STATIC = 204,
    T_VAR = 205,
    T_UNSET = 206,
    T_ISSET = 207,
    T_EMPTY = 208,
    T_CLASS = 209,
    T_EXTENDS = 210,
    T_OBJECT_OPERATOR = 211,
    T_DOUBLE_ARROW = 212,
    T_LIST = 213,
    T_ARRAY = 214,
    T_CLASS_C = 215,
    T_METHOD_C = 216,
    T_FUNC_C = 217,
    T_LINE = 218,
    T_FILE = 219,
    T_COMMENT = 220,
    T_DOC_COMMENT = 221,
    T_OPEN_TAG = 226,
    T_OPEN_TAG_WITH_ECHO = 227,
    T_CLOSE_TAG = 228,
    T_WHITESPACE = 229,
    T_START_HEREDOC = 230,
    T_END_HEREDOC = 231,
    T_DOLLAR_OPEN_CURLY_BRACES = 232,
    T_CURLY_OPEN = 233,
    T_DOUBLE_COLON = 234,
    T_PAAMAYIM_NEKUDOTAYIM = 234,
    T_TRY = 236,
    T_CATCH = 237,
    T_THROW = 238,
    T_INTERFACE = 239,
    T_IMPLEMENTS = 240,
    T_ABSTRACT = 241,
    T_FINAL = 242,
    T_PRIVATE = 243,
    T_PROTECTED = 244,
    T_PUBLIC = 245,
    T_BOOL_CAST = 285,
    T_INT_CAST = 288,
    T_DOUBLE_CAST = 294,
    T_STRING_CAST = 297,
    T_ARRAY_CAST = 299,
    T_OBJECT_CAST = 300,
    T_UNSET_CAST = 301,
    T_HALT_COMPILER = 351,
    Misc/user_error_handlers.php: SUCCEEDED
    Objects/conditional1.php: SUCCEEDED
    Objects/conditional2.php: SUCCEEDED
    Objects/conditional_base_class.php: SUCCEEDED
    Objects/constant_test.php: SUCCEEDED
    Objects/evaled_parent.php: SUCCEEDED
    Objects/getter_setter_bug28444.php: SUCCEEDED
    Objects/instanceof.php: SUCCEEDED
    Objects/new_via_unknown_ctor.php: SUCCEEDED
    Objects/object_creation_test.php: SUCCEEDED
    Objects/static_field_test.php: SUCCEEDED
    Objects/static_method_test.php: SUCCEEDED
    Objects/sys_class_const.php: SUCCEEDED
    Objects/this2.php: SUCCEEDED
    RegEx/ereg.php: SUCCEEDED
    RegEx/preg_match_unmatched_groups.php: SUCCEEDED
    RegEx/preg_replace_eval.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ab"01300 as"00da sd"0asdsa das asd 11asd a1sd a
    ab"01300 as"00da sd"0(aasdasdkjask,$a,\,\l,a,s,d,a,s,d,k,j,a,s,${120})(ldjaklsdjalk,$l,\,\l,d,j,a,k,l,s,d,j,a,l,${120})djdsa das asd 11asd a1sd a
    ab"01300 as"00da sd"0asdsa das asd 11asd a1sd a
    ab"01300 as"00da sd"0(aasdasdkjask,$a,\,\l,a,s,d,a,s,d,k,j,,,${120})(ldjaklsdjalk,$l,\,\l,d,j,a,k,l,s,d,j,,,${120})djdsa das asd 11asd a1sd a
    RegEx/regexp-sql.php: SUCCEEDED
    RegEx/Perl/cache.php: SUCCEEDED
    RegEx/Perl/grep1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      [3] => string(3) "1.5"
      [6] => string(5) "58.54"
    }
    Notice: preg_grep(): Array to string conversion in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\RegEx\Perl\__input.txt at expression on line 5, column 1.
    array(2)
    {
      [3] => string(3) "1.5"
      [6] => string(5) "58.54"
    }
    RegEx/Perl/grep2.php: SUCCEEDED
    RegEx/Perl/match1.php: SUCCEEDED
    RegEx/Perl/match10.php: SUCCEEDED
    RegEx/Perl/match2.php: SUCCEEDED
    RegEx/Perl/match3.php: SUCCEEDED
    RegEx/Perl/match4.php: SUCCEEDED
    RegEx/Perl/match5.php: SUCCEEDED
    RegEx/Perl/match6.php: SUCCEEDED
    RegEx/Perl/match7.php: SUCCEEDED
    RegEx/Perl/match8.php: SUCCEEDED
    RegEx/Perl/match9.php: SUCCEEDED
    RegEx/Perl/match_all1.php: SUCCEEDED
    RegEx/Perl/match_all2.php: SUCCEEDED
    RegEx/Perl/match_all3.php: SUCCEEDED
    RegEx/Perl/match_all4.php: SUCCEEDED
    RegEx/Perl/match_dollar.php: SUCCEEDED
    RegEx/Perl/overflow.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string("kfkaj +j k45´┐Ż´┐Ż´┐Ż´┐Ż´┐Ż3#$%^&kjakfjkaj|kfj")
    string("kfkaj +j k45�����3#$%^&kjakfjkaj|kfj")
    RegEx/Perl/quote1.php: SUCCEEDED
    RegEx/Perl/quote2.php: SUCCEEDED
    RegEx/Perl/quote3.php: SUCCEEDED
    RegEx/Perl/replace1.php: SUCCEEDED
    RegEx/Perl/replace2.php: SUCCEEDED
    RegEx/Perl/replace3.php: SUCCEEDED
    RegEx/Perl/replace4.php: SUCCEEDED
    RegEx/Perl/replace5.php: SUCCEEDED
    RegEx/Perl/replace6.php: SUCCEEDED
    RegEx/Perl/replace7.php: SUCCEEDED
    RegEx/Perl/replace8.php: SUCCEEDED
    RegEx/Perl/replace9.php: SUCCEEDED
    RegEx/Perl/replace_callback1.php: SUCCEEDED
    RegEx/Perl/replace_callback2.php: SUCCEEDED
    RegEx/Perl/split1.php: SUCCEEDED
    RegEx/Perl/split2.php: SUCCEEDED
    RegEx/Perl/split3.php: SUCCEEDED
    RegEx/Perl/split4.php: SUCCEEDED
    RegEx/Perl/split5.php: SUCCEEDED
    RegEx/Perl/ungreedy.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    aaa
    a
    aaa
    
    a
    aa
    aaa
    aa
    aaa
    aaa
    a
    aaa
    a
    a
    aa
    aaa
    aa
    aaa
    RegEx/Perl/unsuccessful-preg_match_all.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0
    4
    1
    4
    0
    4
    1
    7
    SPL/ArrayAccess_offsetExists.php: SUCCEEDED
    SPL/exceptions.php: SUCCEEDED
    Strings/addcslashes.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    \f\o\o\[ \]
    Issues a Warning:
    // echo addcslashes("zoo['.']", 'z..A');
    // output:  \zoo['\.']
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt at expression on line 4, column 1.
    
    Issues a Warning:
    // echo addcslashes("zoo['.']", 'z..A');
    // output:  \zoo['\.']
    Strings/addslashes.php: SUCCEEDED
    Strings/chunk_split.php: SUCCEEDED
    Strings/concat.php: SUCCEEDED
    Strings/count_chars.php: SUCCEEDED
    Strings/crc32.php: SUCCEEDED
    Strings/crypt.php: SUCCEEDED
    Strings/crypt2.php: SUCCEEDED
    Strings/echo.php: SUCCEEDED
    Strings/explode.php: SUCCEEDED
    Strings/get_html_translation_table.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <hr>[&] => &amp;
    [>] => &gt;
    [<] => &lt;
    ["] => &quot;
    <hr>Hallo &amp; &lt;Frau&gt; &amp; Kr&iuml;&iquest;&frac12;mer
    <hr>[&] => &amp;
    [>] => &gt;
    [<] => &lt;
    ["] => &quot;
    <hr>Hallo &amp; &lt;Frau&gt; &amp; Kr�mer
    Strings/nl2br.php: SUCCEEDED
    Strings/pack.php: SUCCEEDED
    Strings/pos.php: SUCCEEDED
    Strings/runtime-quotes.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    fread = (x''y"z)
    fgets = (x''y"z)
    file[0] = (x''y"z)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    
    Warning: fopen(runtime-quotes2.txt): failed to open stream: Permission denied in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt on line 33
    
    Warning: fwrite() expects parameter 1 to be resource, boolean given in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt on line 35
    fwrite = ()
    
    Warning: fputs() expects parameter 1 to be resource, boolean given in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt on line 38
    fputs = ()
    
    Warning: fclose() expects parameter 1 to be resource, boolean given in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt on line 41
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (x'y"z)
    fgets = (x'y"z)
    file[0] = (x'y"z)
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (a\'b"\\ca\)
    fgets = (a\'b"\\ca\'b"\\c)
    file[0] = (a\'b"\\ca\'b"\\c)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    e'e
    e''e
    e'e
    e'e
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    e'e
    e'e
    e'e
    e'e
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    fread = (x''y"z)
    fgets = (x''y"z)
    file[0] = (x''y"z)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    
    Warning: fopen(): Unable to access (D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\runtime-quotes2.txt): Permission denied in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt at expression on line 33, column 3.
    
    Warning: Cannot convert bool to resource implicitly in a call to function fwrite() in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt at expression on line 35, column 3.
    fwrite = ()
    
    Warning: Cannot convert bool to resource implicitly in a call to function fputs() in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt at expression on line 38, column 3.
    fputs = ()
    
    Warning: Cannot convert bool to resource implicitly in a call to function fclose() in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt at expression on line 41, column 3.
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (x'y"z)
    fgets = (x'y"z)
    file[0] = (x'y"z)
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (a\'b"\\ca\)
    fgets = (a\'b"\\ca\'b"\\c)
    file[0] = (a\'b"\\ca\'b"\\c)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    e'e
    e''e
    e'e
    e'e
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    e'e
    e'e
    e'e
    e'e
    Strings/sprintf.php: SUCCEEDED
    Strings/sprintf2.php: SUCCEEDED
    Strings/strtr.php: SUCCEEDED
    Strings/str_ireplace.php: SUCCEEDED
    Strings/str_word_count.php: SUCCEEDED
    Strings/substr_operations.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string(1) "b"
    string(1) "b"
    string(9) "baaaaaaaa"
    string(9) "aaaaaaaab"
    string(3) "aba"
    string(9) "aaaaaaaab"
    
    int(8)
    int(8)
    
    Warning: substr_count(): Length should be greater than 0 in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt on line 15
    bool(false)
    
    Warning: substr_count(): Offset value 10 exceeds string length in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt on line 17
    bool(false)
    
    Warning: substr_count(): Offset value 10 exceeds string length in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt on line 18
    bool(false)
    
    array(5) {
      [0]=>
      string(4) "baaa"
      [1]=>
      string(4) "baaa"
      [2]=>
      string(1) "b"
      [3]=>
      string(1) "b"
      [4]=>
      string(1) "b"
    }
    
    int(0)
    int(0)
    int(0)
    int(1)
    int(-1)
    string(1) "b"
    string(1) "b"
    string(9) "baaaaaaaa"
    string(9) "aaaaaaaab"
    string(3) "aba"
    string(9) "aaaaaaaab"
    
    integer(8)
    integer(8)
    integer(0)
    integer(0)
    integer(0)
    
    array(5)
    {
      [0] => string(4) "baaa"
      [1] => string(4) "baaa"
      [2] => string(1) "b"
      [3] => string(1) "b"
      [4] => string(1) "b"
    }
    
    integer(0)
    integer(0)
    integer(0)
    integer(1)
    integer(-1)
    Strings/wordwrap.php: SUCCEEDED
    Variables/advanced_serialize.php: SUCCEEDED
    Variables/arguments.php: SUCCEEDED
    Variables/bitwise.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "00"
    string(2) "31"
    string(2) "31"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    0
    0
    0
    5
    0
    5
    40
    5
    45
    string(48) "000000000000000000000000000000000000000000000000"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(14) "31323331323331"
    string(2) "30"
    string(14) "31323331323331"
    string(16) "3635343635343536"
    string(2) "30"
    string(16) "3635343635343536"
    string(14) "337a5e8be43d7a"
    string(14) "00002130120201"
    string(48) "337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42"
    string(16) "347d598ce33a7e77"
    string(16) "0200243214040100"
    string(48) "367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42"
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "00"
    string(2) "31"
    string(2) "31"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    0
    -9223372036854775808
    -9223372036854775808
    -9223372036854775803
    0
    -9223372036854775803
    40
    5
    45
    string(48) "000000000000000000000000000000000000000000000000"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(14) "31323331323331"
    string(2) "30"
    string(14) "31323331323331"
    string(16) "3635343635343536"
    string(2) "30"
    string(16) "3635343635343536"
    string(14) "337a5e8be43d7a"
    string(14) "00002130120201"
    string(48) "337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42"
    string(16) "347d598ce33a7e77"
    string(16) "0200243214040100"
    string(48) "367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42"
    Variables/comparisons.php: SUCCEEDED
    Variables/constant.php: SUCCEEDED
    Variables/extract.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    EXTR_PREFIX_ALL
    integer(4)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
      'prefix_non_existent' => integer(1)
    }
    <hr>EXTR_PREFIX_INVALID
    integer(5)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => integer(2)
      'non_existent' => integer(1)
      'prefix_' => integer(1)
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => 'hello'
    }
    <hr>EXTR_PREFIX_SAME
    integer(3)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'non_existent' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>EXTR_PREFIX_IF_EXISTS
    integer(3)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>
    EXTR_PREFIX_ALL
    integer(4)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
      'prefix_non_existent' => integer(1)
    }
    <hr>EXTR_PREFIX_INVALID
    integer(2)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_ad' => integer(2)
      'prefix_non_existent' => integer(1)
    }
    <hr>EXTR_PREFIX_SAME
    integer(4)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'non_existent' => integer(1)
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>EXTR_PREFIX_IF_EXISTS
    integer(3)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>
    Variables/func_get_args.php: SUCCEEDED
    Variables/is_number.php: SUCCEEDED
    Variables/serialize.php: SUCCEEDED
    Variables/unserialize_objects.php: SUCCEEDED
    Variables/var_dumping.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Array
    (
        [0] => 1
        [1] => 
        [2] => 1
        [3] => 1.2
        [4] => 
        [5] => asdas
        [6] => Array
            (
                [0] => 1
            )
    
        [7] => stdClass Object
            (
            )
    
        [8] => Resource id #1
    )
    array(9) {
      [0]=>
      bool(true)
      [1]=>
      bool(false)
      [2]=>
      int(1)
      [3]=>
      float(1.2)
      [4]=>
      NULL
      [5]=>
      string(5) "asdas"
      [6]=>
      array(1) {
        [0]=>
        int(1)
      }
      [7]=>
      object(stdClass)#1 (0) {
      }
      [8]=>
      resource(1) of type (stream)
    }
    array (
      0 => true,
      1 => false,
      2 => 1,
      3 => 1.2,
      4 => NULL,
      5 => 'asdas',
      6 => 
      array (
        0 => 1,
      ),
      7 => 
      stdClass::__set_state(array(
      )),
      8 => NULL,
    )
    array
    (
      [0] => 1
      [1] => 
      [2] => 1
      [3] => 1.2
      [4] => 
      [5] => asdas
      [6] => array
      (
        [0] => 1
      )
      [7] => stdClass object
      (
      )
      [8] => resource id #4
    )
    array(9)
    {
      [0] => bool(true)
      [1] => bool(false)
      [2] => integer(1)
      [3] => double(1.2)
      [4] => NULL
      [5] => string(5) "asdas"
      [6] => array(1)
      {
        [0] => integer(1)
      }
      [7] => object(stdClass)(0)
      {
      }
      [8] => resource(4) of type (stream)
    }
    array
    (
      '0' => true,
      '1' => false,
      '2' => 1,
      '3' => 1.2,
      '4' => NULL,
      '5' => 'asdas',
      '6' => array
      (
        '0' => 1
      ),
      '7' => class stdClass
      {
    
      },
      '8' => NULL
    )
    WorkItems/22016.php: SUCCEEDED
    WorkItems/22019.php: SUCCEEDED
    WorkItems/26052.php: SUCCEEDED
    WorkItems/26681.php: SUCCEEDED
    WorkItems/26691.php: SUCCEEDED
    WorkItems/27377.php: SUCCEEDED
    WorkItems/27492.php: SUCCEEDED
    WorkItems/2787.php: SUCCEEDED
    Xml/005.php: SUCCEEDED
    Xml/006.php: SUCCEEDED
    Xml/007.php: SUCCEEDED
    Xml/008.php: SUCCEEDED
    Xml/009.php: SUCCEEDED
    Xml/011.php: SUCCEEDED
    Xml/013.php: SUCCEEDED
    Xml/017.php: SUCCEEDED
    Xml/018.php: SUCCEEDED
    Xml/019.php: SUCCEEDED
    Xml/020.php: SUCCEEDED
    Xml/021.php: SUCCEEDED
    Xml/025.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
      'foo' => 'foobar'
    }
    array
    {
      'html' => 'http://www.w3.org/1999/xhtml'
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
    }
    array
    {
      'html' => 'http://www.w3.org/1999/xhtml'
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'foo' => 'foobar'
      'baz' => 'foobarbaz'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
    }
    array
    {
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
      'baz' => 'foobarbaz'
      'foo' => 'foobar'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
      'baz' => 'foobarbaz'
      'foo' => 'foobar'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
    }
    array
    {
    }
    Xml/026.php: SUCCEEDED
    Xml/027.php: SUCCEEDED
    Xml/028.php: SUCCEEDED
    Xml/029.php: SUCCEEDED
    Xml/030.php: SUCCEEDED
    Xml/032.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    FALSE
    FALSE
    FALSE
    TRUE
    TRUE
    TRUE
    Xml/033.php: SUCCEEDED
    Xml/bug26384.php: SUCCEEDED
    Xml/bug28721.php: SUCCEEDED
    Xml/bug28817.php: SUCCEEDED
    Xml/bug32615.php: SUCCEEDED
    Xml/bug33853.php: SUCCEEDED
    Xml/bug34276.php: SUCCEEDED
    Xml/bug35342.php: SUCCEEDED
    Xml/bug36756.php: SUCCEEDED
    Xml/bug37277.php: SUCCEEDED
    Xml/dom002.php: SUCCEEDED
    Xml/dom003.php: SUCCEEDED
    Xml/dom006.php: SUCCEEDED
    Xml/dom007.php: SUCCEEDED
    Xml/dom_set_attr_node.php: SUCCEEDED
    Xml/xslt001.php: SUCCEEDED
    Xml/xslt002.php: SUCCEEDED
    Xml/xslt003.php: SUCCEEDED
    Xml/xslt004.php: SUCCEEDED
    Xml/xslt005.php: SUCCEEDED
    Xml/xslt006.php: SUCCEEDED
    Xml/xslt007.php: SUCCEEDED
    Xml/xslt010.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test 10: EXSLT Support
      
      
      Test Date : 0001-12-31Z
        year                 : 1
        leap-year            : false
        month-in-year        : 12
        month-name           : December
        month-abbreviation   : Dec
        week-in-year         : 1
        day-in-year          : 365
        day-in-month         : 31
        day-of-week-in-month : 5
        day-in-week          : 2
        day-name             : Monday
        day-abbreviation     : Mon
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : 3000-01-31
        year                 : 3000
        leap-year            : false
        month-in-year        : 1
        month-name           : January
        month-abbreviation   : Jan
        week-in-year         : 5
        day-in-year          : 31
        day-in-month         : 31
        day-of-week-in-month : 5
        day-in-week          : 6
        day-name             : Friday
        day-abbreviation     : Fri
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : 2000-02-29
        year                 : 2000
        leap-year            : true
        month-in-year        : 2
        month-name           : February
        month-abbreviation   : Feb
        week-in-year         : 9
        day-in-year          : 60
        day-in-month         : 29
        day-of-week-in-month : 5
        day-in-week          : 3
        day-name             : Tuesday
        day-abbreviation     : Tue
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : 9990001-12-31Z
        year                 : 9990001
        leap-year            : false
        month-in-year        : 12
        month-name           : December
        month-abbreviation   : Dec
        week-in-year         : 1
        day-in-year          : 365
        day-in-month         : 31
        day-of-week-in-month : 5
        day-in-week          : 2
        day-name             : Monday
        day-abbreviation     : Mon
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : -0004-02-29
        year                 : -4
        leap-year            : true
        month-in-year        : 2
        month-name           : February
        month-abbreviation   : Feb
        week-in-year         : 9
        day-in-year          : 60
        day-in-month         : 29
        day-of-week-in-month : 5
        day-in-week          : 1
        day-name             : Sunday
        day-abbreviation     : Sun
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
    Test 10: EXSLT Support
    Warning: Cannot find the script or external object that implements prefix 'http://exslt.org/dates-and-times'. in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Xml\__input.txt at expression on line 14, column 3.
    
    Warning: Illegal string offset '-1' in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Phalanger.inc at expression on line 7, column 6.
    Xml/xslt011.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test 11: php:function Support
    
    Warning: XSLTProcessor::transformToXml(): A PHP Object cannot be converted to a XPath-string in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Xml\__input.txt on line 18
    <?xml version="1.0"?>
    foobar - secondArg
    foobar - 
    this is from an external DomDocument
    from the Input Document
    static
    Test 11: php:function Support
    <?xml version="1.0" encoding="utf-8"?>foobar - secondArg
    foobar - 
    this is from an external DomDocument
    from the Input Document
    static
    not a DomNode object
    Xml/xslt012.php: SUCCEEDED
    ================================================ FILE: Testing/Tests/TestLogs/TestLog 2010-07-10.htm ================================================ PHP.NET Compiler test log

    PHP.NET Compiler test log

    (92%) 801 succeeded, 68 failed
    Test ResultCompiler error outputExpected test result
    @PHP/classes/array_access_001.php: SUCCEEDED
    @PHP/classes/array_access_002.php: SUCCEEDED
    @PHP/classes/array_access_003.php: SUCCEEDED
    @PHP/classes/array_access_004.php: SUCCEEDED
    @PHP/classes/array_access_005.php: SUCCEEDED
    @PHP/classes/array_access_006.php: SUCCEEDED
    @PHP/classes/array_access_007.php: SUCCEEDED
    @PHP/classes/array_access_008.php: SUCCEEDED
    @PHP/classes/array_access_009.php: SUCCEEDED
    @PHP/classes/array_access_010.php: SUCCEEDED
    @PHP/classes/array_access_011.php: SUCCEEDED
    @PHP/classes/array_access_013.php: SUCCEEDED
    @PHP/classes/assign_op_property_001.php: SUCCEEDED
    @PHP/classes/autoload_001.php: SUCCEEDED
    @PHP/classes/autoload_002.php: SUCCEEDED
    @PHP/classes/autoload_003.php: SUCCEEDED
    @PHP/classes/autoload_005.php: SUCCEEDED
    @PHP/classes/autoload_006.php: SUCCEEDED
    @PHP/classes/bug23951.php: SUCCEEDED
    @PHP/classes/bug24399.php: SUCCEEDED
    @PHP/classes/bug24445.php: SUCCEEDED
    @PHP/classes/bug26737.php: SUCCEEDED
    @PHP/classes/bug27468.php: SUCCEEDED
    @PHP/classes/bug27504.php: SUCCEEDED
    @PHP/classes/class_example.php: SUCCEEDED
    @PHP/classes/class_stdclass.php: SUCCEEDED
    @PHP/classes/clone_001.php: SUCCEEDED
    @PHP/classes/clone_002.php: SUCCEEDED
    @PHP/classes/clone_003.php: SUCCEEDED
    @PHP/classes/clone_004.php: SUCCEEDED
    @PHP/classes/clone_006.php: SUCCEEDED
    @PHP/classes/constants_scope_001.php: SUCCEEDED
    @PHP/classes/ctor_dtor.php: SUCCEEDED
    @PHP/classes/ctor_dtor_inheritance.php: SUCCEEDED
    @PHP/classes/ctor_name_clash.php: SUCCEEDED
    @PHP/classes/dereferencing_001.php: SUCCEEDED
    @PHP/classes/destructor_and_echo.php: SUCCEEDED
    @PHP/classes/destructor_and_references.php: SUCCEEDED
    @PHP/classes/destructor_inheritance.php: SUCCEEDED
    @PHP/classes/destructor_visibility_003.php: SUCCEEDED
    @PHP/classes/factory_001.php: SUCCEEDED
    @PHP/classes/factory_and_singleton_001.php: SUCCEEDED
    @PHP/classes/factory_and_singleton_002.php: SUCCEEDED
    @PHP/classes/final.php: SUCCEEDED
    @PHP/classes/incdec_property_001.php: SUCCEEDED
    @PHP/classes/incdec_property_002.php: SUCCEEDED
    @PHP/classes/incdec_property_003.php: SUCCEEDED
    @PHP/classes/incdec_property_004.php: SUCCEEDED
    @PHP/classes/inheritance.php: SUCCEEDED
    @PHP/classes/inheritance_002.php: SUCCEEDED
    @PHP/classes/interfaces_001.php: SUCCEEDED
    @PHP/classes/interface_construct.php: SUCCEEDED
    @PHP/classes/interface_doubled.php: SUCCEEDED
    @PHP/classes/interface_implemented.php: SUCCEEDED
    @PHP/classes/iterators_001.php: SUCCEEDED
    @PHP/classes/iterators_002.php: SUCCEEDED
    @PHP/classes/iterators_003.php: SUCCEEDED
    @PHP/classes/iterators_004.php: SUCCEEDED
    @PHP/classes/iterators_006.php: SUCCEEDED
    @PHP/classes/iterators_007.php: SUCCEEDED
    @PHP/classes/object_reference_001.php: SUCCEEDED
    @PHP/classes/private_001.php: SUCCEEDED
    @PHP/classes/private_002.php: SUCCEEDED
    @PHP/classes/private_003.php: SUCCEEDED
    @PHP/classes/private_003b.php: SUCCEEDED
    @PHP/classes/private_004.php: SUCCEEDED
    @PHP/classes/private_004b.php: SUCCEEDED
    @PHP/classes/private_005.php: SUCCEEDED
    @PHP/classes/private_005b.php: SUCCEEDED
    @PHP/classes/private_006.php: SUCCEEDED
    @PHP/classes/private_006b.php: SUCCEEDED
    @PHP/classes/private_007.php: SUCCEEDED
    @PHP/classes/private_007b.php: SUCCEEDED
    @PHP/classes/private_members.php: SUCCEEDED
    @PHP/classes/private_redeclare.php: SUCCEEDED
    @PHP/classes/protected_001.php: SUCCEEDED
    @PHP/classes/protected_001b.php: SUCCEEDED
    @PHP/classes/protected_002.php: SUCCEEDED
    @PHP/classes/serialize_001.php: SUCCEEDED
    @PHP/classes/singleton_001.php: SUCCEEDED
    @PHP/classes/static_properties_001.php: SUCCEEDED
    @PHP/classes/type_hinting_001.php: SUCCEEDED
    @PHP/classes/type_hinting_003.php: SUCCEEDED
    @PHP/classes/visibility_000c.php: SUCCEEDED
    @PHP/classes/visibility_001c.php: SUCCEEDED
    @PHP/classes/visibility_002c.php: SUCCEEDED
    @PHP/classes/visibility_003a.php: SUCCEEDED
    @PHP/classes/visibility_003c.php: SUCCEEDED
    @PHP/classes/visibility_004a.php: SUCCEEDED
    @PHP/classes/visibility_004b.php: SUCCEEDED
    @PHP/classes/visibility_004c.php: SUCCEEDED
    @PHP/classes/visibility_005.php: SUCCEEDED
    @PHP/classes/__call_001.php: SUCCEEDED
    @PHP/classes/__set_data_corrupt.php: SUCCEEDED
    @PHP/classes/__set__get_001.php: SUCCEEDED
    @PHP/classes/__set__get_004.php: SUCCEEDED
    @PHP/classes/__set__get_005.php: SUCCEEDED
    @PHP/date/bug17988.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2002-06-25 12:18:48
    2002-06-25 14:18:48
    2002-06-25 13:18:48
    2002-06-25 12:18:48
    2002-06-25 18:18:48
    2002-06-25 14:18:48
    2002-06-25 14:18:48
    2002-06-25 18:18:48
    2002-06-25 10:18:48
    2002-06-25 17:18:48
    2002-06-25 11:18:48
    2002-06-25 17:48:48
    2002-06-25 10:48:48
    2002-06-25 14:18:48
    2002-06-25 14:18:48
    2002-06-25 13:18:48
    2002-06-25 12:18:48
    2002-06-25 18:18:48
    2002-06-25 14:18:48
    2002-06-25 14:18:48
    2002-06-25 18:18:48
    2002-06-25 10:18:48
    2002-06-25 17:18:48
    2002-06-25 11:18:48
    2002-06-25 17:48:48
    2002-06-25 10:48:48
    @PHP/date/bug26317.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2003-11-19 17:20:42
    2003-11-19 17:20:42
    2003-11-19 17:20:42
    2003-11-19 16:20:42
    2003-11-19 16:20:42
    2003-11-19 16:20:42
    @PHP/date/bug26320.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2003-11-19 12:30:42
    2003-11-19 13:30:42
    2003-11-19 12:30:42
    2003-11-19 12:30:42
    @PHP/date/bug28088.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    The following line rightly shows the correct date time:
    04/04/04 2145
    But the following line fails to show the correct date time:
    04/03/04 2245
    The following line rightly shows the correct date time:
    04/04/04 2345
    But the following line fails to show the correct date time:
    04/04/04 0045
    @PHP/date/bug28599.php: SUCCEEDED
    @PHP/date/bug29150.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2005-06-19 22:00:00
    2005-06-20 00:00:00
    @PHP/date/bug29585.php: SUCCEEDED
    @PHP/date/bug29595.php: SUCCEEDED
    @PHP/date/bug33056.php: SUCCEEDED
    @PHP/date/bug33452.php: SUCCEEDED
    @PHP/date/bug33562.php: SUCCEEDED
    @PHP/date/bug33563.php: SUCCEEDED
    @PHP/date/bug33578.php: SUCCEEDED
    @PHP/date/bug33869.php: SUCCEEDED
    @PHP/date/bug34676.php: SUCCEEDED
    @PHP/date/bug34771.php: SUCCEEDED
    @PHP/date/bug35143.php: SUCCEEDED
    @PHP/date/bug35414.php: SUCCEEDED
    @PHP/date/bug35422.php: SUCCEEDED
    @PHP/date/bug35425.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    integer(42)
    integer(1)
    integer(1)
    integer(1)
    integer(1)
    integer(0)
    integer(0)
    integer(1)
    integer(1)
    integer(31)
    integer(1104537661)
    integer(6)
    integer(53)
    integer(5)
    integer(2005)
    integer(0)
    integer(3600)
    integer(292)
    integer(1)
    integer(1)
    integer(1)
    integer(1)
    integer(0)
    integer(0)
    integer(1)
    integer(1)
    integer(31)
    integer(1104559261)
    integer(6)
    integer(53)
    integer(5)
    integer(2005)
    integer(0)
    integer(-18000)
    @PHP/date/bug35456.php: SUCCEEDED
    @PHP/date/bug35624.php: SUCCEEDED
    @PHP/date/bug35630.php: SUCCEEDED
    @PHP/date/bug35699.php: SUCCEEDED
    @PHP/date/bug35705.php: SUCCEEDED
    @PHP/date/bug35885.php: SUCCEEDED
    @PHP/date/bug35887.php: SUCCEEDED
    @PHP/date/date.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    c: 2003-01-23T13:20:59+01:00
    r: Thu, 23 Jan 2003 13:20:59 +0100
    c: 2003-01-23T13:20:59+01:00
    r: Thu, 23 Jan 2003 13:20:59 +0100
    c: 2003-01-23T12:20:59+00:00
    r: Thu, 23 Jan 2003 12:20:59 +0000
    c: 2003-01-23T13:20:59+01:00
    r: Thu, 23 Jan 2003 13:20:59 +0100
    @PHP/date/date_create-1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\date\__input.txt on line 28
    SKIP
    @PHP/date/date_create-2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\date\__input.txt on line 6
    SKIP
    @PHP/date/date_default_timezone_get-3.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Europe/Prague
    America/Chicago
    Europe/Rome
    America/Chicago
    @PHP/date/date_modify-1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\date\__input.txt on line 6
    SKIP
    @PHP/date/date_modify-2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\date\__input.txt on line 6
    SKIP
    @PHP/date/default-timezone-1.php: SUCCEEDED
    @PHP/date/default-timezone-2.php: SUCCEEDED
    @PHP/date/format-negative-timestamp.php: SUCCEEDED
    @PHP/date/strtotime.php: SUCCEEDED
    @PHP/date/timezone-configuration.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    1119125744
    1119125744
    1119125744
    1119125744
    1119129344
    1119125744
    @PHP/doc_examples/test001.php: SUCCEEDED
    @PHP/doc_examples/test002.php: SUCCEEDED
    @PHP/doc_examples/test003.php: SUCCEEDED
    @PHP/doc_examples/test004.php: SUCCEEDED
    @PHP/doc_examples/test005.php: SUCCEEDED
    @PHP/doc_examples/test006.php: SUCCEEDED
    @PHP/doc_examples/test007.php: SUCCEEDED
    @PHP/doc_examples/test008.php: SUCCEEDED
    @PHP/doc_examples/test009.php: SUCCEEDED
    @PHP/doc_examples/test010.php: SUCCEEDED
    @PHP/doc_examples/test011.php: SUCCEEDED
    @PHP/doc_examples/test013.php: SUCCEEDED
    @PHP/doc_examples/test014.php: SUCCEEDED
    @PHP/doc_examples/test015.php: SUCCEEDED
    @PHP/doc_examples/test016.php: SUCCEEDED
    @PHP/doc_examples/test017.php: SUCCEEDED
    @PHP/doc_examples/test018.php: SUCCEEDED
    @PHP/doc_examples/test019.php: SUCCEEDED
    @PHP/doc_examples/test020.php: SUCCEEDED
    @PHP/doc_examples/test021.php: SUCCEEDED
    @PHP/doc_examples/test022.php: SUCCEEDED
    @PHP/doc_examples/test023.php: SUCCEEDED
    @PHP/doc_examples/test024.php: SUCCEEDED
    @PHP/doc_examples/test025.php: SUCCEEDED
    @PHP/doc_examples/test026.php: SUCCEEDED
    @PHP/doc_examples/test027.php: SUCCEEDED
    @PHP/doc_examples/test028.php: SUCCEEDED
    @PHP/doc_examples/test029.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ´┐Żauky
    �auky
    @PHP/doc_examples/test030.php: SUCCEEDED
    @PHP/doc_examples/test031.php: SUCCEEDED
    @PHP/doc_examples/test032.php: SUCCEEDED
    @PHP/doc_examples/test033.php: SUCCEEDED
    @PHP/doc_examples/test034.php: SUCCEEDED
    @PHP/doc_examples/test035.php: SUCCEEDED
    @PHP/doc_examples/test036.php: SUCCEEDED
    @PHP/doc_examples/test037.php: SUCCEEDED
    @PHP/doc_examples/test038.php: SUCCEEDED
    @PHP/doc_examples/test039.php: SUCCEEDED
    @PHP/doc_examples/test040.php: SUCCEEDED
    @PHP/doc_examples/test041.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    call_user_func():
    hello world!
    Strict Standards: call_user_func(): Non-static method MyClass::myCallbackMethod() should not be called statically in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\doc_examples\__input.txt at expression on line 17, column 1.
    Hello World!Hello World!
    @PHP/doc_examples/test042.php: SUCCEEDED
    @PHP/doc_examples/test043.php: SUCCEEDED
    @PHP/doc_examples/test044.php: SUCCEEDED
    @PHP/doc_examples/test045.php: SUCCEEDED
    @PHP/doc_examples/test046.php: SUCCEEDED
    @PHP/doc_examples/test047.php: SUCCEEDED
    @PHP/doc_examples/test048.php: SUCCEEDED
    @PHP/doc_examples/test049.php: SUCCEEDED
    @PHP/doc_examples/test050.php: SUCCEEDED
    @PHP/doc_examples/test051.php: SUCCEEDED
    @PHP/doc_examples/test052.php: SUCCEEDED
    @PHP/doc_examples/test053.php: SUCCEEDED
    @PHP/doc_examples/test054.php: SUCCEEDED
    @PHP/doc_examples/test055.php: SUCCEEDED
    @PHP/doc_examples/test056.php: SUCCEEDED
    @PHP/doc_examples/test057.php: SUCCEEDED
    @PHP/doc_examples/test058.php: SUCCEEDED
    @PHP/doc_examples/test059.php: SUCCEEDED
    @PHP/doc_examples/test060.php: SUCCEEDED
    @PHP/doc_examples/test061.php: SUCCEEDED
    @PHP/doc_examples/test062.php: SUCCEEDED
    @PHP/doc_examples/test063.php: SUCCEEDED
    @PHP/doc_examples/test064.php: SUCCEEDED
    @PHP/doc_examples/test065.php: SUCCEEDED
    @PHP/doc_examples/test066.php: SUCCEEDED
    @PHP/doc_examples/test067.php: SUCCEEDED
    @PHP/doc_examples/test068.php: SUCCEEDED
    @PHP/doc_examples/test069.php: SUCCEEDED
    @PHP/doc_examples/test070.php: SUCCEEDED
    @PHP/doc_examples/test071.php: SUCCEEDED
    @PHP/doc_examples/test072.php: SUCCEEDED
    @PHP/doc_examples/test073.php: SUCCEEDED
    @PHP/doc_examples/test074.php: SUCCEEDED
    @PHP/doc_examples/test075.php: SUCCEEDED
    @PHP/doc_examples/test076.php: SUCCEEDED
    @PHP/doc_examples/test077.php: SUCCEEDED
    @PHP/doc_examples/test078.php: SUCCEEDED
    @PHP/doc_examples/test079.php: SUCCEEDED
    @PHP/doc_examples/test080.php: SUCCEEDED
    @PHP/doc_examples/test081.php: SUCCEEDED
    @PHP/doc_examples/test082.php: SUCCEEDED
    @PHP/doc_examples/test083.php: SUCCEEDED
    @PHP/doc_examples/test084.php: SUCCEEDED
    @PHP/doc_examples/test085.php: SUCCEEDED
    @PHP/doc_examples/test086.php: SUCCEEDED
    @PHP/doc_examples/test087.php: SUCCEEDED
    @PHP/doc_examples/test088.php: SUCCEEDED
    @PHP/doc_examples/test089.php: SUCCEEDED
    @PHP/doc_examples/test090.php: SUCCEEDED
    @PHP/doc_examples/test091.php: SUCCEEDED
    @PHP/doc_examples/test092.php: SUCCEEDED
    @PHP/doc_examples/test093.php: SUCCEEDED
    @PHP/doc_examples/test094.php: SUCCEEDED
    @PHP/doc_examples/test095.php: SUCCEEDED
    @PHP/doc_examples/test096.php: SUCCEEDED
    @PHP/doc_examples/test097.php: SUCCEEDED
    @PHP/doc_examples/test098.php: SUCCEEDED
    @PHP/doc_examples/test099.php: SUCCEEDED
    @PHP/doc_examples/test100.php: SUCCEEDED
    @PHP/doc_examples/test102.php: SUCCEEDED
    @PHP/doc_examples/test103.php: SUCCEEDED
    @PHP/doc_examples/test104.php: SUCCEEDED
    @PHP/doc_examples/test105.php: SUCCEEDED
    @PHP/doc_examples/test107.php: SUCCEEDED
    @PHP/doc_examples/test108.php: SUCCEEDED
    @PHP/doc_examples/test109.php: SUCCEEDED
    @PHP/doc_examples/test110.php: SUCCEEDED
    @PHP/doc_examples/test111.php: SUCCEEDED
    @PHP/doc_examples/test112.php: SUCCEEDED
    @PHP/doc_examples/test113.php: SUCCEEDED
    @PHP/doc_examples/test114.php: SUCCEEDED
    @PHP/doc_examples/test115.php: SUCCEEDED
    @PHP/doc_examples/test116.php: SUCCEEDED
    @PHP/doc_examples/test117.php: SUCCEEDED
    @PHP/doc_examples/test118.php: SUCCEEDED
    @PHP/doc_examples/test119.php: SUCCEEDED
    @PHP/doc_examples/test120.php: SUCCEEDED
    @PHP/doc_examples/test121.php: SUCCEEDED
    @PHP/doc_examples/test122.php: SUCCEEDED
    @PHP/doc_examples/test123.php: SUCCEEDED
    @PHP/doc_examples/test124.php: SUCCEEDED
    @PHP/doc_examples/test125.php: SUCCEEDED
    @PHP/doc_examples/test126.php: SUCCEEDED
    @PHP/doc_examples/test127.php: SUCCEEDED
    @PHP/doc_examples/test128.php: SUCCEEDED
    @PHP/doc_examples/test129.php: SUCCEEDED
    @PHP/doc_examples/test130.php: SUCCEEDED
    @PHP/doc_examples/test131.php: SUCCEEDED
    @PHP/doc_examples/test132.php: SUCCEEDED
    @PHP/doc_examples/test133.php: SUCCEEDED
    @PHP/doc_examples/test134.php: SUCCEEDED
    @PHP/doc_examples/test136.php: SUCCEEDED
    @PHP/doc_examples/test137.php: SUCCEEDED
    @PHP/doc_examples/test138.php: SUCCEEDED
    @PHP/doc_examples/test139.php: SUCCEEDED
    @PHP/doc_examples/test148.php: SUCCEEDED
    @PHP/doc_examples/test149.php: SUCCEEDED
    @PHP/doc_examples/test150.php: SUCCEEDED
    @PHP/doc_examples/test151.php: SUCCEEDED
    @PHP/doc_examples/test152.php: SUCCEEDED
    @PHP/doc_examples/test153.php: SUCCEEDED
    @PHP/doc_examples/test154.php: SUCCEEDED
    @PHP/doc_examples/test155.php: SUCCEEDED
    @PHP/doc_examples/test156.php: SUCCEEDED
    @PHP/doc_examples/test158.php: SUCCEEDED
    @PHP/lang/001.php: SUCCEEDED
    @PHP/lang/002.php: SUCCEEDED
    @PHP/lang/003.php: SUCCEEDED
    @PHP/lang/004.php: SUCCEEDED
    @PHP/lang/005.php: SUCCEEDED
    @PHP/lang/006.php: SUCCEEDED
    @PHP/lang/007.php: SUCCEEDED
    @PHP/lang/008.php: SUCCEEDED
    @PHP/lang/009.php: SUCCEEDED
    @PHP/lang/010.php: SUCCEEDED
    @PHP/lang/011.php: SUCCEEDED
    @PHP/lang/012.php: SUCCEEDED
    @PHP/lang/013.php: SUCCEEDED
    @PHP/lang/014.php: SUCCEEDED
    @PHP/lang/015.php: SUCCEEDED
    @PHP/lang/016.php: SUCCEEDED
    @PHP/lang/017.php: SUCCEEDED
    @PHP/lang/018.php: SUCCEEDED
    @PHP/lang/019.php: SUCCEEDED
    @PHP/lang/020.php: SUCCEEDED
    @PHP/lang/021.php: SUCCEEDED
    @PHP/lang/022.php: SUCCEEDED
    @PHP/lang/023.php: SUCCEEDED
    @PHP/lang/024.php: SUCCEEDED
    @PHP/lang/025.php: SUCCEEDED
    @PHP/lang/026.php: SUCCEEDED
    @PHP/lang/027.php: SUCCEEDED
    @PHP/lang/028.php: SUCCEEDED
    @PHP/lang/030.php: SUCCEEDED
    @PHP/lang/032.php: SUCCEEDED
    @PHP/lang/036.php: SUCCEEDED
    @PHP/lang/037.php: SUCCEEDED
    @PHP/lang/038.php: SUCCEEDED
    @PHP/lang/039.php: SUCCEEDED
    @PHP/lang/040.php: SUCCEEDED
    @PHP/lang/bison1.php: SUCCEEDED
    @PHP/lang/bug17115.php: SUCCEEDED
    @PHP/lang/bug18872.php: SUCCEEDED
    @PHP/lang/bug19943.php: SUCCEEDED
    @PHP/lang/bug20175.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    Deprecated: Assigning the return value of new by reference is deprecated in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\lang\__input.txt on line 110
    foo_static()
    foo_global()
    foo:1
    foo_static()
    foo:1
    bar_static()
    bar_global()
    bar:1
    bar_static()
    bar:1
    wow_static()
    wow_global()
    wow:1
    wow_static()
    wow:1
    oop_test()
    oop_static()
    oop_class()
    oop:1
    oop_static()
    oop:1
    oop_test()
    oop_static()
    oop:1
    foo_static()
    foo_global()
    foo:1
    foo_static()
    foo:1
    bar_static()
    bar_global()
    bar:1
    bar_static()
    bar_global()
    bar:2
    wow_static()
    wow_global()
    wow:1
    wow_static()
    wow:1
    oop_test()
    oop_static()
    oop_class()
    oop:1
    oop_static()
    oop:1
    oop_test()
    oop_static()
    oop:1
    D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\lang\__input.txt(110,4): warning PHP0181: Assigning the return value of new by reference is deprecated
    
    @PHP/lang/bug21094.php: SUCCEEDED
    @PHP/lang/bug21600.php: SUCCEEDED
    @PHP/lang/bug21669.php: SUCCEEDED
    @PHP/lang/bug21849.php: SUCCEEDED
    @PHP/lang/bug21961.php: SUCCEEDED
    @PHP/lang/bug22231.php: SUCCEEDED
    @PHP/lang/bug22367.php: SUCCEEDED
    @PHP/lang/bug22510.php: SUCCEEDED
    @PHP/lang/bug22592.php: SUCCEEDED
    @PHP/lang/bug22690.php: SUCCEEDED
    @PHP/lang/bug23279.php: SUCCEEDED
    @PHP/lang/bug23384.php: SUCCEEDED
    @PHP/lang/bug23489.php: SUCCEEDED
    @PHP/lang/bug23524.php: SUCCEEDED
    @PHP/lang/bug23922.php: SUCCEEDED
    @PHP/lang/bug24054.php: SUCCEEDED
    @PHP/lang/bug24396.php: SUCCEEDED
    @PHP/lang/bug24403.php: SUCCEEDED
    @PHP/lang/bug24436.php: SUCCEEDED
    @PHP/lang/bug24499.php: SUCCEEDED
    @PHP/lang/bug24640.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    double(1700000000000000089258092433847514422797596587883870563356951996370064178581143932836831337636761368874297554515902592900802289500112731978596146714137401870842258241575178866354311397451139753100927220499450359906637902366244989496126909662726242240784739940994096632824796638102733857671280980918272.0000000000)
    1.7E+300
    
    ------
    double(0.0000000000)
    1.7E-300
    
    ------
    double(17000000000000001584208052028780237480128823455860622330108867175329927830437888.0000000000)
    1.7E+79
    
    ------
    double(0.0000000000)
    1.7E-79
    
    ------
    double(169999999999999996096025832433329868941658043870400163508258284150340918121070592.0000000000)
    1.7E+80
    
    ------
    double(0.0000000000)
    1.7E-80
    
    ------
    double(1700000000000000013616404158611892038375594280539217794530130541777964808366194688.0000000000)
    1.7E+81
    
    ------
    double(0.0000000000)
    1.7E-81
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    1.6999810742106E-319
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    1.7000798873397E-320
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    1.6995858216939E-321
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    0
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    0
    
    ------
    double(1700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+300
    
    ------
    double(0.0000000000)
    1.70000000000003E-300
    
    ------
    double(17000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+79
    
    ------
    double(0.0000000000)
    1.70000000000001E-79
    
    ------
    double(170000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+80
    
    ------
    double(0.0000000000)
    1.70000000000001E-80
    
    ------
    double(1700000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+81
    
    ------
    double(0.0000000000)
    1.70000000000001E-81
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    1.69998107421056E-319
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    1.70007988733973E-320
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    1.69464516523548E-321
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    0
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    0
    
    ------
    @PHP/lang/bug24652.php: SUCCEEDED
    @PHP/lang/bug24658.php: SUCCEEDED
    @PHP/lang/bug24783.php: SUCCEEDED
    @PHP/lang/bug24926.php: SUCCEEDED
    @PHP/lang/bug25547.php: SUCCEEDED
    @PHP/lang/bug25652.php: SUCCEEDED
    @PHP/lang/bug25922.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Undefined index here: 'error'
    Undefined index here: ''
    @PHP/lang/bug26182.php: SUCCEEDED
    @PHP/lang/bug26696.php: SUCCEEDED
    @PHP/lang/bug26866.php: SUCCEEDED
    @PHP/lang/bug26869.php: SUCCEEDED
    @PHP/lang/bug27354.php: SUCCEEDED
    @PHP/lang/bug27439.php: SUCCEEDED
    @PHP/lang/bug27535.php: SUCCEEDED
    @PHP/lang/bug28213.php: SUCCEEDED
    @PHP/lang/bug28800.php: SUCCEEDED
    @PHP/lang/bug29566.php: SUCCEEDED
    @PHP/lang/bug29893.php: SUCCEEDED
    @PHP/lang/bug29944.php: SUCCEEDED
    @PHP/lang/bug30638.php: SUCCEEDED
    @PHP/lang/bug30726.php: SUCCEEDED
    @PHP/lang/bug30862.php: SUCCEEDED
    @PHP/lang/bug32924.php: SUCCEEDED
    @PHP/lang/bug35382.php: SUCCEEDED
    @PHP/lang/bug7515.php: SUCCEEDED
    @PHP/lang/each_binary_safety.php: SUCCEEDED
    @PHP/lang/error_2_exception_001.php: SUCCEEDED
    @PHP/lang/foreach_with_object_001.php: SUCCEEDED
    @PHP/lang/foreach_with_references_001.php: SUCCEEDED
    @PHP/lang/type_hints_001.php: SUCCEEDED
    @PHP/standard/array/001.php: SUCCEEDED
    @PHP/standard/array/003.php: SUCCEEDED
    @PHP/standard/array/004.php: SUCCEEDED
    @PHP/standard/array/005.php: SUCCEEDED
    @PHP/standard/array/008.php: SUCCEEDED
    @PHP/standard/array/array_change_key_case.php: SUCCEEDED
    @PHP/standard/array/array_chunk.php: SUCCEEDED
    @PHP/standard/array/array_count_values.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array(0) {
    }
    
    array(1) {
      [0]=>
      int(1)
    }
    
    array(1) {
      [1]=>
      int(1)
    }
    
    array(1) {
      [-1]=>
      int(1)
    }
    
    array(1) {
      [0]=>
      int(2)
    }
    
    array(2) {
      [0]=>
      int(1)
      [1]=>
      int(1)
    }
    
    array(1) {
      [1]=>
      int(2)
    }
    
    array(3) {
      [1]=>
      int(2)
      ["hello"]=>
      int(2)
      ["world"]=>
      int(1)
    }
    
    array(2) {
      ["hello"]=>
      int(2)
      ["world"]=>
      int(1)
    }
    
    array(3) {
      [""]=>
      int(2)
      ["world"]=>
      int(3)
      ["hello"]=>
      int(4)
    }
    
    array(1) {
      [0]=>
      int(1)
    }
    
    array(1) {
      [1]=>
      int(1)
    }
    array(0) [empty]
    
    array(1)
    {
      [0] => integer(1)
    }
    
    array(1)
    {
      [1] => integer(1)
    }
    
    array(1)
    {
      [-1] => integer(1)
    }
    
    array(1)
    {
      [0] => integer(2)
    }
    
    array(2)
    {
      [0] => integer(1)
      [1] => integer(1)
    }
    
    array(1)
    {
      [1] => integer(2)
    }
    
    array(3)
    {
      [1] => integer(2)
      ['hello'] => integer(2)
      ['world'] => integer(1)
    }
    
    array(2)
    {
      ['hello'] => integer(2)
      ['world'] => integer(1)
    }
    
    array(3)
    {
      [''] => integer(2)
      ['world'] => integer(3)
      ['hello'] => integer(4)
    }
    
    array(1)
    {
      [0] => integer(1)
    }
    
    array(1)
    {
      [1] => integer(1)
    }
    @PHP/standard/array/array_diff_1.php: SUCCEEDED
    @PHP/standard/array/array_diff_key.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ------ Test 1 --------
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 2 --------
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 3 --------
    array(6) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [2]=>
      int(4)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [2]=>
      int(4)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 4 --------
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 5 --------
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 6 --------
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 7 --------
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    ------ Test 8 --------
    array(6) {
      [0]=>
      int(0)
      [7]=>
      int(14)
      [2]=>
      int(4)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [0]=>
      int(0)
      [7]=>
      int(14)
      [2]=>
      int(4)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 9 --------
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    ------ Test 1 --------
    array(4)
    {
      [1] => &integer(2)
      [6] => &integer(12)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    array(4)
    {
      [1] => &integer(2)
      [6] => &integer(12)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    ------ Test 2 --------
    array(3)
    {
      [1] => &integer(2)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    array(3)
    {
      [1] => &integer(2)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    ------ Test 3 --------
    array(6)
    {
      [1] => &integer(2)
      [6] => &integer(12)
      [2] => &integer(4)
      [15] => &integer(30)
      [1200] => &integer(2400)
      [-2500] => &integer(-5000)
    }
    array(6)
    {
      [1] => &integer(2)
      [6] => &integer(12)
      [2] => &integer(4)
      [15] => &integer(30)
      [1200] => &integer(2400)
      [-2500] => &integer(-5000)
    }
    ------ Test 4 --------
    array(3)
    {
      [1] => &integer(2)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    array(3)
    {
      [1] => &integer(2)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    ------ Test 5 --------
    array(4)
    {
      [1] => &integer(2)
      [6] => &integer(12)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    array(4)
    {
      [1] => &integer(2)
      [6] => &integer(12)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    ------ Test 6 --------
    array(3)
    {
      [1] => &integer(2)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    array(3)
    {
      [1] => &integer(2)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    ------ Test 7 --------
    array(3)
    {
      [7] => &integer(14)
      [11] => &integer(22)
      [1100] => &integer(2200)
    }
    array(3)
    {
      [7] => &integer(14)
      [11] => &integer(22)
      [1100] => &integer(2200)
    }
    ------ Test 8 --------
    array(6)
    {
      [0] => &integer(0)
      [7] => &integer(14)
      [2] => &integer(4)
      [11] => &integer(22)
      [1100] => &integer(2200)
      [-2500] => &integer(-5000)
    }
    array(6)
    {
      [0] => &integer(0)
      [7] => &integer(14)
      [2] => &integer(4)
      [11] => &integer(22)
      [1100] => &integer(2200)
      [-2500] => &integer(-5000)
    }
    ------ Test 9 --------
    array(3)
    {
      [7] => &integer(14)
      [11] => &integer(22)
      [1100] => &integer(2200)
    }
    array(3)
    {
      [7] => &integer(14)
      [11] => &integer(22)
      [1100] => &integer(2200)
    }
    @PHP/standard/array/array_intersect_key.php: SUCCEEDED
    @PHP/standard/array/array_sum.php: SUCCEEDED
    @PHP/standard/array/array_walk_recursive.php: SUCCEEDED
    @PHP/standard/array/bug12776.php: SUCCEEDED
    @PHP/standard/array/bug14580.php: SUCCEEDED
    @PHP/standard/array/bug20381.php: SUCCEEDED
    @PHP/standard/array/bug20865.php: SUCCEEDED
    @PHP/standard/array/bug21182.php: SUCCEEDED
    @PHP/standard/array/bug21918.php: SUCCEEDED
    @PHP/standard/array/bug21998.php: SUCCEEDED
    @PHP/standard/array/bug22088.php: SUCCEEDED
    @PHP/standard/array/bug22463.php: SUCCEEDED
    @PHP/standard/array/bug23581.php: SUCCEEDED
    @PHP/standard/array/bug23788.php: SUCCEEDED
    @PHP/standard/array/bug24198.php: SUCCEEDED
    @PHP/standard/array/bug24220.php: SUCCEEDED
    @PHP/standard/array/bug24766.php: SUCCEEDED
    @PHP/standard/array/bug24897.php: SUCCEEDED
    @PHP/standard/array/bug24980.php: SUCCEEDED
    @PHP/standard/array/bug25359.php: SUCCEEDED
    @PHP/standard/array/bug25708.php: SUCCEEDED
    @PHP/standard/array/bug25758.php: SUCCEEDED
    @PHP/standard/array/bug26458.php: SUCCEEDED
    @PHP/standard/array/bug28974.php: SUCCEEDED
    @PHP/standard/array/bug29493.php: SUCCEEDED
    @PHP/standard/array/bug30266.php: SUCCEEDED
    @PHP/standard/array/bug30833.php: SUCCEEDED
    @PHP/standard/array/bug31158.php: SUCCEEDED
    @PHP/standard/array/bug31213.php: SUCCEEDED
    @PHP/standard/array/bug32021.php: SUCCEEDED
    @PHP/standard/array/bug33382.php: SUCCEEDED
    @PHP/standard/array/bug33989.php: SUCCEEDED
    @PHP/standard/array/bug34227.php: SUCCEEDED
    @PHP/standard/array/bug34982.php: SUCCEEDED
    @PHP/standard/array/bug35014.php: SUCCEEDED
    @PHP/standard/array/bug35022.php: SUCCEEDED
    @PHP/standard/array/bug35821.php: SUCCEEDED
    @PHP/standard/array/count_recursive.php: SUCCEEDED
    @PHP/standard/array/locale_sort.php: SUCCEEDED
    @PHP/standard/array/range.php: SUCCEEDED
    @PHP/standard/assert/assert.php: SUCCEEDED
    @PHP/standard/general_functions/001.php: SUCCEEDED
    @PHP/standard/general_functions/002.php: SUCCEEDED
    @PHP/standard/general_functions/003.php: SUCCEEDED
    @PHP/standard/general_functions/004.php: SUCCEEDED
    @PHP/standard/general_functions/005.php: SUCCEEDED
    @PHP/standard/general_functions/006.php: SUCCEEDED
    @PHP/standard/general_functions/007.php: SUCCEEDED
    @PHP/standard/general_functions/009.php: SUCCEEDED
    @PHP/standard/general_functions/bug25038.php: SUCCEEDED
    @PHP/standard/general_functions/bug27678.php: SUCCEEDED
    @PHP/standard/general_functions/bug29038.php: SUCCEEDED
    @PHP/standard/general_functions/bug31190.php: SUCCEEDED
    @PHP/standard/general_functions/bug32647.php: SUCCEEDED
    @PHP/standard/general_functions/bug35229.php: SUCCEEDED
    @PHP/standard/general_functions/is_resource.php: SUCCEEDED
    @PHP/standard/math/abs.php: SUCCEEDED
    @PHP/standard/math/bug24142.php: SUCCEEDED
    @PHP/standard/math/bug25694.php: SUCCEEDED
    @PHP/standard/math/bug27646.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    double(INF-INF)
    'd:-INF;'
    double(INF-INF)
    double(INF-INF)
    'd:INF;'
    double(INF-INF)
    double(NaNInfini)
    'd:NAN;'
    double(NaNInfini)
    double(-Infinity)
    'd:-INF;'
    double(-Infinity)
    double(Infinity)
    'd:INF;'
    double(Infinity)
    double(NaN)
    'd:NAN;'
    double(NaN)
    @PHP/standard/math/bug30069.php: SUCCEEDED
    @PHP/standard/math/bug30695.php: SUCCEEDED
    @PHP/standard/math/floorceil.php: SUCCEEDED
    @PHP/standard/math/hexdec.php: SUCCEEDED
    @PHP/standard/math/log.php: SUCCEEDED
    @PHP/standard/math/pow.php: SUCCEEDED
    @PHP/standard/math/round.php: SUCCEEDED
    @PHP/standard/reg/001.php: SUCCEEDED
    @PHP/standard/reg/002.php: SUCCEEDED
    @PHP/standard/reg/003.php: SUCCEEDED
    @PHP/standard/reg/004.php: SUCCEEDED
    @PHP/standard/reg/005.php: SUCCEEDED
    @PHP/standard/reg/006.php: SUCCEEDED
    @PHP/standard/reg/007.php: SUCCEEDED
    @PHP/standard/reg/008.php: SUCCEEDED
    @PHP/standard/reg/009.php: SUCCEEDED
    @PHP/standard/reg/010.php: SUCCEEDED
    @PHP/standard/reg/011.php: SUCCEEDED
    @PHP/standard/reg/012.php: SUCCEEDED
    @PHP/standard/reg/013.php: SUCCEEDED
    @PHP/standard/reg/014.php: SUCCEEDED
    @PHP/standard/reg/015.php: SUCCEEDED
    @PHP/standard/reg/016.php: SUCCEEDED
    @PHP/standard/serialize/001.php: SUCCEEDED
    @PHP/standard/serialize/002.php: SUCCEEDED
    @PHP/standard/serialize/003.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    d:100;
    double(100.0000000000)
    
    d:51999999999999996980101120;
    double(51999999999999996980101120.0000000000)
    
    d:8.9999999999999995265585574287341141808127531476202420890331268310546875E-9;
    double(0.0000000090)
    d:100;
    double(100.0000000000)
    
    d:5.2000000000000006E+25;
    double(52000000000000000000000000.0000000000)
    
    d:9.0000000000000045E-09;
    double(0.0000000090)
    @PHP/standard/serialize/004.php: SUCCEEDED
    @PHP/standard/serialize/005.php: SUCCEEDED
    @PHP/standard/serialize/006.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    'O:3:"´┐Ż":1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    object
    {
      '´┐Ż' => '´┐Ż'
    }
    'a:1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    array
    {
      '´┐Ż' => '´┐Ż'
    }
    'O:3:"´┐Ż":1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    object
    {
      'ďż˝' => 'ďż˝'
    }
    'a:1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    array
    {
      'ďż˝' => 'ďż˝'
    }
    @PHP/standard/serialize/bug14293.php: SUCCEEDED
    @PHP/standard/serialize/bug21957.php: SUCCEEDED
    @PHP/standard/serialize/bug23298.php: SUCCEEDED
    @PHP/standard/serialize/bug24063.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0.1 0.1
    0.01 0.01
    0.001 0.001
    0.0001 0.0001
    1.0E-5 1.0E-5
    1.0E-6 1.0E-6
    1.0E-7 1.0E-7
    1.0E-8 1.0E-8
    1.0E-9 1.0E-9
    0.1 0.1
    0.01 0.01
    0.001 0.001
    0.0001 0.0001
    1E-05 1E-05
    1E-06 1E-06
    1E-07 1E-07
    1E-08 1E-08
    1E-09 1E-09
    @PHP/standard/serialize/bug25378.php: SUCCEEDED
    @PHP/standard/serialize/bug26762.php: SUCCEEDED
    @PHP/standard/serialize/bug27469.php: SUCCEEDED
    @PHP/standard/serialize/bug28325.php: SUCCEEDED
    @PHP/standard/serialize/bug30234.php: SUCCEEDED
    @PHP/standard/serialize/bug31402.php: SUCCEEDED
    @PHP/standard/serialize/bug31442.php: SUCCEEDED
    @PHP/standard/strings/add-and-stripcslashes.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    kaboemkara!
    foo\b\a\r\b\az
    \f\o\o\[ \]
    \zoo['\.']
    \abcd\e\f\g\h\i\j\k\l\m\n\o\pqrstuvwxy\z
    1
    5d
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\standard\strings\__input.txt at expression on line 3, column 1.
    
    kaboemkara!
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\standard\strings\__input.txt at expression on line 5, column 1.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\standard\strings\__input.txt at expression on line 6, column 1.
    
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\standard\strings\__input.txt at expression on line 8, column 1.
    
    1
    5d
    @PHP/standard/strings/add-and-stripslashes.php: SUCCEEDED
    @PHP/standard/strings/basename.php: SUCCEEDED
    @PHP/standard/strings/bin2hex.php: SUCCEEDED
    @PHP/standard/strings/bug20108.php: SUCCEEDED
    @PHP/standard/strings/bug20169.php: SUCCEEDED
    @PHP/standard/strings/bug20261.php: SUCCEEDED
    @PHP/standard/strings/bug20927.php: SUCCEEDED
    @PHP/standard/strings/bug21338.php: SUCCEEDED
    @PHP/standard/strings/bug21453.php: SUCCEEDED
    @PHP/standard/strings/bug21730.php: SUCCEEDED
    @PHP/standard/strings/bug21744.php: SUCCEEDED
    @PHP/standard/strings/bug22008.php: SUCCEEDED
    @PHP/standard/strings/bug22187.php: SUCCEEDED
    @PHP/standard/strings/bug22224.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      0 => 
      object
      {
      }
      1 => 
      object
      {
      }
    }
    @PHP/standard/strings/bug22227.php: SUCCEEDED
    @PHP/standard/strings/bug22904.php: SUCCEEDED
    @PHP/standard/strings/bug23650.php: SUCCEEDED
    @PHP/standard/strings/bug23894.php: SUCCEEDED
    @PHP/standard/strings/bug24098.php: SUCCEEDED
    @PHP/standard/strings/bug24208.php: SUCCEEDED
    @PHP/standard/strings/bug24281.php: SUCCEEDED
    @PHP/standard/strings/bug25671.php: SUCCEEDED
    @PHP/standard/strings/bug25707.php: SUCCEEDED
    @PHP/standard/strings/bug26878.php: SUCCEEDED
    @PHP/standard/strings/bug26973.php: SUCCEEDED
    @PHP/standard/strings/bug27276.php: SUCCEEDED
    @PHP/standard/strings/bug27278.php: SUCCEEDED
    @PHP/standard/strings/bug27295.php: SUCCEEDED
    @PHP/standard/strings/bug27457.php: SUCCEEDED
    @PHP/standard/strings/bug27675.php: SUCCEEDED
    @PHP/standard/strings/bug28386.php: SUCCEEDED
    @PHP/standard/strings/bug33076.php: SUCCEEDED
    @PHP/standard/strings/chr_ord.php: SUCCEEDED
    @PHP/standard/strings/chunk_split.php: SUCCEEDED
    @PHP/standard/strings/count_chars.php: SUCCEEDED
    @PHP/standard/strings/crc32.php: SUCCEEDED
    @PHP/standard/strings/explode.php: SUCCEEDED
    @PHP/standard/strings/implode.php: SUCCEEDED
    @PHP/standard/strings/md5.php: SUCCEEDED
    @PHP/standard/strings/md5raw.php: SUCCEEDED
    @PHP/standard/strings/nl2br.php: SUCCEEDED
    @PHP/standard/strings/sha1.php: SUCCEEDED
    @PHP/standard/strings/sha1raw.php: SUCCEEDED
    @PHP/standard/strings/sprintf_f.php: SUCCEEDED
    @PHP/standard/strings/strcspn.php: SUCCEEDED
    @PHP/standard/strings/strings001.php: SUCCEEDED
    @PHP/standard/strings/strpos.php: SUCCEEDED
    @PHP/standard/strings/strrev.php: SUCCEEDED
    @PHP/standard/strings/strripos.php: SUCCEEDED
    @PHP/standard/strings/strrpos.php: SUCCEEDED
    @PHP/standard/strings/strspn.php: SUCCEEDED
    @PHP/standard/strings/strstr.php: SUCCEEDED
    @PHP/standard/strings/strtoupper.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    cfbfbdcfbfbdcfbfbd
    cfafbdcfafbdcfafbd
    @PHP/standard/strings/strtr.php: SUCCEEDED
    @PHP/standard/strings/strval.php: SUCCEEDED
    @PHP/standard/strings/str_repeat.php: SUCCEEDED
    @PHP/standard/strings/str_shuffle.php: SUCCEEDED
    @PHP/standard/strings/str_word_count.php: SUCCEEDED
    @PHP/standard/strings/substr_count.php: SUCCEEDED
    @PHP/standard/strings/substr_replace.php: SUCCEEDED
    @PHP/standard/strings/wordwrap.php: SUCCEEDED
    @PHP/standard/time/001.php: SUCCEEDED
    @PHP/standard/time/idate.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    U: 1043324459
    Y: 2003
    z: 22
    y: 3
    m: 1
    n: 1
    d: 23
    j: 23
    H: 13
    G: 13
    h: 1
    g: 1
    i: 20
    s: 59
    t: 31
    w: 4
    L: 0
    B: 556
    I: 0
    W: 4
    U: 1043324459
    Y: 2003
    z: 22
    y: 3
    m: 1
    n: 1
    d: 23
    j: 23
    H: 12
    G: 12
    h: 12
    g: 12
    i: 20
    s: 59
    t: 31
    w: 4
    L: 0
    B: 556
    I: 0
    W: 4
    @PHP/strings/001.php: SUCCEEDED
    @PHP/strings/002.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    fprintf test 1:abcde
    20
    printf test 1:simple string
    printf test 2:42
    printf test 3:3.333333
    printf test 4:3.3333333333
    printf test 5:2.50      
    printf test 6:2.50000000
    printf test 7:0000002.50
    printf test 8:<                 foo>
    printf test 9:<bar                 >
    printf test 10: 123456789012345
    printf test 10:<h´┐Żyesterettsjustitiarius>
    printf test 11: 123456789012345678901234567890
    printf test 11:<    h´┐Żyesterettsjustitiarius>
    printf test 12:-12.34
    printf test 13:  -12
    printf test 14:@
    printf test 15:10101010
    printf test 16:aa
    printf test 17:AA
    printf test 18:        10101010
    printf test 19:              aa
    printf test 20:              AA
    printf test 21:0000000010101010
    printf test 22:00000000000000aa
    printf test 23:00000000000000AA
    printf test 24:abcde
    printf test 25:gazonk
    printf test 26:2 1
    printf test 27:3 1 2
    printf test 28:02  1
    printf test 29:2   1
    printf test 30:x
    vprintf test 1:2   1
    fprintf test 1:abcde
    20
    printf test 1:simple string
    printf test 2:42
    printf test 3:3.333333
    printf test 4:3.3333333333
    printf test 5:2.50      
    printf test 6:2.50000000
    printf test 7:0000002.50
    printf test 8:<                 foo>
    printf test 9:<bar                 >
    printf test 10: 123456789012345
    printf test 10:<h�yesterettsjustitiarius>
    printf test 11: 123456789012345678901234567890
    printf test 11:<    h�yesterettsjustitiarius>
    printf test 12:-12.34
    printf test 13:  -12
    printf test 14:@
    printf test 15:10101010
    printf test 16:aa
    printf test 17:AA
    printf test 18:        10101010
    printf test 19:              aa
    printf test 20:              AA
    printf test 21:0000000010101010
    printf test 22:00000000000000aa
    printf test 23:00000000000000AA
    printf test 24:abcde
    printf test 25:gazonk
    printf test 26:2 1
    printf test 27:3 1 2
    printf test 28:02  1
    printf test 29:2   1
    printf test 30:x
    vprintf test 1:2   1
    @PHP/strings/bug22592.php: SUCCEEDED
    Arrays/array1.php: SUCCEEDED
    Arrays/array_diff_intersect.php: SUCCEEDED
    Arrays/array_diff_intersect2.php: SUCCEEDED
    Arrays/array_diff_intersect3.php: SUCCEEDED
    Arrays/array_map.php: SUCCEEDED
    Arrays/array_merge_recursive.php: SUCCEEDED
    Arrays/array_reduce1.php: SUCCEEDED
    Arrays/array_reduce2.php: SUCCEEDED
    Arrays/array_slice.php: SUCCEEDED
    Arrays/array_sumprod.php: SUCCEEDED
    Arrays/array_unshift.php: SUCCEEDED
    Arrays/array_walk.php: SUCCEEDED
    Arrays/array_walk_recursive.php: SUCCEEDED
    Arrays/multisort.php: SUCCEEDED
    Arrays/optimizations.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    3
    4
    5
    a
    b
    c
    
    Warning: strtolower() expects parameter 1 to be string, array given in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Arrays\__input.txt on line 15
    
    cablo
    3
    4
    5
    a
    b
    c
    array
    cablo
    Arrays/recursion.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    f1:
    array(2) {
      ["a"]=>
      array(5) {
        ["a"]=>
        &array(3) {
          ["a"]=>
          &array(3) {
            ["a"]=>
            *RECURSION*
            [0]=>
            string(1) "y"
            [1]=>
            string(1) "z"
          }
          [0]=>
          string(1) "y"
          [1]=>
          string(1) "z"
        }
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        string(1) "x"
      }
      [0]=>
      string(1) "w"
    }
    f2:
    array(1) {
      ["A"]=>
      &array(2) {
        ["a"]=>
        &array(2) {
          ["a"]=>
          *RECURSION*
          [0]=>
          string(1) "z"
        }
        [0]=>
        string(1) "z"
      }
    }
    f3:
    array(2) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) {
          [0]=>
          *RECURSION*
          [1]=>
          string(1) "z"
        }
        [1]=>
        string(1) "z"
      }
      [1]=>
      string(1) "z"
    }
    f4:
    
    Warning: array_merge_recursive(): recursion detected in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Arrays\__input.txt on line 37
    array(1) {
      ["a"]=>
      &array(3) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
      }
    }
    f5:
    array(1) {
      ["a"]=>
      array(6) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        int(1)
        [4]=>
        int(2)
        [5]=>
        int(3)
      }
    }
    f6:
    array(1) {
      ["a"]=>
      array(2) {
        [0]=>
        string(2) "xx"
        [1]=>
        int(2)
      }
    }
    f7:
    array(1) {
      ["a"]=>
      array(1) {
        ["a"]=>
        array(1) {
          ["a"]=>
          &array(1) {
            ["a"]=>
            &array(1) {
              ["a"]=>
              *RECURSION*
            }
          }
        }
      }
    }
    f1:
    array(2)
    {
      ['a'] => array(5)
      {
        ['a'] => &array(3)
        {
          ['a'] => &array(3) [recursion]
          [0] => string(1) "y"
          [1] => string(1) "z"
        }
        [0] => integer(1)
        [1] => integer(2)
        [2] => integer(3)
        [3] => string(1) "x"
      }
      [0] => string(1) "w"
    }
    f2:
    array(1)
    {
      ['A'] => &array(2)
      {
        ['a'] => &array(2) [recursion]
        [0] => string(1) "z"
      }
    }
    f3:
    array(2)
    {
      [0] => &array(2) [recursion]
      [1] => string(1) "z"
    }
    f4:
    array(1)
    {
      ['a'] => array(6)
      {
        [0] => integer(1)
        [1] => integer(2)
        [2] => integer(3)
        [3] => integer(1)
        [4] => integer(2)
        [5] => integer(3)
      }
    }
    f5:
    array(1)
    {
      ['a'] => array(6)
      {
        [0] => integer(1)
        [1] => integer(2)
        [2] => integer(3)
        [3] => integer(1)
        [4] => integer(2)
        [5] => integer(3)
      }
    }
    f6:
    array(1)
    {
      ['a'] => array(2)
      {
        [0] => string(2) "xx"
        [1] => integer(2)
      }
    }
    f7:
    array(1)
    {
      ['a'] => &array(1)
      {
        ['a'] => &array(1) [recursion]
      }
    }
    Arrays/sort.php: SUCCEEDED
    Arrays/usort.php: SUCCEEDED
    Bugs/class_incompletepart.php: SUCCEEDED
    Bugs/division-by-zero.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    DIVISION
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt on line 6
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt on line 8
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt on line 10
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt on line 12
    bool(false)
    MODULO
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt on line 16
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt on line 18
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt on line 20
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt on line 22
    bool(false)
    DIVISION
    bool(false)
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt at expression on line 10, column 2.
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt at expression on line 12, column 2.
    bool(false)
    MODULO
    bool(false)
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt at expression on line 20, column 2.
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt at expression on line 22, column 2.
    bool(false)
    D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt(6,10): warning PHP0150: Division by zero
    D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt(8,9): warning PHP0150: Division by zero
    D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt(16,10): warning PHP0150: Division by zero
    D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt(18,9): warning PHP0150: Division by zero
    
    Bugs/function-in-unknown-class.php: SUCCEEDED
    Bugs/is_a_null_value.php: SUCCEEDED
    Bugs/preg-named-groups.php: SUCCEEDED
    Bugs/preg-replace-advanced.php: SUCCEEDED
    Bugs/preg-replace-range.php: SUCCEEDED
    Bugs/preg-replace.php: SUCCEEDED
    Bugs/preg-this-dynamic.php: FAILED
    Script hung upNo errorsSuccess
    Expected test outputReal script output
    Unhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---> PHP.Core.Debug+AssertException: Assertion failed: 
       at PHP.Core.Debug.Fail(String message)
       at PHP.Core.Debug.Assert(Boolean condition)
       at PHP.Core.RelativePath.ParseCanonical(String relativePath)
       at PHP.Core.Emit.TransientAssemblyBuilder.Build(String sourceCode, SourceCodeDescriptor descriptor, EvalKinds kind, CompilationContext context, ScriptContext scriptContext, DTypeDesc referringType, NamingContext namingContext, Boolean completeSource)
       at PHP.Core.DynamicCode.EvalInternal(String prefix, String code, String suffix, EvalKinds kind, ScriptContext scriptContext, Dictionary`2 localVariables, DObject self, DTypeDesc referringType, SourceCodeDescriptor descriptor, Boolean entireFile, NamingContext namingContext)
       at PHP.Core.DynamicCode.Eval(String code, Boolean synthetic, ScriptContext context, Dictionary`2 definedVariables, DObject self, DTypeDesc referringType, String callerRelativeSourcePath, Int32 line, Int32 column, Int32 containerId, NamingContext namingContext)
       at PHP.Library.PerlRegExp.Evaluator.ReplaceCodeExecute(Match m)
       at System.Text.RegularExpressions.RegexReplacement.Replace(MatchEvaluator evaluator, Regex regex, String input, Int32 count, Int32 startat)
       at System.Text.RegularExpressions.Regex.Replace(String input, MatchEvaluator evaluator, Int32 count)
       at PHP.Library.PerlRegExp.ReplaceInternal(DObject self, Dictionary`2 definedVariables, PerlRegExpConverter converter, PhpCallback callback, String str, Int32 limit, SourceCodeDescriptor sourceCodeDesc, Int32& count)
       at PHP.Library.PerlRegExp.SimpleReplace(DObject self, Dictionary`2 definedVariables, Object pattern, String replacement, PhpCallback callback, Object data, Int32 limit, SourceCodeDescriptor descriptor, Int32& count)
       at PHP.Library.PerlRegExp.Replace(DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, PhpCallback callback, Object data, Int32 limit, Int32& count)
       at PHP.Library.PerlRegExp.Replace(DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, Object data)
       at PHP.Dynamic.PhpNetClassLibrary.preg_replace(Object , PhpStack )
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <__input.txt>.a.a(ScriptContext ) in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt:line 16
       at <__input.txt>.a.<Mediator>(ScriptContext )
       at <__input.txt>.a.a(Object instance, PhpStack stack)
       at <__input.txt>.<Script>.<Main>(ScriptContext <context>, Dictionary`2 <locals>, DObject , DTypeDesc , Boolean ) in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt:line 19
       at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)
       at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)
       --- End of inner exception stack trace ---
       at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)
       at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)
       at <Global>.Run(String[] )
    
    Bugs/preg-this-dynamic2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    foo: ahoj
    foo: lidi
    foo: rozkladame
    foo: ahoj
    foo: lidi
    foo: rozkladame
    foo: ahoj
    foo: lidi
    foo: rozkladame
    
    Notice: Undefined variable: this.
    
    Error: Call to a member function foo() on a non-object.
    Bugs/preg-this.php: SUCCEEDED
    Bugs/preg-ungreedy-bugs.php: SUCCEEDED
    Bugs/preg-unkn.php: SUCCEEDED
    Compiler/abstracts.php: SUCCEEDED
    Compiler/assignments.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ---1---1float(-1.5)
    float(2.5)
    float(0.83333333333333)
    int(6)
    int(8)
    ---2---2float(8.8333333333333)
    float(8.8333333333333)
    float(8.8333333333333)
    int(8)
    int(8)
    ---3---3---4---4---5---5array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [1]=>
      array(1) {
        [2]=>
        array(1) {
          [3]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    ---6---6array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "u"
    }
    array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "v"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    ---7---7array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    ---8---8
    ---1---1double(-1.5)
    double(2.5)
    double(0.833333333333333)
    integer(6)
    integer(8)
    ---2---2double(8.83333333333333)
    double(8.83333333333333)
    double(8.83333333333333)
    integer(8)
    integer(8)
    ---3---3---4---4---5---5array(1)
    {
      [0] => array(1)
      {
        [0] => array(1)
        {
          [0] => array(3)
          {
            [0] => integer(1)
            [1] => integer(2)
            [2] => integer(3)
          }
        }
      }
    }
    array(1)
    {
      [0] => array(1)
      {
        [0] => array(1)
        {
          [0] => array(3)
          {
            [0] => integer(1)
            [1] => integer(2)
            [2] => integer(3)
          }
        }
      }
    }
    array(1)
    {
      [1] => array(1)
      {
        [2] => array(1)
        {
          [3] => array(3)
          {
            [0] => integer(1)
            [1] => integer(2)
            [2] => integer(3)
          }
        }
      }
    }
    ---6---6array(4)
    {
      [0] => integer(1)
      [1] => integer(2)
      [2] => integer(3)
      [3] => string(1) "u"
    }
    array(4)
    {
      [0] => integer(1)
      [1] => integer(2)
      [2] => integer(3)
      [3] => string(1) "v"
    }
    array(5)
    {
      [0] => integer(1)
      [1] => integer(2)
      [2] => integer(3)
      [3] => string(1) "w"
      [4] => string(1) "z"
    }
    array(5)
    {
      [0] => integer(1)
      [1] => integer(2)
      [2] => integer(3)
      [3] => string(1) "w"
      [4] => string(1) "z"
    }
    ---7---7array(1)
    {
      [0] => array(1)
      {
        [0] => array(1)
        {
          [0] => array(1)
          {
            [0] => &integer(10)
          }
        }
      }
    }
    array(1)
    {
      [0] => array(1)
      {
        [0] => array(1)
        {
          [0] => array(1)
          {
            [0] => &integer(10)
          }
        }
      }
    }
    ---8---8
    Compiler/assign_in_call.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    g1:
    f(x)
    u(x)
    'x'
    
    g2:
    f(x)
    u(x)
    'b'
    
    g3:
    f(x)
    u(x)
    'b'
    
    g4:
    f(x)
    u(x)
    'b'
    
    g5:
    f()
    u()
    integer(1)
    
    g6:
    f(3)
    u(3)
    integer(3)
    
    g7:
    f(2)
    u(10)
    integer(10)
    
    g8:
    f(1)
    f(1)
    f(1)
    u(1)
    u()
    u(1)
    
    g9:
    known:
    __get(p) = 0
    __set(p,1)
    f(1)
    unknown:
    __get(p) = 1
    __set(p,3)
    u(3)
    
    g10:
    Done.
    g1:
    f(x)
    u(x)
    'x'
    
    g2:
    f(x)
    u(x)
    'b'
    
    g3:
    f(x)
    u(x)
    'b'
    
    g4:
    f(x)
    u(x)
    'b'
    
    g5:
    f()
    u()
    integer(1)
    
    g6:
    f(3)
    u(3)
    integer(3)
    
    g7:
    f(2)
    u(10)
    integer(10)
    
    g8:
    f(1)
    f(1)
    f(1)
    u(1)
    u()
    u(1)
    
    g9:
    known:
    __get(p) = 0
    __set(p,1)
    __get(p) = 1
    f(1)
    unknown:
    __get(p) = 1
    __set(p,3)
    __get(p) = 3
    u(3)
    
    g10:
    Done.
    Compiler/auto_globals_001.php: SUCCEEDED
    Compiler/auto_globals_002.php: SUCCEEDED
    Compiler/auto_globals_003.php: SUCCEEDED
    Compiler/break_in_global_code.php: SUCCEEDED
    Compiler/chaining_test.php: SUCCEEDED
    Compiler/chain_ending_by_string_index.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        string(1) "f"
      }
    }
    array(1) {
      [0]=>
      string(4) "xubu"
    }
    object(C)#1 (1) {
      ["f"]=>
      string(4) "kuxu"
    }
    string(5) "helxo"
    string(5) "helxo"
    array(1)
    {
      [0] => array(1)
      {
        [0] => string(1) "f"
      }
    }
    array(1)
    {
      [0] => string(4) "bubu"
    }
    
    Warning: A string item used as a reference in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt at expression on line 19, column 1.
    object(C)(1)
    {
      ["f"] => string(4) "kuku"
    }
    
    Warning: A string item used as a reference in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt at expression on line 25, column 1.
    string(5) "hello"
    
    Warning: A string item used as a reference in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt at expression on line 31, column 1.
    string(5) "hello"
    Compiler/continue_in_global_code.php: SUCCEEDED
    Compiler/deep_copy.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array(1) {
      [0]=>
      &array(1) {
        [0]=>
        &array(1) {
          [0]=>
          *RECURSION*
        }
      }
    }
    array(1) {
      [0]=>
      &array(1) {
        [0]=>
        &array(1) {
          [0]=>
          *RECURSION*
        }
      }
    }
    array(2) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) {
          [0]=>
          *RECURSION*
          [1]=>
          int(1)
        }
        [1]=>
        int(1)
      }
      [1]=>
      int(1)
    }
    array(1) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) {
          [0]=>
          *RECURSION*
          [1]=>
          int(1)
        }
        [1]=>
        int(1)
      }
    }
    array(1)
    {
      [0] => &array(1) [recursion]
    }
    array(1)
    {
      [0] => &array(1) [recursion]
    }
    array(2)
    {
      [0] => &array(2) [recursion]
      [1] => integer(1)
    }
    array(1)
    {
      [0] => &array(1) [recursion]
    }
    Compiler/deep_copy_refbox.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Strict Standards: Only variables should be passed by reference in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt on line 42
    array
    {
      0 => integer(1)
    }
    
    Strict Standards: Only variables should be passed by reference in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt on line 45
    array
    {
      0 => integer(1)
    }
    
    Strict Standards: Only variables should be passed by reference in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt on line 49
    array
    {
      0 => integer(1)
    }
    
    Strict Standards: Only variables should be passed by reference in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt on line 52
    array
    {
      0 => integer(1)
    }
    array
    {
      0 => integer(1)
      1 => integer(1)
    }
    array
    {
      0 => integer(1)
      1 => integer(1)
    }
    array
    {
      0 => integer(1)
      1 => integer(1)
    }
    array
    {
      0 => integer(1)
      1 => integer(1)
    }
    Compiler/expr_init.php: SUCCEEDED
    Compiler/foreach1.php: SUCCEEDED
    Compiler/foreach_arrays.php: SUCCEEDED
    Compiler/for_loop.php: SUCCEEDED
    Compiler/function_002.php: SUCCEEDED
    Compiler/function_003.php: SUCCEEDED
    Compiler/function_004.php: SUCCEEDED
    Compiler/function_call.php: SUCCEEDED
    Compiler/if_statement.php: SUCCEEDED
    Compiler/indirect_001.php: SUCCEEDED
    Compiler/indirect_002.php: SUCCEEDED
    Compiler/indirect_003.php: SUCCEEDED
    Compiler/indirect_004.php: SUCCEEDED
    Compiler/indirect_005.php: SUCCEEDED
    Compiler/indirect_007.php: SUCCEEDED
    Compiler/indirect_global.php: SUCCEEDED
    Compiler/inheritance.php: SUCCEEDED
    Compiler/inheritance2.php: SUCCEEDED
    Compiler/isset_unset_001.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Testing x in global code:  <br>
    1 <br>
     <br>
    Testing x (object) in optimized function:  <br>
    1 <br>
     <br>
    Testing x (PhpReference) in optimized function:  <br>
    1 <br>
     <br>
    
    Notice: Undefined variable: y in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt on line 29
    Testing $$x (created at runtime) in optimized function:  <br>
    1 <br>
    Testing x in global code:  <br>
    1 <br>
     <br>
    Testing x (object) in optimized function:  <br>
    1 <br>
     <br>
    Testing x (PhpReference) in optimized function:  <br>
    1 <br>
     <br>
    Testing $$x (created at runtime) in optimized function:  <br>
    1 <br>
    Compiler/null_hints.php: SUCCEEDED
    Compiler/switch.php: SUCCEEDED
    Compiler/ternary_ex.php: SUCCEEDED
    Compiler/typehint_check.php: SUCCEEDED
    Compiler/Inclusions/include2.php: SUCCEEDED
    Compiler/Inclusions/include3.php: SUCCEEDED
    Compiler/Inclusions/include6.php: SUCCEEDED
    Compiler/Inclusions/include_test.php: SUCCEEDED
    Compiler/Inclusions/script.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t01.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t02.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t03.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t04.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t05.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t08.php: SUCCEEDED
    Compiler/PseudoConst/parent.php: SUCCEEDED
    Compiler/PseudoConst/parent2.php: SUCCEEDED
    Compiler/PseudoConst/self.php: SUCCEEDED
    Compiler/PseudoConst/t01.php: SUCCEEDED
    Compiler/PseudoConst/t02.php: SUCCEEDED
    Compiler/PseudoConst/t03.php: SUCCEEDED
    Compiler/PseudoConst/t04.php: SUCCEEDED
    Compiler/PseudoConst/t05.php: SUCCEEDED
    Compiler/PseudoConst/t06.php: SUCCEEDED
    Compiler/PseudoConst/t07.php: SUCCEEDED
    Compiler/PseudoConst/t08.php: SUCCEEDED
    Compiler/PseudoConst/t09.php: SUCCEEDED
    Compiler/PseudoConst/t10.php: SUCCEEDED
    Compiler/PseudoConst/t11.php: SUCCEEDED
    Compiler/PseudoConst/_class_.php: SUCCEEDED
    Compiler/PseudoConst/_function_.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Notice: Undefined variable: a in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\PseudoConst\__input.txt on line 11
    g
    g
    Compiler/Unreachable/t13.php: SUCCEEDED
    DateTime/strftime.php: SUCCEEDED
    DateTime/strtotime1.php: SUCCEEDED
    DateTime/strtotime2.php: SUCCEEDED
    DateTime/strtotime3.php: SUCCEEDED
    DateTime/strtotime4.php: SUCCEEDED
    DateTime/strtotime5.php: SUCCEEDED
    DateTime/time.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    -189388800:-189475200 - 86400
    1964-01-01T00:00:00+0000
    1963-12-31T00:00:00+0000
    1964-06-06
    1963-06-06
    1964-01-06
    1133305200
    -189388800:-189475200 - 86400
    1964-01-01T00:00:00+0000
    1963-12-31T00:00:00+0000
    1964-06-06
    1963-06-06
    1964-01-06
    DateTime/timezones1.php: SUCCEEDED
    FileSystem/basename.php: SUCCEEDED
    FileSystem/basename2.php: SUCCEEDED
    FileSystem/chdir.php: SUCCEEDED
    FileSystem/csv.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    --- write ---
    72
    24
    44
    2
    6
    
    --- read ---
    "hello\n
    world";"aaa""bbb""ccc";"blah blah;";none;"tab\ttab";"space space"\n
    hh'ee;"ss\nsadasdasd s"\n
    """""""""""""""""""""";"""";;"""""";"xxx"""\n
    x\n
    "x\y"\n
    --- write ---
    72
    24
    44
    2
    6
    
    --- read ---
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    FileSystem/date.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <pre>[ARRAY
      [INT (0)] => [STRING: "A --> {PM}"]
      [INT (1)] => [STRING: "B --> {719}"]
      [INT (2)] => [STRING: "C --> {C}"]
      [INT (3)] => [STRING: "D --> {Sat}"]
      [INT (4)] => [STRING: "E --> {E}"]
      [INT (5)] => [STRING: "F --> {March}"]
      [INT (6)] => [STRING: "G --> {17}"]
      [INT (7)] => [STRING: "H --> {17}"]
      [INT (8)] => [STRING: "I --> {0}"]
      [INT (9)] => [STRING: "J --> {J}"]
      [INT (10)] => [STRING: "K --> {K}"]
      [INT (11)] => [STRING: "L --> {0}"]
      [INT (12)] => [STRING: "M --> {Mar}"]
      [INT (13)] => [STRING: "N --> {6}"]
      [INT (14)] => [STRING: "O --> {+0100}"]
      [INT (15)] => [STRING: "P --> {+01:00}"]
      [INT (16)] => [STRING: "Q --> {Q}"]
      [INT (17)] => [STRING: "R --> {R}"]
      [INT (18)] => [STRING: "S --> {th}"]
      [INT (19)] => [STRING: "U --> {984240978}"]
      [INT (20)] => [STRING: "V --> {V}"]
      [INT (21)] => [STRING: "W --> {10}"]
      [INT (22)] => [STRING: "X --> {X}"]
      [INT (23)] => [STRING: "Y --> {2001}"]
      [INT (24)] => [STRING: "Z --> {3600}"]
      [INT (25)] => [STRING: "a --> {pm}"]
      [INT (26)] => [STRING: "b --> {b}"]
      [INT (27)] => [STRING: "c --> {2001-03-10T17:16:18+01:00}"]
      [INT (28)] => [STRING: "d --> {10}"]
      [INT (29)] => [STRING: "e --> {Europe/Prague}"]
      [INT (30)] => [STRING: "f --> {f}"]
      [INT (31)] => [STRING: "g --> {5}"]
      [INT (32)] => [STRING: "h --> {05}"]
      [INT (33)] => [STRING: "i --> {16}"]
      [INT (34)] => [STRING: "j --> {10}"]
      [INT (35)] => [STRING: "k --> {k}"]
      [INT (36)] => [STRING: "l --> {Saturday}"]
      [INT (37)] => [STRING: "m --> {03}"]
      [INT (38)] => [STRING: "n --> {3}"]
      [INT (39)] => [STRING: "o --> {2001}"]
      [INT (40)] => [STRING: "p --> {p}"]
      [INT (41)] => [STRING: "q --> {q}"]
      [INT (42)] => [STRING: "r --> {Sat, 10 Mar 2001 17:16:18 +0100}"]
      [INT (43)] => [STRING: "s --> {18}"]
      [INT (44)] => [STRING: "t --> {31}"]
      [INT (45)] => [STRING: "u --> {000000}"]
      [INT (46)] => [STRING: "v --> {v}"]
      [INT (47)] => [STRING: "w --> {6}"]
      [INT (48)] => [STRING: "x --> {x}"]
      [INT (49)] => [STRING: "y --> {01}"]
      [INT (50)] => [STRING: "z --> {68}"]
    ]</pre>
    <pre>[ARRAY
      [INT (0)] => [STRING: "A --> {PM}"]
      [INT (1)] => [STRING: "B --> {719}"]
      [INT (2)] => [STRING: "C --> {C}"]
      [INT (3)] => [STRING: "D --> {Sat}"]
      [INT (4)] => [STRING: "E --> {E}"]
      [INT (5)] => [STRING: "F --> {March}"]
      [INT (6)] => [STRING: "G --> {17}"]
      [INT (7)] => [STRING: "H --> {17}"]
      [INT (8)] => [STRING: "I --> {0}"]
      [INT (9)] => [STRING: "J --> {J}"]
      [INT (10)] => [STRING: "K --> {K}"]
      [INT (11)] => [STRING: "L --> {0}"]
      [INT (12)] => [STRING: "M --> {Mar}"]
      [INT (13)] => [STRING: "N --> {6}"]
      [INT (14)] => [STRING: "O --> {+0100}"]
      [INT (15)] => [STRING: "P --> {+01:00}"]
      [INT (16)] => [STRING: "Q --> {Q}"]
      [INT (17)] => [STRING: "R --> {R}"]
      [INT (18)] => [STRING: "S --> {th}"]
      [INT (19)] => [STRING: "U --> {984240978}"]
      [INT (20)] => [STRING: "V --> {V}"]
      [INT (21)] => [STRING: "W --> {10}"]
      [INT (22)] => [STRING: "X --> {X}"]
      [INT (23)] => [STRING: "Y --> {2001}"]
      [INT (24)] => [STRING: "Z --> {3600}"]
      [INT (25)] => [STRING: "a --> {pm}"]
      [INT (26)] => [STRING: "b --> {b}"]
      [INT (27)] => [STRING: "c --> {2001-03-10T17:16:18+01:00}"]
      [INT (28)] => [STRING: "d --> {10}"]
      [INT (29)] => [STRING: "e --> {Europe/Prague}"]
      [INT (30)] => [STRING: "f --> {f}"]
      [INT (31)] => [STRING: "g --> {5}"]
      [INT (32)] => [STRING: "h --> {05}"]
      [INT (33)] => [STRING: "i --> {16}"]
      [INT (34)] => [STRING: "j --> {10}"]
      [INT (35)] => [STRING: "k --> {k}"]
      [INT (36)] => [STRING: "l --> {Saturday}"]
      [INT (37)] => [STRING: "m --> {03}"]
      [INT (38)] => [STRING: "n --> {3}"]
      [INT (39)] => [STRING: "o --> {2001}"]
      [INT (40)] => [STRING: "p --> {p}"]
      [INT (41)] => [STRING: "q --> {q}"]
      [INT (42)] => [STRING: "r --> {Sat, 10 Mar 2001 17:16:18 +0100}"]
      [INT (43)] => [STRING: "s --> {18}"]
      [INT (44)] => [STRING: "t --> {31}"]
      [INT (45)] => [STRING: "u --> {u}"]
      [INT (46)] => [STRING: "v --> {v}"]
      [INT (47)] => [STRING: "w --> {6}"]
      [INT (48)] => [STRING: "x --> {x}"]
      [INT (49)] => [STRING: "y --> {01}"]
      [INT (50)] => [STRING: "z --> {68}"]
    ]</pre>
    FileSystem/date2.php: SUCCEEDED
    FileSystem/date3.php: SUCCEEDED
    FileSystem/date_unix.php: SUCCEEDED
    FileSystem/dirname.php: SUCCEEDED
    FileSystem/dirname2.php: SUCCEEDED
    FileSystem/disk_free_space.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    119 GB
    Drive C: 216 GB
    Drive D: 119 GB
    Drive E: 197 GB
    Drive F: 
    Warning: disk_free_space(): The device is not ready.
     in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt on line 14
    false
    119 GB
    Drive C: 216 GB
    Drive D: 119 GB
    Drive E: 197 GB
    Drive F: false
    FileSystem/disk_total_space.php: SUCCEEDED
    FileSystem/fgets.php: SUCCEEDED
    FileSystem/file.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <pre>[ARRAY
      [INT (0)] => [STRING: "this is a file with one EOLN
    "]
    ]</pre>
    <pre>[ARRAY
      [INT (0)] => [STRING: ""]
      [INT (1)] => [STRING: "This is a file with two EOLNs. First line is empty."]
    ]</pre>
    <pre>[ARRAY
      [INT (0)] => [STRING: "
    "]
      [INT (1)] => [STRING: "This is a file with two EOLNs. First line is empty.
    "]
    ]</pre>
    <pre>[ARRAY
      [INT (0)] => [STRING: "This is a file with two EOLNs. First line is empty."]
    ]</pre>
    <pre>[ARRAY
      [INT (0)] => [STRING: "this is a file WITHOUT an "end-of-line""]
    ]</pre>
    Line #<b>130</b> : &lt;/html&gt;
    <br />
    [this is a file with one EOLN{\n}
    ]
    <pre>[ARRAY
      [INT (0)] => [STRING: "this is a file with one EOLN
    "]
    ]</pre>
    <pre>[ARRAY
      [INT (0)] => [STRING: ""]
      [INT (1)] => [STRING: "This is a file with two EOLNs. First line is empty."]
    ]</pre>
    <pre>[ARRAY
      [INT (0)] => [STRING: "
    "]
      [INT (1)] => [STRING: "This is a file with two EOLNs. First line is empty.
    "]
    ]</pre>
    <pre>[ARRAY
      [INT (0)] => [STRING: ""]
      [INT (1)] => [STRING: "This is a file with two EOLNs. First line is empty."]
    ]</pre>
    <pre>[ARRAY
      [INT (0)] => [STRING: "this is a file WITHOUT an "end-of-line""]
    ]</pre>
    Line #<b>130</b> : &lt;/html&gt;
    <br />
    [this is a file with one EOLN{\n}
    ]
    FileSystem/filesize.php: SUCCEEDED
    FileSystem/file_exists.php: SUCCEEDED
    FileSystem/file_get_contents.php: SUCCEEDED
    FileSystem/fpassthru.php: SUCCEEDED
    FileSystem/fread.php: SUCCEEDED
    FileSystem/fread1.php: SUCCEEDED
    FileSystem/fread2.php: SUCCEEDED
    FileSystem/fseek.php: SUCCEEDED
    FileSystem/fsockopen.php: SUCCEEDED
    FileSystem/ftell.php: SUCCEEDED
    FileSystem/is_dir.php: SUCCEEDED
    FileSystem/is_executable.php: SUCCEEDED
    FileSystem/pathinfo.php: SUCCEEDED
    FileSystem/popen.php: SUCCEEDED
    FileSystem/readdir.php: SUCCEEDED
    FileSystem/readfile.php: SUCCEEDED
    FileSystem/readline.php: SUCCEEDED
    FileSystem/realpath.php: SUCCEEDED
    FileSystem/scandir.php: SUCCEEDED
    FileSystem/stat.php: SUCCEEDED
    FileSystem/stream_context_set_option.php: SUCCEEDED
    FileSystem/stream_copy_to_stream.php: SUCCEEDED
    FileSystem/stream_copy_to_stream2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <p>Read <b>rb</b>, Write <b>wb</b>
    
    
    COPIED: <b>10120</b>
    <p>Read <b>rb</b>, Write <b>wt</b>
    
    
    COPIED: <b>10120</b>
    <p>Read <b>rb</b>, Write <b>wb</b>
    
    
    COPIED: <b>10102</b>
    <p>Read <b>rb</b>, Write <b>wt</b>
    
    
    COPIED: <b>10102</b>
    FileSystem/testinc.php: SUCCEEDED
    FileSystem/touch.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Warning: touch(): Utime failed: No such file or directory in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt on line 8
    Sorry Could Not change modification time of touch.txt
    Warning: touch(): Utime failed: No such file or directory in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt on line 14
    
    Warning: touch(): Utime failed: No such file or directory in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt on line 16
    
    Warning: touch(): Utime failed: No such file or directory in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt on line 17
    <pre>[ARRAY
      [INT (0)] => [STRING: "January 24, 2010; [12:09:12] (12h) ctime test.txt (1264331352)"]
      [INT (1)] => [STRING: "January 24, 2010; [12:09:12] (12h) mtime test.txt (1264331352)"]
      [INT (2)] => [STRING: "January 24, 2010; [12:09:12] (12h) ctime touch.txt (1264331352)"]
      [INT (3)] => [STRING: "January 24, 2010; [12:09:12] (12h) mtime touch.txt (1264331352)"]
      [INT (4)] => [STRING: "January 24, 2010; [12:09:12] (12h) atime touch.txt (1264331352)"]
      [INT (5)] => [STRING: "January 24, 2010; [12:09:12] (12h) mtime summer.txt (1264331352)"]
      [INT (6)] => [STRING: "January 24, 2010; [12:09:12] (12h) mtime winter.txt (1264331352)"]
    ]</pre>
    Warning: touch(): Unable to access (D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\touch.txt): Permission denied in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 8, column 5.
    Sorry Could Not change modification time of touch.txt
    Warning: touch(): Unable to access (D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\touch.txt): Permission denied in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 14, column 1.
    
    Warning: touch(): Unable to access (D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\winter.txt): Permission denied in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 16, column 1.
    
    Warning: touch(): Unable to access (D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\summer.txt): Permission denied in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 17, column 1.
    <pre>[ARRAY
      [INT (0)] => [STRING: "January 24, 2010; [13:09:12] (13h) ctime test.txt (1264334952)"]
      [INT (1)] => [STRING: "January 24, 2010; [13:09:12] (13h) mtime test.txt (1264334952)"]
      [INT (2)] => [STRING: "January 24, 2010; [13:09:12] (13h) ctime touch.txt (1264334952)"]
      [INT (3)] => [STRING: "January 24, 2010; [13:09:12] (13h) mtime touch.txt (1264334952)"]
      [INT (4)] => [STRING: "January 24, 2010; [13:09:12] (13h) atime touch.txt (1264334952)"]
      [INT (5)] => [STRING: "January 24, 2010; [13:09:12] (13h) mtime summer.txt (1264334952)"]
      [INT (6)] => [STRING: "January 24, 2010; [13:09:12] (13h) mtime winter.txt (1264334952)"]
    ]</pre>
    Math/abs.php: SUCCEEDED
    Math/atan2.php: SUCCEEDED
    Math/base_convert.php: SUCCEEDED
    Math/bindec.php: SUCCEEDED
    Math/ceil.php: SUCCEEDED
    Math/cos.php: SUCCEEDED
    Math/decbin.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <pre>
    [double: 2294967295]
    10001000110010100110101111111111
    [double: 4294967296]
    0
    [double: 8589934590]
    11111111111111111111111111111110
    [double: 8589934590]
    11111111111111111111111111111110
    [double: 8589934591]
    11111111111111111111111111111111
    [Int: 1000.000.000.000]
    11010100101001010001000000000000
    <hr>(-1, -5435, 2.14, 0, 26)
    11111111111111111111111111111111
    11111111111111111110101011000101
    10
    0
    11010 
    </pre>
    <pre>
    [???: 2294967295]
    10001000110010100110101111111111
    [???: 4294967296]
    0
    [???: 8589934590]
    11111111111111111111111111111110
    [???: 8589934590]
    11111111111111111111111111111110
    [???: 8589934591]
    11111111111111111111111111111111
    [Int: 1000.000.000.000]
    11010100101001010001000000000000
    <hr>(-1, -5435, 2.14, 0, 26)
    11111111111111111111111111111111
    11111111111111111110101011000101
    10
    0
    11010 
    </pre>
    Math/dechex.php: SUCCEEDED
    Math/decoct.php: SUCCEEDED
    Math/deg2rad.php: SUCCEEDED
    Math/exp.php: SUCCEEDED
    Math/floor.php: SUCCEEDED
    Math/fmod.php: SUCCEEDED
    Math/hexdec.php: SUCCEEDED
    Math/max.php: SUCCEEDED
    Math/min.php: SUCCEEDED
    Math/modulo_warn.php: SUCCEEDED
    Math/octdec.php: SUCCEEDED
    Math/pow.php: SUCCEEDED
    Math/rad2deg.php: SUCCEEDED
    Math/round.php: SUCCEEDED
    Math/sin.php: SUCCEEDED
    Math/sqrt.php: SUCCEEDED
    Math/tan.php: SUCCEEDED
    Math/uniqid.php: SUCCEEDED
    Misc/calendar_extension.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0
    0
    2375840
    0
    14
    32
    2
    There are 31 days in August 2003
    There are 28 days in February 2003
    There are 29 days in February 2004
    There are 31 days in December 2034
    1748326
    1748324
    374867
    0
    322f32322f35373633
    ebe120e7f9e5ef20e4faf9f1e2
    ebe120e7f9e5ef20e427faf9f1e2
    ebe120e7f9e5ef20e420e0ecf4e9ed20faf9f1e2
    ebe120e7f9e5ef20e42720e0ecf4e9ed20faf9f1e2
    eb22e120e7f9e5ef20e4faf9f122e2
    e12720e7f9e5ef20e4faf9f122e2
    e12720e7f9e5ef20e427faf9f122e2
    e12720e7f9e5ef20e420e0ecf4e9ed20faf9f122e2
    e12720e7f9e5ef20e42720e0ecf4e9ed20faf9f122e2
    Error: Call to undefined function: 'frenchtojd' in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\__input.txt at expression on line 2, column 1.
    Misc/ini_parse.php: SUCCEEDED
    Misc/lexer.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    T_INLINE_HTML
    311 '\r\n'
    T_OPEN_TAG
    368 '&lt;?'
    T_WHITESPACE
    371 ' \r\n\r\n'
    T_FINAL
    345 'final'
    T_WHITESPACE
    371 ' '
    T_CLASS
    353 'class'
    T_WHITESPACE
    371 ' '
    T_STRING
    307 'A'
    T_WHITESPACE
    371 ' \r\n'
        '{'
    T_WHITESPACE
    371 ' \r\n  '
    T_FUNCTION
    334 'function'
    T_WHITESPACE
    371 ' '
    T_STRING
    307 '__get'
        '('
    T_VARIABLE
    309 '$x'
        ')'
    T_WHITESPACE
    371 ' \r\n  '
        '{'
    T_WHITESPACE
    371 ' \r\n    '
    T_VARIABLE
    309 '$x'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_START_HEREDOC
    372 '&lt;&lt;&lt;EOOOOOOOOOOOOOOT\r\n'
    T_ENCAPSED_AND_WHITESPACE
    314 '         &lt;&lt;&lt;hello\r\nEOOOOOOOOOOOOOOt;\r\nEOOOOOOOOOOOOOT;\r\n'
    T_END_HEREDOC
    373 'EOOOOOOOOOOOOOOT'
        ';'
    T_WHITESPACE
    371 '\r\n\r\n    '
        '$'
    T_VARIABLE
    309 '$y'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_ARRAY
    360 'array'
    T_WHITESPACE
    371 ' '
        '('
    T_LNUMBER
    305 '1'
        ','
    T_DNUMBER
    306 '100000000000000'
        ','
    T_DNUMBER
    306 '999999999999999999999999999999999'
        ','
    T_STRING
    307 'true'
        ','
    T_STRING
    307 'false'
        ')'
        ';'
    T_WHITESPACE
    371 '\r\n    '
        '$'
        '{'
        '&quot;'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
    T_DOLLAR_OPEN_CURLY_BRACES
    374 '${'
        '$'
        '{'
    T_CONSTANT_ENCAPSED_STRING
    315 '&quot;xxx&quot;'
        '}'
        '}'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
        '&quot;'
        '}'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_LNUMBER
    305 '1'
        ';'
    T_WHITESPACE
    371 '\r\n    '
        '$'
        '{'
        '&quot;'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
    T_DOLLAR_OPEN_CURLY_BRACES
    374 '${'
        '$'
        '{'
        '&quot;'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
    T_VARIABLE
    309 '$x'
    T_ENCAPSED_AND_WHITESPACE
    314 '-&gt;$$'
    T_VARIABLE
    309 '$x0xx'
        '&quot;'
        '}'
        '}'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
        '&quot;'
        '}'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_LNUMBER
    305 '1'
        ';'
    T_WHITESPACE
    371 '\r\n  '
        '}'
    T_WHITESPACE
    371 ' \r\n'
        '}'
    T_WHITESPACE
    371 '\r\n\r\n'
    T_CLOSE_TAG
    370 '?&gt;'
    '
    '
        '&lt;?'
        ' 
    
    '
        'final'
        ' '
        'class'
        ' '
        'A'
        ' 
    '
        '{'
        ' 
      '
        'function'
        ' '
    258
    258 '
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\__input.txt at expression on line 10, column 7.
    '
        '('
        '$x'
        ')'
        ' 
      '
        '{'
        ' 
        '
        '$x'
        ' '
        '='
        ' '
        '&lt;&lt;&lt;EOOOOOOOOOOOOOOT
    '
        '         &lt;&lt;&lt;'
        'hello'
        '
    '
        'EOOOOOOOOOOOOOOt;
    '
        'EOOOOOOOOOOOOOT;
    '
        'EOOOOOOOOOOOOOOT'
        ';'
        '
    
        '
        '$'
        '$y'
        ' '
        '='
        ' '
        'array'
        ' '
        '('
        '1'
        ','
        '100000000000000'
        ','
        '999999999999999999999999999999999'
        ','
        'true'
        ','
    256
    256 '
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\__input.txt at expression on line 10, column 7.
    '
        ')'
        ';'
        '
        '
        '$'
        '{'
        '&quot;'
        'x'
        '${'
        '$'
        '{'
    -29
    -29 '
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\__input.txt at expression on line 10, column 7.
    '
        '}'
        '}'
        'x'
        '&quot;'
        '}'
        ' '
        '='
        ' '
        '1'
        ';'
        '
        '
        '$'
        '{'
        '&quot;'
        'x'
        '${'
        '$'
        '{'
        '&quot;'
        'x'
        '$x'
        '-&gt;'
        '$'
        '$'
        '$x0xx'
        '&quot;'
        '}'
        '}'
        'x'
        '&quot;'
        '}'
        ' '
        '='
        ' '
        '1'
        ';'
        '
      '
        '}'
        ' 
    '
        '}'
        '
    
    '
        '?&gt;'
    Misc/locale.php: SUCCEEDED
    Misc/output2.php: SUCCEEDED
    Misc/stack_trace.php: FAILED
    Script hung upNo errorsSuccess
    Expected test outputReal script output
    Unhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---> System.IndexOutOfRangeException: Index was outside the bounds of the array.
       at PHP.Core.PhpStackFrame..ctor(ScriptContext context, StackFrame frame, FrameKinds kind)
       at PHP.Core.PhpStackTrace..ctor(ScriptContext context, StackTrace clrTrace)
       at PHP.Core.PhpStackTrace..ctor(ScriptContext context, Int32 skipFrames)
       at PHP.Library.Errors.Backtrace()
       at <stack_trace.inc>.<Script>.j(ScriptContext <context>) in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\stack_trace.inc:line 11
       at <stack_trace.inc>.<Script>.j(Object instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <stack_trace.inc>.<Script>.i(ScriptContext <context>) in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\stack_trace.inc:line 6
       at <stack_trace.inc>.<Script>.i(Object instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <^0>.<Global>.<?0>.h(ScriptContext <context>) in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\__input.txt:line 4
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack, DTypeDesc caller)
       at PHP.Core.PhpCallback.InvokeInternal(Object[] args)
       at PHP.Core.PhpCallback.Invoke(Object[] args)
       at PHP.Library.PhpArrays.Map(PhpCallback map, PhpArray[] arrays)
       at <^1>.<Global>.<?1>.Lambda_1(ScriptContext <context>) in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\__input.txt:line 1
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <__input.txt>.<Script>.f(ScriptContext <context>) in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\__input.txt:line 6
       at <__input.txt>.<Script>.f(Object instance, PhpStack stack)
       at <__input.txt>.<Script>.<Main>(ScriptContext <context>, Dictionary`2 <locals>, DObject , DTypeDesc , Boolean ) in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\__input.txt:line 18
       at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)
       at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)
       --- End of inner exception stack trace ---
       at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)
       at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)
       at <Global>.Run(String[] )
    
    Misc/tokens.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    T_REQUIRE_ONCE = 258,
    T_REQUIRE = 259,
    T_EVAL = 260,
    T_INCLUDE_ONCE = 261,
    T_INCLUDE = 262,
    T_LOGICAL_OR = 263,
    T_LOGICAL_XOR = 264,
    T_LOGICAL_AND = 265,
    T_PRINT = 266,
    T_SR_EQUAL = 267,
    T_SL_EQUAL = 268,
    T_XOR_EQUAL = 269,
    T_OR_EQUAL = 270,
    T_AND_EQUAL = 271,
    T_MOD_EQUAL = 272,
    T_CONCAT_EQUAL = 273,
    T_DIV_EQUAL = 274,
    T_MUL_EQUAL = 275,
    T_MINUS_EQUAL = 276,
    T_PLUS_EQUAL = 277,
    T_BOOLEAN_OR = 278,
    T_BOOLEAN_AND = 279,
    T_IS_NOT_IDENTICAL = 280,
    T_IS_IDENTICAL = 281,
    T_IS_NOT_EQUAL = 282,
    T_IS_EQUAL = 283,
    T_IS_GREATER_OR_EQUAL = 284,
    T_IS_SMALLER_OR_EQUAL = 285,
    T_SR = 286,
    T_SL = 287,
    T_INSTANCEOF = 288,
    T_UNSET_CAST = 289,
    T_BOOL_CAST = 290,
    T_OBJECT_CAST = 291,
    T_ARRAY_CAST = 292,
    T_STRING_CAST = 293,
    T_DOUBLE_CAST = 294,
    T_INT_CAST = 295,
    T_DEC = 296,
    T_INC = 297,
    T_CLONE = 298,
    T_NEW = 299,
    T_EXIT = 300,
    T_IF = 301,
    T_ELSEIF = 302,
    T_ELSE = 303,
    T_ENDIF = 304,
    T_LNUMBER = 305,
    T_DNUMBER = 306,
    T_STRING = 307,
    T_STRING_VARNAME = 308,
    T_VARIABLE = 309,
    T_NUM_STRING = 310,
    T_INLINE_HTML = 311,
    T_CHARACTER = 312,
    T_BAD_CHARACTER = 313,
    T_ENCAPSED_AND_WHITESPACE = 314,
    T_CONSTANT_ENCAPSED_STRING = 315,
    T_ECHO = 316,
    T_DO = 317,
    T_WHILE = 318,
    T_ENDWHILE = 319,
    T_FOR = 320,
    T_ENDFOR = 321,
    T_FOREACH = 322,
    T_ENDFOREACH = 323,
    T_DECLARE = 324,
    T_ENDDECLARE = 325,
    T_AS = 326,
    T_SWITCH = 327,
    T_ENDSWITCH = 328,
    T_CASE = 329,
    T_DEFAULT = 330,
    T_BREAK = 331,
    T_CONTINUE = 332,
    T_GOTO = 333,
    T_FUNCTION = 334,
    T_CONST = 335,
    T_RETURN = 336,
    T_TRY = 337,
    T_CATCH = 338,
    T_THROW = 339,
    T_USE = 340,
    T_GLOBAL = 341,
    T_PUBLIC = 342,
    T_PROTECTED = 343,
    T_PRIVATE = 344,
    T_FINAL = 345,
    T_ABSTRACT = 346,
    T_STATIC = 347,
    T_VAR = 348,
    T_UNSET = 349,
    T_ISSET = 350,
    T_EMPTY = 351,
    T_HALT_COMPILER = 352,
    T_CLASS = 353,
    T_INTERFACE = 354,
    T_EXTENDS = 355,
    T_IMPLEMENTS = 356,
    T_OBJECT_OPERATOR = 357,
    T_DOUBLE_ARROW = 358,
    T_LIST = 359,
    T_ARRAY = 360,
    T_CLASS_C = 361,
    T_METHOD_C = 362,
    T_FUNC_C = 363,
    T_LINE = 364,
    T_FILE = 365,
    T_COMMENT = 366,
    T_DOC_COMMENT = 367,
    T_OPEN_TAG = 368,
    T_OPEN_TAG_WITH_ECHO = 369,
    T_CLOSE_TAG = 370,
    T_WHITESPACE = 371,
    T_START_HEREDOC = 372,
    T_END_HEREDOC = 373,
    T_DOLLAR_OPEN_CURLY_BRACES = 374,
    T_CURLY_OPEN = 375,
    T_PAAMAYIM_NEKUDOTAYIM = 376,
    T_DOUBLE_COLON = 376,
    T_NAMESPACE = 377,
    T_NS_C = 378,
    T_DIR = 379,
    T_NS_SEPARATOR = 380,
    T_INCLUDE = 129,
    T_INCLUDE_ONCE = 130,
    T_EVAL = 131,
    T_REQUIRE = 132,
    T_REQUIRE_ONCE = 133,
    T_LOGICAL_OR = 136,
    T_LOGICAL_XOR = 137,
    T_LOGICAL_AND = 138,
    T_PRINT = 139,
    T_PLUS_EQUAL = 140,
    T_MINUS_EQUAL = 141,
    T_MUL_EQUAL = 142,
    T_DIV_EQUAL = 143,
    T_CONCAT_EQUAL = 144,
    T_MOD_EQUAL = 145,
    T_AND_EQUAL = 146,
    T_OR_EQUAL = 147,
    T_XOR_EQUAL = 148,
    T_SL_EQUAL = 149,
    T_SR_EQUAL = 150,
    T_BOOLEAN_OR = 151,
    T_BOOLEAN_AND = 152,
    T_IS_EQUAL = 153,
    T_IS_NOT_EQUAL = 154,
    T_IS_IDENTICAL = 155,
    T_IS_NOT_IDENTICAL = 156,
    T_IS_SMALLER_OR_EQUAL = 157,
    T_IS_GREATER_OR_EQUAL = 158,
    T_SL = 159,
    T_SR = 160,
    T_INC = 161,
    T_DEC = 162,
    T_NEW = 164,
    T_INSTANCEOF = 165,
    T_CLONE = 167,
    T_LNUMBER = 168,
    T_DNUMBER = 170,
    T_STRING = 171,
    T_STRING_VARNAME = 172,
    T_VARIABLE = 173,
    T_NUM_STRING = 174,
    T_INLINE_HTML = 175,
    T_CHARACTER = 176,
    T_BAD_CHARACTER = 177,
    T_ENCAPSED_AND_WHITESPACE = 178,
    T_CONSTANT_ENCAPSED_STRING = 179,
    T_EXIT = 180,
    T_IF = 181,
    T_ELSEIF = 182,
    T_ELSE = 183,
    T_ENDIF = 184,
    T_ECHO = 185,
    T_DO = 186,
    T_WHILE = 187,
    T_ENDWHILE = 188,
    T_FOR = 189,
    T_ENDFOR = 190,
    T_FOREACH = 191,
    T_ENDFOREACH = 192,
    T_AS = 193,
    T_SWITCH = 194,
    T_ENDSWITCH = 195,
    T_CASE = 196,
    T_DEFAULT = 197,
    T_BREAK = 198,
    T_CONTINUE = 199,
    T_FUNCTION = 200,
    T_CONST = 201,
    T_RETURN = 202,
    T_GLOBAL = 203,
    T_STATIC = 204,
    T_VAR = 205,
    T_UNSET = 206,
    T_ISSET = 207,
    T_EMPTY = 208,
    T_CLASS = 209,
    T_EXTENDS = 210,
    T_OBJECT_OPERATOR = 211,
    T_DOUBLE_ARROW = 212,
    T_LIST = 213,
    T_ARRAY = 214,
    T_CLASS_C = 215,
    T_METHOD_C = 216,
    T_FUNC_C = 217,
    T_LINE = 218,
    T_FILE = 219,
    T_COMMENT = 220,
    T_DOC_COMMENT = 221,
    T_OPEN_TAG = 226,
    T_OPEN_TAG_WITH_ECHO = 227,
    T_CLOSE_TAG = 228,
    T_WHITESPACE = 229,
    T_START_HEREDOC = 230,
    T_END_HEREDOC = 231,
    T_DOLLAR_OPEN_CURLY_BRACES = 232,
    T_CURLY_OPEN = 233,
    T_DOUBLE_COLON = 234,
    T_PAAMAYIM_NEKUDOTAYIM = 234,
    T_TRY = 236,
    T_CATCH = 237,
    T_THROW = 238,
    T_INTERFACE = 239,
    T_IMPLEMENTS = 240,
    T_ABSTRACT = 241,
    T_FINAL = 242,
    T_PRIVATE = 243,
    T_PROTECTED = 244,
    T_PUBLIC = 245,
    T_BOOL_CAST = 285,
    T_INT_CAST = 288,
    T_DOUBLE_CAST = 294,
    T_STRING_CAST = 297,
    T_ARRAY_CAST = 299,
    T_OBJECT_CAST = 300,
    T_UNSET_CAST = 301,
    T_HALT_COMPILER = 351,
    Misc/user_error_handlers.php: SUCCEEDED
    Objects/conditional1.php: SUCCEEDED
    Objects/conditional2.php: SUCCEEDED
    Objects/conditional_base_class.php: SUCCEEDED
    Objects/constant_test.php: SUCCEEDED
    Objects/evaled_parent.php: SUCCEEDED
    Objects/getter_setter_bug28444.php: SUCCEEDED
    Objects/instanceof.php: SUCCEEDED
    Objects/new_via_unknown_ctor.php: SUCCEEDED
    Objects/object_creation_test.php: SUCCEEDED
    Objects/static_field_test.php: SUCCEEDED
    Objects/static_method_test.php: SUCCEEDED
    Objects/sys_class_const.php: SUCCEEDED
    Objects/this2.php: SUCCEEDED
    RegEx/ereg.php: SUCCEEDED
    RegEx/preg_match_unmatched_groups.php: SUCCEEDED
    RegEx/preg_replace_eval.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ab"01300 as"00da sd"0asdsa das asd 11asd a1sd a
    ab"01300 as"00da sd"0(aasdasdkjask,$a,\,\l,a,s,d,a,s,d,k,j,a,s,${120})(ldjaklsdjalk,$l,\,\l,d,j,a,k,l,s,d,j,a,l,${120})djdsa das asd 11asd a1sd a
    ab"01300 as"00da sd"0asdsa das asd 11asd a1sd a
    ab"01300 as"00da sd"0(aasdasdkjask,$a,\,\l,a,s,d,a,s,d,k,j,,,${120})(ldjaklsdjalk,$l,\,\l,d,j,a,k,l,s,d,j,,,${120})djdsa das asd 11asd a1sd a
    RegEx/regexp-sql.php: SUCCEEDED
    RegEx/Perl/cache.php: SUCCEEDED
    RegEx/Perl/grep1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      [3] => string(3) "1.5"
      [6] => string(5) "58.54"
    }
    Notice: preg_grep(): Array to string conversion in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\RegEx\Perl\__input.txt at expression on line 5, column 1.
    array(2)
    {
      [3] => string(3) "1.5"
      [6] => string(5) "58.54"
    }
    RegEx/Perl/grep2.php: SUCCEEDED
    RegEx/Perl/match1.php: SUCCEEDED
    RegEx/Perl/match10.php: SUCCEEDED
    RegEx/Perl/match2.php: SUCCEEDED
    RegEx/Perl/match3.php: SUCCEEDED
    RegEx/Perl/match4.php: SUCCEEDED
    RegEx/Perl/match5.php: SUCCEEDED
    RegEx/Perl/match6.php: SUCCEEDED
    RegEx/Perl/match7.php: SUCCEEDED
    RegEx/Perl/match8.php: SUCCEEDED
    RegEx/Perl/match9.php: SUCCEEDED
    RegEx/Perl/match_all1.php: SUCCEEDED
    RegEx/Perl/match_all2.php: SUCCEEDED
    RegEx/Perl/match_all3.php: SUCCEEDED
    RegEx/Perl/match_all4.php: SUCCEEDED
    RegEx/Perl/match_dollar.php: SUCCEEDED
    RegEx/Perl/overflow.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string("kfkaj +j k45´┐Ż´┐Ż´┐Ż´┐Ż´┐Ż3#$%^&kjakfjkaj|kfj")
    string("kfkaj +j k45�����3#$%^&kjakfjkaj|kfj")
    RegEx/Perl/quote1.php: SUCCEEDED
    RegEx/Perl/quote2.php: SUCCEEDED
    RegEx/Perl/quote3.php: SUCCEEDED
    RegEx/Perl/replace1.php: SUCCEEDED
    RegEx/Perl/replace2.php: SUCCEEDED
    RegEx/Perl/replace3.php: SUCCEEDED
    RegEx/Perl/replace4.php: SUCCEEDED
    RegEx/Perl/replace5.php: SUCCEEDED
    RegEx/Perl/replace6.php: SUCCEEDED
    RegEx/Perl/replace7.php: SUCCEEDED
    RegEx/Perl/replace8.php: SUCCEEDED
    RegEx/Perl/replace9.php: SUCCEEDED
    RegEx/Perl/replace_callback1.php: SUCCEEDED
    RegEx/Perl/replace_callback2.php: SUCCEEDED
    RegEx/Perl/split1.php: SUCCEEDED
    RegEx/Perl/split2.php: SUCCEEDED
    RegEx/Perl/split3.php: SUCCEEDED
    RegEx/Perl/split4.php: SUCCEEDED
    RegEx/Perl/split5.php: SUCCEEDED
    RegEx/Perl/ungreedy.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    aaa
    a
    aaa
    
    a
    aa
    aaa
    aa
    aaa
    aaa
    a
    aaa
    a
    a
    aa
    aaa
    aa
    aaa
    RegEx/Perl/unsuccessful-preg_match_all.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0
    4
    1
    4
    0
    4
    1
    7
    SPL/ArrayAccess_offsetExists.php: SUCCEEDED
    SPL/exceptions.php: SUCCEEDED
    Strings/addcslashes.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    \f\o\o\[ \]
    Issues a Warning:
    // echo addcslashes("zoo['.']", 'z..A');
    // output:  \zoo['\.']
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt at expression on line 4, column 1.
    
    Issues a Warning:
    // echo addcslashes("zoo['.']", 'z..A');
    // output:  \zoo['\.']
    Strings/addslashes.php: SUCCEEDED
    Strings/chunk_split.php: SUCCEEDED
    Strings/concat.php: SUCCEEDED
    Strings/count_chars.php: SUCCEEDED
    Strings/crc32.php: SUCCEEDED
    Strings/crypt.php: SUCCEEDED
    Strings/crypt2.php: SUCCEEDED
    Strings/echo.php: SUCCEEDED
    Strings/explode.php: SUCCEEDED
    Strings/get_html_translation_table.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <hr>[&] => &amp;
    [>] => &gt;
    [<] => &lt;
    ["] => &quot;
    <hr>Hallo &amp; &lt;Frau&gt; &amp; Kr&iuml;&iquest;&frac12;mer
    <hr>[&] => &amp;
    [>] => &gt;
    [<] => &lt;
    ["] => &quot;
    <hr>Hallo &amp; &lt;Frau&gt; &amp; Kr�mer
    Strings/nl2br.php: SUCCEEDED
    Strings/pack.php: SUCCEEDED
    Strings/pos.php: SUCCEEDED
    Strings/runtime-quotes.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    fread = (x''y"z)
    fgets = (x''y"z)
    file[0] = (x''y"z)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    
    Warning: fopen(runtime-quotes2.txt): failed to open stream: Permission denied in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt on line 33
    
    Warning: fwrite() expects parameter 1 to be resource, boolean given in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt on line 35
    fwrite = ()
    
    Warning: fputs() expects parameter 1 to be resource, boolean given in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt on line 38
    fputs = ()
    
    Warning: fclose() expects parameter 1 to be resource, boolean given in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt on line 41
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (x'y"z)
    fgets = (x'y"z)
    file[0] = (x'y"z)
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (a\'b"\\ca\)
    fgets = (a\'b"\\ca\'b"\\c)
    file[0] = (a\'b"\\ca\'b"\\c)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    e'e
    e''e
    e'e
    e'e
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    e'e
    e'e
    e'e
    e'e
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    fread = (x''y"z)
    fgets = (x''y"z)
    file[0] = (x''y"z)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    
    Warning: fopen(): Unable to access (D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\runtime-quotes2.txt): Permission denied in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt at expression on line 33, column 3.
    
    Warning: Cannot convert bool to resource implicitly in a call to function fwrite() in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt at expression on line 35, column 3.
    fwrite = ()
    
    Warning: Cannot convert bool to resource implicitly in a call to function fputs() in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt at expression on line 38, column 3.
    fputs = ()
    
    Warning: Cannot convert bool to resource implicitly in a call to function fclose() in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt at expression on line 41, column 3.
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (x'y"z)
    fgets = (x'y"z)
    file[0] = (x'y"z)
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (a\'b"\\ca\)
    fgets = (a\'b"\\ca\'b"\\c)
    file[0] = (a\'b"\\ca\'b"\\c)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    e'e
    e''e
    e'e
    e'e
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    e'e
    e'e
    e'e
    e'e
    Strings/sprintf.php: SUCCEEDED
    Strings/sprintf2.php: SUCCEEDED
    Strings/strtr.php: SUCCEEDED
    Strings/str_ireplace.php: SUCCEEDED
    Strings/str_word_count.php: SUCCEEDED
    Strings/substr_operations.php: SUCCEEDED
    Strings/wordwrap.php: SUCCEEDED
    Variables/advanced_serialize.php: SUCCEEDED
    Variables/arguments.php: SUCCEEDED
    Variables/bitwise.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "00"
    string(2) "31"
    string(2) "31"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    0
    0
    0
    5
    0
    5
    40
    5
    45
    string(48) "000000000000000000000000000000000000000000000000"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(14) "31323331323331"
    string(2) "30"
    string(14) "31323331323331"
    string(16) "3635343635343536"
    string(2) "30"
    string(16) "3635343635343536"
    string(14) "337a5e8be43d7a"
    string(14) "00002130120201"
    string(48) "337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42"
    string(16) "347d598ce33a7e77"
    string(16) "0200243214040100"
    string(48) "367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42"
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "00"
    string(2) "31"
    string(2) "31"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    0
    -9223372036854775808
    -9223372036854775808
    -9223372036854775803
    0
    -9223372036854775803
    40
    5
    45
    string(48) "000000000000000000000000000000000000000000000000"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(14) "31323331323331"
    string(2) "30"
    string(14) "31323331323331"
    string(16) "3635343635343536"
    string(2) "30"
    string(16) "3635343635343536"
    string(14) "337a5e8be43d7a"
    string(14) "00002130120201"
    string(48) "337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42"
    string(16) "347d598ce33a7e77"
    string(16) "0200243214040100"
    string(48) "367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42"
    Variables/comparisons.php: SUCCEEDED
    Variables/constant.php: SUCCEEDED
    Variables/extract.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    EXTR_PREFIX_ALL
    integer(4)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
      'prefix_non_existent' => integer(1)
    }
    <hr>EXTR_PREFIX_INVALID
    integer(5)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => integer(2)
      'non_existent' => integer(1)
      'prefix_' => integer(1)
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => 'hello'
    }
    <hr>EXTR_PREFIX_SAME
    integer(3)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'non_existent' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>EXTR_PREFIX_IF_EXISTS
    integer(3)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>
    EXTR_PREFIX_ALL
    integer(4)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
      'prefix_non_existent' => integer(1)
    }
    <hr>EXTR_PREFIX_INVALID
    integer(2)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_ad' => integer(2)
      'prefix_non_existent' => integer(1)
    }
    <hr>EXTR_PREFIX_SAME
    integer(4)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'non_existent' => integer(1)
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>EXTR_PREFIX_IF_EXISTS
    integer(3)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>
    Variables/func_get_args.php: SUCCEEDED
    Variables/is_number.php: SUCCEEDED
    Variables/serialize.php: SUCCEEDED
    Variables/unserialize_objects.php: SUCCEEDED
    Variables/var_dumping.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Array
    (
        [0] => 1
        [1] => 
        [2] => 1
        [3] => 1.2
        [4] => 
        [5] => asdas
        [6] => Array
            (
                [0] => 1
            )
    
        [7] => stdClass Object
            (
            )
    
        [8] => Resource id #1
    )
    array(9) {
      [0]=>
      bool(true)
      [1]=>
      bool(false)
      [2]=>
      int(1)
      [3]=>
      float(1.2)
      [4]=>
      NULL
      [5]=>
      string(5) "asdas"
      [6]=>
      array(1) {
        [0]=>
        int(1)
      }
      [7]=>
      object(stdClass)#1 (0) {
      }
      [8]=>
      resource(1) of type (stream)
    }
    array (
      0 => true,
      1 => false,
      2 => 1,
      3 => 1.2,
      4 => NULL,
      5 => 'asdas',
      6 => 
      array (
        0 => 1,
      ),
      7 => 
      stdClass::__set_state(array(
      )),
      8 => NULL,
    )
    array
    (
      [0] => 1
      [1] => 
      [2] => 1
      [3] => 1.2
      [4] => 
      [5] => asdas
      [6] => array
      (
        [0] => 1
      )
      [7] => stdClass object
      (
      )
      [8] => resource id #4
    )
    array(9)
    {
      [0] => bool(true)
      [1] => bool(false)
      [2] => integer(1)
      [3] => double(1.2)
      [4] => NULL
      [5] => string(5) "asdas"
      [6] => array(1)
      {
        [0] => integer(1)
      }
      [7] => object(stdClass)(0)
      {
      }
      [8] => resource(4) of type (stream)
    }
    array
    (
      '0' => true,
      '1' => false,
      '2' => 1,
      '3' => 1.2,
      '4' => NULL,
      '5' => 'asdas',
      '6' => array
      (
        '0' => 1
      ),
      '7' => class stdClass
      {
    
      },
      '8' => NULL
    )
    WorkItems/1285%20overrides.php: SUCCEEDED
    WorkItems/22016.php: SUCCEEDED
    WorkItems/22019.php: SUCCEEDED
    WorkItems/26052.php: SUCCEEDED
    WorkItems/26667%20hash.php: SUCCEEDED
    WorkItems/26681.php: SUCCEEDED
    WorkItems/26691.php: SUCCEEDED
    WorkItems/27377.php: SUCCEEDED
    WorkItems/27492.php: SUCCEEDED
    WorkItems/27838%20json.php: SUCCEEDED
    WorkItems/2787.php: SUCCEEDED
    Xml/005.php: SUCCEEDED
    Xml/006.php: SUCCEEDED
    Xml/007.php: SUCCEEDED
    Xml/008.php: SUCCEEDED
    Xml/009.php: SUCCEEDED
    Xml/011.php: SUCCEEDED
    Xml/013.php: SUCCEEDED
    Xml/017.php: SUCCEEDED
    Xml/018.php: SUCCEEDED
    Xml/019.php: SUCCEEDED
    Xml/020.php: SUCCEEDED
    Xml/021.php: SUCCEEDED
    Xml/025.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
      'foo' => 'foobar'
    }
    array
    {
      'html' => 'http://www.w3.org/1999/xhtml'
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
    }
    array
    {
      'html' => 'http://www.w3.org/1999/xhtml'
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'foo' => 'foobar'
      'baz' => 'foobarbaz'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
    }
    array
    {
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
      'baz' => 'foobarbaz'
      'foo' => 'foobar'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
      'baz' => 'foobarbaz'
      'foo' => 'foobar'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
    }
    array
    {
    }
    Xml/026.php: SUCCEEDED
    Xml/027.php: SUCCEEDED
    Xml/028.php: SUCCEEDED
    Xml/029.php: SUCCEEDED
    Xml/030.php: SUCCEEDED
    Xml/032.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    FALSE
    FALSE
    FALSE
    TRUE
    TRUE
    TRUE
    Xml/033.php: SUCCEEDED
    Xml/bug26384.php: SUCCEEDED
    Xml/bug28721.php: SUCCEEDED
    Xml/bug28817.php: SUCCEEDED
    Xml/bug32615.php: SUCCEEDED
    Xml/bug33853.php: SUCCEEDED
    Xml/bug34276.php: SUCCEEDED
    Xml/bug35342.php: SUCCEEDED
    Xml/bug36756.php: SUCCEEDED
    Xml/bug37277.php: SUCCEEDED
    Xml/dom002.php: SUCCEEDED
    Xml/dom003.php: SUCCEEDED
    Xml/dom006.php: SUCCEEDED
    Xml/dom007.php: SUCCEEDED
    Xml/dom_set_attr_node.php: SUCCEEDED
    Xml/xslt001.php: SUCCEEDED
    Xml/xslt002.php: SUCCEEDED
    Xml/xslt003.php: SUCCEEDED
    Xml/xslt004.php: SUCCEEDED
    Xml/xslt005.php: SUCCEEDED
    Xml/xslt006.php: SUCCEEDED
    Xml/xslt007.php: SUCCEEDED
    Xml/xslt010.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test 10: EXSLT Support
      
      
      Test Date : 0001-12-31Z
        year                 : 1
        leap-year            : false
        month-in-year        : 12
        month-name           : December
        month-abbreviation   : Dec
        week-in-year         : 1
        day-in-year          : 365
        day-in-month         : 31
        day-of-week-in-month : 5
        day-in-week          : 2
        day-name             : Monday
        day-abbreviation     : Mon
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : 3000-01-31
        year                 : 3000
        leap-year            : false
        month-in-year        : 1
        month-name           : January
        month-abbreviation   : Jan
        week-in-year         : 5
        day-in-year          : 31
        day-in-month         : 31
        day-of-week-in-month : 5
        day-in-week          : 6
        day-name             : Friday
        day-abbreviation     : Fri
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : 2000-02-29
        year                 : 2000
        leap-year            : true
        month-in-year        : 2
        month-name           : February
        month-abbreviation   : Feb
        week-in-year         : 9
        day-in-year          : 60
        day-in-month         : 29
        day-of-week-in-month : 5
        day-in-week          : 3
        day-name             : Tuesday
        day-abbreviation     : Tue
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : 9990001-12-31Z
        year                 : 9990001
        leap-year            : false
        month-in-year        : 12
        month-name           : December
        month-abbreviation   : Dec
        week-in-year         : 1
        day-in-year          : 365
        day-in-month         : 31
        day-of-week-in-month : 5
        day-in-week          : 2
        day-name             : Monday
        day-abbreviation     : Mon
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : -0004-02-29
        year                 : -4
        leap-year            : true
        month-in-year        : 2
        month-name           : February
        month-abbreviation   : Feb
        week-in-year         : 9
        day-in-year          : 60
        day-in-month         : 29
        day-of-week-in-month : 5
        day-in-week          : 1
        day-name             : Sunday
        day-abbreviation     : Sun
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
    Test 10: EXSLT Support
    Warning: Cannot find the script or external object that implements prefix 'http://exslt.org/dates-and-times'. in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Xml\__input.txt at expression on line 14, column 3.
    
    Warning: Illegal string offset '-1' in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Phalanger.inc at expression on line 7, column 6.
    Xml/xslt011.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test 11: php:function Support
    
    Warning: XSLTProcessor::transformToXml(): A PHP Object cannot be converted to a XPath-string in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Xml\__input.txt on line 18
    <?xml version="1.0"?>
    foobar - secondArg
    foobar - 
    this is from an external DomDocument
    from the Input Document
    static
    Test 11: php:function Support
    <?xml version="1.0" encoding="utf-8"?>foobar - secondArg
    foobar - 
    this is from an external DomDocument
    from the Input Document
    static
    not a DomNode object
    Xml/xslt012.php: SUCCEEDED
    ================================================ FILE: Testing/Tests/TestLogs/TestLog 2010-07-11.htm ================================================ PHP.NET Compiler test log

    PHP.NET Compiler test log

    (92%) 801 succeeded, 68 failed
    Test ResultCompiler error outputExpected test result
    @PHP/classes/array_access_001.php: SUCCEEDED
    @PHP/classes/array_access_002.php: SUCCEEDED
    @PHP/classes/array_access_003.php: SUCCEEDED
    @PHP/classes/array_access_004.php: SUCCEEDED
    @PHP/classes/array_access_005.php: SUCCEEDED
    @PHP/classes/array_access_006.php: SUCCEEDED
    @PHP/classes/array_access_007.php: SUCCEEDED
    @PHP/classes/array_access_008.php: SUCCEEDED
    @PHP/classes/array_access_009.php: SUCCEEDED
    @PHP/classes/array_access_010.php: SUCCEEDED
    @PHP/classes/array_access_011.php: SUCCEEDED
    @PHP/classes/array_access_013.php: SUCCEEDED
    @PHP/classes/assign_op_property_001.php: SUCCEEDED
    @PHP/classes/autoload_001.php: SUCCEEDED
    @PHP/classes/autoload_002.php: SUCCEEDED
    @PHP/classes/autoload_003.php: SUCCEEDED
    @PHP/classes/autoload_005.php: SUCCEEDED
    @PHP/classes/autoload_006.php: SUCCEEDED
    @PHP/classes/bug23951.php: SUCCEEDED
    @PHP/classes/bug24399.php: SUCCEEDED
    @PHP/classes/bug24445.php: SUCCEEDED
    @PHP/classes/bug26737.php: SUCCEEDED
    @PHP/classes/bug27468.php: SUCCEEDED
    @PHP/classes/bug27504.php: SUCCEEDED
    @PHP/classes/class_example.php: SUCCEEDED
    @PHP/classes/class_stdclass.php: SUCCEEDED
    @PHP/classes/clone_001.php: SUCCEEDED
    @PHP/classes/clone_002.php: SUCCEEDED
    @PHP/classes/clone_003.php: SUCCEEDED
    @PHP/classes/clone_004.php: SUCCEEDED
    @PHP/classes/clone_006.php: SUCCEEDED
    @PHP/classes/constants_scope_001.php: SUCCEEDED
    @PHP/classes/ctor_dtor.php: SUCCEEDED
    @PHP/classes/ctor_dtor_inheritance.php: SUCCEEDED
    @PHP/classes/ctor_name_clash.php: SUCCEEDED
    @PHP/classes/dereferencing_001.php: SUCCEEDED
    @PHP/classes/destructor_and_echo.php: SUCCEEDED
    @PHP/classes/destructor_and_references.php: SUCCEEDED
    @PHP/classes/destructor_inheritance.php: SUCCEEDED
    @PHP/classes/destructor_visibility_003.php: SUCCEEDED
    @PHP/classes/factory_001.php: SUCCEEDED
    @PHP/classes/factory_and_singleton_001.php: SUCCEEDED
    @PHP/classes/factory_and_singleton_002.php: SUCCEEDED
    @PHP/classes/final.php: SUCCEEDED
    @PHP/classes/incdec_property_001.php: SUCCEEDED
    @PHP/classes/incdec_property_002.php: SUCCEEDED
    @PHP/classes/incdec_property_003.php: SUCCEEDED
    @PHP/classes/incdec_property_004.php: SUCCEEDED
    @PHP/classes/inheritance.php: SUCCEEDED
    @PHP/classes/inheritance_002.php: SUCCEEDED
    @PHP/classes/interfaces_001.php: SUCCEEDED
    @PHP/classes/interface_construct.php: SUCCEEDED
    @PHP/classes/interface_doubled.php: SUCCEEDED
    @PHP/classes/interface_implemented.php: SUCCEEDED
    @PHP/classes/iterators_001.php: SUCCEEDED
    @PHP/classes/iterators_002.php: SUCCEEDED
    @PHP/classes/iterators_003.php: SUCCEEDED
    @PHP/classes/iterators_004.php: SUCCEEDED
    @PHP/classes/iterators_006.php: SUCCEEDED
    @PHP/classes/iterators_007.php: SUCCEEDED
    @PHP/classes/object_reference_001.php: SUCCEEDED
    @PHP/classes/private_001.php: SUCCEEDED
    @PHP/classes/private_002.php: SUCCEEDED
    @PHP/classes/private_003.php: SUCCEEDED
    @PHP/classes/private_003b.php: SUCCEEDED
    @PHP/classes/private_004.php: SUCCEEDED
    @PHP/classes/private_004b.php: SUCCEEDED
    @PHP/classes/private_005.php: SUCCEEDED
    @PHP/classes/private_005b.php: SUCCEEDED
    @PHP/classes/private_006.php: SUCCEEDED
    @PHP/classes/private_006b.php: SUCCEEDED
    @PHP/classes/private_007.php: SUCCEEDED
    @PHP/classes/private_007b.php: SUCCEEDED
    @PHP/classes/private_members.php: SUCCEEDED
    @PHP/classes/private_redeclare.php: SUCCEEDED
    @PHP/classes/protected_001.php: SUCCEEDED
    @PHP/classes/protected_001b.php: SUCCEEDED
    @PHP/classes/protected_002.php: SUCCEEDED
    @PHP/classes/serialize_001.php: SUCCEEDED
    @PHP/classes/singleton_001.php: SUCCEEDED
    @PHP/classes/static_properties_001.php: SUCCEEDED
    @PHP/classes/type_hinting_001.php: SUCCEEDED
    @PHP/classes/type_hinting_003.php: SUCCEEDED
    @PHP/classes/visibility_000c.php: SUCCEEDED
    @PHP/classes/visibility_001c.php: SUCCEEDED
    @PHP/classes/visibility_002c.php: SUCCEEDED
    @PHP/classes/visibility_003a.php: SUCCEEDED
    @PHP/classes/visibility_003c.php: SUCCEEDED
    @PHP/classes/visibility_004a.php: SUCCEEDED
    @PHP/classes/visibility_004b.php: SUCCEEDED
    @PHP/classes/visibility_004c.php: SUCCEEDED
    @PHP/classes/visibility_005.php: SUCCEEDED
    @PHP/classes/__call_001.php: SUCCEEDED
    @PHP/classes/__set_data_corrupt.php: SUCCEEDED
    @PHP/classes/__set__get_001.php: SUCCEEDED
    @PHP/classes/__set__get_004.php: SUCCEEDED
    @PHP/classes/__set__get_005.php: SUCCEEDED
    @PHP/date/bug17988.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2002-06-25 12:18:48
    2002-06-25 14:18:48
    2002-06-25 13:18:48
    2002-06-25 12:18:48
    2002-06-25 18:18:48
    2002-06-25 14:18:48
    2002-06-25 14:18:48
    2002-06-25 18:18:48
    2002-06-25 10:18:48
    2002-06-25 17:18:48
    2002-06-25 11:18:48
    2002-06-25 17:48:48
    2002-06-25 10:48:48
    2002-06-25 14:18:48
    2002-06-25 14:18:48
    2002-06-25 13:18:48
    2002-06-25 12:18:48
    2002-06-25 18:18:48
    2002-06-25 14:18:48
    2002-06-25 14:18:48
    2002-06-25 18:18:48
    2002-06-25 10:18:48
    2002-06-25 17:18:48
    2002-06-25 11:18:48
    2002-06-25 17:48:48
    2002-06-25 10:48:48
    @PHP/date/bug26317.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2003-11-19 17:20:42
    2003-11-19 17:20:42
    2003-11-19 17:20:42
    2003-11-19 16:20:42
    2003-11-19 16:20:42
    2003-11-19 16:20:42
    @PHP/date/bug26320.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2003-11-19 12:30:42
    2003-11-19 13:30:42
    2003-11-19 12:30:42
    2003-11-19 12:30:42
    @PHP/date/bug28088.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    The following line rightly shows the correct date time:
    04/04/04 2145
    But the following line fails to show the correct date time:
    04/03/04 2245
    The following line rightly shows the correct date time:
    04/04/04 2345
    But the following line fails to show the correct date time:
    04/04/04 0045
    @PHP/date/bug28599.php: SUCCEEDED
    @PHP/date/bug29150.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2005-06-19 22:00:00
    2005-06-20 00:00:00
    @PHP/date/bug29585.php: SUCCEEDED
    @PHP/date/bug29595.php: SUCCEEDED
    @PHP/date/bug33056.php: SUCCEEDED
    @PHP/date/bug33452.php: SUCCEEDED
    @PHP/date/bug33562.php: SUCCEEDED
    @PHP/date/bug33563.php: SUCCEEDED
    @PHP/date/bug33578.php: SUCCEEDED
    @PHP/date/bug33869.php: SUCCEEDED
    @PHP/date/bug34676.php: SUCCEEDED
    @PHP/date/bug34771.php: SUCCEEDED
    @PHP/date/bug35143.php: SUCCEEDED
    @PHP/date/bug35414.php: SUCCEEDED
    @PHP/date/bug35422.php: SUCCEEDED
    @PHP/date/bug35425.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    integer(42)
    integer(1)
    integer(1)
    integer(1)
    integer(1)
    integer(0)
    integer(0)
    integer(1)
    integer(1)
    integer(31)
    integer(1104537661)
    integer(6)
    integer(53)
    integer(5)
    integer(2005)
    integer(0)
    integer(3600)
    integer(292)
    integer(1)
    integer(1)
    integer(1)
    integer(1)
    integer(0)
    integer(0)
    integer(1)
    integer(1)
    integer(31)
    integer(1104559261)
    integer(6)
    integer(53)
    integer(5)
    integer(2005)
    integer(0)
    integer(-18000)
    @PHP/date/bug35456.php: SUCCEEDED
    @PHP/date/bug35624.php: SUCCEEDED
    @PHP/date/bug35630.php: SUCCEEDED
    @PHP/date/bug35699.php: SUCCEEDED
    @PHP/date/bug35705.php: SUCCEEDED
    @PHP/date/bug35885.php: SUCCEEDED
    @PHP/date/bug35887.php: SUCCEEDED
    @PHP/date/date.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    c: 2003-01-23T13:20:59+01:00
    r: Thu, 23 Jan 2003 13:20:59 +0100
    c: 2003-01-23T13:20:59+01:00
    r: Thu, 23 Jan 2003 13:20:59 +0100
    c: 2003-01-23T12:20:59+00:00
    r: Thu, 23 Jan 2003 12:20:59 +0000
    c: 2003-01-23T13:20:59+01:00
    r: Thu, 23 Jan 2003 13:20:59 +0100
    @PHP/date/date_create-1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\date\__input.txt on line 28
    SKIP
    @PHP/date/date_create-2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\date\__input.txt on line 6
    SKIP
    @PHP/date/date_default_timezone_get-3.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Europe/Prague
    America/Chicago
    Europe/Rome
    America/Chicago
    @PHP/date/date_modify-1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\date\__input.txt on line 6
    SKIP
    @PHP/date/date_modify-2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\date\__input.txt on line 6
    SKIP
    @PHP/date/default-timezone-1.php: SUCCEEDED
    @PHP/date/default-timezone-2.php: SUCCEEDED
    @PHP/date/format-negative-timestamp.php: SUCCEEDED
    @PHP/date/strtotime.php: SUCCEEDED
    @PHP/date/timezone-configuration.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    1119125744
    1119125744
    1119125744
    1119125744
    1119129344
    1119125744
    @PHP/doc_examples/test001.php: SUCCEEDED
    @PHP/doc_examples/test002.php: SUCCEEDED
    @PHP/doc_examples/test003.php: SUCCEEDED
    @PHP/doc_examples/test004.php: SUCCEEDED
    @PHP/doc_examples/test005.php: SUCCEEDED
    @PHP/doc_examples/test006.php: SUCCEEDED
    @PHP/doc_examples/test007.php: SUCCEEDED
    @PHP/doc_examples/test008.php: SUCCEEDED
    @PHP/doc_examples/test009.php: SUCCEEDED
    @PHP/doc_examples/test010.php: SUCCEEDED
    @PHP/doc_examples/test011.php: SUCCEEDED
    @PHP/doc_examples/test013.php: SUCCEEDED
    @PHP/doc_examples/test014.php: SUCCEEDED
    @PHP/doc_examples/test015.php: SUCCEEDED
    @PHP/doc_examples/test016.php: SUCCEEDED
    @PHP/doc_examples/test017.php: SUCCEEDED
    @PHP/doc_examples/test018.php: SUCCEEDED
    @PHP/doc_examples/test019.php: SUCCEEDED
    @PHP/doc_examples/test020.php: SUCCEEDED
    @PHP/doc_examples/test021.php: SUCCEEDED
    @PHP/doc_examples/test022.php: SUCCEEDED
    @PHP/doc_examples/test023.php: SUCCEEDED
    @PHP/doc_examples/test024.php: SUCCEEDED
    @PHP/doc_examples/test025.php: SUCCEEDED
    @PHP/doc_examples/test026.php: SUCCEEDED
    @PHP/doc_examples/test027.php: SUCCEEDED
    @PHP/doc_examples/test028.php: SUCCEEDED
    @PHP/doc_examples/test029.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ´┐Żauky
    �auky
    @PHP/doc_examples/test030.php: SUCCEEDED
    @PHP/doc_examples/test031.php: SUCCEEDED
    @PHP/doc_examples/test032.php: SUCCEEDED
    @PHP/doc_examples/test033.php: SUCCEEDED
    @PHP/doc_examples/test034.php: SUCCEEDED
    @PHP/doc_examples/test035.php: SUCCEEDED
    @PHP/doc_examples/test036.php: SUCCEEDED
    @PHP/doc_examples/test037.php: SUCCEEDED
    @PHP/doc_examples/test038.php: SUCCEEDED
    @PHP/doc_examples/test039.php: SUCCEEDED
    @PHP/doc_examples/test040.php: SUCCEEDED
    @PHP/doc_examples/test041.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    call_user_func():
    hello world!
    Strict Standards: call_user_func(): Non-static method MyClass::myCallbackMethod() should not be called statically in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\doc_examples\__input.txt at expression on line 17, column 1.
    Hello World!Hello World!
    @PHP/doc_examples/test042.php: SUCCEEDED
    @PHP/doc_examples/test043.php: SUCCEEDED
    @PHP/doc_examples/test044.php: SUCCEEDED
    @PHP/doc_examples/test045.php: SUCCEEDED
    @PHP/doc_examples/test046.php: SUCCEEDED
    @PHP/doc_examples/test047.php: SUCCEEDED
    @PHP/doc_examples/test048.php: SUCCEEDED
    @PHP/doc_examples/test049.php: SUCCEEDED
    @PHP/doc_examples/test050.php: SUCCEEDED
    @PHP/doc_examples/test051.php: SUCCEEDED
    @PHP/doc_examples/test052.php: SUCCEEDED
    @PHP/doc_examples/test053.php: SUCCEEDED
    @PHP/doc_examples/test054.php: SUCCEEDED
    @PHP/doc_examples/test055.php: SUCCEEDED
    @PHP/doc_examples/test056.php: SUCCEEDED
    @PHP/doc_examples/test057.php: SUCCEEDED
    @PHP/doc_examples/test058.php: SUCCEEDED
    @PHP/doc_examples/test059.php: SUCCEEDED
    @PHP/doc_examples/test060.php: SUCCEEDED
    @PHP/doc_examples/test061.php: SUCCEEDED
    @PHP/doc_examples/test062.php: SUCCEEDED
    @PHP/doc_examples/test063.php: SUCCEEDED
    @PHP/doc_examples/test064.php: SUCCEEDED
    @PHP/doc_examples/test065.php: SUCCEEDED
    @PHP/doc_examples/test066.php: SUCCEEDED
    @PHP/doc_examples/test067.php: SUCCEEDED
    @PHP/doc_examples/test068.php: SUCCEEDED
    @PHP/doc_examples/test069.php: SUCCEEDED
    @PHP/doc_examples/test070.php: SUCCEEDED
    @PHP/doc_examples/test071.php: SUCCEEDED
    @PHP/doc_examples/test072.php: SUCCEEDED
    @PHP/doc_examples/test073.php: SUCCEEDED
    @PHP/doc_examples/test074.php: SUCCEEDED
    @PHP/doc_examples/test075.php: SUCCEEDED
    @PHP/doc_examples/test076.php: SUCCEEDED
    @PHP/doc_examples/test077.php: SUCCEEDED
    @PHP/doc_examples/test078.php: SUCCEEDED
    @PHP/doc_examples/test079.php: SUCCEEDED
    @PHP/doc_examples/test080.php: SUCCEEDED
    @PHP/doc_examples/test081.php: SUCCEEDED
    @PHP/doc_examples/test082.php: SUCCEEDED
    @PHP/doc_examples/test083.php: SUCCEEDED
    @PHP/doc_examples/test084.php: SUCCEEDED
    @PHP/doc_examples/test085.php: SUCCEEDED
    @PHP/doc_examples/test086.php: SUCCEEDED
    @PHP/doc_examples/test087.php: SUCCEEDED
    @PHP/doc_examples/test088.php: SUCCEEDED
    @PHP/doc_examples/test089.php: SUCCEEDED
    @PHP/doc_examples/test090.php: SUCCEEDED
    @PHP/doc_examples/test091.php: SUCCEEDED
    @PHP/doc_examples/test092.php: SUCCEEDED
    @PHP/doc_examples/test093.php: SUCCEEDED
    @PHP/doc_examples/test094.php: SUCCEEDED
    @PHP/doc_examples/test095.php: SUCCEEDED
    @PHP/doc_examples/test096.php: SUCCEEDED
    @PHP/doc_examples/test097.php: SUCCEEDED
    @PHP/doc_examples/test098.php: SUCCEEDED
    @PHP/doc_examples/test099.php: SUCCEEDED
    @PHP/doc_examples/test100.php: SUCCEEDED
    @PHP/doc_examples/test102.php: SUCCEEDED
    @PHP/doc_examples/test103.php: SUCCEEDED
    @PHP/doc_examples/test104.php: SUCCEEDED
    @PHP/doc_examples/test105.php: SUCCEEDED
    @PHP/doc_examples/test107.php: SUCCEEDED
    @PHP/doc_examples/test108.php: SUCCEEDED
    @PHP/doc_examples/test109.php: SUCCEEDED
    @PHP/doc_examples/test110.php: SUCCEEDED
    @PHP/doc_examples/test111.php: SUCCEEDED
    @PHP/doc_examples/test112.php: SUCCEEDED
    @PHP/doc_examples/test113.php: SUCCEEDED
    @PHP/doc_examples/test114.php: SUCCEEDED
    @PHP/doc_examples/test115.php: SUCCEEDED
    @PHP/doc_examples/test116.php: SUCCEEDED
    @PHP/doc_examples/test117.php: SUCCEEDED
    @PHP/doc_examples/test118.php: SUCCEEDED
    @PHP/doc_examples/test119.php: SUCCEEDED
    @PHP/doc_examples/test120.php: SUCCEEDED
    @PHP/doc_examples/test121.php: SUCCEEDED
    @PHP/doc_examples/test122.php: SUCCEEDED
    @PHP/doc_examples/test123.php: SUCCEEDED
    @PHP/doc_examples/test124.php: SUCCEEDED
    @PHP/doc_examples/test125.php: SUCCEEDED
    @PHP/doc_examples/test126.php: SUCCEEDED
    @PHP/doc_examples/test127.php: SUCCEEDED
    @PHP/doc_examples/test128.php: SUCCEEDED
    @PHP/doc_examples/test129.php: SUCCEEDED
    @PHP/doc_examples/test130.php: SUCCEEDED
    @PHP/doc_examples/test131.php: SUCCEEDED
    @PHP/doc_examples/test132.php: SUCCEEDED
    @PHP/doc_examples/test133.php: SUCCEEDED
    @PHP/doc_examples/test134.php: SUCCEEDED
    @PHP/doc_examples/test136.php: SUCCEEDED
    @PHP/doc_examples/test137.php: SUCCEEDED
    @PHP/doc_examples/test138.php: SUCCEEDED
    @PHP/doc_examples/test139.php: SUCCEEDED
    @PHP/doc_examples/test148.php: SUCCEEDED
    @PHP/doc_examples/test149.php: SUCCEEDED
    @PHP/doc_examples/test150.php: SUCCEEDED
    @PHP/doc_examples/test151.php: SUCCEEDED
    @PHP/doc_examples/test152.php: SUCCEEDED
    @PHP/doc_examples/test153.php: SUCCEEDED
    @PHP/doc_examples/test154.php: SUCCEEDED
    @PHP/doc_examples/test155.php: SUCCEEDED
    @PHP/doc_examples/test156.php: SUCCEEDED
    @PHP/doc_examples/test158.php: SUCCEEDED
    @PHP/lang/001.php: SUCCEEDED
    @PHP/lang/002.php: SUCCEEDED
    @PHP/lang/003.php: SUCCEEDED
    @PHP/lang/004.php: SUCCEEDED
    @PHP/lang/005.php: SUCCEEDED
    @PHP/lang/006.php: SUCCEEDED
    @PHP/lang/007.php: SUCCEEDED
    @PHP/lang/008.php: SUCCEEDED
    @PHP/lang/009.php: SUCCEEDED
    @PHP/lang/010.php: SUCCEEDED
    @PHP/lang/011.php: SUCCEEDED
    @PHP/lang/012.php: SUCCEEDED
    @PHP/lang/013.php: SUCCEEDED
    @PHP/lang/014.php: SUCCEEDED
    @PHP/lang/015.php: SUCCEEDED
    @PHP/lang/016.php: SUCCEEDED
    @PHP/lang/017.php: SUCCEEDED
    @PHP/lang/018.php: SUCCEEDED
    @PHP/lang/019.php: SUCCEEDED
    @PHP/lang/020.php: SUCCEEDED
    @PHP/lang/021.php: SUCCEEDED
    @PHP/lang/022.php: SUCCEEDED
    @PHP/lang/023.php: SUCCEEDED
    @PHP/lang/024.php: SUCCEEDED
    @PHP/lang/025.php: SUCCEEDED
    @PHP/lang/026.php: SUCCEEDED
    @PHP/lang/027.php: SUCCEEDED
    @PHP/lang/028.php: SUCCEEDED
    @PHP/lang/030.php: SUCCEEDED
    @PHP/lang/032.php: SUCCEEDED
    @PHP/lang/036.php: SUCCEEDED
    @PHP/lang/037.php: SUCCEEDED
    @PHP/lang/038.php: SUCCEEDED
    @PHP/lang/039.php: SUCCEEDED
    @PHP/lang/040.php: SUCCEEDED
    @PHP/lang/bison1.php: SUCCEEDED
    @PHP/lang/bug17115.php: SUCCEEDED
    @PHP/lang/bug18872.php: SUCCEEDED
    @PHP/lang/bug19943.php: SUCCEEDED
    @PHP/lang/bug20175.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    Deprecated: Assigning the return value of new by reference is deprecated in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\lang\__input.txt on line 110
    foo_static()
    foo_global()
    foo:1
    foo_static()
    foo:1
    bar_static()
    bar_global()
    bar:1
    bar_static()
    bar:1
    wow_static()
    wow_global()
    wow:1
    wow_static()
    wow:1
    oop_test()
    oop_static()
    oop_class()
    oop:1
    oop_static()
    oop:1
    oop_test()
    oop_static()
    oop:1
    foo_static()
    foo_global()
    foo:1
    foo_static()
    foo:1
    bar_static()
    bar_global()
    bar:1
    bar_static()
    bar_global()
    bar:2
    wow_static()
    wow_global()
    wow:1
    wow_static()
    wow:1
    oop_test()
    oop_static()
    oop_class()
    oop:1
    oop_static()
    oop:1
    oop_test()
    oop_static()
    oop:1
    D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\lang\__input.txt(110,4): warning PHP0181: Assigning the return value of new by reference is deprecated
    
    @PHP/lang/bug21094.php: SUCCEEDED
    @PHP/lang/bug21600.php: SUCCEEDED
    @PHP/lang/bug21669.php: SUCCEEDED
    @PHP/lang/bug21849.php: SUCCEEDED
    @PHP/lang/bug21961.php: SUCCEEDED
    @PHP/lang/bug22231.php: SUCCEEDED
    @PHP/lang/bug22367.php: SUCCEEDED
    @PHP/lang/bug22510.php: SUCCEEDED
    @PHP/lang/bug22592.php: SUCCEEDED
    @PHP/lang/bug22690.php: SUCCEEDED
    @PHP/lang/bug23279.php: SUCCEEDED
    @PHP/lang/bug23384.php: SUCCEEDED
    @PHP/lang/bug23489.php: SUCCEEDED
    @PHP/lang/bug23524.php: SUCCEEDED
    @PHP/lang/bug23922.php: SUCCEEDED
    @PHP/lang/bug24054.php: SUCCEEDED
    @PHP/lang/bug24396.php: SUCCEEDED
    @PHP/lang/bug24403.php: SUCCEEDED
    @PHP/lang/bug24436.php: SUCCEEDED
    @PHP/lang/bug24499.php: SUCCEEDED
    @PHP/lang/bug24640.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    double(1700000000000000089258092433847514422797596587883870563356951996370064178581143932836831337636761368874297554515902592900802289500112731978596146714137401870842258241575178866354311397451139753100927220499450359906637902366244989496126909662726242240784739940994096632824796638102733857671280980918272.0000000000)
    1.7E+300
    
    ------
    double(0.0000000000)
    1.7E-300
    
    ------
    double(17000000000000001584208052028780237480128823455860622330108867175329927830437888.0000000000)
    1.7E+79
    
    ------
    double(0.0000000000)
    1.7E-79
    
    ------
    double(169999999999999996096025832433329868941658043870400163508258284150340918121070592.0000000000)
    1.7E+80
    
    ------
    double(0.0000000000)
    1.7E-80
    
    ------
    double(1700000000000000013616404158611892038375594280539217794530130541777964808366194688.0000000000)
    1.7E+81
    
    ------
    double(0.0000000000)
    1.7E-81
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    1.6999810742106E-319
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    1.7000798873397E-320
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    1.6995858216939E-321
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    0
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    0
    
    ------
    double(1700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+300
    
    ------
    double(0.0000000000)
    1.70000000000003E-300
    
    ------
    double(17000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+79
    
    ------
    double(0.0000000000)
    1.70000000000001E-79
    
    ------
    double(170000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+80
    
    ------
    double(0.0000000000)
    1.70000000000001E-80
    
    ------
    double(1700000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+81
    
    ------
    double(0.0000000000)
    1.70000000000001E-81
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    1.69998107421056E-319
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    1.70007988733973E-320
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    1.69464516523548E-321
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    0
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    0
    
    ------
    @PHP/lang/bug24652.php: SUCCEEDED
    @PHP/lang/bug24658.php: SUCCEEDED
    @PHP/lang/bug24783.php: SUCCEEDED
    @PHP/lang/bug24926.php: SUCCEEDED
    @PHP/lang/bug25547.php: SUCCEEDED
    @PHP/lang/bug25652.php: SUCCEEDED
    @PHP/lang/bug25922.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Undefined index here: 'error'
    Undefined index here: ''
    @PHP/lang/bug26182.php: SUCCEEDED
    @PHP/lang/bug26696.php: SUCCEEDED
    @PHP/lang/bug26866.php: SUCCEEDED
    @PHP/lang/bug26869.php: SUCCEEDED
    @PHP/lang/bug27354.php: SUCCEEDED
    @PHP/lang/bug27439.php: SUCCEEDED
    @PHP/lang/bug27535.php: SUCCEEDED
    @PHP/lang/bug28213.php: SUCCEEDED
    @PHP/lang/bug28800.php: SUCCEEDED
    @PHP/lang/bug29566.php: SUCCEEDED
    @PHP/lang/bug29893.php: SUCCEEDED
    @PHP/lang/bug29944.php: SUCCEEDED
    @PHP/lang/bug30638.php: SUCCEEDED
    @PHP/lang/bug30726.php: SUCCEEDED
    @PHP/lang/bug30862.php: SUCCEEDED
    @PHP/lang/bug32924.php: SUCCEEDED
    @PHP/lang/bug35382.php: SUCCEEDED
    @PHP/lang/bug7515.php: SUCCEEDED
    @PHP/lang/each_binary_safety.php: SUCCEEDED
    @PHP/lang/error_2_exception_001.php: SUCCEEDED
    @PHP/lang/foreach_with_object_001.php: SUCCEEDED
    @PHP/lang/foreach_with_references_001.php: SUCCEEDED
    @PHP/lang/type_hints_001.php: SUCCEEDED
    @PHP/standard/array/001.php: SUCCEEDED
    @PHP/standard/array/003.php: SUCCEEDED
    @PHP/standard/array/004.php: SUCCEEDED
    @PHP/standard/array/005.php: SUCCEEDED
    @PHP/standard/array/008.php: SUCCEEDED
    @PHP/standard/array/array_change_key_case.php: SUCCEEDED
    @PHP/standard/array/array_chunk.php: SUCCEEDED
    @PHP/standard/array/array_count_values.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array(0) {
    }
    
    array(1) {
      [0]=>
      int(1)
    }
    
    array(1) {
      [1]=>
      int(1)
    }
    
    array(1) {
      [-1]=>
      int(1)
    }
    
    array(1) {
      [0]=>
      int(2)
    }
    
    array(2) {
      [0]=>
      int(1)
      [1]=>
      int(1)
    }
    
    array(1) {
      [1]=>
      int(2)
    }
    
    array(3) {
      [1]=>
      int(2)
      ["hello"]=>
      int(2)
      ["world"]=>
      int(1)
    }
    
    array(2) {
      ["hello"]=>
      int(2)
      ["world"]=>
      int(1)
    }
    
    array(3) {
      [""]=>
      int(2)
      ["world"]=>
      int(3)
      ["hello"]=>
      int(4)
    }
    
    array(1) {
      [0]=>
      int(1)
    }
    
    array(1) {
      [1]=>
      int(1)
    }
    array(0) [empty]
    
    array(1)
    {
      [0] => integer(1)
    }
    
    array(1)
    {
      [1] => integer(1)
    }
    
    array(1)
    {
      [-1] => integer(1)
    }
    
    array(1)
    {
      [0] => integer(2)
    }
    
    array(2)
    {
      [0] => integer(1)
      [1] => integer(1)
    }
    
    array(1)
    {
      [1] => integer(2)
    }
    
    array(3)
    {
      [1] => integer(2)
      ['hello'] => integer(2)
      ['world'] => integer(1)
    }
    
    array(2)
    {
      ['hello'] => integer(2)
      ['world'] => integer(1)
    }
    
    array(3)
    {
      [''] => integer(2)
      ['world'] => integer(3)
      ['hello'] => integer(4)
    }
    
    array(1)
    {
      [0] => integer(1)
    }
    
    array(1)
    {
      [1] => integer(1)
    }
    @PHP/standard/array/array_diff_1.php: SUCCEEDED
    @PHP/standard/array/array_diff_key.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ------ Test 1 --------
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 2 --------
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 3 --------
    array(6) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [2]=>
      int(4)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [2]=>
      int(4)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 4 --------
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 5 --------
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 6 --------
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 7 --------
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    ------ Test 8 --------
    array(6) {
      [0]=>
      int(0)
      [7]=>
      int(14)
      [2]=>
      int(4)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [0]=>
      int(0)
      [7]=>
      int(14)
      [2]=>
      int(4)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 9 --------
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    ------ Test 1 --------
    array(4)
    {
      [1] => &integer(2)
      [6] => &integer(12)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    array(4)
    {
      [1] => &integer(2)
      [6] => &integer(12)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    ------ Test 2 --------
    array(3)
    {
      [1] => &integer(2)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    array(3)
    {
      [1] => &integer(2)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    ------ Test 3 --------
    array(6)
    {
      [1] => &integer(2)
      [6] => &integer(12)
      [2] => &integer(4)
      [15] => &integer(30)
      [1200] => &integer(2400)
      [-2500] => &integer(-5000)
    }
    array(6)
    {
      [1] => &integer(2)
      [6] => &integer(12)
      [2] => &integer(4)
      [15] => &integer(30)
      [1200] => &integer(2400)
      [-2500] => &integer(-5000)
    }
    ------ Test 4 --------
    array(3)
    {
      [1] => &integer(2)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    array(3)
    {
      [1] => &integer(2)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    ------ Test 5 --------
    array(4)
    {
      [1] => &integer(2)
      [6] => &integer(12)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    array(4)
    {
      [1] => &integer(2)
      [6] => &integer(12)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    ------ Test 6 --------
    array(3)
    {
      [1] => &integer(2)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    array(3)
    {
      [1] => &integer(2)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    ------ Test 7 --------
    array(3)
    {
      [7] => &integer(14)
      [11] => &integer(22)
      [1100] => &integer(2200)
    }
    array(3)
    {
      [7] => &integer(14)
      [11] => &integer(22)
      [1100] => &integer(2200)
    }
    ------ Test 8 --------
    array(6)
    {
      [0] => &integer(0)
      [7] => &integer(14)
      [2] => &integer(4)
      [11] => &integer(22)
      [1100] => &integer(2200)
      [-2500] => &integer(-5000)
    }
    array(6)
    {
      [0] => &integer(0)
      [7] => &integer(14)
      [2] => &integer(4)
      [11] => &integer(22)
      [1100] => &integer(2200)
      [-2500] => &integer(-5000)
    }
    ------ Test 9 --------
    array(3)
    {
      [7] => &integer(14)
      [11] => &integer(22)
      [1100] => &integer(2200)
    }
    array(3)
    {
      [7] => &integer(14)
      [11] => &integer(22)
      [1100] => &integer(2200)
    }
    @PHP/standard/array/array_intersect_key.php: SUCCEEDED
    @PHP/standard/array/array_sum.php: SUCCEEDED
    @PHP/standard/array/array_walk_recursive.php: SUCCEEDED
    @PHP/standard/array/bug12776.php: SUCCEEDED
    @PHP/standard/array/bug14580.php: SUCCEEDED
    @PHP/standard/array/bug20381.php: SUCCEEDED
    @PHP/standard/array/bug20865.php: SUCCEEDED
    @PHP/standard/array/bug21182.php: SUCCEEDED
    @PHP/standard/array/bug21918.php: SUCCEEDED
    @PHP/standard/array/bug21998.php: SUCCEEDED
    @PHP/standard/array/bug22088.php: SUCCEEDED
    @PHP/standard/array/bug22463.php: SUCCEEDED
    @PHP/standard/array/bug23581.php: SUCCEEDED
    @PHP/standard/array/bug23788.php: SUCCEEDED
    @PHP/standard/array/bug24198.php: SUCCEEDED
    @PHP/standard/array/bug24220.php: SUCCEEDED
    @PHP/standard/array/bug24766.php: SUCCEEDED
    @PHP/standard/array/bug24897.php: SUCCEEDED
    @PHP/standard/array/bug24980.php: SUCCEEDED
    @PHP/standard/array/bug25359.php: SUCCEEDED
    @PHP/standard/array/bug25708.php: SUCCEEDED
    @PHP/standard/array/bug25758.php: SUCCEEDED
    @PHP/standard/array/bug26458.php: SUCCEEDED
    @PHP/standard/array/bug28974.php: SUCCEEDED
    @PHP/standard/array/bug29493.php: SUCCEEDED
    @PHP/standard/array/bug30266.php: SUCCEEDED
    @PHP/standard/array/bug30833.php: SUCCEEDED
    @PHP/standard/array/bug31158.php: SUCCEEDED
    @PHP/standard/array/bug31213.php: SUCCEEDED
    @PHP/standard/array/bug32021.php: SUCCEEDED
    @PHP/standard/array/bug33382.php: SUCCEEDED
    @PHP/standard/array/bug33989.php: SUCCEEDED
    @PHP/standard/array/bug34227.php: SUCCEEDED
    @PHP/standard/array/bug34982.php: SUCCEEDED
    @PHP/standard/array/bug35014.php: SUCCEEDED
    @PHP/standard/array/bug35022.php: SUCCEEDED
    @PHP/standard/array/bug35821.php: SUCCEEDED
    @PHP/standard/array/count_recursive.php: SUCCEEDED
    @PHP/standard/array/locale_sort.php: SUCCEEDED
    @PHP/standard/array/range.php: SUCCEEDED
    @PHP/standard/assert/assert.php: SUCCEEDED
    @PHP/standard/general_functions/001.php: SUCCEEDED
    @PHP/standard/general_functions/002.php: SUCCEEDED
    @PHP/standard/general_functions/003.php: SUCCEEDED
    @PHP/standard/general_functions/004.php: SUCCEEDED
    @PHP/standard/general_functions/005.php: SUCCEEDED
    @PHP/standard/general_functions/006.php: SUCCEEDED
    @PHP/standard/general_functions/007.php: SUCCEEDED
    @PHP/standard/general_functions/009.php: SUCCEEDED
    @PHP/standard/general_functions/bug25038.php: SUCCEEDED
    @PHP/standard/general_functions/bug27678.php: SUCCEEDED
    @PHP/standard/general_functions/bug29038.php: SUCCEEDED
    @PHP/standard/general_functions/bug31190.php: SUCCEEDED
    @PHP/standard/general_functions/bug32647.php: SUCCEEDED
    @PHP/standard/general_functions/bug35229.php: SUCCEEDED
    @PHP/standard/general_functions/is_resource.php: SUCCEEDED
    @PHP/standard/math/abs.php: SUCCEEDED
    @PHP/standard/math/bug24142.php: SUCCEEDED
    @PHP/standard/math/bug25694.php: SUCCEEDED
    @PHP/standard/math/bug27646.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    double(INF-INF)
    'd:-INF;'
    double(INF-INF)
    double(INF-INF)
    'd:INF;'
    double(INF-INF)
    double(NaNInfini)
    'd:NAN;'
    double(NaNInfini)
    double(-Infinity)
    'd:-INF;'
    double(-Infinity)
    double(Infinity)
    'd:INF;'
    double(Infinity)
    double(NaN)
    'd:NAN;'
    double(NaN)
    @PHP/standard/math/bug30069.php: SUCCEEDED
    @PHP/standard/math/bug30695.php: SUCCEEDED
    @PHP/standard/math/floorceil.php: SUCCEEDED
    @PHP/standard/math/hexdec.php: SUCCEEDED
    @PHP/standard/math/log.php: SUCCEEDED
    @PHP/standard/math/pow.php: SUCCEEDED
    @PHP/standard/math/round.php: SUCCEEDED
    @PHP/standard/reg/001.php: SUCCEEDED
    @PHP/standard/reg/002.php: SUCCEEDED
    @PHP/standard/reg/003.php: SUCCEEDED
    @PHP/standard/reg/004.php: SUCCEEDED
    @PHP/standard/reg/005.php: SUCCEEDED
    @PHP/standard/reg/006.php: SUCCEEDED
    @PHP/standard/reg/007.php: SUCCEEDED
    @PHP/standard/reg/008.php: SUCCEEDED
    @PHP/standard/reg/009.php: SUCCEEDED
    @PHP/standard/reg/010.php: SUCCEEDED
    @PHP/standard/reg/011.php: SUCCEEDED
    @PHP/standard/reg/012.php: SUCCEEDED
    @PHP/standard/reg/013.php: SUCCEEDED
    @PHP/standard/reg/014.php: SUCCEEDED
    @PHP/standard/reg/015.php: SUCCEEDED
    @PHP/standard/reg/016.php: SUCCEEDED
    @PHP/standard/serialize/001.php: SUCCEEDED
    @PHP/standard/serialize/002.php: SUCCEEDED
    @PHP/standard/serialize/003.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    d:100;
    double(100.0000000000)
    
    d:51999999999999996980101120;
    double(51999999999999996980101120.0000000000)
    
    d:8.9999999999999995265585574287341141808127531476202420890331268310546875E-9;
    double(0.0000000090)
    d:100;
    double(100.0000000000)
    
    d:5.2000000000000006E+25;
    double(52000000000000000000000000.0000000000)
    
    d:9.0000000000000045E-09;
    double(0.0000000090)
    @PHP/standard/serialize/004.php: SUCCEEDED
    @PHP/standard/serialize/005.php: SUCCEEDED
    @PHP/standard/serialize/006.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    'O:3:"´┐Ż":1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    object
    {
      '´┐Ż' => '´┐Ż'
    }
    'a:1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    array
    {
      '´┐Ż' => '´┐Ż'
    }
    'O:3:"´┐Ż":1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    object
    {
      'ďż˝' => 'ďż˝'
    }
    'a:1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    array
    {
      'ďż˝' => 'ďż˝'
    }
    @PHP/standard/serialize/bug14293.php: SUCCEEDED
    @PHP/standard/serialize/bug21957.php: SUCCEEDED
    @PHP/standard/serialize/bug23298.php: SUCCEEDED
    @PHP/standard/serialize/bug24063.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0.1 0.1
    0.01 0.01
    0.001 0.001
    0.0001 0.0001
    1.0E-5 1.0E-5
    1.0E-6 1.0E-6
    1.0E-7 1.0E-7
    1.0E-8 1.0E-8
    1.0E-9 1.0E-9
    0.1 0.1
    0.01 0.01
    0.001 0.001
    0.0001 0.0001
    1E-05 1E-05
    1E-06 1E-06
    1E-07 1E-07
    1E-08 1E-08
    1E-09 1E-09
    @PHP/standard/serialize/bug25378.php: SUCCEEDED
    @PHP/standard/serialize/bug26762.php: SUCCEEDED
    @PHP/standard/serialize/bug27469.php: SUCCEEDED
    @PHP/standard/serialize/bug28325.php: SUCCEEDED
    @PHP/standard/serialize/bug30234.php: SUCCEEDED
    @PHP/standard/serialize/bug31402.php: SUCCEEDED
    @PHP/standard/serialize/bug31442.php: SUCCEEDED
    @PHP/standard/strings/add-and-stripcslashes.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    kaboemkara!
    foo\b\a\r\b\az
    \f\o\o\[ \]
    \zoo['\.']
    \abcd\e\f\g\h\i\j\k\l\m\n\o\pqrstuvwxy\z
    1
    5d
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\standard\strings\__input.txt at expression on line 3, column 1.
    
    kaboemkara!
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\standard\strings\__input.txt at expression on line 5, column 1.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\standard\strings\__input.txt at expression on line 6, column 1.
    
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\standard\strings\__input.txt at expression on line 8, column 1.
    
    1
    5d
    @PHP/standard/strings/add-and-stripslashes.php: SUCCEEDED
    @PHP/standard/strings/basename.php: SUCCEEDED
    @PHP/standard/strings/bin2hex.php: SUCCEEDED
    @PHP/standard/strings/bug20108.php: SUCCEEDED
    @PHP/standard/strings/bug20169.php: SUCCEEDED
    @PHP/standard/strings/bug20261.php: SUCCEEDED
    @PHP/standard/strings/bug20927.php: SUCCEEDED
    @PHP/standard/strings/bug21338.php: SUCCEEDED
    @PHP/standard/strings/bug21453.php: SUCCEEDED
    @PHP/standard/strings/bug21730.php: SUCCEEDED
    @PHP/standard/strings/bug21744.php: SUCCEEDED
    @PHP/standard/strings/bug22008.php: SUCCEEDED
    @PHP/standard/strings/bug22187.php: SUCCEEDED
    @PHP/standard/strings/bug22224.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      0 => 
      object
      {
      }
      1 => 
      object
      {
      }
    }
    @PHP/standard/strings/bug22227.php: SUCCEEDED
    @PHP/standard/strings/bug22904.php: SUCCEEDED
    @PHP/standard/strings/bug23650.php: SUCCEEDED
    @PHP/standard/strings/bug23894.php: SUCCEEDED
    @PHP/standard/strings/bug24098.php: SUCCEEDED
    @PHP/standard/strings/bug24208.php: SUCCEEDED
    @PHP/standard/strings/bug24281.php: SUCCEEDED
    @PHP/standard/strings/bug25671.php: SUCCEEDED
    @PHP/standard/strings/bug25707.php: SUCCEEDED
    @PHP/standard/strings/bug26878.php: SUCCEEDED
    @PHP/standard/strings/bug26973.php: SUCCEEDED
    @PHP/standard/strings/bug27276.php: SUCCEEDED
    @PHP/standard/strings/bug27278.php: SUCCEEDED
    @PHP/standard/strings/bug27295.php: SUCCEEDED
    @PHP/standard/strings/bug27457.php: SUCCEEDED
    @PHP/standard/strings/bug27675.php: SUCCEEDED
    @PHP/standard/strings/bug28386.php: SUCCEEDED
    @PHP/standard/strings/bug33076.php: SUCCEEDED
    @PHP/standard/strings/chr_ord.php: SUCCEEDED
    @PHP/standard/strings/chunk_split.php: SUCCEEDED
    @PHP/standard/strings/count_chars.php: SUCCEEDED
    @PHP/standard/strings/crc32.php: SUCCEEDED
    @PHP/standard/strings/explode.php: SUCCEEDED
    @PHP/standard/strings/implode.php: SUCCEEDED
    @PHP/standard/strings/md5.php: SUCCEEDED
    @PHP/standard/strings/md5raw.php: SUCCEEDED
    @PHP/standard/strings/nl2br.php: SUCCEEDED
    @PHP/standard/strings/sha1.php: SUCCEEDED
    @PHP/standard/strings/sha1raw.php: SUCCEEDED
    @PHP/standard/strings/sprintf_f.php: SUCCEEDED
    @PHP/standard/strings/strcspn.php: SUCCEEDED
    @PHP/standard/strings/strings001.php: SUCCEEDED
    @PHP/standard/strings/strpos.php: SUCCEEDED
    @PHP/standard/strings/strrev.php: SUCCEEDED
    @PHP/standard/strings/strripos.php: SUCCEEDED
    @PHP/standard/strings/strrpos.php: SUCCEEDED
    @PHP/standard/strings/strspn.php: SUCCEEDED
    @PHP/standard/strings/strstr.php: SUCCEEDED
    @PHP/standard/strings/strtoupper.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    cfbfbdcfbfbdcfbfbd
    cfafbdcfafbdcfafbd
    @PHP/standard/strings/strtr.php: SUCCEEDED
    @PHP/standard/strings/strval.php: SUCCEEDED
    @PHP/standard/strings/str_repeat.php: SUCCEEDED
    @PHP/standard/strings/str_shuffle.php: SUCCEEDED
    @PHP/standard/strings/str_word_count.php: SUCCEEDED
    @PHP/standard/strings/substr_count.php: SUCCEEDED
    @PHP/standard/strings/substr_replace.php: SUCCEEDED
    @PHP/standard/strings/wordwrap.php: SUCCEEDED
    @PHP/standard/time/001.php: SUCCEEDED
    @PHP/standard/time/idate.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    U: 1043324459
    Y: 2003
    z: 22
    y: 3
    m: 1
    n: 1
    d: 23
    j: 23
    H: 13
    G: 13
    h: 1
    g: 1
    i: 20
    s: 59
    t: 31
    w: 4
    L: 0
    B: 556
    I: 0
    W: 4
    U: 1043324459
    Y: 2003
    z: 22
    y: 3
    m: 1
    n: 1
    d: 23
    j: 23
    H: 12
    G: 12
    h: 12
    g: 12
    i: 20
    s: 59
    t: 31
    w: 4
    L: 0
    B: 556
    I: 0
    W: 4
    @PHP/strings/001.php: SUCCEEDED
    @PHP/strings/002.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    fprintf test 1:abcde
    20
    printf test 1:simple string
    printf test 2:42
    printf test 3:3.333333
    printf test 4:3.3333333333
    printf test 5:2.50      
    printf test 6:2.50000000
    printf test 7:0000002.50
    printf test 8:<                 foo>
    printf test 9:<bar                 >
    printf test 10: 123456789012345
    printf test 10:<h´┐Żyesterettsjustitiarius>
    printf test 11: 123456789012345678901234567890
    printf test 11:<    h´┐Żyesterettsjustitiarius>
    printf test 12:-12.34
    printf test 13:  -12
    printf test 14:@
    printf test 15:10101010
    printf test 16:aa
    printf test 17:AA
    printf test 18:        10101010
    printf test 19:              aa
    printf test 20:              AA
    printf test 21:0000000010101010
    printf test 22:00000000000000aa
    printf test 23:00000000000000AA
    printf test 24:abcde
    printf test 25:gazonk
    printf test 26:2 1
    printf test 27:3 1 2
    printf test 28:02  1
    printf test 29:2   1
    printf test 30:x
    vprintf test 1:2   1
    fprintf test 1:abcde
    20
    printf test 1:simple string
    printf test 2:42
    printf test 3:3.333333
    printf test 4:3.3333333333
    printf test 5:2.50      
    printf test 6:2.50000000
    printf test 7:0000002.50
    printf test 8:<                 foo>
    printf test 9:<bar                 >
    printf test 10: 123456789012345
    printf test 10:<h�yesterettsjustitiarius>
    printf test 11: 123456789012345678901234567890
    printf test 11:<    h�yesterettsjustitiarius>
    printf test 12:-12.34
    printf test 13:  -12
    printf test 14:@
    printf test 15:10101010
    printf test 16:aa
    printf test 17:AA
    printf test 18:        10101010
    printf test 19:              aa
    printf test 20:              AA
    printf test 21:0000000010101010
    printf test 22:00000000000000aa
    printf test 23:00000000000000AA
    printf test 24:abcde
    printf test 25:gazonk
    printf test 26:2 1
    printf test 27:3 1 2
    printf test 28:02  1
    printf test 29:2   1
    printf test 30:x
    vprintf test 1:2   1
    @PHP/strings/bug22592.php: SUCCEEDED
    Arrays/array1.php: SUCCEEDED
    Arrays/array_diff_intersect.php: SUCCEEDED
    Arrays/array_diff_intersect2.php: SUCCEEDED
    Arrays/array_diff_intersect3.php: SUCCEEDED
    Arrays/array_map.php: SUCCEEDED
    Arrays/array_merge_recursive.php: SUCCEEDED
    Arrays/array_reduce1.php: SUCCEEDED
    Arrays/array_reduce2.php: SUCCEEDED
    Arrays/array_slice.php: SUCCEEDED
    Arrays/array_sumprod.php: SUCCEEDED
    Arrays/array_unshift.php: SUCCEEDED
    Arrays/array_walk.php: SUCCEEDED
    Arrays/array_walk_recursive.php: SUCCEEDED
    Arrays/multisort.php: SUCCEEDED
    Arrays/optimizations.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    3
    4
    5
    a
    b
    c
    
    Warning: strtolower() expects parameter 1 to be string, array given in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Arrays\__input.txt on line 15
    
    cablo
    3
    4
    5
    a
    b
    c
    array
    cablo
    Arrays/recursion.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    f1:
    array(2) {
      ["a"]=>
      array(5) {
        ["a"]=>
        &array(3) {
          ["a"]=>
          &array(3) {
            ["a"]=>
            *RECURSION*
            [0]=>
            string(1) "y"
            [1]=>
            string(1) "z"
          }
          [0]=>
          string(1) "y"
          [1]=>
          string(1) "z"
        }
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        string(1) "x"
      }
      [0]=>
      string(1) "w"
    }
    f2:
    array(1) {
      ["A"]=>
      &array(2) {
        ["a"]=>
        &array(2) {
          ["a"]=>
          *RECURSION*
          [0]=>
          string(1) "z"
        }
        [0]=>
        string(1) "z"
      }
    }
    f3:
    array(2) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) {
          [0]=>
          *RECURSION*
          [1]=>
          string(1) "z"
        }
        [1]=>
        string(1) "z"
      }
      [1]=>
      string(1) "z"
    }
    f4:
    
    Warning: array_merge_recursive(): recursion detected in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Arrays\__input.txt on line 37
    array(1) {
      ["a"]=>
      &array(3) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
      }
    }
    f5:
    array(1) {
      ["a"]=>
      array(6) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        int(1)
        [4]=>
        int(2)
        [5]=>
        int(3)
      }
    }
    f6:
    array(1) {
      ["a"]=>
      array(2) {
        [0]=>
        string(2) "xx"
        [1]=>
        int(2)
      }
    }
    f7:
    array(1) {
      ["a"]=>
      array(1) {
        ["a"]=>
        array(1) {
          ["a"]=>
          &array(1) {
            ["a"]=>
            &array(1) {
              ["a"]=>
              *RECURSION*
            }
          }
        }
      }
    }
    f1:
    array(2)
    {
      ['a'] => array(5)
      {
        ['a'] => &array(3)
        {
          ['a'] => &array(3) [recursion]
          [0] => string(1) "y"
          [1] => string(1) "z"
        }
        [0] => integer(1)
        [1] => integer(2)
        [2] => integer(3)
        [3] => string(1) "x"
      }
      [0] => string(1) "w"
    }
    f2:
    array(1)
    {
      ['A'] => &array(2)
      {
        ['a'] => &array(2) [recursion]
        [0] => string(1) "z"
      }
    }
    f3:
    array(2)
    {
      [0] => &array(2) [recursion]
      [1] => string(1) "z"
    }
    f4:
    array(1)
    {
      ['a'] => array(6)
      {
        [0] => integer(1)
        [1] => integer(2)
        [2] => integer(3)
        [3] => integer(1)
        [4] => integer(2)
        [5] => integer(3)
      }
    }
    f5:
    array(1)
    {
      ['a'] => array(6)
      {
        [0] => integer(1)
        [1] => integer(2)
        [2] => integer(3)
        [3] => integer(1)
        [4] => integer(2)
        [5] => integer(3)
      }
    }
    f6:
    array(1)
    {
      ['a'] => array(2)
      {
        [0] => string(2) "xx"
        [1] => integer(2)
      }
    }
    f7:
    array(1)
    {
      ['a'] => &array(1)
      {
        ['a'] => &array(1) [recursion]
      }
    }
    Arrays/sort.php: SUCCEEDED
    Arrays/usort.php: SUCCEEDED
    Bugs/class_incompletepart.php: SUCCEEDED
    Bugs/division-by-zero.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    DIVISION
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt on line 6
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt on line 8
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt on line 10
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt on line 12
    bool(false)
    MODULO
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt on line 16
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt on line 18
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt on line 20
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt on line 22
    bool(false)
    DIVISION
    bool(false)
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt at expression on line 10, column 2.
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt at expression on line 12, column 2.
    bool(false)
    MODULO
    bool(false)
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt at expression on line 20, column 2.
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt at expression on line 22, column 2.
    bool(false)
    D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt(6,10): warning PHP0150: Division by zero
    D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt(8,9): warning PHP0150: Division by zero
    D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt(16,10): warning PHP0150: Division by zero
    D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt(18,9): warning PHP0150: Division by zero
    
    Bugs/function-in-unknown-class.php: SUCCEEDED
    Bugs/is_a_null_value.php: SUCCEEDED
    Bugs/preg-named-groups.php: SUCCEEDED
    Bugs/preg-replace-advanced.php: SUCCEEDED
    Bugs/preg-replace-range.php: SUCCEEDED
    Bugs/preg-replace.php: SUCCEEDED
    Bugs/preg-this-dynamic.php: FAILED
    Script hung upNo errorsSuccess
    Expected test outputReal script output
    Unhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---> PHP.Core.Debug+AssertException: Assertion failed: 
       at PHP.Core.Debug.Fail(String message)
       at PHP.Core.Debug.Assert(Boolean condition)
       at PHP.Core.RelativePath.ParseCanonical(String relativePath)
       at PHP.Core.Emit.TransientAssemblyBuilder.Build(String sourceCode, SourceCodeDescriptor descriptor, EvalKinds kind, CompilationContext context, ScriptContext scriptContext, DTypeDesc referringType, NamingContext namingContext, Boolean completeSource)
       at PHP.Core.DynamicCode.EvalInternal(String prefix, String code, String suffix, EvalKinds kind, ScriptContext scriptContext, Dictionary`2 localVariables, DObject self, DTypeDesc referringType, SourceCodeDescriptor descriptor, Boolean entireFile, NamingContext namingContext)
       at PHP.Core.DynamicCode.Eval(String code, Boolean synthetic, ScriptContext context, Dictionary`2 definedVariables, DObject self, DTypeDesc referringType, String callerRelativeSourcePath, Int32 line, Int32 column, Int32 containerId, NamingContext namingContext)
       at PHP.Library.PerlRegExp.Evaluator.ReplaceCodeExecute(Match m)
       at System.Text.RegularExpressions.RegexReplacement.Replace(MatchEvaluator evaluator, Regex regex, String input, Int32 count, Int32 startat)
       at System.Text.RegularExpressions.Regex.Replace(String input, MatchEvaluator evaluator, Int32 count)
       at PHP.Library.PerlRegExp.ReplaceInternal(DObject self, Dictionary`2 definedVariables, PerlRegExpConverter converter, PhpCallback callback, String str, Int32 limit, SourceCodeDescriptor sourceCodeDesc, Int32& count)
       at PHP.Library.PerlRegExp.SimpleReplace(DObject self, Dictionary`2 definedVariables, Object pattern, String replacement, PhpCallback callback, Object data, Int32 limit, SourceCodeDescriptor descriptor, Int32& count)
       at PHP.Library.PerlRegExp.Replace(DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, PhpCallback callback, Object data, Int32 limit, Int32& count)
       at PHP.Library.PerlRegExp.Replace(DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, Object data)
       at PHP.Dynamic.PhpNetClassLibrary.preg_replace(Object , PhpStack )
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <__input.txt>.a.a(ScriptContext ) in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt:line 16
       at <__input.txt>.a.<Mediator>(ScriptContext )
       at <__input.txt>.a.a(Object instance, PhpStack stack)
       at <__input.txt>.<Script>.<Main>(ScriptContext <context>, Dictionary`2 <locals>, DObject , DTypeDesc , Boolean ) in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt:line 19
       at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)
       at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)
       --- End of inner exception stack trace ---
       at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)
       at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)
       at <Global>.Run(String[] )
    
    Bugs/preg-this-dynamic2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    foo: ahoj
    foo: lidi
    foo: rozkladame
    foo: ahoj
    foo: lidi
    foo: rozkladame
    foo: ahoj
    foo: lidi
    foo: rozkladame
    
    Notice: Undefined variable: this.
    
    Error: Call to a member function foo() on a non-object.
    Bugs/preg-this.php: SUCCEEDED
    Bugs/preg-ungreedy-bugs.php: SUCCEEDED
    Bugs/preg-unkn.php: SUCCEEDED
    Compiler/abstracts.php: SUCCEEDED
    Compiler/assignments.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ---1---1float(-1.5)
    float(2.5)
    float(0.83333333333333)
    int(6)
    int(8)
    ---2---2float(8.8333333333333)
    float(8.8333333333333)
    float(8.8333333333333)
    int(8)
    int(8)
    ---3---3---4---4---5---5array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [1]=>
      array(1) {
        [2]=>
        array(1) {
          [3]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    ---6---6array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "u"
    }
    array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "v"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    ---7---7array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    ---8---8
    ---1---1double(-1.5)
    double(2.5)
    double(0.833333333333333)
    integer(6)
    integer(8)
    ---2---2double(8.83333333333333)
    double(8.83333333333333)
    double(8.83333333333333)
    integer(8)
    integer(8)
    ---3---3---4---4---5---5array(1)
    {
      [0] => array(1)
      {
        [0] => array(1)
        {
          [0] => array(3)
          {
            [0] => integer(1)
            [1] => integer(2)
            [2] => integer(3)
          }
        }
      }
    }
    array(1)
    {
      [0] => array(1)
      {
        [0] => array(1)
        {
          [0] => array(3)
          {
            [0] => integer(1)
            [1] => integer(2)
            [2] => integer(3)
          }
        }
      }
    }
    array(1)
    {
      [1] => array(1)
      {
        [2] => array(1)
        {
          [3] => array(3)
          {
            [0] => integer(1)
            [1] => integer(2)
            [2] => integer(3)
          }
        }
      }
    }
    ---6---6array(4)
    {
      [0] => integer(1)
      [1] => integer(2)
      [2] => integer(3)
      [3] => string(1) "u"
    }
    array(4)
    {
      [0] => integer(1)
      [1] => integer(2)
      [2] => integer(3)
      [3] => string(1) "v"
    }
    array(5)
    {
      [0] => integer(1)
      [1] => integer(2)
      [2] => integer(3)
      [3] => string(1) "w"
      [4] => string(1) "z"
    }
    array(5)
    {
      [0] => integer(1)
      [1] => integer(2)
      [2] => integer(3)
      [3] => string(1) "w"
      [4] => string(1) "z"
    }
    ---7---7array(1)
    {
      [0] => array(1)
      {
        [0] => array(1)
        {
          [0] => array(1)
          {
            [0] => &integer(10)
          }
        }
      }
    }
    array(1)
    {
      [0] => array(1)
      {
        [0] => array(1)
        {
          [0] => array(1)
          {
            [0] => &integer(10)
          }
        }
      }
    }
    ---8---8
    Compiler/assign_in_call.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    g1:
    f(x)
    u(x)
    'x'
    
    g2:
    f(x)
    u(x)
    'b'
    
    g3:
    f(x)
    u(x)
    'b'
    
    g4:
    f(x)
    u(x)
    'b'
    
    g5:
    f()
    u()
    integer(1)
    
    g6:
    f(3)
    u(3)
    integer(3)
    
    g7:
    f(2)
    u(10)
    integer(10)
    
    g8:
    f(1)
    f(1)
    f(1)
    u(1)
    u()
    u(1)
    
    g9:
    known:
    __get(p) = 0
    __set(p,1)
    f(1)
    unknown:
    __get(p) = 1
    __set(p,3)
    u(3)
    
    g10:
    Done.
    g1:
    f(x)
    u(x)
    'x'
    
    g2:
    f(x)
    u(x)
    'b'
    
    g3:
    f(x)
    u(x)
    'b'
    
    g4:
    f(x)
    u(x)
    'b'
    
    g5:
    f()
    u()
    integer(1)
    
    g6:
    f(3)
    u(3)
    integer(3)
    
    g7:
    f(2)
    u(10)
    integer(10)
    
    g8:
    f(1)
    f(1)
    f(1)
    u(1)
    u()
    u(1)
    
    g9:
    known:
    __get(p) = 0
    __set(p,1)
    __get(p) = 1
    f(1)
    unknown:
    __get(p) = 1
    __set(p,3)
    __get(p) = 3
    u(3)
    
    g10:
    Done.
    Compiler/auto_globals_001.php: SUCCEEDED
    Compiler/auto_globals_002.php: SUCCEEDED
    Compiler/auto_globals_003.php: SUCCEEDED
    Compiler/break_in_global_code.php: SUCCEEDED
    Compiler/chaining_test.php: SUCCEEDED
    Compiler/chain_ending_by_string_index.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        string(1) "f"
      }
    }
    array(1) {
      [0]=>
      string(4) "xubu"
    }
    object(C)#1 (1) {
      ["f"]=>
      string(4) "kuxu"
    }
    string(5) "helxo"
    string(5) "helxo"
    array(1)
    {
      [0] => array(1)
      {
        [0] => string(1) "f"
      }
    }
    array(1)
    {
      [0] => string(4) "bubu"
    }
    
    Warning: A string item used as a reference in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt at expression on line 19, column 1.
    object(C)(1)
    {
      ["f"] => string(4) "kuku"
    }
    
    Warning: A string item used as a reference in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt at expression on line 25, column 1.
    string(5) "hello"
    
    Warning: A string item used as a reference in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt at expression on line 31, column 1.
    string(5) "hello"
    Compiler/continue_in_global_code.php: SUCCEEDED
    Compiler/deep_copy.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array(1) {
      [0]=>
      &array(1) {
        [0]=>
        &array(1) {
          [0]=>
          *RECURSION*
        }
      }
    }
    array(1) {
      [0]=>
      &array(1) {
        [0]=>
        &array(1) {
          [0]=>
          *RECURSION*
        }
      }
    }
    array(2) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) {
          [0]=>
          *RECURSION*
          [1]=>
          int(1)
        }
        [1]=>
        int(1)
      }
      [1]=>
      int(1)
    }
    array(1) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) {
          [0]=>
          *RECURSION*
          [1]=>
          int(1)
        }
        [1]=>
        int(1)
      }
    }
    array(1)
    {
      [0] => &array(1) [recursion]
    }
    array(1)
    {
      [0] => &array(1) [recursion]
    }
    array(2)
    {
      [0] => &array(2) [recursion]
      [1] => integer(1)
    }
    array(1)
    {
      [0] => &array(1) [recursion]
    }
    Compiler/deep_copy_refbox.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Strict Standards: Only variables should be passed by reference in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt on line 42
    array
    {
      0 => integer(1)
    }
    
    Strict Standards: Only variables should be passed by reference in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt on line 45
    array
    {
      0 => integer(1)
    }
    
    Strict Standards: Only variables should be passed by reference in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt on line 49
    array
    {
      0 => integer(1)
    }
    
    Strict Standards: Only variables should be passed by reference in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt on line 52
    array
    {
      0 => integer(1)
    }
    array
    {
      0 => integer(1)
      1 => integer(1)
    }
    array
    {
      0 => integer(1)
      1 => integer(1)
    }
    array
    {
      0 => integer(1)
      1 => integer(1)
    }
    array
    {
      0 => integer(1)
      1 => integer(1)
    }
    Compiler/expr_init.php: SUCCEEDED
    Compiler/foreach1.php: SUCCEEDED
    Compiler/foreach_arrays.php: SUCCEEDED
    Compiler/for_loop.php: SUCCEEDED
    Compiler/function_002.php: SUCCEEDED
    Compiler/function_003.php: SUCCEEDED
    Compiler/function_004.php: SUCCEEDED
    Compiler/function_call.php: SUCCEEDED
    Compiler/if_statement.php: SUCCEEDED
    Compiler/indirect_001.php: SUCCEEDED
    Compiler/indirect_002.php: SUCCEEDED
    Compiler/indirect_003.php: SUCCEEDED
    Compiler/indirect_004.php: SUCCEEDED
    Compiler/indirect_005.php: SUCCEEDED
    Compiler/indirect_007.php: SUCCEEDED
    Compiler/indirect_global.php: SUCCEEDED
    Compiler/inheritance.php: SUCCEEDED
    Compiler/inheritance2.php: SUCCEEDED
    Compiler/isset_unset_001.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Testing x in global code:  <br>
    1 <br>
     <br>
    Testing x (object) in optimized function:  <br>
    1 <br>
     <br>
    Testing x (PhpReference) in optimized function:  <br>
    1 <br>
     <br>
    
    Notice: Undefined variable: y in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt on line 29
    Testing $$x (created at runtime) in optimized function:  <br>
    1 <br>
    Testing x in global code:  <br>
    1 <br>
     <br>
    Testing x (object) in optimized function:  <br>
    1 <br>
     <br>
    Testing x (PhpReference) in optimized function:  <br>
    1 <br>
     <br>
    Testing $$x (created at runtime) in optimized function:  <br>
    1 <br>
    Compiler/null_hints.php: SUCCEEDED
    Compiler/switch.php: SUCCEEDED
    Compiler/ternary_ex.php: SUCCEEDED
    Compiler/typehint_check.php: SUCCEEDED
    Compiler/Inclusions/include2.php: SUCCEEDED
    Compiler/Inclusions/include3.php: SUCCEEDED
    Compiler/Inclusions/include6.php: SUCCEEDED
    Compiler/Inclusions/include_test.php: SUCCEEDED
    Compiler/Inclusions/script.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t01.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t02.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t03.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t04.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t05.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t08.php: SUCCEEDED
    Compiler/PseudoConst/parent.php: SUCCEEDED
    Compiler/PseudoConst/parent2.php: SUCCEEDED
    Compiler/PseudoConst/self.php: SUCCEEDED
    Compiler/PseudoConst/t01.php: SUCCEEDED
    Compiler/PseudoConst/t02.php: SUCCEEDED
    Compiler/PseudoConst/t03.php: SUCCEEDED
    Compiler/PseudoConst/t04.php: SUCCEEDED
    Compiler/PseudoConst/t05.php: SUCCEEDED
    Compiler/PseudoConst/t06.php: SUCCEEDED
    Compiler/PseudoConst/t07.php: SUCCEEDED
    Compiler/PseudoConst/t08.php: SUCCEEDED
    Compiler/PseudoConst/t09.php: SUCCEEDED
    Compiler/PseudoConst/t10.php: SUCCEEDED
    Compiler/PseudoConst/t11.php: SUCCEEDED
    Compiler/PseudoConst/_class_.php: SUCCEEDED
    Compiler/PseudoConst/_function_.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Notice: Undefined variable: a in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\PseudoConst\__input.txt on line 11
    g
    g
    Compiler/Unreachable/t13.php: SUCCEEDED
    DateTime/strftime.php: SUCCEEDED
    DateTime/strtotime1.php: SUCCEEDED
    DateTime/strtotime2.php: SUCCEEDED
    DateTime/strtotime3.php: SUCCEEDED
    DateTime/strtotime4.php: SUCCEEDED
    DateTime/strtotime5.php: SUCCEEDED
    DateTime/time.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    -189388800:-189475200 - 86400
    1964-01-01T00:00:00+0000
    1963-12-31T00:00:00+0000
    1964-06-06
    1963-06-06
    1964-01-06
    1133305200
    -189388800:-189475200 - 86400
    1964-01-01T00:00:00+0000
    1963-12-31T00:00:00+0000
    1964-06-06
    1963-06-06
    1964-01-06
    DateTime/timezones1.php: SUCCEEDED
    FileSystem/basename.php: SUCCEEDED
    FileSystem/basename2.php: SUCCEEDED
    FileSystem/chdir.php: SUCCEEDED
    FileSystem/csv.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    --- write ---
    72
    24
    44
    2
    6
    
    --- read ---
    "hello\n
    world";"aaa""bbb""ccc";"blah blah;";none;"tab\ttab";"space space"\n
    hh'ee;"ss\nsadasdasd s"\n
    """""""""""""""""""""";"""";;"""""";"xxx"""\n
    x\n
    "x\y"\n
    --- write ---
    72
    24
    44
    2
    6
    
    --- read ---
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    FileSystem/date.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <pre>[ARRAY
      [INT (0)] => [STRING: "A --> {PM}"]
      [INT (1)] => [STRING: "B --> {719}"]
      [INT (2)] => [STRING: "C --> {C}"]
      [INT (3)] => [STRING: "D --> {Sat}"]
      [INT (4)] => [STRING: "E --> {E}"]
      [INT (5)] => [STRING: "F --> {March}"]
      [INT (6)] => [STRING: "G --> {17}"]
      [INT (7)] => [STRING: "H --> {17}"]
      [INT (8)] => [STRING: "I --> {0}"]
      [INT (9)] => [STRING: "J --> {J}"]
      [INT (10)] => [STRING: "K --> {K}"]
      [INT (11)] => [STRING: "L --> {0}"]
      [INT (12)] => [STRING: "M --> {Mar}"]
      [INT (13)] => [STRING: "N --> {6}"]
      [INT (14)] => [STRING: "O --> {+0100}"]
      [INT (15)] => [STRING: "P --> {+01:00}"]
      [INT (16)] => [STRING: "Q --> {Q}"]
      [INT (17)] => [STRING: "R --> {R}"]
      [INT (18)] => [STRING: "S --> {th}"]
      [INT (19)] => [STRING: "U --> {984240978}"]
      [INT (20)] => [STRING: "V --> {V}"]
      [INT (21)] => [STRING: "W --> {10}"]
      [INT (22)] => [STRING: "X --> {X}"]
      [INT (23)] => [STRING: "Y --> {2001}"]
      [INT (24)] => [STRING: "Z --> {3600}"]
      [INT (25)] => [STRING: "a --> {pm}"]
      [INT (26)] => [STRING: "b --> {b}"]
      [INT (27)] => [STRING: "c --> {2001-03-10T17:16:18+01:00}"]
      [INT (28)] => [STRING: "d --> {10}"]
      [INT (29)] => [STRING: "e --> {Europe/Prague}"]
      [INT (30)] => [STRING: "f --> {f}"]
      [INT (31)] => [STRING: "g --> {5}"]
      [INT (32)] => [STRING: "h --> {05}"]
      [INT (33)] => [STRING: "i --> {16}"]
      [INT (34)] => [STRING: "j --> {10}"]
      [INT (35)] => [STRING: "k --> {k}"]
      [INT (36)] => [STRING: "l --> {Saturday}"]
      [INT (37)] => [STRING: "m --> {03}"]
      [INT (38)] => [STRING: "n --> {3}"]
      [INT (39)] => [STRING: "o --> {2001}"]
      [INT (40)] => [STRING: "p --> {p}"]
      [INT (41)] => [STRING: "q --> {q}"]
      [INT (42)] => [STRING: "r --> {Sat, 10 Mar 2001 17:16:18 +0100}"]
      [INT (43)] => [STRING: "s --> {18}"]
      [INT (44)] => [STRING: "t --> {31}"]
      [INT (45)] => [STRING: "u --> {000000}"]
      [INT (46)] => [STRING: "v --> {v}"]
      [INT (47)] => [STRING: "w --> {6}"]
      [INT (48)] => [STRING: "x --> {x}"]
      [INT (49)] => [STRING: "y --> {01}"]
      [INT (50)] => [STRING: "z --> {68}"]
    ]</pre>
    <pre>[ARRAY
      [INT (0)] => [STRING: "A --> {PM}"]
      [INT (1)] => [STRING: "B --> {719}"]
      [INT (2)] => [STRING: "C --> {C}"]
      [INT (3)] => [STRING: "D --> {Sat}"]
      [INT (4)] => [STRING: "E --> {E}"]
      [INT (5)] => [STRING: "F --> {March}"]
      [INT (6)] => [STRING: "G --> {17}"]
      [INT (7)] => [STRING: "H --> {17}"]
      [INT (8)] => [STRING: "I --> {0}"]
      [INT (9)] => [STRING: "J --> {J}"]
      [INT (10)] => [STRING: "K --> {K}"]
      [INT (11)] => [STRING: "L --> {0}"]
      [INT (12)] => [STRING: "M --> {Mar}"]
      [INT (13)] => [STRING: "N --> {6}"]
      [INT (14)] => [STRING: "O --> {+0100}"]
      [INT (15)] => [STRING: "P --> {+01:00}"]
      [INT (16)] => [STRING: "Q --> {Q}"]
      [INT (17)] => [STRING: "R --> {R}"]
      [INT (18)] => [STRING: "S --> {th}"]
      [INT (19)] => [STRING: "U --> {984240978}"]
      [INT (20)] => [STRING: "V --> {V}"]
      [INT (21)] => [STRING: "W --> {10}"]
      [INT (22)] => [STRING: "X --> {X}"]
      [INT (23)] => [STRING: "Y --> {2001}"]
      [INT (24)] => [STRING: "Z --> {3600}"]
      [INT (25)] => [STRING: "a --> {pm}"]
      [INT (26)] => [STRING: "b --> {b}"]
      [INT (27)] => [STRING: "c --> {2001-03-10T17:16:18+01:00}"]
      [INT (28)] => [STRING: "d --> {10}"]
      [INT (29)] => [STRING: "e --> {Europe/Prague}"]
      [INT (30)] => [STRING: "f --> {f}"]
      [INT (31)] => [STRING: "g --> {5}"]
      [INT (32)] => [STRING: "h --> {05}"]
      [INT (33)] => [STRING: "i --> {16}"]
      [INT (34)] => [STRING: "j --> {10}"]
      [INT (35)] => [STRING: "k --> {k}"]
      [INT (36)] => [STRING: "l --> {Saturday}"]
      [INT (37)] => [STRING: "m --> {03}"]
      [INT (38)] => [STRING: "n --> {3}"]
      [INT (39)] => [STRING: "o --> {2001}"]
      [INT (40)] => [STRING: "p --> {p}"]
      [INT (41)] => [STRING: "q --> {q}"]
      [INT (42)] => [STRING: "r --> {Sat, 10 Mar 2001 17:16:18 +0100}"]
      [INT (43)] => [STRING: "s --> {18}"]
      [INT (44)] => [STRING: "t --> {31}"]
      [INT (45)] => [STRING: "u --> {u}"]
      [INT (46)] => [STRING: "v --> {v}"]
      [INT (47)] => [STRING: "w --> {6}"]
      [INT (48)] => [STRING: "x --> {x}"]
      [INT (49)] => [STRING: "y --> {01}"]
      [INT (50)] => [STRING: "z --> {68}"]
    ]</pre>
    FileSystem/date2.php: SUCCEEDED
    FileSystem/date3.php: SUCCEEDED
    FileSystem/date_unix.php: SUCCEEDED
    FileSystem/dirname.php: SUCCEEDED
    FileSystem/dirname2.php: SUCCEEDED
    FileSystem/disk_free_space.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    119 GB
    Drive C: 216 GB
    Drive D: 119 GB
    Drive E: 196 GB
    Drive F: 
    Warning: disk_free_space(): The device is not ready.
     in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt on line 14
    false
    119 GB
    Drive C: 216 GB
    Drive D: 119 GB
    Drive E: 196 GB
    Drive F: false
    FileSystem/disk_total_space.php: SUCCEEDED
    FileSystem/fgets.php: SUCCEEDED
    FileSystem/file.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <pre>[ARRAY
      [INT (0)] => [STRING: "this is a file with one EOLN
    "]
    ]</pre>
    <pre>[ARRAY
      [INT (0)] => [STRING: ""]
      [INT (1)] => [STRING: "This is a file with two EOLNs. First line is empty."]
    ]</pre>
    <pre>[ARRAY
      [INT (0)] => [STRING: "
    "]
      [INT (1)] => [STRING: "This is a file with two EOLNs. First line is empty.
    "]
    ]</pre>
    <pre>[ARRAY
      [INT (0)] => [STRING: "This is a file with two EOLNs. First line is empty."]
    ]</pre>
    <pre>[ARRAY
      [INT (0)] => [STRING: "this is a file WITHOUT an "end-of-line""]
    ]</pre>
    Line #<b>130</b> : &lt;/html&gt;
    <br />
    [this is a file with one EOLN{\n}
    ]
    <pre>[ARRAY
      [INT (0)] => [STRING: "this is a file with one EOLN
    "]
    ]</pre>
    <pre>[ARRAY
      [INT (0)] => [STRING: ""]
      [INT (1)] => [STRING: "This is a file with two EOLNs. First line is empty."]
    ]</pre>
    <pre>[ARRAY
      [INT (0)] => [STRING: "
    "]
      [INT (1)] => [STRING: "This is a file with two EOLNs. First line is empty.
    "]
    ]</pre>
    <pre>[ARRAY
      [INT (0)] => [STRING: ""]
      [INT (1)] => [STRING: "This is a file with two EOLNs. First line is empty."]
    ]</pre>
    <pre>[ARRAY
      [INT (0)] => [STRING: "this is a file WITHOUT an "end-of-line""]
    ]</pre>
    Line #<b>130</b> : &lt;/html&gt;
    <br />
    [this is a file with one EOLN{\n}
    ]
    FileSystem/filesize.php: SUCCEEDED
    FileSystem/file_exists.php: SUCCEEDED
    FileSystem/file_get_contents.php: SUCCEEDED
    FileSystem/fpassthru.php: SUCCEEDED
    FileSystem/fread.php: SUCCEEDED
    FileSystem/fread1.php: SUCCEEDED
    FileSystem/fread2.php: SUCCEEDED
    FileSystem/fseek.php: SUCCEEDED
    FileSystem/fsockopen.php: SUCCEEDED
    FileSystem/ftell.php: SUCCEEDED
    FileSystem/is_dir.php: SUCCEEDED
    FileSystem/is_executable.php: SUCCEEDED
    FileSystem/pathinfo.php: SUCCEEDED
    FileSystem/popen.php: SUCCEEDED
    FileSystem/readdir.php: SUCCEEDED
    FileSystem/readfile.php: SUCCEEDED
    FileSystem/readline.php: SUCCEEDED
    FileSystem/realpath.php: SUCCEEDED
    FileSystem/scandir.php: SUCCEEDED
    FileSystem/stat.php: SUCCEEDED
    FileSystem/stream_context_set_option.php: SUCCEEDED
    FileSystem/stream_copy_to_stream.php: SUCCEEDED
    FileSystem/stream_copy_to_stream2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <p>Read <b>rb</b>, Write <b>wb</b>
    
    
    COPIED: <b>9897</b>
    <p>Read <b>rb</b>, Write <b>wt</b>
    
    
    COPIED: <b>9915</b>
    <p>Read <b>rb</b>, Write <b>wb</b>
    
    
    COPIED: <b>9915</b>
    <p>Read <b>rb</b>, Write <b>wt</b>
    
    
    COPIED: <b>9897</b>
    FileSystem/testinc.php: SUCCEEDED
    FileSystem/touch.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Warning: touch(): Utime failed: No such file or directory in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt on line 8
    Sorry Could Not change modification time of touch.txt
    Warning: touch(): Utime failed: No such file or directory in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt on line 14
    
    Warning: touch(): Utime failed: No such file or directory in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt on line 16
    
    Warning: touch(): Utime failed: No such file or directory in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt on line 17
    <pre>[ARRAY
      [INT (0)] => [STRING: "January 24, 2010; [12:09:12] (12h) ctime test.txt (1264331352)"]
      [INT (1)] => [STRING: "January 24, 2010; [12:09:12] (12h) mtime test.txt (1264331352)"]
      [INT (2)] => [STRING: "January 24, 2010; [12:09:12] (12h) ctime touch.txt (1264331352)"]
      [INT (3)] => [STRING: "January 24, 2010; [12:09:12] (12h) mtime touch.txt (1264331352)"]
      [INT (4)] => [STRING: "January 24, 2010; [12:09:12] (12h) atime touch.txt (1264331352)"]
      [INT (5)] => [STRING: "January 24, 2010; [12:09:12] (12h) mtime summer.txt (1264331352)"]
      [INT (6)] => [STRING: "January 24, 2010; [12:09:12] (12h) mtime winter.txt (1264331352)"]
    ]</pre>
    Warning: touch(): Unable to access (D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\touch.txt): Permission denied in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 8, column 5.
    Sorry Could Not change modification time of touch.txt
    Warning: touch(): Unable to access (D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\touch.txt): Permission denied in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 14, column 1.
    
    Warning: touch(): Unable to access (D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\winter.txt): Permission denied in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 16, column 1.
    
    Warning: touch(): Unable to access (D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\summer.txt): Permission denied in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 17, column 1.
    <pre>[ARRAY
      [INT (0)] => [STRING: "January 24, 2010; [13:09:12] (13h) ctime test.txt (1264334952)"]
      [INT (1)] => [STRING: "January 24, 2010; [13:09:12] (13h) mtime test.txt (1264334952)"]
      [INT (2)] => [STRING: "January 24, 2010; [13:09:12] (13h) ctime touch.txt (1264334952)"]
      [INT (3)] => [STRING: "January 24, 2010; [13:09:12] (13h) mtime touch.txt (1264334952)"]
      [INT (4)] => [STRING: "January 24, 2010; [13:09:12] (13h) atime touch.txt (1264334952)"]
      [INT (5)] => [STRING: "January 24, 2010; [13:09:12] (13h) mtime summer.txt (1264334952)"]
      [INT (6)] => [STRING: "January 24, 2010; [13:09:12] (13h) mtime winter.txt (1264334952)"]
    ]</pre>
    Math/abs.php: SUCCEEDED
    Math/atan2.php: SUCCEEDED
    Math/base_convert.php: SUCCEEDED
    Math/bindec.php: SUCCEEDED
    Math/ceil.php: SUCCEEDED
    Math/cos.php: SUCCEEDED
    Math/decbin.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <pre>
    [double: 2294967295]
    10001000110010100110101111111111
    [double: 4294967296]
    0
    [double: 8589934590]
    11111111111111111111111111111110
    [double: 8589934590]
    11111111111111111111111111111110
    [double: 8589934591]
    11111111111111111111111111111111
    [Int: 1000.000.000.000]
    11010100101001010001000000000000
    <hr>(-1, -5435, 2.14, 0, 26)
    11111111111111111111111111111111
    11111111111111111110101011000101
    10
    0
    11010 
    </pre>
    <pre>
    [???: 2294967295]
    10001000110010100110101111111111
    [???: 4294967296]
    0
    [???: 8589934590]
    11111111111111111111111111111110
    [???: 8589934590]
    11111111111111111111111111111110
    [???: 8589934591]
    11111111111111111111111111111111
    [Int: 1000.000.000.000]
    11010100101001010001000000000000
    <hr>(-1, -5435, 2.14, 0, 26)
    11111111111111111111111111111111
    11111111111111111110101011000101
    10
    0
    11010 
    </pre>
    Math/dechex.php: SUCCEEDED
    Math/decoct.php: SUCCEEDED
    Math/deg2rad.php: SUCCEEDED
    Math/exp.php: SUCCEEDED
    Math/floor.php: SUCCEEDED
    Math/fmod.php: SUCCEEDED
    Math/hexdec.php: SUCCEEDED
    Math/max.php: SUCCEEDED
    Math/min.php: SUCCEEDED
    Math/modulo_warn.php: SUCCEEDED
    Math/octdec.php: SUCCEEDED
    Math/pow.php: SUCCEEDED
    Math/rad2deg.php: SUCCEEDED
    Math/round.php: SUCCEEDED
    Math/sin.php: SUCCEEDED
    Math/sqrt.php: SUCCEEDED
    Math/tan.php: SUCCEEDED
    Math/uniqid.php: SUCCEEDED
    Misc/calendar_extension.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0
    0
    2375840
    0
    14
    32
    2
    There are 31 days in August 2003
    There are 28 days in February 2003
    There are 29 days in February 2004
    There are 31 days in December 2034
    1748326
    1748324
    374867
    0
    322f32322f35373633
    ebe120e7f9e5ef20e4faf9f1e2
    ebe120e7f9e5ef20e427faf9f1e2
    ebe120e7f9e5ef20e420e0ecf4e9ed20faf9f1e2
    ebe120e7f9e5ef20e42720e0ecf4e9ed20faf9f1e2
    eb22e120e7f9e5ef20e4faf9f122e2
    e12720e7f9e5ef20e4faf9f122e2
    e12720e7f9e5ef20e427faf9f122e2
    e12720e7f9e5ef20e420e0ecf4e9ed20faf9f122e2
    e12720e7f9e5ef20e42720e0ecf4e9ed20faf9f122e2
    Error: Call to undefined function: 'frenchtojd' in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\__input.txt at expression on line 2, column 1.
    Misc/ini_parse.php: SUCCEEDED
    Misc/lexer.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    T_INLINE_HTML
    311 '\r\n'
    T_OPEN_TAG
    368 '&lt;?'
    T_WHITESPACE
    371 ' \r\n\r\n'
    T_FINAL
    345 'final'
    T_WHITESPACE
    371 ' '
    T_CLASS
    353 'class'
    T_WHITESPACE
    371 ' '
    T_STRING
    307 'A'
    T_WHITESPACE
    371 ' \r\n'
        '{'
    T_WHITESPACE
    371 ' \r\n  '
    T_FUNCTION
    334 'function'
    T_WHITESPACE
    371 ' '
    T_STRING
    307 '__get'
        '('
    T_VARIABLE
    309 '$x'
        ')'
    T_WHITESPACE
    371 ' \r\n  '
        '{'
    T_WHITESPACE
    371 ' \r\n    '
    T_VARIABLE
    309 '$x'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_START_HEREDOC
    372 '&lt;&lt;&lt;EOOOOOOOOOOOOOOT\r\n'
    T_ENCAPSED_AND_WHITESPACE
    314 '         &lt;&lt;&lt;hello\r\nEOOOOOOOOOOOOOOt;\r\nEOOOOOOOOOOOOOT;\r\n'
    T_END_HEREDOC
    373 'EOOOOOOOOOOOOOOT'
        ';'
    T_WHITESPACE
    371 '\r\n\r\n    '
        '$'
    T_VARIABLE
    309 '$y'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_ARRAY
    360 'array'
    T_WHITESPACE
    371 ' '
        '('
    T_LNUMBER
    305 '1'
        ','
    T_DNUMBER
    306 '100000000000000'
        ','
    T_DNUMBER
    306 '999999999999999999999999999999999'
        ','
    T_STRING
    307 'true'
        ','
    T_STRING
    307 'false'
        ')'
        ';'
    T_WHITESPACE
    371 '\r\n    '
        '$'
        '{'
        '&quot;'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
    T_DOLLAR_OPEN_CURLY_BRACES
    374 '${'
        '$'
        '{'
    T_CONSTANT_ENCAPSED_STRING
    315 '&quot;xxx&quot;'
        '}'
        '}'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
        '&quot;'
        '}'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_LNUMBER
    305 '1'
        ';'
    T_WHITESPACE
    371 '\r\n    '
        '$'
        '{'
        '&quot;'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
    T_DOLLAR_OPEN_CURLY_BRACES
    374 '${'
        '$'
        '{'
        '&quot;'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
    T_VARIABLE
    309 '$x'
    T_ENCAPSED_AND_WHITESPACE
    314 '-&gt;$$'
    T_VARIABLE
    309 '$x0xx'
        '&quot;'
        '}'
        '}'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
        '&quot;'
        '}'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_LNUMBER
    305 '1'
        ';'
    T_WHITESPACE
    371 '\r\n  '
        '}'
    T_WHITESPACE
    371 ' \r\n'
        '}'
    T_WHITESPACE
    371 '\r\n\r\n'
    T_CLOSE_TAG
    370 '?&gt;'
    '
    '
        '&lt;?'
        ' 
    
    '
        'final'
        ' '
        'class'
        ' '
        'A'
        ' 
    '
        '{'
        ' 
      '
        'function'
        ' '
    258
    258 '
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\__input.txt at expression on line 10, column 7.
    '
        '('
        '$x'
        ')'
        ' 
      '
        '{'
        ' 
        '
        '$x'
        ' '
        '='
        ' '
        '&lt;&lt;&lt;EOOOOOOOOOOOOOOT
    '
        '         &lt;&lt;&lt;'
        'hello'
        '
    '
        'EOOOOOOOOOOOOOOt;
    '
        'EOOOOOOOOOOOOOT;
    '
        'EOOOOOOOOOOOOOOT'
        ';'
        '
    
        '
        '$'
        '$y'
        ' '
        '='
        ' '
        'array'
        ' '
        '('
        '1'
        ','
        '100000000000000'
        ','
        '999999999999999999999999999999999'
        ','
        'true'
        ','
    256
    256 '
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\__input.txt at expression on line 10, column 7.
    '
        ')'
        ';'
        '
        '
        '$'
        '{'
        '&quot;'
        'x'
        '${'
        '$'
        '{'
    -29
    -29 '
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\__input.txt at expression on line 10, column 7.
    '
        '}'
        '}'
        'x'
        '&quot;'
        '}'
        ' '
        '='
        ' '
        '1'
        ';'
        '
        '
        '$'
        '{'
        '&quot;'
        'x'
        '${'
        '$'
        '{'
        '&quot;'
        'x'
        '$x'
        '-&gt;'
        '$'
        '$'
        '$x0xx'
        '&quot;'
        '}'
        '}'
        'x'
        '&quot;'
        '}'
        ' '
        '='
        ' '
        '1'
        ';'
        '
      '
        '}'
        ' 
    '
        '}'
        '
    
    '
        '?&gt;'
    Misc/locale.php: SUCCEEDED
    Misc/output2.php: SUCCEEDED
    Misc/stack_trace.php: FAILED
    Script hung upNo errorsSuccess
    Expected test outputReal script output
    Unhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---> System.IndexOutOfRangeException: Index was outside the bounds of the array.
       at PHP.Core.PhpStackFrame..ctor(ScriptContext context, StackFrame frame, FrameKinds kind)
       at PHP.Core.PhpStackTrace..ctor(ScriptContext context, StackTrace clrTrace)
       at PHP.Core.PhpStackTrace..ctor(ScriptContext context, Int32 skipFrames)
       at PHP.Library.Errors.Backtrace()
       at <stack_trace.inc>.<Script>.j(ScriptContext <context>) in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\stack_trace.inc:line 11
       at <stack_trace.inc>.<Script>.j(Object instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <stack_trace.inc>.<Script>.i(ScriptContext <context>) in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\stack_trace.inc:line 6
       at <stack_trace.inc>.<Script>.i(Object instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <^0>.<Global>.<?0>.h(ScriptContext <context>) in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\__input.txt:line 4
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack, DTypeDesc caller)
       at PHP.Core.PhpCallback.InvokeInternal(Object[] args)
       at PHP.Core.PhpCallback.Invoke(Object[] args)
       at PHP.Library.PhpArrays.Map(PhpCallback map, PhpArray[] arrays)
       at <^1>.<Global>.<?1>.Lambda_1(ScriptContext <context>) in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\__input.txt:line 1
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <__input.txt>.<Script>.f(ScriptContext <context>) in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\__input.txt:line 6
       at <__input.txt>.<Script>.f(Object instance, PhpStack stack)
       at <__input.txt>.<Script>.<Main>(ScriptContext <context>, Dictionary`2 <locals>, DObject , DTypeDesc , Boolean ) in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\__input.txt:line 18
       at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)
       at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)
       --- End of inner exception stack trace ---
       at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)
       at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)
       at <Global>.Run(String[] )
    
    Misc/tokens.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    T_REQUIRE_ONCE = 258,
    T_REQUIRE = 259,
    T_EVAL = 260,
    T_INCLUDE_ONCE = 261,
    T_INCLUDE = 262,
    T_LOGICAL_OR = 263,
    T_LOGICAL_XOR = 264,
    T_LOGICAL_AND = 265,
    T_PRINT = 266,
    T_SR_EQUAL = 267,
    T_SL_EQUAL = 268,
    T_XOR_EQUAL = 269,
    T_OR_EQUAL = 270,
    T_AND_EQUAL = 271,
    T_MOD_EQUAL = 272,
    T_CONCAT_EQUAL = 273,
    T_DIV_EQUAL = 274,
    T_MUL_EQUAL = 275,
    T_MINUS_EQUAL = 276,
    T_PLUS_EQUAL = 277,
    T_BOOLEAN_OR = 278,
    T_BOOLEAN_AND = 279,
    T_IS_NOT_IDENTICAL = 280,
    T_IS_IDENTICAL = 281,
    T_IS_NOT_EQUAL = 282,
    T_IS_EQUAL = 283,
    T_IS_GREATER_OR_EQUAL = 284,
    T_IS_SMALLER_OR_EQUAL = 285,
    T_SR = 286,
    T_SL = 287,
    T_INSTANCEOF = 288,
    T_UNSET_CAST = 289,
    T_BOOL_CAST = 290,
    T_OBJECT_CAST = 291,
    T_ARRAY_CAST = 292,
    T_STRING_CAST = 293,
    T_DOUBLE_CAST = 294,
    T_INT_CAST = 295,
    T_DEC = 296,
    T_INC = 297,
    T_CLONE = 298,
    T_NEW = 299,
    T_EXIT = 300,
    T_IF = 301,
    T_ELSEIF = 302,
    T_ELSE = 303,
    T_ENDIF = 304,
    T_LNUMBER = 305,
    T_DNUMBER = 306,
    T_STRING = 307,
    T_STRING_VARNAME = 308,
    T_VARIABLE = 309,
    T_NUM_STRING = 310,
    T_INLINE_HTML = 311,
    T_CHARACTER = 312,
    T_BAD_CHARACTER = 313,
    T_ENCAPSED_AND_WHITESPACE = 314,
    T_CONSTANT_ENCAPSED_STRING = 315,
    T_ECHO = 316,
    T_DO = 317,
    T_WHILE = 318,
    T_ENDWHILE = 319,
    T_FOR = 320,
    T_ENDFOR = 321,
    T_FOREACH = 322,
    T_ENDFOREACH = 323,
    T_DECLARE = 324,
    T_ENDDECLARE = 325,
    T_AS = 326,
    T_SWITCH = 327,
    T_ENDSWITCH = 328,
    T_CASE = 329,
    T_DEFAULT = 330,
    T_BREAK = 331,
    T_CONTINUE = 332,
    T_GOTO = 333,
    T_FUNCTION = 334,
    T_CONST = 335,
    T_RETURN = 336,
    T_TRY = 337,
    T_CATCH = 338,
    T_THROW = 339,
    T_USE = 340,
    T_GLOBAL = 341,
    T_PUBLIC = 342,
    T_PROTECTED = 343,
    T_PRIVATE = 344,
    T_FINAL = 345,
    T_ABSTRACT = 346,
    T_STATIC = 347,
    T_VAR = 348,
    T_UNSET = 349,
    T_ISSET = 350,
    T_EMPTY = 351,
    T_HALT_COMPILER = 352,
    T_CLASS = 353,
    T_INTERFACE = 354,
    T_EXTENDS = 355,
    T_IMPLEMENTS = 356,
    T_OBJECT_OPERATOR = 357,
    T_DOUBLE_ARROW = 358,
    T_LIST = 359,
    T_ARRAY = 360,
    T_CLASS_C = 361,
    T_METHOD_C = 362,
    T_FUNC_C = 363,
    T_LINE = 364,
    T_FILE = 365,
    T_COMMENT = 366,
    T_DOC_COMMENT = 367,
    T_OPEN_TAG = 368,
    T_OPEN_TAG_WITH_ECHO = 369,
    T_CLOSE_TAG = 370,
    T_WHITESPACE = 371,
    T_START_HEREDOC = 372,
    T_END_HEREDOC = 373,
    T_DOLLAR_OPEN_CURLY_BRACES = 374,
    T_CURLY_OPEN = 375,
    T_PAAMAYIM_NEKUDOTAYIM = 376,
    T_DOUBLE_COLON = 376,
    T_NAMESPACE = 377,
    T_NS_C = 378,
    T_DIR = 379,
    T_NS_SEPARATOR = 380,
    T_INCLUDE = 129,
    T_INCLUDE_ONCE = 130,
    T_EVAL = 131,
    T_REQUIRE = 132,
    T_REQUIRE_ONCE = 133,
    T_LOGICAL_OR = 136,
    T_LOGICAL_XOR = 137,
    T_LOGICAL_AND = 138,
    T_PRINT = 139,
    T_PLUS_EQUAL = 140,
    T_MINUS_EQUAL = 141,
    T_MUL_EQUAL = 142,
    T_DIV_EQUAL = 143,
    T_CONCAT_EQUAL = 144,
    T_MOD_EQUAL = 145,
    T_AND_EQUAL = 146,
    T_OR_EQUAL = 147,
    T_XOR_EQUAL = 148,
    T_SL_EQUAL = 149,
    T_SR_EQUAL = 150,
    T_BOOLEAN_OR = 151,
    T_BOOLEAN_AND = 152,
    T_IS_EQUAL = 153,
    T_IS_NOT_EQUAL = 154,
    T_IS_IDENTICAL = 155,
    T_IS_NOT_IDENTICAL = 156,
    T_IS_SMALLER_OR_EQUAL = 157,
    T_IS_GREATER_OR_EQUAL = 158,
    T_SL = 159,
    T_SR = 160,
    T_INC = 161,
    T_DEC = 162,
    T_NEW = 164,
    T_INSTANCEOF = 165,
    T_CLONE = 167,
    T_LNUMBER = 168,
    T_DNUMBER = 170,
    T_STRING = 171,
    T_STRING_VARNAME = 172,
    T_VARIABLE = 173,
    T_NUM_STRING = 174,
    T_INLINE_HTML = 175,
    T_CHARACTER = 176,
    T_BAD_CHARACTER = 177,
    T_ENCAPSED_AND_WHITESPACE = 178,
    T_CONSTANT_ENCAPSED_STRING = 179,
    T_EXIT = 180,
    T_IF = 181,
    T_ELSEIF = 182,
    T_ELSE = 183,
    T_ENDIF = 184,
    T_ECHO = 185,
    T_DO = 186,
    T_WHILE = 187,
    T_ENDWHILE = 188,
    T_FOR = 189,
    T_ENDFOR = 190,
    T_FOREACH = 191,
    T_ENDFOREACH = 192,
    T_AS = 193,
    T_SWITCH = 194,
    T_ENDSWITCH = 195,
    T_CASE = 196,
    T_DEFAULT = 197,
    T_BREAK = 198,
    T_CONTINUE = 199,
    T_FUNCTION = 200,
    T_CONST = 201,
    T_RETURN = 202,
    T_GLOBAL = 203,
    T_STATIC = 204,
    T_VAR = 205,
    T_UNSET = 206,
    T_ISSET = 207,
    T_EMPTY = 208,
    T_CLASS = 209,
    T_EXTENDS = 210,
    T_OBJECT_OPERATOR = 211,
    T_DOUBLE_ARROW = 212,
    T_LIST = 213,
    T_ARRAY = 214,
    T_CLASS_C = 215,
    T_METHOD_C = 216,
    T_FUNC_C = 217,
    T_LINE = 218,
    T_FILE = 219,
    T_COMMENT = 220,
    T_DOC_COMMENT = 221,
    T_OPEN_TAG = 226,
    T_OPEN_TAG_WITH_ECHO = 227,
    T_CLOSE_TAG = 228,
    T_WHITESPACE = 229,
    T_START_HEREDOC = 230,
    T_END_HEREDOC = 231,
    T_DOLLAR_OPEN_CURLY_BRACES = 232,
    T_CURLY_OPEN = 233,
    T_DOUBLE_COLON = 234,
    T_PAAMAYIM_NEKUDOTAYIM = 234,
    T_TRY = 236,
    T_CATCH = 237,
    T_THROW = 238,
    T_INTERFACE = 239,
    T_IMPLEMENTS = 240,
    T_ABSTRACT = 241,
    T_FINAL = 242,
    T_PRIVATE = 243,
    T_PROTECTED = 244,
    T_PUBLIC = 245,
    T_BOOL_CAST = 285,
    T_INT_CAST = 288,
    T_DOUBLE_CAST = 294,
    T_STRING_CAST = 297,
    T_ARRAY_CAST = 299,
    T_OBJECT_CAST = 300,
    T_UNSET_CAST = 301,
    T_HALT_COMPILER = 351,
    Misc/user_error_handlers.php: SUCCEEDED
    Objects/conditional1.php: SUCCEEDED
    Objects/conditional2.php: SUCCEEDED
    Objects/conditional_base_class.php: SUCCEEDED
    Objects/constant_test.php: SUCCEEDED
    Objects/evaled_parent.php: SUCCEEDED
    Objects/getter_setter_bug28444.php: SUCCEEDED
    Objects/instanceof.php: SUCCEEDED
    Objects/new_via_unknown_ctor.php: SUCCEEDED
    Objects/object_creation_test.php: SUCCEEDED
    Objects/static_field_test.php: SUCCEEDED
    Objects/static_method_test.php: SUCCEEDED
    Objects/sys_class_const.php: SUCCEEDED
    Objects/this2.php: SUCCEEDED
    RegEx/ereg.php: SUCCEEDED
    RegEx/preg_match_unmatched_groups.php: SUCCEEDED
    RegEx/preg_replace_eval.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ab"01300 as"00da sd"0asdsa das asd 11asd a1sd a
    ab"01300 as"00da sd"0(aasdasdkjask,$a,\,\l,a,s,d,a,s,d,k,j,a,s,${120})(ldjaklsdjalk,$l,\,\l,d,j,a,k,l,s,d,j,a,l,${120})djdsa das asd 11asd a1sd a
    ab"01300 as"00da sd"0asdsa das asd 11asd a1sd a
    ab"01300 as"00da sd"0(aasdasdkjask,$a,\,\l,a,s,d,a,s,d,k,j,,,${120})(ldjaklsdjalk,$l,\,\l,d,j,a,k,l,s,d,j,,,${120})djdsa das asd 11asd a1sd a
    RegEx/regexp-sql.php: SUCCEEDED
    RegEx/Perl/cache.php: SUCCEEDED
    RegEx/Perl/grep1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      [3] => string(3) "1.5"
      [6] => string(5) "58.54"
    }
    Notice: preg_grep(): Array to string conversion in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\RegEx\Perl\__input.txt at expression on line 5, column 1.
    array(2)
    {
      [3] => string(3) "1.5"
      [6] => string(5) "58.54"
    }
    RegEx/Perl/grep2.php: SUCCEEDED
    RegEx/Perl/match1.php: SUCCEEDED
    RegEx/Perl/match10.php: SUCCEEDED
    RegEx/Perl/match2.php: SUCCEEDED
    RegEx/Perl/match3.php: SUCCEEDED
    RegEx/Perl/match4.php: SUCCEEDED
    RegEx/Perl/match5.php: SUCCEEDED
    RegEx/Perl/match6.php: SUCCEEDED
    RegEx/Perl/match7.php: SUCCEEDED
    RegEx/Perl/match8.php: SUCCEEDED
    RegEx/Perl/match9.php: SUCCEEDED
    RegEx/Perl/match_all1.php: SUCCEEDED
    RegEx/Perl/match_all2.php: SUCCEEDED
    RegEx/Perl/match_all3.php: SUCCEEDED
    RegEx/Perl/match_all4.php: SUCCEEDED
    RegEx/Perl/match_dollar.php: SUCCEEDED
    RegEx/Perl/overflow.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string("kfkaj +j k45´┐Ż´┐Ż´┐Ż´┐Ż´┐Ż3#$%^&kjakfjkaj|kfj")
    string("kfkaj +j k45�����3#$%^&kjakfjkaj|kfj")
    RegEx/Perl/quote1.php: SUCCEEDED
    RegEx/Perl/quote2.php: SUCCEEDED
    RegEx/Perl/quote3.php: SUCCEEDED
    RegEx/Perl/replace1.php: SUCCEEDED
    RegEx/Perl/replace2.php: SUCCEEDED
    RegEx/Perl/replace3.php: SUCCEEDED
    RegEx/Perl/replace4.php: SUCCEEDED
    RegEx/Perl/replace5.php: SUCCEEDED
    RegEx/Perl/replace6.php: SUCCEEDED
    RegEx/Perl/replace7.php: SUCCEEDED
    RegEx/Perl/replace8.php: SUCCEEDED
    RegEx/Perl/replace9.php: SUCCEEDED
    RegEx/Perl/replace_callback1.php: SUCCEEDED
    RegEx/Perl/replace_callback2.php: SUCCEEDED
    RegEx/Perl/split1.php: SUCCEEDED
    RegEx/Perl/split2.php: SUCCEEDED
    RegEx/Perl/split3.php: SUCCEEDED
    RegEx/Perl/split4.php: SUCCEEDED
    RegEx/Perl/split5.php: SUCCEEDED
    RegEx/Perl/ungreedy.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    aaa
    a
    aaa
    
    a
    aa
    aaa
    aa
    aaa
    aaa
    a
    aaa
    a
    a
    aa
    aaa
    aa
    aaa
    RegEx/Perl/unsuccessful-preg_match_all.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0
    4
    1
    4
    0
    4
    1
    7
    SPL/ArrayAccess_offsetExists.php: SUCCEEDED
    SPL/exceptions.php: SUCCEEDED
    Strings/addcslashes.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    \f\o\o\[ \]
    Issues a Warning:
    // echo addcslashes("zoo['.']", 'z..A');
    // output:  \zoo['\.']
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt at expression on line 4, column 1.
    
    Issues a Warning:
    // echo addcslashes("zoo['.']", 'z..A');
    // output:  \zoo['\.']
    Strings/addslashes.php: SUCCEEDED
    Strings/chunk_split.php: SUCCEEDED
    Strings/concat.php: SUCCEEDED
    Strings/count_chars.php: SUCCEEDED
    Strings/crc32.php: SUCCEEDED
    Strings/crypt.php: SUCCEEDED
    Strings/crypt2.php: SUCCEEDED
    Strings/echo.php: SUCCEEDED
    Strings/explode.php: SUCCEEDED
    Strings/get_html_translation_table.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <hr>[&] => &amp;
    [>] => &gt;
    [<] => &lt;
    ["] => &quot;
    <hr>Hallo &amp; &lt;Frau&gt; &amp; Kr&iuml;&iquest;&frac12;mer
    <hr>[&] => &amp;
    [>] => &gt;
    [<] => &lt;
    ["] => &quot;
    <hr>Hallo &amp; &lt;Frau&gt; &amp; Kr�mer
    Strings/nl2br.php: SUCCEEDED
    Strings/pack.php: SUCCEEDED
    Strings/pos.php: SUCCEEDED
    Strings/runtime-quotes.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    fread = (x''y"z)
    fgets = (x''y"z)
    file[0] = (x''y"z)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    
    Warning: fopen(runtime-quotes2.txt): failed to open stream: Permission denied in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt on line 33
    
    Warning: fwrite() expects parameter 1 to be resource, boolean given in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt on line 35
    fwrite = ()
    
    Warning: fputs() expects parameter 1 to be resource, boolean given in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt on line 38
    fputs = ()
    
    Warning: fclose() expects parameter 1 to be resource, boolean given in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt on line 41
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (x'y"z)
    fgets = (x'y"z)
    file[0] = (x'y"z)
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (a\'b"\\ca\)
    fgets = (a\'b"\\ca\'b"\\c)
    file[0] = (a\'b"\\ca\'b"\\c)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    e'e
    e''e
    e'e
    e'e
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    e'e
    e'e
    e'e
    e'e
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    fread = (x''y"z)
    fgets = (x''y"z)
    file[0] = (x''y"z)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    
    Warning: fopen(): Unable to access (D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\runtime-quotes2.txt): Permission denied in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt at expression on line 33, column 3.
    
    Warning: Cannot convert bool to resource implicitly in a call to function fwrite() in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt at expression on line 35, column 3.
    fwrite = ()
    
    Warning: Cannot convert bool to resource implicitly in a call to function fputs() in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt at expression on line 38, column 3.
    fputs = ()
    
    Warning: Cannot convert bool to resource implicitly in a call to function fclose() in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt at expression on line 41, column 3.
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (x'y"z)
    fgets = (x'y"z)
    file[0] = (x'y"z)
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (a\'b"\\ca\)
    fgets = (a\'b"\\ca\'b"\\c)
    file[0] = (a\'b"\\ca\'b"\\c)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    e'e
    e''e
    e'e
    e'e
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    e'e
    e'e
    e'e
    e'e
    Strings/sprintf.php: SUCCEEDED
    Strings/sprintf2.php: SUCCEEDED
    Strings/strtr.php: SUCCEEDED
    Strings/str_ireplace.php: SUCCEEDED
    Strings/str_word_count.php: SUCCEEDED
    Strings/substr_operations.php: SUCCEEDED
    Strings/wordwrap.php: SUCCEEDED
    Variables/advanced_serialize.php: SUCCEEDED
    Variables/arguments.php: SUCCEEDED
    Variables/bitwise.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "00"
    string(2) "31"
    string(2) "31"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    0
    0
    0
    5
    0
    5
    40
    5
    45
    string(48) "000000000000000000000000000000000000000000000000"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(14) "31323331323331"
    string(2) "30"
    string(14) "31323331323331"
    string(16) "3635343635343536"
    string(2) "30"
    string(16) "3635343635343536"
    string(14) "337a5e8be43d7a"
    string(14) "00002130120201"
    string(48) "337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42"
    string(16) "347d598ce33a7e77"
    string(16) "0200243214040100"
    string(48) "367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42"
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "00"
    string(2) "31"
    string(2) "31"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    0
    -9223372036854775808
    -9223372036854775808
    -9223372036854775803
    0
    -9223372036854775803
    40
    5
    45
    string(48) "000000000000000000000000000000000000000000000000"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(14) "31323331323331"
    string(2) "30"
    string(14) "31323331323331"
    string(16) "3635343635343536"
    string(2) "30"
    string(16) "3635343635343536"
    string(14) "337a5e8be43d7a"
    string(14) "00002130120201"
    string(48) "337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42"
    string(16) "347d598ce33a7e77"
    string(16) "0200243214040100"
    string(48) "367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42"
    Variables/comparisons.php: SUCCEEDED
    Variables/constant.php: SUCCEEDED
    Variables/extract.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    EXTR_PREFIX_ALL
    integer(4)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
      'prefix_non_existent' => integer(1)
    }
    <hr>EXTR_PREFIX_INVALID
    integer(5)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => integer(2)
      'non_existent' => integer(1)
      'prefix_' => integer(1)
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => 'hello'
    }
    <hr>EXTR_PREFIX_SAME
    integer(3)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'non_existent' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>EXTR_PREFIX_IF_EXISTS
    integer(3)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>
    EXTR_PREFIX_ALL
    integer(4)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
      'prefix_non_existent' => integer(1)
    }
    <hr>EXTR_PREFIX_INVALID
    integer(2)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_ad' => integer(2)
      'prefix_non_existent' => integer(1)
    }
    <hr>EXTR_PREFIX_SAME
    integer(4)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'non_existent' => integer(1)
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>EXTR_PREFIX_IF_EXISTS
    integer(3)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>
    Variables/func_get_args.php: SUCCEEDED
    Variables/is_number.php: SUCCEEDED
    Variables/serialize.php: SUCCEEDED
    Variables/unserialize_objects.php: SUCCEEDED
    Variables/var_dumping.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Array
    (
        [0] => 1
        [1] => 
        [2] => 1
        [3] => 1.2
        [4] => 
        [5] => asdas
        [6] => Array
            (
                [0] => 1
            )
    
        [7] => stdClass Object
            (
            )
    
        [8] => Resource id #1
    )
    array(9) {
      [0]=>
      bool(true)
      [1]=>
      bool(false)
      [2]=>
      int(1)
      [3]=>
      float(1.2)
      [4]=>
      NULL
      [5]=>
      string(5) "asdas"
      [6]=>
      array(1) {
        [0]=>
        int(1)
      }
      [7]=>
      object(stdClass)#1 (0) {
      }
      [8]=>
      resource(1) of type (stream)
    }
    array (
      0 => true,
      1 => false,
      2 => 1,
      3 => 1.2,
      4 => NULL,
      5 => 'asdas',
      6 => 
      array (
        0 => 1,
      ),
      7 => 
      stdClass::__set_state(array(
      )),
      8 => NULL,
    )
    array
    (
      [0] => 1
      [1] => 
      [2] => 1
      [3] => 1.2
      [4] => 
      [5] => asdas
      [6] => array
      (
        [0] => 1
      )
      [7] => stdClass object
      (
      )
      [8] => resource id #4
    )
    array(9)
    {
      [0] => bool(true)
      [1] => bool(false)
      [2] => integer(1)
      [3] => double(1.2)
      [4] => NULL
      [5] => string(5) "asdas"
      [6] => array(1)
      {
        [0] => integer(1)
      }
      [7] => object(stdClass)(0)
      {
      }
      [8] => resource(4) of type (stream)
    }
    array
    (
      '0' => true,
      '1' => false,
      '2' => 1,
      '3' => 1.2,
      '4' => NULL,
      '5' => 'asdas',
      '6' => array
      (
        '0' => 1
      ),
      '7' => class stdClass
      {
    
      },
      '8' => NULL
    )
    WorkItems/1285%20overrides.php: SUCCEEDED
    WorkItems/22016.php: SUCCEEDED
    WorkItems/22019.php: SUCCEEDED
    WorkItems/26052.php: SUCCEEDED
    WorkItems/26667%20hash.php: SUCCEEDED
    WorkItems/26681.php: SUCCEEDED
    WorkItems/26691.php: SUCCEEDED
    WorkItems/27377.php: SUCCEEDED
    WorkItems/27492.php: SUCCEEDED
    WorkItems/27838%20json.php: SUCCEEDED
    WorkItems/2787.php: SUCCEEDED
    Xml/005.php: SUCCEEDED
    Xml/006.php: SUCCEEDED
    Xml/007.php: SUCCEEDED
    Xml/008.php: SUCCEEDED
    Xml/009.php: SUCCEEDED
    Xml/011.php: SUCCEEDED
    Xml/013.php: SUCCEEDED
    Xml/017.php: SUCCEEDED
    Xml/018.php: SUCCEEDED
    Xml/019.php: SUCCEEDED
    Xml/020.php: SUCCEEDED
    Xml/021.php: SUCCEEDED
    Xml/025.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
      'foo' => 'foobar'
    }
    array
    {
      'html' => 'http://www.w3.org/1999/xhtml'
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
    }
    array
    {
      'html' => 'http://www.w3.org/1999/xhtml'
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'foo' => 'foobar'
      'baz' => 'foobarbaz'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
    }
    array
    {
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
      'baz' => 'foobarbaz'
      'foo' => 'foobar'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
      'baz' => 'foobarbaz'
      'foo' => 'foobar'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
    }
    array
    {
    }
    Xml/026.php: SUCCEEDED
    Xml/027.php: SUCCEEDED
    Xml/028.php: SUCCEEDED
    Xml/029.php: SUCCEEDED
    Xml/030.php: SUCCEEDED
    Xml/032.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    FALSE
    FALSE
    FALSE
    TRUE
    TRUE
    TRUE
    Xml/033.php: SUCCEEDED
    Xml/bug26384.php: SUCCEEDED
    Xml/bug28721.php: SUCCEEDED
    Xml/bug28817.php: SUCCEEDED
    Xml/bug32615.php: SUCCEEDED
    Xml/bug33853.php: SUCCEEDED
    Xml/bug34276.php: SUCCEEDED
    Xml/bug35342.php: SUCCEEDED
    Xml/bug36756.php: SUCCEEDED
    Xml/bug37277.php: SUCCEEDED
    Xml/dom002.php: SUCCEEDED
    Xml/dom003.php: SUCCEEDED
    Xml/dom006.php: SUCCEEDED
    Xml/dom007.php: SUCCEEDED
    Xml/dom_set_attr_node.php: SUCCEEDED
    Xml/xslt001.php: SUCCEEDED
    Xml/xslt002.php: SUCCEEDED
    Xml/xslt003.php: SUCCEEDED
    Xml/xslt004.php: SUCCEEDED
    Xml/xslt005.php: SUCCEEDED
    Xml/xslt006.php: SUCCEEDED
    Xml/xslt007.php: SUCCEEDED
    Xml/xslt010.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test 10: EXSLT Support
      
      
      Test Date : 0001-12-31Z
        year                 : 1
        leap-year            : false
        month-in-year        : 12
        month-name           : December
        month-abbreviation   : Dec
        week-in-year         : 1
        day-in-year          : 365
        day-in-month         : 31
        day-of-week-in-month : 5
        day-in-week          : 2
        day-name             : Monday
        day-abbreviation     : Mon
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : 3000-01-31
        year                 : 3000
        leap-year            : false
        month-in-year        : 1
        month-name           : January
        month-abbreviation   : Jan
        week-in-year         : 5
        day-in-year          : 31
        day-in-month         : 31
        day-of-week-in-month : 5
        day-in-week          : 6
        day-name             : Friday
        day-abbreviation     : Fri
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : 2000-02-29
        year                 : 2000
        leap-year            : true
        month-in-year        : 2
        month-name           : February
        month-abbreviation   : Feb
        week-in-year         : 9
        day-in-year          : 60
        day-in-month         : 29
        day-of-week-in-month : 5
        day-in-week          : 3
        day-name             : Tuesday
        day-abbreviation     : Tue
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : 9990001-12-31Z
        year                 : 9990001
        leap-year            : false
        month-in-year        : 12
        month-name           : December
        month-abbreviation   : Dec
        week-in-year         : 1
        day-in-year          : 365
        day-in-month         : 31
        day-of-week-in-month : 5
        day-in-week          : 2
        day-name             : Monday
        day-abbreviation     : Mon
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : -0004-02-29
        year                 : -4
        leap-year            : true
        month-in-year        : 2
        month-name           : February
        month-abbreviation   : Feb
        week-in-year         : 9
        day-in-year          : 60
        day-in-month         : 29
        day-of-week-in-month : 5
        day-in-week          : 1
        day-name             : Sunday
        day-abbreviation     : Sun
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
    Test 10: EXSLT Support
    Warning: Cannot find the script or external object that implements prefix 'http://exslt.org/dates-and-times'. in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Xml\__input.txt at expression on line 14, column 3.
    
    Warning: Illegal string offset '-1' in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Phalanger.inc at expression on line 7, column 6.
    Xml/xslt011.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test 11: php:function Support
    
    Warning: XSLTProcessor::transformToXml(): A PHP Object cannot be converted to a XPath-string in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Xml\__input.txt on line 18
    <?xml version="1.0"?>
    foobar - secondArg
    foobar - 
    this is from an external DomDocument
    from the Input Document
    static
    Test 11: php:function Support
    <?xml version="1.0" encoding="utf-8"?>foobar - secondArg
    foobar - 
    this is from an external DomDocument
    from the Input Document
    static
    not a DomNode object
    Xml/xslt012.php: SUCCEEDED
    ================================================ FILE: Testing/Tests/TestLogs/TestLog 2010-08-12.htm ================================================ PHP.NET Compiler test log

    PHP.NET Compiler test log

    (92%) 801 succeeded, 68 failed
    Test ResultCompiler error outputExpected test result
    @PHP/classes/array_access_001.php: SUCCEEDED
    @PHP/classes/array_access_002.php: SUCCEEDED
    @PHP/classes/array_access_003.php: SUCCEEDED
    @PHP/classes/array_access_004.php: SUCCEEDED
    @PHP/classes/array_access_005.php: SUCCEEDED
    @PHP/classes/array_access_006.php: SUCCEEDED
    @PHP/classes/array_access_007.php: SUCCEEDED
    @PHP/classes/array_access_008.php: SUCCEEDED
    @PHP/classes/array_access_009.php: SUCCEEDED
    @PHP/classes/array_access_010.php: SUCCEEDED
    @PHP/classes/array_access_011.php: SUCCEEDED
    @PHP/classes/array_access_013.php: SUCCEEDED
    @PHP/classes/assign_op_property_001.php: SUCCEEDED
    @PHP/classes/autoload_001.php: SUCCEEDED
    @PHP/classes/autoload_002.php: SUCCEEDED
    @PHP/classes/autoload_003.php: SUCCEEDED
    @PHP/classes/autoload_005.php: SUCCEEDED
    @PHP/classes/autoload_006.php: SUCCEEDED
    @PHP/classes/bug23951.php: SUCCEEDED
    @PHP/classes/bug24399.php: SUCCEEDED
    @PHP/classes/bug24445.php: SUCCEEDED
    @PHP/classes/bug26737.php: SUCCEEDED
    @PHP/classes/bug27468.php: SUCCEEDED
    @PHP/classes/bug27504.php: SUCCEEDED
    @PHP/classes/class_example.php: SUCCEEDED
    @PHP/classes/class_stdclass.php: SUCCEEDED
    @PHP/classes/clone_001.php: SUCCEEDED
    @PHP/classes/clone_002.php: SUCCEEDED
    @PHP/classes/clone_003.php: SUCCEEDED
    @PHP/classes/clone_004.php: SUCCEEDED
    @PHP/classes/clone_006.php: SUCCEEDED
    @PHP/classes/constants_scope_001.php: SUCCEEDED
    @PHP/classes/ctor_dtor.php: SUCCEEDED
    @PHP/classes/ctor_dtor_inheritance.php: SUCCEEDED
    @PHP/classes/ctor_name_clash.php: SUCCEEDED
    @PHP/classes/dereferencing_001.php: SUCCEEDED
    @PHP/classes/destructor_and_echo.php: SUCCEEDED
    @PHP/classes/destructor_and_references.php: SUCCEEDED
    @PHP/classes/destructor_inheritance.php: SUCCEEDED
    @PHP/classes/destructor_visibility_003.php: SUCCEEDED
    @PHP/classes/factory_001.php: SUCCEEDED
    @PHP/classes/factory_and_singleton_001.php: SUCCEEDED
    @PHP/classes/factory_and_singleton_002.php: SUCCEEDED
    @PHP/classes/final.php: SUCCEEDED
    @PHP/classes/incdec_property_001.php: SUCCEEDED
    @PHP/classes/incdec_property_002.php: SUCCEEDED
    @PHP/classes/incdec_property_003.php: SUCCEEDED
    @PHP/classes/incdec_property_004.php: SUCCEEDED
    @PHP/classes/inheritance.php: SUCCEEDED
    @PHP/classes/inheritance_002.php: SUCCEEDED
    @PHP/classes/interfaces_001.php: SUCCEEDED
    @PHP/classes/interface_construct.php: SUCCEEDED
    @PHP/classes/interface_doubled.php: SUCCEEDED
    @PHP/classes/interface_implemented.php: SUCCEEDED
    @PHP/classes/iterators_001.php: SUCCEEDED
    @PHP/classes/iterators_002.php: SUCCEEDED
    @PHP/classes/iterators_003.php: SUCCEEDED
    @PHP/classes/iterators_004.php: SUCCEEDED
    @PHP/classes/iterators_006.php: SUCCEEDED
    @PHP/classes/iterators_007.php: SUCCEEDED
    @PHP/classes/object_reference_001.php: SUCCEEDED
    @PHP/classes/private_001.php: SUCCEEDED
    @PHP/classes/private_002.php: SUCCEEDED
    @PHP/classes/private_003.php: SUCCEEDED
    @PHP/classes/private_003b.php: SUCCEEDED
    @PHP/classes/private_004.php: SUCCEEDED
    @PHP/classes/private_004b.php: SUCCEEDED
    @PHP/classes/private_005.php: SUCCEEDED
    @PHP/classes/private_005b.php: SUCCEEDED
    @PHP/classes/private_006.php: SUCCEEDED
    @PHP/classes/private_006b.php: SUCCEEDED
    @PHP/classes/private_007.php: SUCCEEDED
    @PHP/classes/private_007b.php: SUCCEEDED
    @PHP/classes/private_members.php: SUCCEEDED
    @PHP/classes/private_redeclare.php: SUCCEEDED
    @PHP/classes/protected_001.php: SUCCEEDED
    @PHP/classes/protected_001b.php: SUCCEEDED
    @PHP/classes/protected_002.php: SUCCEEDED
    @PHP/classes/serialize_001.php: SUCCEEDED
    @PHP/classes/singleton_001.php: SUCCEEDED
    @PHP/classes/static_properties_001.php: SUCCEEDED
    @PHP/classes/type_hinting_001.php: SUCCEEDED
    @PHP/classes/type_hinting_003.php: SUCCEEDED
    @PHP/classes/visibility_000c.php: SUCCEEDED
    @PHP/classes/visibility_001c.php: SUCCEEDED
    @PHP/classes/visibility_002c.php: SUCCEEDED
    @PHP/classes/visibility_003a.php: SUCCEEDED
    @PHP/classes/visibility_003c.php: SUCCEEDED
    @PHP/classes/visibility_004a.php: SUCCEEDED
    @PHP/classes/visibility_004b.php: SUCCEEDED
    @PHP/classes/visibility_004c.php: SUCCEEDED
    @PHP/classes/visibility_005.php: SUCCEEDED
    @PHP/classes/__call_001.php: SUCCEEDED
    @PHP/classes/__set_data_corrupt.php: SUCCEEDED
    @PHP/classes/__set__get_001.php: SUCCEEDED
    @PHP/classes/__set__get_004.php: SUCCEEDED
    @PHP/classes/__set__get_005.php: SUCCEEDED
    @PHP/date/bug17988.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2002-06-25 12:18:48
    2002-06-25 14:18:48
    2002-06-25 13:18:48
    2002-06-25 12:18:48
    2002-06-25 18:18:48
    2002-06-25 14:18:48
    2002-06-25 14:18:48
    2002-06-25 18:18:48
    2002-06-25 10:18:48
    2002-06-25 17:18:48
    2002-06-25 11:18:48
    2002-06-25 17:48:48
    2002-06-25 10:48:48
    2002-06-25 14:18:48
    2002-06-25 14:18:48
    2002-06-25 13:18:48
    2002-06-25 12:18:48
    2002-06-25 18:18:48
    2002-06-25 14:18:48
    2002-06-25 14:18:48
    2002-06-25 18:18:48
    2002-06-25 10:18:48
    2002-06-25 17:18:48
    2002-06-25 11:18:48
    2002-06-25 17:48:48
    2002-06-25 10:48:48
    @PHP/date/bug26317.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2003-11-19 17:20:42
    2003-11-19 17:20:42
    2003-11-19 17:20:42
    2003-11-19 16:20:42
    2003-11-19 16:20:42
    2003-11-19 16:20:42
    @PHP/date/bug26320.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2003-11-19 12:30:42
    2003-11-19 13:30:42
    2003-11-19 12:30:42
    2003-11-19 12:30:42
    @PHP/date/bug28088.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    The following line rightly shows the correct date time:
    04/04/04 2145
    But the following line fails to show the correct date time:
    04/03/04 2245
    The following line rightly shows the correct date time:
    04/04/04 2345
    But the following line fails to show the correct date time:
    04/04/04 0045
    @PHP/date/bug28599.php: SUCCEEDED
    @PHP/date/bug29150.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2005-06-19 22:00:00
    2005-06-20 00:00:00
    @PHP/date/bug29585.php: SUCCEEDED
    @PHP/date/bug29595.php: SUCCEEDED
    @PHP/date/bug33056.php: SUCCEEDED
    @PHP/date/bug33452.php: SUCCEEDED
    @PHP/date/bug33562.php: SUCCEEDED
    @PHP/date/bug33563.php: SUCCEEDED
    @PHP/date/bug33578.php: SUCCEEDED
    @PHP/date/bug33869.php: SUCCEEDED
    @PHP/date/bug34676.php: SUCCEEDED
    @PHP/date/bug34771.php: SUCCEEDED
    @PHP/date/bug35143.php: SUCCEEDED
    @PHP/date/bug35414.php: SUCCEEDED
    @PHP/date/bug35422.php: SUCCEEDED
    @PHP/date/bug35425.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    integer(42)
    integer(1)
    integer(1)
    integer(1)
    integer(1)
    integer(0)
    integer(0)
    integer(1)
    integer(1)
    integer(31)
    integer(1104537661)
    integer(6)
    integer(53)
    integer(5)
    integer(2005)
    integer(0)
    integer(3600)
    integer(292)
    integer(1)
    integer(1)
    integer(1)
    integer(1)
    integer(0)
    integer(0)
    integer(1)
    integer(1)
    integer(31)
    integer(1104559261)
    integer(6)
    integer(53)
    integer(5)
    integer(2005)
    integer(0)
    integer(-18000)
    @PHP/date/bug35456.php: SUCCEEDED
    @PHP/date/bug35624.php: SUCCEEDED
    @PHP/date/bug35630.php: SUCCEEDED
    @PHP/date/bug35699.php: SUCCEEDED
    @PHP/date/bug35705.php: SUCCEEDED
    @PHP/date/bug35885.php: SUCCEEDED
    @PHP/date/bug35887.php: SUCCEEDED
    @PHP/date/date.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    c: 2003-01-23T13:20:59+01:00
    r: Thu, 23 Jan 2003 13:20:59 +0100
    c: 2003-01-23T13:20:59+01:00
    r: Thu, 23 Jan 2003 13:20:59 +0100
    c: 2003-01-23T12:20:59+00:00
    r: Thu, 23 Jan 2003 12:20:59 +0000
    c: 2003-01-23T13:20:59+01:00
    r: Thu, 23 Jan 2003 13:20:59 +0100
    @PHP/date/date_create-1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\date\__input.txt on line 28
    SKIP
    @PHP/date/date_create-2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\date\__input.txt on line 6
    SKIP
    @PHP/date/date_default_timezone_get-3.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Europe/Prague
    America/Chicago
    Europe/Rome
    America/Chicago
    @PHP/date/date_modify-1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\date\__input.txt on line 6
    SKIP
    @PHP/date/date_modify-2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\date\__input.txt on line 6
    SKIP
    @PHP/date/default-timezone-1.php: SUCCEEDED
    @PHP/date/default-timezone-2.php: SUCCEEDED
    @PHP/date/format-negative-timestamp.php: SUCCEEDED
    @PHP/date/strtotime.php: SUCCEEDED
    @PHP/date/timezone-configuration.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    1119125744
    1119125744
    1119125744
    1119125744
    1119129344
    1119125744
    @PHP/doc_examples/test001.php: SUCCEEDED
    @PHP/doc_examples/test002.php: SUCCEEDED
    @PHP/doc_examples/test003.php: SUCCEEDED
    @PHP/doc_examples/test004.php: SUCCEEDED
    @PHP/doc_examples/test005.php: SUCCEEDED
    @PHP/doc_examples/test006.php: SUCCEEDED
    @PHP/doc_examples/test007.php: SUCCEEDED
    @PHP/doc_examples/test008.php: SUCCEEDED
    @PHP/doc_examples/test009.php: SUCCEEDED
    @PHP/doc_examples/test010.php: SUCCEEDED
    @PHP/doc_examples/test011.php: SUCCEEDED
    @PHP/doc_examples/test013.php: SUCCEEDED
    @PHP/doc_examples/test014.php: SUCCEEDED
    @PHP/doc_examples/test015.php: SUCCEEDED
    @PHP/doc_examples/test016.php: SUCCEEDED
    @PHP/doc_examples/test017.php: SUCCEEDED
    @PHP/doc_examples/test018.php: SUCCEEDED
    @PHP/doc_examples/test019.php: SUCCEEDED
    @PHP/doc_examples/test020.php: SUCCEEDED
    @PHP/doc_examples/test021.php: SUCCEEDED
    @PHP/doc_examples/test022.php: SUCCEEDED
    @PHP/doc_examples/test023.php: SUCCEEDED
    @PHP/doc_examples/test024.php: SUCCEEDED
    @PHP/doc_examples/test025.php: SUCCEEDED
    @PHP/doc_examples/test026.php: SUCCEEDED
    @PHP/doc_examples/test027.php: SUCCEEDED
    @PHP/doc_examples/test028.php: SUCCEEDED
    @PHP/doc_examples/test029.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ´┐Żauky
    �auky
    @PHP/doc_examples/test030.php: SUCCEEDED
    @PHP/doc_examples/test031.php: SUCCEEDED
    @PHP/doc_examples/test032.php: SUCCEEDED
    @PHP/doc_examples/test033.php: SUCCEEDED
    @PHP/doc_examples/test034.php: SUCCEEDED
    @PHP/doc_examples/test035.php: SUCCEEDED
    @PHP/doc_examples/test036.php: SUCCEEDED
    @PHP/doc_examples/test037.php: SUCCEEDED
    @PHP/doc_examples/test038.php: SUCCEEDED
    @PHP/doc_examples/test039.php: SUCCEEDED
    @PHP/doc_examples/test040.php: SUCCEEDED
    @PHP/doc_examples/test041.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    call_user_func():
    hello world!
    Strict Standards: call_user_func(): Non-static method MyClass::myCallbackMethod() should not be called statically in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\doc_examples\__input.txt at expression on line 17, column 1.
    Hello World!Hello World!
    @PHP/doc_examples/test042.php: SUCCEEDED
    @PHP/doc_examples/test043.php: SUCCEEDED
    @PHP/doc_examples/test044.php: SUCCEEDED
    @PHP/doc_examples/test045.php: SUCCEEDED
    @PHP/doc_examples/test046.php: SUCCEEDED
    @PHP/doc_examples/test047.php: SUCCEEDED
    @PHP/doc_examples/test048.php: SUCCEEDED
    @PHP/doc_examples/test049.php: SUCCEEDED
    @PHP/doc_examples/test050.php: SUCCEEDED
    @PHP/doc_examples/test051.php: SUCCEEDED
    @PHP/doc_examples/test052.php: SUCCEEDED
    @PHP/doc_examples/test053.php: SUCCEEDED
    @PHP/doc_examples/test054.php: SUCCEEDED
    @PHP/doc_examples/test055.php: SUCCEEDED
    @PHP/doc_examples/test056.php: SUCCEEDED
    @PHP/doc_examples/test057.php: SUCCEEDED
    @PHP/doc_examples/test058.php: SUCCEEDED
    @PHP/doc_examples/test059.php: SUCCEEDED
    @PHP/doc_examples/test060.php: SUCCEEDED
    @PHP/doc_examples/test061.php: SUCCEEDED
    @PHP/doc_examples/test062.php: SUCCEEDED
    @PHP/doc_examples/test063.php: SUCCEEDED
    @PHP/doc_examples/test064.php: SUCCEEDED
    @PHP/doc_examples/test065.php: SUCCEEDED
    @PHP/doc_examples/test066.php: SUCCEEDED
    @PHP/doc_examples/test067.php: SUCCEEDED
    @PHP/doc_examples/test068.php: SUCCEEDED
    @PHP/doc_examples/test069.php: SUCCEEDED
    @PHP/doc_examples/test070.php: SUCCEEDED
    @PHP/doc_examples/test071.php: SUCCEEDED
    @PHP/doc_examples/test072.php: SUCCEEDED
    @PHP/doc_examples/test073.php: SUCCEEDED
    @PHP/doc_examples/test074.php: SUCCEEDED
    @PHP/doc_examples/test075.php: SUCCEEDED
    @PHP/doc_examples/test076.php: SUCCEEDED
    @PHP/doc_examples/test077.php: SUCCEEDED
    @PHP/doc_examples/test078.php: SUCCEEDED
    @PHP/doc_examples/test079.php: SUCCEEDED
    @PHP/doc_examples/test080.php: SUCCEEDED
    @PHP/doc_examples/test081.php: SUCCEEDED
    @PHP/doc_examples/test082.php: SUCCEEDED
    @PHP/doc_examples/test083.php: SUCCEEDED
    @PHP/doc_examples/test084.php: SUCCEEDED
    @PHP/doc_examples/test085.php: SUCCEEDED
    @PHP/doc_examples/test086.php: SUCCEEDED
    @PHP/doc_examples/test087.php: SUCCEEDED
    @PHP/doc_examples/test088.php: SUCCEEDED
    @PHP/doc_examples/test089.php: SUCCEEDED
    @PHP/doc_examples/test090.php: SUCCEEDED
    @PHP/doc_examples/test091.php: SUCCEEDED
    @PHP/doc_examples/test092.php: SUCCEEDED
    @PHP/doc_examples/test093.php: SUCCEEDED
    @PHP/doc_examples/test094.php: SUCCEEDED
    @PHP/doc_examples/test095.php: SUCCEEDED
    @PHP/doc_examples/test096.php: SUCCEEDED
    @PHP/doc_examples/test097.php: SUCCEEDED
    @PHP/doc_examples/test098.php: SUCCEEDED
    @PHP/doc_examples/test099.php: SUCCEEDED
    @PHP/doc_examples/test100.php: SUCCEEDED
    @PHP/doc_examples/test102.php: SUCCEEDED
    @PHP/doc_examples/test103.php: SUCCEEDED
    @PHP/doc_examples/test104.php: SUCCEEDED
    @PHP/doc_examples/test105.php: SUCCEEDED
    @PHP/doc_examples/test107.php: SUCCEEDED
    @PHP/doc_examples/test108.php: SUCCEEDED
    @PHP/doc_examples/test109.php: SUCCEEDED
    @PHP/doc_examples/test110.php: SUCCEEDED
    @PHP/doc_examples/test111.php: SUCCEEDED
    @PHP/doc_examples/test112.php: SUCCEEDED
    @PHP/doc_examples/test113.php: SUCCEEDED
    @PHP/doc_examples/test114.php: SUCCEEDED
    @PHP/doc_examples/test115.php: SUCCEEDED
    @PHP/doc_examples/test116.php: SUCCEEDED
    @PHP/doc_examples/test117.php: SUCCEEDED
    @PHP/doc_examples/test118.php: SUCCEEDED
    @PHP/doc_examples/test119.php: SUCCEEDED
    @PHP/doc_examples/test120.php: SUCCEEDED
    @PHP/doc_examples/test121.php: SUCCEEDED
    @PHP/doc_examples/test122.php: SUCCEEDED
    @PHP/doc_examples/test123.php: SUCCEEDED
    @PHP/doc_examples/test124.php: SUCCEEDED
    @PHP/doc_examples/test125.php: SUCCEEDED
    @PHP/doc_examples/test126.php: SUCCEEDED
    @PHP/doc_examples/test127.php: SUCCEEDED
    @PHP/doc_examples/test128.php: SUCCEEDED
    @PHP/doc_examples/test129.php: SUCCEEDED
    @PHP/doc_examples/test130.php: SUCCEEDED
    @PHP/doc_examples/test131.php: SUCCEEDED
    @PHP/doc_examples/test132.php: SUCCEEDED
    @PHP/doc_examples/test133.php: SUCCEEDED
    @PHP/doc_examples/test134.php: SUCCEEDED
    @PHP/doc_examples/test136.php: SUCCEEDED
    @PHP/doc_examples/test137.php: SUCCEEDED
    @PHP/doc_examples/test138.php: SUCCEEDED
    @PHP/doc_examples/test139.php: SUCCEEDED
    @PHP/doc_examples/test148.php: SUCCEEDED
    @PHP/doc_examples/test149.php: SUCCEEDED
    @PHP/doc_examples/test150.php: SUCCEEDED
    @PHP/doc_examples/test151.php: SUCCEEDED
    @PHP/doc_examples/test152.php: SUCCEEDED
    @PHP/doc_examples/test153.php: SUCCEEDED
    @PHP/doc_examples/test154.php: SUCCEEDED
    @PHP/doc_examples/test155.php: SUCCEEDED
    @PHP/doc_examples/test156.php: SUCCEEDED
    @PHP/doc_examples/test158.php: SUCCEEDED
    @PHP/lang/001.php: SUCCEEDED
    @PHP/lang/002.php: SUCCEEDED
    @PHP/lang/003.php: SUCCEEDED
    @PHP/lang/004.php: SUCCEEDED
    @PHP/lang/005.php: SUCCEEDED
    @PHP/lang/006.php: SUCCEEDED
    @PHP/lang/007.php: SUCCEEDED
    @PHP/lang/008.php: SUCCEEDED
    @PHP/lang/009.php: SUCCEEDED
    @PHP/lang/010.php: SUCCEEDED
    @PHP/lang/011.php: SUCCEEDED
    @PHP/lang/012.php: SUCCEEDED
    @PHP/lang/013.php: SUCCEEDED
    @PHP/lang/014.php: SUCCEEDED
    @PHP/lang/015.php: SUCCEEDED
    @PHP/lang/016.php: SUCCEEDED
    @PHP/lang/017.php: SUCCEEDED
    @PHP/lang/018.php: SUCCEEDED
    @PHP/lang/019.php: SUCCEEDED
    @PHP/lang/020.php: SUCCEEDED
    @PHP/lang/021.php: SUCCEEDED
    @PHP/lang/022.php: SUCCEEDED
    @PHP/lang/023.php: SUCCEEDED
    @PHP/lang/024.php: SUCCEEDED
    @PHP/lang/025.php: SUCCEEDED
    @PHP/lang/026.php: SUCCEEDED
    @PHP/lang/027.php: SUCCEEDED
    @PHP/lang/028.php: SUCCEEDED
    @PHP/lang/030.php: SUCCEEDED
    @PHP/lang/032.php: SUCCEEDED
    @PHP/lang/036.php: SUCCEEDED
    @PHP/lang/037.php: SUCCEEDED
    @PHP/lang/038.php: SUCCEEDED
    @PHP/lang/039.php: SUCCEEDED
    @PHP/lang/040.php: SUCCEEDED
    @PHP/lang/bison1.php: SUCCEEDED
    @PHP/lang/bug17115.php: SUCCEEDED
    @PHP/lang/bug18872.php: SUCCEEDED
    @PHP/lang/bug19943.php: SUCCEEDED
    @PHP/lang/bug20175.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    Deprecated: Assigning the return value of new by reference is deprecated in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\lang\__input.txt on line 110
    foo_static()
    foo_global()
    foo:1
    foo_static()
    foo:1
    bar_static()
    bar_global()
    bar:1
    bar_static()
    bar:1
    wow_static()
    wow_global()
    wow:1
    wow_static()
    wow:1
    oop_test()
    oop_static()
    oop_class()
    oop:1
    oop_static()
    oop:1
    oop_test()
    oop_static()
    oop:1
    foo_static()
    foo_global()
    foo:1
    foo_static()
    foo:1
    bar_static()
    bar_global()
    bar:1
    bar_static()
    bar_global()
    bar:2
    wow_static()
    wow_global()
    wow:1
    wow_static()
    wow:1
    oop_test()
    oop_static()
    oop_class()
    oop:1
    oop_static()
    oop:1
    oop_test()
    oop_static()
    oop:1
    D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\lang\__input.txt(110,4): warning PHP0181: Assigning the return value of new by reference is deprecated
    
    @PHP/lang/bug21094.php: SUCCEEDED
    @PHP/lang/bug21600.php: SUCCEEDED
    @PHP/lang/bug21669.php: SUCCEEDED
    @PHP/lang/bug21849.php: SUCCEEDED
    @PHP/lang/bug21961.php: SUCCEEDED
    @PHP/lang/bug22231.php: SUCCEEDED
    @PHP/lang/bug22367.php: SUCCEEDED
    @PHP/lang/bug22510.php: SUCCEEDED
    @PHP/lang/bug22592.php: SUCCEEDED
    @PHP/lang/bug22690.php: SUCCEEDED
    @PHP/lang/bug23279.php: SUCCEEDED
    @PHP/lang/bug23384.php: SUCCEEDED
    @PHP/lang/bug23489.php: SUCCEEDED
    @PHP/lang/bug23524.php: SUCCEEDED
    @PHP/lang/bug23922.php: SUCCEEDED
    @PHP/lang/bug24054.php: SUCCEEDED
    @PHP/lang/bug24396.php: SUCCEEDED
    @PHP/lang/bug24403.php: SUCCEEDED
    @PHP/lang/bug24436.php: SUCCEEDED
    @PHP/lang/bug24499.php: SUCCEEDED
    @PHP/lang/bug24640.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    double(1700000000000000089258092433847514422797596587883870563356951996370064178581143932836831337636761368874297554515902592900802289500112731978596146714137401870842258241575178866354311397451139753100927220499450359906637902366244989496126909662726242240784739940994096632824796638102733857671280980918272.0000000000)
    1.7E+300
    
    ------
    double(0.0000000000)
    1.7E-300
    
    ------
    double(17000000000000001584208052028780237480128823455860622330108867175329927830437888.0000000000)
    1.7E+79
    
    ------
    double(0.0000000000)
    1.7E-79
    
    ------
    double(169999999999999996096025832433329868941658043870400163508258284150340918121070592.0000000000)
    1.7E+80
    
    ------
    double(0.0000000000)
    1.7E-80
    
    ------
    double(1700000000000000013616404158611892038375594280539217794530130541777964808366194688.0000000000)
    1.7E+81
    
    ------
    double(0.0000000000)
    1.7E-81
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    1.6999810742106E-319
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    1.7000798873397E-320
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    1.6995858216939E-321
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    0
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    0
    
    ------
    double(1700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+300
    
    ------
    double(0.0000000000)
    1.70000000000003E-300
    
    ------
    double(17000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+79
    
    ------
    double(0.0000000000)
    1.70000000000001E-79
    
    ------
    double(170000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+80
    
    ------
    double(0.0000000000)
    1.70000000000001E-80
    
    ------
    double(1700000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+81
    
    ------
    double(0.0000000000)
    1.70000000000001E-81
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    1.69998107421056E-319
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    1.70007988733973E-320
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    1.69464516523548E-321
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    0
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    0
    
    ------
    @PHP/lang/bug24652.php: SUCCEEDED
    @PHP/lang/bug24658.php: SUCCEEDED
    @PHP/lang/bug24783.php: SUCCEEDED
    @PHP/lang/bug24926.php: SUCCEEDED
    @PHP/lang/bug25547.php: SUCCEEDED
    @PHP/lang/bug25652.php: SUCCEEDED
    @PHP/lang/bug25922.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Undefined index here: 'error'
    Undefined index here: ''
    @PHP/lang/bug26182.php: SUCCEEDED
    @PHP/lang/bug26696.php: SUCCEEDED
    @PHP/lang/bug26866.php: SUCCEEDED
    @PHP/lang/bug26869.php: SUCCEEDED
    @PHP/lang/bug27354.php: SUCCEEDED
    @PHP/lang/bug27439.php: SUCCEEDED
    @PHP/lang/bug27535.php: SUCCEEDED
    @PHP/lang/bug28213.php: SUCCEEDED
    @PHP/lang/bug28800.php: SUCCEEDED
    @PHP/lang/bug29566.php: SUCCEEDED
    @PHP/lang/bug29893.php: SUCCEEDED
    @PHP/lang/bug29944.php: SUCCEEDED
    @PHP/lang/bug30638.php: SUCCEEDED
    @PHP/lang/bug30726.php: SUCCEEDED
    @PHP/lang/bug30862.php: SUCCEEDED
    @PHP/lang/bug32924.php: SUCCEEDED
    @PHP/lang/bug35382.php: SUCCEEDED
    @PHP/lang/bug7515.php: SUCCEEDED
    @PHP/lang/each_binary_safety.php: SUCCEEDED
    @PHP/lang/error_2_exception_001.php: SUCCEEDED
    @PHP/lang/foreach_with_object_001.php: SUCCEEDED
    @PHP/lang/foreach_with_references_001.php: SUCCEEDED
    @PHP/lang/type_hints_001.php: SUCCEEDED
    @PHP/standard/array/001.php: SUCCEEDED
    @PHP/standard/array/003.php: SUCCEEDED
    @PHP/standard/array/004.php: SUCCEEDED
    @PHP/standard/array/005.php: SUCCEEDED
    @PHP/standard/array/008.php: SUCCEEDED
    @PHP/standard/array/array_change_key_case.php: SUCCEEDED
    @PHP/standard/array/array_chunk.php: SUCCEEDED
    @PHP/standard/array/array_count_values.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array(0) {
    }
    
    array(1) {
      [0]=>
      int(1)
    }
    
    array(1) {
      [1]=>
      int(1)
    }
    
    array(1) {
      [-1]=>
      int(1)
    }
    
    array(1) {
      [0]=>
      int(2)
    }
    
    array(2) {
      [0]=>
      int(1)
      [1]=>
      int(1)
    }
    
    array(1) {
      [1]=>
      int(2)
    }
    
    array(3) {
      [1]=>
      int(2)
      ["hello"]=>
      int(2)
      ["world"]=>
      int(1)
    }
    
    array(2) {
      ["hello"]=>
      int(2)
      ["world"]=>
      int(1)
    }
    
    array(3) {
      [""]=>
      int(2)
      ["world"]=>
      int(3)
      ["hello"]=>
      int(4)
    }
    
    array(1) {
      [0]=>
      int(1)
    }
    
    array(1) {
      [1]=>
      int(1)
    }
    array(0) [empty]
    
    array(1)
    {
      [0] => integer(1)
    }
    
    array(1)
    {
      [1] => integer(1)
    }
    
    array(1)
    {
      [-1] => integer(1)
    }
    
    array(1)
    {
      [0] => integer(2)
    }
    
    array(2)
    {
      [0] => integer(1)
      [1] => integer(1)
    }
    
    array(1)
    {
      [1] => integer(2)
    }
    
    array(3)
    {
      [1] => integer(2)
      ['hello'] => integer(2)
      ['world'] => integer(1)
    }
    
    array(2)
    {
      ['hello'] => integer(2)
      ['world'] => integer(1)
    }
    
    array(3)
    {
      [''] => integer(2)
      ['world'] => integer(3)
      ['hello'] => integer(4)
    }
    
    array(1)
    {
      [0] => integer(1)
    }
    
    array(1)
    {
      [1] => integer(1)
    }
    @PHP/standard/array/array_diff_1.php: SUCCEEDED
    @PHP/standard/array/array_diff_key.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ------ Test 1 --------
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 2 --------
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 3 --------
    array(6) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [2]=>
      int(4)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [2]=>
      int(4)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 4 --------
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 5 --------
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 6 --------
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 7 --------
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    ------ Test 8 --------
    array(6) {
      [0]=>
      int(0)
      [7]=>
      int(14)
      [2]=>
      int(4)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [0]=>
      int(0)
      [7]=>
      int(14)
      [2]=>
      int(4)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 9 --------
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    ------ Test 1 --------
    array(4)
    {
      [1] => &integer(2)
      [6] => &integer(12)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    array(4)
    {
      [1] => &integer(2)
      [6] => &integer(12)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    ------ Test 2 --------
    array(3)
    {
      [1] => &integer(2)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    array(3)
    {
      [1] => &integer(2)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    ------ Test 3 --------
    array(6)
    {
      [1] => &integer(2)
      [6] => &integer(12)
      [2] => &integer(4)
      [15] => &integer(30)
      [1200] => &integer(2400)
      [-2500] => &integer(-5000)
    }
    array(6)
    {
      [1] => &integer(2)
      [6] => &integer(12)
      [2] => &integer(4)
      [15] => &integer(30)
      [1200] => &integer(2400)
      [-2500] => &integer(-5000)
    }
    ------ Test 4 --------
    array(3)
    {
      [1] => &integer(2)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    array(3)
    {
      [1] => &integer(2)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    ------ Test 5 --------
    array(4)
    {
      [1] => &integer(2)
      [6] => &integer(12)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    array(4)
    {
      [1] => &integer(2)
      [6] => &integer(12)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    ------ Test 6 --------
    array(3)
    {
      [1] => &integer(2)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    array(3)
    {
      [1] => &integer(2)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    ------ Test 7 --------
    array(3)
    {
      [7] => &integer(14)
      [11] => &integer(22)
      [1100] => &integer(2200)
    }
    array(3)
    {
      [7] => &integer(14)
      [11] => &integer(22)
      [1100] => &integer(2200)
    }
    ------ Test 8 --------
    array(6)
    {
      [0] => &integer(0)
      [7] => &integer(14)
      [2] => &integer(4)
      [11] => &integer(22)
      [1100] => &integer(2200)
      [-2500] => &integer(-5000)
    }
    array(6)
    {
      [0] => &integer(0)
      [7] => &integer(14)
      [2] => &integer(4)
      [11] => &integer(22)
      [1100] => &integer(2200)
      [-2500] => &integer(-5000)
    }
    ------ Test 9 --------
    array(3)
    {
      [7] => &integer(14)
      [11] => &integer(22)
      [1100] => &integer(2200)
    }
    array(3)
    {
      [7] => &integer(14)
      [11] => &integer(22)
      [1100] => &integer(2200)
    }
    @PHP/standard/array/array_intersect_key.php: SUCCEEDED
    @PHP/standard/array/array_sum.php: SUCCEEDED
    @PHP/standard/array/array_walk_recursive.php: SUCCEEDED
    @PHP/standard/array/bug12776.php: SUCCEEDED
    @PHP/standard/array/bug14580.php: SUCCEEDED
    @PHP/standard/array/bug20381.php: SUCCEEDED
    @PHP/standard/array/bug20865.php: SUCCEEDED
    @PHP/standard/array/bug21182.php: SUCCEEDED
    @PHP/standard/array/bug21918.php: SUCCEEDED
    @PHP/standard/array/bug21998.php: SUCCEEDED
    @PHP/standard/array/bug22088.php: SUCCEEDED
    @PHP/standard/array/bug22463.php: SUCCEEDED
    @PHP/standard/array/bug23581.php: SUCCEEDED
    @PHP/standard/array/bug23788.php: SUCCEEDED
    @PHP/standard/array/bug24198.php: SUCCEEDED
    @PHP/standard/array/bug24220.php: SUCCEEDED
    @PHP/standard/array/bug24766.php: SUCCEEDED
    @PHP/standard/array/bug24897.php: SUCCEEDED
    @PHP/standard/array/bug24980.php: SUCCEEDED
    @PHP/standard/array/bug25359.php: SUCCEEDED
    @PHP/standard/array/bug25708.php: SUCCEEDED
    @PHP/standard/array/bug25758.php: SUCCEEDED
    @PHP/standard/array/bug26458.php: SUCCEEDED
    @PHP/standard/array/bug28974.php: SUCCEEDED
    @PHP/standard/array/bug29493.php: SUCCEEDED
    @PHP/standard/array/bug30266.php: SUCCEEDED
    @PHP/standard/array/bug30833.php: SUCCEEDED
    @PHP/standard/array/bug31158.php: SUCCEEDED
    @PHP/standard/array/bug31213.php: SUCCEEDED
    @PHP/standard/array/bug32021.php: SUCCEEDED
    @PHP/standard/array/bug33382.php: SUCCEEDED
    @PHP/standard/array/bug33989.php: SUCCEEDED
    @PHP/standard/array/bug34227.php: SUCCEEDED
    @PHP/standard/array/bug34982.php: SUCCEEDED
    @PHP/standard/array/bug35014.php: SUCCEEDED
    @PHP/standard/array/bug35022.php: SUCCEEDED
    @PHP/standard/array/bug35821.php: SUCCEEDED
    @PHP/standard/array/count_recursive.php: SUCCEEDED
    @PHP/standard/array/locale_sort.php: SUCCEEDED
    @PHP/standard/array/range.php: SUCCEEDED
    @PHP/standard/assert/assert.php: SUCCEEDED
    @PHP/standard/general_functions/001.php: SUCCEEDED
    @PHP/standard/general_functions/002.php: SUCCEEDED
    @PHP/standard/general_functions/003.php: SUCCEEDED
    @PHP/standard/general_functions/004.php: SUCCEEDED
    @PHP/standard/general_functions/005.php: SUCCEEDED
    @PHP/standard/general_functions/006.php: SUCCEEDED
    @PHP/standard/general_functions/007.php: SUCCEEDED
    @PHP/standard/general_functions/009.php: SUCCEEDED
    @PHP/standard/general_functions/bug25038.php: SUCCEEDED
    @PHP/standard/general_functions/bug27678.php: SUCCEEDED
    @PHP/standard/general_functions/bug29038.php: SUCCEEDED
    @PHP/standard/general_functions/bug31190.php: SUCCEEDED
    @PHP/standard/general_functions/bug32647.php: SUCCEEDED
    @PHP/standard/general_functions/bug35229.php: SUCCEEDED
    @PHP/standard/general_functions/is_resource.php: SUCCEEDED
    @PHP/standard/math/abs.php: SUCCEEDED
    @PHP/standard/math/bug24142.php: SUCCEEDED
    @PHP/standard/math/bug25694.php: SUCCEEDED
    @PHP/standard/math/bug27646.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    double(INF-INF)
    'd:-INF;'
    double(INF-INF)
    double(INF-INF)
    'd:INF;'
    double(INF-INF)
    double(NaNInfini)
    'd:NAN;'
    double(NaNInfini)
    double(-Infinity)
    'd:-INF;'
    double(-Infinity)
    double(Infinity)
    'd:INF;'
    double(Infinity)
    double(NaN)
    'd:NAN;'
    double(NaN)
    @PHP/standard/math/bug30069.php: SUCCEEDED
    @PHP/standard/math/bug30695.php: SUCCEEDED
    @PHP/standard/math/floorceil.php: SUCCEEDED
    @PHP/standard/math/hexdec.php: SUCCEEDED
    @PHP/standard/math/log.php: SUCCEEDED
    @PHP/standard/math/pow.php: SUCCEEDED
    @PHP/standard/math/round.php: SUCCEEDED
    @PHP/standard/reg/001.php: SUCCEEDED
    @PHP/standard/reg/002.php: SUCCEEDED
    @PHP/standard/reg/003.php: SUCCEEDED
    @PHP/standard/reg/004.php: SUCCEEDED
    @PHP/standard/reg/005.php: SUCCEEDED
    @PHP/standard/reg/006.php: SUCCEEDED
    @PHP/standard/reg/007.php: SUCCEEDED
    @PHP/standard/reg/008.php: SUCCEEDED
    @PHP/standard/reg/009.php: SUCCEEDED
    @PHP/standard/reg/010.php: SUCCEEDED
    @PHP/standard/reg/011.php: SUCCEEDED
    @PHP/standard/reg/012.php: SUCCEEDED
    @PHP/standard/reg/013.php: SUCCEEDED
    @PHP/standard/reg/014.php: SUCCEEDED
    @PHP/standard/reg/015.php: SUCCEEDED
    @PHP/standard/reg/016.php: SUCCEEDED
    @PHP/standard/serialize/001.php: SUCCEEDED
    @PHP/standard/serialize/002.php: SUCCEEDED
    @PHP/standard/serialize/003.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    d:100;
    double(100.0000000000)
    
    d:51999999999999996980101120;
    double(51999999999999996980101120.0000000000)
    
    d:8.9999999999999995265585574287341141808127531476202420890331268310546875E-9;
    double(0.0000000090)
    d:100;
    double(100.0000000000)
    
    d:5.2000000000000006E+25;
    double(52000000000000000000000000.0000000000)
    
    d:9.0000000000000045E-09;
    double(0.0000000090)
    @PHP/standard/serialize/004.php: SUCCEEDED
    @PHP/standard/serialize/005.php: SUCCEEDED
    @PHP/standard/serialize/006.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    'O:3:"´┐Ż":1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    object
    {
      '´┐Ż' => '´┐Ż'
    }
    'a:1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    array
    {
      '´┐Ż' => '´┐Ż'
    }
    'O:3:"´┐Ż":1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    object
    {
      'ďż˝' => 'ďż˝'
    }
    'a:1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    array
    {
      'ďż˝' => 'ďż˝'
    }
    @PHP/standard/serialize/bug14293.php: SUCCEEDED
    @PHP/standard/serialize/bug21957.php: SUCCEEDED
    @PHP/standard/serialize/bug23298.php: SUCCEEDED
    @PHP/standard/serialize/bug24063.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0.1 0.1
    0.01 0.01
    0.001 0.001
    0.0001 0.0001
    1.0E-5 1.0E-5
    1.0E-6 1.0E-6
    1.0E-7 1.0E-7
    1.0E-8 1.0E-8
    1.0E-9 1.0E-9
    0.1 0.1
    0.01 0.01
    0.001 0.001
    0.0001 0.0001
    1E-05 1E-05
    1E-06 1E-06
    1E-07 1E-07
    1E-08 1E-08
    1E-09 1E-09
    @PHP/standard/serialize/bug25378.php: SUCCEEDED
    @PHP/standard/serialize/bug26762.php: SUCCEEDED
    @PHP/standard/serialize/bug27469.php: SUCCEEDED
    @PHP/standard/serialize/bug28325.php: SUCCEEDED
    @PHP/standard/serialize/bug30234.php: SUCCEEDED
    @PHP/standard/serialize/bug31402.php: SUCCEEDED
    @PHP/standard/serialize/bug31442.php: SUCCEEDED
    @PHP/standard/strings/add-and-stripcslashes.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    kaboemkara!
    foo\b\a\r\b\az
    \f\o\o\[ \]
    \zoo['\.']
    \abcd\e\f\g\h\i\j\k\l\m\n\o\pqrstuvwxy\z
    1
    5d
    Warning: String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\standard\strings\__input.txt at expression on line 3, column 1.
    
    kaboemkara!
    
    Warning: String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\standard\strings\__input.txt at expression on line 5, column 1.
    
    
    Warning: String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\standard\strings\__input.txt at expression on line 6, column 1.
    
    
    
    Warning: String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\standard\strings\__input.txt at expression on line 8, column 1.
    
    1
    5d
    @PHP/standard/strings/add-and-stripslashes.php: SUCCEEDED
    @PHP/standard/strings/basename.php: SUCCEEDED
    @PHP/standard/strings/bin2hex.php: SUCCEEDED
    @PHP/standard/strings/bug20108.php: SUCCEEDED
    @PHP/standard/strings/bug20169.php: SUCCEEDED
    @PHP/standard/strings/bug20261.php: SUCCEEDED
    @PHP/standard/strings/bug20927.php: SUCCEEDED
    @PHP/standard/strings/bug21338.php: SUCCEEDED
    @PHP/standard/strings/bug21453.php: SUCCEEDED
    @PHP/standard/strings/bug21730.php: SUCCEEDED
    @PHP/standard/strings/bug21744.php: SUCCEEDED
    @PHP/standard/strings/bug22008.php: SUCCEEDED
    @PHP/standard/strings/bug22187.php: SUCCEEDED
    @PHP/standard/strings/bug22224.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      0 => 
      object
      {
      }
      1 => 
      object
      {
      }
    }
    @PHP/standard/strings/bug22227.php: SUCCEEDED
    @PHP/standard/strings/bug22904.php: SUCCEEDED
    @PHP/standard/strings/bug23650.php: SUCCEEDED
    @PHP/standard/strings/bug23894.php: SUCCEEDED
    @PHP/standard/strings/bug24098.php: SUCCEEDED
    @PHP/standard/strings/bug24208.php: SUCCEEDED
    @PHP/standard/strings/bug24281.php: SUCCEEDED
    @PHP/standard/strings/bug25671.php: SUCCEEDED
    @PHP/standard/strings/bug25707.php: SUCCEEDED
    @PHP/standard/strings/bug26878.php: SUCCEEDED
    @PHP/standard/strings/bug26973.php: SUCCEEDED
    @PHP/standard/strings/bug27276.php: SUCCEEDED
    @PHP/standard/strings/bug27278.php: SUCCEEDED
    @PHP/standard/strings/bug27295.php: SUCCEEDED
    @PHP/standard/strings/bug27457.php: SUCCEEDED
    @PHP/standard/strings/bug27675.php: SUCCEEDED
    @PHP/standard/strings/bug28386.php: SUCCEEDED
    @PHP/standard/strings/bug33076.php: SUCCEEDED
    @PHP/standard/strings/chr_ord.php: SUCCEEDED
    @PHP/standard/strings/chunk_split.php: SUCCEEDED
    @PHP/standard/strings/count_chars.php: SUCCEEDED
    @PHP/standard/strings/crc32.php: SUCCEEDED
    @PHP/standard/strings/explode.php: SUCCEEDED
    @PHP/standard/strings/implode.php: SUCCEEDED
    @PHP/standard/strings/md5.php: SUCCEEDED
    @PHP/standard/strings/md5raw.php: SUCCEEDED
    @PHP/standard/strings/nl2br.php: SUCCEEDED
    @PHP/standard/strings/sha1.php: SUCCEEDED
    @PHP/standard/strings/sha1raw.php: SUCCEEDED
    @PHP/standard/strings/sprintf_f.php: SUCCEEDED
    @PHP/standard/strings/strcspn.php: SUCCEEDED
    @PHP/standard/strings/strings001.php: SUCCEEDED
    @PHP/standard/strings/strpos.php: SUCCEEDED
    @PHP/standard/strings/strrev.php: SUCCEEDED
    @PHP/standard/strings/strripos.php: SUCCEEDED
    @PHP/standard/strings/strrpos.php: SUCCEEDED
    @PHP/standard/strings/strspn.php: SUCCEEDED
    @PHP/standard/strings/strstr.php: SUCCEEDED
    @PHP/standard/strings/strtoupper.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    cfbfbdcfbfbdcfbfbd
    cfafbdcfafbdcfafbd
    @PHP/standard/strings/strtr.php: SUCCEEDED
    @PHP/standard/strings/strval.php: SUCCEEDED
    @PHP/standard/strings/str_repeat.php: SUCCEEDED
    @PHP/standard/strings/str_shuffle.php: SUCCEEDED
    @PHP/standard/strings/str_word_count.php: SUCCEEDED
    @PHP/standard/strings/substr_count.php: SUCCEEDED
    @PHP/standard/strings/substr_replace.php: SUCCEEDED
    @PHP/standard/strings/wordwrap.php: SUCCEEDED
    @PHP/standard/time/001.php: SUCCEEDED
    @PHP/standard/time/idate.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    U: 1043324459
    Y: 2003
    z: 22
    y: 3
    m: 1
    n: 1
    d: 23
    j: 23
    H: 13
    G: 13
    h: 1
    g: 1
    i: 20
    s: 59
    t: 31
    w: 4
    L: 0
    B: 556
    I: 0
    W: 4
    U: 1043324459
    Y: 2003
    z: 22
    y: 3
    m: 1
    n: 1
    d: 23
    j: 23
    H: 12
    G: 12
    h: 12
    g: 12
    i: 20
    s: 59
    t: 31
    w: 4
    L: 0
    B: 556
    I: 0
    W: 4
    @PHP/strings/001.php: SUCCEEDED
    @PHP/strings/002.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    fprintf test 1:abcde
    20
    printf test 1:simple string
    printf test 2:42
    printf test 3:3.333333
    printf test 4:3.3333333333
    printf test 5:2.50      
    printf test 6:2.50000000
    printf test 7:0000002.50
    printf test 8:<                 foo>
    printf test 9:<bar                 >
    printf test 10: 123456789012345
    printf test 10:<h´┐Żyesterettsjustitiarius>
    printf test 11: 123456789012345678901234567890
    printf test 11:<    h´┐Żyesterettsjustitiarius>
    printf test 12:-12.34
    printf test 13:  -12
    printf test 14:@
    printf test 15:10101010
    printf test 16:aa
    printf test 17:AA
    printf test 18:        10101010
    printf test 19:              aa
    printf test 20:              AA
    printf test 21:0000000010101010
    printf test 22:00000000000000aa
    printf test 23:00000000000000AA
    printf test 24:abcde
    printf test 25:gazonk
    printf test 26:2 1
    printf test 27:3 1 2
    printf test 28:02  1
    printf test 29:2   1
    printf test 30:x
    vprintf test 1:2   1
    fprintf test 1:abcde
    20
    printf test 1:simple string
    printf test 2:42
    printf test 3:3.333333
    printf test 4:3.3333333333
    printf test 5:2.50      
    printf test 6:2.50000000
    printf test 7:0000002.50
    printf test 8:<                 foo>
    printf test 9:<bar                 >
    printf test 10: 123456789012345
    printf test 10:<h�yesterettsjustitiarius>
    printf test 11: 123456789012345678901234567890
    printf test 11:<    h�yesterettsjustitiarius>
    printf test 12:-12.34
    printf test 13:  -12
    printf test 14:@
    printf test 15:10101010
    printf test 16:aa
    printf test 17:AA
    printf test 18:        10101010
    printf test 19:              aa
    printf test 20:              AA
    printf test 21:0000000010101010
    printf test 22:00000000000000aa
    printf test 23:00000000000000AA
    printf test 24:abcde
    printf test 25:gazonk
    printf test 26:2 1
    printf test 27:3 1 2
    printf test 28:02  1
    printf test 29:2   1
    printf test 30:x
    vprintf test 1:2   1
    @PHP/strings/bug22592.php: SUCCEEDED
    Arrays/array1.php: SUCCEEDED
    Arrays/array_diff_intersect.php: SUCCEEDED
    Arrays/array_diff_intersect2.php: SUCCEEDED
    Arrays/array_diff_intersect3.php: SUCCEEDED
    Arrays/array_map.php: SUCCEEDED
    Arrays/array_merge_recursive.php: SUCCEEDED
    Arrays/array_reduce1.php: SUCCEEDED
    Arrays/array_reduce2.php: SUCCEEDED
    Arrays/array_slice.php: SUCCEEDED
    Arrays/array_sumprod.php: SUCCEEDED
    Arrays/array_unshift.php: SUCCEEDED
    Arrays/array_walk.php: SUCCEEDED
    Arrays/array_walk_recursive.php: SUCCEEDED
    Arrays/multisort.php: SUCCEEDED
    Arrays/optimizations.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    3
    4
    5
    a
    b
    c
    
    Warning: strtolower() expects parameter 1 to be string, array given in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Arrays\__input.txt on line 15
    
    cablo
    3
    4
    5
    a
    b
    c
    array
    cablo
    Arrays/recursion.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    f1:
    array(2) {
      ["a"]=>
      array(5) {
        ["a"]=>
        &array(3) {
          ["a"]=>
          &array(3) {
            ["a"]=>
            *RECURSION*
            [0]=>
            string(1) "y"
            [1]=>
            string(1) "z"
          }
          [0]=>
          string(1) "y"
          [1]=>
          string(1) "z"
        }
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        string(1) "x"
      }
      [0]=>
      string(1) "w"
    }
    f2:
    array(1) {
      ["A"]=>
      &array(2) {
        ["a"]=>
        &array(2) {
          ["a"]=>
          *RECURSION*
          [0]=>
          string(1) "z"
        }
        [0]=>
        string(1) "z"
      }
    }
    f3:
    array(2) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) {
          [0]=>
          *RECURSION*
          [1]=>
          string(1) "z"
        }
        [1]=>
        string(1) "z"
      }
      [1]=>
      string(1) "z"
    }
    f4:
    
    Warning: array_merge_recursive(): recursion detected in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Arrays\__input.txt on line 37
    array(1) {
      ["a"]=>
      &array(3) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
      }
    }
    f5:
    array(1) {
      ["a"]=>
      array(6) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        int(1)
        [4]=>
        int(2)
        [5]=>
        int(3)
      }
    }
    f6:
    array(1) {
      ["a"]=>
      array(2) {
        [0]=>
        string(2) "xx"
        [1]=>
        int(2)
      }
    }
    f7:
    array(1) {
      ["a"]=>
      array(1) {
        ["a"]=>
        array(1) {
          ["a"]=>
          &array(1) {
            ["a"]=>
            &array(1) {
              ["a"]=>
              *RECURSION*
            }
          }
        }
      }
    }
    f1:
    array(2)
    {
      ['a'] => array(5)
      {
        ['a'] => &array(3)
        {
          ['a'] => &array(3) [recursion]
          [0] => string(1) "y"
          [1] => string(1) "z"
        }
        [0] => integer(1)
        [1] => integer(2)
        [2] => integer(3)
        [3] => string(1) "x"
      }
      [0] => string(1) "w"
    }
    f2:
    array(1)
    {
      ['A'] => &array(2)
      {
        ['a'] => &array(2) [recursion]
        [0] => string(1) "z"
      }
    }
    f3:
    array(2)
    {
      [0] => &array(2) [recursion]
      [1] => string(1) "z"
    }
    f4:
    array(1)
    {
      ['a'] => array(6)
      {
        [0] => integer(1)
        [1] => integer(2)
        [2] => integer(3)
        [3] => integer(1)
        [4] => integer(2)
        [5] => integer(3)
      }
    }
    f5:
    array(1)
    {
      ['a'] => array(6)
      {
        [0] => integer(1)
        [1] => integer(2)
        [2] => integer(3)
        [3] => integer(1)
        [4] => integer(2)
        [5] => integer(3)
      }
    }
    f6:
    array(1)
    {
      ['a'] => array(2)
      {
        [0] => string(2) "xx"
        [1] => integer(2)
      }
    }
    f7:
    array(1)
    {
      ['a'] => &array(1)
      {
        ['a'] => &array(1) [recursion]
      }
    }
    Arrays/sort.php: SUCCEEDED
    Arrays/usort.php: SUCCEEDED
    Bugs/class_incompletepart.php: SUCCEEDED
    Bugs/division-by-zero.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    DIVISION
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt on line 6
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt on line 8
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt on line 10
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt on line 12
    bool(false)
    MODULO
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt on line 16
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt on line 18
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt on line 20
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt on line 22
    bool(false)
    DIVISION
    bool(false)
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt at expression on line 10, column 2.
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt at expression on line 12, column 2.
    bool(false)
    MODULO
    bool(false)
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt at expression on line 20, column 2.
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt at expression on line 22, column 2.
    bool(false)
    D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt(6,10): warning PHP0150: Division by zero
    D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt(8,9): warning PHP0150: Division by zero
    D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt(16,10): warning PHP0150: Division by zero
    D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt(18,9): warning PHP0150: Division by zero
    
    Bugs/function-in-unknown-class.php: SUCCEEDED
    Bugs/is_a_null_value.php: SUCCEEDED
    Bugs/preg-named-groups.php: SUCCEEDED
    Bugs/preg-replace-advanced.php: SUCCEEDED
    Bugs/preg-replace-range.php: SUCCEEDED
    Bugs/preg-replace.php: SUCCEEDED
    Bugs/preg-this-dynamic.php: FAILED
    Script hung upNo errorsSuccess
    Expected test outputReal script output
    Unhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---> System.NullReferenceException: Object reference not set to an instance of an object.
       at PHP.Core.RelativePath.ParseCanonical(String relativePath)
       at PHP.Core.Emit.TransientAssemblyBuilder.Build(String sourceCode, SourceCodeDescriptor descriptor, EvalKinds kind, CompilationContext context, ScriptContext scriptContext, DTypeDesc referringType, NamingContext namingContext, Boolean completeSource)
       at PHP.Core.DynamicCode.EvalInternal(String prefix, String code, String suffix, EvalKinds kind, ScriptContext scriptContext, Dictionary`2 localVariables, DObject self, DTypeDesc referringType, SourceCodeDescriptor descriptor, Boolean entireFile, NamingContext namingContext)
       at PHP.Core.DynamicCode.Eval(String code, Boolean synthetic, ScriptContext context, Dictionary`2 definedVariables, DObject self, DTypeDesc referringType, String callerRelativeSourcePath, Int32 line, Int32 column, Int32 containerId, NamingContext namingContext)
       at PHP.Library.PerlRegExp.Evaluator.ReplaceCodeExecute(Match m)
       at System.Text.RegularExpressions.RegexReplacement.Replace(MatchEvaluator evaluator, Regex regex, String input, Int32 count, Int32 startat)
       at System.Text.RegularExpressions.Regex.Replace(String input, MatchEvaluator evaluator, Int32 count)
       at PHP.Library.PerlRegExp.ReplaceInternal(DObject self, Dictionary`2 definedVariables, PerlRegExpConverter converter, PhpCallback callback, String str, Int32 limit, SourceCodeDescriptor sourceCodeDesc, Int32& count)
       at PHP.Library.PerlRegExp.SimpleReplace(DObject self, Dictionary`2 definedVariables, Object pattern, String replacement, PhpCallback callback, Object data, Int32 limit, SourceCodeDescriptor descriptor, Int32& count)
       at PHP.Library.PerlRegExp.Replace(DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, PhpCallback callback, Object data, Int32 limit, Int32& count)
       at PHP.Library.PerlRegExp.Replace(DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, Object data)
       at PHP.Dynamic.PhpNetClassLibrary.preg_replace(Object , PhpStack )
       at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <__input.txt>.a.a(ScriptContext ) in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt:line 16
       at <__input.txt>.a.<Mediator>(ScriptContext )
       at <__input.txt>.a.a(Object instance, PhpStack stack)
       at <__input.txt>.<Script>.<Main>(ScriptContext <context>, Dictionary`2 <locals>, DObject , DTypeDesc , Boolean ) in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt:line 19
       at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)
       at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)
       --- End of inner exception stack trace ---
       at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)
       at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)
       at <Global>.Run(String[] )
    
    Bugs/preg-this-dynamic2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    foo: ahoj
    foo: lidi
    foo: rozkladame
    foo: ahoj
    foo: lidi
    foo: rozkladame
    foo: ahoj
    foo: lidi
    foo: rozkladame
    
    Notice: Undefined variable: this.
    
    Error: Call to a member function foo() on a non-object.
    Bugs/preg-this.php: SUCCEEDED
    Bugs/preg-ungreedy-bugs.php: SUCCEEDED
    Bugs/preg-unkn.php: SUCCEEDED
    Compiler/abstracts.php: SUCCEEDED
    Compiler/assignments.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ---1---1float(-1.5)
    float(2.5)
    float(0.83333333333333)
    int(6)
    int(8)
    ---2---2float(8.8333333333333)
    float(8.8333333333333)
    float(8.8333333333333)
    int(8)
    int(8)
    ---3---3---4---4---5---5array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [1]=>
      array(1) {
        [2]=>
        array(1) {
          [3]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    ---6---6array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "u"
    }
    array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "v"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    ---7---7array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    ---8---8
    ---1---1double(-1.5)
    double(2.5)
    double(0.833333333333333)
    integer(6)
    integer(8)
    ---2---2double(8.83333333333333)
    double(8.83333333333333)
    double(8.83333333333333)
    integer(8)
    integer(8)
    ---3---3---4---4---5---5array(1)
    {
      [0] => array(1)
      {
        [0] => array(1)
        {
          [0] => array(3)
          {
            [0] => integer(1)
            [1] => integer(2)
            [2] => integer(3)
          }
        }
      }
    }
    array(1)
    {
      [0] => array(1)
      {
        [0] => array(1)
        {
          [0] => array(3)
          {
            [0] => integer(1)
            [1] => integer(2)
            [2] => integer(3)
          }
        }
      }
    }
    array(1)
    {
      [1] => array(1)
      {
        [2] => array(1)
        {
          [3] => array(3)
          {
            [0] => integer(1)
            [1] => integer(2)
            [2] => integer(3)
          }
        }
      }
    }
    ---6---6array(4)
    {
      [0] => integer(1)
      [1] => integer(2)
      [2] => integer(3)
      [3] => string(1) "u"
    }
    array(4)
    {
      [0] => integer(1)
      [1] => integer(2)
      [2] => integer(3)
      [3] => string(1) "v"
    }
    array(5)
    {
      [0] => integer(1)
      [1] => integer(2)
      [2] => integer(3)
      [3] => string(1) "w"
      [4] => string(1) "z"
    }
    array(5)
    {
      [0] => integer(1)
      [1] => integer(2)
      [2] => integer(3)
      [3] => string(1) "w"
      [4] => string(1) "z"
    }
    ---7---7array(1)
    {
      [0] => array(1)
      {
        [0] => array(1)
        {
          [0] => array(1)
          {
            [0] => &integer(10)
          }
        }
      }
    }
    array(1)
    {
      [0] => array(1)
      {
        [0] => array(1)
        {
          [0] => array(1)
          {
            [0] => &integer(10)
          }
        }
      }
    }
    ---8---8
    Compiler/assign_in_call.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    g1:
    f(x)
    u(x)
    'x'
    
    g2:
    f(x)
    u(x)
    'b'
    
    g3:
    f(x)
    u(x)
    'b'
    
    g4:
    f(x)
    u(x)
    'b'
    
    g5:
    f()
    u()
    integer(1)
    
    g6:
    f(3)
    u(3)
    integer(3)
    
    g7:
    f(2)
    u(10)
    integer(10)
    
    g8:
    f(1)
    f(1)
    f(1)
    u(1)
    u()
    u(1)
    
    g9:
    known:
    __get(p) = 0
    __set(p,1)
    f(1)
    unknown:
    __get(p) = 1
    __set(p,3)
    u(3)
    
    g10:
    Done.
    g1:
    f(x)
    u(x)
    'x'
    
    g2:
    f(x)
    u(x)
    'b'
    
    g3:
    f(x)
    u(x)
    'b'
    
    g4:
    f(x)
    u(x)
    'b'
    
    g5:
    f()
    u()
    integer(1)
    
    g6:
    f(3)
    u(3)
    integer(3)
    
    g7:
    f(2)
    u(10)
    integer(10)
    
    g8:
    f(1)
    f(1)
    f(1)
    u(1)
    u()
    u(1)
    
    g9:
    known:
    __get(p) = 0
    __set(p,1)
    __get(p) = 1
    f(1)
    unknown:
    __get(p) = 1
    __set(p,3)
    __get(p) = 3
    u(3)
    
    g10:
    Done.
    Compiler/auto_globals_001.php: SUCCEEDED
    Compiler/auto_globals_002.php: SUCCEEDED
    Compiler/auto_globals_003.php: SUCCEEDED
    Compiler/break_in_global_code.php: SUCCEEDED
    Compiler/chaining_test.php: SUCCEEDED
    Compiler/chain_ending_by_string_index.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        string(1) "f"
      }
    }
    array(1) {
      [0]=>
      string(4) "xubu"
    }
    object(C)#1 (1) {
      ["f"]=>
      string(4) "kuxu"
    }
    string(5) "helxo"
    string(5) "helxo"
    array(1)
    {
      [0] => array(1)
      {
        [0] => string(1) "f"
      }
    }
    array(1)
    {
      [0] => string(4) "bubu"
    }
    
    Warning: A string item used as a reference in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt at expression on line 19, column 1.
    object(C)(1)
    {
      ["f"] => string(4) "kuku"
    }
    
    Warning: A string item used as a reference in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt at expression on line 25, column 1.
    string(5) "hello"
    
    Warning: A string item used as a reference in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt at expression on line 31, column 1.
    string(5) "hello"
    Compiler/continue_in_global_code.php: SUCCEEDED
    Compiler/deep_copy.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array(1) {
      [0]=>
      &array(1) {
        [0]=>
        &array(1) {
          [0]=>
          *RECURSION*
        }
      }
    }
    array(1) {
      [0]=>
      &array(1) {
        [0]=>
        &array(1) {
          [0]=>
          *RECURSION*
        }
      }
    }
    array(2) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) {
          [0]=>
          *RECURSION*
          [1]=>
          int(1)
        }
        [1]=>
        int(1)
      }
      [1]=>
      int(1)
    }
    array(1) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) {
          [0]=>
          *RECURSION*
          [1]=>
          int(1)
        }
        [1]=>
        int(1)
      }
    }
    array(1)
    {
      [0] => &array(1) [recursion]
    }
    array(1)
    {
      [0] => &array(1) [recursion]
    }
    array(2)
    {
      [0] => &array(2) [recursion]
      [1] => integer(1)
    }
    array(1)
    {
      [0] => &array(1) [recursion]
    }
    Compiler/deep_copy_refbox.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Strict Standards: Only variables should be passed by reference in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt on line 42
    array
    {
      0 => integer(1)
    }
    
    Strict Standards: Only variables should be passed by reference in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt on line 45
    array
    {
      0 => integer(1)
    }
    
    Strict Standards: Only variables should be passed by reference in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt on line 49
    array
    {
      0 => integer(1)
    }
    
    Strict Standards: Only variables should be passed by reference in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt on line 52
    array
    {
      0 => integer(1)
    }
    array
    {
      0 => integer(1)
      1 => integer(1)
    }
    array
    {
      0 => integer(1)
      1 => integer(1)
    }
    array
    {
      0 => integer(1)
      1 => integer(1)
    }
    array
    {
      0 => integer(1)
      1 => integer(1)
    }
    Compiler/expr_init.php: SUCCEEDED
    Compiler/foreach1.php: SUCCEEDED
    Compiler/foreach_arrays.php: SUCCEEDED
    Compiler/for_loop.php: SUCCEEDED
    Compiler/function_002.php: SUCCEEDED
    Compiler/function_003.php: SUCCEEDED
    Compiler/function_004.php: SUCCEEDED
    Compiler/function_call.php: SUCCEEDED
    Compiler/if_statement.php: SUCCEEDED
    Compiler/indirect_001.php: SUCCEEDED
    Compiler/indirect_002.php: SUCCEEDED
    Compiler/indirect_003.php: SUCCEEDED
    Compiler/indirect_004.php: SUCCEEDED
    Compiler/indirect_005.php: SUCCEEDED
    Compiler/indirect_007.php: SUCCEEDED
    Compiler/indirect_global.php: SUCCEEDED
    Compiler/inheritance.php: SUCCEEDED
    Compiler/inheritance2.php: SUCCEEDED
    Compiler/isset_unset_001.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Testing x in global code:  <br>
    1 <br>
     <br>
    Testing x (object) in optimized function:  <br>
    1 <br>
     <br>
    Testing x (PhpReference) in optimized function:  <br>
    1 <br>
     <br>
    
    Notice: Undefined variable: y in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt on line 29
    Testing $$x (created at runtime) in optimized function:  <br>
    1 <br>
    Testing x in global code:  <br>
    1 <br>
     <br>
    Testing x (object) in optimized function:  <br>
    1 <br>
     <br>
    Testing x (PhpReference) in optimized function:  <br>
    1 <br>
     <br>
    Testing $$x (created at runtime) in optimized function:  <br>
    1 <br>
    Compiler/null_hints.php: SUCCEEDED
    Compiler/switch.php: SUCCEEDED
    Compiler/ternary_ex.php: SUCCEEDED
    Compiler/typehint_check.php: SUCCEEDED
    Compiler/Inclusions/include2.php: SUCCEEDED
    Compiler/Inclusions/include3.php: SUCCEEDED
    Compiler/Inclusions/include6.php: SUCCEEDED
    Compiler/Inclusions/include_test.php: SUCCEEDED
    Compiler/Inclusions/script.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t01.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t02.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t03.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t04.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t05.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t08.php: SUCCEEDED
    Compiler/PseudoConst/parent.php: SUCCEEDED
    Compiler/PseudoConst/parent2.php: SUCCEEDED
    Compiler/PseudoConst/self.php: SUCCEEDED
    Compiler/PseudoConst/t01.php: SUCCEEDED
    Compiler/PseudoConst/t02.php: SUCCEEDED
    Compiler/PseudoConst/t03.php: SUCCEEDED
    Compiler/PseudoConst/t04.php: SUCCEEDED
    Compiler/PseudoConst/t05.php: SUCCEEDED
    Compiler/PseudoConst/t06.php: SUCCEEDED
    Compiler/PseudoConst/t07.php: SUCCEEDED
    Compiler/PseudoConst/t08.php: SUCCEEDED
    Compiler/PseudoConst/t09.php: SUCCEEDED
    Compiler/PseudoConst/t10.php: SUCCEEDED
    Compiler/PseudoConst/t11.php: SUCCEEDED
    Compiler/PseudoConst/_class_.php: SUCCEEDED
    Compiler/PseudoConst/_function_.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Notice: Undefined variable: a in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\PseudoConst\__input.txt on line 11
    g
    g
    Compiler/Unreachable/t13.php: SUCCEEDED
    DateTime/strftime.php: SUCCEEDED
    DateTime/strtotime1.php: SUCCEEDED
    DateTime/strtotime2.php: SUCCEEDED
    DateTime/strtotime3.php: SUCCEEDED
    DateTime/strtotime4.php: SUCCEEDED
    DateTime/strtotime5.php: SUCCEEDED
    DateTime/time.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    -189388800:-189475200 - 86400
    1964-01-01T00:00:00+0000
    1963-12-31T00:00:00+0000
    1964-06-06
    1963-06-06
    1964-01-06
    1133305200
    -189388800:-189475200 - 86400
    1964-01-01T00:00:00+0000
    1963-12-31T00:00:00+0000
    1964-06-06
    1963-06-06
    1964-01-06
    DateTime/timezones1.php: SUCCEEDED
    FileSystem/basename.php: SUCCEEDED
    FileSystem/basename2.php: SUCCEEDED
    FileSystem/chdir.php: SUCCEEDED
    FileSystem/csv.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    --- write ---
    72
    24
    44
    2
    6
    
    --- read ---
    "hello\n
    world";"aaa""bbb""ccc";"blah blah;";none;"tab\ttab";"space space"\n
    hh'ee;"ss\nsadasdasd s"\n
    """""""""""""""""""""";"""";;"""""";"xxx"""\n
    x\n
    "x\y"\n
    --- write ---
    72
    24
    44
    2
    6
    
    --- read ---
    
    Warning: String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    FileSystem/date.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <pre>[ARRAY
      [INT (0)] => [STRING: "A --> {PM}"]
      [INT (1)] => [STRING: "B --> {719}"]
      [INT (2)] => [STRING: "C --> {C}"]
      [INT (3)] => [STRING: "D --> {Sat}"]
      [INT (4)] => [STRING: "E --> {E}"]
      [INT (5)] => [STRING: "F --> {March}"]
      [INT (6)] => [STRING: "G --> {17}"]
      [INT (7)] => [STRING: "H --> {17}"]
      [INT (8)] => [STRING: "I --> {0}"]
      [INT (9)] => [STRING: "J --> {J}"]
      [INT (10)] => [STRING: "K --> {K}"]
      [INT (11)] => [STRING: "L --> {0}"]
      [INT (12)] => [STRING: "M --> {Mar}"]
      [INT (13)] => [STRING: "N --> {6}"]
      [INT (14)] => [STRING: "O --> {+0100}"]
      [INT (15)] => [STRING: "P --> {+01:00}"]
      [INT (16)] => [STRING: "Q --> {Q}"]
      [INT (17)] => [STRING: "R --> {R}"]
      [INT (18)] => [STRING: "S --> {th}"]
      [INT (19)] => [STRING: "U --> {984240978}"]
      [INT (20)] => [STRING: "V --> {V}"]
      [INT (21)] => [STRING: "W --> {10}"]
      [INT (22)] => [STRING: "X --> {X}"]
      [INT (23)] => [STRING: "Y --> {2001}"]
      [INT (24)] => [STRING: "Z --> {3600}"]
      [INT (25)] => [STRING: "a --> {pm}"]
      [INT (26)] => [STRING: "b --> {b}"]
      [INT (27)] => [STRING: "c --> {2001-03-10T17:16:18+01:00}"]
      [INT (28)] => [STRING: "d --> {10}"]
      [INT (29)] => [STRING: "e --> {Europe/Prague}"]
      [INT (30)] => [STRING: "f --> {f}"]
      [INT (31)] => [STRING: "g --> {5}"]
      [INT (32)] => [STRING: "h --> {05}"]
      [INT (33)] => [STRING: "i --> {16}"]
      [INT (34)] => [STRING: "j --> {10}"]
      [INT (35)] => [STRING: "k --> {k}"]
      [INT (36)] => [STRING: "l --> {Saturday}"]
      [INT (37)] => [STRING: "m --> {03}"]
      [INT (38)] => [STRING: "n --> {3}"]
      [INT (39)] => [STRING: "o --> {2001}"]
      [INT (40)] => [STRING: "p --> {p}"]
      [INT (41)] => [STRING: "q --> {q}"]
      [INT (42)] => [STRING: "r --> {Sat, 10 Mar 2001 17:16:18 +0100}"]
      [INT (43)] => [STRING: "s --> {18}"]
      [INT (44)] => [STRING: "t --> {31}"]
      [INT (45)] => [STRING: "u --> {000000}"]
      [INT (46)] => [STRING: "v --> {v}"]
      [INT (47)] => [STRING: "w --> {6}"]
      [INT (48)] => [STRING: "x --> {x}"]
      [INT (49)] => [STRING: "y --> {01}"]
      [INT (50)] => [STRING: "z --> {68}"]
    ]</pre>
    <pre>[ARRAY
      [INT (0)] => [STRING: "A --> {PM}"]
      [INT (1)] => [STRING: "B --> {719}"]
      [INT (2)] => [STRING: "C --> {C}"]
      [INT (3)] => [STRING: "D --> {Sat}"]
      [INT (4)] => [STRING: "E --> {E}"]
      [INT (5)] => [STRING: "F --> {March}"]
      [INT (6)] => [STRING: "G --> {17}"]
      [INT (7)] => [STRING: "H --> {17}"]
      [INT (8)] => [STRING: "I --> {0}"]
      [INT (9)] => [STRING: "J --> {J}"]
      [INT (10)] => [STRING: "K --> {K}"]
      [INT (11)] => [STRING: "L --> {0}"]
      [INT (12)] => [STRING: "M --> {Mar}"]
      [INT (13)] => [STRING: "N --> {6}"]
      [INT (14)] => [STRING: "O --> {+0100}"]
      [INT (15)] => [STRING: "P --> {+01:00}"]
      [INT (16)] => [STRING: "Q --> {Q}"]
      [INT (17)] => [STRING: "R --> {R}"]
      [INT (18)] => [STRING: "S --> {th}"]
      [INT (19)] => [STRING: "U --> {984240978}"]
      [INT (20)] => [STRING: "V --> {V}"]
      [INT (21)] => [STRING: "W --> {10}"]
      [INT (22)] => [STRING: "X --> {X}"]
      [INT (23)] => [STRING: "Y --> {2001}"]
      [INT (24)] => [STRING: "Z --> {3600}"]
      [INT (25)] => [STRING: "a --> {pm}"]
      [INT (26)] => [STRING: "b --> {b}"]
      [INT (27)] => [STRING: "c --> {2001-03-10T17:16:18+01:00}"]
      [INT (28)] => [STRING: "d --> {10}"]
      [INT (29)] => [STRING: "e --> {Europe/Prague}"]
      [INT (30)] => [STRING: "f --> {f}"]
      [INT (31)] => [STRING: "g --> {5}"]
      [INT (32)] => [STRING: "h --> {05}"]
      [INT (33)] => [STRING: "i --> {16}"]
      [INT (34)] => [STRING: "j --> {10}"]
      [INT (35)] => [STRING: "k --> {k}"]
      [INT (36)] => [STRING: "l --> {Saturday}"]
      [INT (37)] => [STRING: "m --> {03}"]
      [INT (38)] => [STRING: "n --> {3}"]
      [INT (39)] => [STRING: "o --> {2001}"]
      [INT (40)] => [STRING: "p --> {p}"]
      [INT (41)] => [STRING: "q --> {q}"]
      [INT (42)] => [STRING: "r --> {Sat, 10 Mar 2001 17:16:18 +0100}"]
      [INT (43)] => [STRING: "s --> {18}"]
      [INT (44)] => [STRING: "t --> {31}"]
      [INT (45)] => [STRING: "u --> {u}"]
      [INT (46)] => [STRING: "v --> {v}"]
      [INT (47)] => [STRING: "w --> {6}"]
      [INT (48)] => [STRING: "x --> {x}"]
      [INT (49)] => [STRING: "y --> {01}"]
      [INT (50)] => [STRING: "z --> {68}"]
    ]</pre>
    FileSystem/date2.php: SUCCEEDED
    FileSystem/date3.php: SUCCEEDED
    FileSystem/date_unix.php: SUCCEEDED
    FileSystem/dirname.php: SUCCEEDED
    FileSystem/dirname2.php: SUCCEEDED
    FileSystem/disk_free_space.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    118 GB
    Drive C: 202 GB
    Drive D: 118 GB
    Drive E: 306 GB
    Drive F: 
    Warning: disk_free_space(): The device is not ready.
     in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt on line 14
    false
    118 GB
    Drive C: 202 GB
    Drive D: 118 GB
    Drive E: 306 GB
    Drive F: false
    FileSystem/disk_total_space.php: SUCCEEDED
    FileSystem/fgets.php: SUCCEEDED
    FileSystem/file.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <pre>[ARRAY
      [INT (0)] => [STRING: "this is a file with one EOLN
    "]
    ]</pre>
    <pre>[ARRAY
      [INT (0)] => [STRING: ""]
      [INT (1)] => [STRING: "This is a file with two EOLNs. First line is empty."]
    ]</pre>
    <pre>[ARRAY
      [INT (0)] => [STRING: "
    "]
      [INT (1)] => [STRING: "This is a file with two EOLNs. First line is empty.
    "]
    ]</pre>
    <pre>[ARRAY
      [INT (0)] => [STRING: "This is a file with two EOLNs. First line is empty."]
    ]</pre>
    <pre>[ARRAY
      [INT (0)] => [STRING: "this is a file WITHOUT an "end-of-line""]
    ]</pre>
    Line #<b>130</b> : &lt;/html&gt;
    <br />
    [this is a file with one EOLN{\n}
    ]
    <pre>[ARRAY
      [INT (0)] => [STRING: "this is a file with one EOLN
    "]
    ]</pre>
    <pre>[ARRAY
      [INT (0)] => [STRING: ""]
      [INT (1)] => [STRING: "This is a file with two EOLNs. First line is empty."]
    ]</pre>
    <pre>[ARRAY
      [INT (0)] => [STRING: "
    "]
      [INT (1)] => [STRING: "This is a file with two EOLNs. First line is empty.
    "]
    ]</pre>
    <pre>[ARRAY
      [INT (0)] => [STRING: ""]
      [INT (1)] => [STRING: "This is a file with two EOLNs. First line is empty."]
    ]</pre>
    <pre>[ARRAY
      [INT (0)] => [STRING: "this is a file WITHOUT an "end-of-line""]
    ]</pre>
    Line #<b>130</b> : &lt;/html&gt;
    <br />
    [this is a file with one EOLN{\n}
    ]
    FileSystem/filesize.php: SUCCEEDED
    FileSystem/file_exists.php: SUCCEEDED
    FileSystem/file_get_contents.php: SUCCEEDED
    FileSystem/fpassthru.php: SUCCEEDED
    FileSystem/fread.php: SUCCEEDED
    FileSystem/fread1.php: SUCCEEDED
    FileSystem/fread2.php: SUCCEEDED
    FileSystem/fseek.php: SUCCEEDED
    FileSystem/fsockopen.php: SUCCEEDED
    FileSystem/ftell.php: SUCCEEDED
    FileSystem/is_dir.php: SUCCEEDED
    FileSystem/is_executable.php: SUCCEEDED
    FileSystem/pathinfo.php: SUCCEEDED
    FileSystem/popen.php: SUCCEEDED
    FileSystem/readdir.php: SUCCEEDED
    FileSystem/readfile.php: SUCCEEDED
    FileSystem/readline.php: SUCCEEDED
    FileSystem/realpath.php: SUCCEEDED
    FileSystem/scandir.php: SUCCEEDED
    FileSystem/stat.php: SUCCEEDED
    FileSystem/stream_context_set_option.php: SUCCEEDED
    FileSystem/stream_copy_to_stream.php: SUCCEEDED
    FileSystem/stream_copy_to_stream2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <p>Read <b>rb</b>, Write <b>wb</b>
    
    
    COPIED: <b>10125</b>
    <p>Read <b>rb</b>, Write <b>wt</b>
    
    
    COPIED: <b>10121</b>
    <p>Read <b>rb</b>, Write <b>wb</b>
    
    
    COPIED: <b>10161</b>
    <p>Read <b>rb</b>, Write <b>wt</b>
    
    
    COPIED: <b>10125</b>
    FileSystem/testinc.php: SUCCEEDED
    FileSystem/touch.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Warning: touch(): Utime failed: No such file or directory in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt on line 8
    Sorry Could Not change modification time of touch.txt
    Warning: touch(): Utime failed: No such file or directory in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt on line 14
    
    Warning: touch(): Utime failed: No such file or directory in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt on line 16
    
    Warning: touch(): Utime failed: No such file or directory in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt on line 17
    <pre>[ARRAY
      [INT (0)] => [STRING: "January 24, 2010; [12:09:12] (12h) ctime test.txt (1264331352)"]
      [INT (1)] => [STRING: "January 24, 2010; [12:09:12] (12h) mtime test.txt (1264331352)"]
      [INT (2)] => [STRING: "January 24, 2010; [12:09:12] (12h) ctime touch.txt (1264331352)"]
      [INT (3)] => [STRING: "January 24, 2010; [12:09:12] (12h) mtime touch.txt (1264331352)"]
      [INT (4)] => [STRING: "January 24, 2010; [12:09:12] (12h) atime touch.txt (1264331352)"]
      [INT (5)] => [STRING: "January 24, 2010; [12:09:12] (12h) mtime summer.txt (1264331352)"]
      [INT (6)] => [STRING: "January 24, 2010; [12:09:12] (12h) mtime winter.txt (1264331352)"]
    ]</pre>
    Warning: touch(): Unable to access (D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\touch.txt): Permission denied in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 8, column 5.
    Sorry Could Not change modification time of touch.txt
    Warning: touch(): Unable to access (D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\touch.txt): Permission denied in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 14, column 1.
    
    Warning: touch(): Unable to access (D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\winter.txt): Permission denied in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 16, column 1.
    
    Warning: touch(): Unable to access (D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\summer.txt): Permission denied in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 17, column 1.
    <pre>[ARRAY
      [INT (0)] => [STRING: "January 24, 2010; [13:09:12] (13h) ctime test.txt (1264334952)"]
      [INT (1)] => [STRING: "January 24, 2010; [13:09:12] (13h) mtime test.txt (1264334952)"]
      [INT (2)] => [STRING: "January 24, 2010; [13:09:12] (13h) ctime touch.txt (1264334952)"]
      [INT (3)] => [STRING: "January 24, 2010; [13:09:12] (13h) mtime touch.txt (1264334952)"]
      [INT (4)] => [STRING: "January 24, 2010; [13:09:12] (13h) atime touch.txt (1264334952)"]
      [INT (5)] => [STRING: "January 24, 2010; [13:09:12] (13h) mtime summer.txt (1264334952)"]
      [INT (6)] => [STRING: "January 24, 2010; [13:09:12] (13h) mtime winter.txt (1264334952)"]
    ]</pre>
    Math/abs.php: SUCCEEDED
    Math/atan2.php: SUCCEEDED
    Math/base_convert.php: SUCCEEDED
    Math/bindec.php: SUCCEEDED
    Math/ceil.php: SUCCEEDED
    Math/cos.php: SUCCEEDED
    Math/decbin.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <pre>
    [double: 2294967295]
    10001000110010100110101111111111
    [double: 4294967296]
    0
    [double: 8589934590]
    11111111111111111111111111111110
    [double: 8589934590]
    11111111111111111111111111111110
    [double: 8589934591]
    11111111111111111111111111111111
    [Int: 1000.000.000.000]
    11010100101001010001000000000000
    <hr>(-1, -5435, 2.14, 0, 26)
    11111111111111111111111111111111
    11111111111111111110101011000101
    10
    0
    11010 
    </pre>
    <pre>
    [???: 2294967295]
    10001000110010100110101111111111
    [???: 4294967296]
    0
    [???: 8589934590]
    11111111111111111111111111111110
    [???: 8589934590]
    11111111111111111111111111111110
    [???: 8589934591]
    11111111111111111111111111111111
    [Int: 1000.000.000.000]
    11010100101001010001000000000000
    <hr>(-1, -5435, 2.14, 0, 26)
    11111111111111111111111111111111
    11111111111111111110101011000101
    10
    0
    11010 
    </pre>
    Math/dechex.php: SUCCEEDED
    Math/decoct.php: SUCCEEDED
    Math/deg2rad.php: SUCCEEDED
    Math/exp.php: SUCCEEDED
    Math/floor.php: SUCCEEDED
    Math/fmod.php: SUCCEEDED
    Math/hexdec.php: SUCCEEDED
    Math/max.php: SUCCEEDED
    Math/min.php: SUCCEEDED
    Math/modulo_warn.php: SUCCEEDED
    Math/octdec.php: SUCCEEDED
    Math/pow.php: SUCCEEDED
    Math/rad2deg.php: SUCCEEDED
    Math/round.php: SUCCEEDED
    Math/sin.php: SUCCEEDED
    Math/sqrt.php: SUCCEEDED
    Math/tan.php: SUCCEEDED
    Math/uniqid.php: SUCCEEDED
    Misc/calendar_extension.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0
    0
    2375840
    0
    14
    32
    2
    There are 31 days in August 2003
    There are 28 days in February 2003
    There are 29 days in February 2004
    There are 31 days in December 2034
    1748326
    1748324
    374867
    0
    322f32322f35373633
    ebe120e7f9e5ef20e4faf9f1e2
    ebe120e7f9e5ef20e427faf9f1e2
    ebe120e7f9e5ef20e420e0ecf4e9ed20faf9f1e2
    ebe120e7f9e5ef20e42720e0ecf4e9ed20faf9f1e2
    eb22e120e7f9e5ef20e4faf9f122e2
    e12720e7f9e5ef20e4faf9f122e2
    e12720e7f9e5ef20e427faf9f122e2
    e12720e7f9e5ef20e420e0ecf4e9ed20faf9f122e2
    e12720e7f9e5ef20e42720e0ecf4e9ed20faf9f122e2
    Error: Call to undefined function: 'frenchtojd' in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\__input.txt at expression on line 2, column 1.
    Misc/ini_parse.php: SUCCEEDED
    Misc/lexer.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    T_INLINE_HTML
    311 '\r\n'
    T_OPEN_TAG
    368 '&lt;?'
    T_WHITESPACE
    371 ' \r\n\r\n'
    T_FINAL
    345 'final'
    T_WHITESPACE
    371 ' '
    T_CLASS
    353 'class'
    T_WHITESPACE
    371 ' '
    T_STRING
    307 'A'
    T_WHITESPACE
    371 ' \r\n'
        '{'
    T_WHITESPACE
    371 ' \r\n  '
    T_FUNCTION
    334 'function'
    T_WHITESPACE
    371 ' '
    T_STRING
    307 '__get'
        '('
    T_VARIABLE
    309 '$x'
        ')'
    T_WHITESPACE
    371 ' \r\n  '
        '{'
    T_WHITESPACE
    371 ' \r\n    '
    T_VARIABLE
    309 '$x'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_START_HEREDOC
    372 '&lt;&lt;&lt;EOOOOOOOOOOOOOOT\r\n'
    T_ENCAPSED_AND_WHITESPACE
    314 '         &lt;&lt;&lt;hello\r\nEOOOOOOOOOOOOOOt;\r\nEOOOOOOOOOOOOOT;\r\n'
    T_END_HEREDOC
    373 'EOOOOOOOOOOOOOOT'
        ';'
    T_WHITESPACE
    371 '\r\n\r\n    '
        '$'
    T_VARIABLE
    309 '$y'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_ARRAY
    360 'array'
    T_WHITESPACE
    371 ' '
        '('
    T_LNUMBER
    305 '1'
        ','
    T_DNUMBER
    306 '100000000000000'
        ','
    T_DNUMBER
    306 '999999999999999999999999999999999'
        ','
    T_STRING
    307 'true'
        ','
    T_STRING
    307 'false'
        ')'
        ';'
    T_WHITESPACE
    371 '\r\n    '
        '$'
        '{'
        '&quot;'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
    T_DOLLAR_OPEN_CURLY_BRACES
    374 '${'
        '$'
        '{'
    T_CONSTANT_ENCAPSED_STRING
    315 '&quot;xxx&quot;'
        '}'
        '}'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
        '&quot;'
        '}'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_LNUMBER
    305 '1'
        ';'
    T_WHITESPACE
    371 '\r\n    '
        '$'
        '{'
        '&quot;'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
    T_DOLLAR_OPEN_CURLY_BRACES
    374 '${'
        '$'
        '{'
        '&quot;'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
    T_VARIABLE
    309 '$x'
    T_ENCAPSED_AND_WHITESPACE
    314 '-&gt;$$'
    T_VARIABLE
    309 '$x0xx'
        '&quot;'
        '}'
        '}'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
        '&quot;'
        '}'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_LNUMBER
    305 '1'
        ';'
    T_WHITESPACE
    371 '\r\n  '
        '}'
    T_WHITESPACE
    371 ' \r\n'
        '}'
    T_WHITESPACE
    371 '\r\n\r\n'
    T_CLOSE_TAG
    370 '?&gt;'
    '
    '
        '&lt;?'
        ' 
    
    '
        'final'
        ' '
        'class'
        ' '
        'A'
        ' 
    '
        '{'
        ' 
      '
        'function'
        ' '
    258
    258 '
    Warning: String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\__input.txt at expression on line 10, column 7.
    '
        '('
        '$x'
        ')'
        ' 
      '
        '{'
        ' 
        '
        '$x'
        ' '
        '='
        ' '
        '&lt;&lt;&lt;EOOOOOOOOOOOOOOT
    '
        '         &lt;&lt;&lt;'
        'hello'
        '
    '
        'EOOOOOOOOOOOOOOt;
    '
        'EOOOOOOOOOOOOOT;
    '
        'EOOOOOOOOOOOOOOT'
        ';'
        '
    
        '
        '$'
        '$y'
        ' '
        '='
        ' '
        'array'
        ' '
        '('
        '1'
        ','
        '100000000000000'
        ','
        '999999999999999999999999999999999'
        ','
        'true'
        ','
    256
    256 '
    Warning: String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\__input.txt at expression on line 10, column 7.
    '
        ')'
        ';'
        '
        '
        '$'
        '{'
        '&quot;'
        'x'
        '${'
        '$'
        '{'
    -29
    -29 '
    Warning: String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\__input.txt at expression on line 10, column 7.
    '
        '}'
        '}'
        'x'
        '&quot;'
        '}'
        ' '
        '='
        ' '
        '1'
        ';'
        '
        '
        '$'
        '{'
        '&quot;'
        'x'
        '${'
        '$'
        '{'
        '&quot;'
        'x'
        '$x'
        '-&gt;'
        '$'
        '$'
        '$x0xx'
        '&quot;'
        '}'
        '}'
        'x'
        '&quot;'
        '}'
        ' '
        '='
        ' '
        '1'
        ';'
        '
      '
        '}'
        ' 
    '
        '}'
        '
    
    '
        '?&gt;'
    Misc/locale.php: SUCCEEDED
    Misc/output2.php: SUCCEEDED
    Misc/stack_trace.php: FAILED
    Script hung upNo errorsSuccess
    Expected test outputReal script output
    Unhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---> System.IndexOutOfRangeException: Index was outside the bounds of the array.
       at PHP.Core.PhpStackFrame..ctor(ScriptContext context, StackFrame frame, FrameKinds kind)
       at PHP.Core.PhpStackTrace..ctor(ScriptContext context, StackTrace clrTrace)
       at PHP.Library.Errors.Backtrace()
       at <stack_trace.inc>.<Script>.j(ScriptContext <context>) in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\stack_trace.inc:line 11
       at <stack_trace.inc>.<Script>.j(Object instance, PhpStack stack)
       at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <stack_trace.inc>.<Script>.i(ScriptContext <context>) in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\stack_trace.inc:line 6
       at <stack_trace.inc>.<Script>.i(Object instance, PhpStack stack)
       at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <^0>.<Global>.<?0>.h(ScriptContext <context>) in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\__input.txt:line 4
       at PHP.Core.PhpCallback.InvokeInternal(Object[] args)
       at PHP.Library.PhpArrays.Map(PhpCallback map, PhpArray[] arrays)
       at <^1>.<Global>.<?1>.Lambda_1(ScriptContext <context>) in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\__input.txt:line 1
       at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <__input.txt>.<Script>.f(ScriptContext <context>) in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\__input.txt:line 6
       at <__input.txt>.<Script>.f(Object instance, PhpStack stack)
       at <__input.txt>.<Script>.<Main>(ScriptContext <context>, Dictionary`2 <locals>, DObject , DTypeDesc , Boolean ) in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\__input.txt:line 18
       at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)
       at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)
       --- End of inner exception stack trace ---
       at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)
       at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)
       at <Global>.Run(String[] )
    
    Misc/tokens.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    T_REQUIRE_ONCE = 258,
    T_REQUIRE = 259,
    T_EVAL = 260,
    T_INCLUDE_ONCE = 261,
    T_INCLUDE = 262,
    T_LOGICAL_OR = 263,
    T_LOGICAL_XOR = 264,
    T_LOGICAL_AND = 265,
    T_PRINT = 266,
    T_SR_EQUAL = 267,
    T_SL_EQUAL = 268,
    T_XOR_EQUAL = 269,
    T_OR_EQUAL = 270,
    T_AND_EQUAL = 271,
    T_MOD_EQUAL = 272,
    T_CONCAT_EQUAL = 273,
    T_DIV_EQUAL = 274,
    T_MUL_EQUAL = 275,
    T_MINUS_EQUAL = 276,
    T_PLUS_EQUAL = 277,
    T_BOOLEAN_OR = 278,
    T_BOOLEAN_AND = 279,
    T_IS_NOT_IDENTICAL = 280,
    T_IS_IDENTICAL = 281,
    T_IS_NOT_EQUAL = 282,
    T_IS_EQUAL = 283,
    T_IS_GREATER_OR_EQUAL = 284,
    T_IS_SMALLER_OR_EQUAL = 285,
    T_SR = 286,
    T_SL = 287,
    T_INSTANCEOF = 288,
    T_UNSET_CAST = 289,
    T_BOOL_CAST = 290,
    T_OBJECT_CAST = 291,
    T_ARRAY_CAST = 292,
    T_STRING_CAST = 293,
    T_DOUBLE_CAST = 294,
    T_INT_CAST = 295,
    T_DEC = 296,
    T_INC = 297,
    T_CLONE = 298,
    T_NEW = 299,
    T_EXIT = 300,
    T_IF = 301,
    T_ELSEIF = 302,
    T_ELSE = 303,
    T_ENDIF = 304,
    T_LNUMBER = 305,
    T_DNUMBER = 306,
    T_STRING = 307,
    T_STRING_VARNAME = 308,
    T_VARIABLE = 309,
    T_NUM_STRING = 310,
    T_INLINE_HTML = 311,
    T_CHARACTER = 312,
    T_BAD_CHARACTER = 313,
    T_ENCAPSED_AND_WHITESPACE = 314,
    T_CONSTANT_ENCAPSED_STRING = 315,
    T_ECHO = 316,
    T_DO = 317,
    T_WHILE = 318,
    T_ENDWHILE = 319,
    T_FOR = 320,
    T_ENDFOR = 321,
    T_FOREACH = 322,
    T_ENDFOREACH = 323,
    T_DECLARE = 324,
    T_ENDDECLARE = 325,
    T_AS = 326,
    T_SWITCH = 327,
    T_ENDSWITCH = 328,
    T_CASE = 329,
    T_DEFAULT = 330,
    T_BREAK = 331,
    T_CONTINUE = 332,
    T_GOTO = 333,
    T_FUNCTION = 334,
    T_CONST = 335,
    T_RETURN = 336,
    T_TRY = 337,
    T_CATCH = 338,
    T_THROW = 339,
    T_USE = 340,
    T_GLOBAL = 341,
    T_PUBLIC = 342,
    T_PROTECTED = 343,
    T_PRIVATE = 344,
    T_FINAL = 345,
    T_ABSTRACT = 346,
    T_STATIC = 347,
    T_VAR = 348,
    T_UNSET = 349,
    T_ISSET = 350,
    T_EMPTY = 351,
    T_HALT_COMPILER = 352,
    T_CLASS = 353,
    T_INTERFACE = 354,
    T_EXTENDS = 355,
    T_IMPLEMENTS = 356,
    T_OBJECT_OPERATOR = 357,
    T_DOUBLE_ARROW = 358,
    T_LIST = 359,
    T_ARRAY = 360,
    T_CLASS_C = 361,
    T_METHOD_C = 362,
    T_FUNC_C = 363,
    T_LINE = 364,
    T_FILE = 365,
    T_COMMENT = 366,
    T_DOC_COMMENT = 367,
    T_OPEN_TAG = 368,
    T_OPEN_TAG_WITH_ECHO = 369,
    T_CLOSE_TAG = 370,
    T_WHITESPACE = 371,
    T_START_HEREDOC = 372,
    T_END_HEREDOC = 373,
    T_DOLLAR_OPEN_CURLY_BRACES = 374,
    T_CURLY_OPEN = 375,
    T_PAAMAYIM_NEKUDOTAYIM = 376,
    T_DOUBLE_COLON = 376,
    T_NAMESPACE = 377,
    T_NS_C = 378,
    T_DIR = 379,
    T_NS_SEPARATOR = 380,
    T_INCLUDE = 129,
    T_INCLUDE_ONCE = 130,
    T_EVAL = 131,
    T_REQUIRE = 132,
    T_REQUIRE_ONCE = 133,
    T_LOGICAL_OR = 136,
    T_LOGICAL_XOR = 137,
    T_LOGICAL_AND = 138,
    T_PRINT = 139,
    T_PLUS_EQUAL = 140,
    T_MINUS_EQUAL = 141,
    T_MUL_EQUAL = 142,
    T_DIV_EQUAL = 143,
    T_CONCAT_EQUAL = 144,
    T_MOD_EQUAL = 145,
    T_AND_EQUAL = 146,
    T_OR_EQUAL = 147,
    T_XOR_EQUAL = 148,
    T_SL_EQUAL = 149,
    T_SR_EQUAL = 150,
    T_BOOLEAN_OR = 151,
    T_BOOLEAN_AND = 152,
    T_IS_EQUAL = 153,
    T_IS_NOT_EQUAL = 154,
    T_IS_IDENTICAL = 155,
    T_IS_NOT_IDENTICAL = 156,
    T_IS_SMALLER_OR_EQUAL = 157,
    T_IS_GREATER_OR_EQUAL = 158,
    T_SL = 159,
    T_SR = 160,
    T_INC = 161,
    T_DEC = 162,
    T_NEW = 164,
    T_INSTANCEOF = 165,
    T_CLONE = 167,
    T_LNUMBER = 168,
    T_DNUMBER = 170,
    T_STRING = 171,
    T_STRING_VARNAME = 172,
    T_VARIABLE = 173,
    T_NUM_STRING = 174,
    T_INLINE_HTML = 175,
    T_CHARACTER = 176,
    T_BAD_CHARACTER = 177,
    T_ENCAPSED_AND_WHITESPACE = 178,
    T_CONSTANT_ENCAPSED_STRING = 179,
    T_EXIT = 180,
    T_IF = 181,
    T_ELSEIF = 182,
    T_ELSE = 183,
    T_ENDIF = 184,
    T_ECHO = 185,
    T_DO = 186,
    T_WHILE = 187,
    T_ENDWHILE = 188,
    T_FOR = 189,
    T_ENDFOR = 190,
    T_FOREACH = 191,
    T_ENDFOREACH = 192,
    T_AS = 193,
    T_SWITCH = 194,
    T_ENDSWITCH = 195,
    T_CASE = 196,
    T_DEFAULT = 197,
    T_BREAK = 198,
    T_CONTINUE = 199,
    T_FUNCTION = 200,
    T_CONST = 201,
    T_RETURN = 202,
    T_GLOBAL = 203,
    T_STATIC = 204,
    T_VAR = 205,
    T_UNSET = 206,
    T_ISSET = 207,
    T_EMPTY = 208,
    T_CLASS = 209,
    T_EXTENDS = 210,
    T_OBJECT_OPERATOR = 211,
    T_DOUBLE_ARROW = 212,
    T_LIST = 213,
    T_ARRAY = 214,
    T_CLASS_C = 215,
    T_METHOD_C = 216,
    T_FUNC_C = 217,
    T_LINE = 218,
    T_FILE = 219,
    T_COMMENT = 220,
    T_DOC_COMMENT = 221,
    T_OPEN_TAG = 226,
    T_OPEN_TAG_WITH_ECHO = 227,
    T_CLOSE_TAG = 228,
    T_WHITESPACE = 229,
    T_START_HEREDOC = 230,
    T_END_HEREDOC = 231,
    T_DOLLAR_OPEN_CURLY_BRACES = 232,
    T_CURLY_OPEN = 233,
    T_DOUBLE_COLON = 234,
    T_PAAMAYIM_NEKUDOTAYIM = 234,
    T_TRY = 236,
    T_CATCH = 237,
    T_THROW = 238,
    T_INTERFACE = 239,
    T_IMPLEMENTS = 240,
    T_ABSTRACT = 241,
    T_FINAL = 242,
    T_PRIVATE = 243,
    T_PROTECTED = 244,
    T_PUBLIC = 245,
    T_BOOL_CAST = 285,
    T_INT_CAST = 288,
    T_DOUBLE_CAST = 294,
    T_STRING_CAST = 297,
    T_ARRAY_CAST = 299,
    T_OBJECT_CAST = 300,
    T_UNSET_CAST = 301,
    T_HALT_COMPILER = 351,
    Misc/user_error_handlers.php: SUCCEEDED
    Objects/conditional1.php: SUCCEEDED
    Objects/conditional2.php: SUCCEEDED
    Objects/conditional_base_class.php: SUCCEEDED
    Objects/constant_test.php: SUCCEEDED
    Objects/evaled_parent.php: SUCCEEDED
    Objects/getter_setter_bug28444.php: SUCCEEDED
    Objects/instanceof.php: SUCCEEDED
    Objects/new_via_unknown_ctor.php: SUCCEEDED
    Objects/object_creation_test.php: SUCCEEDED
    Objects/static_field_test.php: SUCCEEDED
    Objects/static_method_test.php: SUCCEEDED
    Objects/sys_class_const.php: SUCCEEDED
    Objects/this2.php: SUCCEEDED
    RegEx/ereg.php: SUCCEEDED
    RegEx/preg_match_unmatched_groups.php: SUCCEEDED
    RegEx/preg_replace_eval.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ab"01300 as"00da sd"0asdsa das asd 11asd a1sd a
    ab"01300 as"00da sd"0(aasdasdkjask,$a,\,\l,a,s,d,a,s,d,k,j,a,s,${120})(ldjaklsdjalk,$l,\,\l,d,j,a,k,l,s,d,j,a,l,${120})djdsa das asd 11asd a1sd a
    ab"01300 as"00da sd"0asdsa das asd 11asd a1sd a
    ab"01300 as"00da sd"0(aasdasdkjask,$a,\,\l,a,s,d,a,s,d,k,j,,,${120})(ldjaklsdjalk,$l,\,\l,d,j,a,k,l,s,d,j,,,${120})djdsa das asd 11asd a1sd a
    RegEx/regexp-sql.php: SUCCEEDED
    RegEx/Perl/cache.php: SUCCEEDED
    RegEx/Perl/grep1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      [3] => string(3) "1.5"
      [6] => string(5) "58.54"
    }
    Notice: preg_grep(): Array to string conversion in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\RegEx\Perl\__input.txt at expression on line 5, column 1.
    array(2)
    {
      [3] => string(3) "1.5"
      [6] => string(5) "58.54"
    }
    RegEx/Perl/grep2.php: SUCCEEDED
    RegEx/Perl/match1.php: SUCCEEDED
    RegEx/Perl/match10.php: SUCCEEDED
    RegEx/Perl/match2.php: SUCCEEDED
    RegEx/Perl/match3.php: SUCCEEDED
    RegEx/Perl/match4.php: SUCCEEDED
    RegEx/Perl/match5.php: SUCCEEDED
    RegEx/Perl/match6.php: SUCCEEDED
    RegEx/Perl/match7.php: SUCCEEDED
    RegEx/Perl/match8.php: SUCCEEDED
    RegEx/Perl/match9.php: SUCCEEDED
    RegEx/Perl/match_all1.php: SUCCEEDED
    RegEx/Perl/match_all2.php: SUCCEEDED
    RegEx/Perl/match_all3.php: SUCCEEDED
    RegEx/Perl/match_all4.php: SUCCEEDED
    RegEx/Perl/match_dollar.php: SUCCEEDED
    RegEx/Perl/overflow.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string("kfkaj +j k45´┐Ż´┐Ż´┐Ż´┐Ż´┐Ż3#$%^&kjakfjkaj|kfj")
    string("kfkaj +j k45�����3#$%^&kjakfjkaj|kfj")
    RegEx/Perl/quote1.php: SUCCEEDED
    RegEx/Perl/quote2.php: SUCCEEDED
    RegEx/Perl/quote3.php: SUCCEEDED
    RegEx/Perl/replace1.php: SUCCEEDED
    RegEx/Perl/replace2.php: SUCCEEDED
    RegEx/Perl/replace3.php: SUCCEEDED
    RegEx/Perl/replace4.php: SUCCEEDED
    RegEx/Perl/replace5.php: SUCCEEDED
    RegEx/Perl/replace6.php: SUCCEEDED
    RegEx/Perl/replace7.php: SUCCEEDED
    RegEx/Perl/replace8.php: SUCCEEDED
    RegEx/Perl/replace9.php: SUCCEEDED
    RegEx/Perl/replace_callback1.php: SUCCEEDED
    RegEx/Perl/replace_callback2.php: SUCCEEDED
    RegEx/Perl/split1.php: SUCCEEDED
    RegEx/Perl/split2.php: SUCCEEDED
    RegEx/Perl/split3.php: SUCCEEDED
    RegEx/Perl/split4.php: SUCCEEDED
    RegEx/Perl/split5.php: SUCCEEDED
    RegEx/Perl/ungreedy.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    aaa
    a
    aaa
    
    a
    aa
    aaa
    aa
    aaa
    aaa
    a
    aaa
    a
    a
    aa
    aaa
    aa
    aaa
    RegEx/Perl/unsuccessful-preg_match_all.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0
    4
    1
    4
    0
    4
    1
    7
    SPL/ArrayAccess_offsetExists.php: SUCCEEDED
    SPL/exceptions.php: SUCCEEDED
    Strings/addcslashes.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    \f\o\o\[ \]
    Issues a Warning:
    // echo addcslashes("zoo['.']", 'z..A');
    // output:  \zoo['\.']
    Warning: String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt at expression on line 4, column 1.
    
    Issues a Warning:
    // echo addcslashes("zoo['.']", 'z..A');
    // output:  \zoo['\.']
    Strings/addslashes.php: SUCCEEDED
    Strings/chunk_split.php: SUCCEEDED
    Strings/concat.php: SUCCEEDED
    Strings/count_chars.php: SUCCEEDED
    Strings/crc32.php: SUCCEEDED
    Strings/crypt.php: SUCCEEDED
    Strings/crypt2.php: SUCCEEDED
    Strings/echo.php: SUCCEEDED
    Strings/explode.php: SUCCEEDED
    Strings/get_html_translation_table.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <hr>[&] => &amp;
    [>] => &gt;
    [<] => &lt;
    ["] => &quot;
    <hr>Hallo &amp; &lt;Frau&gt; &amp; Kr&iuml;&iquest;&frac12;mer
    <hr>[&] => &amp;
    [>] => &gt;
    [<] => &lt;
    ["] => &quot;
    <hr>Hallo &amp; &lt;Frau&gt; &amp; Kr�mer
    Strings/nl2br.php: SUCCEEDED
    Strings/pack.php: SUCCEEDED
    Strings/pos.php: SUCCEEDED
    Strings/runtime-quotes.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    fread = (x''y"z)
    fgets = (x''y"z)
    file[0] = (x''y"z)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    
    Warning: fopen(runtime-quotes2.txt): failed to open stream: Permission denied in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt on line 33
    
    Warning: fwrite() expects parameter 1 to be resource, boolean given in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt on line 35
    fwrite = ()
    
    Warning: fputs() expects parameter 1 to be resource, boolean given in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt on line 38
    fputs = ()
    
    Warning: fclose() expects parameter 1 to be resource, boolean given in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt on line 41
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (x'y"z)
    fgets = (x'y"z)
    file[0] = (x'y"z)
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (a\'b"\\ca\)
    fgets = (a\'b"\\ca\'b"\\c)
    file[0] = (a\'b"\\ca\'b"\\c)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    e'e
    e''e
    e'e
    e'e
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    e'e
    e'e
    e'e
    e'e
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    fread = (x''y"z)
    fgets = (x''y"z)
    file[0] = (x''y"z)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    
    Warning: fopen(): Unable to access (D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\runtime-quotes2.txt): Permission denied in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt at expression on line 33, column 3.
    
    Warning: Cannot convert bool to resource implicitly in a call to function fwrite() in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt at expression on line 35, column 3.
    fwrite = ()
    
    Warning: Cannot convert bool to resource implicitly in a call to function fputs() in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt at expression on line 38, column 3.
    fputs = ()
    
    Warning: Cannot convert bool to resource implicitly in a call to function fclose() in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt at expression on line 41, column 3.
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (x'y"z)
    fgets = (x'y"z)
    file[0] = (x'y"z)
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (a\'b"\\ca\)
    fgets = (a\'b"\\ca\'b"\\c)
    file[0] = (a\'b"\\ca\'b"\\c)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    e'e
    e''e
    e'e
    e'e
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    e'e
    e'e
    e'e
    e'e
    Strings/sprintf.php: SUCCEEDED
    Strings/sprintf2.php: SUCCEEDED
    Strings/strtr.php: SUCCEEDED
    Strings/str_ireplace.php: SUCCEEDED
    Strings/str_word_count.php: SUCCEEDED
    Strings/substr_operations.php: SUCCEEDED
    Strings/wordwrap.php: SUCCEEDED
    Variables/advanced_serialize.php: SUCCEEDED
    Variables/arguments.php: SUCCEEDED
    Variables/bitwise.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "00"
    string(2) "31"
    string(2) "31"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    0
    0
    0
    5
    0
    5
    40
    5
    45
    string(48) "000000000000000000000000000000000000000000000000"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(14) "31323331323331"
    string(2) "30"
    string(14) "31323331323331"
    string(16) "3635343635343536"
    string(2) "30"
    string(16) "3635343635343536"
    string(14) "337a5e8be43d7a"
    string(14) "00002130120201"
    string(48) "337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42"
    string(16) "347d598ce33a7e77"
    string(16) "0200243214040100"
    string(48) "367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42"
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "00"
    string(2) "31"
    string(2) "31"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    0
    -9223372036854775808
    -9223372036854775808
    -9223372036854775803
    0
    -9223372036854775803
    40
    5
    45
    string(48) "000000000000000000000000000000000000000000000000"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(14) "31323331323331"
    string(2) "30"
    string(14) "31323331323331"
    string(16) "3635343635343536"
    string(2) "30"
    string(16) "3635343635343536"
    string(14) "337a5e8be43d7a"
    string(14) "00002130120201"
    string(48) "337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42"
    string(16) "347d598ce33a7e77"
    string(16) "0200243214040100"
    string(48) "367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42"
    Variables/comparisons.php: SUCCEEDED
    Variables/constant.php: SUCCEEDED
    Variables/extract.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    EXTR_PREFIX_ALL
    integer(4)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
      'prefix_non_existent' => integer(1)
    }
    <hr>EXTR_PREFIX_INVALID
    integer(5)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => integer(2)
      'non_existent' => integer(1)
      'prefix_' => integer(1)
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => 'hello'
    }
    <hr>EXTR_PREFIX_SAME
    integer(3)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'non_existent' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>EXTR_PREFIX_IF_EXISTS
    integer(3)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>
    EXTR_PREFIX_ALL
    integer(4)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
      'prefix_non_existent' => integer(1)
    }
    <hr>EXTR_PREFIX_INVALID
    integer(2)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_ad' => integer(2)
      'prefix_non_existent' => integer(1)
    }
    <hr>EXTR_PREFIX_SAME
    integer(4)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'non_existent' => integer(1)
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>EXTR_PREFIX_IF_EXISTS
    integer(3)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>
    Variables/func_get_args.php: SUCCEEDED
    Variables/is_number.php: SUCCEEDED
    Variables/serialize.php: SUCCEEDED
    Variables/unserialize_objects.php: SUCCEEDED
    Variables/var_dumping.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Array
    (
        [0] => 1
        [1] => 
        [2] => 1
        [3] => 1.2
        [4] => 
        [5] => asdas
        [6] => Array
            (
                [0] => 1
            )
    
        [7] => stdClass Object
            (
            )
    
        [8] => Resource id #1
    )
    array(9) {
      [0]=>
      bool(true)
      [1]=>
      bool(false)
      [2]=>
      int(1)
      [3]=>
      float(1.2)
      [4]=>
      NULL
      [5]=>
      string(5) "asdas"
      [6]=>
      array(1) {
        [0]=>
        int(1)
      }
      [7]=>
      object(stdClass)#1 (0) {
      }
      [8]=>
      resource(1) of type (stream)
    }
    array (
      0 => true,
      1 => false,
      2 => 1,
      3 => 1.2,
      4 => NULL,
      5 => 'asdas',
      6 => 
      array (
        0 => 1,
      ),
      7 => 
      stdClass::__set_state(array(
      )),
      8 => NULL,
    )
    array
    (
      [0] => 1
      [1] => 
      [2] => 1
      [3] => 1.2
      [4] => 
      [5] => asdas
      [6] => array
      (
        [0] => 1
      )
      [7] => stdClass object
      (
      )
      [8] => resource id #4
    )
    array(9)
    {
      [0] => bool(true)
      [1] => bool(false)
      [2] => integer(1)
      [3] => double(1.2)
      [4] => NULL
      [5] => string(5) "asdas"
      [6] => array(1)
      {
        [0] => integer(1)
      }
      [7] => object(stdClass)(0)
      {
      }
      [8] => resource(4) of type (stream)
    }
    array
    (
      '0' => true,
      '1' => false,
      '2' => 1,
      '3' => 1.2,
      '4' => NULL,
      '5' => 'asdas',
      '6' => array
      (
        '0' => 1
      ),
      '7' => class stdClass
      {
    
      },
      '8' => NULL
    )
    WorkItems/1285%20overrides.php: SUCCEEDED
    WorkItems/22016.php: SUCCEEDED
    WorkItems/22019.php: SUCCEEDED
    WorkItems/26052.php: SUCCEEDED
    WorkItems/26667%20hash.php: SUCCEEDED
    WorkItems/26681.php: SUCCEEDED
    WorkItems/26691.php: SUCCEEDED
    WorkItems/27377.php: SUCCEEDED
    WorkItems/27492.php: SUCCEEDED
    WorkItems/27838%20json.php: SUCCEEDED
    WorkItems/2787.php: SUCCEEDED
    Xml/005.php: SUCCEEDED
    Xml/006.php: SUCCEEDED
    Xml/007.php: SUCCEEDED
    Xml/008.php: SUCCEEDED
    Xml/009.php: SUCCEEDED
    Xml/011.php: SUCCEEDED
    Xml/013.php: SUCCEEDED
    Xml/017.php: SUCCEEDED
    Xml/018.php: SUCCEEDED
    Xml/019.php: SUCCEEDED
    Xml/020.php: SUCCEEDED
    Xml/021.php: SUCCEEDED
    Xml/025.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
      'foo' => 'foobar'
    }
    array
    {
      'html' => 'http://www.w3.org/1999/xhtml'
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
    }
    array
    {
      'html' => 'http://www.w3.org/1999/xhtml'
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'foo' => 'foobar'
      'baz' => 'foobarbaz'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
    }
    array
    {
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
      'baz' => 'foobarbaz'
      'foo' => 'foobar'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
      'baz' => 'foobarbaz'
      'foo' => 'foobar'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
    }
    array
    {
    }
    Xml/026.php: SUCCEEDED
    Xml/027.php: SUCCEEDED
    Xml/028.php: SUCCEEDED
    Xml/029.php: SUCCEEDED
    Xml/030.php: SUCCEEDED
    Xml/032.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    FALSE
    FALSE
    FALSE
    TRUE
    TRUE
    TRUE
    Xml/033.php: SUCCEEDED
    Xml/bug26384.php: SUCCEEDED
    Xml/bug28721.php: SUCCEEDED
    Xml/bug28817.php: SUCCEEDED
    Xml/bug32615.php: SUCCEEDED
    Xml/bug33853.php: SUCCEEDED
    Xml/bug34276.php: SUCCEEDED
    Xml/bug35342.php: SUCCEEDED
    Xml/bug36756.php: SUCCEEDED
    Xml/bug37277.php: SUCCEEDED
    Xml/dom002.php: SUCCEEDED
    Xml/dom003.php: SUCCEEDED
    Xml/dom006.php: SUCCEEDED
    Xml/dom007.php: SUCCEEDED
    Xml/dom_set_attr_node.php: SUCCEEDED
    Xml/xslt001.php: SUCCEEDED
    Xml/xslt002.php: SUCCEEDED
    Xml/xslt003.php: SUCCEEDED
    Xml/xslt004.php: SUCCEEDED
    Xml/xslt005.php: SUCCEEDED
    Xml/xslt006.php: SUCCEEDED
    Xml/xslt007.php: SUCCEEDED
    Xml/xslt010.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test 10: EXSLT Support
      
      
      Test Date : 0001-12-31Z
        year                 : 1
        leap-year            : false
        month-in-year        : 12
        month-name           : December
        month-abbreviation   : Dec
        week-in-year         : 1
        day-in-year          : 365
        day-in-month         : 31
        day-of-week-in-month : 5
        day-in-week          : 2
        day-name             : Monday
        day-abbreviation     : Mon
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : 3000-01-31
        year                 : 3000
        leap-year            : false
        month-in-year        : 1
        month-name           : January
        month-abbreviation   : Jan
        week-in-year         : 5
        day-in-year          : 31
        day-in-month         : 31
        day-of-week-in-month : 5
        day-in-week          : 6
        day-name             : Friday
        day-abbreviation     : Fri
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : 2000-02-29
        year                 : 2000
        leap-year            : true
        month-in-year        : 2
        month-name           : February
        month-abbreviation   : Feb
        week-in-year         : 9
        day-in-year          : 60
        day-in-month         : 29
        day-of-week-in-month : 5
        day-in-week          : 3
        day-name             : Tuesday
        day-abbreviation     : Tue
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : 9990001-12-31Z
        year                 : 9990001
        leap-year            : false
        month-in-year        : 12
        month-name           : December
        month-abbreviation   : Dec
        week-in-year         : 1
        day-in-year          : 365
        day-in-month         : 31
        day-of-week-in-month : 5
        day-in-week          : 2
        day-name             : Monday
        day-abbreviation     : Mon
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : -0004-02-29
        year                 : -4
        leap-year            : true
        month-in-year        : 2
        month-name           : February
        month-abbreviation   : Feb
        week-in-year         : 9
        day-in-year          : 60
        day-in-month         : 29
        day-of-week-in-month : 5
        day-in-week          : 1
        day-name             : Sunday
        day-abbreviation     : Sun
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
    Test 10: EXSLT Support
    Warning: Cannot find the script or external object that implements prefix 'http://exslt.org/dates-and-times'. in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Xml\__input.txt at expression on line 14, column 3.
    
    Warning: Illegal string offset '-1' in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Phalanger.inc at expression on line 7, column 6.
    Xml/xslt011.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test 11: php:function Support
    
    Warning: XSLTProcessor::transformToXml(): A PHP Object cannot be converted to a XPath-string in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Xml\__input.txt on line 18
    <?xml version="1.0"?>
    foobar - secondArg
    foobar - 
    this is from an external DomDocument
    from the Input Document
    static
    Test 11: php:function Support
    <?xml version="1.0" encoding="utf-8"?>foobar - secondArg
    foobar - 
    this is from an external DomDocument
    from the Input Document
    static
    not a DomNode object
    Xml/xslt012.php: SUCCEEDED
    ================================================ FILE: Testing/Tests/TestLogs/TestLog 2010-10-01.htm ================================================ PHP.NET Compiler test log

    PHP.NET Compiler test log

    (92%) 802 succeeded, 68 failed
    Test ResultCompiler error outputExpected test result
    @PHP/classes/array_access_001.php: SUCCEEDED
    @PHP/classes/array_access_002.php: SUCCEEDED
    @PHP/classes/array_access_003.php: SUCCEEDED
    @PHP/classes/array_access_004.php: SUCCEEDED
    @PHP/classes/array_access_005.php: SUCCEEDED
    @PHP/classes/array_access_006.php: SUCCEEDED
    @PHP/classes/array_access_007.php: SUCCEEDED
    @PHP/classes/array_access_008.php: SUCCEEDED
    @PHP/classes/array_access_009.php: SUCCEEDED
    @PHP/classes/array_access_010.php: SUCCEEDED
    @PHP/classes/array_access_011.php: SUCCEEDED
    @PHP/classes/array_access_013.php: SUCCEEDED
    @PHP/classes/assign_op_property_001.php: SUCCEEDED
    @PHP/classes/autoload_001.php: SUCCEEDED
    @PHP/classes/autoload_002.php: SUCCEEDED
    @PHP/classes/autoload_003.php: SUCCEEDED
    @PHP/classes/autoload_005.php: SUCCEEDED
    @PHP/classes/autoload_006.php: SUCCEEDED
    @PHP/classes/bug23951.php: SUCCEEDED
    @PHP/classes/bug24399.php: SUCCEEDED
    @PHP/classes/bug24445.php: SUCCEEDED
    @PHP/classes/bug26737.php: SUCCEEDED
    @PHP/classes/bug27468.php: SUCCEEDED
    @PHP/classes/bug27504.php: SUCCEEDED
    @PHP/classes/class_example.php: SUCCEEDED
    @PHP/classes/class_stdclass.php: SUCCEEDED
    @PHP/classes/clone_001.php: SUCCEEDED
    @PHP/classes/clone_002.php: SUCCEEDED
    @PHP/classes/clone_003.php: SUCCEEDED
    @PHP/classes/clone_004.php: SUCCEEDED
    @PHP/classes/clone_006.php: SUCCEEDED
    @PHP/classes/constants_scope_001.php: SUCCEEDED
    @PHP/classes/ctor_dtor.php: SUCCEEDED
    @PHP/classes/ctor_dtor_inheritance.php: SUCCEEDED
    @PHP/classes/ctor_name_clash.php: SUCCEEDED
    @PHP/classes/dereferencing_001.php: SUCCEEDED
    @PHP/classes/destructor_and_echo.php: SUCCEEDED
    @PHP/classes/destructor_and_references.php: SUCCEEDED
    @PHP/classes/destructor_inheritance.php: SUCCEEDED
    @PHP/classes/destructor_visibility_003.php: SUCCEEDED
    @PHP/classes/factory_001.php: SUCCEEDED
    @PHP/classes/factory_and_singleton_001.php: SUCCEEDED
    @PHP/classes/factory_and_singleton_002.php: SUCCEEDED
    @PHP/classes/final.php: SUCCEEDED
    @PHP/classes/incdec_property_001.php: SUCCEEDED
    @PHP/classes/incdec_property_002.php: SUCCEEDED
    @PHP/classes/incdec_property_003.php: SUCCEEDED
    @PHP/classes/incdec_property_004.php: SUCCEEDED
    @PHP/classes/inheritance.php: SUCCEEDED
    @PHP/classes/inheritance_002.php: SUCCEEDED
    @PHP/classes/interfaces_001.php: SUCCEEDED
    @PHP/classes/interface_construct.php: SUCCEEDED
    @PHP/classes/interface_doubled.php: SUCCEEDED
    @PHP/classes/interface_implemented.php: SUCCEEDED
    @PHP/classes/iterators_001.php: SUCCEEDED
    @PHP/classes/iterators_002.php: SUCCEEDED
    @PHP/classes/iterators_003.php: SUCCEEDED
    @PHP/classes/iterators_004.php: SUCCEEDED
    @PHP/classes/iterators_006.php: SUCCEEDED
    @PHP/classes/iterators_007.php: SUCCEEDED
    @PHP/classes/object_reference_001.php: SUCCEEDED
    @PHP/classes/private_001.php: SUCCEEDED
    @PHP/classes/private_002.php: SUCCEEDED
    @PHP/classes/private_003.php: SUCCEEDED
    @PHP/classes/private_003b.php: SUCCEEDED
    @PHP/classes/private_004.php: SUCCEEDED
    @PHP/classes/private_004b.php: SUCCEEDED
    @PHP/classes/private_005.php: SUCCEEDED
    @PHP/classes/private_005b.php: SUCCEEDED
    @PHP/classes/private_006.php: SUCCEEDED
    @PHP/classes/private_006b.php: SUCCEEDED
    @PHP/classes/private_007.php: SUCCEEDED
    @PHP/classes/private_007b.php: SUCCEEDED
    @PHP/classes/private_members.php: SUCCEEDED
    @PHP/classes/private_redeclare.php: SUCCEEDED
    @PHP/classes/protected_001.php: SUCCEEDED
    @PHP/classes/protected_001b.php: SUCCEEDED
    @PHP/classes/protected_002.php: SUCCEEDED
    @PHP/classes/serialize_001.php: SUCCEEDED
    @PHP/classes/singleton_001.php: SUCCEEDED
    @PHP/classes/static_properties_001.php: SUCCEEDED
    @PHP/classes/type_hinting_001.php: SUCCEEDED
    @PHP/classes/type_hinting_003.php: SUCCEEDED
    @PHP/classes/visibility_000c.php: SUCCEEDED
    @PHP/classes/visibility_001c.php: SUCCEEDED
    @PHP/classes/visibility_002c.php: SUCCEEDED
    @PHP/classes/visibility_003a.php: SUCCEEDED
    @PHP/classes/visibility_003c.php: SUCCEEDED
    @PHP/classes/visibility_004a.php: SUCCEEDED
    @PHP/classes/visibility_004b.php: SUCCEEDED
    @PHP/classes/visibility_004c.php: SUCCEEDED
    @PHP/classes/visibility_005.php: SUCCEEDED
    @PHP/classes/__call_001.php: SUCCEEDED
    @PHP/classes/__set_data_corrupt.php: SUCCEEDED
    @PHP/classes/__set__get_001.php: SUCCEEDED
    @PHP/classes/__set__get_004.php: SUCCEEDED
    @PHP/classes/__set__get_005.php: SUCCEEDED
    @PHP/date/bug17988.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2002-06-25 12:18:48
    2002-06-25 14:18:48
    2002-06-25 13:18:48
    2002-06-25 12:18:48
    2002-06-25 18:18:48
    2002-06-25 14:18:48
    2002-06-25 14:18:48
    2002-06-25 18:18:48
    2002-06-25 10:18:48
    2002-06-25 17:18:48
    2002-06-25 11:18:48
    2002-06-25 17:48:48
    2002-06-25 10:48:48
    2002-06-25 14:18:48
    2002-06-25 14:18:48
    2002-06-25 13:18:48
    2002-06-25 12:18:48
    2002-06-25 18:18:48
    2002-06-25 14:18:48
    2002-06-25 14:18:48
    2002-06-25 18:18:48
    2002-06-25 10:18:48
    2002-06-25 17:18:48
    2002-06-25 11:18:48
    2002-06-25 17:48:48
    2002-06-25 10:48:48
    @PHP/date/bug26317.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2003-11-19 17:20:42
    2003-11-19 17:20:42
    2003-11-19 17:20:42
    2003-11-19 16:20:42
    2003-11-19 16:20:42
    2003-11-19 16:20:42
    @PHP/date/bug26320.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2003-11-19 12:30:42
    2003-11-19 13:30:42
    2003-11-19 12:30:42
    2003-11-19 12:30:42
    @PHP/date/bug28088.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    The following line rightly shows the correct date time:
    04/04/04 2145
    But the following line fails to show the correct date time:
    04/03/04 2245
    The following line rightly shows the correct date time:
    04/04/04 2345
    But the following line fails to show the correct date time:
    04/04/04 0045
    @PHP/date/bug28599.php: SUCCEEDED
    @PHP/date/bug29150.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2005-06-19 22:00:00
    2005-06-20 00:00:00
    @PHP/date/bug29585.php: SUCCEEDED
    @PHP/date/bug29595.php: SUCCEEDED
    @PHP/date/bug33056.php: SUCCEEDED
    @PHP/date/bug33452.php: SUCCEEDED
    @PHP/date/bug33562.php: SUCCEEDED
    @PHP/date/bug33563.php: SUCCEEDED
    @PHP/date/bug33578.php: SUCCEEDED
    @PHP/date/bug33869.php: SUCCEEDED
    @PHP/date/bug34676.php: SUCCEEDED
    @PHP/date/bug34771.php: SUCCEEDED
    @PHP/date/bug35143.php: SUCCEEDED
    @PHP/date/bug35414.php: SUCCEEDED
    @PHP/date/bug35422.php: SUCCEEDED
    @PHP/date/bug35425.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    integer(42)
    integer(1)
    integer(1)
    integer(1)
    integer(1)
    integer(0)
    integer(0)
    integer(1)
    integer(1)
    integer(31)
    integer(1104537661)
    integer(6)
    integer(53)
    integer(5)
    integer(2005)
    integer(0)
    integer(3600)
    integer(292)
    integer(1)
    integer(1)
    integer(1)
    integer(1)
    integer(0)
    integer(0)
    integer(1)
    integer(1)
    integer(31)
    integer(1104559261)
    integer(6)
    integer(53)
    integer(5)
    integer(2005)
    integer(0)
    integer(-18000)
    @PHP/date/bug35456.php: SUCCEEDED
    @PHP/date/bug35624.php: SUCCEEDED
    @PHP/date/bug35630.php: SUCCEEDED
    @PHP/date/bug35699.php: SUCCEEDED
    @PHP/date/bug35705.php: SUCCEEDED
    @PHP/date/bug35885.php: SUCCEEDED
    @PHP/date/bug35887.php: SUCCEEDED
    @PHP/date/date.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    c: 2003-01-23T13:20:59+01:00
    r: Thu, 23 Jan 2003 13:20:59 +0100
    c: 2003-01-23T13:20:59+01:00
    r: Thu, 23 Jan 2003 13:20:59 +0100
    c: 2003-01-23T12:20:59+00:00
    r: Thu, 23 Jan 2003 12:20:59 +0000
    c: 2003-01-23T13:20:59+01:00
    r: Thu, 23 Jan 2003 13:20:59 +0100
    @PHP/date/date_create-1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\date\__input.txt on line 28
    SKIP
    @PHP/date/date_create-2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\date\__input.txt on line 6
    SKIP
    @PHP/date/date_default_timezone_get-3.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Europe/Prague
    America/Chicago
    Europe/Rome
    America/Chicago
    @PHP/date/date_modify-1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\date\__input.txt on line 6
    SKIP
    @PHP/date/date_modify-2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\date\__input.txt on line 6
    SKIP
    @PHP/date/default-timezone-1.php: SUCCEEDED
    @PHP/date/default-timezone-2.php: SUCCEEDED
    @PHP/date/format-negative-timestamp.php: SUCCEEDED
    @PHP/date/strtotime.php: SUCCEEDED
    @PHP/date/timezone-configuration.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    1119125744
    1119125744
    1119125744
    1119125744
    1119129344
    1119125744
    @PHP/doc_examples/test001.php: SUCCEEDED
    @PHP/doc_examples/test002.php: SUCCEEDED
    @PHP/doc_examples/test003.php: SUCCEEDED
    @PHP/doc_examples/test004.php: SUCCEEDED
    @PHP/doc_examples/test005.php: SUCCEEDED
    @PHP/doc_examples/test006.php: SUCCEEDED
    @PHP/doc_examples/test007.php: SUCCEEDED
    @PHP/doc_examples/test008.php: SUCCEEDED
    @PHP/doc_examples/test009.php: SUCCEEDED
    @PHP/doc_examples/test010.php: SUCCEEDED
    @PHP/doc_examples/test011.php: SUCCEEDED
    @PHP/doc_examples/test013.php: SUCCEEDED
    @PHP/doc_examples/test014.php: SUCCEEDED
    @PHP/doc_examples/test015.php: SUCCEEDED
    @PHP/doc_examples/test016.php: SUCCEEDED
    @PHP/doc_examples/test017.php: SUCCEEDED
    @PHP/doc_examples/test018.php: SUCCEEDED
    @PHP/doc_examples/test019.php: SUCCEEDED
    @PHP/doc_examples/test020.php: SUCCEEDED
    @PHP/doc_examples/test021.php: SUCCEEDED
    @PHP/doc_examples/test022.php: SUCCEEDED
    @PHP/doc_examples/test023.php: SUCCEEDED
    @PHP/doc_examples/test024.php: SUCCEEDED
    @PHP/doc_examples/test025.php: SUCCEEDED
    @PHP/doc_examples/test026.php: SUCCEEDED
    @PHP/doc_examples/test027.php: SUCCEEDED
    @PHP/doc_examples/test028.php: SUCCEEDED
    @PHP/doc_examples/test029.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ´┐Żauky
    �auky
    @PHP/doc_examples/test030.php: SUCCEEDED
    @PHP/doc_examples/test031.php: SUCCEEDED
    @PHP/doc_examples/test032.php: SUCCEEDED
    @PHP/doc_examples/test033.php: SUCCEEDED
    @PHP/doc_examples/test034.php: SUCCEEDED
    @PHP/doc_examples/test035.php: SUCCEEDED
    @PHP/doc_examples/test036.php: SUCCEEDED
    @PHP/doc_examples/test037.php: SUCCEEDED
    @PHP/doc_examples/test038.php: SUCCEEDED
    @PHP/doc_examples/test039.php: SUCCEEDED
    @PHP/doc_examples/test040.php: SUCCEEDED
    @PHP/doc_examples/test041.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    call_user_func():
    hello world!
    Strict Standards: call_user_func(): Non-static method MyClass::myCallbackMethod() should not be called statically in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\doc_examples\__input.txt at expression on line 17, column 1.
    Hello World!Hello World!
    @PHP/doc_examples/test042.php: SUCCEEDED
    @PHP/doc_examples/test043.php: SUCCEEDED
    @PHP/doc_examples/test044.php: SUCCEEDED
    @PHP/doc_examples/test045.php: SUCCEEDED
    @PHP/doc_examples/test046.php: SUCCEEDED
    @PHP/doc_examples/test047.php: SUCCEEDED
    @PHP/doc_examples/test048.php: SUCCEEDED
    @PHP/doc_examples/test049.php: SUCCEEDED
    @PHP/doc_examples/test050.php: SUCCEEDED
    @PHP/doc_examples/test051.php: SUCCEEDED
    @PHP/doc_examples/test052.php: SUCCEEDED
    @PHP/doc_examples/test053.php: SUCCEEDED
    @PHP/doc_examples/test054.php: SUCCEEDED
    @PHP/doc_examples/test055.php: SUCCEEDED
    @PHP/doc_examples/test056.php: SUCCEEDED
    @PHP/doc_examples/test057.php: SUCCEEDED
    @PHP/doc_examples/test058.php: SUCCEEDED
    @PHP/doc_examples/test059.php: SUCCEEDED
    @PHP/doc_examples/test060.php: SUCCEEDED
    @PHP/doc_examples/test061.php: SUCCEEDED
    @PHP/doc_examples/test062.php: SUCCEEDED
    @PHP/doc_examples/test063.php: SUCCEEDED
    @PHP/doc_examples/test064.php: SUCCEEDED
    @PHP/doc_examples/test065.php: SUCCEEDED
    @PHP/doc_examples/test066.php: SUCCEEDED
    @PHP/doc_examples/test067.php: SUCCEEDED
    @PHP/doc_examples/test068.php: SUCCEEDED
    @PHP/doc_examples/test069.php: SUCCEEDED
    @PHP/doc_examples/test070.php: SUCCEEDED
    @PHP/doc_examples/test071.php: SUCCEEDED
    @PHP/doc_examples/test072.php: SUCCEEDED
    @PHP/doc_examples/test073.php: SUCCEEDED
    @PHP/doc_examples/test074.php: SUCCEEDED
    @PHP/doc_examples/test075.php: SUCCEEDED
    @PHP/doc_examples/test076.php: SUCCEEDED
    @PHP/doc_examples/test077.php: SUCCEEDED
    @PHP/doc_examples/test078.php: SUCCEEDED
    @PHP/doc_examples/test079.php: SUCCEEDED
    @PHP/doc_examples/test080.php: SUCCEEDED
    @PHP/doc_examples/test081.php: SUCCEEDED
    @PHP/doc_examples/test082.php: SUCCEEDED
    @PHP/doc_examples/test083.php: SUCCEEDED
    @PHP/doc_examples/test084.php: SUCCEEDED
    @PHP/doc_examples/test085.php: SUCCEEDED
    @PHP/doc_examples/test086.php: SUCCEEDED
    @PHP/doc_examples/test087.php: SUCCEEDED
    @PHP/doc_examples/test088.php: SUCCEEDED
    @PHP/doc_examples/test089.php: SUCCEEDED
    @PHP/doc_examples/test090.php: SUCCEEDED
    @PHP/doc_examples/test091.php: SUCCEEDED
    @PHP/doc_examples/test092.php: SUCCEEDED
    @PHP/doc_examples/test093.php: SUCCEEDED
    @PHP/doc_examples/test094.php: SUCCEEDED
    @PHP/doc_examples/test095.php: SUCCEEDED
    @PHP/doc_examples/test096.php: SUCCEEDED
    @PHP/doc_examples/test097.php: SUCCEEDED
    @PHP/doc_examples/test098.php: SUCCEEDED
    @PHP/doc_examples/test099.php: SUCCEEDED
    @PHP/doc_examples/test100.php: SUCCEEDED
    @PHP/doc_examples/test102.php: SUCCEEDED
    @PHP/doc_examples/test103.php: SUCCEEDED
    @PHP/doc_examples/test104.php: SUCCEEDED
    @PHP/doc_examples/test105.php: SUCCEEDED
    @PHP/doc_examples/test107.php: SUCCEEDED
    @PHP/doc_examples/test108.php: SUCCEEDED
    @PHP/doc_examples/test109.php: SUCCEEDED
    @PHP/doc_examples/test110.php: SUCCEEDED
    @PHP/doc_examples/test111.php: SUCCEEDED
    @PHP/doc_examples/test112.php: SUCCEEDED
    @PHP/doc_examples/test113.php: SUCCEEDED
    @PHP/doc_examples/test114.php: SUCCEEDED
    @PHP/doc_examples/test115.php: SUCCEEDED
    @PHP/doc_examples/test116.php: SUCCEEDED
    @PHP/doc_examples/test117.php: SUCCEEDED
    @PHP/doc_examples/test118.php: SUCCEEDED
    @PHP/doc_examples/test119.php: SUCCEEDED
    @PHP/doc_examples/test120.php: SUCCEEDED
    @PHP/doc_examples/test121.php: SUCCEEDED
    @PHP/doc_examples/test122.php: SUCCEEDED
    @PHP/doc_examples/test123.php: SUCCEEDED
    @PHP/doc_examples/test124.php: SUCCEEDED
    @PHP/doc_examples/test125.php: SUCCEEDED
    @PHP/doc_examples/test126.php: SUCCEEDED
    @PHP/doc_examples/test127.php: SUCCEEDED
    @PHP/doc_examples/test128.php: SUCCEEDED
    @PHP/doc_examples/test129.php: SUCCEEDED
    @PHP/doc_examples/test130.php: SUCCEEDED
    @PHP/doc_examples/test131.php: SUCCEEDED
    @PHP/doc_examples/test132.php: SUCCEEDED
    @PHP/doc_examples/test133.php: SUCCEEDED
    @PHP/doc_examples/test134.php: SUCCEEDED
    @PHP/doc_examples/test136.php: SUCCEEDED
    @PHP/doc_examples/test137.php: SUCCEEDED
    @PHP/doc_examples/test138.php: SUCCEEDED
    @PHP/doc_examples/test139.php: SUCCEEDED
    @PHP/doc_examples/test148.php: SUCCEEDED
    @PHP/doc_examples/test149.php: SUCCEEDED
    @PHP/doc_examples/test150.php: SUCCEEDED
    @PHP/doc_examples/test151.php: SUCCEEDED
    @PHP/doc_examples/test152.php: SUCCEEDED
    @PHP/doc_examples/test153.php: SUCCEEDED
    @PHP/doc_examples/test154.php: SUCCEEDED
    @PHP/doc_examples/test155.php: SUCCEEDED
    @PHP/doc_examples/test156.php: SUCCEEDED
    @PHP/doc_examples/test158.php: SUCCEEDED
    @PHP/lang/001.php: SUCCEEDED
    @PHP/lang/002.php: SUCCEEDED
    @PHP/lang/003.php: SUCCEEDED
    @PHP/lang/004.php: SUCCEEDED
    @PHP/lang/005.php: SUCCEEDED
    @PHP/lang/006.php: SUCCEEDED
    @PHP/lang/007.php: SUCCEEDED
    @PHP/lang/008.php: SUCCEEDED
    @PHP/lang/009.php: SUCCEEDED
    @PHP/lang/010.php: SUCCEEDED
    @PHP/lang/011.php: SUCCEEDED
    @PHP/lang/012.php: SUCCEEDED
    @PHP/lang/013.php: SUCCEEDED
    @PHP/lang/014.php: SUCCEEDED
    @PHP/lang/015.php: SUCCEEDED
    @PHP/lang/016.php: SUCCEEDED
    @PHP/lang/017.php: SUCCEEDED
    @PHP/lang/018.php: SUCCEEDED
    @PHP/lang/019.php: SUCCEEDED
    @PHP/lang/020.php: SUCCEEDED
    @PHP/lang/021.php: SUCCEEDED
    @PHP/lang/022.php: SUCCEEDED
    @PHP/lang/023.php: SUCCEEDED
    @PHP/lang/024.php: SUCCEEDED
    @PHP/lang/025.php: SUCCEEDED
    @PHP/lang/026.php: SUCCEEDED
    @PHP/lang/027.php: SUCCEEDED
    @PHP/lang/028.php: SUCCEEDED
    @PHP/lang/030.php: SUCCEEDED
    @PHP/lang/032.php: SUCCEEDED
    @PHP/lang/036.php: SUCCEEDED
    @PHP/lang/037.php: SUCCEEDED
    @PHP/lang/038.php: SUCCEEDED
    @PHP/lang/039.php: SUCCEEDED
    @PHP/lang/040.php: SUCCEEDED
    @PHP/lang/bison1.php: SUCCEEDED
    @PHP/lang/bug17115.php: SUCCEEDED
    @PHP/lang/bug18872.php: SUCCEEDED
    @PHP/lang/bug19943.php: SUCCEEDED
    @PHP/lang/bug20175.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    Deprecated: Assigning the return value of new by reference is deprecated in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\lang\__input.txt on line 110
    foo_static()
    foo_global()
    foo:1
    foo_static()
    foo:1
    bar_static()
    bar_global()
    bar:1
    bar_static()
    bar:1
    wow_static()
    wow_global()
    wow:1
    wow_static()
    wow:1
    oop_test()
    oop_static()
    oop_class()
    oop:1
    oop_static()
    oop:1
    oop_test()
    oop_static()
    oop:1
    foo_static()
    foo_global()
    foo:1
    foo_static()
    foo:1
    bar_static()
    bar_global()
    bar:1
    bar_static()
    bar_global()
    bar:2
    wow_static()
    wow_global()
    wow:1
    wow_static()
    wow:1
    oop_test()
    oop_static()
    oop_class()
    oop:1
    oop_static()
    oop:1
    oop_test()
    oop_static()
    oop:1
    D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\lang\__input.txt(110,4): warning PHP0181: Assigning the return value of new by reference is deprecated
    
    @PHP/lang/bug21094.php: SUCCEEDED
    @PHP/lang/bug21600.php: SUCCEEDED
    @PHP/lang/bug21669.php: SUCCEEDED
    @PHP/lang/bug21849.php: SUCCEEDED
    @PHP/lang/bug21961.php: SUCCEEDED
    @PHP/lang/bug22231.php: SUCCEEDED
    @PHP/lang/bug22367.php: SUCCEEDED
    @PHP/lang/bug22510.php: SUCCEEDED
    @PHP/lang/bug22592.php: SUCCEEDED
    @PHP/lang/bug22690.php: SUCCEEDED
    @PHP/lang/bug23279.php: SUCCEEDED
    @PHP/lang/bug23384.php: SUCCEEDED
    @PHP/lang/bug23489.php: SUCCEEDED
    @PHP/lang/bug23524.php: SUCCEEDED
    @PHP/lang/bug23922.php: SUCCEEDED
    @PHP/lang/bug24054.php: SUCCEEDED
    @PHP/lang/bug24396.php: SUCCEEDED
    @PHP/lang/bug24403.php: SUCCEEDED
    @PHP/lang/bug24436.php: SUCCEEDED
    @PHP/lang/bug24499.php: SUCCEEDED
    @PHP/lang/bug24640.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    double(1700000000000000089258092433847514422797596587883870563356951996370064178581143932836831337636761368874297554515902592900802289500112731978596146714137401870842258241575178866354311397451139753100927220499450359906637902366244989496126909662726242240784739940994096632824796638102733857671280980918272.0000000000)
    1.7E+300
    
    ------
    double(0.0000000000)
    1.7E-300
    
    ------
    double(17000000000000001584208052028780237480128823455860622330108867175329927830437888.0000000000)
    1.7E+79
    
    ------
    double(0.0000000000)
    1.7E-79
    
    ------
    double(169999999999999996096025832433329868941658043870400163508258284150340918121070592.0000000000)
    1.7E+80
    
    ------
    double(0.0000000000)
    1.7E-80
    
    ------
    double(1700000000000000013616404158611892038375594280539217794530130541777964808366194688.0000000000)
    1.7E+81
    
    ------
    double(0.0000000000)
    1.7E-81
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    1.6999810742106E-319
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    1.7000798873397E-320
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    1.6995858216939E-321
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    0
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    0
    
    ------
    double(1700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+300
    
    ------
    double(0.0000000000)
    1.70000000000003E-300
    
    ------
    double(17000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+79
    
    ------
    double(0.0000000000)
    1.70000000000001E-79
    
    ------
    double(170000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+80
    
    ------
    double(0.0000000000)
    1.70000000000001E-80
    
    ------
    double(1700000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+81
    
    ------
    double(0.0000000000)
    1.70000000000001E-81
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    1.69998107421056E-319
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    1.70007988733973E-320
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    1.69464516523548E-321
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    0
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    0
    
    ------
    @PHP/lang/bug24652.php: SUCCEEDED
    @PHP/lang/bug24658.php: SUCCEEDED
    @PHP/lang/bug24783.php: SUCCEEDED
    @PHP/lang/bug24926.php: SUCCEEDED
    @PHP/lang/bug25547.php: SUCCEEDED
    @PHP/lang/bug25652.php: SUCCEEDED
    @PHP/lang/bug25922.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Undefined index here: 'error'
    Undefined index here: ''
    @PHP/lang/bug26182.php: SUCCEEDED
    @PHP/lang/bug26696.php: SUCCEEDED
    @PHP/lang/bug26866.php: SUCCEEDED
    @PHP/lang/bug26869.php: SUCCEEDED
    @PHP/lang/bug27354.php: SUCCEEDED
    @PHP/lang/bug27439.php: SUCCEEDED
    @PHP/lang/bug27535.php: SUCCEEDED
    @PHP/lang/bug28213.php: SUCCEEDED
    @PHP/lang/bug28800.php: SUCCEEDED
    @PHP/lang/bug29566.php: SUCCEEDED
    @PHP/lang/bug29893.php: SUCCEEDED
    @PHP/lang/bug29944.php: SUCCEEDED
    @PHP/lang/bug30638.php: SUCCEEDED
    @PHP/lang/bug30726.php: SUCCEEDED
    @PHP/lang/bug30862.php: SUCCEEDED
    @PHP/lang/bug32924.php: SUCCEEDED
    @PHP/lang/bug35382.php: SUCCEEDED
    @PHP/lang/bug7515.php: SUCCEEDED
    @PHP/lang/each_binary_safety.php: SUCCEEDED
    @PHP/lang/error_2_exception_001.php: SUCCEEDED
    @PHP/lang/foreach_with_object_001.php: SUCCEEDED
    @PHP/lang/foreach_with_references_001.php: SUCCEEDED
    @PHP/lang/type_hints_001.php: SUCCEEDED
    @PHP/standard/array/001.php: SUCCEEDED
    @PHP/standard/array/003.php: SUCCEEDED
    @PHP/standard/array/004.php: SUCCEEDED
    @PHP/standard/array/005.php: SUCCEEDED
    @PHP/standard/array/008.php: SUCCEEDED
    @PHP/standard/array/array_change_key_case.php: SUCCEEDED
    @PHP/standard/array/array_chunk.php: SUCCEEDED
    @PHP/standard/array/array_count_values.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array(0) {
    }
    
    array(1) {
      [0]=>
      int(1)
    }
    
    array(1) {
      [1]=>
      int(1)
    }
    
    array(1) {
      [-1]=>
      int(1)
    }
    
    array(1) {
      [0]=>
      int(2)
    }
    
    array(2) {
      [0]=>
      int(1)
      [1]=>
      int(1)
    }
    
    array(1) {
      [1]=>
      int(2)
    }
    
    array(3) {
      [1]=>
      int(2)
      ["hello"]=>
      int(2)
      ["world"]=>
      int(1)
    }
    
    array(2) {
      ["hello"]=>
      int(2)
      ["world"]=>
      int(1)
    }
    
    array(3) {
      [""]=>
      int(2)
      ["world"]=>
      int(3)
      ["hello"]=>
      int(4)
    }
    
    array(1) {
      [0]=>
      int(1)
    }
    
    array(1) {
      [1]=>
      int(1)
    }
    array(0) [empty]
    
    array(1)
    {
      [0] => integer(1)
    }
    
    array(1)
    {
      [1] => integer(1)
    }
    
    array(1)
    {
      [-1] => integer(1)
    }
    
    array(1)
    {
      [0] => integer(2)
    }
    
    array(2)
    {
      [0] => integer(1)
      [1] => integer(1)
    }
    
    array(1)
    {
      [1] => integer(2)
    }
    
    array(3)
    {
      [1] => integer(2)
      ['hello'] => integer(2)
      ['world'] => integer(1)
    }
    
    array(2)
    {
      ['hello'] => integer(2)
      ['world'] => integer(1)
    }
    
    array(3)
    {
      [''] => integer(2)
      ['world'] => integer(3)
      ['hello'] => integer(4)
    }
    
    array(1)
    {
      [0] => integer(1)
    }
    
    array(1)
    {
      [1] => integer(1)
    }
    @PHP/standard/array/array_diff_1.php: SUCCEEDED
    @PHP/standard/array/array_diff_key.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ------ Test 1 --------
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 2 --------
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 3 --------
    array(6) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [2]=>
      int(4)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [2]=>
      int(4)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 4 --------
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 5 --------
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 6 --------
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 7 --------
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    ------ Test 8 --------
    array(6) {
      [0]=>
      int(0)
      [7]=>
      int(14)
      [2]=>
      int(4)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [0]=>
      int(0)
      [7]=>
      int(14)
      [2]=>
      int(4)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 9 --------
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    ------ Test 1 --------
    array(4)
    {
      [1] => &integer(2)
      [6] => &integer(12)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    array(4)
    {
      [1] => &integer(2)
      [6] => &integer(12)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    ------ Test 2 --------
    array(3)
    {
      [1] => &integer(2)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    array(3)
    {
      [1] => &integer(2)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    ------ Test 3 --------
    array(6)
    {
      [1] => &integer(2)
      [6] => &integer(12)
      [2] => &integer(4)
      [15] => &integer(30)
      [1200] => &integer(2400)
      [-2500] => &integer(-5000)
    }
    array(6)
    {
      [1] => &integer(2)
      [6] => &integer(12)
      [2] => &integer(4)
      [15] => &integer(30)
      [1200] => &integer(2400)
      [-2500] => &integer(-5000)
    }
    ------ Test 4 --------
    array(3)
    {
      [1] => &integer(2)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    array(3)
    {
      [1] => &integer(2)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    ------ Test 5 --------
    array(4)
    {
      [1] => &integer(2)
      [6] => &integer(12)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    array(4)
    {
      [1] => &integer(2)
      [6] => &integer(12)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    ------ Test 6 --------
    array(3)
    {
      [1] => &integer(2)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    array(3)
    {
      [1] => &integer(2)
      [15] => &integer(30)
      [1200] => &integer(2400)
    }
    ------ Test 7 --------
    array(3)
    {
      [7] => &integer(14)
      [11] => &integer(22)
      [1100] => &integer(2200)
    }
    array(3)
    {
      [7] => &integer(14)
      [11] => &integer(22)
      [1100] => &integer(2200)
    }
    ------ Test 8 --------
    array(6)
    {
      [0] => &integer(0)
      [7] => &integer(14)
      [2] => &integer(4)
      [11] => &integer(22)
      [1100] => &integer(2200)
      [-2500] => &integer(-5000)
    }
    array(6)
    {
      [0] => &integer(0)
      [7] => &integer(14)
      [2] => &integer(4)
      [11] => &integer(22)
      [1100] => &integer(2200)
      [-2500] => &integer(-5000)
    }
    ------ Test 9 --------
    array(3)
    {
      [7] => &integer(14)
      [11] => &integer(22)
      [1100] => &integer(2200)
    }
    array(3)
    {
      [7] => &integer(14)
      [11] => &integer(22)
      [1100] => &integer(2200)
    }
    @PHP/standard/array/array_intersect_key.php: SUCCEEDED
    @PHP/standard/array/array_sum.php: SUCCEEDED
    @PHP/standard/array/array_walk_recursive.php: SUCCEEDED
    @PHP/standard/array/bug12776.php: SUCCEEDED
    @PHP/standard/array/bug14580.php: SUCCEEDED
    @PHP/standard/array/bug20381.php: SUCCEEDED
    @PHP/standard/array/bug20865.php: SUCCEEDED
    @PHP/standard/array/bug21182.php: SUCCEEDED
    @PHP/standard/array/bug21918.php: SUCCEEDED
    @PHP/standard/array/bug21998.php: SUCCEEDED
    @PHP/standard/array/bug22088.php: SUCCEEDED
    @PHP/standard/array/bug22463.php: SUCCEEDED
    @PHP/standard/array/bug23581.php: SUCCEEDED
    @PHP/standard/array/bug23788.php: SUCCEEDED
    @PHP/standard/array/bug24198.php: SUCCEEDED
    @PHP/standard/array/bug24220.php: SUCCEEDED
    @PHP/standard/array/bug24766.php: SUCCEEDED
    @PHP/standard/array/bug24897.php: SUCCEEDED
    @PHP/standard/array/bug24980.php: SUCCEEDED
    @PHP/standard/array/bug25359.php: SUCCEEDED
    @PHP/standard/array/bug25708.php: SUCCEEDED
    @PHP/standard/array/bug25758.php: SUCCEEDED
    @PHP/standard/array/bug26458.php: SUCCEEDED
    @PHP/standard/array/bug28974.php: SUCCEEDED
    @PHP/standard/array/bug29493.php: SUCCEEDED
    @PHP/standard/array/bug30266.php: SUCCEEDED
    @PHP/standard/array/bug30833.php: SUCCEEDED
    @PHP/standard/array/bug31158.php: SUCCEEDED
    @PHP/standard/array/bug31213.php: SUCCEEDED
    @PHP/standard/array/bug32021.php: SUCCEEDED
    @PHP/standard/array/bug33382.php: SUCCEEDED
    @PHP/standard/array/bug33989.php: SUCCEEDED
    @PHP/standard/array/bug34227.php: SUCCEEDED
    @PHP/standard/array/bug34982.php: SUCCEEDED
    @PHP/standard/array/bug35014.php: SUCCEEDED
    @PHP/standard/array/bug35022.php: SUCCEEDED
    @PHP/standard/array/bug35821.php: SUCCEEDED
    @PHP/standard/array/count_recursive.php: SUCCEEDED
    @PHP/standard/array/locale_sort.php: SUCCEEDED
    @PHP/standard/array/range.php: SUCCEEDED
    @PHP/standard/assert/assert.php: SUCCEEDED
    @PHP/standard/general_functions/001.php: SUCCEEDED
    @PHP/standard/general_functions/002.php: SUCCEEDED
    @PHP/standard/general_functions/003.php: SUCCEEDED
    @PHP/standard/general_functions/004.php: SUCCEEDED
    @PHP/standard/general_functions/005.php: SUCCEEDED
    @PHP/standard/general_functions/006.php: SUCCEEDED
    @PHP/standard/general_functions/007.php: SUCCEEDED
    @PHP/standard/general_functions/009.php: SUCCEEDED
    @PHP/standard/general_functions/bug25038.php: SUCCEEDED
    @PHP/standard/general_functions/bug27678.php: SUCCEEDED
    @PHP/standard/general_functions/bug29038.php: SUCCEEDED
    @PHP/standard/general_functions/bug31190.php: SUCCEEDED
    @PHP/standard/general_functions/bug32647.php: SUCCEEDED
    @PHP/standard/general_functions/bug35229.php: SUCCEEDED
    @PHP/standard/general_functions/is_resource.php: SUCCEEDED
    @PHP/standard/math/abs.php: SUCCEEDED
    @PHP/standard/math/bug24142.php: SUCCEEDED
    @PHP/standard/math/bug25694.php: SUCCEEDED
    @PHP/standard/math/bug27646.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    double(INF-INF)
    'd:-INF;'
    double(INF-INF)
    double(INF-INF)
    'd:INF;'
    double(INF-INF)
    double(NaNInfini)
    'd:NAN;'
    double(NaNInfini)
    double(-Infinity)
    'd:-INF;'
    double(-Infinity)
    double(Infinity)
    'd:INF;'
    double(Infinity)
    double(NaN)
    'd:NAN;'
    double(NaN)
    @PHP/standard/math/bug30069.php: SUCCEEDED
    @PHP/standard/math/bug30695.php: SUCCEEDED
    @PHP/standard/math/floorceil.php: SUCCEEDED
    @PHP/standard/math/hexdec.php: SUCCEEDED
    @PHP/standard/math/log.php: SUCCEEDED
    @PHP/standard/math/pow.php: SUCCEEDED
    @PHP/standard/math/round.php: SUCCEEDED
    @PHP/standard/reg/001.php: SUCCEEDED
    @PHP/standard/reg/002.php: SUCCEEDED
    @PHP/standard/reg/003.php: SUCCEEDED
    @PHP/standard/reg/004.php: SUCCEEDED
    @PHP/standard/reg/005.php: SUCCEEDED
    @PHP/standard/reg/006.php: SUCCEEDED
    @PHP/standard/reg/007.php: SUCCEEDED
    @PHP/standard/reg/008.php: SUCCEEDED
    @PHP/standard/reg/009.php: SUCCEEDED
    @PHP/standard/reg/010.php: SUCCEEDED
    @PHP/standard/reg/011.php: SUCCEEDED
    @PHP/standard/reg/012.php: SUCCEEDED
    @PHP/standard/reg/013.php: SUCCEEDED
    @PHP/standard/reg/014.php: SUCCEEDED
    @PHP/standard/reg/015.php: SUCCEEDED
    @PHP/standard/reg/016.php: SUCCEEDED
    @PHP/standard/serialize/001.php: SUCCEEDED
    @PHP/standard/serialize/002.php: SUCCEEDED
    @PHP/standard/serialize/003.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    d:100;
    double(100.0000000000)
    
    d:51999999999999996980101120;
    double(51999999999999996980101120.0000000000)
    
    d:8.9999999999999995265585574287341141808127531476202420890331268310546875E-9;
    double(0.0000000090)
    d:100;
    double(100.0000000000)
    
    d:5.2000000000000006E+25;
    double(52000000000000000000000000.0000000000)
    
    d:9.0000000000000045E-09;
    double(0.0000000090)
    @PHP/standard/serialize/004.php: SUCCEEDED
    @PHP/standard/serialize/005.php: SUCCEEDED
    @PHP/standard/serialize/006.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    'O:3:"´┐Ż":1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    object
    {
      '´┐Ż' => '´┐Ż'
    }
    'a:1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    array
    {
      '´┐Ż' => '´┐Ż'
    }
    'O:3:"´┐Ż":1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    object
    {
      'ďż˝' => 'ďż˝'
    }
    'a:1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    array
    {
      'ďż˝' => 'ďż˝'
    }
    @PHP/standard/serialize/bug14293.php: SUCCEEDED
    @PHP/standard/serialize/bug21957.php: SUCCEEDED
    @PHP/standard/serialize/bug23298.php: SUCCEEDED
    @PHP/standard/serialize/bug24063.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0.1 0.1
    0.01 0.01
    0.001 0.001
    0.0001 0.0001
    1.0E-5 1.0E-5
    1.0E-6 1.0E-6
    1.0E-7 1.0E-7
    1.0E-8 1.0E-8
    1.0E-9 1.0E-9
    0.1 0.1
    0.01 0.01
    0.001 0.001
    0.0001 0.0001
    1E-05 1E-05
    1E-06 1E-06
    1E-07 1E-07
    1E-08 1E-08
    1E-09 1E-09
    @PHP/standard/serialize/bug25378.php: SUCCEEDED
    @PHP/standard/serialize/bug26762.php: SUCCEEDED
    @PHP/standard/serialize/bug27469.php: SUCCEEDED
    @PHP/standard/serialize/bug28325.php: SUCCEEDED
    @PHP/standard/serialize/bug30234.php: SUCCEEDED
    @PHP/standard/serialize/bug31402.php: SUCCEEDED
    @PHP/standard/serialize/bug31442.php: SUCCEEDED
    @PHP/standard/strings/add-and-stripcslashes.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    kaboemkara!
    foo\b\a\r\b\az
    \f\o\o\[ \]
    \zoo['\.']
    \abcd\e\f\g\h\i\j\k\l\m\n\o\pqrstuvwxy\z
    1
    5d
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\standard\strings\__input.txt at expression on line 3, column 1.
    
    kaboemkara!
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\standard\strings\__input.txt at expression on line 5, column 1.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\standard\strings\__input.txt at expression on line 6, column 1.
    
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\@PHP\standard\strings\__input.txt at expression on line 8, column 1.
    
    1
    5d
    @PHP/standard/strings/add-and-stripslashes.php: SUCCEEDED
    @PHP/standard/strings/basename.php: SUCCEEDED
    @PHP/standard/strings/bin2hex.php: SUCCEEDED
    @PHP/standard/strings/bug20108.php: SUCCEEDED
    @PHP/standard/strings/bug20169.php: SUCCEEDED
    @PHP/standard/strings/bug20261.php: SUCCEEDED
    @PHP/standard/strings/bug20927.php: SUCCEEDED
    @PHP/standard/strings/bug21338.php: SUCCEEDED
    @PHP/standard/strings/bug21453.php: SUCCEEDED
    @PHP/standard/strings/bug21730.php: SUCCEEDED
    @PHP/standard/strings/bug21744.php: SUCCEEDED
    @PHP/standard/strings/bug22008.php: SUCCEEDED
    @PHP/standard/strings/bug22187.php: SUCCEEDED
    @PHP/standard/strings/bug22224.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      0 => 
      object
      {
      }
      1 => 
      object
      {
      }
    }
    @PHP/standard/strings/bug22227.php: SUCCEEDED
    @PHP/standard/strings/bug22904.php: SUCCEEDED
    @PHP/standard/strings/bug23650.php: SUCCEEDED
    @PHP/standard/strings/bug23894.php: SUCCEEDED
    @PHP/standard/strings/bug24098.php: SUCCEEDED
    @PHP/standard/strings/bug24208.php: SUCCEEDED
    @PHP/standard/strings/bug24281.php: SUCCEEDED
    @PHP/standard/strings/bug25671.php: SUCCEEDED
    @PHP/standard/strings/bug25707.php: SUCCEEDED
    @PHP/standard/strings/bug26878.php: SUCCEEDED
    @PHP/standard/strings/bug26973.php: SUCCEEDED
    @PHP/standard/strings/bug27276.php: SUCCEEDED
    @PHP/standard/strings/bug27278.php: SUCCEEDED
    @PHP/standard/strings/bug27295.php: SUCCEEDED
    @PHP/standard/strings/bug27457.php: SUCCEEDED
    @PHP/standard/strings/bug27675.php: SUCCEEDED
    @PHP/standard/strings/bug28386.php: SUCCEEDED
    @PHP/standard/strings/bug33076.php: SUCCEEDED
    @PHP/standard/strings/chr_ord.php: SUCCEEDED
    @PHP/standard/strings/chunk_split.php: SUCCEEDED
    @PHP/standard/strings/count_chars.php: SUCCEEDED
    @PHP/standard/strings/crc32.php: SUCCEEDED
    @PHP/standard/strings/explode.php: SUCCEEDED
    @PHP/standard/strings/implode.php: SUCCEEDED
    @PHP/standard/strings/md5.php: SUCCEEDED
    @PHP/standard/strings/md5raw.php: SUCCEEDED
    @PHP/standard/strings/nl2br.php: SUCCEEDED
    @PHP/standard/strings/sha1.php: SUCCEEDED
    @PHP/standard/strings/sha1raw.php: SUCCEEDED
    @PHP/standard/strings/sprintf_f.php: SUCCEEDED
    @PHP/standard/strings/strcspn.php: SUCCEEDED
    @PHP/standard/strings/strings001.php: SUCCEEDED
    @PHP/standard/strings/strpos.php: SUCCEEDED
    @PHP/standard/strings/strrev.php: SUCCEEDED
    @PHP/standard/strings/strripos.php: SUCCEEDED
    @PHP/standard/strings/strrpos.php: SUCCEEDED
    @PHP/standard/strings/strspn.php: SUCCEEDED
    @PHP/standard/strings/strstr.php: SUCCEEDED
    @PHP/standard/strings/strtoupper.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    cfbfbdcfbfbdcfbfbd
    cfafbdcfafbdcfafbd
    @PHP/standard/strings/strtr.php: SUCCEEDED
    @PHP/standard/strings/strval.php: SUCCEEDED
    @PHP/standard/strings/str_repeat.php: SUCCEEDED
    @PHP/standard/strings/str_shuffle.php: SUCCEEDED
    @PHP/standard/strings/str_word_count.php: SUCCEEDED
    @PHP/standard/strings/substr_count.php: SUCCEEDED
    @PHP/standard/strings/substr_replace.php: SUCCEEDED
    @PHP/standard/strings/wordwrap.php: SUCCEEDED
    @PHP/standard/time/001.php: SUCCEEDED
    @PHP/standard/time/idate.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    U: 1043324459
    Y: 2003
    z: 22
    y: 3
    m: 1
    n: 1
    d: 23
    j: 23
    H: 13
    G: 13
    h: 1
    g: 1
    i: 20
    s: 59
    t: 31
    w: 4
    L: 0
    B: 556
    I: 0
    W: 4
    U: 1043324459
    Y: 2003
    z: 22
    y: 3
    m: 1
    n: 1
    d: 23
    j: 23
    H: 12
    G: 12
    h: 12
    g: 12
    i: 20
    s: 59
    t: 31
    w: 4
    L: 0
    B: 556
    I: 0
    W: 4
    @PHP/strings/001.php: SUCCEEDED
    @PHP/strings/002.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    fprintf test 1:abcde
    20
    printf test 1:simple string
    printf test 2:42
    printf test 3:3.333333
    printf test 4:3.3333333333
    printf test 5:2.50      
    printf test 6:2.50000000
    printf test 7:0000002.50
    printf test 8:<                 foo>
    printf test 9:<bar                 >
    printf test 10: 123456789012345
    printf test 10:<h´┐Żyesterettsjustitiarius>
    printf test 11: 123456789012345678901234567890
    printf test 11:<    h´┐Żyesterettsjustitiarius>
    printf test 12:-12.34
    printf test 13:  -12
    printf test 14:@
    printf test 15:10101010
    printf test 16:aa
    printf test 17:AA
    printf test 18:        10101010
    printf test 19:              aa
    printf test 20:              AA
    printf test 21:0000000010101010
    printf test 22:00000000000000aa
    printf test 23:00000000000000AA
    printf test 24:abcde
    printf test 25:gazonk
    printf test 26:2 1
    printf test 27:3 1 2
    printf test 28:02  1
    printf test 29:2   1
    printf test 30:x
    vprintf test 1:2   1
    fprintf test 1:abcde
    20
    printf test 1:simple string
    printf test 2:42
    printf test 3:3.333333
    printf test 4:3.3333333333
    printf test 5:2.50      
    printf test 6:2.50000000
    printf test 7:0000002.50
    printf test 8:<                 foo>
    printf test 9:<bar                 >
    printf test 10: 123456789012345
    printf test 10:<h�yesterettsjustitiarius>
    printf test 11: 123456789012345678901234567890
    printf test 11:<    h�yesterettsjustitiarius>
    printf test 12:-12.34
    printf test 13:  -12
    printf test 14:@
    printf test 15:10101010
    printf test 16:aa
    printf test 17:AA
    printf test 18:        10101010
    printf test 19:              aa
    printf test 20:              AA
    printf test 21:0000000010101010
    printf test 22:00000000000000aa
    printf test 23:00000000000000AA
    printf test 24:abcde
    printf test 25:gazonk
    printf test 26:2 1
    printf test 27:3 1 2
    printf test 28:02  1
    printf test 29:2   1
    printf test 30:x
    vprintf test 1:2   1
    @PHP/strings/bug22592.php: SUCCEEDED
    Arrays/array1.php: SUCCEEDED
    Arrays/array_diff_intersect.php: SUCCEEDED
    Arrays/array_diff_intersect2.php: SUCCEEDED
    Arrays/array_diff_intersect3.php: SUCCEEDED
    Arrays/array_map.php: SUCCEEDED
    Arrays/array_merge_recursive.php: SUCCEEDED
    Arrays/array_reduce1.php: SUCCEEDED
    Arrays/array_reduce2.php: SUCCEEDED
    Arrays/array_slice.php: SUCCEEDED
    Arrays/array_sumprod.php: SUCCEEDED
    Arrays/array_unshift.php: SUCCEEDED
    Arrays/array_walk.php: SUCCEEDED
    Arrays/array_walk_recursive.php: SUCCEEDED
    Arrays/multisort.php: SUCCEEDED
    Arrays/optimizations.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    3
    4
    5
    a
    b
    c
    
    Warning: strtolower() expects parameter 1 to be string, array given in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Arrays\__input.txt on line 15
    
    cablo
    3
    4
    5
    a
    b
    c
    array
    cablo
    Arrays/recursion.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    f1:
    array(2) {
      ["a"]=>
      array(5) {
        ["a"]=>
        &array(3) {
          ["a"]=>
          &array(3) {
            ["a"]=>
            *RECURSION*
            [0]=>
            string(1) "y"
            [1]=>
            string(1) "z"
          }
          [0]=>
          string(1) "y"
          [1]=>
          string(1) "z"
        }
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        string(1) "x"
      }
      [0]=>
      string(1) "w"
    }
    f2:
    array(1) {
      ["A"]=>
      &array(2) {
        ["a"]=>
        &array(2) {
          ["a"]=>
          *RECURSION*
          [0]=>
          string(1) "z"
        }
        [0]=>
        string(1) "z"
      }
    }
    f3:
    array(2) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) {
          [0]=>
          *RECURSION*
          [1]=>
          string(1) "z"
        }
        [1]=>
        string(1) "z"
      }
      [1]=>
      string(1) "z"
    }
    f4:
    
    Warning: array_merge_recursive(): recursion detected in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Arrays\__input.txt on line 37
    array(1) {
      ["a"]=>
      &array(3) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
      }
    }
    f5:
    array(1) {
      ["a"]=>
      array(6) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        int(1)
        [4]=>
        int(2)
        [5]=>
        int(3)
      }
    }
    f6:
    array(1) {
      ["a"]=>
      array(2) {
        [0]=>
        string(2) "xx"
        [1]=>
        int(2)
      }
    }
    f7:
    array(1) {
      ["a"]=>
      array(1) {
        ["a"]=>
        array(1) {
          ["a"]=>
          &array(1) {
            ["a"]=>
            &array(1) {
              ["a"]=>
              *RECURSION*
            }
          }
        }
      }
    }
    f1:
    array(2)
    {
      ['a'] => array(5)
      {
        ['a'] => &array(3)
        {
          ['a'] => &array(3) [recursion]
          [0] => string(1) "y"
          [1] => string(1) "z"
        }
        [0] => integer(1)
        [1] => integer(2)
        [2] => integer(3)
        [3] => string(1) "x"
      }
      [0] => string(1) "w"
    }
    f2:
    array(1)
    {
      ['A'] => &array(2)
      {
        ['a'] => &array(2) [recursion]
        [0] => string(1) "z"
      }
    }
    f3:
    array(2)
    {
      [0] => &array(2) [recursion]
      [1] => string(1) "z"
    }
    f4:
    array(1)
    {
      ['a'] => array(6)
      {
        [0] => integer(1)
        [1] => integer(2)
        [2] => integer(3)
        [3] => integer(1)
        [4] => integer(2)
        [5] => integer(3)
      }
    }
    f5:
    array(1)
    {
      ['a'] => array(6)
      {
        [0] => integer(1)
        [1] => integer(2)
        [2] => integer(3)
        [3] => integer(1)
        [4] => integer(2)
        [5] => integer(3)
      }
    }
    f6:
    array(1)
    {
      ['a'] => array(2)
      {
        [0] => string(2) "xx"
        [1] => integer(2)
      }
    }
    f7:
    array(1)
    {
      ['a'] => &array(1)
      {
        ['a'] => &array(1) [recursion]
      }
    }
    Arrays/sort.php: SUCCEEDED
    Arrays/usort.php: SUCCEEDED
    Bugs/class_incompletepart.php: SUCCEEDED
    Bugs/division-by-zero.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    DIVISION
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt on line 6
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt on line 8
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt on line 10
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt on line 12
    bool(false)
    MODULO
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt on line 16
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt on line 18
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt on line 20
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt on line 22
    bool(false)
    DIVISION
    bool(false)
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt at expression on line 10, column 2.
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt at expression on line 12, column 2.
    bool(false)
    MODULO
    bool(false)
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt at expression on line 20, column 2.
    bool(false)
    
    Warning: Division by zero in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt at expression on line 22, column 2.
    bool(false)
    D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt(6,10): warning PHP0150: Division by zero
    D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt(8,9): warning PHP0150: Division by zero
    D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt(16,10): warning PHP0150: Division by zero
    D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt(18,9): warning PHP0150: Division by zero
    
    Bugs/function-in-unknown-class.php: SUCCEEDED
    Bugs/is_a_null_value.php: SUCCEEDED
    Bugs/preg-named-groups.php: SUCCEEDED
    Bugs/preg-replace-advanced.php: SUCCEEDED
    Bugs/preg-replace-range.php: SUCCEEDED
    Bugs/preg-replace.php: SUCCEEDED
    Bugs/preg-this-dynamic.php: FAILED
    Script hung upNo errorsSuccess
    Expected test outputReal script output
    Unhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---> PHP.Core.Debug+AssertException: Assertion failed: 
       at PHP.Core.Debug.Fail(String message)
       at PHP.Core.Debug.Assert(Boolean condition)
       at PHP.Core.RelativePath.ParseCanonical(String relativePath)
       at PHP.Core.Emit.TransientAssemblyBuilder.Build(String sourceCode, SourceCodeDescriptor descriptor, EvalKinds kind, CompilationContext context, ScriptContext scriptContext, DTypeDesc referringType, NamingContext namingContext, Boolean completeSource)
       at PHP.Core.DynamicCode.EvalInternal(String prefix, String code, String suffix, EvalKinds kind, ScriptContext scriptContext, Dictionary`2 localVariables, DObject self, DTypeDesc referringType, SourceCodeDescriptor descriptor, Boolean entireFile, NamingContext namingContext)
       at PHP.Core.DynamicCode.Eval(String code, Boolean synthetic, ScriptContext context, Dictionary`2 definedVariables, DObject self, DTypeDesc referringType, String callerRelativeSourcePath, Int32 line, Int32 column, Int32 containerId, NamingContext namingContext)
       at PHP.Library.PerlRegExp.Evaluator.ReplaceCodeExecute(Match m)
       at System.Text.RegularExpressions.RegexReplacement.Replace(MatchEvaluator evaluator, Regex regex, String input, Int32 count, Int32 startat)
       at System.Text.RegularExpressions.Regex.Replace(String input, MatchEvaluator evaluator, Int32 count)
       at PHP.Library.PerlRegExp.ReplaceInternal(DObject self, Dictionary`2 definedVariables, PerlRegExpConverter converter, PhpCallback callback, String str, Int32 limit, SourceCodeDescriptor sourceCodeDesc, Int32& count)
       at PHP.Library.PerlRegExp.SimpleReplace(DObject self, Dictionary`2 definedVariables, Object pattern, String replacement, PhpCallback callback, Object data, Int32 limit, SourceCodeDescriptor descriptor, Int32& count)
       at PHP.Library.PerlRegExp.Replace(DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, PhpCallback callback, Object data, Int32 limit, Int32& count)
       at PHP.Library.PerlRegExp.Replace(DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, Object data)
       at PHP.Dynamic.PhpNetClassLibrary.preg_replace(Object , PhpStack )
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <__input.txt>.a.a(ScriptContext ) in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt:line 16
       at <__input.txt>.a.<Mediator>(ScriptContext )
       at <__input.txt>.a.a(Object instance, PhpStack stack)
       at <__input.txt>.<Script>.<Main>(ScriptContext <context>, Dictionary`2 <locals>, DObject , DTypeDesc , Boolean ) in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Bugs\__input.txt:line 19
       at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)
       at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)
       --- End of inner exception stack trace ---
       at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)
       at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)
       at <Global>.Run(String[] )
    
    Bugs/preg-this-dynamic2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    foo: ahoj
    foo: lidi
    foo: rozkladame
    foo: ahoj
    foo: lidi
    foo: rozkladame
    foo: ahoj
    foo: lidi
    foo: rozkladame
    
    Notice: Undefined variable: this.
    
    Error: Call to a member function foo() on a non-object.
    Bugs/preg-this.php: SUCCEEDED
    Bugs/preg-ungreedy-bugs.php: SUCCEEDED
    Bugs/preg-unkn.php: SUCCEEDED
    Compiler/abstracts.php: SUCCEEDED
    Compiler/assignments.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ---1---1float(-1.5)
    float(2.5)
    float(0.83333333333333)
    int(6)
    int(8)
    ---2---2float(8.8333333333333)
    float(8.8333333333333)
    float(8.8333333333333)
    int(8)
    int(8)
    ---3---3---4---4---5---5array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [1]=>
      array(1) {
        [2]=>
        array(1) {
          [3]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    ---6---6array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "u"
    }
    array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "v"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    ---7---7array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    ---8---8
    ---1---1double(-1.5)
    double(2.5)
    double(0.833333333333333)
    integer(6)
    integer(8)
    ---2---2double(8.83333333333333)
    double(8.83333333333333)
    double(8.83333333333333)
    integer(8)
    integer(8)
    ---3---3---4---4---5---5array(1)
    {
      [0] => array(1)
      {
        [0] => array(1)
        {
          [0] => array(3)
          {
            [0] => integer(1)
            [1] => integer(2)
            [2] => integer(3)
          }
        }
      }
    }
    array(1)
    {
      [0] => array(1)
      {
        [0] => array(1)
        {
          [0] => array(3)
          {
            [0] => integer(1)
            [1] => integer(2)
            [2] => integer(3)
          }
        }
      }
    }
    array(1)
    {
      [1] => array(1)
      {
        [2] => array(1)
        {
          [3] => array(3)
          {
            [0] => integer(1)
            [1] => integer(2)
            [2] => integer(3)
          }
        }
      }
    }
    ---6---6array(4)
    {
      [0] => integer(1)
      [1] => integer(2)
      [2] => integer(3)
      [3] => string(1) "u"
    }
    array(4)
    {
      [0] => integer(1)
      [1] => integer(2)
      [2] => integer(3)
      [3] => string(1) "v"
    }
    array(5)
    {
      [0] => integer(1)
      [1] => integer(2)
      [2] => integer(3)
      [3] => string(1) "w"
      [4] => string(1) "z"
    }
    array(5)
    {
      [0] => integer(1)
      [1] => integer(2)
      [2] => integer(3)
      [3] => string(1) "w"
      [4] => string(1) "z"
    }
    ---7---7array(1)
    {
      [0] => array(1)
      {
        [0] => array(1)
        {
          [0] => array(1)
          {
            [0] => &integer(10)
          }
        }
      }
    }
    array(1)
    {
      [0] => array(1)
      {
        [0] => array(1)
        {
          [0] => array(1)
          {
            [0] => &integer(10)
          }
        }
      }
    }
    ---8---8
    Compiler/assign_in_call.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    g1:
    f(x)
    u(x)
    'x'
    
    g2:
    f(x)
    u(x)
    'b'
    
    g3:
    f(x)
    u(x)
    'b'
    
    g4:
    f(x)
    u(x)
    'b'
    
    g5:
    f()
    u()
    integer(1)
    
    g6:
    f(3)
    u(3)
    integer(3)
    
    g7:
    f(2)
    u(10)
    integer(10)
    
    g8:
    f(1)
    f(1)
    f(1)
    u(1)
    u()
    u(1)
    
    g9:
    known:
    __get(p) = 0
    __set(p,1)
    f(1)
    unknown:
    __get(p) = 1
    __set(p,3)
    u(3)
    
    g10:
    Done.
    g1:
    f(x)
    u(x)
    'x'
    
    g2:
    f(x)
    u(x)
    'b'
    
    g3:
    f(x)
    u(x)
    'b'
    
    g4:
    f(x)
    u(x)
    'b'
    
    g5:
    f()
    u()
    integer(1)
    
    g6:
    f(3)
    u(3)
    integer(3)
    
    g7:
    f(2)
    u(10)
    integer(10)
    
    g8:
    f(1)
    f(1)
    f(1)
    u(1)
    u()
    u(1)
    
    g9:
    known:
    __get(p) = 0
    __set(p,1)
    __get(p) = 1
    f(1)
    unknown:
    __get(p) = 1
    __set(p,3)
    __get(p) = 3
    u(3)
    
    g10:
    Done.
    Compiler/auto_globals_001.php: SUCCEEDED
    Compiler/auto_globals_002.php: SUCCEEDED
    Compiler/auto_globals_003.php: SUCCEEDED
    Compiler/break_in_global_code.php: SUCCEEDED
    Compiler/chaining_test.php: SUCCEEDED
    Compiler/chain_ending_by_string_index.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        string(1) "f"
      }
    }
    array(1) {
      [0]=>
      string(4) "xubu"
    }
    object(C)#1 (1) {
      ["f"]=>
      string(4) "kuxu"
    }
    string(5) "helxo"
    string(5) "helxo"
    array(1)
    {
      [0] => array(1)
      {
        [0] => string(1) "f"
      }
    }
    array(1)
    {
      [0] => string(4) "bubu"
    }
    
    Warning: A string item used as a reference in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt at expression on line 19, column 1.
    object(C)(1)
    {
      ["f"] => string(4) "kuku"
    }
    
    Warning: A string item used as a reference in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt at expression on line 25, column 1.
    string(5) "hello"
    
    Warning: A string item used as a reference in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt at expression on line 31, column 1.
    string(5) "hello"
    Compiler/continue_in_global_code.php: SUCCEEDED
    Compiler/deep_copy.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array(1) {
      [0]=>
      &array(1) {
        [0]=>
        &array(1) {
          [0]=>
          *RECURSION*
        }
      }
    }
    array(1) {
      [0]=>
      &array(1) {
        [0]=>
        &array(1) {
          [0]=>
          *RECURSION*
        }
      }
    }
    array(2) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) {
          [0]=>
          *RECURSION*
          [1]=>
          int(1)
        }
        [1]=>
        int(1)
      }
      [1]=>
      int(1)
    }
    array(1) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) {
          [0]=>
          *RECURSION*
          [1]=>
          int(1)
        }
        [1]=>
        int(1)
      }
    }
    array(1)
    {
      [0] => &array(1) [recursion]
    }
    array(1)
    {
      [0] => &array(1) [recursion]
    }
    array(2)
    {
      [0] => &array(2) [recursion]
      [1] => integer(1)
    }
    array(1)
    {
      [0] => &array(1) [recursion]
    }
    Compiler/deep_copy_refbox.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Strict Standards: Only variables should be passed by reference in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt on line 42
    array
    {
      0 => integer(1)
    }
    
    Strict Standards: Only variables should be passed by reference in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt on line 45
    array
    {
      0 => integer(1)
    }
    
    Strict Standards: Only variables should be passed by reference in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt on line 49
    array
    {
      0 => integer(1)
    }
    
    Strict Standards: Only variables should be passed by reference in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt on line 52
    array
    {
      0 => integer(1)
    }
    array
    {
      0 => integer(1)
      1 => integer(1)
    }
    array
    {
      0 => integer(1)
      1 => integer(1)
    }
    array
    {
      0 => integer(1)
      1 => integer(1)
    }
    array
    {
      0 => integer(1)
      1 => integer(1)
    }
    Compiler/expr_init.php: SUCCEEDED
    Compiler/foreach1.php: SUCCEEDED
    Compiler/foreach_arrays.php: SUCCEEDED
    Compiler/for_loop.php: SUCCEEDED
    Compiler/function_002.php: SUCCEEDED
    Compiler/function_003.php: SUCCEEDED
    Compiler/function_004.php: SUCCEEDED
    Compiler/function_call.php: SUCCEEDED
    Compiler/if_statement.php: SUCCEEDED
    Compiler/indirect_001.php: SUCCEEDED
    Compiler/indirect_002.php: SUCCEEDED
    Compiler/indirect_003.php: SUCCEEDED
    Compiler/indirect_004.php: SUCCEEDED
    Compiler/indirect_005.php: SUCCEEDED
    Compiler/indirect_007.php: SUCCEEDED
    Compiler/indirect_global.php: SUCCEEDED
    Compiler/inheritance.php: SUCCEEDED
    Compiler/inheritance2.php: SUCCEEDED
    Compiler/isset_unset_001.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Testing x in global code:  <br>
    1 <br>
     <br>
    Testing x (object) in optimized function:  <br>
    1 <br>
     <br>
    Testing x (PhpReference) in optimized function:  <br>
    1 <br>
     <br>
    
    Notice: Undefined variable: y in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\__input.txt on line 29
    Testing $$x (created at runtime) in optimized function:  <br>
    1 <br>
    Testing x in global code:  <br>
    1 <br>
     <br>
    Testing x (object) in optimized function:  <br>
    1 <br>
     <br>
    Testing x (PhpReference) in optimized function:  <br>
    1 <br>
     <br>
    Testing $$x (created at runtime) in optimized function:  <br>
    1 <br>
    Compiler/null_hints.php: SUCCEEDED
    Compiler/switch.php: SUCCEEDED
    Compiler/ternary_ex.php: SUCCEEDED
    Compiler/typehint_check.php: SUCCEEDED
    Compiler/Inclusions/include2.php: SUCCEEDED
    Compiler/Inclusions/include3.php: SUCCEEDED
    Compiler/Inclusions/include6.php: SUCCEEDED
    Compiler/Inclusions/include_test.php: SUCCEEDED
    Compiler/Inclusions/script.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t01.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t02.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t03.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t04.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t05.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t08.php: SUCCEEDED
    Compiler/PseudoConst/parent.php: SUCCEEDED
    Compiler/PseudoConst/parent2.php: SUCCEEDED
    Compiler/PseudoConst/self.php: SUCCEEDED
    Compiler/PseudoConst/t01.php: SUCCEEDED
    Compiler/PseudoConst/t02.php: SUCCEEDED
    Compiler/PseudoConst/t03.php: SUCCEEDED
    Compiler/PseudoConst/t04.php: SUCCEEDED
    Compiler/PseudoConst/t05.php: SUCCEEDED
    Compiler/PseudoConst/t06.php: SUCCEEDED
    Compiler/PseudoConst/t07.php: SUCCEEDED
    Compiler/PseudoConst/t08.php: SUCCEEDED
    Compiler/PseudoConst/t09.php: SUCCEEDED
    Compiler/PseudoConst/t10.php: SUCCEEDED
    Compiler/PseudoConst/t11.php: SUCCEEDED
    Compiler/PseudoConst/_class_.php: SUCCEEDED
    Compiler/PseudoConst/_function_.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Notice: Undefined variable: a in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Compiler\PseudoConst\__input.txt on line 11
    g
    g
    Compiler/Unreachable/t13.php: SUCCEEDED
    DateTime/strftime.php: SUCCEEDED
    DateTime/strtotime1.php: SUCCEEDED
    DateTime/strtotime2.php: SUCCEEDED
    DateTime/strtotime3.php: SUCCEEDED
    DateTime/strtotime4.php: SUCCEEDED
    DateTime/strtotime5.php: SUCCEEDED
    DateTime/time.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    -189388800:-189475200 - 86400
    1964-01-01T00:00:00+0000
    1963-12-31T00:00:00+0000
    1964-06-06
    1963-06-06
    1964-01-06
    1133305200
    -189388800:-189475200 - 86400
    1964-01-01T00:00:00+0000
    1963-12-31T00:00:00+0000
    1964-06-06
    1963-06-06
    1964-01-06
    DateTime/timezones1.php: SUCCEEDED
    FileSystem/basename.php: SUCCEEDED
    FileSystem/basename2.php: SUCCEEDED
    FileSystem/chdir.php: SUCCEEDED
    FileSystem/csv.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    --- write ---
    72
    24
    44
    2
    6
    
    --- read ---
    "hello\n
    world";"aaa""bbb""ccc";"blah blah;";none;"tab\ttab";"space space"\n
    hh'ee;"ss\nsadasdasd s"\n
    """""""""""""""""""""";"""";;"""""";"xxx"""\n
    x\n
    "x\y"\n
    --- write ---
    72
    24
    44
    2
    6
    
    --- read ---
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    FileSystem/date.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <pre>[ARRAY
      [INT (0)] => [STRING: "A --> {PM}"]
      [INT (1)] => [STRING: "B --> {719}"]
      [INT (2)] => [STRING: "C --> {C}"]
      [INT (3)] => [STRING: "D --> {Sat}"]
      [INT (4)] => [STRING: "E --> {E}"]
      [INT (5)] => [STRING: "F --> {March}"]
      [INT (6)] => [STRING: "G --> {17}"]
      [INT (7)] => [STRING: "H --> {17}"]
      [INT (8)] => [STRING: "I --> {0}"]
      [INT (9)] => [STRING: "J --> {J}"]
      [INT (10)] => [STRING: "K --> {K}"]
      [INT (11)] => [STRING: "L --> {0}"]
      [INT (12)] => [STRING: "M --> {Mar}"]
      [INT (13)] => [STRING: "N --> {6}"]
      [INT (14)] => [STRING: "O --> {+0100}"]
      [INT (15)] => [STRING: "P --> {+01:00}"]
      [INT (16)] => [STRING: "Q --> {Q}"]
      [INT (17)] => [STRING: "R --> {R}"]
      [INT (18)] => [STRING: "S --> {th}"]
      [INT (19)] => [STRING: "U --> {984240978}"]
      [INT (20)] => [STRING: "V --> {V}"]
      [INT (21)] => [STRING: "W --> {10}"]
      [INT (22)] => [STRING: "X --> {X}"]
      [INT (23)] => [STRING: "Y --> {2001}"]
      [INT (24)] => [STRING: "Z --> {3600}"]
      [INT (25)] => [STRING: "a --> {pm}"]
      [INT (26)] => [STRING: "b --> {b}"]
      [INT (27)] => [STRING: "c --> {2001-03-10T17:16:18+01:00}"]
      [INT (28)] => [STRING: "d --> {10}"]
      [INT (29)] => [STRING: "e --> {Europe/Prague}"]
      [INT (30)] => [STRING: "f --> {f}"]
      [INT (31)] => [STRING: "g --> {5}"]
      [INT (32)] => [STRING: "h --> {05}"]
      [INT (33)] => [STRING: "i --> {16}"]
      [INT (34)] => [STRING: "j --> {10}"]
      [INT (35)] => [STRING: "k --> {k}"]
      [INT (36)] => [STRING: "l --> {Saturday}"]
      [INT (37)] => [STRING: "m --> {03}"]
      [INT (38)] => [STRING: "n --> {3}"]
      [INT (39)] => [STRING: "o --> {2001}"]
      [INT (40)] => [STRING: "p --> {p}"]
      [INT (41)] => [STRING: "q --> {q}"]
      [INT (42)] => [STRING: "r --> {Sat, 10 Mar 2001 17:16:18 +0100}"]
      [INT (43)] => [STRING: "s --> {18}"]
      [INT (44)] => [STRING: "t --> {31}"]
      [INT (45)] => [STRING: "u --> {000000}"]
      [INT (46)] => [STRING: "v --> {v}"]
      [INT (47)] => [STRING: "w --> {6}"]
      [INT (48)] => [STRING: "x --> {x}"]
      [INT (49)] => [STRING: "y --> {01}"]
      [INT (50)] => [STRING: "z --> {68}"]
    ]</pre>
    <pre>[ARRAY
      [INT (0)] => [STRING: "A --> {PM}"]
      [INT (1)] => [STRING: "B --> {719}"]
      [INT (2)] => [STRING: "C --> {C}"]
      [INT (3)] => [STRING: "D --> {Sat}"]
      [INT (4)] => [STRING: "E --> {E}"]
      [INT (5)] => [STRING: "F --> {March}"]
      [INT (6)] => [STRING: "G --> {17}"]
      [INT (7)] => [STRING: "H --> {17}"]
      [INT (8)] => [STRING: "I --> {0}"]
      [INT (9)] => [STRING: "J --> {J}"]
      [INT (10)] => [STRING: "K --> {K}"]
      [INT (11)] => [STRING: "L --> {0}"]
      [INT (12)] => [STRING: "M --> {Mar}"]
      [INT (13)] => [STRING: "N --> {6}"]
      [INT (14)] => [STRING: "O --> {+0100}"]
      [INT (15)] => [STRING: "P --> {+01:00}"]
      [INT (16)] => [STRING: "Q --> {Q}"]
      [INT (17)] => [STRING: "R --> {R}"]
      [INT (18)] => [STRING: "S --> {th}"]
      [INT (19)] => [STRING: "U --> {984240978}"]
      [INT (20)] => [STRING: "V --> {V}"]
      [INT (21)] => [STRING: "W --> {10}"]
      [INT (22)] => [STRING: "X --> {X}"]
      [INT (23)] => [STRING: "Y --> {2001}"]
      [INT (24)] => [STRING: "Z --> {3600}"]
      [INT (25)] => [STRING: "a --> {pm}"]
      [INT (26)] => [STRING: "b --> {b}"]
      [INT (27)] => [STRING: "c --> {2001-03-10T17:16:18+01:00}"]
      [INT (28)] => [STRING: "d --> {10}"]
      [INT (29)] => [STRING: "e --> {Europe/Prague}"]
      [INT (30)] => [STRING: "f --> {f}"]
      [INT (31)] => [STRING: "g --> {5}"]
      [INT (32)] => [STRING: "h --> {05}"]
      [INT (33)] => [STRING: "i --> {16}"]
      [INT (34)] => [STRING: "j --> {10}"]
      [INT (35)] => [STRING: "k --> {k}"]
      [INT (36)] => [STRING: "l --> {Saturday}"]
      [INT (37)] => [STRING: "m --> {03}"]
      [INT (38)] => [STRING: "n --> {3}"]
      [INT (39)] => [STRING: "o --> {2001}"]
      [INT (40)] => [STRING: "p --> {p}"]
      [INT (41)] => [STRING: "q --> {q}"]
      [INT (42)] => [STRING: "r --> {Sat, 10 Mar 2001 17:16:18 +0100}"]
      [INT (43)] => [STRING: "s --> {18}"]
      [INT (44)] => [STRING: "t --> {31}"]
      [INT (45)] => [STRING: "u --> {u}"]
      [INT (46)] => [STRING: "v --> {v}"]
      [INT (47)] => [STRING: "w --> {6}"]
      [INT (48)] => [STRING: "x --> {x}"]
      [INT (49)] => [STRING: "y --> {01}"]
      [INT (50)] => [STRING: "z --> {68}"]
    ]</pre>
    FileSystem/date2.php: SUCCEEDED
    FileSystem/date3.php: SUCCEEDED
    FileSystem/date_unix.php: SUCCEEDED
    FileSystem/dirname.php: SUCCEEDED
    FileSystem/dirname2.php: SUCCEEDED
    FileSystem/disk_free_space.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    120 GB
    Drive C: 216 GB
    Drive D: 120 GB
    Drive E: 241 GB
    Drive F: 
    Warning: disk_free_space(): The device is not ready.
     in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt on line 14
    false
    120 GB
    Drive C: 216 GB
    Drive D: 120 GB
    Drive E: 241 GB
    Drive F: false
    FileSystem/disk_total_space.php: SUCCEEDED
    FileSystem/fgets.php: SUCCEEDED
    FileSystem/file.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <pre>[ARRAY
      [INT (0)] => [STRING: "this is a file with one EOLN
    "]
    ]</pre>
    <pre>[ARRAY
      [INT (0)] => [STRING: ""]
      [INT (1)] => [STRING: "This is a file with two EOLNs. First line is empty."]
    ]</pre>
    <pre>[ARRAY
      [INT (0)] => [STRING: "
    "]
      [INT (1)] => [STRING: "This is a file with two EOLNs. First line is empty.
    "]
    ]</pre>
    <pre>[ARRAY
      [INT (0)] => [STRING: "This is a file with two EOLNs. First line is empty."]
    ]</pre>
    <pre>[ARRAY
      [INT (0)] => [STRING: "this is a file WITHOUT an "end-of-line""]
    ]</pre>
    Line #<b>130</b> : &lt;/html&gt;
    <br />
    [this is a file with one EOLN{\n}
    ]
    <pre>[ARRAY
      [INT (0)] => [STRING: "this is a file with one EOLN
    "]
    ]</pre>
    <pre>[ARRAY
      [INT (0)] => [STRING: ""]
      [INT (1)] => [STRING: "This is a file with two EOLNs. First line is empty."]
    ]</pre>
    <pre>[ARRAY
      [INT (0)] => [STRING: "
    "]
      [INT (1)] => [STRING: "This is a file with two EOLNs. First line is empty.
    "]
    ]</pre>
    <pre>[ARRAY
      [INT (0)] => [STRING: ""]
      [INT (1)] => [STRING: "This is a file with two EOLNs. First line is empty."]
    ]</pre>
    <pre>[ARRAY
      [INT (0)] => [STRING: "this is a file WITHOUT an "end-of-line""]
    ]</pre>
    Line #<b>130</b> : &lt;/html&gt;
    <br />
    [this is a file with one EOLN{\n}
    ]
    FileSystem/filesize.php: SUCCEEDED
    FileSystem/file_exists.php: SUCCEEDED
    FileSystem/file_get_contents.php: SUCCEEDED
    FileSystem/fpassthru.php: SUCCEEDED
    FileSystem/fread.php: SUCCEEDED
    FileSystem/fread1.php: SUCCEEDED
    FileSystem/fread2.php: SUCCEEDED
    FileSystem/fseek.php: SUCCEEDED
    FileSystem/fsockopen.php: SUCCEEDED
    FileSystem/ftell.php: SUCCEEDED
    FileSystem/is_dir.php: SUCCEEDED
    FileSystem/is_executable.php: SUCCEEDED
    FileSystem/pathinfo.php: SUCCEEDED
    FileSystem/popen.php: SUCCEEDED
    FileSystem/readdir.php: SUCCEEDED
    FileSystem/readfile.php: SUCCEEDED
    FileSystem/readline.php: SUCCEEDED
    FileSystem/realpath.php: SUCCEEDED
    FileSystem/scandir.php: SUCCEEDED
    FileSystem/stat.php: SUCCEEDED
    FileSystem/stream_context_set_option.php: SUCCEEDED
    FileSystem/stream_copy_to_stream.php: SUCCEEDED
    FileSystem/stream_copy_to_stream2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <p>Read <b>rb</b>, Write <b>wb</b>
    
    
    COPIED: <b>10982</b>
    <p>Read <b>rb</b>, Write <b>wt</b>
    
    
    COPIED: <b>10976</b>
    <p>Read <b>rb</b>, Write <b>wb</b>
    
    
    COPIED: <b>10951</b>
    <p>Read <b>rb</b>, Write <b>wt</b>
    
    
    COPIED: <b>10946</b>
    FileSystem/testinc.php: SUCCEEDED
    FileSystem/touch.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Warning: touch(): Utime failed: No such file or directory in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt on line 8
    Sorry Could Not change modification time of touch.txt
    Warning: touch(): Utime failed: No such file or directory in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt on line 14
    
    Warning: touch(): Utime failed: No such file or directory in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt on line 16
    
    Warning: touch(): Utime failed: No such file or directory in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt on line 17
    <pre>[ARRAY
      [INT (0)] => [STRING: "January 24, 2010; [12:09:12] (12h) ctime test.txt (1264331352)"]
      [INT (1)] => [STRING: "January 24, 2010; [12:09:12] (12h) mtime test.txt (1264331352)"]
      [INT (2)] => [STRING: "January 24, 2010; [12:09:12] (12h) ctime touch.txt (1264331352)"]
      [INT (3)] => [STRING: "January 24, 2010; [12:09:12] (12h) mtime touch.txt (1264331352)"]
      [INT (4)] => [STRING: "January 24, 2010; [12:09:12] (12h) atime touch.txt (1264331352)"]
      [INT (5)] => [STRING: "January 24, 2010; [12:09:12] (12h) mtime summer.txt (1264331352)"]
      [INT (6)] => [STRING: "January 24, 2010; [12:09:12] (12h) mtime winter.txt (1264331352)"]
    ]</pre>
    Warning: touch(): Unable to access (D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\touch.txt): Permission denied in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 8, column 5.
    Sorry Could Not change modification time of touch.txt
    Warning: touch(): Unable to access (D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\touch.txt): Permission denied in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 14, column 1.
    
    Warning: touch(): Unable to access (D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\winter.txt): Permission denied in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 16, column 1.
    
    Warning: touch(): Unable to access (D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\summer.txt): Permission denied in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\FileSystem\__input.txt at expression on line 17, column 1.
    <pre>[ARRAY
      [INT (0)] => [STRING: "January 24, 2010; [13:09:12] (13h) ctime test.txt (1264334952)"]
      [INT (1)] => [STRING: "January 24, 2010; [13:09:12] (13h) mtime test.txt (1264334952)"]
      [INT (2)] => [STRING: "January 24, 2010; [13:09:12] (13h) ctime touch.txt (1264334952)"]
      [INT (3)] => [STRING: "January 24, 2010; [13:09:12] (13h) mtime touch.txt (1264334952)"]
      [INT (4)] => [STRING: "January 24, 2010; [13:09:12] (13h) atime touch.txt (1264334952)"]
      [INT (5)] => [STRING: "January 24, 2010; [13:09:12] (13h) mtime summer.txt (1264334952)"]
      [INT (6)] => [STRING: "January 24, 2010; [13:09:12] (13h) mtime winter.txt (1264334952)"]
    ]</pre>
    Math/abs.php: SUCCEEDED
    Math/atan2.php: SUCCEEDED
    Math/base_convert.php: SUCCEEDED
    Math/bindec.php: SUCCEEDED
    Math/ceil.php: SUCCEEDED
    Math/cos.php: SUCCEEDED
    Math/decbin.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <pre>
    [double: 2294967295]
    10001000110010100110101111111111
    [double: 4294967296]
    0
    [double: 8589934590]
    11111111111111111111111111111110
    [double: 8589934590]
    11111111111111111111111111111110
    [double: 8589934591]
    11111111111111111111111111111111
    [Int: 1000.000.000.000]
    11010100101001010001000000000000
    <hr>(-1, -5435, 2.14, 0, 26)
    11111111111111111111111111111111
    11111111111111111110101011000101
    10
    0
    11010 
    </pre>
    <pre>
    [???: 2294967295]
    10001000110010100110101111111111
    [???: 4294967296]
    0
    [???: 8589934590]
    11111111111111111111111111111110
    [???: 8589934590]
    11111111111111111111111111111110
    [???: 8589934591]
    11111111111111111111111111111111
    [Int: 1000.000.000.000]
    11010100101001010001000000000000
    <hr>(-1, -5435, 2.14, 0, 26)
    11111111111111111111111111111111
    11111111111111111110101011000101
    10
    0
    11010 
    </pre>
    Math/dechex.php: SUCCEEDED
    Math/decoct.php: SUCCEEDED
    Math/deg2rad.php: SUCCEEDED
    Math/exp.php: SUCCEEDED
    Math/floor.php: SUCCEEDED
    Math/fmod.php: SUCCEEDED
    Math/hexdec.php: SUCCEEDED
    Math/max.php: SUCCEEDED
    Math/min.php: SUCCEEDED
    Math/modulo_warn.php: SUCCEEDED
    Math/octdec.php: SUCCEEDED
    Math/pow.php: SUCCEEDED
    Math/rad2deg.php: SUCCEEDED
    Math/round.php: SUCCEEDED
    Math/sin.php: SUCCEEDED
    Math/sqrt.php: SUCCEEDED
    Math/tan.php: SUCCEEDED
    Math/uniqid.php: SUCCEEDED
    Misc/calendar_extension.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0
    0
    2375840
    0
    14
    32
    2
    There are 31 days in August 2003
    There are 28 days in February 2003
    There are 29 days in February 2004
    There are 31 days in December 2034
    1748326
    1748324
    374867
    0
    322f32322f35373633
    ebe120e7f9e5ef20e4faf9f1e2
    ebe120e7f9e5ef20e427faf9f1e2
    ebe120e7f9e5ef20e420e0ecf4e9ed20faf9f1e2
    ebe120e7f9e5ef20e42720e0ecf4e9ed20faf9f1e2
    eb22e120e7f9e5ef20e4faf9f122e2
    e12720e7f9e5ef20e4faf9f122e2
    e12720e7f9e5ef20e427faf9f122e2
    e12720e7f9e5ef20e420e0ecf4e9ed20faf9f122e2
    e12720e7f9e5ef20e42720e0ecf4e9ed20faf9f122e2
    Error: Call to undefined function: 'frenchtojd' in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\__input.txt at expression on line 2, column 1.
    Misc/ini_parse.php: SUCCEEDED
    Misc/lexer.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    T_INLINE_HTML
    311 '\r\n'
    T_OPEN_TAG
    368 '&lt;?'
    T_WHITESPACE
    371 ' \r\n\r\n'
    T_FINAL
    345 'final'
    T_WHITESPACE
    371 ' '
    T_CLASS
    353 'class'
    T_WHITESPACE
    371 ' '
    T_STRING
    307 'A'
    T_WHITESPACE
    371 ' \r\n'
        '{'
    T_WHITESPACE
    371 ' \r\n  '
    T_FUNCTION
    334 'function'
    T_WHITESPACE
    371 ' '
    T_STRING
    307 '__get'
        '('
    T_VARIABLE
    309 '$x'
        ')'
    T_WHITESPACE
    371 ' \r\n  '
        '{'
    T_WHITESPACE
    371 ' \r\n    '
    T_VARIABLE
    309 '$x'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_START_HEREDOC
    372 '&lt;&lt;&lt;EOOOOOOOOOOOOOOT\r\n'
    T_ENCAPSED_AND_WHITESPACE
    314 '         &lt;&lt;&lt;hello\r\nEOOOOOOOOOOOOOOt;\r\nEOOOOOOOOOOOOOT;\r\n'
    T_END_HEREDOC
    373 'EOOOOOOOOOOOOOOT'
        ';'
    T_WHITESPACE
    371 '\r\n\r\n    '
        '$'
    T_VARIABLE
    309 '$y'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_ARRAY
    360 'array'
    T_WHITESPACE
    371 ' '
        '('
    T_LNUMBER
    305 '1'
        ','
    T_DNUMBER
    306 '100000000000000'
        ','
    T_DNUMBER
    306 '999999999999999999999999999999999'
        ','
    T_STRING
    307 'true'
        ','
    T_STRING
    307 'false'
        ')'
        ';'
    T_WHITESPACE
    371 '\r\n    '
        '$'
        '{'
        '&quot;'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
    T_DOLLAR_OPEN_CURLY_BRACES
    374 '${'
        '$'
        '{'
    T_CONSTANT_ENCAPSED_STRING
    315 '&quot;xxx&quot;'
        '}'
        '}'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
        '&quot;'
        '}'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_LNUMBER
    305 '1'
        ';'
    T_WHITESPACE
    371 '\r\n    '
        '$'
        '{'
        '&quot;'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
    T_DOLLAR_OPEN_CURLY_BRACES
    374 '${'
        '$'
        '{'
        '&quot;'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
    T_VARIABLE
    309 '$x'
    T_ENCAPSED_AND_WHITESPACE
    314 '-&gt;$$'
    T_VARIABLE
    309 '$x0xx'
        '&quot;'
        '}'
        '}'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
        '&quot;'
        '}'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_LNUMBER
    305 '1'
        ';'
    T_WHITESPACE
    371 '\r\n  '
        '}'
    T_WHITESPACE
    371 ' \r\n'
        '}'
    T_WHITESPACE
    371 '\r\n\r\n'
    T_CLOSE_TAG
    370 '?&gt;'
    '
    '
        '&lt;?'
        ' 
    
    '
        'final'
        ' '
        'class'
        ' '
        'A'
        ' 
    '
        '{'
        ' 
      '
        'function'
        ' '
    258
    258 '
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\__input.txt at expression on line 10, column 7.
    '
        '('
        '$x'
        ')'
        ' 
      '
        '{'
        ' 
        '
        '$x'
        ' '
        '='
        ' '
        '&lt;&lt;&lt;EOOOOOOOOOOOOOOT
    '
        '         &lt;&lt;&lt;'
        'hello'
        '
    '
        'EOOOOOOOOOOOOOOt;
    '
        'EOOOOOOOOOOOOOT;
    '
        'EOOOOOOOOOOOOOOT'
        ';'
        '
    
        '
        '$'
        '$y'
        ' '
        '='
        ' '
        'array'
        ' '
        '('
        '1'
        ','
        '100000000000000'
        ','
        '999999999999999999999999999999999'
        ','
        'true'
        ','
    256
    256 '
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\__input.txt at expression on line 10, column 7.
    '
        ')'
        ';'
        '
        '
        '$'
        '{'
        '&quot;'
        'x'
        '${'
        '$'
        '{'
    -29
    -29 '
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\__input.txt at expression on line 10, column 7.
    '
        '}'
        '}'
        'x'
        '&quot;'
        '}'
        ' '
        '='
        ' '
        '1'
        ';'
        '
        '
        '$'
        '{'
        '&quot;'
        'x'
        '${'
        '$'
        '{'
        '&quot;'
        'x'
        '$x'
        '-&gt;'
        '$'
        '$'
        '$x0xx'
        '&quot;'
        '}'
        '}'
        'x'
        '&quot;'
        '}'
        ' '
        '='
        ' '
        '1'
        ';'
        '
      '
        '}'
        ' 
    '
        '}'
        '
    
    '
        '?&gt;'
    Misc/locale.php: SUCCEEDED
    Misc/output2.php: SUCCEEDED
    Misc/stack_trace.php: FAILED
    Script hung upNo errorsSuccess
    Expected test outputReal script output
    Unhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---> System.IndexOutOfRangeException: Index was outside the bounds of the array.
       at PHP.Core.PhpStackFrame..ctor(ScriptContext context, StackFrame frame, FrameKinds kind)
       at PHP.Core.PhpStackTrace..ctor(ScriptContext context, StackTrace clrTrace)
       at PHP.Core.PhpStackTrace..ctor(ScriptContext context, Int32 skipFrames)
       at PHP.Library.Errors.Backtrace()
       at <stack_trace.inc>.<Script>.j(ScriptContext <context>) in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\stack_trace.inc:line 11
       at <stack_trace.inc>.<Script>.j(Object instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <stack_trace.inc>.<Script>.i(ScriptContext <context>) in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\stack_trace.inc:line 6
       at <stack_trace.inc>.<Script>.i(Object instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <^0>.<Global>.<?0>.h(ScriptContext <context>) in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\__input.txt:line 4
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack, DTypeDesc caller)
       at PHP.Core.PhpCallback.InvokeInternal(Object[] args)
       at PHP.Core.PhpCallback.Invoke(Object[] args)
       at PHP.Library.PhpArrays.Map(PhpCallback map, PhpArray[] arrays)
       at <^1>.<Global>.<?1>.Lambda_1(ScriptContext <context>) in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\__input.txt:line 1
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <__input.txt>.<Script>.f(ScriptContext <context>) in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\__input.txt:line 6
       at <__input.txt>.<Script>.f(Object instance, PhpStack stack)
       at <__input.txt>.<Script>.<Main>(ScriptContext <context>, Dictionary`2 <locals>, DObject , DTypeDesc , Boolean ) in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Misc\__input.txt:line 18
       at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)
       at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)
       --- End of inner exception stack trace ---
       at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)
       at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)
       at <Global>.Run(String[] )
    
    Misc/tokens.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    T_REQUIRE_ONCE = 258,
    T_REQUIRE = 259,
    T_EVAL = 260,
    T_INCLUDE_ONCE = 261,
    T_INCLUDE = 262,
    T_LOGICAL_OR = 263,
    T_LOGICAL_XOR = 264,
    T_LOGICAL_AND = 265,
    T_PRINT = 266,
    T_SR_EQUAL = 267,
    T_SL_EQUAL = 268,
    T_XOR_EQUAL = 269,
    T_OR_EQUAL = 270,
    T_AND_EQUAL = 271,
    T_MOD_EQUAL = 272,
    T_CONCAT_EQUAL = 273,
    T_DIV_EQUAL = 274,
    T_MUL_EQUAL = 275,
    T_MINUS_EQUAL = 276,
    T_PLUS_EQUAL = 277,
    T_BOOLEAN_OR = 278,
    T_BOOLEAN_AND = 279,
    T_IS_NOT_IDENTICAL = 280,
    T_IS_IDENTICAL = 281,
    T_IS_NOT_EQUAL = 282,
    T_IS_EQUAL = 283,
    T_IS_GREATER_OR_EQUAL = 284,
    T_IS_SMALLER_OR_EQUAL = 285,
    T_SR = 286,
    T_SL = 287,
    T_INSTANCEOF = 288,
    T_UNSET_CAST = 289,
    T_BOOL_CAST = 290,
    T_OBJECT_CAST = 291,
    T_ARRAY_CAST = 292,
    T_STRING_CAST = 293,
    T_DOUBLE_CAST = 294,
    T_INT_CAST = 295,
    T_DEC = 296,
    T_INC = 297,
    T_CLONE = 298,
    T_NEW = 299,
    T_EXIT = 300,
    T_IF = 301,
    T_ELSEIF = 302,
    T_ELSE = 303,
    T_ENDIF = 304,
    T_LNUMBER = 305,
    T_DNUMBER = 306,
    T_STRING = 307,
    T_STRING_VARNAME = 308,
    T_VARIABLE = 309,
    T_NUM_STRING = 310,
    T_INLINE_HTML = 311,
    T_CHARACTER = 312,
    T_BAD_CHARACTER = 313,
    T_ENCAPSED_AND_WHITESPACE = 314,
    T_CONSTANT_ENCAPSED_STRING = 315,
    T_ECHO = 316,
    T_DO = 317,
    T_WHILE = 318,
    T_ENDWHILE = 319,
    T_FOR = 320,
    T_ENDFOR = 321,
    T_FOREACH = 322,
    T_ENDFOREACH = 323,
    T_DECLARE = 324,
    T_ENDDECLARE = 325,
    T_AS = 326,
    T_SWITCH = 327,
    T_ENDSWITCH = 328,
    T_CASE = 329,
    T_DEFAULT = 330,
    T_BREAK = 331,
    T_CONTINUE = 332,
    T_GOTO = 333,
    T_FUNCTION = 334,
    T_CONST = 335,
    T_RETURN = 336,
    T_TRY = 337,
    T_CATCH = 338,
    T_THROW = 339,
    T_USE = 340,
    T_GLOBAL = 341,
    T_PUBLIC = 342,
    T_PROTECTED = 343,
    T_PRIVATE = 344,
    T_FINAL = 345,
    T_ABSTRACT = 346,
    T_STATIC = 347,
    T_VAR = 348,
    T_UNSET = 349,
    T_ISSET = 350,
    T_EMPTY = 351,
    T_HALT_COMPILER = 352,
    T_CLASS = 353,
    T_INTERFACE = 354,
    T_EXTENDS = 355,
    T_IMPLEMENTS = 356,
    T_OBJECT_OPERATOR = 357,
    T_DOUBLE_ARROW = 358,
    T_LIST = 359,
    T_ARRAY = 360,
    T_CLASS_C = 361,
    T_METHOD_C = 362,
    T_FUNC_C = 363,
    T_LINE = 364,
    T_FILE = 365,
    T_COMMENT = 366,
    T_DOC_COMMENT = 367,
    T_OPEN_TAG = 368,
    T_OPEN_TAG_WITH_ECHO = 369,
    T_CLOSE_TAG = 370,
    T_WHITESPACE = 371,
    T_START_HEREDOC = 372,
    T_END_HEREDOC = 373,
    T_DOLLAR_OPEN_CURLY_BRACES = 374,
    T_CURLY_OPEN = 375,
    T_PAAMAYIM_NEKUDOTAYIM = 376,
    T_DOUBLE_COLON = 376,
    T_NAMESPACE = 377,
    T_NS_C = 378,
    T_DIR = 379,
    T_NS_SEPARATOR = 380,
    T_INCLUDE = 129,
    T_INCLUDE_ONCE = 130,
    T_EVAL = 131,
    T_REQUIRE = 132,
    T_REQUIRE_ONCE = 133,
    T_LOGICAL_OR = 136,
    T_LOGICAL_XOR = 137,
    T_LOGICAL_AND = 138,
    T_PRINT = 139,
    T_PLUS_EQUAL = 140,
    T_MINUS_EQUAL = 141,
    T_MUL_EQUAL = 142,
    T_DIV_EQUAL = 143,
    T_CONCAT_EQUAL = 144,
    T_MOD_EQUAL = 145,
    T_AND_EQUAL = 146,
    T_OR_EQUAL = 147,
    T_XOR_EQUAL = 148,
    T_SL_EQUAL = 149,
    T_SR_EQUAL = 150,
    T_BOOLEAN_OR = 151,
    T_BOOLEAN_AND = 152,
    T_IS_EQUAL = 153,
    T_IS_NOT_EQUAL = 154,
    T_IS_IDENTICAL = 155,
    T_IS_NOT_IDENTICAL = 156,
    T_IS_SMALLER_OR_EQUAL = 157,
    T_IS_GREATER_OR_EQUAL = 158,
    T_SL = 159,
    T_SR = 160,
    T_INC = 161,
    T_DEC = 162,
    T_NEW = 164,
    T_INSTANCEOF = 165,
    T_CLONE = 167,
    T_LNUMBER = 168,
    T_DNUMBER = 170,
    T_STRING = 171,
    T_STRING_VARNAME = 172,
    T_VARIABLE = 173,
    T_NUM_STRING = 174,
    T_INLINE_HTML = 175,
    T_CHARACTER = 176,
    T_BAD_CHARACTER = 177,
    T_ENCAPSED_AND_WHITESPACE = 178,
    T_CONSTANT_ENCAPSED_STRING = 179,
    T_EXIT = 180,
    T_IF = 181,
    T_ELSEIF = 182,
    T_ELSE = 183,
    T_ENDIF = 184,
    T_ECHO = 185,
    T_DO = 186,
    T_WHILE = 187,
    T_ENDWHILE = 188,
    T_FOR = 189,
    T_ENDFOR = 190,
    T_FOREACH = 191,
    T_ENDFOREACH = 192,
    T_AS = 193,
    T_SWITCH = 194,
    T_ENDSWITCH = 195,
    T_CASE = 196,
    T_DEFAULT = 197,
    T_BREAK = 198,
    T_CONTINUE = 199,
    T_FUNCTION = 200,
    T_CONST = 201,
    T_RETURN = 202,
    T_GLOBAL = 203,
    T_STATIC = 204,
    T_VAR = 205,
    T_UNSET = 206,
    T_ISSET = 207,
    T_EMPTY = 208,
    T_CLASS = 209,
    T_EXTENDS = 210,
    T_OBJECT_OPERATOR = 211,
    T_DOUBLE_ARROW = 212,
    T_LIST = 213,
    T_ARRAY = 214,
    T_CLASS_C = 215,
    T_METHOD_C = 216,
    T_FUNC_C = 217,
    T_LINE = 218,
    T_FILE = 219,
    T_COMMENT = 220,
    T_DOC_COMMENT = 221,
    T_OPEN_TAG = 226,
    T_OPEN_TAG_WITH_ECHO = 227,
    T_CLOSE_TAG = 228,
    T_WHITESPACE = 229,
    T_START_HEREDOC = 230,
    T_END_HEREDOC = 231,
    T_DOLLAR_OPEN_CURLY_BRACES = 232,
    T_CURLY_OPEN = 233,
    T_DOUBLE_COLON = 234,
    T_PAAMAYIM_NEKUDOTAYIM = 234,
    T_TRY = 236,
    T_CATCH = 237,
    T_THROW = 238,
    T_INTERFACE = 239,
    T_IMPLEMENTS = 240,
    T_ABSTRACT = 241,
    T_FINAL = 242,
    T_PRIVATE = 243,
    T_PROTECTED = 244,
    T_PUBLIC = 245,
    T_BOOL_CAST = 285,
    T_INT_CAST = 288,
    T_DOUBLE_CAST = 294,
    T_STRING_CAST = 297,
    T_ARRAY_CAST = 299,
    T_OBJECT_CAST = 300,
    T_UNSET_CAST = 301,
    T_HALT_COMPILER = 351,
    Misc/user_error_handlers.php: SUCCEEDED
    Objects/conditional1.php: SUCCEEDED
    Objects/conditional2.php: SUCCEEDED
    Objects/conditional_base_class.php: SUCCEEDED
    Objects/constant_test.php: SUCCEEDED
    Objects/evaled_parent.php: SUCCEEDED
    Objects/getter_setter_bug28444.php: SUCCEEDED
    Objects/instanceof.php: SUCCEEDED
    Objects/new_via_unknown_ctor.php: SUCCEEDED
    Objects/object_creation_test.php: SUCCEEDED
    Objects/static_field_test.php: SUCCEEDED
    Objects/static_method_test.php: SUCCEEDED
    Objects/sys_class_const.php: SUCCEEDED
    Objects/this2.php: SUCCEEDED
    RegEx/ereg.php: SUCCEEDED
    RegEx/preg_match_unmatched_groups.php: SUCCEEDED
    RegEx/preg_replace_eval.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ab"01300 as"00da sd"0asdsa das asd 11asd a1sd a
    ab"01300 as"00da sd"0(aasdasdkjask,$a,\,\l,a,s,d,a,s,d,k,j,a,s,${120})(ldjaklsdjalk,$l,\,\l,d,j,a,k,l,s,d,j,a,l,${120})djdsa das asd 11asd a1sd a
    ab"01300 as"00da sd"0asdsa das asd 11asd a1sd a
    ab"01300 as"00da sd"0(aasdasdkjask,$a,\,\l,a,s,d,a,s,d,k,j,,,${120})(ldjaklsdjalk,$l,\,\l,d,j,a,k,l,s,d,j,,,${120})djdsa das asd 11asd a1sd a
    RegEx/regexp-sql.php: SUCCEEDED
    RegEx/Perl/cache.php: SUCCEEDED
    RegEx/Perl/grep1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      [3] => string(3) "1.5"
      [6] => string(5) "58.54"
    }
    Notice: preg_grep(): Array to string conversion in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\RegEx\Perl\__input.txt at expression on line 5, column 1.
    array(2)
    {
      [3] => string(3) "1.5"
      [6] => string(5) "58.54"
    }
    RegEx/Perl/grep2.php: SUCCEEDED
    RegEx/Perl/match1.php: SUCCEEDED
    RegEx/Perl/match10.php: SUCCEEDED
    RegEx/Perl/match2.php: SUCCEEDED
    RegEx/Perl/match3.php: SUCCEEDED
    RegEx/Perl/match4.php: SUCCEEDED
    RegEx/Perl/match5.php: SUCCEEDED
    RegEx/Perl/match6.php: SUCCEEDED
    RegEx/Perl/match7.php: SUCCEEDED
    RegEx/Perl/match8.php: SUCCEEDED
    RegEx/Perl/match9.php: SUCCEEDED
    RegEx/Perl/match_all1.php: SUCCEEDED
    RegEx/Perl/match_all2.php: SUCCEEDED
    RegEx/Perl/match_all3.php: SUCCEEDED
    RegEx/Perl/match_all4.php: SUCCEEDED
    RegEx/Perl/match_dollar.php: SUCCEEDED
    RegEx/Perl/overflow.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string("kfkaj +j k45´┐Ż´┐Ż´┐Ż´┐Ż´┐Ż3#$%^&kjakfjkaj|kfj")
    string("kfkaj +j k45�����3#$%^&kjakfjkaj|kfj")
    RegEx/Perl/quote1.php: SUCCEEDED
    RegEx/Perl/quote2.php: SUCCEEDED
    RegEx/Perl/quote3.php: SUCCEEDED
    RegEx/Perl/replace1.php: SUCCEEDED
    RegEx/Perl/replace2.php: SUCCEEDED
    RegEx/Perl/replace3.php: SUCCEEDED
    RegEx/Perl/replace4.php: SUCCEEDED
    RegEx/Perl/replace5.php: SUCCEEDED
    RegEx/Perl/replace6.php: SUCCEEDED
    RegEx/Perl/replace7.php: SUCCEEDED
    RegEx/Perl/replace8.php: SUCCEEDED
    RegEx/Perl/replace9.php: SUCCEEDED
    RegEx/Perl/replace_callback1.php: SUCCEEDED
    RegEx/Perl/replace_callback2.php: SUCCEEDED
    RegEx/Perl/split1.php: SUCCEEDED
    RegEx/Perl/split2.php: SUCCEEDED
    RegEx/Perl/split3.php: SUCCEEDED
    RegEx/Perl/split4.php: SUCCEEDED
    RegEx/Perl/split5.php: SUCCEEDED
    RegEx/Perl/ungreedy.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    aaa
    a
    aaa
    
    a
    aa
    aaa
    aa
    aaa
    aaa
    a
    aaa
    a
    a
    aa
    aaa
    aa
    aaa
    RegEx/Perl/unsuccessful-preg_match_all.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0
    4
    1
    4
    0
    4
    1
    7
    SPL/ArrayAccess_offsetExists.php: SUCCEEDED
    SPL/exceptions.php: SUCCEEDED
    Strings/addcslashes.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    \f\o\o\[ \]
    Issues a Warning:
    // echo addcslashes("zoo['.']", 'z..A');
    // output:  \zoo['\.']
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt at expression on line 4, column 1.
    
    Issues a Warning:
    // echo addcslashes("zoo['.']", 'z..A');
    // output:  \zoo['\.']
    Strings/addslashes.php: SUCCEEDED
    Strings/chunk_split.php: SUCCEEDED
    Strings/concat.php: SUCCEEDED
    Strings/count_chars.php: SUCCEEDED
    Strings/crc32.php: SUCCEEDED
    Strings/crypt.php: SUCCEEDED
    Strings/crypt2.php: SUCCEEDED
    Strings/echo.php: SUCCEEDED
    Strings/explode.php: SUCCEEDED
    Strings/get_html_translation_table.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <hr>[&] => &amp;
    [>] => &gt;
    [<] => &lt;
    ["] => &quot;
    <hr>Hallo &amp; &lt;Frau&gt; &amp; Kr&iuml;&iquest;&frac12;mer
    <hr>[&] => &amp;
    [>] => &gt;
    [<] => &lt;
    ["] => &quot;
    <hr>Hallo &amp; &lt;Frau&gt; &amp; Kr�mer
    Strings/nl2br.php: SUCCEEDED
    Strings/pack.php: SUCCEEDED
    Strings/pos.php: SUCCEEDED
    Strings/runtime-quotes.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    fread = (x''y"z)
    fgets = (x''y"z)
    file[0] = (x''y"z)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    
    Warning: fopen(runtime-quotes2.txt): failed to open stream: Permission denied in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt on line 33
    
    Warning: fwrite() expects parameter 1 to be resource, boolean given in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt on line 35
    fwrite = ()
    
    Warning: fputs() expects parameter 1 to be resource, boolean given in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt on line 38
    fputs = ()
    
    Warning: fclose() expects parameter 1 to be resource, boolean given in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt on line 41
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (x'y"z)
    fgets = (x'y"z)
    file[0] = (x'y"z)
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (a\'b"\\ca\)
    fgets = (a\'b"\\ca\'b"\\c)
    file[0] = (a\'b"\\ca\'b"\\c)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    e'e
    e''e
    e'e
    e'e
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    e'e
    e'e
    e'e
    e'e
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    fread = (x''y"z)
    fgets = (x''y"z)
    file[0] = (x''y"z)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    
    Warning: fopen(): Unable to access (D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\runtime-quotes2.txt): Permission denied in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt at expression on line 33, column 3.
    
    Warning: Cannot convert bool to resource implicitly in a call to function fwrite() in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt at expression on line 35, column 3.
    fwrite = ()
    
    Warning: Cannot convert bool to resource implicitly in a call to function fputs() in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt at expression on line 38, column 3.
    fputs = ()
    
    Warning: Cannot convert bool to resource implicitly in a call to function fclose() in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Strings\__input.txt at expression on line 41, column 3.
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (x'y"z)
    fgets = (x'y"z)
    file[0] = (x'y"z)
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (a\'b"\\ca\)
    fgets = (a\'b"\\ca\'b"\\c)
    file[0] = (a\'b"\\ca\'b"\\c)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    e'e
    e''e
    e'e
    e'e
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    e'e
    e'e
    e'e
    e'e
    Strings/sprintf.php: SUCCEEDED
    Strings/sprintf2.php: SUCCEEDED
    Strings/strtr.php: SUCCEEDED
    Strings/str_ireplace.php: SUCCEEDED
    Strings/str_word_count.php: SUCCEEDED
    Strings/substr_operations.php: SUCCEEDED
    Strings/wordwrap.php: SUCCEEDED
    Variables/advanced_serialize.php: SUCCEEDED
    Variables/arguments.php: SUCCEEDED
    Variables/bitwise.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "00"
    string(2) "31"
    string(2) "31"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    0
    0
    0
    5
    0
    5
    40
    5
    45
    string(48) "000000000000000000000000000000000000000000000000"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(14) "31323331323331"
    string(2) "30"
    string(14) "31323331323331"
    string(16) "3635343635343536"
    string(2) "30"
    string(16) "3635343635343536"
    string(14) "337a5e8be43d7a"
    string(14) "00002130120201"
    string(48) "337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42"
    string(16) "347d598ce33a7e77"
    string(16) "0200243214040100"
    string(48) "367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42"
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "00"
    string(2) "31"
    string(2) "31"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    0
    -9223372036854775808
    -9223372036854775808
    -9223372036854775803
    0
    -9223372036854775803
    40
    5
    45
    string(48) "000000000000000000000000000000000000000000000000"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(14) "31323331323331"
    string(2) "30"
    string(14) "31323331323331"
    string(16) "3635343635343536"
    string(2) "30"
    string(16) "3635343635343536"
    string(14) "337a5e8be43d7a"
    string(14) "00002130120201"
    string(48) "337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42"
    string(16) "347d598ce33a7e77"
    string(16) "0200243214040100"
    string(48) "367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42"
    Variables/comparisons.php: SUCCEEDED
    Variables/constant.php: SUCCEEDED
    Variables/extract.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    EXTR_PREFIX_ALL
    integer(4)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
      'prefix_non_existent' => integer(1)
    }
    <hr>EXTR_PREFIX_INVALID
    integer(5)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => integer(2)
      'non_existent' => integer(1)
      'prefix_' => integer(1)
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => 'hello'
    }
    <hr>EXTR_PREFIX_SAME
    integer(3)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'non_existent' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>EXTR_PREFIX_IF_EXISTS
    integer(3)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>
    EXTR_PREFIX_ALL
    integer(4)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
      'prefix_non_existent' => integer(1)
    }
    <hr>EXTR_PREFIX_INVALID
    integer(2)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_ad' => integer(2)
      'prefix_non_existent' => integer(1)
    }
    <hr>EXTR_PREFIX_SAME
    integer(4)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'non_existent' => integer(1)
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>EXTR_PREFIX_IF_EXISTS
    integer(3)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>
    Variables/func_get_args.php: SUCCEEDED
    Variables/is_number.php: SUCCEEDED
    Variables/serialize.php: SUCCEEDED
    Variables/unserialize_objects.php: SUCCEEDED
    Variables/var_dumping.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Array
    (
        [0] => 1
        [1] => 
        [2] => 1
        [3] => 1.2
        [4] => 
        [5] => asdas
        [6] => Array
            (
                [0] => 1
            )
    
        [7] => stdClass Object
            (
            )
    
        [8] => Resource id #1
    )
    array(9) {
      [0]=>
      bool(true)
      [1]=>
      bool(false)
      [2]=>
      int(1)
      [3]=>
      float(1.2)
      [4]=>
      NULL
      [5]=>
      string(5) "asdas"
      [6]=>
      array(1) {
        [0]=>
        int(1)
      }
      [7]=>
      object(stdClass)#1 (0) {
      }
      [8]=>
      resource(1) of type (stream)
    }
    array (
      0 => true,
      1 => false,
      2 => 1,
      3 => 1.2,
      4 => NULL,
      5 => 'asdas',
      6 => 
      array (
        0 => 1,
      ),
      7 => 
      stdClass::__set_state(array(
      )),
      8 => NULL,
    )
    array
    (
      [0] => 1
      [1] => 
      [2] => 1
      [3] => 1.2
      [4] => 
      [5] => asdas
      [6] => array
      (
        [0] => 1
      )
      [7] => stdClass object
      (
      )
      [8] => resource id #4
    )
    array(9)
    {
      [0] => bool(true)
      [1] => bool(false)
      [2] => integer(1)
      [3] => double(1.2)
      [4] => NULL
      [5] => string(5) "asdas"
      [6] => array(1)
      {
        [0] => integer(1)
      }
      [7] => object(stdClass)(0)
      {
      }
      [8] => resource(4) of type (stream)
    }
    array
    (
      '0' => true,
      '1' => false,
      '2' => 1,
      '3' => 1.2,
      '4' => NULL,
      '5' => 'asdas',
      '6' => array
      (
        '0' => 1
      ),
      '7' => class stdClass
      {
    
      },
      '8' => NULL
    )
    WorkItems/1285%20overrides.php: SUCCEEDED
    WorkItems/22016.php: SUCCEEDED
    WorkItems/22019.php: SUCCEEDED
    WorkItems/26052.php: SUCCEEDED
    WorkItems/26667%20hash.php: SUCCEEDED
    WorkItems/26681.php: SUCCEEDED
    WorkItems/26691.php: SUCCEEDED
    WorkItems/27377.php: SUCCEEDED
    WorkItems/27492.php: SUCCEEDED
    WorkItems/27838%20json.php: SUCCEEDED
    WorkItems/2787.php: SUCCEEDED
    WorkItems/29026%20echo%20concat.php: SUCCEEDED
    Xml/005.php: SUCCEEDED
    Xml/006.php: SUCCEEDED
    Xml/007.php: SUCCEEDED
    Xml/008.php: SUCCEEDED
    Xml/009.php: SUCCEEDED
    Xml/011.php: SUCCEEDED
    Xml/013.php: SUCCEEDED
    Xml/017.php: SUCCEEDED
    Xml/018.php: SUCCEEDED
    Xml/019.php: SUCCEEDED
    Xml/020.php: SUCCEEDED
    Xml/021.php: SUCCEEDED
    Xml/025.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
      'foo' => 'foobar'
    }
    array
    {
      'html' => 'http://www.w3.org/1999/xhtml'
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
    }
    array
    {
      'html' => 'http://www.w3.org/1999/xhtml'
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'foo' => 'foobar'
      'baz' => 'foobarbaz'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
    }
    array
    {
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
      'baz' => 'foobarbaz'
      'foo' => 'foobar'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
      'baz' => 'foobarbaz'
      'foo' => 'foobar'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
    }
    array
    {
    }
    Xml/026.php: SUCCEEDED
    Xml/027.php: SUCCEEDED
    Xml/028.php: SUCCEEDED
    Xml/029.php: SUCCEEDED
    Xml/030.php: SUCCEEDED
    Xml/032.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    FALSE
    FALSE
    FALSE
    TRUE
    TRUE
    TRUE
    Xml/033.php: SUCCEEDED
    Xml/bug26384.php: SUCCEEDED
    Xml/bug28721.php: SUCCEEDED
    Xml/bug28817.php: SUCCEEDED
    Xml/bug32615.php: SUCCEEDED
    Xml/bug33853.php: SUCCEEDED
    Xml/bug34276.php: SUCCEEDED
    Xml/bug35342.php: SUCCEEDED
    Xml/bug36756.php: SUCCEEDED
    Xml/bug37277.php: SUCCEEDED
    Xml/dom002.php: SUCCEEDED
    Xml/dom003.php: SUCCEEDED
    Xml/dom006.php: SUCCEEDED
    Xml/dom007.php: SUCCEEDED
    Xml/dom_set_attr_node.php: SUCCEEDED
    Xml/xslt001.php: SUCCEEDED
    Xml/xslt002.php: SUCCEEDED
    Xml/xslt003.php: SUCCEEDED
    Xml/xslt004.php: SUCCEEDED
    Xml/xslt005.php: SUCCEEDED
    Xml/xslt006.php: SUCCEEDED
    Xml/xslt007.php: SUCCEEDED
    Xml/xslt010.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test 10: EXSLT Support
      
      
      Test Date : 0001-12-31Z
        year                 : 1
        leap-year            : false
        month-in-year        : 12
        month-name           : December
        month-abbreviation   : Dec
        week-in-year         : 1
        day-in-year          : 365
        day-in-month         : 31
        day-of-week-in-month : 5
        day-in-week          : 2
        day-name             : Monday
        day-abbreviation     : Mon
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : 3000-01-31
        year                 : 3000
        leap-year            : false
        month-in-year        : 1
        month-name           : January
        month-abbreviation   : Jan
        week-in-year         : 5
        day-in-year          : 31
        day-in-month         : 31
        day-of-week-in-month : 5
        day-in-week          : 6
        day-name             : Friday
        day-abbreviation     : Fri
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : 2000-02-29
        year                 : 2000
        leap-year            : true
        month-in-year        : 2
        month-name           : February
        month-abbreviation   : Feb
        week-in-year         : 9
        day-in-year          : 60
        day-in-month         : 29
        day-of-week-in-month : 5
        day-in-week          : 3
        day-name             : Tuesday
        day-abbreviation     : Tue
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : 9990001-12-31Z
        year                 : 9990001
        leap-year            : false
        month-in-year        : 12
        month-name           : December
        month-abbreviation   : Dec
        week-in-year         : 1
        day-in-year          : 365
        day-in-month         : 31
        day-of-week-in-month : 5
        day-in-week          : 2
        day-name             : Monday
        day-abbreviation     : Mon
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : -0004-02-29
        year                 : -4
        leap-year            : true
        month-in-year        : 2
        month-name           : February
        month-abbreviation   : Feb
        week-in-year         : 9
        day-in-year          : 60
        day-in-month         : 29
        day-of-week-in-month : 5
        day-in-week          : 1
        day-name             : Sunday
        day-abbreviation     : Sun
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
    Test 10: EXSLT Support
    Warning: Cannot find the script or external object that implements prefix 'http://exslt.org/dates-and-times'. in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Xml\__input.txt at expression on line 14, column 3.
    
    Warning: Illegal string offset '-1' in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Phalanger.inc at expression on line 7, column 6.
    Xml/xslt011.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test 11: php:function Support
    
    Warning: XSLTProcessor::transformToXml(): A PHP Object cannot be converted to a XPath-string in D:\Documents\Documents\Visual Studio 2008\Projects\Phalanger\Tests\Xml\__input.txt on line 18
    <?xml version="1.0"?>
    foobar - secondArg
    foobar - 
    this is from an external DomDocument
    from the Input Document
    static
    Test 11: php:function Support
    <?xml version="1.0" encoding="utf-8"?>foobar - secondArg
    foobar - 
    this is from an external DomDocument
    from the Input Document
    static
    not a DomNode object
    Xml/xslt012.php: SUCCEEDED
    ================================================ FILE: Testing/Tests/TestLogs/TestLog 2011-04-05.htm ================================================ PHP.NET Compiler test log

    PHP.NET Compiler test log

    (89%) 813 succeeded, 99 failed
    Test ResultCompiler error outputExpected test result
    @PHP/classes/array_access_001.php: SUCCEEDED
    @PHP/classes/array_access_002.php: SUCCEEDED
    @PHP/classes/array_access_003.php: SUCCEEDED
    @PHP/classes/array_access_004.php: SUCCEEDED
    @PHP/classes/array_access_005.php: SUCCEEDED
    @PHP/classes/array_access_006.php: SUCCEEDED
    @PHP/classes/array_access_007.php: SUCCEEDED
    @PHP/classes/array_access_008.php: SUCCEEDED
    @PHP/classes/array_access_009.php: SUCCEEDED
    @PHP/classes/array_access_010.php: SUCCEEDED
    @PHP/classes/array_access_011.php: SUCCEEDED
    @PHP/classes/array_access_013.php: SUCCEEDED
    @PHP/classes/assign_op_property_001.php: SUCCEEDED
    @PHP/classes/autoload_001.php: SUCCEEDED
    @PHP/classes/autoload_002.php: SUCCEEDED
    @PHP/classes/autoload_003.php: SUCCEEDED
    @PHP/classes/autoload_005.php: SUCCEEDED
    @PHP/classes/autoload_006.php: SUCCEEDED
    @PHP/classes/bug23951.php: SUCCEEDED
    @PHP/classes/bug24399.php: SUCCEEDED
    @PHP/classes/bug24445.php: SUCCEEDED
    @PHP/classes/bug26737.php: SUCCEEDED
    @PHP/classes/bug27468.php: SUCCEEDED
    @PHP/classes/bug27504.php: SUCCEEDED
    @PHP/classes/class_example.php: SUCCEEDED
    @PHP/classes/class_stdclass.php: SUCCEEDED
    @PHP/classes/clone_001.php: SUCCEEDED
    @PHP/classes/clone_002.php: SUCCEEDED
    @PHP/classes/clone_003.php: SUCCEEDED
    @PHP/classes/clone_004.php: SUCCEEDED
    @PHP/classes/clone_006.php: SUCCEEDED
    @PHP/classes/constants_scope_001.php: SUCCEEDED
    @PHP/classes/ctor_dtor.php: SUCCEEDED
    @PHP/classes/ctor_dtor_inheritance.php: SUCCEEDED
    @PHP/classes/ctor_name_clash.php: SUCCEEDED
    @PHP/classes/dereferencing_001.php: SUCCEEDED
    @PHP/classes/destructor_and_echo.php: SUCCEEDED
    @PHP/classes/destructor_and_references.php: SUCCEEDED
    @PHP/classes/destructor_inheritance.php: SUCCEEDED
    @PHP/classes/destructor_visibility_003.php: SUCCEEDED
    @PHP/classes/factory_001.php: SUCCEEDED
    @PHP/classes/factory_and_singleton_001.php: SUCCEEDED
    @PHP/classes/factory_and_singleton_002.php: SUCCEEDED
    @PHP/classes/final.php: SUCCEEDED
    @PHP/classes/incdec_property_001.php: SUCCEEDED
    @PHP/classes/incdec_property_002.php: SUCCEEDED
    @PHP/classes/incdec_property_003.php: SUCCEEDED
    @PHP/classes/incdec_property_004.php: SUCCEEDED
    @PHP/classes/inheritance.php: SUCCEEDED
    @PHP/classes/inheritance_002.php: SUCCEEDED
    @PHP/classes/interfaces_001.php: SUCCEEDED
    @PHP/classes/interface_construct.php: SUCCEEDED
    @PHP/classes/interface_doubled.php: SUCCEEDED
    @PHP/classes/interface_implemented.php: SUCCEEDED
    @PHP/classes/iterators_001.php: SUCCEEDED
    @PHP/classes/iterators_002.php: SUCCEEDED
    @PHP/classes/iterators_003.php: SUCCEEDED
    @PHP/classes/iterators_004.php: SUCCEEDED
    @PHP/classes/iterators_006.php: SUCCEEDED
    @PHP/classes/iterators_007.php: SUCCEEDED
    @PHP/classes/object_reference_001.php: SUCCEEDED
    @PHP/classes/private_001.php: SUCCEEDED
    @PHP/classes/private_002.php: SUCCEEDED
    @PHP/classes/private_003.php: SUCCEEDED
    @PHP/classes/private_003b.php: SUCCEEDED
    @PHP/classes/private_004.php: SUCCEEDED
    @PHP/classes/private_004b.php: SUCCEEDED
    @PHP/classes/private_005.php: SUCCEEDED
    @PHP/classes/private_005b.php: SUCCEEDED
    @PHP/classes/private_006.php: SUCCEEDED
    @PHP/classes/private_006b.php: SUCCEEDED
    @PHP/classes/private_007.php: SUCCEEDED
    @PHP/classes/private_007b.php: SUCCEEDED
    @PHP/classes/private_members.php: SUCCEEDED
    @PHP/classes/private_redeclare.php: SUCCEEDED
    @PHP/classes/protected_001.php: SUCCEEDED
    @PHP/classes/protected_001b.php: SUCCEEDED
    @PHP/classes/protected_002.php: SUCCEEDED
    @PHP/classes/serialize_001.php: SUCCEEDED
    @PHP/classes/singleton_001.php: SUCCEEDED
    @PHP/classes/static_properties_001.php: SUCCEEDED
    @PHP/classes/type_hinting_001.php: SUCCEEDED
    @PHP/classes/type_hinting_003.php: SUCCEEDED
    @PHP/classes/visibility_000c.php: SUCCEEDED
    @PHP/classes/visibility_001c.php: SUCCEEDED
    @PHP/classes/visibility_002c.php: SUCCEEDED
    @PHP/classes/visibility_003a.php: SUCCEEDED
    @PHP/classes/visibility_003c.php: SUCCEEDED
    @PHP/classes/visibility_004a.php: SUCCEEDED
    @PHP/classes/visibility_004b.php: SUCCEEDED
    @PHP/classes/visibility_004c.php: SUCCEEDED
    @PHP/classes/visibility_005.php: SUCCEEDED
    @PHP/classes/__call_001.php: SUCCEEDED
    @PHP/classes/__set_data_corrupt.php: SUCCEEDED
    @PHP/classes/__set__get_001.php: SUCCEEDED
    @PHP/classes/__set__get_004.php: SUCCEEDED
    @PHP/classes/__set__get_005.php: SUCCEEDED
    @PHP/date/bug17988.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2002-06-25 12:18:48
    2002-06-25 14:18:48
    2002-06-25 13:18:48
    2002-06-25 12:18:48
    2002-06-25 18:18:48
    2002-06-25 14:18:48
    2002-06-25 14:18:48
    2002-06-25 18:18:48
    2002-06-25 10:18:48
    2002-06-25 17:18:48
    2002-06-25 11:18:48
    2002-06-25 17:48:48
    2002-06-25 10:48:48
    2002-06-25 14:18:48
    2002-06-25 14:18:48
    2002-06-25 13:18:48
    2002-06-25 12:18:48
    2002-06-25 18:18:48
    2002-06-25 14:18:48
    2002-06-25 14:18:48
    2002-06-25 18:18:48
    2002-06-25 10:18:48
    2002-06-25 17:18:48
    2002-06-25 11:18:48
    2002-06-25 17:48:48
    2002-06-25 10:48:48
    @PHP/date/bug26317.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2003-11-19 17:20:42
    2003-11-19 17:20:42
    2003-11-19 17:20:42
    2003-11-19 16:20:42
    2003-11-19 16:20:42
    2003-11-19 16:20:42
    @PHP/date/bug26320.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2003-11-19 12:30:42
    2003-11-19 13:30:42
    2003-11-19 12:30:42
    2003-11-19 12:30:42
    @PHP/date/bug28088.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    The following line rightly shows the correct date time:
    04/04/04 2145
    But the following line fails to show the correct date time:
    04/03/04 2245
    The following line rightly shows the correct date time:
    04/04/04 2345
    But the following line fails to show the correct date time:
    04/04/04 0045
    @PHP/date/bug28599.php: SUCCEEDED
    @PHP/date/bug29150.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    2005-06-19 22:00:00
    2005-06-20 00:00:00
    @PHP/date/bug29585.php: SUCCEEDED
    @PHP/date/bug29595.php: SUCCEEDED
    @PHP/date/bug33056.php: SUCCEEDED
    @PHP/date/bug33452.php: SUCCEEDED
    @PHP/date/bug33562.php: SUCCEEDED
    @PHP/date/bug33563.php: SUCCEEDED
    @PHP/date/bug33578.php: SUCCEEDED
    @PHP/date/bug33869.php: SUCCEEDED
    @PHP/date/bug34676.php: SUCCEEDED
    @PHP/date/bug34771.php: SUCCEEDED
    @PHP/date/bug35143.php: SUCCEEDED
    @PHP/date/bug35414.php: SUCCEEDED
    @PHP/date/bug35422.php: SUCCEEDED
    @PHP/date/bug35425.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    integer(42)
    integer(1)
    integer(1)
    integer(1)
    integer(1)
    integer(0)
    integer(0)
    integer(1)
    integer(1)
    integer(31)
    integer(1104537661)
    integer(6)
    integer(53)
    integer(5)
    integer(2005)
    integer(0)
    integer(3600)
    integer(292)
    integer(1)
    integer(1)
    integer(1)
    integer(1)
    integer(0)
    integer(0)
    integer(1)
    integer(1)
    integer(31)
    integer(1104559261)
    integer(6)
    integer(53)
    integer(5)
    integer(2005)
    integer(0)
    integer(-18000)
    @PHP/date/bug35456.php: SUCCEEDED
    @PHP/date/bug35624.php: SUCCEEDED
    @PHP/date/bug35630.php: SUCCEEDED
    @PHP/date/bug35699.php: SUCCEEDED
    @PHP/date/bug35705.php: SUCCEEDED
    @PHP/date/bug35885.php: SUCCEEDED
    @PHP/date/bug35887.php: SUCCEEDED
    @PHP/date/date.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    c: 2003-01-23T13:20:59+01:00
    r: Thu, 23 Jan 2003 13:20:59 +0100
    c: 2003-01-23T13:20:59+01:00
    r: Thu, 23 Jan 2003 13:20:59 +0100
    c: 2003-01-23T12:20:59+00:00
    r: Thu, 23 Jan 2003 12:20:59 +0000
    c: 2003-01-23T13:20:59+01:00
    r: Thu, 23 Jan 2003 13:20:59 +0100
    @PHP/date/date_create-1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\date\__input.txt on line 28
    SKIP
    @PHP/date/date_create-2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\date\__input.txt on line 6
    SKIP
    @PHP/date/date_default_timezone_get-3.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Europe/Prague
    America/Chicago
    Europe/Rome
    America/Chicago
    @PHP/date/date_modify-1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\date\__input.txt on line 6
    SKIP
    @PHP/date/date_modify-2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Class 'date' not found in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\date\__input.txt on line 6
    SKIP
    @PHP/date/default-timezone-1.php: SUCCEEDED
    @PHP/date/default-timezone-2.php: SUCCEEDED
    @PHP/date/format-negative-timestamp.php: SUCCEEDED
    @PHP/date/strtotime.php: SUCCEEDED
    @PHP/date/timezone-configuration.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    1119125744
    1119125744
    1119125744
    1119125744
    1119129344
    1119125744
    @PHP/doc_examples/test001.php: SUCCEEDED
    @PHP/doc_examples/test002.php: SUCCEEDED
    @PHP/doc_examples/test003.php: SUCCEEDED
    @PHP/doc_examples/test004.php: SUCCEEDED
    @PHP/doc_examples/test005.php: SUCCEEDED
    @PHP/doc_examples/test006.php: SUCCEEDED
    @PHP/doc_examples/test007.php: SUCCEEDED
    @PHP/doc_examples/test008.php: SUCCEEDED
    @PHP/doc_examples/test009.php: SUCCEEDED
    @PHP/doc_examples/test010.php: SUCCEEDED
    @PHP/doc_examples/test011.php: SUCCEEDED
    @PHP/doc_examples/test013.php: SUCCEEDED
    @PHP/doc_examples/test014.php: SUCCEEDED
    @PHP/doc_examples/test015.php: SUCCEEDED
    @PHP/doc_examples/test016.php: SUCCEEDED
    @PHP/doc_examples/test017.php: SUCCEEDED
    @PHP/doc_examples/test018.php: SUCCEEDED
    @PHP/doc_examples/test019.php: SUCCEEDED
    @PHP/doc_examples/test020.php: SUCCEEDED
    @PHP/doc_examples/test021.php: SUCCEEDED
    @PHP/doc_examples/test022.php: SUCCEEDED
    @PHP/doc_examples/test023.php: SUCCEEDED
    @PHP/doc_examples/test024.php: SUCCEEDED
    @PHP/doc_examples/test025.php: SUCCEEDED
    @PHP/doc_examples/test026.php: SUCCEEDED
    @PHP/doc_examples/test027.php: SUCCEEDED
    @PHP/doc_examples/test028.php: SUCCEEDED
    @PHP/doc_examples/test029.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ´┐Żauky
    �auky
    @PHP/doc_examples/test030.php: SUCCEEDED
    @PHP/doc_examples/test031.php: SUCCEEDED
    @PHP/doc_examples/test032.php: SUCCEEDED
    @PHP/doc_examples/test033.php: SUCCEEDED
    @PHP/doc_examples/test034.php: SUCCEEDED
    @PHP/doc_examples/test035.php: SUCCEEDED
    @PHP/doc_examples/test036.php: SUCCEEDED
    @PHP/doc_examples/test037.php: SUCCEEDED
    @PHP/doc_examples/test038.php: SUCCEEDED
    @PHP/doc_examples/test039.php: SUCCEEDED
    @PHP/doc_examples/test040.php: SUCCEEDED
    @PHP/doc_examples/test041.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    call_user_func():
    hello world!
    Strict Standards: call_user_func(): Non-static method MyClass::myCallbackMethod() should not be called statically in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\doc_examples\__input.txt at expression on line 17, column 1.
    Hello World!Hello World!
    @PHP/doc_examples/test042.php: SUCCEEDED
    @PHP/doc_examples/test043.php: SUCCEEDED
    @PHP/doc_examples/test044.php: SUCCEEDED
    @PHP/doc_examples/test045.php: SUCCEEDED
    @PHP/doc_examples/test046.php: SUCCEEDED
    @PHP/doc_examples/test047.php: SUCCEEDED
    @PHP/doc_examples/test048.php: SUCCEEDED
    @PHP/doc_examples/test049.php: SUCCEEDED
    @PHP/doc_examples/test050.php: SUCCEEDED
    @PHP/doc_examples/test051.php: SUCCEEDED
    @PHP/doc_examples/test052.php: SUCCEEDED
    @PHP/doc_examples/test053.php: SUCCEEDED
    @PHP/doc_examples/test054.php: SUCCEEDED
    @PHP/doc_examples/test055.php: SUCCEEDED
    @PHP/doc_examples/test056.php: SUCCEEDED
    @PHP/doc_examples/test057.php: SUCCEEDED
    @PHP/doc_examples/test058.php: SUCCEEDED
    @PHP/doc_examples/test059.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    Deprecated: Assigning the return value of new by reference is deprecated in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\doc_examples\__input.txt on line 4
    NULL
    object(stdClass)#1 (0) {
    }
    NULL
    object(stdClass)(0) {
    }
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\doc_examples\__input.txt(4,5): warning PHP0181: Assigning the return value of new by reference is deprecated
    
    @PHP/doc_examples/test060.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    Deprecated: Assigning the return value of new by reference is deprecated in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\doc_examples\__input.txt on line 9
    Static object: NULL
    Static object: NULL
    
    Static object: NULL
    Static object: object(stdClass)#3 (1) {
      ["property"]=>
      int(1)
    }
    Static object: NULL
    Static object: NULL
    
    Static object: NULL
    Static object: object(stdClass)(1) {
      ["property"]=>
      int(1)
    }
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\doc_examples\__input.txt(9,9): warning PHP0181: Assigning the return value of new by reference is deprecated
    
    @PHP/doc_examples/test061.php: SUCCEEDED
    @PHP/doc_examples/test062.php: SUCCEEDED
    @PHP/doc_examples/test063.php: SUCCEEDED
    @PHP/doc_examples/test064.php: SUCCEEDED
    @PHP/doc_examples/test065.php: SUCCEEDED
    @PHP/doc_examples/test066.php: SUCCEEDED
    @PHP/doc_examples/test067.php: SUCCEEDED
    @PHP/doc_examples/test068.php: SUCCEEDED
    @PHP/doc_examples/test069.php: SUCCEEDED
    @PHP/doc_examples/test070.php: SUCCEEDED
    @PHP/doc_examples/test071.php: SUCCEEDED
    @PHP/doc_examples/test072.php: SUCCEEDED
    @PHP/doc_examples/test073.php: SUCCEEDED
    @PHP/doc_examples/test074.php: SUCCEEDED
    @PHP/doc_examples/test075.php: SUCCEEDED
    @PHP/doc_examples/test076.php: SUCCEEDED
    @PHP/doc_examples/test077.php: SUCCEEDED
    @PHP/doc_examples/test078.php: SUCCEEDED
    @PHP/doc_examples/test079.php: SUCCEEDED
    @PHP/doc_examples/test080.php: SUCCEEDED
    @PHP/doc_examples/test081.php: SUCCEEDED
    @PHP/doc_examples/test082.php: SUCCEEDED
    @PHP/doc_examples/test083.php: SUCCEEDED
    @PHP/doc_examples/test084.php: SUCCEEDED
    @PHP/doc_examples/test085.php: SUCCEEDED
    @PHP/doc_examples/test086.php: SUCCEEDED
    @PHP/doc_examples/test087.php: SUCCEEDED
    @PHP/doc_examples/test088.php: SUCCEEDED
    @PHP/doc_examples/test089.php: SUCCEEDED
    @PHP/doc_examples/test090.php: SUCCEEDED
    @PHP/doc_examples/test091.php: SUCCEEDED
    @PHP/doc_examples/test092.php: SUCCEEDED
    @PHP/doc_examples/test093.php: SUCCEEDED
    @PHP/doc_examples/test094.php: SUCCEEDED
    @PHP/doc_examples/test095.php: SUCCEEDED
    @PHP/doc_examples/test096.php: SUCCEEDED
    @PHP/doc_examples/test097.php: SUCCEEDED
    @PHP/doc_examples/test098.php: SUCCEEDED
    @PHP/doc_examples/test099.php: SUCCEEDED
    @PHP/doc_examples/test100.php: SUCCEEDED
    @PHP/doc_examples/test102.php: SUCCEEDED
    @PHP/doc_examples/test103.php: SUCCEEDED
    @PHP/doc_examples/test104.php: SUCCEEDED
    @PHP/doc_examples/test105.php: SUCCEEDED
    @PHP/doc_examples/test107.php: SUCCEEDED
    @PHP/doc_examples/test108.php: SUCCEEDED
    @PHP/doc_examples/test109.php: SUCCEEDED
    @PHP/doc_examples/test110.php: SUCCEEDED
    @PHP/doc_examples/test111.php: SUCCEEDED
    @PHP/doc_examples/test112.php: SUCCEEDED
    @PHP/doc_examples/test113.php: SUCCEEDED
    @PHP/doc_examples/test114.php: SUCCEEDED
    @PHP/doc_examples/test115.php: SUCCEEDED
    @PHP/doc_examples/test116.php: SUCCEEDED
    @PHP/doc_examples/test117.php: SUCCEEDED
    @PHP/doc_examples/test118.php: SUCCEEDED
    @PHP/doc_examples/test119.php: SUCCEEDED
    @PHP/doc_examples/test120.php: SUCCEEDED
    @PHP/doc_examples/test121.php: SUCCEEDED
    @PHP/doc_examples/test122.php: SUCCEEDED
    @PHP/doc_examples/test123.php: SUCCEEDED
    @PHP/doc_examples/test124.php: SUCCEEDED
    @PHP/doc_examples/test125.php: SUCCEEDED
    @PHP/doc_examples/test126.php: SUCCEEDED
    @PHP/doc_examples/test127.php: SUCCEEDED
    @PHP/doc_examples/test128.php: SUCCEEDED
    @PHP/doc_examples/test129.php: SUCCEEDED
    @PHP/doc_examples/test130.php: SUCCEEDED
    @PHP/doc_examples/test131.php: SUCCEEDED
    @PHP/doc_examples/test132.php: SUCCEEDED
    @PHP/doc_examples/test133.php: SUCCEEDED
    @PHP/doc_examples/test134.php: SUCCEEDED
    @PHP/doc_examples/test136.php: SUCCEEDED
    @PHP/doc_examples/test137.php: SUCCEEDED
    @PHP/doc_examples/test138.php: SUCCEEDED
    @PHP/doc_examples/test139.php: SUCCEEDED
    @PHP/doc_examples/test148.php: SUCCEEDED
    @PHP/doc_examples/test149.php: SUCCEEDED
    @PHP/doc_examples/test150.php: SUCCEEDED
    @PHP/doc_examples/test151.php: SUCCEEDED
    @PHP/doc_examples/test152.php: SUCCEEDED
    @PHP/doc_examples/test153.php: SUCCEEDED
    @PHP/doc_examples/test154.php: SUCCEEDED
    @PHP/doc_examples/test155.php: SUCCEEDED
    @PHP/doc_examples/test156.php: SUCCEEDED
    @PHP/doc_examples/test158.php: SUCCEEDED
    @PHP/lang/001.php: SUCCEEDED
    @PHP/lang/002.php: SUCCEEDED
    @PHP/lang/003.php: SUCCEEDED
    @PHP/lang/004.php: SUCCEEDED
    @PHP/lang/005.php: SUCCEEDED
    @PHP/lang/006.php: SUCCEEDED
    @PHP/lang/007.php: SUCCEEDED
    @PHP/lang/008.php: SUCCEEDED
    @PHP/lang/009.php: SUCCEEDED
    @PHP/lang/010.php: SUCCEEDED
    @PHP/lang/011.php: SUCCEEDED
    @PHP/lang/012.php: SUCCEEDED
    @PHP/lang/013.php: SUCCEEDED
    @PHP/lang/014.php: SUCCEEDED
    @PHP/lang/015.php: SUCCEEDED
    @PHP/lang/016.php: SUCCEEDED
    @PHP/lang/017.php: SUCCEEDED
    @PHP/lang/018.php: SUCCEEDED
    @PHP/lang/019.php: SUCCEEDED
    @PHP/lang/020.php: SUCCEEDED
    @PHP/lang/021.php: SUCCEEDED
    @PHP/lang/022.php: SUCCEEDED
    @PHP/lang/023.php: SUCCEEDED
    @PHP/lang/024.php: SUCCEEDED
    @PHP/lang/025.php: SUCCEEDED
    @PHP/lang/026.php: SUCCEEDED
    @PHP/lang/027.php: SUCCEEDED
    @PHP/lang/028.php: SUCCEEDED
    @PHP/lang/030.php: SUCCEEDED
    @PHP/lang/032.php: SUCCEEDED
    @PHP/lang/036.php: SUCCEEDED
    @PHP/lang/037.php: SUCCEEDED
    @PHP/lang/038.php: SUCCEEDED
    @PHP/lang/039.php: SUCCEEDED
    @PHP/lang/040.php: SUCCEEDED
    @PHP/lang/bison1.php: SUCCEEDED
    @PHP/lang/bug17115.php: SUCCEEDED
    @PHP/lang/bug18872.php: SUCCEEDED
    @PHP/lang/bug19943.php: SUCCEEDED
    @PHP/lang/bug20175.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    Deprecated: Assigning the return value of new by reference is deprecated in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\lang\__input.txt on line 110
    foo_static()
    foo_global()
    foo:1
    foo_static()
    foo:1
    bar_static()
    bar_global()
    bar:1
    bar_static()
    bar:1
    wow_static()
    wow_global()
    wow:1
    wow_static()
    wow:1
    oop_test()
    oop_static()
    oop_class()
    oop:1
    oop_static()
    oop:1
    oop_test()
    oop_static()
    oop:1
    foo_static()
    foo_global()
    foo:1
    foo_static()
    foo:1
    bar_static()
    bar_global()
    bar:1
    bar_static()
    bar_global()
    bar:2
    wow_static()
    wow_global()
    wow:1
    wow_static()
    wow:1
    oop_test()
    oop_static()
    oop_class()
    oop:1
    oop_static()
    oop:1
    oop_test()
    oop_static()
    oop:1
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\lang\__input.txt(110,4): warning PHP0181: Assigning the return value of new by reference is deprecated
    
    @PHP/lang/bug21094.php: SUCCEEDED
    @PHP/lang/bug21600.php: SUCCEEDED
    @PHP/lang/bug21669.php: SUCCEEDED
    @PHP/lang/bug21849.php: SUCCEEDED
    @PHP/lang/bug21961.php: SUCCEEDED
    @PHP/lang/bug22231.php: SUCCEEDED
    @PHP/lang/bug22367.php: SUCCEEDED
    @PHP/lang/bug22510.php: SUCCEEDED
    @PHP/lang/bug22592.php: SUCCEEDED
    @PHP/lang/bug22690.php: SUCCEEDED
    @PHP/lang/bug23279.php: SUCCEEDED
    @PHP/lang/bug23384.php: SUCCEEDED
    @PHP/lang/bug23489.php: SUCCEEDED
    @PHP/lang/bug23524.php: SUCCEEDED
    @PHP/lang/bug23922.php: SUCCEEDED
    @PHP/lang/bug24054.php: SUCCEEDED
    @PHP/lang/bug24396.php: SUCCEEDED
    @PHP/lang/bug24403.php: SUCCEEDED
    @PHP/lang/bug24436.php: SUCCEEDED
    @PHP/lang/bug24499.php: SUCCEEDED
    @PHP/lang/bug24640.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    double(1700000000000000089258092433847514422797596587883870563356951996370064178581143932836831337636761368874297554515902592900802289500112731978596146714137401870842258241575178866354311397451139753100927220499450359906637902366244989496126909662726242240784739940994096632824796638102733857671280980918272.0000000000)
    1.7E+300
    
    ------
    double(0.0000000000)
    1.7E-300
    
    ------
    double(17000000000000001584208052028780237480128823455860622330108867175329927830437888.0000000000)
    1.7E+79
    
    ------
    double(0.0000000000)
    1.7E-79
    
    ------
    double(169999999999999996096025832433329868941658043870400163508258284150340918121070592.0000000000)
    1.7E+80
    
    ------
    double(0.0000000000)
    1.7E-80
    
    ------
    double(1700000000000000013616404158611892038375594280539217794530130541777964808366194688.0000000000)
    1.7E+81
    
    ------
    double(0.0000000000)
    1.7E-81
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    1.6999810742106E-319
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    1.7000798873397E-320
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    1.6995858216939E-321
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    0
    
    ------
    double(INF-INF)
    INF
    
    ------
    double(0.0000000000)
    0
    
    ------
    double(1700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+300
    
    ------
    double(0.0000000000)
    1.70000000000003E-300
    
    ------
    double(17000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+79
    
    ------
    double(0.0000000000)
    1.70000000000001E-79
    
    ------
    double(170000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+80
    
    ------
    double(0.0000000000)
    1.70000000000001E-80
    
    ------
    double(1700000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)
    1.7E+81
    
    ------
    double(0.0000000000)
    1.70000000000001E-81
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    1.69998107421056E-319
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    1.70007988733973E-320
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    1.69464516523548E-321
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    0
    
    ------
    double(Infinity)
    Infinity
    
    ------
    double(0.0000000000)
    0
    
    ------
    @PHP/lang/bug24652.php: SUCCEEDED
    @PHP/lang/bug24658.php: SUCCEEDED
    @PHP/lang/bug24783.php: SUCCEEDED
    @PHP/lang/bug24926.php: SUCCEEDED
    @PHP/lang/bug25547.php: SUCCEEDED
    @PHP/lang/bug25652.php: SUCCEEDED
    @PHP/lang/bug25922.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Undefined index here: 'error'
    Undefined index here: ''
    @PHP/lang/bug26182.php: SUCCEEDED
    @PHP/lang/bug26696.php: SUCCEEDED
    @PHP/lang/bug26866.php: SUCCEEDED
    @PHP/lang/bug26869.php: SUCCEEDED
    @PHP/lang/bug27354.php: SUCCEEDED
    @PHP/lang/bug27439.php: SUCCEEDED
    @PHP/lang/bug27535.php: SUCCEEDED
    @PHP/lang/bug28213.php: SUCCEEDED
    @PHP/lang/bug28800.php: SUCCEEDED
    @PHP/lang/bug29566.php: SUCCEEDED
    @PHP/lang/bug29893.php: SUCCEEDED
    @PHP/lang/bug29944.php: SUCCEEDED
    @PHP/lang/bug30638.php: SUCCEEDED
    @PHP/lang/bug30726.php: SUCCEEDED
    @PHP/lang/bug30862.php: SUCCEEDED
    @PHP/lang/bug32924.php: SUCCEEDED
    @PHP/lang/bug35382.php: SUCCEEDED
    @PHP/lang/bug7515.php: SUCCEEDED
    @PHP/lang/each_binary_safety.php: SUCCEEDED
    @PHP/lang/error_2_exception_001.php: SUCCEEDED
    @PHP/lang/foreach_with_object_001.php: SUCCEEDED
    @PHP/lang/foreach_with_references_001.php: SUCCEEDED
    @PHP/lang/type_hints_001.php: SUCCEEDED
    @PHP/standard/array/001.php: SUCCEEDED
    @PHP/standard/array/003.php: SUCCEEDED
    @PHP/standard/array/004.php: SUCCEEDED
    @PHP/standard/array/005.php: SUCCEEDED
    @PHP/standard/array/008.php: SUCCEEDED
    @PHP/standard/array/array_change_key_case.php: SUCCEEDED
    @PHP/standard/array/array_chunk.php: SUCCEEDED
    @PHP/standard/array/array_count_values.php: SUCCEEDED
    @PHP/standard/array/array_diff_1.php: SUCCEEDED
    @PHP/standard/array/array_diff_key.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ------ Test 1 --------
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 2 --------
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 3 --------
    array(6) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [2]=>
      int(4)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [2]=>
      int(4)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 4 --------
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 5 --------
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(4) {
      [1]=>
      int(2)
      [6]=>
      int(12)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 6 --------
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    array(3) {
      [1]=>
      int(2)
      [15]=>
      int(30)
      [1200]=>
      int(2400)
    }
    ------ Test 7 --------
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    ------ Test 8 --------
    array(6) {
      [0]=>
      int(0)
      [7]=>
      int(14)
      [2]=>
      int(4)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [0]=>
      int(0)
      [7]=>
      int(14)
      [2]=>
      int(4)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 9 --------
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    array(3) {
      [7]=>
      int(14)
      [11]=>
      int(22)
      [1100]=>
      int(2200)
    }
    ------ Test 1 --------
    array(4) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(4) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 2 --------
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 3 --------
    array(6) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [2]=>
      &int(4)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [2]=>
      &int(4)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 4 --------
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 5 --------
    array(4) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(4) {
      [1]=>
      &int(2)
      [6]=>
      &int(12)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 6 --------
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    array(3) {
      [1]=>
      &int(2)
      [15]=>
      &int(30)
      [1200]=>
      &int(2400)
    }
    ------ Test 7 --------
    array(3) {
      [7]=>
      &int(14)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
    }
    array(3) {
      [7]=>
      &int(14)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
    }
    ------ Test 8 --------
    array(6) {
      [0]=>
      &int(0)
      [7]=>
      &int(14)
      [2]=>
      &int(4)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
      [-2500]=>
      &int(-5000)
    }
    array(6) {
      [0]=>
      &int(0)
      [7]=>
      &int(14)
      [2]=>
      &int(4)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
      [-2500]=>
      &int(-5000)
    }
    ------ Test 9 --------
    array(3) {
      [7]=>
      &int(14)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
    }
    array(3) {
      [7]=>
      &int(14)
      [11]=>
      &int(22)
      [1100]=>
      &int(2200)
    }
    @PHP/standard/array/array_intersect_key.php: SUCCEEDED
    @PHP/standard/array/array_sum.php: SUCCEEDED
    @PHP/standard/array/array_walk_recursive.php: SUCCEEDED
    @PHP/standard/array/bug12776.php: SUCCEEDED
    @PHP/standard/array/bug14580.php: SUCCEEDED
    @PHP/standard/array/bug20381.php: SUCCEEDED
    @PHP/standard/array/bug20865.php: SUCCEEDED
    @PHP/standard/array/bug21182.php: SUCCEEDED
    @PHP/standard/array/bug21918.php: SUCCEEDED
    @PHP/standard/array/bug21998.php: SUCCEEDED
    @PHP/standard/array/bug22088.php: SUCCEEDED
    @PHP/standard/array/bug22463.php: SUCCEEDED
    @PHP/standard/array/bug23581.php: SUCCEEDED
    @PHP/standard/array/bug23788.php: SUCCEEDED
    @PHP/standard/array/bug24198.php: SUCCEEDED
    @PHP/standard/array/bug24220.php: SUCCEEDED
    @PHP/standard/array/bug24766.php: SUCCEEDED
    @PHP/standard/array/bug24897.php: SUCCEEDED
    @PHP/standard/array/bug24980.php: SUCCEEDED
    @PHP/standard/array/bug25359.php: SUCCEEDED
    @PHP/standard/array/bug25708.php: SUCCEEDED
    @PHP/standard/array/bug25758.php: SUCCEEDED
    @PHP/standard/array/bug26458.php: SUCCEEDED
    @PHP/standard/array/bug28974.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    (
      [0] => 0
      [1] => 1
      [2] => 2
      [3] => 3
      [4] => 4
      [5] => 5
    )
    array
    (
      [0] => 2
      [1] => 3
      [2] => 4
      [3] => 5
    )
    array
    (
      [0] => 2
      [1] => 3
      [2] => 4
      [3] => 5
    )
    print_r(array_splice($a,2,1));
    array
    (
      [0] => 2
    )
    $a is :array
    (
      [0] => 0
      [1] => 1
      [2] => 3
      [3] => 4
      [4] => 5
    )
    print_r(array_splice($b,2,2147483645));
    array
    (
      [0] => 2
      [1] => 3
      [2] => 4
      [3] => 5
    )
    $b is :array
    (
      [0] => 0
      [1] => 1
    )
    print_r(array_splice($c,2,2147483646));
    array
    (
      [0] => 2
      [1] => 3
      [2] => 4
      [3] => 5
    )
    $c is :array
    (
      [0] => 0
      [1] => 1
    )
    Array
    (
        [0] => 0
        [1] => 1
        [2] => 2
        [3] => 3
        [4] => 4
        [5] => 5
    )
    Array
    (
        [0] => 2
        [1] => 3
        [2] => 4
        [3] => 5
    )
    Array
    (
        [0] => 2
        [1] => 3
        [2] => 4
        [3] => 5
    )
    print_r(array_splice($a,2,1));
    Array
    (
        [0] => 2
    )
    $a is :Array
    (
        [0] => 0
        [1] => 1
        [2] => 3
        [3] => 4
        [4] => 5
    )
    print_r(array_splice($b,2,2147483645));
    Array
    (
        [0] => 2
        [1] => 3
        [2] => 4
        [3] => 5
    )
    $b is :Array
    (
        [0] => 0
        [1] => 1
    )
    print_r(array_splice($c,2,2147483646));
    Array
    (
        [0] => 2
        [1] => 3
        [2] => 4
        [3] => 5
    )
    $c is :Array
    (
        [0] => 0
        [1] => 1
    )
    @PHP/standard/array/bug29493.php: SUCCEEDED
    @PHP/standard/array/bug30266.php: SUCCEEDED
    @PHP/standard/array/bug30833.php: SUCCEEDED
    @PHP/standard/array/bug31158.php: SUCCEEDED
    @PHP/standard/array/bug31213.php: SUCCEEDED
    @PHP/standard/array/bug32021.php: SUCCEEDED
    @PHP/standard/array/bug33382.php: SUCCEEDED
    @PHP/standard/array/bug33989.php: SUCCEEDED
    @PHP/standard/array/bug34227.php: SUCCEEDED
    @PHP/standard/array/bug34982.php: SUCCEEDED
    @PHP/standard/array/bug35014.php: SUCCEEDED
    @PHP/standard/array/bug35022.php: SUCCEEDED
    @PHP/standard/array/bug35821.php: SUCCEEDED
    @PHP/standard/array/count_recursive.php: SUCCEEDED
    @PHP/standard/array/locale_sort.php: SUCCEEDED
    @PHP/standard/array/range.php: SUCCEEDED
    @PHP/standard/assert/assert.php: SUCCEEDED
    @PHP/standard/general_functions/001.php: SUCCEEDED
    @PHP/standard/general_functions/002.php: SUCCEEDED
    @PHP/standard/general_functions/003.php: SUCCEEDED
    @PHP/standard/general_functions/004.php: SUCCEEDED
    @PHP/standard/general_functions/005.php: SUCCEEDED
    @PHP/standard/general_functions/006.php: SUCCEEDED
    @PHP/standard/general_functions/007.php: SUCCEEDED
    @PHP/standard/general_functions/009.php: SUCCEEDED
    @PHP/standard/general_functions/bug25038.php: SUCCEEDED
    @PHP/standard/general_functions/bug27678.php: SUCCEEDED
    @PHP/standard/general_functions/bug29038.php: SUCCEEDED
    @PHP/standard/general_functions/bug31190.php: SUCCEEDED
    @PHP/standard/general_functions/bug32647.php: SUCCEEDED
    @PHP/standard/general_functions/bug35229.php: SUCCEEDED
    @PHP/standard/general_functions/is_resource.php: SUCCEEDED
    @PHP/standard/math/abs.php: SUCCEEDED
    @PHP/standard/math/bug24142.php: SUCCEEDED
    @PHP/standard/math/bug25694.php: SUCCEEDED
    @PHP/standard/math/bug27646.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    double(INF-INF)
    'd:-INF;'
    double(INF-INF)
    double(INF-INF)
    'd:INF;'
    double(INF-INF)
    double(NaNInfini)
    'd:NAN;'
    double(NaNInfini)
    double(-Infinity)
    'd:-INF;'
    double(-Infinity)
    double(Infinity)
    'd:INF;'
    double(Infinity)
    double(NaN)
    'd:NAN;'
    double(NaN)
    @PHP/standard/math/bug30069.php: SUCCEEDED
    @PHP/standard/math/bug30695.php: SUCCEEDED
    @PHP/standard/math/floorceil.php: SUCCEEDED
    @PHP/standard/math/hexdec.php: SUCCEEDED
    @PHP/standard/math/log.php: SUCCEEDED
    @PHP/standard/math/pow.php: SUCCEEDED
    @PHP/standard/math/round.php: SUCCEEDED
    @PHP/standard/reg/001.php: SUCCEEDED
    @PHP/standard/reg/002.php: SUCCEEDED
    @PHP/standard/reg/003.php: SUCCEEDED
    @PHP/standard/reg/004.php: SUCCEEDED
    @PHP/standard/reg/005.php: SUCCEEDED
    @PHP/standard/reg/006.php: SUCCEEDED
    @PHP/standard/reg/007.php: SUCCEEDED
    @PHP/standard/reg/008.php: SUCCEEDED
    @PHP/standard/reg/009.php: SUCCEEDED
    @PHP/standard/reg/010.php: SUCCEEDED
    @PHP/standard/reg/011.php: SUCCEEDED
    @PHP/standard/reg/012.php: SUCCEEDED
    @PHP/standard/reg/013.php: SUCCEEDED
    @PHP/standard/reg/014.php: SUCCEEDED
    @PHP/standard/reg/015.php: SUCCEEDED
    @PHP/standard/reg/016.php: SUCCEEDED
    @PHP/standard/serialize/001.php: SUCCEEDED
    @PHP/standard/serialize/002.php: SUCCEEDED
    @PHP/standard/serialize/003.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    d:100;
    double(100.0000000000)
    
    d:51999999999999996980101120;
    double(51999999999999996980101120.0000000000)
    
    d:8.9999999999999995265585574287341141808127531476202420890331268310546875E-9;
    double(0.0000000090)
    d:100;
    double(100.0000000000)
    
    d:5.2000000000000006E+25;
    double(52000000000000000000000000.0000000000)
    
    d:9.0000000000000045E-09;
    double(0.0000000090)
    @PHP/standard/serialize/004.php: SUCCEEDED
    @PHP/standard/serialize/005.php: SUCCEEDED
    @PHP/standard/serialize/006.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    'O:3:"´┐Ż":1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    object
    {
      '´┐Ż' => '´┐Ż'
    }
    'a:1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    array
    {
      '´┐Ż' => '´┐Ż'
    }
    'O:3:"´┐Ż":1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    object
    {
      'ďż˝' => 'ďż˝'
    }
    'a:1:{s:3:"´┐Ż";s:3:"´┐Ż";}'
    array
    {
      'ďż˝' => 'ďż˝'
    }
    @PHP/standard/serialize/bug14293.php: SUCCEEDED
    @PHP/standard/serialize/bug21957.php: SUCCEEDED
    @PHP/standard/serialize/bug23298.php: SUCCEEDED
    @PHP/standard/serialize/bug24063.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0.1 0.1
    0.01 0.01
    0.001 0.001
    0.0001 0.0001
    1.0E-5 1.0E-5
    1.0E-6 1.0E-6
    1.0E-7 1.0E-7
    1.0E-8 1.0E-8
    1.0E-9 1.0E-9
    0.1 0.1
    0.01 0.01
    0.001 0.001
    0.0001 0.0001
    1E-05 1E-05
    1E-06 1E-06
    1E-07 1E-07
    1E-08 1E-08
    1E-09 1E-09
    @PHP/standard/serialize/bug25378.php: SUCCEEDED
    @PHP/standard/serialize/bug26762.php: SUCCEEDED
    @PHP/standard/serialize/bug27469.php: SUCCEEDED
    @PHP/standard/serialize/bug28325.php: SUCCEEDED
    @PHP/standard/serialize/bug30234.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    FALSE
    FALSE
    __autoload(Autoload_Implements)
    object [invalid]
    FALSE
    FALSE
    FALSE
    FALSE
    TRUE
    __autoload(Autoload_Implements)
    object [invalid]
    FALSE
    FALSE
    TRUE
    @PHP/standard/serialize/bug31402.php: SUCCEEDED
    @PHP/standard/serialize/bug31442.php: SUCCEEDED
    @PHP/standard/strings/add-and-stripcslashes.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    kaboemkara!
    foo\b\a\r\b\az
    \f\o\o\[ \]
    \zoo['\.']
    \abcd\e\f\g\h\i\j\k\l\m\n\o\pqrstuvwxy\z
    1
    5d
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\standard\strings\__input.txt at expression on line 3, column 1.
    
    kaboemkara!
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\standard\strings\__input.txt at expression on line 5, column 1.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\standard\strings\__input.txt at expression on line 6, column 1.
    
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\@PHP\standard\strings\__input.txt at expression on line 8, column 1.
    
    1
    5d
    @PHP/standard/strings/add-and-stripslashes.php: SUCCEEDED
    @PHP/standard/strings/basename.php: SUCCEEDED
    @PHP/standard/strings/bin2hex.php: SUCCEEDED
    @PHP/standard/strings/bug20108.php: SUCCEEDED
    @PHP/standard/strings/bug20169.php: SUCCEEDED
    @PHP/standard/strings/bug20261.php: SUCCEEDED
    @PHP/standard/strings/bug20927.php: SUCCEEDED
    @PHP/standard/strings/bug21338.php: SUCCEEDED
    @PHP/standard/strings/bug21453.php: SUCCEEDED
    @PHP/standard/strings/bug21730.php: SUCCEEDED
    @PHP/standard/strings/bug21744.php: SUCCEEDED
    @PHP/standard/strings/bug22008.php: SUCCEEDED
    @PHP/standard/strings/bug22187.php: SUCCEEDED
    @PHP/standard/strings/bug22224.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      0 => 
      object
      {
      }
      1 => 
      object
      {
      }
    }
    @PHP/standard/strings/bug22227.php: SUCCEEDED
    @PHP/standard/strings/bug22904.php: SUCCEEDED
    @PHP/standard/strings/bug23650.php: SUCCEEDED
    @PHP/standard/strings/bug23894.php: SUCCEEDED
    @PHP/standard/strings/bug24098.php: SUCCEEDED
    @PHP/standard/strings/bug24208.php: SUCCEEDED
    @PHP/standard/strings/bug24281.php: SUCCEEDED
    @PHP/standard/strings/bug25671.php: SUCCEEDED
    @PHP/standard/strings/bug25707.php: SUCCEEDED
    @PHP/standard/strings/bug26878.php: SUCCEEDED
    @PHP/standard/strings/bug26973.php: SUCCEEDED
    @PHP/standard/strings/bug27276.php: SUCCEEDED
    @PHP/standard/strings/bug27278.php: SUCCEEDED
    @PHP/standard/strings/bug27295.php: SUCCEEDED
    @PHP/standard/strings/bug27457.php: SUCCEEDED
    @PHP/standard/strings/bug27675.php: SUCCEEDED
    @PHP/standard/strings/bug28386.php: SUCCEEDED
    @PHP/standard/strings/bug33076.php: SUCCEEDED
    @PHP/standard/strings/chr_ord.php: SUCCEEDED
    @PHP/standard/strings/chunk_split.php: SUCCEEDED
    @PHP/standard/strings/count_chars.php: SUCCEEDED
    @PHP/standard/strings/crc32.php: SUCCEEDED
    @PHP/standard/strings/explode.php: SUCCEEDED
    @PHP/standard/strings/implode.php: SUCCEEDED
    @PHP/standard/strings/md5.php: SUCCEEDED
    @PHP/standard/strings/md5raw.php: SUCCEEDED
    @PHP/standard/strings/nl2br.php: SUCCEEDED
    @PHP/standard/strings/sha1.php: SUCCEEDED
    @PHP/standard/strings/sha1raw.php: SUCCEEDED
    @PHP/standard/strings/sprintf_f.php: SUCCEEDED
    @PHP/standard/strings/strcspn.php: SUCCEEDED
    @PHP/standard/strings/strings001.php: SUCCEEDED
    @PHP/standard/strings/strpos.php: SUCCEEDED
    @PHP/standard/strings/strrev.php: SUCCEEDED
    @PHP/standard/strings/strripos.php: SUCCEEDED
    @PHP/standard/strings/strrpos.php: SUCCEEDED
    @PHP/standard/strings/strspn.php: SUCCEEDED
    @PHP/standard/strings/strstr.php: SUCCEEDED
    @PHP/standard/strings/strtoupper.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    cfbfbdcfbfbdcfbfbd
    cfafbdcfafbdcfafbd
    @PHP/standard/strings/strtr.php: SUCCEEDED
    @PHP/standard/strings/strval.php: SUCCEEDED
    @PHP/standard/strings/str_repeat.php: SUCCEEDED
    @PHP/standard/strings/str_shuffle.php: SUCCEEDED
    @PHP/standard/strings/str_word_count.php: SUCCEEDED
    @PHP/standard/strings/substr_count.php: SUCCEEDED
    @PHP/standard/strings/substr_replace.php: SUCCEEDED
    @PHP/standard/strings/wordwrap.php: SUCCEEDED
    @PHP/standard/time/001.php: SUCCEEDED
    @PHP/standard/time/idate.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    U: 1043324459
    Y: 2003
    z: 22
    y: 3
    m: 1
    n: 1
    d: 23
    j: 23
    H: 13
    G: 13
    h: 1
    g: 1
    i: 20
    s: 59
    t: 31
    w: 4
    L: 0
    B: 556
    I: 0
    W: 4
    U: 1043324459
    Y: 2003
    z: 22
    y: 3
    m: 1
    n: 1
    d: 23
    j: 23
    H: 12
    G: 12
    h: 12
    g: 12
    i: 20
    s: 59
    t: 31
    w: 4
    L: 0
    B: 556
    I: 0
    W: 4
    @PHP/strings/001.php: SUCCEEDED
    @PHP/strings/002.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    fprintf test 1:abcde
    20
    printf test 1:simple string
    printf test 2:42
    printf test 3:3.333333
    printf test 4:3.3333333333
    printf test 5:2.50      
    printf test 6:2.50000000
    printf test 7:0000002.50
    printf test 8:<                 foo>
    printf test 9:<bar                 >
    printf test 10: 123456789012345
    printf test 10:<h´┐Żyesterettsjustitiarius>
    printf test 11: 123456789012345678901234567890
    printf test 11:<    h´┐Żyesterettsjustitiarius>
    printf test 12:-12.34
    printf test 13:  -12
    printf test 14:@
    printf test 15:10101010
    printf test 16:aa
    printf test 17:AA
    printf test 18:        10101010
    printf test 19:              aa
    printf test 20:              AA
    printf test 21:0000000010101010
    printf test 22:00000000000000aa
    printf test 23:00000000000000AA
    printf test 24:abcde
    printf test 25:gazonk
    printf test 26:2 1
    printf test 27:3 1 2
    printf test 28:02  1
    printf test 29:2   1
    printf test 30:x
    vprintf test 1:2   1
    fprintf test 1:abcde
    20
    printf test 1:simple string
    printf test 2:42
    printf test 3:3.333333
    printf test 4:3.3333333333
    printf test 5:2.50      
    printf test 6:2.50000000
    printf test 7:0000002.50
    printf test 8:<                 foo>
    printf test 9:<bar                 >
    printf test 10: 123456789012345
    printf test 10:<h�yesterettsjustitiarius>
    printf test 11: 123456789012345678901234567890
    printf test 11:<    h�yesterettsjustitiarius>
    printf test 12:-12.34
    printf test 13:  -12
    printf test 14:@
    printf test 15:10101010
    printf test 16:aa
    printf test 17:AA
    printf test 18:        10101010
    printf test 19:              aa
    printf test 20:              AA
    printf test 21:0000000010101010
    printf test 22:00000000000000aa
    printf test 23:00000000000000AA
    printf test 24:abcde
    printf test 25:gazonk
    printf test 26:2 1
    printf test 27:3 1 2
    printf test 28:02  1
    printf test 29:2   1
    printf test 30:x
    vprintf test 1:2   1
    @PHP/strings/bug22592.php: SUCCEEDED
    Arrays/array1.php: SUCCEEDED
    Arrays/array_diff_intersect.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array [empty]
    array
    (
      [a] => green
      [2] => blue
      [3] => blue
      [4] => blue
    )
    array
    (
      [2] => hello
    )
    array
    (
      [b] => green
      [3] => blue
    )
    array
    (
      [a] => green
      [0] => red
    )
    array
    (
      [3] => blue
    )
    array
    (
      [2] => hello
    )
    array
    (
      [3] => blue
    )
    array
    (
      [0] => 1
      [1] => 2
      [2] => 3
    )
    array [empty]
    array
    (
      [2] => 3
    )
    array [empty]
    Array
    (
    )
    Array
    (
        [a] => green
        [2] => blue
        [3] => blue
        [4] => blue
    )
    Array
    (
        [2] => hello
    )
    Array
    (
        [b] => green
        [3] => blue
    )
    Array
    (
        [a] => green
        [0] => red
    )
    Array
    (
        [3] => blue
    )
    Array
    (
        [2] => hello
    )
    Array
    (
        [3] => blue
    )
    Array
    (
        [0] => 1
        [1] => 2
        [2] => 3
    )
    Array
    (
    )
    Array
    (
        [2] => 3
    )
    Array
    (
    )
    Arrays/array_diff_intersect2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    (
      [0.5] => cr object
      (
        [priv_member:private] => 12
      )
      [0] => cr object
      (
        [priv_member:private] => 23
      )
    )
    array
    (
      [0.1] => cr object
      (
        [priv_member:private] => 9
      )
      [0.5] => cr object
      (
        [priv_member:private] => 12
      )
      [0] => cr object
      (
        [priv_member:private] => 23
      )
    )
    array
    (
      [0.1] => cr object
      (
        [priv_member:private] => 9
      )
      [0.5] => cr object
      (
        [priv_member:private] => 12
      )
      [0] => cr object
      (
        [priv_member:private] => 23
      )
    )
    array
    (
      [b] => brown
      [c] => blue
      [0] => red
    )
    ------------------------------------
    array
    (
      [0.1] => cr object
      (
        [priv_member:private] => 9
      )
      [1] => cr object
      (
        [priv_member:private] => 4
      )
      [2] => cr object
      (
        [priv_member:private] => -15
      )
    )
    array
    (
      [1] => cr object
      (
        [priv_member:private] => 4
      )
      [2] => cr object
      (
        [priv_member:private] => -15
      )
    )
    array
    (
      [1] => cr object
      (
        [priv_member:private] => 4
      )
      [2] => cr object
      (
        [priv_member:private] => -15
      )
    )
    array
    (
      [a] => green
    )
    Array
    (
        [0.5] => cr Object
        (
            [priv_member:private] => 12
        )
    
        [0] => cr Object
        (
            [priv_member:private] => 23
        )
    
    )
    Array
    (
        [0.1] => cr Object
        (
            [priv_member:private] => 9
        )
    
        [0.5] => cr Object
        (
            [priv_member:private] => 12
        )
    
        [0] => cr Object
        (
            [priv_member:private] => 23
        )
    
    )
    Array
    (
        [0.1] => cr Object
        (
            [priv_member:private] => 9
        )
    
        [0.5] => cr Object
        (
            [priv_member:private] => 12
        )
    
        [0] => cr Object
        (
            [priv_member:private] => 23
        )
    
    )
    Array
    (
        [b] => brown
        [c] => blue
        [0] => red
    )
    ------------------------------------
    Array
    (
        [0.1] => cr Object
        (
            [priv_member:private] => 9
        )
    
        [1] => cr Object
        (
            [priv_member:private] => 4
        )
    
        [2] => cr Object
        (
            [priv_member:private] => -15
        )
    
    )
    Array
    (
        [1] => cr Object
        (
            [priv_member:private] => 4
        )
    
        [2] => cr Object
        (
            [priv_member:private] => -15
        )
    
    )
    Array
    (
        [1] => cr Object
        (
            [priv_member:private] => 4
        )
    
        [2] => cr Object
        (
            [priv_member:private] => -15
        )
    
    )
    Array
    (
        [a] => green
    )
    Arrays/array_diff_intersect3.php: SUCCEEDED
    Arrays/array_filter%20false%20entries%20%2322016.php: SUCCEEDED
    Arrays/array_map.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    (
      [0] => array
      (
        [0] => 1
        [1] => A
        [2] => 0
      )
      [1] => array
      (
        [0] => 2
        [1] => B
        [2] => 0
      )
      [2] => array
      (
        [0] => 3
        [1] => C
        [2] => 
      )
    )
    array
    (
      [0] => 1 A 0
      [1] => 2 B 0
      [2] => 3 C 
    )
    array
    (
      [A] => 2
      [10] => 3
    )
    array
    (
      [0] => 1
      [1] => 2
      [2] => 3
    )
    array
    (
      [0] => A
      [1] => B
      [2] => C
    )
    array
    (
      [0] => x
      [1] => x
    )
    array
    (
      [A] => 1
      [10] => 2
    )
    Array
    (
        [0] => Array
        (
            [0] => 1
            [1] => A
            [2] => 0
        )
    
        [1] => Array
        (
            [0] => 2
            [1] => B
            [2] => 0
        )
    
        [2] => Array
        (
            [0] => 3
            [1] => C
            [2] => 
        )
    
    )
    Array
    (
        [0] => 1 A 0
        [1] => 2 B 0
        [2] => 3 C 
    )
    Array
    (
        [A] => 2
        [10] => 3
    )
    Array
    (
        [0] => 1
        [1] => 2
        [2] => 3
    )
    Array
    (
        [0] => A
        [1] => B
        [2] => C
    )
    Array
    (
        [0] => x
        [1] => x
    )
    Array
    (
        [A] => 1
        [10] => 2
    )
    Arrays/array_merge_recursive.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    (
      [color] => array
      (
        [favorite] => array
        (
          [0] => red
          [1] => green
        )
        [0] => blue
      )
      [0] => array
      (
        [0] => 1
        [1] => 2
        [2] => 3
      )
      [q] => array
      (
        [0] => x
      )
      [1] => 10
      [2] => array
      (
        [0] => 4
        [1] => 5
        [2] => 6
      )
    )
    array
    (
      [a] => array
      (
        [0] => 1
        [1] => 2
        [2] => 3
        [3] => e
      )
    )
    array
    (
      [a] => array
      (
        [0] => 1
        [1] => 2
        [2] => 3
        [3] => e
      )
    )
    array
    (
      [a] => &1
      [b] => 2
    )
    array
    (
      [a] => &xxx
      [b] => 2
    )
    array
    (
      [a] => array
      (
        [a] => &array
        (
          [a] => &array [recursion]
        )
        [0] => 1
        [1] => 2
        [2] => 3
      )
    )
    array
    (
      [a] => array
      (
        [b] => array
        (
          [0] => 1
          [1] => 1
        )
        [c] => 1
        [d] => array
        (
          [0] => 2
          [1] => 3
        )
      )
    )
    array
    (
      [a] => array [empty]
    )
    array
    (
      [a] => array [empty]
    )
    Array
    (
        [color] => Array
        (
            [favorite] => Array
            (
                [0] => red
                [1] => green
            )
    
            [0] => blue
        )
    
        [0] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
        )
    
        [q] => Array
        (
            [0] => x
        )
    
        [1] => 10
        [2] => Array
        (
            [0] => 4
            [1] => 5
            [2] => 6
        )
    
    )
    Array
    (
        [a] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
            [3] => e
        )
    
    )
    Array
    (
        [a] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
            [3] => e
        )
    
    )
    Array
    (
        [a] => 1
        [b] => 2
    )
    Array
    (
        [a] => xxx
        [b] => 2
    )
    Array
    (
        [a] => Array
        (
            [a] => Array
            (
                [a] => Array [recursion]
    
    
            )
    
            [0] => 1
            [1] => 2
            [2] => 3
        )
    
    )
    Array
    (
        [a] => Array
        (
            [b] => Array
            (
                [0] => 1
                [1] => 1
            )
    
            [c] => 1
            [d] => Array
            (
                [0] => 2
                [1] => 3
            )
    
        )
    
    )
    Array
    (
        [a] => Array
        (
        )
    
    )
    Array
    (
        [a] => Array
        (
        )
    
    )
    Arrays/array_reduce1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    (
      [a] => 1
      [b] => 2
      [c] => 3
      [d] => 4
      [e] => 5
    )
    array
    (
      [0] => 1
      [1] => 2
      [2] => 3
      [3] => 4
      [4] => 5
    )
    array [empty]
    Array
    (
        [a] => 1
        [b] => 2
        [c] => 3
        [d] => 4
        [e] => 5
    )
    Array
    (
        [0] => 1
        [1] => 2
        [2] => 3
        [3] => 4
        [4] => 5
    )
    Array
    (
    )
    Arrays/array_reduce2.php: SUCCEEDED
    Arrays/array_slice.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    (
      [0] => c
      [Y] => d
      [1] => e
    )
    array
    (
      [Y] => d
    )
    array
    (
      [0] => a
      [X] => b
      [1] => c
    )
    array
    (
      [0] => c
      [Y] => d
    )
    array
    (
      [2] => c
      [Y] => d
    )
    Array
    (
        [0] => c
        [Y] => d
        [1] => e
    )
    Array
    (
        [Y] => d
    )
    Array
    (
        [0] => a
        [X] => b
        [1] => c
    )
    Array
    (
        [0] => c
        [Y] => d
    )
    Array
    (
        [2] => c
        [Y] => d
    )
    Arrays/array_sumprod.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    double(-7.7)
    double(-38.4)
    integer(6)
    integer(6)
    int64(4294967297)
    int64(9223372028264841218)
    bool(true)
    bool(true)
    float(-7.7)
    float(-38.4)
    int(6)
    int(6)
    int64(4294967297)
    int64(9223372028264841218)
    bool(true)
    bool(true)
    Arrays/array_unshift.php: SUCCEEDED
    Arrays/array_walk.php: SUCCEEDED
    Arrays/array_walk_recursive.php: SUCCEEDED
    Arrays/multisort.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    bool(true)
    Array
    (
        [0] => Array
            (
                [0] => 2
                [1] => 8
                [2] => 2
                [3] => 2
                [4] => 8
                [5] => 8
            )
    
        [1] => Array
            (
                [0] => 7
                [1] => 2
                [2] => 7
                [3] => 4
                [4] => 8
                [5] => 1
            )
    
        [2] => Array
            (
                [0] => 1
                [1] => 4
                [2] => 8
                [3] => 0
                [4] => 6
                [5] => 2
            )
    
        [3] => Array
            (
                [0] => 8
                [1] => 4
                [2] => 1
                [3] => 0
                [4] => 7
                [5] => 1
            )
    
        [4] => Array
            (
                [0] => 20
                [1] => 2
                [2] => 12
                [3] => 11
                [4] => 10
                [5] => 1
            )
    
    )
    Array
    (
        [0] => Array
            (
                [0] => 10
                [1] => 100
                [2] => 100
                [3] => a
            )
    
        [1] => Array
            (
                [0] => 1
                [1] => 3
                [2] => 2
                [3] => 1
            )
    
    )
    Array
    (
        [0] => 10
        [1] => a
        [2] => 100
        [3] => 100
    )
    Array
    (
        [0] => 1
        [1] => 1
        [2] => 2
        [3] => 3
    )
    bool(true)
    Array
    (
        [0] => Array
        (
            [0] => 2
            [1] => 8
            [2] => 2
            [3] => 2
            [4] => 8
            [5] => 8
        )
    
        [1] => Array
        (
            [0] => 7
            [1] => 2
            [2] => 7
            [3] => 4
            [4] => 8
            [5] => 1
        )
    
        [2] => Array
        (
            [0] => 1
            [1] => 4
            [2] => 8
            [3] => 0
            [4] => 6
            [5] => 2
        )
    
        [3] => Array
        (
            [0] => 8
            [1] => 4
            [2] => 1
            [3] => 0
            [4] => 7
            [5] => 1
        )
    
        [4] => Array
        (
            [0] => 20
            [1] => 2
            [2] => 12
            [3] => 11
            [4] => 10
            [5] => 1
        )
    
    )
    Array
    (
        [0] => Array
        (
            [0] => 10
            [1] => 100
            [2] => 100
            [3] => a
        )
    
        [1] => Array
        (
            [0] => 1
            [1] => 3
            [2] => 2
            [3] => 1
        )
    
    )
    Array
    (
        [0] => 10
        [1] => a
        [2] => 100
        [3] => 100
    )
    Array
    (
        [0] => 1
        [1] => 1
        [2] => 2
        [3] => 3
    )
    Arrays/multisort_empty.php: SUCCEEDED
    Arrays/nonarray%20access%20%2322019.php: SUCCEEDED
    Arrays/optimizations.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    3
    4
    5
    a
    b
    c
    
    Warning: strtolower() expects parameter 1 to be string, array given in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 15
    
    cablo
    3
    4
    5
    a
    b
    c
    array
    cablo
    Arrays/recursion.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    f1:
    array(2) {
      ["a"]=>
      array(5) {
        ["a"]=>
        &array(3) {
          ["a"]=>
          &array(3) {
            ["a"]=>
            *RECURSION*
            [0]=>
            string(1) "y"
            [1]=>
            string(1) "z"
          }
          [0]=>
          string(1) "y"
          [1]=>
          string(1) "z"
        }
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        string(1) "x"
      }
      [0]=>
      string(1) "w"
    }
    f2:
    array(1) {
      ["A"]=>
      &array(2) {
        ["a"]=>
        &array(2) {
          ["a"]=>
          *RECURSION*
          [0]=>
          string(1) "z"
        }
        [0]=>
        string(1) "z"
      }
    }
    f3:
    array(2) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) {
          [0]=>
          *RECURSION*
          [1]=>
          string(1) "z"
        }
        [1]=>
        string(1) "z"
      }
      [1]=>
      string(1) "z"
    }
    f4:
    
    Warning: array_merge_recursive(): recursion detected in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Arrays\__input.txt on line 37
    array(1) {
      ["a"]=>
      &array(3) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
      }
    }
    f5:
    array(1) {
      ["a"]=>
      array(6) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        int(1)
        [4]=>
        int(2)
        [5]=>
        int(3)
      }
    }
    f6:
    array(1) {
      ["a"]=>
      array(2) {
        [0]=>
        string(2) "xx"
        [1]=>
        int(2)
      }
    }
    f7:
    array(1) {
      ["a"]=>
      array(1) {
        ["a"]=>
        array(1) {
          ["a"]=>
          &array(1) {
            ["a"]=>
            &array(1) {
              ["a"]=>
              *RECURSION*
            }
          }
        }
      }
    }
    f1:
    array(2) {
      ["a"]=>
      array(5) {
        ["a"]=>
        &array(3) {
          ["a"]=>
          &array(3) [recursion]
          [0]=>
          string(1) "y"
          [1]=>
          string(1) "z"
        }
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        string(1) "x"
      }
      [0]=>
      string(1) "w"
    }
    f2:
    array(1) {
      ["A"]=>
      &array(2) {
        ["a"]=>
        &array(2) [recursion]
        [0]=>
        string(1) "z"
      }
    }
    f3:
    array(2) {
      [0]=>
      &array(2) [recursion]
      [1]=>
      string(1) "z"
    }
    f4:
    array(1) {
      ["a"]=>
      array(6) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        int(1)
        [4]=>
        int(2)
        [5]=>
        int(3)
      }
    }
    f5:
    array(1) {
      ["a"]=>
      array(6) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        int(1)
        [4]=>
        int(2)
        [5]=>
        int(3)
      }
    }
    f6:
    array(1) {
      ["a"]=>
      array(2) {
        [0]=>
        string(2) "xx"
        [1]=>
        int(2)
      }
    }
    f7:
    array(1) {
      ["a"]=>
      &array(1) {
        ["a"]=>
        &array(1) [recursion]
      }
    }
    Arrays/sort.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    sort regular:
    array
    (
      [0] => 0x10
      [1] => 10x
      [2] => 20x
      [3] => ach0
      [4] => add1
      [5] => x10
      [6] => 0
      [7] => x2
      [8] => 1
      [9] => 1
      [10] => 8
    )
    
    sort numeric:
    array
    (
      [0] => x10
      [1] => 0
      [2] => x2
      [3] => ach0
      [4] => add1
      [5] => 1
      [6] => 1
      [7] => 8
      [8] => 10x
      [9] => 0x10
      [10] => 20x
    )
    
    sort string:
    array
    (
      [0] => 0
      [1] => 0x10
      [2] => 1
      [3] => 1
      [4] => 10x
      [5] => 20x
      [6] => 8
      [7] => ach0
      [8] => add1
      [9] => x10
      [10] => x2
    )
    
    sort locale:
    array
    (
      [0] => 0
      [1] => 0x10
      [2] => 1
      [3] => 1
      [4] => 10x
      [5] => 20x
      [6] => 8
      [7] => add1
      [8] => ach0
      [9] => x10
      [10] => x2
    )
    
    ksort regular:
    array
    (
      [x] => 8
      [z] => 1
      [0] => x10
      [1] => 10x
      [2] => 20x
      [3] => x2
      [4] => 0x10
      [5] => ach0
      [6] => add1
      [10a] => 0
      [2b] => 1
    )
    
    ksort numeric:
    array
    (
      [x] => 8
      [z] => 1
      [0] => x10
      [1] => 10x
      [2b] => 1
      [2] => 20x
      [3] => x2
      [4] => 0x10
      [5] => ach0
      [6] => add1
      [10a] => 0
    )
    
    ksort string:
    array
    (
      [0] => x10
      [1] => 10x
      [10a] => 0
      [2] => 20x
      [2b] => 1
      [3] => x2
      [4] => 0x10
      [5] => ach0
      [6] => add1
      [x] => 8
      [z] => 1
    )
    
    ksort locale:
    array
    (
      [0] => x10
      [1] => 10x
      [10a] => 0
      [2] => 20x
      [2b] => 1
      [3] => x2
      [4] => 0x10
      [5] => ach0
      [6] => add1
      [x] => 8
      [z] => 1
    )
    
    asort regular:
    array
    (
      [4] => 0x10
      [1] => 10x
      [2] => 20x
      [5] => ach0
      [6] => add1
      [0] => x10
      [10a] => 0
      [3] => x2
      [z] => 1
      [2b] => 1
      [x] => 8
    )
    
    asort numeric:
    array
    (
      [0] => x10
      [10a] => 0
      [3] => x2
      [5] => ach0
      [6] => add1
      [z] => 1
      [2b] => 1
      [x] => 8
      [1] => 10x
      [4] => 0x10
      [2] => 20x
    )
    
    asort string:
    array
    (
      [10a] => 0
      [4] => 0x10
      [z] => 1
      [2b] => 1
      [1] => 10x
      [2] => 20x
      [x] => 8
      [5] => ach0
      [6] => add1
      [0] => x10
      [3] => x2
    )
    
    asort locale:
    array
    (
      [10a] => 0
      [4] => 0x10
      [z] => 1
      [2b] => 1
      [1] => 10x
      [2] => 20x
      [x] => 8
      [6] => add1
      [5] => ach0
      [0] => x10
      [3] => x2
    )
    
    rsort regular:
    array
    (
      [0] => 8
      [1] => 1
      [2] => 1
      [3] => x2
      [4] => x10
      [5] => 0
      [6] => add1
      [7] => ach0
      [8] => 20x
      [9] => 10x
      [10] => 0x10
    )
    
    rsort numeric:
    array
    (
      [0] => 20x
      [1] => 0x10
      [2] => 10x
      [3] => 8
      [4] => 1
      [5] => 1
      [6] => x10
      [7] => 0
      [8] => x2
      [9] => ach0
      [10] => add1
    )
    
    rsort string:
    array
    (
      [0] => x2
      [1] => x10
      [2] => add1
      [3] => ach0
      [4] => 8
      [5] => 20x
      [6] => 10x
      [7] => 1
      [8] => 1
      [9] => 0x10
      [10] => 0
    )
    
    rsort locale:
    array
    (
      [0] => x2
      [1] => x10
      [2] => ach0
      [3] => add1
      [4] => 8
      [5] => 20x
      [6] => 10x
      [7] => 1
      [8] => 1
      [9] => 0x10
      [10] => 0
    )
    
    natsort:
    array
    (
      [10a] => 0
      [4] => 0x10
      [z] => 1
      [2b] => 1
      [x] => 8
      [1] => 10x
      [2] => 20x
      [5] => ach0
      [6] => add1
      [3] => x2
      [0] => x10
    )
    sort regular:
    Array
    (
        [0] => 0x10
        [1] => 10x
        [2] => 20x
        [3] => ach0
        [4] => add1
        [5] => x10
        [6] => 0
        [7] => x2
        [8] => 1
        [9] => 1
        [10] => 8
    )
    
    sort numeric:
    Array
    (
        [0] => x10
        [1] => 0
        [2] => x2
        [3] => ach0
        [4] => add1
        [5] => 1
        [6] => 1
        [7] => 8
        [8] => 10x
        [9] => 0x10
        [10] => 20x
    )
    
    sort string:
    Array
    (
        [0] => 0
        [1] => 0x10
        [2] => 1
        [3] => 1
        [4] => 10x
        [5] => 20x
        [6] => 8
        [7] => ach0
        [8] => add1
        [9] => x10
        [10] => x2
    )
    
    sort locale:
    Array
    (
        [0] => 0
        [1] => 0x10
        [2] => 1
        [3] => 1
        [4] => 10x
        [5] => 20x
        [6] => 8
        [7] => add1
        [8] => ach0
        [9] => x10
        [10] => x2
    )
    
    ksort regular:
    Array
    (
        [x] => 8
        [z] => 1
        [0] => x10
        [1] => 10x
        [2] => 20x
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [10a] => 0
        [2b] => 1
    )
    
    ksort numeric:
    Array
    (
        [x] => 8
        [z] => 1
        [0] => x10
        [1] => 10x
        [2b] => 1
        [2] => 20x
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [10a] => 0
    )
    
    ksort string:
    Array
    (
        [0] => x10
        [1] => 10x
        [10a] => 0
        [2] => 20x
        [2b] => 1
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [x] => 8
        [z] => 1
    )
    
    ksort locale:
    Array
    (
        [0] => x10
        [1] => 10x
        [10a] => 0
        [2] => 20x
        [2b] => 1
        [3] => x2
        [4] => 0x10
        [5] => ach0
        [6] => add1
        [x] => 8
        [z] => 1
    )
    
    asort regular:
    Array
    (
        [4] => 0x10
        [1] => 10x
        [2] => 20x
        [5] => ach0
        [6] => add1
        [0] => x10
        [10a] => 0
        [3] => x2
        [z] => 1
        [2b] => 1
        [x] => 8
    )
    
    asort numeric:
    Array
    (
        [0] => x10
        [10a] => 0
        [3] => x2
        [5] => ach0
        [6] => add1
        [z] => 1
        [2b] => 1
        [x] => 8
        [1] => 10x
        [4] => 0x10
        [2] => 20x
    )
    
    asort string:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [z] => 1
        [2b] => 1
        [1] => 10x
        [2] => 20x
        [x] => 8
        [5] => ach0
        [6] => add1
        [0] => x10
        [3] => x2
    )
    
    asort locale:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [z] => 1
        [2b] => 1
        [1] => 10x
        [2] => 20x
        [x] => 8
        [6] => add1
        [5] => ach0
        [0] => x10
        [3] => x2
    )
    
    rsort regular:
    Array
    (
        [0] => 8
        [1] => 1
        [2] => 1
        [3] => x2
        [4] => x10
        [5] => 0
        [6] => add1
        [7] => ach0
        [8] => 20x
        [9] => 10x
        [10] => 0x10
    )
    
    rsort numeric:
    Array
    (
        [0] => 20x
        [1] => 0x10
        [2] => 10x
        [3] => 8
        [4] => 1
        [5] => 1
        [6] => x10
        [7] => 0
        [8] => x2
        [9] => ach0
        [10] => add1
    )
    
    rsort string:
    Array
    (
        [0] => x2
        [1] => x10
        [2] => add1
        [3] => ach0
        [4] => 8
        [5] => 20x
        [6] => 10x
        [7] => 1
        [8] => 1
        [9] => 0x10
        [10] => 0
    )
    
    rsort locale:
    Array
    (
        [0] => x2
        [1] => x10
        [2] => ach0
        [3] => add1
        [4] => 8
        [5] => 20x
        [6] => 10x
        [7] => 1
        [8] => 1
        [9] => 0x10
        [10] => 0
    )
    
    natsort:
    Array
    (
        [10a] => 0
        [4] => 0x10
        [z] => 1
        [2b] => 1
        [x] => 8
        [1] => 10x
        [2] => 20x
        [5] => ach0
        [6] => add1
        [3] => x2
        [0] => x10
    )
    Arrays/usort.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    array
    (
      [0] => 10
      [1] => 9
      [2] => 8
      [3] => 7
      [4] => 6
      [5] => 5
      [6] => 4
      [7] => 3
      [8] => 2
      [9] => 1
    )
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Array
    (
        [0] => 10
        [1] => 9
        [2] => 8
        [3] => 7
        [4] => 6
        [5] => 5
        [6] => 4
        [7] => 3
        [8] => 2
        [9] => 1
    )
    Bugs/class_incompletepart.php: SUCCEEDED
    Bugs/division-by-zero.php: FAILED
    Unexpected outputSee belowSuccess
    Expected test outputReal script output
    DIVISION
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 6
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 8
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 10
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 12
    bool(false)
    MODULO
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 16
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 18
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 20
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt on line 22
    bool(false)
    DIVISION
    bool(false)
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt at expression on line 10, column 2.
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt at expression on line 12, column 2.
    bool(false)
    MODULO
    bool(false)
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt at expression on line 20, column 2.
    bool(false)
    
    Warning: Division by zero in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt at expression on line 22, column 2.
    bool(false)
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt(6,10): warning PHP0150: Division by zero
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt(8,9): warning PHP0150: Division by zero
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt(16,10): warning PHP0150: Division by zero
    D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt(18,9): warning PHP0150: Division by zero
    
    Bugs/function-in-unknown-class.php: SUCCEEDED
    Bugs/is_a_null_value.php: SUCCEEDED
    Bugs/preg-named-groups.php: SUCCEEDED
    Bugs/preg-replace-advanced.php: SUCCEEDED
    Bugs/preg-replace-range.php: SUCCEEDED
    Bugs/preg-replace.php: SUCCEEDED
    Bugs/preg-this-dynamic.php: FAILED
    Script hung upNo errorsSuccess
    Expected test outputReal script output
    Unhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---> PHP.Core.Debug+AssertException: Assertion failed: 
       at PHP.Core.Debug.Fail(String message)
       at PHP.Core.Debug.Assert(Boolean condition)
       at PHP.Core.RelativePath.ParseCanonical(String relativePath)
       at PHP.Core.Emit.TransientAssemblyBuilder.Build(String sourceCode, SourceCodeDescriptor descriptor, EvalKinds kind, CompilationContext context, ScriptContext scriptContext, DTypeDesc referringType, NamingContext namingContext, Boolean completeSource)
       at PHP.Core.DynamicCode.EvalInternal(String prefix, String code, String suffix, EvalKinds kind, ScriptContext scriptContext, Dictionary`2 localVariables, DObject self, DTypeDesc referringType, SourceCodeDescriptor descriptor, Boolean entireFile, NamingContext namingContext)
       at PHP.Core.DynamicCode.Eval(String code, Boolean synthetic, ScriptContext context, Dictionary`2 definedVariables, DObject self, DTypeDesc referringType, String callerRelativeSourcePath, Int32 line, Int32 column, Int32 containerId, NamingContext namingContext)
       at PHP.Library.PerlRegExp.Evaluator.ReplaceCodeExecute(Match m)
       at System.Text.RegularExpressions.RegexReplacement.Replace(MatchEvaluator evaluator, Regex regex, String input, Int32 count, Int32 startat)
       at System.Text.RegularExpressions.Regex.Replace(String input, MatchEvaluator evaluator, Int32 count)
       at PHP.Library.PerlRegExp.ReplaceInternal(DObject self, Dictionary`2 definedVariables, PerlRegExpConverter converter, PhpCallback callback, String str, Int32 limit, SourceCodeDescriptor sourceCodeDesc, Int32& count)
       at PHP.Library.PerlRegExp.SimpleReplace(DObject self, Dictionary`2 definedVariables, Object pattern, String replacement, PhpCallback callback, Object data, Int32 limit, SourceCodeDescriptor descriptor, Int32& count)
       at PHP.Library.PerlRegExp.Replace(DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, PhpCallback callback, Object data, Int32 limit, Int32& count)
       at PHP.Library.PerlRegExp.Replace(DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, Object data)
       at PHP.Dynamic.PhpNetClassLibrary.preg_replace(Object , PhpStack )
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <__input.txt>.a.a(ScriptContext ) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt:line 16
       at <__input.txt>.a.<Mediator>(ScriptContext )
       at <__input.txt>.a.a(Object instance, PhpStack stack)
       at <__input.txt>.<Script>.<Main>(ScriptContext <context>, Dictionary`2 <locals>, DObject , DTypeDesc , Boolean ) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Bugs\__input.txt:line 19
       at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)
       at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)
       --- End of inner exception stack trace ---
       at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)
       at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)
       at <Global>.Run(String[] )
    
    Bugs/preg-this-dynamic2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    foo: ahoj
    foo: lidi
    foo: rozkladame
    foo: ahoj
    foo: lidi
    foo: rozkladame
    foo: ahoj
    foo: lidi
    foo: rozkladame
    
    Notice: Undefined variable: this.
    
    Error: Call to a member function foo() on a non-object.
    Bugs/preg-this.php: SUCCEEDED
    Bugs/preg-ungreedy-bugs.php: SUCCEEDED
    Bugs/preg-unkn.php: SUCCEEDED
    Bugs/trigger_error%20line%20number%20%232787.php: SUCCEEDED
    Compiler/abstracts.php: SUCCEEDED
    Compiler/aliased%20assign%20add.php: SUCCEEDED
    Compiler/assignments.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ---1---1float(-1.5)
    float(2.5)
    float(0.83333333333333)
    int(6)
    int(8)
    ---2---2float(8.8333333333333)
    float(8.8333333333333)
    float(8.8333333333333)
    int(8)
    int(8)
    ---3---3---4---4---5---5array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [1]=>
      array(1) {
        [2]=>
        array(1) {
          [3]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    ---6---6array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "u"
    }
    array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "v"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    ---7---7array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    ---8---8
    ---1---1float(-1.5)
    float(2.5)
    float(0.833333333333333)
    int(6)
    int(8)
    ---2---2float(8.83333333333333)
    float(8.83333333333333)
    float(8.83333333333333)
    int(8)
    int(8)
    ---3---3---4---4---5---5array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    array(1) {
      [1]=>
      array(1) {
        [2]=>
        array(1) {
          [3]=>
          array(3) {
            [0]=>
            int(1)
            [1]=>
            int(2)
            [2]=>
            int(3)
          }
        }
      }
    }
    ---6---6array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "u"
    }
    array(4) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "v"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    array(5) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
      [3]=>
      string(1) "w"
      [4]=>
      string(1) "z"
    }
    ---7---7array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            &int(10)
          }
        }
      }
    }
    ---8---8
    Compiler/assign_in_call.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    g1:
    f(x)
    u(x)
    'x'
    
    g2:
    f(x)
    u(x)
    'b'
    
    g3:
    f(x)
    u(x)
    'b'
    
    g4:
    f(x)
    u(x)
    'b'
    
    g5:
    f()
    u()
    integer(1)
    
    g6:
    f(3)
    u(3)
    integer(3)
    
    g7:
    f(2)
    u(10)
    integer(10)
    
    g8:
    f(1)
    f(1)
    f(1)
    u(1)
    u()
    u(1)
    
    g9:
    known:
    __get(p) = 0
    __set(p,1)
    f(1)
    unknown:
    __get(p) = 1
    __set(p,3)
    u(3)
    
    g10:
    Done.
    g1:
    f(x)
    u(x)
    'x'
    
    g2:
    f(x)
    u(x)
    'b'
    
    g3:
    f(x)
    u(x)
    'b'
    
    g4:
    f(x)
    u(x)
    'b'
    
    g5:
    f()
    u()
    integer(1)
    
    g6:
    f(3)
    u(3)
    integer(3)
    
    g7:
    f(2)
    u(10)
    integer(10)
    
    g8:
    f(1)
    f(1)
    f(1)
    u(1)
    u()
    u(1)
    
    g9:
    known:
    __get(p) = 0
    __set(p,1)
    __get(p) = 1
    f(1)
    unknown:
    __get(p) = 1
    __set(p,3)
    __get(p) = 3
    u(3)
    
    g10:
    Done.
    Compiler/auto_globals_001.php: SUCCEEDED
    Compiler/auto_globals_002.php: SUCCEEDED
    Compiler/auto_globals_003.php: SUCCEEDED
    Compiler/break_in_global_code.php: SUCCEEDED
    Compiler/chaining_test.php: SUCCEEDED
    Compiler/chain_ending_by_string_index.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        string(1) "f"
      }
    }
    array(1) {
      [0]=>
      string(4) "xubu"
    }
    object(C)#1 (1) {
      ["f"]=>
      string(4) "kuxu"
    }
    string(5) "helxo"
    string(5) "helxo"
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        string(1) "f"
      }
    }
    array(1) {
      [0]=>
      string(4) "bubu"
    }
    
    Warning: A string item used as a reference in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt at expression on line 19, column 1.
    object(C)(1) {
      ["f"]=>
      string(4) "kuku"
    }
    
    Warning: A string item used as a reference in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt at expression on line 25, column 1.
    string(5) "hello"
    
    Warning: A string item used as a reference in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt at expression on line 31, column 1.
    string(5) "hello"
    Compiler/continue_in_global_code.php: SUCCEEDED
    Compiler/deep_copy.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array(1) {
      [0]=>
      &array(1) {
        [0]=>
        &array(1) {
          [0]=>
          *RECURSION*
        }
      }
    }
    array(1) {
      [0]=>
      &array(1) {
        [0]=>
        &array(1) {
          [0]=>
          *RECURSION*
        }
      }
    }
    array(2) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) {
          [0]=>
          *RECURSION*
          [1]=>
          int(1)
        }
        [1]=>
        int(1)
      }
      [1]=>
      int(1)
    }
    array(1) {
      [0]=>
      &array(2) {
        [0]=>
        &array(2) {
          [0]=>
          *RECURSION*
          [1]=>
          int(1)
        }
        [1]=>
        int(1)
      }
    }
    array(1) {
      [0]=>
      &array(1) [recursion]
    }
    array(1) {
      [0]=>
      &array(1) [recursion]
    }
    array(2) {
      [0]=>
      &array(2) [recursion]
      [1]=>
      int(1)
    }
    array(1) {
      [0]=>
      &array(1) [recursion]
    }
    Compiler/deep_copy_refbox.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Strict Standards: Only variables should be passed by reference in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt on line 42
    array
    {
      0 => integer(1)
    }
    
    Strict Standards: Only variables should be passed by reference in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt on line 45
    array
    {
      0 => integer(1)
    }
    
    Strict Standards: Only variables should be passed by reference in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt on line 49
    array
    {
      0 => integer(1)
    }
    
    Strict Standards: Only variables should be passed by reference in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt on line 52
    array
    {
      0 => integer(1)
    }
    array
    {
      0 => integer(1)
      1 => integer(1)
    }
    array
    {
      0 => integer(1)
      1 => integer(1)
    }
    array
    {
      0 => integer(1)
      1 => integer(1)
    }
    array
    {
      0 => integer(1)
      1 => integer(1)
    }
    Compiler/expr_init.php: SUCCEEDED
    Compiler/foreach1.php: SUCCEEDED
    Compiler/foreach_arrays.php: SUCCEEDED
    Compiler/for_loop.php: SUCCEEDED
    Compiler/function_002.php: SUCCEEDED
    Compiler/function_003.php: SUCCEEDED
    Compiler/function_004.php: SUCCEEDED
    Compiler/function_call.php: SUCCEEDED
    Compiler/if_statement.php: SUCCEEDED
    Compiler/indirect_001.php: SUCCEEDED
    Compiler/indirect_002.php: SUCCEEDED
    Compiler/indirect_003.php: SUCCEEDED
    Compiler/indirect_004.php: SUCCEEDED
    Compiler/indirect_005.php: SUCCEEDED
    Compiler/indirect_007.php: SUCCEEDED
    Compiler/indirect_global.php: SUCCEEDED
    Compiler/inheritance.php: SUCCEEDED
    Compiler/inheritance2.php: SUCCEEDED
    Compiler/isset_unset_001.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Testing x in global code:  <br>
    1 <br>
     <br>
    Testing x (object) in optimized function:  <br>
    1 <br>
     <br>
    Testing x (PhpReference) in optimized function:  <br>
    1 <br>
     <br>
    
    Notice: Undefined variable: y in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\__input.txt on line 29
    Testing $$x (created at runtime) in optimized function:  <br>
    1 <br>
    Testing x in global code:  <br>
    1 <br>
     <br>
    Testing x (object) in optimized function:  <br>
    1 <br>
     <br>
    Testing x (PhpReference) in optimized function:  <br>
    1 <br>
     <br>
    Testing $$x (created at runtime) in optimized function:  <br>
    1 <br>
    Compiler/list%20%2326681.php: SUCCEEDED
    Compiler/null_hints.php: SUCCEEDED
    Compiler/pure_create_function.php: SUCCEEDED
    Compiler/pure_function_exists.php: SUCCEEDED
    Compiler/pure_math_str.php: SUCCEEDED
    Compiler/static_call.php: SUCCEEDED
    Compiler/switch.php: SUCCEEDED
    Compiler/ternary_ex.php: SUCCEEDED
    Compiler/typehint_check.php: SUCCEEDED
    Compiler/Inclusions/include2.php: SUCCEEDED
    Compiler/Inclusions/include3.php: SUCCEEDED
    Compiler/Inclusions/include6.php: SUCCEEDED
    Compiler/Inclusions/include_test.php: SUCCEEDED
    Compiler/Inclusions/script.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t01.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t02.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t03.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t04.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t05.php: SUCCEEDED
    Compiler/Inclusions/Cycles/t08.php: SUCCEEDED
    Compiler/PseudoConst/parent.php: SUCCEEDED
    Compiler/PseudoConst/parent2.php: SUCCEEDED
    Compiler/PseudoConst/self.php: SUCCEEDED
    Compiler/PseudoConst/t01.php: SUCCEEDED
    Compiler/PseudoConst/t02.php: SUCCEEDED
    Compiler/PseudoConst/t03.php: SUCCEEDED
    Compiler/PseudoConst/t04.php: SUCCEEDED
    Compiler/PseudoConst/t05.php: SUCCEEDED
    Compiler/PseudoConst/t06.php: SUCCEEDED
    Compiler/PseudoConst/t07.php: SUCCEEDED
    Compiler/PseudoConst/t08.php: SUCCEEDED
    Compiler/PseudoConst/t09.php: SUCCEEDED
    Compiler/PseudoConst/t10.php: SUCCEEDED
    Compiler/PseudoConst/t11.php: SUCCEEDED
    Compiler/PseudoConst/_class_.php: SUCCEEDED
    Compiler/PseudoConst/_function_.php: SUCCEEDED
    Compiler/References/array_argument.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(2)
        [1]=>
        int(3)
      }
    }
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    Compiler/References/array_local.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(2)
        [1]=>
        int(3)
      }
    }
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    Compiler/References/array_ret_argument.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(2)
        [1]=>
        int(3)
      }
    }
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    Compiler/References/array_ret_argument2.php: SUCCEEDED
    Compiler/References/deepcopy.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <br/><br/>globalobjects: array(2) {
      [0]=>
      int(1)
      [1]=>
      int(7)
    }
    <br/><br/>globalobjects: array(2) {
      [0]=>
      int(1)
      [1]=>
      &int(7)
    }
    Compiler/References/explicitclear.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Construyendo Y
    call foo12Destruyendo Y
    3object(X)#1 (2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      int(54)
    }
    array(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      string(10) "Init Value"
    }
    x: object(X)#1 (2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      int(1004)
    }
    <br/>checkpoint array(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      int(54)
    }
    Construyendo Y
    call foo123object(X)(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      &int(54)
    }
    array(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      &int(54)
    }
    x: object(X)(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      &int(1004)
    }
    <br/>checkpoint array(2) {
      ["inner_stuff"]=>
      array(1) {
        [0]=>
        int(23)
      }
      ["objects"]=>
      &int(1004)
    }
    Destruyendo Y
    Compiler/References/field_argument.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: int(7)
    <br/><br/>checkpoint array(1) {
      ["objects"]=>
      int(8)
    }
    x: int(7)
    <br/><br/>checkpoint array(1) {
      ["objects"]=>
      &int(7)
    }
    Compiler/References/field_local.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: object(X)#1 (1) {
      ["objects"]=>
      int(25)
    }
    <br/>checkpoint array(1) {
      ["objects"]=>
      int(7)
    }
    x: object(X)(1) {
      ["objects"]=>
      &int(25)
    }
    <br/>checkpoint array(1) {
      ["objects"]=>
      &int(25)
    }
    Compiler/References/ref_arrayitem.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      array(2) {
        [0]=>
        int(2)
        [1]=>
        int(3)
      }
    }
    x: array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    <br/><br/>checkpoint array(2) {
      [0]=>
      int(1)
      [1]=>
      &array(2) {
        [0]=>
        int(7)
        [1]=>
        int(3)
      }
    }
    Compiler/References/ref_reasign.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    object(X)#1 (2) {
      ["objects"]=>
      int(54)
      ["objects2"]=>
      &int(222)
    }
    array(2) {
      ["objects"]=>
      int(7)
      ["objects2"]=>
      &int(222)
    }
    x: object(X)#1 (2) {
      ["objects"]=>
      int(1004)
      ["objects2"]=>
      int(777)
    }
    <br/>checkpoint array(2) {
      ["objects"]=>
      int(54)
      ["objects2"]=>
      int(222)
    }
    object(X)(2) {
      ["objects"]=>
      &int(54)
      ["objects2"]=>
      &int(222)
    }
    array(2) {
      ["objects"]=>
      &int(54)
      ["objects2"]=>
      &int(222)
    }
    x: object(X)(2) {
      ["objects"]=>
      &int(1004)
      ["objects2"]=>
      &int(777)
    }
    <br/>checkpoint array(2) {
      ["objects"]=>
      &int(1004)
      ["objects2"]=>
      &int(777)
    }
    Compiler/Unreachable/t13.php: SUCCEEDED
    Compiler/Unset/calluserfunc.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Warning: call_user_func() expects parameter 1 to be a valid callback, function 'unset' not found or invalid function name in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\Unset\__input.txt on line 3
    int(10)
    Error: call_user_func(): Call to undefined function: 'unset' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Compiler\Unset\__input.txt at expression on line 3, column 1.
    Compiler/Unset/issetref2.php: SUCCEEDED
    Compiler/Unset/unsetglobal.php: SUCCEEDED
    Compiler/Unset/unsetglobal2.php: SUCCEEDED
    Compiler/Unset/unsetindirect.php: SUCCEEDED
    Compiler/Unset/unsetproblem.php: SUCCEEDED
    Compiler/Unset/unsetref.php: SUCCEEDED
    Compiler/Unset/unsetref2.php: SUCCEEDED
    Compiler/Unset/unsetref3.php: SUCCEEDED
    Compiler/Unset/__unset.php: SUCCEEDED
    DateTime/strftime.php: SUCCEEDED
    DateTime/strtotime1.php: SUCCEEDED
    DateTime/strtotime2.php: SUCCEEDED
    DateTime/strtotime3.php: SUCCEEDED
    DateTime/strtotime4.php: SUCCEEDED
    DateTime/strtotime5.php: SUCCEEDED
    DateTime/time.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    -189388800:-189475200 - 86400
    1964-01-01T00:00:00+0000
    1963-12-31T00:00:00+0000
    1964-06-06
    1963-06-06
    1964-01-06
    1133305200
    -189388800:-189475200 - 86400
    1964-01-01T00:00:00+0000
    1963-12-31T00:00:00+0000
    1964-06-06
    1963-06-06
    1964-01-06
    DateTime/timezones1.php: SUCCEEDED
    FileSystem/basename.php: SUCCEEDED
    FileSystem/basename2.php: SUCCEEDED
    FileSystem/chdir.php: SUCCEEDED
    FileSystem/csv.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    --- write ---
    72
    24
    44
    2
    6
    
    --- read ---
    "hello\n
    world";"aaa""bbb""ccc";"blah blah;";none;"tab\ttab";"space space"\n
    hh'ee;"ss\nsadasdasd s"\n
    """""""""""""""""""""";"""";;"""""";"xxx"""\n
    x\n
    "x\y"\n
    --- write ---
    72
    24
    44
    2
    6
    
    --- read ---
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    
    
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 52, column 3.
    FileSystem/date.php: SUCCEEDED
    FileSystem/date2.php: SUCCEEDED
    FileSystem/date3.php: SUCCEEDED
    FileSystem/date_unix.php: SUCCEEDED
    FileSystem/dirname.php: SUCCEEDED
    FileSystem/dirname2.php: SUCCEEDED
    FileSystem/disk_free_space.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    78 GB
    Drive C: 177 GB
    Drive D: 78 GB
    Drive E: 64 GB
    Drive F: 
    Warning: disk_free_space(): The device is not ready.
     in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 14
    false
    78 GB
    Drive C: 177 GB
    Drive D: 78 GB
    Drive E: 64 GB
    Drive F: false
    FileSystem/disk_total_space.php: SUCCEEDED
    FileSystem/fgets.php: SUCCEEDED
    FileSystem/file.php: SUCCEEDED
    FileSystem/filesize.php: SUCCEEDED
    FileSystem/file_exists.php: SUCCEEDED
    FileSystem/file_get_contents.php: SUCCEEDED
    FileSystem/fpassthru.php: SUCCEEDED
    FileSystem/fread.php: SUCCEEDED
    FileSystem/fread1.php: SUCCEEDED
    FileSystem/fread2.php: SUCCEEDED
    FileSystem/fseek.php: SUCCEEDED
    FileSystem/fsockopen.php: SUCCEEDED
    FileSystem/ftell.php: SUCCEEDED
    FileSystem/is_dir.php: SUCCEEDED
    FileSystem/is_executable.php: SUCCEEDED
    FileSystem/pathinfo.php: SUCCEEDED
    FileSystem/popen.php: SUCCEEDED
    FileSystem/readdir.php: SUCCEEDED
    FileSystem/readfile.php: SUCCEEDED
    FileSystem/readline.php: SUCCEEDED
    FileSystem/realpath.php: SUCCEEDED
    FileSystem/scandir.php: SUCCEEDED
    FileSystem/stat.php: SUCCEEDED
    FileSystem/stream_context_set_option.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <pre>[ARRAY
      [STRING: "http"] => [ARRAY
        [STRING: "method"] => [STRING: "GET"]
        [STRING: "header"] => [STRING: "Accept-language: en
    Cookie: foo=bar
    "]
        [STRING: "op1"] => [STRING: "DIRECT"]
        [STRING: "op2"] => [STRING: "VIA STREAM"]
      ]
      [STRING: "other"] => [ARRAY
        [STRING: "method"] => [STRING: "otherGET"]
        [STRING: "header"] => [STRING: "otherAccept-language: en
    otherCookie: foo=bar
    "]
      ]
      [STRING: "file"] => [ARRAY
        [STRING: "method"] => [STRING: "otherGET"]
        [STRING: "header"] => [STRING: "otherAccept-language: en
    otherCookie: foo=bar
    "]
      ]
      [STRING: "wrap"] => [ARRAY
        [STRING: "op1"] => [STRING: "DIRECT"]
        [STRING: "op2"] => [STRING: "VIA STREAM"]
      ]
    ]</pre>
    <pre>[ARRAY
      [STRING: "http"] => [ARRAY
        [STRING: "method"] => [STRING: "GET"]
        [STRING: "header"] => [STRING: "Accept-language: en
    Cookie: foo=bar
    "]
        [STRING: "op1"] => [STRING: "DIRECT"]
        [STRING: "op2"] => [STRING: "VIA STREAM"]
      ]
      [STRING: "other"] => [ARRAY
        [STRING: "method"] => [STRING: "otherGET"]
        [STRING: "header"] => [STRING: "otherAccept-language: en
    otherCookie: foo=bar
    "]
      ]
      [STRING: "file"] => [ARRAY
        [STRING: "method"] => [STRING: "otherGET"]
        [STRING: "header"] => [STRING: "otherAccept-language: en
    otherCookie: foo=bar
    "]
      ]
      [STRING: "wrap"] => [ARRAY
        [STRING: "op1"] => [STRING: "DIRECT"]
        [STRING: "op2"] => [STRING: "VIA STREAM"]
      ]
    ]</pre>
    Error: Script 'D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\fs.inc' inclusion failed. Script not found in the application's script libraries in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 3, column 1.
    FileSystem/stream_copy_to_stream.php: SUCCEEDED
    FileSystem/stream_copy_to_stream2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <p>Read <b>rb</b>, Write <b>wb</b>
    
    
    COPIED: <b>11806</b>
    <p>Read <b>rb</b>, Write <b>wt</b>
    
    
    COPIED: <b>11806</b>
    <p>Read <b>rb</b>, Write <b>wb</b>
    
    
    COPIED: <b>11806</b>
    <p>Read <b>rb</b>, Write <b>wt</b>
    
    
    COPIED: <b>11824</b>
    FileSystem/testinc.php: SUCCEEDED
    FileSystem/touch.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Warning: touch(): Utime failed: No such file or directory in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 8
    Sorry Could Not change modification time of touch.txt
    Warning: touch(): Utime failed: No such file or directory in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 14
    
    Warning: touch(): Utime failed: No such file or directory in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 16
    
    Warning: touch(): Utime failed: No such file or directory in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt on line 17
    <pre>[ARRAY
      [INT (0)] => [STRING: "February 23, 2011; [10:54:00] (10h) ctime test.txt (1298454840)"]
      [INT (1)] => [STRING: "February 19, 2011; [22:06:05] (22h) mtime test.txt (1298149565)"]
      [INT (2)] => [STRING: "February 23, 2011; [10:54:00] (10h) ctime touch.txt (1298454840)"]
      [INT (3)] => [STRING: "February 19, 2011; [22:06:05] (22h) mtime touch.txt (1298149565)"]
      [INT (4)] => [STRING: "February 23, 2011; [10:54:00] (10h) atime touch.txt (1298454840)"]
      [INT (5)] => [STRING: "February 19, 2011; [22:06:05] (22h) mtime summer.txt (1298149565)"]
      [INT (6)] => [STRING: "February 19, 2011; [22:06:05] (22h) mtime winter.txt (1298149565)"]
    ]</pre>
    Warning: touch(): Unable to access (D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\touch.txt): Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 8, column 5.
    Sorry Could Not change modification time of touch.txt
    Warning: touch(): Unable to access (D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\touch.txt): Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 14, column 1.
    
    Warning: touch(): Unable to access (D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\winter.txt): Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 16, column 1.
    
    Warning: touch(): Unable to access (D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\summer.txt): Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\__input.txt at expression on line 17, column 1.
    <pre>[ARRAY
      [INT (0)] => [STRING: "February 23, 2011; [11:54:00] (11h) ctime test.txt (1298458440)"]
      [INT (1)] => [STRING: "February 19, 2011; [23:06:05] (23h) mtime test.txt (1298153165)"]
      [INT (2)] => [STRING: "February 23, 2011; [11:54:00] (11h) ctime touch.txt (1298458440)"]
      [INT (3)] => [STRING: "February 19, 2011; [23:06:05] (23h) mtime touch.txt (1298153165)"]
      [INT (4)] => [STRING: "February 23, 2011; [11:54:00] (11h) atime touch.txt (1298458440)"]
      [INT (5)] => [STRING: "February 19, 2011; [23:06:05] (23h) mtime summer.txt (1298153165)"]
      [INT (6)] => [STRING: "February 19, 2011; [23:06:05] (23h) mtime winter.txt (1298153165)"]
    ]</pre>
    FileSystem/tar/tar_test.php: SUCCEEDED
    FileSystem/zip/zip.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    failed
    Error: Call to undefined function: 'zip_open' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\FileSystem\zip\__input.txt at expression on line 3, column 1.
    Math/abs.php: SUCCEEDED
    Math/atan2.php: SUCCEEDED
    Math/base_convert.php: SUCCEEDED
    Math/bindec.php: SUCCEEDED
    Math/ceil.php: SUCCEEDED
    Math/cos.php: SUCCEEDED
    Math/decbin.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <pre>
    [double: 2294967295]
    10001000110010100110101111111111
    [double: 4294967296]
    0
    [double: 8589934590]
    11111111111111111111111111111110
    [double: 8589934590]
    11111111111111111111111111111110
    [double: 8589934591]
    11111111111111111111111111111111
    [Int: 1000.000.000.000]
    11010100101001010001000000000000
    <hr>(-1, -5435, 2.14, 0, 26)
    11111111111111111111111111111111
    11111111111111111110101011000101
    10
    0
    11010 
    </pre>
    <pre>
    [???: 2294967295]
    10001000110010100110101111111111
    [???: 4294967296]
    0
    [???: 8589934590]
    11111111111111111111111111111110
    [???: 8589934590]
    11111111111111111111111111111110
    [???: 8589934591]
    11111111111111111111111111111111
    [Int: 1000.000.000.000]
    11010100101001010001000000000000
    <hr>(-1, -5435, 2.14, 0, 26)
    11111111111111111111111111111111
    11111111111111111110101011000101
    10
    0
    11010 
    </pre>
    Math/dechex.php: SUCCEEDED
    Math/decoct.php: SUCCEEDED
    Math/deg2rad.php: SUCCEEDED
    Math/exp.php: SUCCEEDED
    Math/floor.php: SUCCEEDED
    Math/fmod.php: SUCCEEDED
    Math/hexdec.php: SUCCEEDED
    Math/max.php: SUCCEEDED
    Math/min.php: SUCCEEDED
    Math/modulo_warn.php: SUCCEEDED
    Math/octdec.php: SUCCEEDED
    Math/pow.php: SUCCEEDED
    Math/rad2deg.php: SUCCEEDED
    Math/round.php: SUCCEEDED
    Math/sin.php: SUCCEEDED
    Math/sqrt.php: SUCCEEDED
    Math/tan.php: SUCCEEDED
    Math/uniqid.php: SUCCEEDED
    Misc/calendar_extension.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0
    0
    2375840
    0
    14
    32
    2
    There are 31 days in August 2003
    There are 28 days in February 2003
    There are 29 days in February 2004
    There are 31 days in December 2034
    1748326
    1748324
    374867
    0
    322f32322f35373633
    ebe120e7f9e5ef20e4faf9f1e2
    ebe120e7f9e5ef20e427faf9f1e2
    ebe120e7f9e5ef20e420e0ecf4e9ed20faf9f1e2
    ebe120e7f9e5ef20e42720e0ecf4e9ed20faf9f1e2
    eb22e120e7f9e5ef20e4faf9f122e2
    e12720e7f9e5ef20e4faf9f122e2
    e12720e7f9e5ef20e427faf9f122e2
    e12720e7f9e5ef20e420e0ecf4e9ed20faf9f122e2
    e12720e7f9e5ef20e42720e0ecf4e9ed20faf9f122e2
    Error: Call to undefined function: 'frenchtojd' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt at expression on line 2, column 1.
    Misc/fgetcsv%20%2327492.php: SUCCEEDED
    Misc/hash%20functions%20%2326667.php: SUCCEEDED
    Misc/ini_parse.php: SUCCEEDED
    Misc/json%20%2327838.php: SUCCEEDED
    Misc/lexer.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    T_INLINE_HTML
    311 '\r\n'
    T_OPEN_TAG
    368 '&lt;?'
    T_WHITESPACE
    371 ' \r\n\r\n'
    T_FINAL
    345 'final'
    T_WHITESPACE
    371 ' '
    T_CLASS
    353 'class'
    T_WHITESPACE
    371 ' '
    T_STRING
    307 'A'
    T_WHITESPACE
    371 ' \r\n'
        '{'
    T_WHITESPACE
    371 ' \r\n  '
    T_FUNCTION
    334 'function'
    T_WHITESPACE
    371 ' '
    T_STRING
    307 '__get'
        '('
    T_VARIABLE
    309 '$x'
        ')'
    T_WHITESPACE
    371 ' \r\n  '
        '{'
    T_WHITESPACE
    371 ' \r\n    '
    T_VARIABLE
    309 '$x'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_START_HEREDOC
    372 '&lt;&lt;&lt;EOOOOOOOOOOOOOOT\r\n'
    T_ENCAPSED_AND_WHITESPACE
    314 '         &lt;&lt;&lt;hello\r\nEOOOOOOOOOOOOOOt;\r\nEOOOOOOOOOOOOOT;\r\n'
    T_END_HEREDOC
    373 'EOOOOOOOOOOOOOOT'
        ';'
    T_WHITESPACE
    371 '\r\n\r\n    '
        '$'
    T_VARIABLE
    309 '$y'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_ARRAY
    360 'array'
    T_WHITESPACE
    371 ' '
        '('
    T_LNUMBER
    305 '1'
        ','
    T_DNUMBER
    306 '100000000000000'
        ','
    T_DNUMBER
    306 '999999999999999999999999999999999'
        ','
    T_STRING
    307 'true'
        ','
    T_STRING
    307 'false'
        ')'
        ';'
    T_WHITESPACE
    371 '\r\n    '
        '$'
        '{'
        '&quot;'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
    T_DOLLAR_OPEN_CURLY_BRACES
    374 '${'
        '$'
        '{'
    T_CONSTANT_ENCAPSED_STRING
    315 '&quot;xxx&quot;'
        '}'
        '}'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
        '&quot;'
        '}'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_LNUMBER
    305 '1'
        ';'
    T_WHITESPACE
    371 '\r\n    '
        '$'
        '{'
        '&quot;'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
    T_DOLLAR_OPEN_CURLY_BRACES
    374 '${'
        '$'
        '{'
        '&quot;'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
    T_VARIABLE
    309 '$x'
    T_ENCAPSED_AND_WHITESPACE
    314 '-&gt;$$'
    T_VARIABLE
    309 '$x0xx'
        '&quot;'
        '}'
        '}'
    T_ENCAPSED_AND_WHITESPACE
    314 'x'
        '&quot;'
        '}'
    T_WHITESPACE
    371 ' '
        '='
    T_WHITESPACE
    371 ' '
    T_LNUMBER
    305 '1'
        ';'
    T_WHITESPACE
    371 '\r\n  '
        '}'
    T_WHITESPACE
    371 ' \r\n'
        '}'
    T_WHITESPACE
    371 '\r\n\r\n'
    T_CLOSE_TAG
    370 '?&gt;'
    '
    '
        '&lt;?'
        ' 
    
    '
        'final'
        ' '
        'class'
        ' '
        'A'
        ' 
    '
        '{'
        ' 
      '
        'function'
        ' '
    259
    259 '
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt at expression on line 10, column 7.
    '
        '('
        '$x'
        ')'
        ' 
      '
        '{'
        ' 
        '
        '$x'
        ' '
        '='
        ' '
        '&lt;&lt;&lt;EOOOOOOOOOOOOOOT
    '
        '         &lt;&lt;&lt;'
        'hello'
        '
    '
        'EOOOOOOOOOOOOOOt;
    '
        'EOOOOOOOOOOOOOT;
    '
        'EOOOOOOOOOOOOOOT'
        ';'
        '
    
        '
        '$'
        '$y'
        ' '
        '='
        ' '
        'array'
        ' '
        '('
        '1'
        ','
        '100000000000000'
        ','
        '999999999999999999999999999999999'
        ','
    256
    256 '
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt at expression on line 10, column 7.
    '
        ','
    257
    257 '
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt at expression on line 10, column 7.
    '
        ')'
        ';'
        '
        '
        '$'
        '{'
        '&quot;'
        'x'
        '${'
        '$'
        '{'
    -29
    -29 '
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt at expression on line 10, column 7.
    '
        '}'
        '}'
        'x'
        '&quot;'
        '}'
        ' '
        '='
        ' '
        '1'
        ';'
        '
        '
        '$'
        '{'
        '&quot;'
        'x'
        '${'
        '$'
        '{'
        '&quot;'
        'x'
        '$x'
        '-&gt;'
        '$'
        '$'
        '$x0xx'
        '&quot;'
        '}'
        '}'
        'x'
        '&quot;'
        '}'
        ' '
        '='
        ' '
        '1'
        ';'
        '
      '
        '}'
        ' 
    '
        '}'
        '
    
    '
        '?&gt;'
    Misc/locale.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string(1) "C"
    double(1.54)
    double(Infinity)
    654564.145400
    Sat Saturday Apr April
    --------------
    string(19) "Danish_Denmark.1252"
    double(1.54)
    double(Infinity)
    654564,145400
    lo lordag apr april
    --------------
    string(25) "Czech_Czech Republic.1250"
    double(1.54)
    double(Infinity)
    654564,145400
    so sobota IV duben
    --------------
    string(1) "C"
    float(1.54)
    float(Infinity)
    654564.145400
    Sat Saturday Apr April
    --------------
    string(19) "Danish_Denmark.1252"
    float(1.54)
    float(Infinity)
    654564,145400
    lo lordag apr april
    --------------
    string(25) "Czech_Czech Republic.1250"
    float(1.54)
    float(Infinity)
    654564,145400
    so sobota 4 duben
    --------------
    Misc/output2.php: SUCCEEDED
    Misc/parse_url%20%2327377.php: SUCCEEDED
    Misc/parse_url_at_bug.php: SUCCEEDED
    Misc/stack_trace.php: FAILED
    Script hung upNo errorsSuccess
    Expected test outputReal script output
    Unhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---> System.IndexOutOfRangeException: Index was outside the bounds of the array.
       at PHP.Core.PhpStackFrame..ctor(ScriptContext context, StackFrame frame, FrameKinds kind)
       at PHP.Core.PhpStackTrace..ctor(ScriptContext context, StackTrace clrTrace)
       at PHP.Core.PhpStackTrace..ctor(ScriptContext context, Int32 skipFrames)
       at PHP.Library.Errors.Backtrace()
       at <stack_trace.inc>.<Script>.j(ScriptContext <context>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\stack_trace.inc:line 11
       at <stack_trace.inc>.<Script>.j(Object instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <stack_trace.inc>.<Script>.i(ScriptContext <context>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\stack_trace.inc:line 6
       at <stack_trace.inc>.<Script>.i(Object instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <^0>.<Global>.<?0>.h(ScriptContext <context>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt:line 14
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack, DTypeDesc caller)
       at PHP.Core.PhpCallback.InvokeInternal(Object[] args)
       at PHP.Core.PhpCallback.Invoke(Object[] args)
       at PHP.Library.PhpArrays.Map(PhpCallback map, PhpArray[] arrays)
       at <__input.txt>.<Script>.<Lambda>(ScriptContext <context>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt:line 4
       at <__input.txt>.<Script>.<Lambda>(Object instance, PhpStack stack)
       at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)
       at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)
       at <__input.txt>.<Script>.f(ScriptContext <context>) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt:line 6
       at <__input.txt>.<Script>.f(Object instance, PhpStack stack)
       at <__input.txt>.<Script>.<Main>(ScriptContext <context>, Dictionary`2 <locals>, DObject , DTypeDesc , Boolean ) in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Misc\__input.txt:line 18
       at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)
       at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)
       --- End of inner exception stack trace ---
       at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)
       at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)
       at <Global>.Run(String[] )
    
    Misc/str_getcsv%20%2326691.php: SUCCEEDED
    Misc/tokens.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    T_REQUIRE_ONCE = 258,
    T_REQUIRE = 259,
    T_EVAL = 260,
    T_INCLUDE_ONCE = 261,
    T_INCLUDE = 262,
    T_LOGICAL_OR = 263,
    T_LOGICAL_XOR = 264,
    T_LOGICAL_AND = 265,
    T_PRINT = 266,
    T_SR_EQUAL = 267,
    T_SL_EQUAL = 268,
    T_XOR_EQUAL = 269,
    T_OR_EQUAL = 270,
    T_AND_EQUAL = 271,
    T_MOD_EQUAL = 272,
    T_CONCAT_EQUAL = 273,
    T_DIV_EQUAL = 274,
    T_MUL_EQUAL = 275,
    T_MINUS_EQUAL = 276,
    T_PLUS_EQUAL = 277,
    T_BOOLEAN_OR = 278,
    T_BOOLEAN_AND = 279,
    T_IS_NOT_IDENTICAL = 280,
    T_IS_IDENTICAL = 281,
    T_IS_NOT_EQUAL = 282,
    T_IS_EQUAL = 283,
    T_IS_GREATER_OR_EQUAL = 284,
    T_IS_SMALLER_OR_EQUAL = 285,
    T_SR = 286,
    T_SL = 287,
    T_INSTANCEOF = 288,
    T_UNSET_CAST = 289,
    T_BOOL_CAST = 290,
    T_OBJECT_CAST = 291,
    T_ARRAY_CAST = 292,
    T_STRING_CAST = 293,
    T_DOUBLE_CAST = 294,
    T_INT_CAST = 295,
    T_DEC = 296,
    T_INC = 297,
    T_CLONE = 298,
    T_NEW = 299,
    T_EXIT = 300,
    T_IF = 301,
    T_ELSEIF = 302,
    T_ELSE = 303,
    T_ENDIF = 304,
    T_LNUMBER = 305,
    T_DNUMBER = 306,
    T_STRING = 307,
    T_STRING_VARNAME = 308,
    T_VARIABLE = 309,
    T_NUM_STRING = 310,
    T_INLINE_HTML = 311,
    T_CHARACTER = 312,
    T_BAD_CHARACTER = 313,
    T_ENCAPSED_AND_WHITESPACE = 314,
    T_CONSTANT_ENCAPSED_STRING = 315,
    T_ECHO = 316,
    T_DO = 317,
    T_WHILE = 318,
    T_ENDWHILE = 319,
    T_FOR = 320,
    T_ENDFOR = 321,
    T_FOREACH = 322,
    T_ENDFOREACH = 323,
    T_DECLARE = 324,
    T_ENDDECLARE = 325,
    T_AS = 326,
    T_SWITCH = 327,
    T_ENDSWITCH = 328,
    T_CASE = 329,
    T_DEFAULT = 330,
    T_BREAK = 331,
    T_CONTINUE = 332,
    T_GOTO = 333,
    T_FUNCTION = 334,
    T_CONST = 335,
    T_RETURN = 336,
    T_TRY = 337,
    T_CATCH = 338,
    T_THROW = 339,
    T_USE = 340,
    T_GLOBAL = 341,
    T_PUBLIC = 342,
    T_PROTECTED = 343,
    T_PRIVATE = 344,
    T_FINAL = 345,
    T_ABSTRACT = 346,
    T_STATIC = 347,
    T_VAR = 348,
    T_UNSET = 349,
    T_ISSET = 350,
    T_EMPTY = 351,
    T_HALT_COMPILER = 352,
    T_CLASS = 353,
    T_INTERFACE = 354,
    T_EXTENDS = 355,
    T_IMPLEMENTS = 356,
    T_OBJECT_OPERATOR = 357,
    T_DOUBLE_ARROW = 358,
    T_LIST = 359,
    T_ARRAY = 360,
    T_CLASS_C = 361,
    T_METHOD_C = 362,
    T_FUNC_C = 363,
    T_LINE = 364,
    T_FILE = 365,
    T_COMMENT = 366,
    T_DOC_COMMENT = 367,
    T_OPEN_TAG = 368,
    T_OPEN_TAG_WITH_ECHO = 369,
    T_CLOSE_TAG = 370,
    T_WHITESPACE = 371,
    T_START_HEREDOC = 372,
    T_END_HEREDOC = 373,
    T_DOLLAR_OPEN_CURLY_BRACES = 374,
    T_CURLY_OPEN = 375,
    T_PAAMAYIM_NEKUDOTAYIM = 376,
    T_DOUBLE_COLON = 376,
    T_NAMESPACE = 377,
    T_NS_C = 378,
    T_DIR = 379,
    T_NS_SEPARATOR = 380,
    T_INCLUDE = 129,
    T_INCLUDE_ONCE = 130,
    T_EVAL = 131,
    T_REQUIRE = 132,
    T_REQUIRE_ONCE = 133,
    T_LOGICAL_OR = 136,
    T_LOGICAL_XOR = 137,
    T_LOGICAL_AND = 138,
    T_PRINT = 139,
    T_PLUS_EQUAL = 140,
    T_MINUS_EQUAL = 141,
    T_MUL_EQUAL = 142,
    T_DIV_EQUAL = 143,
    T_CONCAT_EQUAL = 144,
    T_MOD_EQUAL = 145,
    T_AND_EQUAL = 146,
    T_OR_EQUAL = 147,
    T_XOR_EQUAL = 148,
    T_SL_EQUAL = 149,
    T_SR_EQUAL = 150,
    T_BOOLEAN_OR = 151,
    T_BOOLEAN_AND = 152,
    T_IS_EQUAL = 153,
    T_IS_NOT_EQUAL = 154,
    T_IS_IDENTICAL = 155,
    T_IS_NOT_IDENTICAL = 156,
    T_IS_SMALLER_OR_EQUAL = 157,
    T_IS_GREATER_OR_EQUAL = 158,
    T_SL = 159,
    T_SR = 160,
    T_INC = 161,
    T_DEC = 162,
    T_NEW = 164,
    T_INSTANCEOF = 165,
    T_CLONE = 167,
    T_LNUMBER = 168,
    T_DNUMBER = 170,
    T_STRING = 171,
    T_STRING_VARNAME = 172,
    T_VARIABLE = 173,
    T_NUM_STRING = 174,
    T_INLINE_HTML = 175,
    T_CHARACTER = 176,
    T_BAD_CHARACTER = 177,
    T_ENCAPSED_AND_WHITESPACE = 178,
    T_CONSTANT_ENCAPSED_STRING = 179,
    T_EXIT = 180,
    T_IF = 181,
    T_ELSEIF = 182,
    T_ELSE = 183,
    T_ENDIF = 184,
    T_ECHO = 185,
    T_DO = 186,
    T_WHILE = 187,
    T_ENDWHILE = 188,
    T_FOR = 189,
    T_ENDFOR = 190,
    T_FOREACH = 191,
    T_ENDFOREACH = 192,
    T_AS = 193,
    T_SWITCH = 194,
    T_ENDSWITCH = 195,
    T_CASE = 196,
    T_DEFAULT = 197,
    T_BREAK = 198,
    T_CONTINUE = 199,
    T_FUNCTION = 200,
    T_CONST = 201,
    T_RETURN = 202,
    T_GLOBAL = 203,
    T_STATIC = 204,
    T_VAR = 205,
    T_UNSET = 206,
    T_ISSET = 207,
    T_EMPTY = 208,
    T_CLASS = 209,
    T_EXTENDS = 210,
    T_OBJECT_OPERATOR = 211,
    T_DOUBLE_ARROW = 212,
    T_LIST = 213,
    T_ARRAY = 214,
    T_CLASS_C = 215,
    T_METHOD_C = 216,
    T_FUNC_C = 217,
    T_LINE = 218,
    T_FILE = 219,
    T_COMMENT = 221,
    T_DOC_COMMENT = 222,
    T_OPEN_TAG = 227,
    T_OPEN_TAG_WITH_ECHO = 228,
    T_CLOSE_TAG = 229,
    T_WHITESPACE = 230,
    T_START_HEREDOC = 231,
    T_END_HEREDOC = 232,
    T_DOLLAR_OPEN_CURLY_BRACES = 233,
    T_CURLY_OPEN = 234,
    T_DOUBLE_COLON = 235,
    T_PAAMAYIM_NEKUDOTAYIM = 235,
    T_TRY = 237,
    T_CATCH = 238,
    T_THROW = 239,
    T_INTERFACE = 240,
    T_IMPLEMENTS = 241,
    T_ABSTRACT = 242,
    T_FINAL = 243,
    T_PRIVATE = 244,
    T_PROTECTED = 245,
    T_PUBLIC = 246,
    T_BOOL_CAST = 286,
    T_INT_CAST = 289,
    T_DOUBLE_CAST = 295,
    T_STRING_CAST = 298,
    T_ARRAY_CAST = 301,
    T_OBJECT_CAST = 302,
    T_UNSET_CAST = 303,
    T_HALT_COMPILER = 351,
    Misc/user_error_handlers.php: SUCCEEDED
    Objects/accessing%20property%20line%20number%20%2326052.php: SUCCEEDED
    Objects/conditional1.php: SUCCEEDED
    Objects/conditional2.php: SUCCEEDED
    Objects/conditional_base_class.php: SUCCEEDED
    Objects/constant_test.php: SUCCEEDED
    Objects/evaled_parent.php: SUCCEEDED
    Objects/getter_setter_bug28444.php: SUCCEEDED
    Objects/instanceof.php: SUCCEEDED
    Objects/new_via_unknown_ctor.php: SUCCEEDED
    Objects/object_creation_test.php: SUCCEEDED
    Objects/overrides%20%231285.php: SUCCEEDED
    Objects/static_field_test.php: SUCCEEDED
    Objects/static_inheritence.php: SUCCEEDED
    Objects/static_method_test.php: SUCCEEDED
    Objects/static_object_vars.php: SUCCEEDED
    Objects/sys_class_const.php: SUCCEEDED
    Objects/this2.php: SUCCEEDED
    RegEx/backreferences.php: SUCCEEDED
    RegEx/dolar_escape.php: SUCCEEDED
    RegEx/ereg.php: SUCCEEDED
    RegEx/namedbackref.php: SUCCEEDED
    RegEx/namedgroups.php: SUCCEEDED
    RegEx/preg_match_unmatched_groups.php: SUCCEEDED
    RegEx/preg_replace_eval.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    ab"01300 as"00da sd"0asdsa das asd 11asd a1sd a
    ab"01300 as"00da sd"0(aasdasdkjask,$a,\,\l,a,s,d,a,s,d,k,j,a,s,${120})(ldjaklsdjalk,$l,\,\l,d,j,a,k,l,s,d,j,a,l,${120})djdsa das asd 11asd a1sd a
    ab"01300 as"00da sd"0asdsa das asd 11asd a1sd a
    ab"01300 as"00da sd"0(aasdasdkjask,$a,\,\l,a,s,d,a,s,d,k,j,,,${120})(ldjaklsdjalk,$l,\,\l,d,j,a,k,l,s,d,j,,,${120})djdsa das asd 11asd a1sd a
    RegEx/regexp-sql.php: SUCCEEDED
    RegEx/regexp_smiles.php: SUCCEEDED
    RegEx/Perl/cache.php: SUCCEEDED
    RegEx/Perl/grep1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      [3] => string(3) "1.5"
      [6] => string(5) "58.54"
    }
    Notice: preg_grep(): Array to string conversion in D:\Documents\Projects\Phalanger\Main\Testing\Tests\RegEx\Perl\__input.txt at expression on line 5, column 1.
    array(2) {
      [3]=>
      string(3) "1.5"
      [6]=>
      string(5) "58.54"
    }
    RegEx/Perl/grep2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Food  array
    (
      [0] => apple
      [1] => banana
      [2] => squid
      [3] => pear
    )
    Fruit array
    (
      [0] => apple
      [1] => banana
      [3] => pear
    )
    Food  Array
    (
        [0] => apple
        [1] => banana
        [2] => squid
        [3] => pear
    )
    Fruit Array
    (
        [0] => apple
        [1] => banana
        [3] => pear
    )
    RegEx/Perl/match1.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array [empty]
    array
    (
      [0] => array
      (
        [0] => def
        [1] => 3
      )
    )
    Array
    (
    )
    Array
    (
        [0] => Array
        (
            [0] => def
            [1] => 3
        )
    
    )
    RegEx/Perl/match10.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    (
      [0] => 1231
      [1] => 1
      [2] => 23
      [3] => 1
    )
    Array
    (
        [0] => 1231
        [1] => 1
        [2] => 23
        [3] => 1
    )
    RegEx/Perl/match2.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    (
      [0] => array
      (
        [0] => def
        [1] => 0
      )
    )
    Array
    (
        [0] => Array
        (
            [0] => def
            [1] => 0
        )
    
    )
    RegEx/Perl/match3.php: SUCCEEDED
    RegEx/Perl/match4.php: SUCCEEDED
    RegEx/Perl/match5.php: SUCCEEDED
    RegEx/Perl/match6.php: SUCCEEDED
    RegEx/Perl/match7.php: SUCCEEDED
    RegEx/Perl/match8.php: SUCCEEDED
    RegEx/Perl/match9.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    (
      [0] => 209.6.145.47 - - [22/Nov/2003:19:02:30 -0500] "GET /dir/doc.htm HTTP/1.0" 200 6776 "http://search.yahoo.com/search?p=key+words=UTF-8" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)"
      [1] => 209.6.145.47
      [2] => -
      [3] => -
      [4] => 22/Nov/2003:19:02:30 -0500
      [5] => GET
      [6] => /dir/doc.htm
      [7] => HTTP
      [8] => 1.0
      [9] => 200
      [10] => 6776
      [11] => "http://search.yahoo.com/search?p=key+words=UTF-8"
      [12] => "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)"
    )
    Array
    (
        [0] => 209.6.145.47 - - [22/Nov/2003:19:02:30 -0500] "GET /dir/doc.htm HTTP/1.0" 200 6776 "http://search.yahoo.com/search?p=key+words=UTF-8" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)"
        [1] => 209.6.145.47
        [2] => -
        [3] => -
        [4] => 22/Nov/2003:19:02:30 -0500
        [5] => GET
        [6] => /dir/doc.htm
        [7] => HTTP
        [8] => 1.0
        [9] => 200
        [10] => 6776
        [11] => "http://search.yahoo.com/search?p=key+words=UTF-8"
        [12] => "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)"
    )
    RegEx/Perl/match_all1.php: SUCCEEDED
    RegEx/Perl/match_all2.php: SUCCEEDED
    RegEx/Perl/match_all3.php: SUCCEEDED
    RegEx/Perl/match_all4.php: SUCCEEDED
    RegEx/Perl/match_dollar.php: SUCCEEDED
    RegEx/Perl/overflow.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string("kfkaj +j k45´┐Ż´┐Ż´┐Ż´┐Ż´┐Ż3#$%^&kjakfjkaj|kfj")
    string("kfkaj +j k45�����3#$%^&kjakfjkaj|kfj")
    RegEx/Perl/quote1.php: SUCCEEDED
    RegEx/Perl/quote2.php: SUCCEEDED
    RegEx/Perl/quote3.php: SUCCEEDED
    RegEx/Perl/replace1.php: SUCCEEDED
    RegEx/Perl/replace2.php: SUCCEEDED
    RegEx/Perl/replace3.php: SUCCEEDED
    RegEx/Perl/replace4.php: SUCCEEDED
    RegEx/Perl/replace5.php: SUCCEEDED
    RegEx/Perl/replace6.php: SUCCEEDED
    RegEx/Perl/replace7.php: SUCCEEDED
    RegEx/Perl/replace8.php: SUCCEEDED
    RegEx/Perl/replace9.php: SUCCEEDED
    RegEx/Perl/replace_callback1.php: SUCCEEDED
    RegEx/Perl/replace_callback2.php: SUCCEEDED
    RegEx/Perl/split1.php: SUCCEEDED
    RegEx/Perl/split2.php: SUCCEEDED
    RegEx/Perl/split3.php: SUCCEEDED
    RegEx/Perl/split4.php: SUCCEEDED
    RegEx/Perl/split5.php: SUCCEEDED
    RegEx/Perl/split6.php: SUCCEEDED
    RegEx/Perl/ungreedy.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    aaa
    a
    aaa
    
    a
    aa
    aaa
    aa
    aaa
    aaa
    a
    aaa
    a
    a
    aa
    aaa
    aa
    aaa
    RegEx/Perl/unsuccessful-preg_match_all.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    0
    4
    1
    4
    0
    4
    1
    7
    RegEx/Perl/withoutdelimiters.php: SUCCEEDED
    SPL/ArrayAccess_offsetExists.php: SUCCEEDED
    SPL/Autoload_ctor.php: SUCCEEDED
    SPL/Autoload_extends.php: SUCCEEDED
    SPL/exceptions.php: SUCCEEDED
    Strings/addcslashes.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    \f\o\o\[ \]
    Issues a Warning:
    // echo addcslashes("zoo['.']", 'z..A');
    // output:  \zoo['\.']
    Warning: addcslashes(): String containg Unicode characters greater than '\u0800' are not supported in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 4, column 1.
    
    Issues a Warning:
    // echo addcslashes("zoo['.']", 'z..A');
    // output:  \zoo['\.']
    Strings/addslashes.php: SUCCEEDED
    Strings/chunk_split.php: SUCCEEDED
    Strings/concat.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string(2) "ab"
    string(2) "ab"
    string(2) "ab"
    string(2) "ab"
    string(2) "ab"
    string(2) "aB"
    string(2) "Ab"
    string(2) "AB"
    string(2) "ab"
    string(2) "a1"
    string(2) "1b"
    string(2) "11"
    string(2) "ab"
    string(2) "aB"
    string(2) "Ab"
    string[binary](2) "\x41\x42"
    string(2) "ab"
    string(2) "ab"
    string(2) "ab"
    string(2) "ab"
    string(2) "ab"
    string(2) "aB"
    string(2) "Ab"
    string(2) "AB"
    string(2) "ab"
    string(2) "a1"
    string(2) "1b"
    string(2) "11"
    string(2) "ab"
    string[binary](2) "aB"
    string[binary](2) "Ab"
    string[binary](2) "AB"
    Strings/count_chars.php: SUCCEEDED
    Strings/crc32.php: SUCCEEDED
    Strings/crypt.php: SUCCEEDED
    Strings/crypt2.php: SUCCEEDED
    Strings/echo.php: SUCCEEDED
    Strings/explode.php: SUCCEEDED
    Strings/get_html_translation_table.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    <hr>[&] => &amp;
    [>] => &gt;
    [<] => &lt;
    ["] => &quot;
    <hr>Hallo &amp; &lt;Frau&gt; &amp; Kr&iuml;&iquest;&frac12;mer
    <hr>[&] => &amp;
    [>] => &gt;
    [<] => &lt;
    ["] => &quot;
    <hr>Hallo &amp; &lt;Frau&gt; &amp; Kr�mer
    Strings/mb_strlen.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Fatal error: Call to undefined function mb_strlen() in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 4
    Error: Call to undefined function: 'mb_strlen' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 4, column 1.
    Strings/nl2br.php: SUCCEEDED
    Strings/pack.php: SUCCEEDED
    Strings/pos.php: SUCCEEDED
    Strings/runtime-quotes.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    fread = (x''y"z)
    fgets = (x''y"z)
    file[0] = (x''y"z)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    
    Warning: fopen(runtime-quotes2.txt): failed to open stream: Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 33
    
    Warning: fwrite() expects parameter 1 to be resource, boolean given in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 35
    fwrite = ()
    
    Warning: fputs() expects parameter 1 to be resource, boolean given in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 38
    fputs = ()
    
    Warning: fclose() expects parameter 1 to be resource, boolean given in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt on line 41
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (x'y"z)
    fgets = (x'y"z)
    file[0] = (x'y"z)
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (a\'b"\\ca\)
    fgets = (a\'b"\\ca\'b"\\c)
    file[0] = (a\'b"\\ca\'b"\\c)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    e'e
    e''e
    e'e
    e'e
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    e'e
    e'e
    e'e
    e'e
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    fread = (x''y"z)
    fgets = (x''y"z)
    file[0] = (x''y"z)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    
    Warning: fopen(): Unable to access (D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\runtime-quotes2.txt): Permission denied in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 33, column 3.
    
    Warning: Cannot convert boolean to resource implicitly in a call to function fwrite() in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 35, column 3.
    fwrite = ()
    
    Warning: Cannot convert boolean to resource implicitly in a call to function fputs() in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 38, column 3.
    fputs = ()
    
    Warning: Cannot convert boolean to resource implicitly in a call to function fclose() in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Strings\__input.txt at expression on line 41, column 3.
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (x'y"z)
    fgets = (x'y"z)
    file[0] = (x'y"z)
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    fread = (a\'b"\\ca\)
    fgets = (a\'b"\\ca\'b"\\c)
    file[0] = (a\'b"\\ca\'b"\\c)
    magic_quotes_runtime = 1, magic_quotes_sybase = 1
    e'e
    e''e
    e'e
    e'e
    magic_quotes_runtime = 0, magic_quotes_sybase = 0
    e'e
    e'e
    e'e
    e'e
    Strings/sprintf.php: SUCCEEDED
    Strings/sprintf2.php: SUCCEEDED
    Strings/strtr.php: SUCCEEDED
    Strings/str_ireplace.php: SUCCEEDED
    Strings/str_replace.php: SUCCEEDED
    Strings/str_word_count.php: SUCCEEDED
    Strings/substr_operations.php: SUCCEEDED
    Strings/wordwrap.php: SUCCEEDED
    Variables/advanced_serialize.php: SUCCEEDED
    Variables/arguments.php: SUCCEEDED
    Variables/bitwise.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "00"
    string(2) "31"
    string(2) "31"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    0
    0
    0
    5
    0
    5
    40
    5
    45
    string(48) "000000000000000000000000000000000000000000000000"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(14) "31323331323331"
    string(2) "30"
    string(14) "31323331323331"
    string(16) "3635343635343536"
    string(2) "30"
    string(16) "3635343635343536"
    string(14) "337a5e8be43d7a"
    string(14) "00002130120201"
    string(48) "337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42"
    string(16) "347d598ce33a7e77"
    string(16) "0200243214040100"
    string(48) "367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42"
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "08"
    string(2) "31"
    string(4) "3932"
    string(2) "00"
    string(2) "31"
    string(2) "31"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    string(0) ""
    string(0) ""
    string(0) ""
    string(0) ""
    string(10) "7878787878"
    0
    -9223372036854775808
    -9223372036854775808
    -9223372036854775803
    0
    -9223372036854775803
    40
    5
    45
    string(48) "000000000000000000000000000000000000000000000000"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(48) "02486dbad60e4b412fafef0548cc894270cbaf74177c2e42"
    string(14) "31323331323331"
    string(2) "30"
    string(14) "31323331323331"
    string(16) "3635343635343536"
    string(2) "30"
    string(16) "3635343635343536"
    string(14) "337a5e8be43d7a"
    string(14) "00002130120201"
    string(48) "337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42"
    string(16) "347d598ce33a7e77"
    string(16) "0200243214040100"
    string(48) "367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42"
    Variables/comparisons.php: SUCCEEDED
    Variables/constant.php: SUCCEEDED
    Variables/extract.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    EXTR_PREFIX_ALL
    integer(4)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
      'prefix_non_existent' => integer(1)
    }
    <hr>EXTR_PREFIX_INVALID
    integer(5)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => integer(2)
      'non_existent' => integer(1)
      'prefix_' => integer(1)
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => 'hello'
    }
    <hr>EXTR_PREFIX_SAME
    integer(3)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'non_existent' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>EXTR_PREFIX_IF_EXISTS
    integer(3)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>
    EXTR_PREFIX_ALL
    integer(4)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
      'prefix_non_existent' => integer(1)
    }
    <hr>EXTR_PREFIX_INVALID
    integer(2)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_ad' => integer(2)
      'prefix_non_existent' => integer(1)
    }
    <hr>EXTR_PREFIX_SAME
    integer(4)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'non_existent' => integer(1)
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>EXTR_PREFIX_IF_EXISTS
    integer(3)
    array
    {
      '' => 'hello'
      '0' => NULL
      '000g' => 'hello'
      'a d' => 'hello'
      'ad' => NULL
      'prefix_0' => integer(1)
      'prefix_000g' => integer(1)
      'prefix_ad' => integer(2)
    }
    <hr>
    Variables/func_get_args.php: SUCCEEDED
    Variables/is_number.php: SUCCEEDED
    Variables/serialize.php: SUCCEEDED
    Variables/unserialize_objects.php: SUCCEEDED
    Variables/var_dumping.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Array
    (
        [0] => 1
        [1] => 
        [2] => 1
        [3] => 1.2
        [4] => 
        [5] => asdas
        [6] => Array
            (
                [0] => 1
            )
    
        [7] => stdClass Object
            (
            )
    
        [8] => Resource id #1
    )
    array(9) {
      [0]=>
      bool(true)
      [1]=>
      bool(false)
      [2]=>
      int(1)
      [3]=>
      float(1.2)
      [4]=>
      NULL
      [5]=>
      string(5) "asdas"
      [6]=>
      array(1) {
        [0]=>
        int(1)
      }
      [7]=>
      object(stdClass)#1 (0) {
      }
      [8]=>
      resource(1) of type (stream)
    }
    array (
      0 => true,
      1 => false,
      2 => 1,
      3 => 1.2,
      4 => NULL,
      5 => 'asdas',
      6 => 
      array (
        0 => 1,
      ),
      7 => 
      stdClass::__set_state(array(
      )),
      8 => NULL,
    )
    Array
    (
        [0] => 1
        [1] => 
        [2] => 1
        [3] => 1.2
        [4] => 
        [5] => asdas
        [6] => Array
        (
            [0] => 1
        )
    
        [7] => stdClass Object
        (
        )
    
        [8] => resource id #4
    
    )
    array(9) {
      [0]=>
      bool(true)
      [1]=>
      bool(false)
      [2]=>
      int(1)
      [3]=>
      float(1.2)
      [4]=>
      NULL
      [5]=>
      string(5) "asdas"
      [6]=>
      array(1) {
        [0]=>
        int(1)
      }
      [7]=>
      object(stdClass)(0) {
      }
      [8]=>
      resource(4) of type (stream)
    }
    array
    (
      '0' => true,
      '1' => false,
      '2' => 1,
      '3' => 1.2,
      '4' => NULL,
      '5' => 'asdas',
      '6' => array
      (
        '0' => 1
      ),
      '7' => class stdClass
      {
    
      },
      '8' => NULL
    )
    Xml/005.php: SUCCEEDED
    Xml/006.php: SUCCEEDED
    Xml/007.php: SUCCEEDED
    Xml/008.php: SUCCEEDED
    Xml/009.php: SUCCEEDED
    Xml/011.php: SUCCEEDED
    Xml/013.php: SUCCEEDED
    Xml/017.php: SUCCEEDED
    Xml/018.php: SUCCEEDED
    Xml/019.php: SUCCEEDED
    Xml/020.php: SUCCEEDED
    Xml/021.php: SUCCEEDED
    Xml/025.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
      'foo' => 'foobar'
    }
    array
    {
      'html' => 'http://www.w3.org/1999/xhtml'
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
    }
    array
    {
      'html' => 'http://www.w3.org/1999/xhtml'
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'foo' => 'foobar'
      'baz' => 'foobarbaz'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
    }
    array
    {
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
      'baz' => 'foobarbaz'
      'foo' => 'foobar'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      'xhtml' => 'http://www.w3.org/TR/REC-html40'
      'html' => 'http://www.w3.org/1999/xhtml'
      'baz' => 'foobarbaz'
      'foo' => 'foobar'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
      '' => 'http://www.w3.org/1999/xhtml'
    }
    array
    {
    }
    array
    {
    }
    Xml/026.php: SUCCEEDED
    Xml/027.php: SUCCEEDED
    Xml/028.php: SUCCEEDED
    Xml/029.php: SUCCEEDED
    Xml/030.php: SUCCEEDED
    Xml/032.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    FALSE
    FALSE
    FALSE
    TRUE
    TRUE
    TRUE
    Xml/033.php: SUCCEEDED
    Xml/bug26384.php: SUCCEEDED
    Xml/bug28721.php: SUCCEEDED
    Xml/bug28817.php: SUCCEEDED
    Xml/bug32615.php: SUCCEEDED
    Xml/bug33853.php: SUCCEEDED
    Xml/bug34276.php: SUCCEEDED
    Xml/bug35342.php: SUCCEEDED
    Xml/bug36756.php: SUCCEEDED
    Xml/bug37277.php: SUCCEEDED
    Xml/dom002.php: SUCCEEDED
    Xml/dom003.php: SUCCEEDED
    Xml/dom006.php: SUCCEEDED
    Xml/dom007.php: SUCCEEDED
    Xml/dom_set_attr_node.php: SUCCEEDED
    Xml/xmlhandler.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test begins
    <br/>
    <br/>test begins
    <br/>empty begins
    <br/>empty ends
    <br/>nocontent begins
    <br/>nocontent ends
    <br/>content begins
    <br/>empty begins
    <br/>empty ends
    <br/>empty begins
    <br/>empty ends
    <br/>content ends
    <br/>empty begins
    <br/>empty ends
    <br/>empty begins
    <br/>empty ends
    <br/>test ends
    <br/>Test ends
    <br/>
    <br/>
    Test begins
    <br/>
    <br/>
    Error: Call to undefined function: 'xml_parser_create' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Xml\__input.txt at expression on line 18, column 3.
    Xml/xslt001.php: SUCCEEDED
    Xml/xslt002.php: SUCCEEDED
    Xml/xslt003.php: SUCCEEDED
    Xml/xslt004.php: SUCCEEDED
    Xml/xslt005.php: SUCCEEDED
    Xml/xslt006.php: SUCCEEDED
    Xml/xslt007.php: SUCCEEDED
    Xml/xslt010.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test 10: EXSLT Support
      
      
      Test Date : 0001-12-31Z
        year                 : 1
        leap-year            : false
        month-in-year        : 12
        month-name           : December
        month-abbreviation   : Dec
        week-in-year         : 1
        day-in-year          : 365
        day-in-month         : 31
        day-of-week-in-month : 5
        day-in-week          : 2
        day-name             : Monday
        day-abbreviation     : Mon
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : 3000-01-31
        year                 : 3000
        leap-year            : false
        month-in-year        : 1
        month-name           : January
        month-abbreviation   : Jan
        week-in-year         : 5
        day-in-year          : 31
        day-in-month         : 31
        day-of-week-in-month : 5
        day-in-week          : 6
        day-name             : Friday
        day-abbreviation     : Fri
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : 2000-02-29
        year                 : 2000
        leap-year            : true
        month-in-year        : 2
        month-name           : February
        month-abbreviation   : Feb
        week-in-year         : 9
        day-in-year          : 60
        day-in-month         : 29
        day-of-week-in-month : 5
        day-in-week          : 3
        day-name             : Tuesday
        day-abbreviation     : Tue
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : 9990001-12-31Z
        year                 : 9990001
        leap-year            : false
        month-in-year        : 12
        month-name           : December
        month-abbreviation   : Dec
        week-in-year         : 1
        day-in-year          : 365
        day-in-month         : 31
        day-of-week-in-month : 5
        day-in-week          : 2
        day-name             : Monday
        day-abbreviation     : Mon
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
      
      Test Date : -0004-02-29
        year                 : -4
        leap-year            : true
        month-in-year        : 2
        month-name           : February
        month-abbreviation   : Feb
        week-in-year         : 9
        day-in-year          : 60
        day-in-month         : 29
        day-of-week-in-month : 5
        day-in-week          : 1
        day-name             : Sunday
        day-abbreviation     : Sun
        time                 : 
        hour-in-day          : NaN
        minute-in-hour       : NaN
        second-in-minute     : NaN
    Test 10: EXSLT Support
    Warning: Cannot find a script or an extension object associated with namespace 'http://exslt.org/dates-and-times'. in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Xml\__input.txt at expression on line 14, column 3.
    
    Warning: Illegal string offset '-1' in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Phalanger.inc at expression on line 7, column 6.
    Xml/xslt011.php: FAILED
    Unexpected outputNo errorsSuccess
    Expected test outputReal script output
    Test 11: php:function Support
    
    Warning: XSLTProcessor::transformToXml(): A PHP Object cannot be converted to a XPath-string in D:\Documents\Projects\Phalanger\Main\Testing\Tests\Xml\__input.txt on line 18
    <?xml version="1.0"?>
    foobar - secondArg
    foobar - 
    this is from an external DomDocument
    from the Input Document
    static
    Test 11: php:function Support
    <?xml version="1.0" encoding="utf-8"?>foobar - secondArg
    foobar - 
    this is from an external DomDocument
    from the Input Document
    static
    not a DomNode object
    Xml/xslt012.php: SUCCEEDED
    ================================================ FILE: Testing/Tests/Variables/Phalanger.inc ================================================ ================================================ FILE: Testing/Tests/Variables/advanced_serialize.php ================================================ [expect php] [file] = 5.1 where Serializable was introduced class C { var $a = "a"; var $b = "b"; function __sleep() { echo "__sleep\n"; return array("b", "are_you_kidding"); } function __wakeup() { echo "__wakeup\n"; } } class D implements Serializable { function serialize() { echo "serialize\n"; return "coo-koo"; } function unserialize($x) { echo "unserialize\n"; echo "$x\n"; } } $x = new C; $x->a = "new_a"; $x->b = "new_b"; $y = serialize($x); echo "$y\n"; $x = unserialize($y); echo "$x->a\n"; echo "$x->b\n"; $x = new D; $y = serialize($x); $x = unserialize($y); ?> ================================================ FILE: Testing/Tests/Variables/arguments.php ================================================ [expect] Number of arguments: 6
    Second argument is: 2
    Argument 0 is: 1
    Argument 1 is: 2
    Argument 2 is: 3
    Argument 3 is: 4
    Argument 4 is: 5
    Argument 5 is: 6
    [file] \n"; if ($numargs >= 2) { echo "Second argument is: " . func_get_arg (1) . "
    \n"; } $arg_list = func_get_args(); for ($i = 0; $i < $numargs; $i++) echo "Argument $i is: " . $arg_list[$i] . "
    \n"; } A(1,2,3,4,5,6); ?> ================================================ FILE: Testing/Tests/Variables/assign_copy.php ================================================ [expect php] [file] 'x'); } "); function foo() { $a = $b = bar(); //$b = bar(); //$a = $b; $a[1] = 'y'; var_dump($a != $b); } foo(); ?> ================================================ FILE: Testing/Tests/Variables/bitwise.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Variables/class_constants.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Variables/comparisons.php ================================================ [expect php] [file] $y) ? " > ":""; echo $str[$j]; echo "\n"; } } ?> ================================================ FILE: Testing/Tests/Variables/constant.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Variables/constants_defined.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Variables/extract refs.php ================================================ [expect php] [file] 123)); } $x = 0; foo($x); echo $x; ?> ================================================ FILE: Testing/Tests/Variables/extract.php ================================================ [expect php] [file] 1,"ad" => 1,"0" => 1,"ad" => 2,"non_existent" => 1, "" => 1,"000g" => 1); echo "EXTR_PREFIX_ALL\n"; extract_test($a,EXTR_PREFIX_ALL,"prefix"); echo "
    "; echo "EXTR_PREFIX_INVALID\n"; extract_test($a,EXTR_PREFIX_INVALID,"prefix"); echo "
    "; echo "EXTR_PREFIX_SAME\n"; extract_test($a,EXTR_PREFIX_SAME,"prefix"); echo "
    "; echo "EXTR_PREFIX_IF_EXISTS\n"; extract_test($a,EXTR_PREFIX_IF_EXISTS,"prefix"); echo "
    "; ?> ================================================ FILE: Testing/Tests/Variables/func_get_args.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Variables/is_number.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Variables/serialize.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Variables/serialize_double.php ================================================ [expect php] [file] pub = "pub value"; $this->prot = "prot value"; $this->priv = "priv value"; } function PrintMe() { echo "\$pub = ".$this->pub."
    "; echo "\$prot = ".$this->prot."
    "; echo "\$priv = ".$this->priv."
    "; } } class MyDerivedClass extends MyClass { public $pub_new; protected $prot_new; private $priv_new; function MyDerivedClass() { parent::__construct(); $this->pub_new = "pub_new value"; $this->prot_new = "prot_new value"; $this->priv_new = "priv_new value"; } function PrintMe() { parent::PrintMe(); echo "\$pub_new = ".$this->pub_new."
    "; echo "\$prot_new = ".$this->prot_new."
    "; echo "\$priv_new = ".$this->priv_new."
    "; } } $a = new MyDerivedClass(); $a->PrintMe(); $data = serialize($a); echo "
    "; $b = unserialize($data); $b->PrintMe(); ?> ================================================ FILE: Testing/Tests/Variables/var_dumping.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/Xml/005.php ================================================ [expect php] [file] Plain text. Here we have some text data. And here some more. Wow once again. EOF ); __var_dump(trim($sxe->elem1->elem2)); __var_dump(trim($sxe->elem1->elem2->elem3)); __var_dump(trim($sxe->elem1->elem2->elem3->elem4)); ?> ================================================ FILE: Testing/Tests/Xml/006.php ================================================ [expect php] [file] Plain text. Bla bla 1. Here we have some text data. And here some more. Wow once again. Bla bla 2. Foo Bar EOF ); require('Phalanger.inc'); foreach($sxe as $name => $data) { __var_dump($name); __var_dump(trim($data)); } echo "===CLONE===\n"; foreach(clone $sxe as $name => $data) { __var_dump($name); __var_dump(trim($data)); } echo "===ELEMENT===\n"; foreach($sxe->elem11 as $name => $data) { __var_dump($name); __var_dump(trim($data)); } ?> ================================================ FILE: Testing/Tests/Xml/007.php ================================================ [expect php] [file] EOF; $sxe = simplexml_load_string($xml); echo "===Property===\n"; __var_dump($sxe->elem1); echo "===Array===\n"; __var_dump($sxe['id']); __var_dump($sxe->elem1['attr1']); echo "===Set===\n"; $sxe['id'] = "Changed1"; __var_dump($sxe['id']); $sxe->elem1['attr1'] = 12; __var_dump($sxe->elem1['attr1']); echo "===Unset===\n"; unset($sxe['id']); __var_dump($sxe['id']); unset($sxe->elem1['attr1']); __var_dump($sxe->elem1['attr1']); echo "===Misc.===\n"; $a = 4; __var_dump($a); $dummy = $sxe->elem1[$a]; __var_dump($a); ?> ================================================ FILE: Testing/Tests/Xml/008.php ================================================ [expect php] [file] EOF; $sxe = simplexml_load_string($xml); __var_dump($sxe->xpath("elem1/elem2/elem3/elem4")); __var_dump(@$sxe->xpath("***")); ?> ================================================ FILE: Testing/Tests/Xml/009.php ================================================ [expect php] [file] Plain text. Bla bla 1. Here we have some text data. And here some more. Wow once again. Bla bla 2. EOF ); foreach($sxe->children() as $name=>$val) { __var_dump($name); __var_dump(get_class($val)); __var_dump(trim($val)); } ?> ================================================ FILE: Testing/Tests/Xml/011.php ================================================ [expect php] [file] bar baz1 baz2 EOF; $sxe = simplexml_load_string($xml); echo "===BAR===\n"; echo $sxe->bar; echo "\n"; echo "===BAZ===\n"; echo $sxe->baz; echo "\n"; echo "===BAZ0===\n"; echo $sxe->baz[0]; echo "\n"; echo "===BAZ1===\n"; print $sxe->baz[1]; echo "\n"; ?> ================================================ FILE: Testing/Tests/Xml/013.php ================================================ [expect php] [file] barbar EOF; $sxe = simplexml_load_string($xml); __var_dump((string)$sxe); ?> ================================================ FILE: Testing/Tests/Xml/017.php ================================================ [expect php] [file] EOF; $xml1 =<< EOF; function print_xml($xml) { foreach($xml->children() as $person) { echo "person: ".$person['name']."\n"; foreach($person->children() as $child) { echo " child: ".$child['name']."\n"; } } } function print_xml2($xml) { $persons = 2; for ($i=0;$i<$persons;$i++) { echo "person: ".$xml->person[$i]['name']."\n"; $children = 2; for ($j=0;$j<$children;$j++) { echo " child: ".$xml->person[$i]->child[$j]['name']."\n"; } } } error_reporting(E_ALL & ~E_NOTICE); echo "---11---\n"; print_xml(simplexml_load_string($xml)); echo "---12---\n"; print_xml(simplexml_load_string($xml1)); echo "---21---\n"; print_xml2(simplexml_load_string($xml)); echo "---22---\n"; print_xml2(simplexml_load_string($xml1)); ?> ================================================ FILE: Testing/Tests/Xml/018.php ================================================ [expect php] [file] Text1 Text2 Text3 EOF; $xml1 =<< EOF; function traverse_xml($pad,$xml) { foreach($xml->children() as $name => $node) { echo $pad."<$name"; foreach($node->attributes() as $attr => $value) { echo " $attr=\"$value\""; } echo ">\n"; traverse_xml($pad." ",$node); echo $pad."\n"; } } traverse_xml("",simplexml_load_string($xml)); echo "----------\n"; traverse_xml("",simplexml_load_string($xml1)); echo "---Done---\n"; ?> ================================================ FILE: Testing/Tests/Xml/019.php ================================================ [expect php] [file] Plain text. Bla bla 1. Here we have some text data. And here some more. Wow once again. Bla bla 2. Foo Bar EOF ); foreach($sxe->children() as $name => $data) { __var_dump($name); __var_dump(trim($data)); } echo "===CLONE===\n"; foreach(clone $sxe->children() as $name => $data) { __var_dump($name); __var_dump(trim($data)); } echo "===ELEMENT===\n"; foreach($sxe->elem11->children() as $name => $data) { __var_dump($name); __var_dump(trim($data)); } ?> ================================================ FILE: Testing/Tests/Xml/020.php ================================================ [expect php] [file] bar'); print $doc->name["attr"]; print "\n"; if ((string)$doc->name["attr"] == "foo") { print "Works\n"; } else { print "Error\n"; } if ($doc->name["attr"] == "foo") { print "Works\n"; } else { print "Error\n"; } ?> ================================================ FILE: Testing/Tests/Xml/021.php ================================================ [expect php] [file] foo'); if(!isset($doc->exists)) { $ok *= 0; } if(isset($doc->doesnotexist)) { $ok *= 0; } if ($ok) { print "Works\n"; } else { print "Error\n"; } ?> ================================================ FILE: Testing/Tests/Xml/025.php ================================================ [expect php] [file] bla bla EOF; $sxe = simplexml_load_string($xml); __var_dump($sxe->getNamespaces()); __var_dump($sxe->getNamespaces(true)); __var_dump($sxe->getDocNamespaces()); __var_dump($sxe->getDocNamespaces(true)); $xml =<< bla EOF; $sxe = simplexml_load_string($xml); __var_dump($sxe->getNamespaces()); __var_dump($sxe->getDocNamespaces()); $xml =<< EOF; $sxe = simplexml_load_string($xml); __var_dump($sxe->getNamespaces()); __var_dump($sxe->getDocNamespaces()); ?> ================================================ FILE: Testing/Tests/Xml/026.php ================================================ [expect php] [file] Jane EOF; function traverse_xml($xml, $pad = '') { $name = $xml->getName(); echo "$pad<$name"; foreach($xml->attributes() as $attr => $value) { echo " $attr=\"$value\""; } echo ">" . trim($xml) . "\n"; foreach($xml->children() as $node) { traverse_xml($node, $pad.' '); } echo $pad."\n"; } $people = simplexml_load_string($xml); traverse_xml($people); ?> ================================================ FILE: Testing/Tests/Xml/027.php ================================================ [expect php] [file] EOF; function traverse_xml($xml, $pad = '') { $name = $xml->getName(); echo "$pad<$name"; foreach($xml->attributes() as $attr => $value) { echo " $attr=\"$value\""; } echo ">" . trim($xml) . "\n"; foreach($xml->children() as $node) { traverse_xml($node, $pad.' '); } echo $pad."\n"; } $people = simplexml_load_string($xml); traverse_xml($people); $people->person = 'Joe'; $people->person['gender'] = 'male'; traverse_xml($people); $people->person = 'Jane'; traverse_xml($people); $people->person['gender'] = 'female'; $people->person[1] = 'Joe'; $people->person[1]['gender'] = 'male'; traverse_xml($people); @$people->person[3] = 'Minni-me'; $people->person[2]['gender'] = 'male'; traverse_xml($people); //$people->person[3]['gender'] = 'error'; ?> ================================================ FILE: Testing/Tests/Xml/028.php ================================================ [expect php] [file] EOF; function traverse_xml($xml, $pad = '') { $name = $xml->getName(); echo "$pad<$name"; foreach($xml->attributes() as $attr => $value) { echo " $attr=\"$value\""; } echo ">" . trim($xml) . "\n"; foreach($xml->children() as $node) { traverse_xml($node, $pad.' '); } echo $pad."\n"; } $people = simplexml_load_string($xml); traverse_xml($people); $people->person['name'] = 'John'; traverse_xml($people); ?> ================================================ FILE: Testing/Tests/Xml/029.php ================================================ [expect php] [file] EOF; $people = simplexml_load_string($xml); foreach($people as $person) { __var_dump((string)$person['name']); __var_dump(count($people)); __var_dump(count($person)); } ?> ================================================ FILE: Testing/Tests/Xml/030.php ================================================ [expect php] [file] test test 2 EOF; require('Phalanger.inc'); $sxe = simplexml_load_string($xml); echo $sxe->child1[0]."\n"; echo $sxe->child1[1]."\n\n"; __var_dump(isset($sxe->child1[1])); unset($sxe->child1[1]); __var_dump(isset($sxe->child1[1])); echo "\n"; $atts = $sxe->attributes("urn::test"); __var_dump(isset($atts[0])); unset($atts[0]); __var_dump(isset($atts[0])); __var_dump(isset($atts[TRUE])); ?> ================================================ FILE: Testing/Tests/Xml/032.php ================================================ [expect php] [file] EOF; $xml1 =<< EOF; $people = simplexml_load_string($xml); $people1 = simplexml_load_string($xml); $people2 = simplexml_load_string($xml1); __var_dump($people1 == $people); __var_dump($people2 == $people); __var_dump($people2 == $people1); ?> ================================================ FILE: Testing/Tests/Xml/033.php ================================================ [expect php] [file] test EOF; $foo = simplexml_load_string( "" ); $people = simplexml_load_string($xml); __var_dump((bool)$foo); __var_dump((bool)$people); __var_dump((int)$foo); __var_dump((int)$people); __var_dump((double)$foo); __var_dump((double)$people); __var_dump(trim((string)$foo)); __var_dump(trim((string)$people)); //__var_dump((array)$foo); //__var_dump((array)$people); //__var_dump((object)$foo); //__var_dump((object)$people); ?> ================================================ FILE: Testing/Tests/Xml/Phalanger.inc ================================================ ================================================ FILE: Testing/Tests/Xml/area_list.xsl ================================================ HERE ================================================ FILE: Testing/Tests/Xml/area_name.xml ================================================ 13 "Автово" м. m."Avtovo" ================================================ FILE: Testing/Tests/Xml/book.xml ================================================ The Grapes of Wrath John Steinbeck The Pearl John Steinbeck ================================================ FILE: Testing/Tests/Xml/bug26384.php ================================================ [expect php] [file] load(dirname(__FILE__)."/area_name.xml"); if(!$dom) { echo "Error while parsing the document\n"; exit; } $xsl = new domDocument; $xsl->load(dirname(__FILE__)."/area_list.xsl"); if(!$xsl) { echo "Error while parsing the document\n"; exit; } $proc = new xsltprocessor; if($proc === false) { echo "Error while making xsltprocessor object\n"; exit; } $proc->importStylesheet($xsl); print $proc->transformToXml($dom); //this segfaulted before // WTF? there's no sibling... //print $dom->documentElement->firstChild->nextSibling->nodeName; ?> ================================================ FILE: Testing/Tests/Xml/bug28721.php ================================================ [expect php] [file] nodeName . " (" . $node->nodeValue . ")\n"; } function print_node_r(DomNode $node) { static $indent = ""; echo "\n" . $indent; print_node($node); echo $indent . "parent: "; if ( $node->parentNode ) print_node($node->parentNode); else echo "NULL\n"; echo $indent . "previousSibling: "; if ( $node->previousSibling ) print_node($node->previousSibling); else echo "NULL\n"; echo $indent . "nextSibling: "; if ( $node->nextSibling ) print_node($node->nextSibling); else echo "NULL\n"; if ( !$node->hasChildNodes() ) return; foreach ($node->childNodes as $child) { $old_indent = $indent; $indent .= " "; print_node_r($child); $indent = $old_indent; } } function err_handler($errno, $errstr, $errfile, $errline) { // echo "Error ($errno) on line $errline: $errstr\n"; echo "Error ($errno)\n"; } // Record 'DocumentFragment is empty' warnings set_error_handler("err_handler"); $xml = new DomDocument(); $p = $xml->createElement("p"); $p->appendChild($t1 = $xml->createTextNode(" t1 ")); $p->appendChild($b = $xml->createElement("b")); $b->appendChild($xml->createTextNode("X")); $p->appendChild($t2 = $xml->createTextNode(" t2 ")); $p->appendChild($xml->createTextNode(" xxx ")); print_node_r($p); echo "\nAppend t1 to p:\n"; $ret = $p->appendChild($t1); print_node_r($p); echo "\n"; echo "t1 == ret: "; __var_dump( $t1 === $ret ); $d = $xml->createElement("div"); $d->appendChild($t3 = $xml->createTextNode(" t3 ")); $d->appendChild($b = $xml->createElement("b")); $b->appendChild($xml->createElement("X")); $d->appendChild($t4 = $xml->createTextNode(" t4 ")); $d->appendChild($xml->createTextNode(" xxx ")); echo "\ndiv:\n"; print_node_r($d); echo "\nInsert t4 before t3:\n"; $ret = $d->insertBefore($t4, $t3); print_node_r($d); echo "\n"; $frag = $xml->createDocumentFragment(); $t5 = $frag->appendChild($xml->createTextNode(" t5 ")); $frag->appendChild($i = $xml->createElement("i")); $i->appendChild($xml->createTextNode(" frob ")); $frag->appendChild($xml->createTextNOde(" t6 ")); echo "\np:\n"; print_node_r($p); echo "\nFragment:\n"; print_node_r($frag); echo "\nAppending fragment to p:\n"; $p->appendChild($frag); print_node_r($p); echo "\nFragment:\n"; print_node_r($frag); echo "\ndiv:\n"; print_node_r($d); echo "\nInserting fragment before t4\n"; $d->insertBefore($frag, $t4); print_node_r($d); echo "\np:\n"; print_node_r($p); ?> ================================================ FILE: Testing/Tests/Xml/bug28817.php ================================================ [expect php] [file] p_array[] = 'bonus'; $this->p_array[] = 'vir'; $this->p_array[] = 'semper'; $this->p_array[] = 'tiro'; $this->p_variable = 'Cessante causa cessat effectus'; } } $z=new z(); __var_dump($z->p_array); __var_dump($z->p_variable); ?> ================================================ FILE: Testing/Tests/Xml/bug32615.php ================================================ [expect php] [file] formatOutput = true; $frag = $dom->createDocumentFragment(); $frag->appendChild(new DOMElement('root')); $dom->appendChild($frag); $root = $dom->documentElement; $frag->appendChild(new DOMElement('first')); $root->appendChild($frag); $frag->appendChild(new DOMElement('second')); $root->appendChild($frag); $node = $dom->createElement('newfirst'); $frag->appendChild($node); $root->replaceChild($frag, $root->firstChild); unset($frag); $frag = $dom->createDocumentFragment(); $frag->appendChild(new DOMElement('newsecond')); $root->replaceChild($frag, $root->lastChild); $node = $frag->appendChild(new DOMElement('fourth')); $root->insertBefore($frag, NULL); $frag->appendChild(new DOMElement('third')); $node = $root->insertBefore($frag, $node); $frag->appendChild(new DOMElement('start')); $root->insertBefore($frag, $root->firstChild); $frag->appendChild(new DOMElement('newthird')); $root->replaceChild($frag, $node); $frag->appendChild(new DOMElement('newfourth')); $root->replaceChild($frag, $root->lastChild); $frag->appendChild(new DOMElement('first')); $root->replaceChild($frag, $root->firstChild->nextSibling); $root->removeChild($root->firstChild); echo __xml_norm($dom->saveXML()); while ($root->hasChildNodes()) { $root->removeChild($root->firstChild); } $frag->appendChild(new DOMElement('first')); $root->insertBefore($frag, $root->firstChild); $node = $frag->appendChild(new DOMElement('fourth')); $root->appendChild($frag); $frag->appendChild(new DOMElement('second')); $frag->appendChild(new DOMElement('third')); $root->insertBefore($frag, $node); echo __xml_norm($dom->saveXML()); $frag = $dom->createDocumentFragment(); $root = $dom->documentElement; $root->replaceChild($frag, $root->firstChild); echo __xml_norm($dom->saveXML()); ?> ================================================ FILE: Testing/Tests/Xml/bug33853.php ================================================ [expect php] [file] loadXML(' '); $inputdom = new DomDocument(); $inputdom->loadXML(' '); $proc = new XsltProcessor(); $proc->registerPhpFunctions(); $xsl = $proc->importStylesheet($xsl); $newdom = $proc->transformToDoc($inputdom); ?> ================================================ FILE: Testing/Tests/Xml/bug34276.php ================================================ [expect php] [file] HERE; $dom = new DOMDocument(); $dom->loadXML($xml); $foo = $dom->documentElement; var_dump($foo->hasAttributeNS('http://www.example.com/ns/foo', 'attra')); var_dump($foo->getAttributeNS('http://www.example.com/ns/foo', 'attra')); $foo->setAttributeNS('http://www.example.com/ns/foo', 'attra', 'attranew'); $foo->setAttributeNS('http://www.example.com/ns/fubar', 'attrb', 'attrbnew'); $foo->setAttributeNS('http://www.example.com/ns/foo', 'attrc', 'attrc'); __var_dump($foo->getAttributeNS('http://www.example.com/ns/foo', 'attra')); __var_dump($foo->getAttributeNS('http://www.example.com/ns/fubar', 'attrb')); __var_dump($foo->getAttributeNS('http://www.example.com/ns/foo', 'attrc')); //print $dom->saveXML(); ?> ================================================ FILE: Testing/Tests/Xml/bug35342.php ================================================ [expect php] [file] loadXML("foobarfoobar#2"); $nodelist = $dom->getElementsByTagName("foo"); __var_dump($nodelist->length); __var_dump(isset($nodelist->length)); __var_dump(isset($nodelist->foo)); ?> ================================================ FILE: Testing/Tests/Xml/bug36756.php ================================================ [expect] root nodeType: 1 child nodeType: 1 [file] loadXML(''); $xpath = new DOMXpath($dom); $node = $xpath->query('/root')->item(0); echo $node->nodeName . "\n"; $dom->removeChild($GLOBALS['dom']->firstChild); echo "nodeType: " . $node->nodeType . "\n"; /* Node gets destroyed during removeChild */ $dom->loadXML(''); $xpath = new DOMXpath($dom); $node = $xpath->query('//child')->item(0); echo $node->nodeName . "\n"; $GLOBALS['dom']->removeChild($GLOBALS['dom']->firstChild); echo "nodeType: " . $node->nodeType . "\n"; ?> ================================================ FILE: Testing/Tests/Xml/bug37277.php ================================================ [expect php] [file] '; $dom1->loadXml($xml); $node = clone $dom1->documentElement; $dom2 = new DomDocument('1.0', 'UTF-8'); $dom2->appendChild($dom2->importNode($node->cloneNode(true), TRUE)); $dom2->formatOutput = true; echo __xml_norm($dom2->saveXML()); ?> ================================================ FILE: Testing/Tests/Xml/documentxpath.xsl ================================================ ================================================ FILE: Testing/Tests/Xml/dom002.php ================================================ [expect php] [file] HERE; function dump($elems) { foreach ($elems as $elem) { __var_dump($elem->nodeName); dump($elem->childNodes); } } $dom = new DOMDocument(); $dom->loadXML($xml); $doc = $dom->documentElement; dump($dom->getElementsByTagName('bar')); dump($doc->getElementsByTagName('bar')); dump($dom->getElementsByTagNameNS('http://www.example.com/ns/fubar', 'bar')); dump($doc->getElementsByTagNameNS('http://www.example.com/ns/fubar', 'bar')); ?> ================================================ FILE: Testing/Tests/Xml/dom003.php ================================================ [expect php] [file] load(dirname(__FILE__)."/book.xml"); $rootNode = $dom->documentElement; print "--- Catch exception with try/catch\n"; try { $rootNode->appendChild($rootNode); } catch (domexception $e) { echo $e->getCode(); } //print "--- Don't catch exception with try/catch\n"; //$rootNode->appendChild($rootNode); ?> ================================================ FILE: Testing/Tests/Xml/dom006.php ================================================ [expect php] [file] createElement("title"); $titleElement->appendChild($this->createTextNode($title)); $authorElement = $this->createElement("author"); $authorElement->appendChild($this->createTextNode($author)); $bookElement = $this->createElement("book"); $bookElement->appendChild($titleElement); $bookElement->appendChild($authorElement); $this->documentElement->appendChild($bookElement); } } $dom = new books; $dom->formatOutput = true; $dom->load(dirname(__FILE__)."/book.xml"); $dom->addBook("PHP de Luxe", "Richard Samar, Christian Stocker"); echo __xml_norm($dom->saveXML()); ?> ================================================ FILE: Testing/Tests/Xml/dom007.php ================================================ [expect php] [file] ]> Basic Languages Introduction to Languages French I Introduction to French EOXML; $dom = new DOMDocument(); $dom->loadXML($xml); $dtd = $dom->doctype; /* Notation Tests */ $nots = $dtd->notations; $length = $nots->length; echo "Length: ".$length."\n"; foreach ($nots AS $key=>$node) { echo "Key $key: ".$node->nodeName." (".$node->systemId.") (".$node->publicId.")\n"; } print "\n"; for($x=0; $x < $length; $x++) { echo "Index $x: ".$nots->item($x)->nodeName." (".$nots->item($x)->systemId.") (".$nots->item($x)->publicId.")\n"; } echo "\n"; $node = $nots->getNamedItem('xxx'); var_dump($node); echo "\n"; /* Entity Decl Tests */ $ents = $dtd->entities; $ents_ = array(); foreach ($ents as $key=>$node) { $ents_[$key] = $node; } $ents = $ents_; usort($ents, "sortfunc"); function sortfunc($a, $b) { return strcmp($a->nodeName, $b->nodeName); } $length = $dtd->entities->length; echo "Length: ".$length."\n"; foreach ($ents AS $key=>$node) { echo "Key: $key Name: ".$node->nodeName."\n"; } echo "\n"; $node = $dtd->entities->item(3); var_dump($node); $node = $dtd->entities->getNamedItem('xxx'); var_dump($node); ?> ================================================ FILE: Testing/Tests/Xml/dom_set_attr_node.php ================================================ [expect php] [file] HERE; $xml2 = << HERE; $dom = new DOMDocument(); $dom->loadXML($xml); $root = $dom->documentElement; $attr = $root->getAttributeNode('a'); $dom2 = new DOMDocument(); $dom2->loadXML($xml2); $root2 = $dom2->documentElement; try { $root2->setAttributeNode($attr); } catch (domexception $e) { echo $e->getCode(); } ?> ================================================ FILE: Testing/Tests/Xml/exslt.xml ================================================ ================================================ FILE: Testing/Tests/Xml/exslt.xsl ================================================ Test Date : year : leap-year : month-in-year : month-name : month-abbreviation : week-in-year : day-in-year : day-in-month : day-of-week-in-month : day-in-week : day-name : day-abbreviation : time : hour-in-day : minute-in-hour : second-in-minute : ================================================ FILE: Testing/Tests/Xml/html_save.php ================================================ [expect php] [file] Durango DNX408 1/8 Off-road Buggy Kit for .21 Nitro engines, TDR102002
    Stormer Hobbies.com
    twitter
    twitter

    Storefront | Search/Shop | Contact Us | FAQ\'s | My Account | Shopping Cart

    Part Number: TDR102002
    Manufacturer: Durango
    Price:
    $549.99 - Temporarily out of stock, on order

    DNX408 1/8 Off-road Buggy Kit for .21 Nitro engines

    What would you like to do?

    Quantity:
    Temporarily out of stock, on order
     
    TDR102002 image
     

    Extended Product Information:
    As you would expect from Team Durango, precision, quality and performance are the hallmarks of the DNX408. 1/8 scale nitro buggy racing makes the toughest demands of any RC car racing class, so Team Durango have designed a car that is as strong as it is fast!

    The 5mm thick hard anodized chassis is one of the narrowest, if not the narrowest on the market. Not only is the chassis hard anodized, it has been machined to minimize weight and give the DNX408 class-leading center of gravity, with almost all the hardware sunk down into it.

    Hard anodized alloy bulkheads front and rear keep the weight low and the car strong. Gearbox cases front and rear are molded and are separate from the load-bearing bulkheads. This gives minimal flex, the best bearing alignment, dirt shielding and super-easy removal of whole differential and CVD, just like the DEX410.

    PTFE coated ultra-smooth 15mm big-bore threaded alloy shocks feature alloy caps, an alloy cartridge bottom and polished shock shafts. Mounted on 5mm hard anodized shock towers, the shock absorbers on the DNX408 are as smooth as possible giving you the best \'feel\' of your car as it soaks-up the roughest of tracks.

    The single-piece CNC machined engine mount with gold anodized memory plate is designed for maximum engine performance and easy maintenance with a marked-up chassis for perfect-every-time engine alignment.

    In-board and out-board CVD joints front and rear, with rubber CVD boot protection, minimize debris problems in the race and maintenance between meetings.

    The fuel tank inlet complete with dirt guard - is center-mounted for easy pit-lane access.

    The DEX408 has the lowest bodyshell in its class as this has many benefits, like lowering the center of gravity even more; and the minimal frontal area punches through the air allowing more air flow over the rear wing; it also helps with heat management.

    The engine head in a DNX408 gets the most direct clean airflow of any car. The bodyshell is designed to direct as much air as possible over the bodyshell at the engine head, rather than through the body. The central engine and low bodyshell mean that all shock bodies are also in clean airflow.

    The DNX408\'s body is long and slim at the rear which encloses the exhaust header and insulates the left rear shock, while it is trimmed to help direct/suck hot air away from either rear shock.

    The super-low body ensures maximum flow over the adjustable rear wing, while the wing sits low to again lower the CG. The over-sized end-plates (ROAR legal) not only ensure all-round stability, they help to protect the engine head in crashes.

    The forward-mounted engine (which is 20mm further forward than some of our competitors\' race buggies) gives ideal weight distribution and room for everything to be mounted as low as possible in the super-strong yet incredibly lightweight chassis.

    The steering is set at the same up-angle as the kickup to remove bump steer, while the Ackerman link moves under the front CVD.

    The rear wing is as close to the rear wheels as possible, thanks to the forward shock position. This drives the down-force directly to the rear wheels. Too many wings on other 1/8 buggies are way out back which means more wheelies than down-force.

    Kit includes:
    Full Rolling chassis with 3 shoe clutch set, clear body, black wing, and white dish rims.

    Kit Requires:

  • Radio system with 2 high torque servos
  • .21 size nitro race engine
  • Tuned pipe and manifold to fit engine
  • Tires
  • Flat Receiver battery pack
  • Glow igniter
  • Fuel
  • Misc. tools for assembly and paint for body



    Copyright ©2000-2012 Stormer Hobbies, Inc. All Rights Reserved
  • '; $html = new DOMDocument(); // Parse the HTML into an XML document. This parser is reasonably tolerant. $html->loadHtml(str_replace(' ', ' ', $html_text)); $html->saveHtmlFile("html_save.html"); ================================================ FILE: Testing/Tests/Xml/html_xpath.php ================================================ [expect php] [file] Durango DNX408 1/8 Off-road Buggy Kit for .21 Nitro engines, TDR102002
    Stormer Hobbies.com
    twitter
    twitter

    Storefront | Search/Shop | Contact Us | FAQ\'s | My Account | Shopping Cart

    Part Number: TDR102002
    Manufacturer: Durango
    Price:
    $549.99 - Temporarily out of stock, on order

    DNX408 1/8 Off-road Buggy Kit for .21 Nitro engines

    What would you like to do?

    Quantity:
    Temporarily out of stock, on order
     
    TDR102002 image
     

    Extended Product Information:
    As you would expect from Team Durango, precision, quality and performance are the hallmarks of the DNX408. 1/8 scale nitro buggy racing makes the toughest demands of any RC car racing class, so Team Durango have designed a car that is as strong as it is fast!

    The 5mm thick hard anodized chassis is one of the narrowest, if not the narrowest on the market. Not only is the chassis hard anodized, it has been machined to minimize weight and give the DNX408 class-leading center of gravity, with almost all the hardware sunk down into it.

    Hard anodized alloy bulkheads front and rear keep the weight low and the car strong. Gearbox cases front and rear are molded and are separate from the load-bearing bulkheads. This gives minimal flex, the best bearing alignment, dirt shielding and super-easy removal of whole differential and CVD, just like the DEX410.

    PTFE coated ultra-smooth 15mm big-bore threaded alloy shocks feature alloy caps, an alloy cartridge bottom and polished shock shafts. Mounted on 5mm hard anodized shock towers, the shock absorbers on the DNX408 are as smooth as possible giving you the best \'feel\' of your car as it soaks-up the roughest of tracks.

    The single-piece CNC machined engine mount with gold anodized memory plate is designed for maximum engine performance and easy maintenance with a marked-up chassis for perfect-every-time engine alignment.

    In-board and out-board CVD joints front and rear, with rubber CVD boot protection, minimize debris problems in the race and maintenance between meetings.

    The fuel tank inlet complete with dirt guard - is center-mounted for easy pit-lane access.

    The DEX408 has the lowest bodyshell in its class as this has many benefits, like lowering the center of gravity even more; and the minimal frontal area punches through the air allowing more air flow over the rear wing; it also helps with heat management.

    The engine head in a DNX408 gets the most direct clean airflow of any car. The bodyshell is designed to direct as much air as possible over the bodyshell at the engine head, rather than through the body. The central engine and low bodyshell mean that all shock bodies are also in clean airflow.

    The DNX408\'s body is long and slim at the rear which encloses the exhaust header and insulates the left rear shock, while it is trimmed to help direct/suck hot air away from either rear shock.

    The super-low body ensures maximum flow over the adjustable rear wing, while the wing sits low to again lower the CG. The over-sized end-plates (ROAR legal) not only ensure all-round stability, they help to protect the engine head in crashes.

    The forward-mounted engine (which is 20mm further forward than some of our competitors\' race buggies) gives ideal weight distribution and room for everything to be mounted as low as possible in the super-strong yet incredibly lightweight chassis.

    The steering is set at the same up-angle as the kickup to remove bump steer, while the Ackerman link moves under the front CVD.

    The rear wing is as close to the rear wheels as possible, thanks to the forward shock position. This drives the down-force directly to the rear wheels. Too many wings on other 1/8 buggies are way out back which means more wheelies than down-force.

    Kit includes:
    Full Rolling chassis with 3 shoe clutch set, clear body, black wing, and white dish rims.

    Kit Requires:

  • Radio system with 2 high torque servos
  • .21 size nitro race engine
  • Tuned pipe and manifold to fit engine
  • Tires
  • Flat Receiver battery pack
  • Glow igniter
  • Fuel
  • Misc. tools for assembly and paint for body



    Copyright ©2000-2012 Stormer Hobbies, Inc. All Rights Reserved
  • '; $html = new DOMDocument(); // Parse the HTML into an XML document. This parser is reasonably tolerant. $html->loadHtml(str_replace(' ', ' ', $html_text)); // get a new XPath object rooted at the top of the HTML DOM $xpath = new DOMXPath($html); if (($content = $xpath->query('//b[starts-with(., "Part Number:")]/font|//font[b[.="Price:"]]/following-sibling::text()[1]|//td[font/b[.="Price:"]]/b[3]')) === false || $content->length < 2) { echo 'Table had unexpected format'; } echo strtoupper(trim(html_entity_decode($content->item(0)->nodeValue))) . ':' . trim(html_entity_decode($content->item(1)->nodeValue)); ================================================ FILE: Testing/Tests/Xml/prepare.inc ================================================ load(dirname(__FILE__)."/xslt.xml"); if(!$dom) { echo "Error while parsing the document\n"; exit; } $xsl = new domDocument; $xsl->load(dirname(__FILE__)."/xslt.xsl"); if($xsl === false) { echo "Error while parsing the document\n"; exit; } $proc = new xsltprocessor; if($proc === false) { echo "Error while making xsltprocessor object\n"; exit; } ?> ================================================ FILE: Testing/Tests/Xml/xmlReader/001.phpt ================================================ --TEST-- XMLReader: libxml2 XML Reader, string data --SKIPIF-- --FILE-- '; $reader = new XMLReader(); $reader->XML($xmlstring); // Only go through while ($reader->read()) { echo $reader->name."\n"; } $xmlstring = ''; $reader = new XMLReader(); $reader->XML($xmlstring); ?> ===DONE=== --EXPECT EXACT-- books books Warning: XMLReader::XML(): Empty string supplied as input in %s on line %d ===DONE=== ================================================ FILE: Testing/Tests/Xml/xmlReader/002.phpt ================================================ --TEST-- XMLReader: libxml2 XML Reader, file data --SKIPIF-- --FILE-- '; file_put_contents($filename, $xmlstring); $reader = new XMLReader(); if ($reader->open('')) exit(); $reader = new XMLReader(); if (!$reader->open($filename)) { $reader->close(); exit(); } // Only go through while ($reader->read()) { echo $reader->name."\n"; } $reader->close(); unlink($filename); touch($filename); $reader = new XMLReader(); $reader->open($filename); $reader->close(); unlink($filename); ?> ===DONE=== --EXPECT EXACT-- Warning: XMLReader::open(): Empty string supplied as input in %s on line %d books books ===DONE=== ================================================ FILE: Testing/Tests/Xml/xmlReader/003.phpt ================================================ --TEST-- XMLReader: libxml2 XML Reader, attributes test --SKIPIF-- --FILE-- book1'; file_put_contents($filename, $xmlstring); $reader = new XMLReader(); if (!$reader->open($filename)) { exit(); } // Only go through while ($reader->read()) { if ($reader->nodeType != XMLREADER::END_ELEMENT) { if ($reader->nodeType == XMLREADER::ELEMENT && $reader->hasAttributes) { $attr = $reader->moveToFirstAttribute(); echo $reader->name . ": "; echo $reader->value . "\n"; if ($reader->getAttribute($reader->name) == $reader->value) { echo "1st attr (num) failed\n"; } $attr = $reader->moveToNextAttribute(); echo $reader->name . ": "; echo $reader->value . "\n"; if ($reader->getAttribute($reader->name) == $reader->value) { echo "2nd attr (idx) failed\n"; } // Named attribute $attr = $reader->moveToAttribute('num'); echo $reader->name . ": "; echo $reader->value . "\n"; if ($reader->getAttribute('num') == $reader->value) { echo "attr num failed\n"; } $attr = $reader->moveToAttribute('idx'); echo $reader->name . ": "; echo $reader->value . "\n"; if ($reader->getAttribute('idx') == $reader->value) { echo "attr idx failed\n"; } // Numeric positions of attributes $attr = $reader->moveToAttributeNo(0); echo $reader->name . ": "; echo $reader->value . "\n"; if ($reader->getAttributeNo(0) == $reader->value) { echo "attr 0 failed\n"; } $attr = $reader->moveToAttributeNo(1); echo $reader->name . ": "; echo $reader->value . "\n"; } } } $reader->close(); unlink($filename); ?> ===DONE=== --EXPECT EXACT-- num: 1 idx: 2 num: 1 idx: 2 num: 1 idx: 2 ===DONE=== ================================================ FILE: Testing/Tests/Xml/xmlReader/004.phpt ================================================ --TEST-- XMLReader: libxml2 XML Reader, attributes test --SKIPIF-- --FILE-- book1'; file_put_contents($filename, $xmlstring); $reader = new XMLReader(); if (!$reader->open($filename)) { exit(); } while ($reader->read()) { if ($reader->nodeType != XMLREADER::END_ELEMENT) { echo $reader->name."\n"; if ($reader->nodeType == XMLREADER::ELEMENT && $reader->hasAttributes) { $attr = $reader->moveToFirstAttribute(); while ($attr) { echo " Attribute Name: ".$reader->name."\n"; echo " Attribute Value: ".$reader->value."\n"; $attr = $reader->moveToNextAttribute(); } } } } $reader->close(); unlink($filename); ?> ===DONE=== --EXPEC EXACT-- books book Attribute Name: num Attribute Value: 1 Attribute Name: idx Attribute Value: 2 #text ===DONE=== ================================================ FILE: Testing/Tests/Xml/xmlReader/005.phpt ================================================ --TEST-- XMLReader: libxml2 XML Reader, parser property set/get --SKIPIF-- --FILE-- '; $reader = new XMLReader(); $reader->XML($xmlstring); $a = $reader->setParserProperty(XMLReader::LOADDTD, false); $b = $reader->getParserProperty(XMLReader::LOADDTD); if (!$a && !$b) { echo "ok\n"; } $a = $reader->setParserProperty(XMLReader::SUBST_ENTITIES, true); $b = $reader->getParserProperty(XMLReader::SUBST_ENTITIES); if ($a && $b) { echo "ok\n"; } // Only go through while ($reader->read()); $reader->close(); ?> ===DONE=== --EXPEC EXACT-- ok ===DONE=== ================================================ FILE: Testing/Tests/Xml/xmlReader/006.phpt ================================================ --TEST-- XMLReader: libxml2 XML Reader, moveToElement --SKIPIF-- --FILE-- '; $reader = new XMLReader(); $reader->XML($xmlstring); // 2 read to get on the 2nd node $reader->read(); $reader->read(); if ($reader->nodeType != XMLREADER::END_ELEMENT) { if ($reader->nodeType == XMLREADER::ELEMENT && $reader->hasAttributes) { $attr = $reader->moveToFirstAttribute(); if ($reader->moveToElement()) { if ($reader->name == 'book') { echo "ok\n"; } } } } $reader->close(); ?> ===DONE=== --EXPEC EXACT-- ok ===DONE=== ================================================ FILE: Testing/Tests/Xml/xmlReader/007.phpt ================================================ --TEST-- XMLReader: libxml2 XML Reader, setRelaxNGSchema --SKIPIF-- --FILE-- hello'; $relaxngfile = dirname(__FILE__) . '/relaxNG.rng'; $file = dirname(__FILE__) . '/__007.xml'; file_put_contents($file, $xmlstring); $reader = new XMLReader(); $reader->open($file); if ($reader->setRelaxNGSchema($relaxngfile)) { while ($reader->read()); } if ($reader->isValid()) { print "file relaxNG: ok\n"; } else { print "file relaxNG: failed\n"; } $reader->close(); unlink($file); $reader = new XMLReader(); $reader->XML($xmlstring); if ($reader->setRelaxNGSchema($relaxngfile)) { while ($reader->read()); } if ($reader->isValid()) { print "string relaxNG: ok\n"; } else { print "string relaxNG: failed\n"; } $reader->close(); $reader = new XMLReader(); $reader->XML($xmlstring); if ($reader->setRelaxNGSchema('')) { echo 'failed'; } $reader->close(); ?> ===DONE=== --EXPECT EXACT-- file relaxNG: ok string relaxNG: ok Warning: XMLReader::setRelaxNGSchema(): Schema data source is required in %s on line %d ===DONE=== ================================================ FILE: Testing/Tests/Xml/xmlReader/008.phpt ================================================ --TEST-- XMLReader: libxml2 XML Reader, DTD --SKIPIF-- --FILE-- Move Title 1 Location 1 Move Title 2 Location 2 '; $dtdfile = rawurlencode(dirname(__FILE__)) . '/dtdexample.dtd'; $file = dirname(__FILE__) . '/__008.xml'; file_put_contents($file, $xmlstring); $reader = new XMLReader(); $reader->open($file); $reader->setParserProperty(XMLREADER::LOADDTD, TRUE); $reader->setParserProperty(XMLREADER::VALIDATE, TRUE); while($reader->read()); if ($reader->isValid()) { echo "file DTD: ok\n"; } $reader->close(); unlink($file); $xmlstring = ' Move Title 1 Location 1 Move Title 2 Location 2 '; $reader = new XMLReader(); $reader->XML($xmlstring); $reader->setParserProperty(XMLREADER::LOADDTD, TRUE); $reader->setParserProperty(XMLREADER::VALIDATE, TRUE); while($reader->read()); if ($reader->isValid()) { echo "string DTD: ok\n"; } ?> ===DONE=== --EXPECT EXACT-- file DTD: ok string DTD: ok ===DONE=== ================================================ FILE: Testing/Tests/Xml/xmlReader/009.phpt ================================================ --TEST-- XMLReader: libxml2 XML Reader, next --SKIPIF-- --FILE-- '; $reader = new XMLReader(); $reader->XML($xmlstring); // Only go through $reader->read(); $reader->read(); $reader->next(); echo $reader->name; echo " "; echo $reader->getAttribute('num'); echo "\n"; ?> ===DONE=== --EXPECT EXACT-- book 2 ===DONE=== ================================================ FILE: Testing/Tests/Xml/xmlReader/010.phpt ================================================ --TEST-- XMLReader: libxml2 XML Reader, next --SKIPIF-- --FILE-- book1'; $reader = new XMLReader(); $reader->XML($xmlstring); // Only go through $reader->read(); $reader->read(); $reader->next(); echo $reader->name; echo " "; echo $reader->getAttributeNs('isbn', 'uri'); echo "\n"; ?> ===DONE=== --EXPECT EXACT-- prefix:books 12isbn ===DONE=== ================================================ FILE: Testing/Tests/Xml/xmlReader/011.phpt ================================================ --TEST-- XMLReader: libxml2 XML Reader, string data --SKIPIF-- $reader = new XMLReader(); if (!method_exists($reader, 'readInnerXml')) print "skip - readInnerXml method doesn't exist in XMLReader."; ?> --FILE-- test'; $reader = new XMLReader(); $reader->XML($xmlstring); $reader->read(); echo $reader->readInnerXml(); echo "\n"; $reader->close(); $reader = new XMLReader(); $reader->XML($xmlstring); $reader->read(); echo $reader->readOuterXml(); echo "\n"; $reader->close(); ?> ===DONE=== --EXPECT EXACT-- test test ===DONE=== ================================================ FILE: Testing/Tests/Xml/xmlReader/012.dtd ================================================ ================================================ FILE: Testing/Tests/Xml/xmlReader/012.phpt ================================================ --TEST-- XMLReader: accessing empty and non existing attributes --SKIPIF-- --FILE-- EOF; $reader = new XMLReader(); $reader->XML($xmlstring); $reader->read(); var_dump($reader->getAttribute('bar')); var_dump($reader->getAttribute('baz')); $reader->close(); $xmlstring =<< EOF; $xmlstring = str_replace('012.dtd', dirname(__FILE__).'/012.dtd', $xmlstring); if (DIRECTORY_SEPARATOR == '\\') { $xmlstring = str_replace('\\',"/", $xmlstring); } $reader = new XMLReader(); $reader->XML($xmlstring); $reader->setParserProperty(XMLReader::DEFAULTATTRS, true); while($reader->read() && $reader->nodeType != XMLReader::ELEMENT); var_dump($reader->getAttribute('bar')); var_dump($reader->getAttribute('baz')); $reader->close(); echo "\nUsing URI:\n"; $reader = new XMLReader(); $file = dirname(__FILE__) . '/012.xml'; if (DIRECTORY_SEPARATOR == '\\') { $file = str_replace('\\',"/", $file); } $reader->open($file); //$reader->setParserProperty(XMLReader::DEFAULTATTRS, true); while($reader->read() && $reader->nodeType != XMLReader::ELEMENT); var_dump($reader->getAttribute('bar')); var_dump($reader->getAttribute('baz')); $reader->close(); $reader = new XMLReader(); $reader->open(dirname(__FILE__) . '/012.xml'); $reader->setParserProperty(XMLReader::DEFAULTATTRS, true); while($reader->read() && $reader->nodeType != XMLReader::ELEMENT); var_dump($reader->getAttribute('bar')); var_dump($reader->getAttribute('baz')); $reader->close(); ?> ===DONE=== --EXPECT EXACT-- string(0) "" NULL string(0) "" string(0) "" Using URI: string(0) "" NULL string(0) "" string(0) "" ===DONE=== ================================================ FILE: Testing/Tests/Xml/xmlReader/012.xml ================================================ ================================================ FILE: Testing/Tests/Xml/xmlReader/013.phpt ================================================ --TEST-- XMLReader: Schema validation --SKIPIF-- --FILE-- 123 456 EOF; $reader = new XMLReader(); $reader->XML($xml); $reader->setSchema(dirname(__FILE__) . '/013.xsd'); while($reader->read()) { if ($reader->nodeType == XMLReader::ELEMENT && $reader->name == 'item') { $reader->read(); var_dump($reader->value); } } $reader->close(); ?> ===FAIL=== EOF; $reader = new XMLReader(); $reader->XML($xml); $reader->setSchema(dirname(__FILE__) . '/013.xsd'); while($reader->read() && $reader->nodeType != XMLReader::ELEMENT); $reader->close(); ?> ===DONE=== --EXPECTF-- string(3) "123" string(3) "456" ===FAIL=== Warning: XMLReader::read(): Element 'foo': %s ===DONE=== ================================================ FILE: Testing/Tests/Xml/xmlReader/013.xsd ================================================ ================================================ FILE: Testing/Tests/Xml/xmlReader/Phalanger.inc ================================================ ================================================ FILE: Testing/Tests/Xml/xmlReader/bug36743.phpt ================================================ --TEST-- Bug #36743 (In a class extending XMLReader array properties are not writable) --SKIPIF-- --FILE-- testArr[] = 1; var_dump($this->testArr); } } $t = new test; echo "Done\n"; ?> --EXPECT EXACT-- array(1) { [0]=> int(1) } Done ================================================ FILE: Testing/Tests/Xml/xmlReader/bug42139.phpt ================================================ --TEST-- Bug #42139 (XMLReader option constants are broken using XML()) --SKIPIF-- --FILE-- ]> &x; XML; $reader = new XMLReader; $reader->XML( $xml, NULL, LIBXML_NOENT); while ( $reader->read() ) { echo "{$reader->nodeType}, {$reader->name}, {$reader->value}\n"; } $reader->close(); ?> --EXPECT EXACT-- 10, root, 1, root, 3, #text, y 15, root, ================================================ FILE: Testing/Tests/Xml/xmlReader/dtdexample.dtd ================================================ ================================================ FILE: Testing/Tests/Xml/xmlReader/expand.phpt ================================================ --TEST-- XMLReader: Expand into existing DOM document --SKIPIF-- --FILE-- base book'; $xmlstring = ' new book'; $dom = new DOMDocument(); $dom->loadXML($basexml); $reader = new XMLReader(); $reader->XML($xmlstring); while ($reader->read()) { if ($reader->localName == "book") { $node = $reader->expand($dom); if ($node->ownerDocument) { echo $node->ownerDocument->documentElement->firstChild->textContent . "\n"; } break; } } $reader->close(); ?> ===DONE=== --EXPECT EXACT-- base book ===DONE=== ================================================ FILE: Testing/Tests/Xml/xmlReader/inherit.phpt ================================================ --TEST-- XMLReader: class inheritance --SKIPIF-- --FILE-- isEmptyElement ) { return ""; } $buffer = ""; while( $this->read() ) { switch( $this->nodeType ) { case TEXT: case XMLReader::SIGNIFICANT_WHITESPACE: $buffer .= $this->value; break; case XmlReader::END_ELEMENT: return $buffer; } } return $this->close(); } } ?> ===DONE=== --EXPECTF-- ===DONE=== ================================================ FILE: Testing/Tests/Xml/xmlReader/init.phpt ================================================ --TEST-- XMLReader: libxml2 XML Reader, initialization --SKIPIF-- --FILE-- book1'; $reader = new XMLReader(); $reader->XML($xmlstring); echo $reader->name."\n"; echo $reader->nodeType."\n"; while ($reader->read()) { echo $reader->name."\n"; } $reader->XML($xmlstring); $reader->read(); echo $reader->nodeType."\n"; echo $reader->name."\n"; $reader->XML($xmlstring); $reader->read(); $reader->read(); echo $reader->nodeType."\n"; echo $reader->name."\n"; $filename = dirname(__FILE__) . '/_002.xml'; file_put_contents($filename, $xmlstring); $reader = new XMLReader(); if (!$reader->open($filename)) { exit(); } $reader->read(); echo $reader->name."\n"; $reader->close(); unlink($filename); ?> ===DONE=== --EXPECT EXACT-- 0 books book #text book books 1 books 1 book books ===DONE=== ================================================ FILE: Testing/Tests/Xml/xmlReader/next.phpt ================================================ --TEST-- XMLReader: libxml2 XML Reader, next --SKIPIF-- --FILE-- '; $reader = new XMLReader(); $reader->XML($xmlstring); echo "[" . $reader->name . "]\n"; // Only go through $reader->read(); echo "[" . $reader->name . "]\n"; $reader->read(); echo "[" . $reader->name . "]\n"; $reader->next(); echo $reader->name; echo " "; echo $reader->getAttribute('num'); echo "\n"; ?> ===DONE=== --EXPECT EXACT-- [] [books] [book] book 2 ===DONE=== ================================================ FILE: Testing/Tests/Xml/xmlReader/read_name.phpt ================================================ --TEST-- XMLReader: libxml2 XML Reader, string data --SKIPIF-- --FILE-- Move Title 1 Location 1 Move Title 2 Location 2 '; $reader = new XMLReader(); $reader->XML($xmlstring); // Only go through while ($reader->read()) { echo $reader->name."\n"; } ?> ===DONE=== --EXPECT EXACT-- LIST LIST #text MOVIE #text TITLE #text TITLE #text ORGTITLE LOC #text LOC #text INFO #text MOVIE #text MOVIE #text TITLE #text TITLE #text ORGTITLE #text LOC #text LOC #text INFO #text MOVIE #text LIST ===DONE=== ================================================ FILE: Testing/Tests/Xml/xmlReader/relaxNG.rng ================================================ ================================================ FILE: Testing/Tests/Xml/xmlReader/relaxNG2.rng ================================================ ================================================ FILE: Testing/Tests/Xml/xmlReader/relaxNG3.rng ================================================ ================================================ FILE: Testing/Tests/Xml/xmlhandler.php ================================================ [expect php] [file] "; } public function tagEnd($parser, $name) { echo $name." ends\n
    "; } function test() { echo "Test begins\n
    \n
    "; $parser = xml_parser_create(); xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, false); xml_set_element_handler($parser, array($this,'tagStart'), array($this,'tagEnd')); $data = ' '; xml_parse($parser, $data); echo "Test ends\n
    \n
    "; } } $test = new xmltest(); $test->test(); ?> ================================================ FILE: Testing/Tests/Xml/xslt.xml ================================================ Title a1 b1 c1 a2 c2 3 b3 c3 ================================================ FILE: Testing/Tests/Xml/xslt.xsl ================================================
    ================================================ FILE: Testing/Tests/Xml/xslt001.php ================================================ [expect php] [file] importStylesheet($xsl); print "\n"; print __xml_norm($proc->transformToXml($dom)); print "\n"; ?> ================================================ FILE: Testing/Tests/Xml/xslt002.php ================================================ [expect php] [file] query("/xsl:stylesheet/xsl:output/@method"); if ($res->length != 1) { print "No or more than one xsl:output/@method found"; exit; } $res->item(0)->value = "html"; $proc->importStylesheet($xsl); print "\n"; print __xml_norm($proc->transformToXml($dom)); print "\n"; ?> ================================================ FILE: Testing/Tests/Xml/xslt003.php ================================================ [expect php] [file] importStylesheet($xsl); $proc->setParameter( "", "foo","hello world"); print "\n"; print __xml_norm($proc->transformToXml($dom)); print "\n"; ?> ================================================ FILE: Testing/Tests/Xml/xslt004.php ================================================ [expect php] [file] query("/xsl:stylesheet/xsl:output/@encoding"); if ($res->length != 1) { print "No or more than one xsl:output/@encoding found"; exit; } $res->item(0)->value = "utf-8"; $proc->importStylesheet($xsl); print "\n"; print __xml_norm($proc->transformToXml($dom)); print "\n"; ?> ================================================ FILE: Testing/Tests/Xml/xslt005.php ================================================ [expect php] [file] query("/xsl:stylesheet/xsl:output/@indent"); if ($res->length != 1) { print "No or more than one xsl:output/@indent found"; exit; } $res->item(0)->value = "yes"; $proc->importStylesheet($xsl); print "\n"; print __xml_norm($proc->transformToXml($dom)); print "\n"; ?> ================================================ FILE: Testing/Tests/Xml/xslt006.php ================================================ [expect php] [file] importStylesheet($xsl); print "\n"; $doc = $proc->transformToDoc($dom); print __xml_norm($doc->saveXML()); print "\n"; ?> ================================================ FILE: Testing/Tests/Xml/xslt007.php ================================================ [expect php] [file] importStylesheet($xsl); print "\n"; $doc = $proc->transformToUri($dom, "file://".dirname(__FILE__)."/out.xml"); print __xml_norm(file_get_contents(dirname(__FILE__)."/out.xml")); unlink(dirname(__FILE__)."/out.xml"); print "\n"; ?> ================================================ FILE: Testing/Tests/Xml/xslt010.php ================================================ [expect php] [file] load(dirname(__FILE__)."/exslt.xsl"); $proc = new xsltprocessor; $xsl = $proc->importStylesheet($dom); $xml = new DomDocument(); $xml->load(dirname(__FILE__)."/exslt.xml"); print __xml_norm($proc->transformToXml($xml)); ?> ================================================ FILE: Testing/Tests/Xml/xslt011.php ================================================ [expect php] [file] load(dirname(__FILE__)."/xslt011.xsl"); $proc = new xsltprocessor; $xsl = $proc->importStylesheet($dom); $xml = new DomDocument(); $xml->load(dirname(__FILE__)."/xslt011.xml"); $proc->registerPHPFunctions(); print __xml_norm($proc->transformToXml($xml)); function foobar($id, $secondArg = "" ) { if (is_array($id)) { return $id[0]->value . " - " . $secondArg; } else { return $id . " - " . $secondArg; } } function nodeSet($id = null) { if ($id and is_array($id)) { return $id[0]; } else { $dom = new domdocument; $dom->loadXML("this is from an external DomDocument"); return $dom->documentElement; } } function nonDomNode() { return new foo(); } class aClass { static function aStaticFunction($id) { return $id; } } ?> ================================================ FILE: Testing/Tests/Xml/xslt011.xml ================================================ This is from the Input Document ================================================ FILE: Testing/Tests/Xml/xslt011.xsl ================================================ ================================================ FILE: Testing/Tests/Xml/xslt012.php ================================================ [expect php] [file] load(dirname(__FILE__)."/xslt.xml"); if(!$dom) { echo "Error while parsing the document\n"; exit; } $xsl = new domDocument; $xsl->load(dirname(__FILE__)."/xslt012.xsl"); if(!$xsl) { echo "Error while parsing the document\n"; exit; } $proc = new xsltprocessor; if($proc === false) { echo "Error while making xsltprocessor object\n"; exit; } $proc->importStylesheet($xsl); $parameters = Array( 'foo' => 'barbar', 'foo1' => 'test', ); $proc->setParameter( "", $parameters); print "\n"; print __xml_norm($proc->transformToXml($dom)); print "\n"; ?> ================================================ FILE: Testing/Tests/Xml/xslt012.xsl ================================================
    ================================================ FILE: Testing/Tests/ext/filter/filter_var.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/ext/filter/run_v2.cmd ================================================ @echo off ..\..\..\..\Tools\PhpNetTester.exe /compiler:..\..\..\..\Deployment\Debug\phpc.exe /php:..\..\..\..\Tools\PHP\php.exe del /s *.pdb *.exe EmittedNodes.csv LibraryCalls.csv UnknownCalls.csv __input.txt Debug.log > nul pause ================================================ FILE: Testing/Tests/ext/web/parse_url #27377.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/ext/web/parse_url.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/ext/web/parse_url_at_bug.php ================================================ [expect php] [file] ================================================ FILE: Testing/Tests/run_v2.cmd ================================================ @echo off ..\..\Tools\PhpNetTester.exe /compiler:..\..\Deployment\Bin\phpc.exe /php:..\..\Tools\PHP\php.exe %* @pause @rem Deleting output and temporary files... del /s *.pdb *.exe *.log EmittedNodes.csv LibraryCalls.csv UnknownCalls.csv *.phpscript > nul ================================================ FILE: Testing/Tests/run_v2_mono.cmd ================================================ @echo off ..\..\Tools\PhpNetTester.exe "/loader:\Program Files\Mono-1.1.17\bin\mono.exe" /compiler:..\..\Deployment\Bin\phpc.exe /php:..\..\Tools\PHP\php.exe %* @pause @rem Deleting output and temporary files... del /s *.pdb *.exe *.log EmittedNodes.csv LibraryCalls.csv UnknownCalls.csv *.phpscript > nul ================================================ FILE: Tools/ChainGen/AssemblyInfo.cs ================================================ using System.Reflection; using System.Runtime.CompilerServices; // // General Information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information // associated with an assembly. // [assembly: AssemblyTitle("")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("")] [assembly: AssemblyCopyright("")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] // // Version information for an assembly consists of the following four values: // // Major Version // Minor Version // Build Number // Revision // // You can specify all the values or you can default the Revision and Build Numbers // by using the '*' as shown below: [assembly: AssemblyVersion("1.0.*")] // // In order to sign your assembly you must specify a key to use. Refer to the // Microsoft .NET Framework documentation for more information on assembly signing. // // Use the attributes below to control which key is used for signing. // // Notes: // (*) If no key is specified, the assembly is not signed. // (*) KeyName refers to a key that has been installed in the Crypto Service // Provider (CSP) on your machine. KeyFile refers to a file which contains // a key. // (*) If the KeyFile and the KeyName values are both specified, the // following processing occurs: // (1) If the KeyName can be found in the CSP, that key is used. // (2) If the KeyName does not exist and the KeyFile does exist, the key // in the KeyFile is installed into the CSP and used. // (*) In order to create a KeyFile, you can use the sn.exe (Strong Name) utility. // When specifying the KeyFile, the location of the KeyFile should be // relative to the project output directory which is // %Project Directory%\obj\. For example, if your KeyFile is // located in the project directory, you would specify the AssemblyKeyFile // attribute as [assembly: AssemblyKeyFile("..\\..\\mykey.snk")] // (*) Delay Signing is an advanced option - see the Microsoft .NET Framework // documentation for more information on this. // [assembly: AssemblyDelaySign(false)] [assembly: AssemblyKeyFile("")] [assembly: AssemblyKeyName("")] ================================================ FILE: Tools/ChainGen/ChainGen.csproj ================================================  Local 8.0.50727 2.0 {5C044685-AC6A-4A36-9C0B-BA205A0C6305} Debug AnyCPU App.ico ChainGen JScript Grid IE50 false Exe ChainGen OnBuildSuccess SAK SAK SAK SAK 3.5 v2.0 publish\ true Disk false Foreground 7 Days false false true 0 1.0.0.%2a false false true bin\Debug\ false 285212672 false DEBUG;TRACE true 4096 false false false false false 4 full prompt AllRules.ruleset bin\Release\ false 285212672 false TRACE false 4096 false true false false false 4 none prompt AllRules.ruleset System System.Data System.XML Code Code False .NET Framework 3.5 SP1 Client Profile false False .NET Framework 3.5 SP1 true False Windows Installer 3.1 true ================================================ FILE: Tools/ChainGen/MainClass.cs ================================================ using System; using System.IO; namespace ChainGen { class MainClass { static void BeginFunction() { FunctionName = "f" + Guid.NewGuid().ToString().Replace('-', 'x'); sw.WriteLine("function {0}()", FunctionName); sw.WriteLine("{{", FunctionName); sw.WriteLine("\tglobal $x, $y;"); } static void EndFunction() { sw.WriteLine("}"); sw.WriteLine("{0}();", FunctionName); sw.WriteLine(); } static void TestChain(string chain) { if (ExpressionCounter == 0) BeginFunction(); sw.WriteLine("\t$_chain = \'{0}\';", chain); if (chain.IndexOf("[]") < 0) { sw.WriteLine("\t$_var = {0};", chain); sw.WriteLine("\t$_var = A::{0};", chain); sw.WriteLine("\t_f({0});", chain); } sw.WriteLine("\t$_var =& {0};", chain); if (chain.StartsWith("$")) sw.WriteLine("\t$_var =& A::{0};", chain); sw.WriteLine("\t_fr({0});", chain); if (TEST_READ_UNKNOWN) sw.WriteLine("\t_fu({0});", chain); if (!chain.EndsWith(")")) { sw.WriteLine("\t{0} = \"_literal\";", chain); sw.WriteLine("\t{0} = $_var;", chain); sw.WriteLine("\t{0} =& $_var;", chain); int bb_index = chain.IndexOf("[]"); if (bb_index < 0 || bb_index == chain.Length - 2) { sw.WriteLine("\t_fr({0} = 1);", chain); if (TEST_READ_UNKNOWN) sw.WriteLine("\t_fu({0} = 1);", chain); } if (chain.StartsWith("$")) { sw.WriteLine("\tA::{0} = $_var;", chain); sw.WriteLine("\tA::{0} =& $_var;", chain); } if (bb_index < 0) { sw.WriteLine("\t_fr({0} += 1);", chain); if (TEST_READ_UNKNOWN) sw.WriteLine("\t_fu({0} += 1);", chain); sw.WriteLine("\tisset({0});", chain); sw.WriteLine("\tunset({0});", chain); if (chain.StartsWith("$")) { sw.WriteLine("\tisset(A::{0});", chain); sw.WriteLine("\tunset(A::{0});", chain); } } } ExpressionCounter++; if (ExpressionCounter >= CHAINS_PER_METHOD) { EndFunction(); ExpressionCounter = 0; } } static void BuildChain(string chain, bool rdlock) { int i1 = chain.IndexOf('#'); int i2 = chain.IndexOf('#', i1 + 1); if (i1 >= 0 && i2 > i1) { int len = Int32.Parse(chain.Substring(i1 + 1, i2 - i1 - 1)); // expand the non-terminal string pre = chain.Substring(0, i1); string suf = chain.Substring(i2 + 1); if (len <= 1) { BuildChain(pre + "$x" + suf, rdlock); if (!rdlock) BuildChain(pre + "$$y" + suf, true); // avoid the illegal f()[] if (suf.Length == 0 || suf[0] != '[') BuildChain(pre + "_f(0)" + suf, rdlock); } else { BuildChain(pre + "#" + (len - 1) + "#[0]" + suf, rdlock); BuildChain(pre + "#" + (len - 1) + "#->a" + suf, rdlock); if (!rdlock) BuildChain(pre + "#" + (len - 1) + "#->$x" + suf, true); if (!rdlock) BuildChain(pre + "#" + (len - 1) + "#[]" + suf, true); BuildChain(pre + "#" + (len - 1) + "#[#" + (len - 2) + "#]" + suf, true); BuildChain(pre + "#" + (len - 1) + "#->{#" + (len - 2) + "#}" + suf, true); // avoid the illegal f()[] if (suf.Length == 0 || suf[0] != '[' && !rdlock) { BuildChain(pre + "#" + (len - 1) + "#[0](#" + (len - 2) + "#)" + suf, true); BuildChain(pre + "#" + (len - 1) + "#->_f(#" + (len - 2) + "#)" + suf, true); } } } else TestChain(chain); } static StreamWriter sw; const int MAX_CHAIN_LENGTH = 5; const int CHAINS_PER_METHOD = 1; const bool TEST_READ_UNKNOWN = true; static int ExpressionCounter = 0; static string FunctionName; /// /// The main entry point for the application. /// [STAThread] static void Main(string[] args) { sw = new StreamWriter("chains.php"); sw.WriteLine(" 0) EndFunction(); sw.WriteLine("?>"); sw.Close(); } } } ================================================ FILE: Tools/ChainGen/TestChains-dbg.cmd ================================================ ..\..\Source\PhpNetCompiler\Bin\Debug\phpc bin\debug\chains.php /out:bin\debug\chains.exe ..\peverify bin\debug\chains.exe pause bin\debug\chains.exe pause ================================================ FILE: Tools/ChainGen/TestChains.cmd ================================================ ..\..\Deployment\Bin\phpc bin\debug\chains.php /out:bin\debug\chains.exe ..\peverify bin\debug\chains.exe pause bin\debug\chains.exe pause ================================================ FILE: Tools/ClassDynamizer/ClassDynamizer.csproj ================================================  Debug AnyCPU 8.0.50727 2.0 {C066E66F-321F-45C6-BCE3-F09DAABA8E9F} Exe Properties ClassDynamizer ClassDynamizer SAK SAK SAK SAK OnOutputUpdated 3.5 v2.0 publish\ true Disk false Foreground 7 Days false false true 0 1.0.0.%2a false false true true full false bin\Debug\ DEBUG;TRACE prompt 4 AllRules.ruleset pdbonly true bin\Release\ TRACE prompt 4 AllRules.ruleset False ..\ICSharpCode.NRefactory.dll False .NET Framework 3.5 SP1 Client Profile false False .NET Framework 3.5 SP1 true False Windows Installer 3.1 true copy "$(TargetPath)" "$(SolutionDir)" exit /B 0 ================================================ FILE: Tools/ClassDynamizer/Convertor.cs ================================================ using System; using System.Text; using System.Collections; using System.Collections.Generic; using ICSharpCode.NRefactory.Parser.AST; namespace ClassDynamizer { static class Convertor { /// /// Generates code that converts an object to the target type. /// public static Expression ConvertTo(string name, Expression value, TypeReference targetType, BlockStatement blockStatement, Statement failStmt, bool allowNull, bool isOptional, int seqNum) { if (Utility.IsType(targetType, "System.Object")) { // no conversion needed return value; } string temp_local_name = String.Format("tmp{0}", seqNum); // create the "conversion failed" block ArrayList parameters = new ArrayList(); parameters.Add(value); parameters.Add(new PrimitiveExpression(targetType.Type, targetType.Type)); parameters.Add(new PrimitiveExpression(name, name)); // the statements to execute when the cast failed BlockStatement fail_block = new BlockStatement(); fail_block.AddChild(new StatementExpression(new InvocationExpression(new FieldReferenceExpression( new TypeReferenceExpression("PhpException"), "InvalidImplicitCast"), parameters))); fail_block.AddChild(failStmt); // try to determine whether the target type is a reference or value type Type system_type = Type.GetType(targetType.SystemType); if (system_type != null && system_type.IsValueType) { // value type LocalVariableDeclaration temp_local; if (isOptional) { temp_local = new LocalVariableDeclaration(targetType); temp_local.Variables.Add(new VariableDeclaration(temp_local_name)); blockStatement.AddChild(temp_local); BlockStatement new_block_stmt = new BlockStatement(); IfElseStatement opt_stmt = new IfElseStatement(new BinaryOperatorExpression( value, BinaryOperatorType.InEquality, new FieldReferenceExpression( new IdentifierExpression("Arg"), "Default")), new_block_stmt, new StatementExpression(new AssignmentExpression(new IdentifierExpression(temp_local_name), AssignmentOperatorType.Assign, new ObjectCreateExpression(targetType, new ArrayList())))); blockStatement.AddChild(opt_stmt); blockStatement = new_block_stmt; } IfElseStatement if_stmt = new IfElseStatement(new UnaryOperatorExpression( new ParenthesizedExpression(new BinaryOperatorExpression(value, BinaryOperatorType.TypeCheck, new TypeReferenceExpression(targetType))), UnaryOperatorType.Not), fail_block); blockStatement.AddChild(if_stmt); if (isOptional) { blockStatement.AddChild(new StatementExpression(new AssignmentExpression( new IdentifierExpression(temp_local_name), AssignmentOperatorType.Assign, new CastExpression(targetType, value)))); return new IdentifierExpression(temp_local_name); } else return new CastExpression(targetType, value); } else { // probably a reference type LocalVariableDeclaration temp_local = new LocalVariableDeclaration(targetType); blockStatement.AddChild(temp_local); if (isOptional) { // first check for Arg.Default temp_local.Variables.Add( new VariableDeclaration(temp_local_name, new PrimitiveExpression(null, String.Empty))); BlockStatement new_block_stmt = new BlockStatement(); IfElseStatement opt_stmt = new IfElseStatement(new BinaryOperatorExpression( value, BinaryOperatorType.InEquality, new FieldReferenceExpression( new IdentifierExpression("Arg"), "Default")), new_block_stmt); blockStatement.AddChild(opt_stmt); blockStatement = new_block_stmt; // then perform the as-cast blockStatement.AddChild(new StatementExpression(new AssignmentExpression( new IdentifierExpression(temp_local_name), AssignmentOperatorType.Assign, CreateAsCastExpression(value, targetType)))); } else { // perform the as-cast temp_local.Variables.Add( new VariableDeclaration(temp_local_name, CreateAsCastExpression(value, targetType))); } IfElseStatement if_stmt = new IfElseStatement(new BinaryOperatorExpression( new IdentifierExpression(temp_local_name), BinaryOperatorType.Equality, new PrimitiveExpression(null, String.Empty)), fail_block); if (allowNull) { // throw only if the value is not of targetType and not null if_stmt.Condition = new BinaryOperatorExpression(if_stmt.Condition, BinaryOperatorType.LogicalAnd, new BinaryOperatorExpression( value, BinaryOperatorType.InEquality, new PrimitiveExpression(null, String.Empty))); } blockStatement.AddChild(if_stmt); return new IdentifierExpression(temp_local_name); } } private static Expression CreateAsCastExpression(Expression value, TypeReference targetType) { if (Utility.IsType(targetType, "System.String")) { // create special PhpVariable.AsString invocation expression return new InvocationExpression(new FieldReferenceExpression(new IdentifierExpression("PhpVariable"), "AsString"), new ArrayList(new object[] { value })); } else { return new BinaryOperatorExpression( value, BinaryOperatorType.AsCast, new TypeReferenceExpression(targetType)); } } } } ================================================ FILE: Tools/ClassDynamizer/Dynamizer.cs ================================================ using System; using System.Text; using ICSharpCode.NRefactory.Parser.AST; using System.Collections; using System.Collections.Generic; namespace ClassDynamizer { class Dynamizer { /// /// Dynamizes a given compile unit. /// public CompilationUnit Dynamize(CompilationUnit unit) { CompilationUnit out_unit = new CompilationUnit(); // add Phalanger imports Utility.AddImport(unit, out_unit, "PHP.Core"); Utility.AddImport(unit, out_unit, "PHP.Core.Reflection"); foreach (INode node in unit.Children) { // add all original imports if (node is UsingDeclaration) out_unit.Children.Add(node); // process namespaces NamespaceDeclaration ns_decl = node as NamespaceDeclaration; if (ns_decl != null) { NamespaceDeclaration out_ns_decl = new NamespaceDeclaration(ns_decl.Name); out_unit.Children.Add(out_ns_decl); foreach (INode subnode in ns_decl.Children) { TypeDeclaration type_decl = subnode as TypeDeclaration; if (type_decl != null) { type_decl = Dynamize(type_decl); if (type_decl != null) out_ns_decl.Children.Add(type_decl); } } } // as well as top-level types without namespaces TypeDeclaration bare_type_decl = node as TypeDeclaration; if (bare_type_decl != null) { bare_type_decl = Dynamize(bare_type_decl); if (bare_type_decl != null) out_unit.Children.Add(bare_type_decl); } } return out_unit; } /// /// Dynamizes a given type. /// private TypeDeclaration Dynamize(TypeDeclaration type) { if (!Utility.IsDecoratedByAttribute(type, "PHP.Core.ImplementsType")) return null; TypeDeclaration out_type = new TypeDeclaration(type.Modifier, new List()); out_type.Name = type.Name; AddSerializibility(type, out_type); FixInheritance(type, out_type); DynamizeMembers(type, out_type); return out_type; } #region Serializibility & Inheritance /// /// Makes sure that the PHP-visible type is serializable. /// private void AddSerializibility(TypeDeclaration type, TypeDeclaration outType) { // make the type serializable if (!Utility.IsDecoratedByAttribute(type, "System.SerializableAttribute")) { AttributeSection section = new AttributeSection(); section.Attributes.Add(new ICSharpCode.NRefactory.Parser.AST.Attribute("Serializable", null, null)); outType.Attributes.Add(section); ConstructorDeclaration ctor = new ConstructorDeclaration(type.Name, ((type.Modifier & Modifier.Sealed) == Modifier.Sealed ? Modifier.Private : Modifier.Protected), new List(), null); ctor.Parameters.Add( new ParameterDeclarationExpression(new TypeReference("System.Runtime.Serialization.SerializationInfo"), "info")); ctor.Parameters.Add( new ParameterDeclarationExpression(new TypeReference("System.Runtime.Serialization.StreamingContext"), "context")); ctor.ConstructorInitializer = new ConstructorInitializer(); ctor.ConstructorInitializer.ConstructorInitializerType = ConstructorInitializerType.Base; ctor.ConstructorInitializer.Arguments.Add(new IdentifierExpression("info")); ctor.ConstructorInitializer.Arguments.Add(new IdentifierExpression("context")); ctor.Body = new BlockStatement(); outType.AddChild(ctor); } } /// /// Makes sure that the PHP-visible type derives from PhpObject and adds appropriate constructors. /// private void FixInheritance(TypeDeclaration type, TypeDeclaration outType) { // make the type inherit from PhpObject bool has_base = false; foreach (TypeReference base_type in type.BaseTypes) { // TODO: base this decision on an attribute? if (!base_type.Type.StartsWith("I") && !base_type.Type.StartsWith("SPL.")) { has_base = true; break; } } if (!has_base) outType.BaseTypes.Add(new TypeReference("PhpObject")); // add the necessary constructors bool has_short_ctor = false; bool has_long_ctor = false; BlockStatement default_ctor_body = null; foreach (INode member in type.Children) { ConstructorDeclaration ctor = member as ConstructorDeclaration; if (ctor != null) { if (ctor.Parameters.Count == 2 && Utility.IsType(ctor.Parameters[0].TypeReference, "PHP.Core.ScriptContext")) { if (Utility.IsType(ctor.Parameters[1].TypeReference, "System.Boolean")) has_short_ctor = true; if (Utility.IsType(ctor.Parameters[1].TypeReference, "PHP.Core.Reflection.DTypeDesc")) has_long_ctor = true; } else if (ctor.Parameters.Count == 0) { default_ctor_body = ctor.Body; } } } if (!has_short_ctor) { ConstructorDeclaration ctor = new ConstructorDeclaration(type.Name, Modifier.Public, new List(), null); ctor.Parameters.Add(new ParameterDeclarationExpression(new TypeReference("ScriptContext"), "context")); ctor.Parameters.Add(new ParameterDeclarationExpression(new TypeReference("Boolean"), "newInstance")); ctor.ConstructorInitializer = new ConstructorInitializer(); ctor.ConstructorInitializer.ConstructorInitializerType = ConstructorInitializerType.Base; ctor.ConstructorInitializer.Arguments.Add(new IdentifierExpression("context")); ctor.ConstructorInitializer.Arguments.Add(new IdentifierExpression("newInstance")); if (default_ctor_body == null) ctor.Body = new BlockStatement(); else ctor.Body = default_ctor_body; Utility.MakeNonBrowsable(ctor); outType.AddChild(ctor); } if (!has_long_ctor) { ConstructorDeclaration ctor = new ConstructorDeclaration(type.Name, Modifier.Public, new List(), null); ctor.Parameters.Add(new ParameterDeclarationExpression(new TypeReference("ScriptContext"), "context")); ctor.Parameters.Add(new ParameterDeclarationExpression(new TypeReference("DTypeDesc"), "caller")); IdentifierExpression context_param = new IdentifierExpression("context"); IdentifierExpression caller_param = new IdentifierExpression("caller"); ctor.ConstructorInitializer = new ConstructorInitializer(); ctor.ConstructorInitializer.ConstructorInitializerType = ConstructorInitializerType.This; ctor.ConstructorInitializer.Arguments.Add(context_param); ctor.ConstructorInitializer.Arguments.Add(new PrimitiveExpression(true, String.Empty)); InvocationExpression invocation = new InvocationExpression( new FieldReferenceExpression(new ThisReferenceExpression(), "InvokeConstructor"), new ArrayList()); invocation.Arguments.Add(context_param); invocation.Arguments.Add(caller_param); ctor.Body = new BlockStatement(); ctor.Body.AddChild(new StatementExpression(invocation)); Utility.MakeNonBrowsable(ctor); outType.AddChild(ctor); } } #endregion /// /// Adds argfull and argless stubs for all PHP visible members. /// private void DynamizeMembers(TypeDeclaration type, TypeDeclaration outType) { List populate_statements = new List(); foreach (INode member in type.Children) { AttributedNode node = member as AttributedNode; if (node != null && Utility.IsDecoratedByAttribute(node, "PHP.Core.PhpVisibleAttribute")) { MethodDeclaration method_decl; PropertyDeclaration prop_decl; if ((method_decl = member as MethodDeclaration) != null) { populate_statements.Add(DynamizeMethod(method_decl, outType)); } else if ((prop_decl = member as PropertyDeclaration) != null) { populate_statements.Add(DynamizeProperty(prop_decl, outType)); } else throw new InvalidOperationException("PhpVisible applied to invalid member"); } } // add the __PopulateTypeDesc method MethodDeclaration populator = new MethodDeclaration( "__PopulateTypeDesc", Modifier.Private | Modifier.Static, new TypeReference("void", "System.Void"), new List(), null); populator.Parameters.Add(new ParameterDeclarationExpression(new TypeReference("PhpTypeDesc"), "desc")); populator.Body = new BlockStatement(); foreach (Statement stmt in populate_statements) { if (stmt != null) populator.Body.AddChild(stmt); } outType.AddChild(populator); } #region Method dynamization /// /// Adds stubs for a PhpVisible method. /// private Statement DynamizeMethod(MethodDeclaration method, TypeDeclaration outType) { bool has_this; MethodDeclaration argfull = CreateArgfull(method, false, out has_this); if (has_this) { outType.AddChild(argfull); argfull = CreateArgfull(method, true, out has_this); } outType.AddChild(argfull); MethodDeclaration argless = CreateArgless(method); outType.AddChild(argless); // return an expression to be put to __PopulateTypeDesc ArrayList parameters = new ArrayList(); parameters.Add(new PrimitiveExpression(method.Name, method.Name)); parameters.Add(Utility.ModifierToMemberAttributes(argfull.Modifier)); ArrayList del_params = new ArrayList(); del_params.Add(new FieldReferenceExpression( new TypeReferenceExpression(((TypeDeclaration)method.Parent).Name), method.Name)); parameters.Add(new ObjectCreateExpression(new TypeReference("RoutineDelegate"), del_params)); return new StatementExpression(new InvocationExpression( new FieldReferenceExpression(new IdentifierExpression("desc"), "AddMethod"), parameters)); } /// /// Creates an argfull stub for the specified implementation method. /// private MethodDeclaration CreateArgfull(MethodDeclaration template, bool skipThisParams, out bool hasThisParams) { hasThisParams = false; MethodDeclaration method = new MethodDeclaration(template.Name, template.Modifier, new TypeReference("Object"), new List(), new List()); method.Body = new BlockStatement(); Expression[] arguments = new Expression[template.Parameters.Count]; // prepend a ScriptContext parameter and make all parameters Objects // (TODO: PhpReferences for ref parameters) method.Parameters.Add(new ParameterDeclarationExpression(new TypeReference("ScriptContext"), "__context")); int arg_counter = 0; foreach (ParameterDeclarationExpression param in template.Parameters) { ParameterDeclarationExpression new_param = new ParameterDeclarationExpression(new TypeReference("Object"), param.ParameterName); bool optional = false; if (Utility.IsDecoratedByAttribute(param.Attributes, Utility.OptionalAttrType)) { AttributeSection section = new AttributeSection(); new_param.Attributes.Add(section); section.Attributes.Add(new ICSharpCode.NRefactory.Parser.AST.Attribute(Utility.OptionalAttrType, null, null)); optional = true; } bool this_param = Utility.IsDecoratedByAttribute(param.Attributes, "PHP.Core.ThisAttribute"); if (this_param) hasThisParams = true; if (this_param && skipThisParams) { arguments[arg_counter++] = new PrimitiveExpression(null, String.Empty); } else { // generate conversion arguments[arg_counter++] = Convertor.ConvertTo( template.Name, new IdentifierExpression(param.ParameterName), param.TypeReference, method.Body, new ReturnStatement(new PrimitiveExpression(null, String.Empty)), Utility.IsDecoratedByAttribute(param.Attributes, "PHP.Core.NullableAttribute") || this_param, optional, arg_counter); method.Parameters.Add(new_param); } } // invoke the template method InvocationExpression invocation = new InvocationExpression(new IdentifierExpression(template.Name), new ArrayList(arguments)); if (template.TypeReference.SystemType == "System.Void") { method.Body.AddChild(new StatementExpression(invocation)); method.Body.AddChild(new ReturnStatement(new PrimitiveExpression(null, String.Empty))); } else method.Body.AddChild(new ReturnStatement(invocation)); if (!hasThisParams || skipThisParams) Utility.MakeNonBrowsable(method); return method; } /// /// Creates an argless stub for the specified implementation method. /// private MethodDeclaration CreateArgless(MethodDeclaration template) { MethodDeclaration method = new MethodDeclaration(template.Name, Modifier.Public | Modifier.Static, new TypeReference("Object"), new List(), new List()); method.Parameters.Add(new ParameterDeclarationExpression(new TypeReference("Object"), "instance")); method.Parameters.Add(new ParameterDeclarationExpression(new TypeReference("PhpStack"), "stack")); method.Body = new BlockStatement(); // stack.CalleeName =